세조목

최종 프로젝트 11일~12일차(24.04.06~07) 본문

데이터 분석 공부/프로젝트

최종 프로젝트 11일~12일차(24.04.06~07)

세조목 2024. 4. 7. 21:23

최종 프로젝트 11일, 12일차입니다.

토요일인 어제와 오늘은 크롤링 작업을 이어나갔습니다.

 

10일차 포스팅에서 설명했던 리뷰 텍스트 더보기 이슈 관련해서 코드를 수정한 후

크롤링에 소요되는 시간이 훨씬 늘어났는데 1페이지당 3시간 정도 소요됐습니다.

 * 리뷰 텍스트 더보기 이슈 관련 내용은 아래 포스팅 참고

2024.04.05 - [데이터 분석 공부/프로젝트] - 최종 프로젝트 10일차(24.04.05)

 

최종 프로젝트 10일차(24.04.05)

최종 프로젝트 10일차입니다. 오전에 팀원들과 어제 못다한 얘기를 가지고서 회의를 진행했습니다. 특성 정하기 Chat GPT 활용한 리뷰 긍/부정 및 특성별 점수 매기기 샘플 테스트 RAG 이야기 주제

eyeoftheworld1209.tistory.com

 

총 8개 구당 각각 네이버 지도 6개 페이지가 있었으니

어림잡아 144시간, 6일 정도 소요될 예정이었습니다.

다행히 팀원 중 한 명의 컴퓨터 성능이 상당히 좋아서

어제 오후 중 네이버 지도 크롤링 작업은 끝낼 수 있었습니다.

아직 구글과 카카오 크롤링 작업이 진행 중이었기때문에

저는 카카오 크롤링 작업을 거들었습니다.

카카오 작업을 맡고 있던 팀원에게 듣기로는 대략 12시간 정도 소요될꺼라고 해서

어제 밤에 돌려놓고 잤습니다.

 

자고 일어나니 여전히 크롤링 작업은 진행중이었고,

오후 3시 정도가 되어서야 끝이 났습니다.

 * 그래도 생각했던것보다 일찍 끝나서 의외였습니다.

 

GitHub에 csv파일을 올려둔 후

저는 네이버 파일 전처리를 시작했습니다.

다른 팀원이 작업한 네이버 크롤링 csv파일은

아직 Git에 올라와 있지 않아서 일단 종로구만 작업했습니다.

 

  1. 파일 합치기
  2. 불필요한 컬럼 지우기
  3. '구'까지만 존재하는 주소 컬럼 만들기
  4. 개행을 띄워쓰기로 replace
  5. '파리바게뜨', '뚜레쥬르' 행 삭제

이렇게 다섯가지 작업을 진행했습니다.

 

1. 파일 합치기

# 파일 합치기
df1 = pd.read_csv("N:/개인/DA/Python/크롤링/종로구 빵_1page_naver.csv")
df2 = pd.read_csv("N:/개인/DA/Python/크롤링/종로구 빵_2page_naver.csv")
df3 = pd.read_csv("N:/개인/DA/Python/크롤링/종로구 빵_3page_naver.csv")
df4 = pd.read_csv("N:/개인/DA/Python/크롤링/종로구 빵_4page_naver.csv")
df5 = pd.read_csv("N:/개인/DA/Python/크롤링/종로구 빵_5page_naver.csv")
df6 = pd.read_csv("N:/개인/DA/Python/크롤링/종로구 빵_6page_naver.csv")

df = pd.concat([df1, df2])
df = pd.concat([df, df3])
df = pd.concat([df,df4])
df = pd.concat([df,df5])
df = pd.concat([df,df6])

 

2. 불필요한 컬럼 지우기

# 불필요한 컬럼 지우기
df.drop('Unnamed: 0', axis=1, inplace=True)
df.reset_index(drop=True, inplace=True)

 

3. '구'까지만 존재하는 주소 컬럼 만들기

# '구' 까지만 존재하는 주소 컬럼 만들기
def slice_to_gu(address):
    gu_index = address.find('구') + 1 # find 함수를 사용하면 '구'가 몇 번째 위치에 있는지 알 수 있음
    if gu_index:
        return address[:gu_index]
    else:
        return address

df['Addr'] = df['Address'].apply(lambda x: slice_to_gu(x))

df = df[['Platform', 'Number', 'Store', 'Address', 'Addr', 'Review_score', 'Review_counts', 'ID', 'Date', 'Review_text', 'Time']]

 

4. 개행(new line)을 띄워쓰기로 replace

# 개행을 띄워쓰기로 replace
def to_str(text):
    text = str(text)
    return text

def remove_newline(text):
    text = text.replace("\n", "" "")
    return text

df['Review_text'] = df['Review_text'].apply(lambda x : to_str(x))

df['Review_text'] = df['Review_text'].apply(lambda x : remove_newline(x))

 

5. '파리바게뜨', '뚜레쥬르' 행 삭제

df = df[~df['Store'].str.contains('파리바게뜨')]
df = df[~df['Store'].str.contains('뚜레쥬르')]

 

모든 플랫폼의 데이터셋을 합친 후 진행해야하는

Review컬럼의 None값 전처리는 진행하지 않았습니다.

 

내일 네이버 크롤링 작업을 도와주었던 팀원으로부터

다른 '구'의 데이터셋을 공유받으면 전처리를 마저 진행하고,

모든 플랫폼 데이터셋을 합친 후에 Review 컬럼 None값 전처리도 함께 진행할 예정입니다.