TIL 82일차 : sleep 이슈 해결, 목표는 4년치 수집

2024. 3. 11. 00:06회고/TIL(매일)

 

✏️도전한 점


1. 데이터 수집하고 또 더 많이 수집하기

2. time.sleep을 적시적소에 사용하기

3. 데이터 전처리하고 또 전처리 하기

 

01 create view와 CTE의 차이점은?


- 쉬프트 엔터(실행)를 누르는 순간 with문은 사라진다.

- create veiw는 테이블을 만드는데 중간단계, 가상 테이블이라고 생각한다.

- 이번엔 사용할 건데 다음엔 모르겠어~라는 의미와 상통한다.

- 데이터 너무 많을 때 중간에 한 번 뭐 만드는 단계로 유용하다.

- 가상의 테이블이니까 "보안" 이슈에 매우 큰 강점이 있다.
- 대신 뷰는 데이터를 갱신하고 삽입하는데 어려움이 있을 수 있다.
- 실무에서는 쿼리의 최적화 고려해서 저절로 뷰를 많이 쓰게 될거다.
- 같은 결과물이라도 짠 쿼리 길이가 다를 수 있다.
- 나중엔 자연히 쿼리 최적화 작업을 하게 될 거다.
- ex) distinct문이 오래 걸릴 수 있다. 나중에 가서 두 번 이상은 또 고민할 듯!!

 

02 문제 해결: 어떻게 하면 노가다를 덜 할까?


# 아 이거 왜 안잡혀ㅠㅠ > 예외처리 구문으로 해결!

for i in review_cnt:
    if i == nan:

 

# SQL처럼  '분철%'는 안되네;

try:
    if '#' not in i:
        i = nan
        print(i)


- 크롤링 자체를 예쁘게 그리는 대시보드

- 베스트셀러가 한눈에 보이는 대시보드

- 베셑 현황, 루키, 루키현황 의사결정트리 (3장)

- 루키 찾기 : 생각한 4~5개 기준의 루키찾기
- 하고 싶은 방향을 설정하고 도와주세요로 상담
- 태블로 퍼블릭 대시보드 참고하기

# 문자열 쪼개는 방법

yest24_review_split[1]
.str.split(')', expand=True)

expand=True 매개변수는 결과를 데이터프레임으로 반환하도록 지정한다.

 

# 결측치 처리 방법

‘’ 또는 None로 처리하기
data[data[‘review’].isna()]
data[‘review’].isna()
data[‘review’][data[‘review’].isna()] = ‘없는 리뷰’


- 루키가 될 확률 수치로 (도전!)
- 100위 안에든 키워드만 카운트 (도전!)
- 교보 키워드 pick, 예스 2년치 키워드, 알라딘 세부분류 2년 (도전!)

 

# 전역 변수를 잘 사용하는 방법

for i in range(1, 13):
    print(globals()[f"df_{i}"].shape)

 

# inplace=True는 데이터프레임을 직접 수정하는 데 사용되는 매개변수이다.

df_1.set_index('date', inplace=True)

file_path = "C:\\First-sean-project\\toy_kyobo_1year\\2024-02.xlsx"

df_1 = pd.read_excel(file_path, engine='openpyxl')

df_1['date'] = '2024-02'

df_1.rename(columns={'순위': 'ranking'}, inplace=True)

df_1 = df_1[['date', 'ranking', 'title', 'writer', 'press', 'category']]


# str find 문자열 함수 사용해서 찾기 (소현 튜터님)


# find 예제 (소현 튜터님)
print("3. str.find('찾을 문자', 시작 index, 끝 index)")
result7 = str.find('o')
result8 = str.find('o', 5, 11)  # "DMask B"

# 소현튜터님 SQLD 반짝 정리
1. 본인이 짠 쿼리를 잘 확인할 수 있는 것은 "left join"이다.
2. case when 가장 첫번째 조건이 필터의 기준이기에 남은 애들을 기준으로 연산된다.
3. from > where > group by > having > select > order by 작동순서

 

# replace 사용해보기

book2 = book.copy()
book2['category'] =book2['category'].str.replace('국내도서-', '')
book2['category'].unique()

- 소셜 미디어에서 언급 횟수를 크롤링하는 것
1. api사용 2. 웹 스크래이핑 (배워보고 싶다.)

크롤링할 때 들어가서 크롤링하고 다시 나오는 걸 쉽게 하는 방법
- back을 치면 다시 나올 수 있는데 다시 제목이 안눌리는 구나?

- 저자에서 저자 이름만 남기는 방법 : repalce()

 

# 데이터프레임 전치
result_df = pd.DataFrame(col_list, index = url_name).T

 

# 정규 표현식 복습하기

pattern5 = r'\([^\)]+\s블랙에디션\)'
t2['Title'] = t2['Title'].str.replace(pattern5, '', regex=True)

 

pattern6 = r'\([^)]*\)'
t2['Title'] = t2['Title'].str.replace(pattern6, '', regex=True)

- 마지막 코드는 예외처리로 바꿀 수 있나? : 4년치 하면서 해봄.
- 저기에 람다를 쓰는 이유는? 람다도 함수식이기 때문이다.

 

# 이건 왜 되지? 데이터의 길이가 맞지 않아서 생긴 문제로 보인다.
ml_Data['Y'] = ml_Data['ranking'].apply(lambda x: x[1])
ml_Data['last_rank'] = ml_Data['ranking'].apply(lambda x: x[0])