PYTHON

[NLP②] 네이버 쇼핑 리뷰 전처리

한번해보즈아 2022. 6. 26. 19:31

이번에는 저번시간에 수집했던 리뷰데이터를 전처리 해보도록하겠습니다. 일반적인 전처리의 범위는 중복제거, 결측치 제거, 특수문자 제거 등이 있으며 리뷰를 의미있는 최소한의 단위로 쪼개서 품사를 태깅하는 행위를 형태소분석 및 토크나이징이라고 하는데 이건 다음 시간에 하도록 하고 이번에는 중복제거, 특수문자 제거 등의 처리를 해보겠습니다.

 

참고로 이 데이터는 저번시간에 수집한 네이버 쇼핑 리뷰를 사용하여 이어나가보도록 하겠습니다.

df4=add_dataframe(name_,category_,reviews,stars,cnt)
df4

df4.info()
<class 'pandas.core.frame.DataFrame'>
Int64Index: 2000 entries, 1 to 2000
Data columns (total 4 columns):
 #   Column    Non-Null Count  Dtype 
---  ------    --------------  ----- 
 0   type      2000 non-null   object
 1   category  2000 non-null   object
 2   review    2000 non-null   object
 3   star      2000 non-null   object
dtypes: object(4)
memory usage: 78.1+ KB

df4.isnull().sum()
type        0
category    0
review      0
star        0
dtype: int64

총 2,000개의 리뷰가 수집되었으며 결측치는 없는것을 확인할수있습니다. 또한,  수집한 데이터를 살펴보면 빨간색으로 표시한곳에서 보이다시피 특수문자, 이스케이프 문자등이 있는것을 알 수 있습니다. 이스케이프 문자가 어떤건지 모르시는분은 다음 페이지에 기술해뒀습니다.

 

https://jinuk.tistory.com/37

 

[정규식] re 라이브러리

정규식이란 영어 소문자, 대문자, 한글등 자연어 처리를 하기 위해서 사용되는 개념으로 파이썬에서는 re 라이브러리를 이용해서 주로 처리한다 import re p = re.compile(r'[a-z]+') m=p.match("python") print(m.

jinuk.tistory.com

 

# review 한글과 공백을 제외하고 모두 제거
df4['review'] = df4['review'].str.replace("[^ㄱ-ㅎㅏ-ㅣ가-힣a-zA-Z ]","")
df4['review'].replace('', np.nan, inplace=True)

print(df4.isnull().sum())
type        0
category    0
review      0
star        0
dtype: int64

df4.info()
<class 'pandas.core.frame.DataFrame'>
Int64Index: 2000 entries, 1 to 2000
Data columns (total 4 columns):
 #   Column    Non-Null Count  Dtype 
---  ------    --------------  ----- 
 0   type      2000 non-null   object
 1   category  2000 non-null   object
 2   review    2000 non-null   object
 3   star      2000 non-null   object
dtypes: object(4)
memory usage: 78.1+ KB

영어, 한글, 공백을 제외한 모든 문자를 ""값으로 바꾸고 빈칸인 모든값을 nan값으로 바꿔준 다음 결측치값을 확인해봐도 없는것을 알 수 있습니다. 위에 결측치값을 확인했지만 이러한 방식으로 다시 확인하는 이유는 가끔 빈칸을 결측치로 인식하는게 아닌경우가 있기 때문입니다.

 

# review 중복 제거
df4 = df4.drop_duplicates('review', keep='first').reset_index(drop=True)
df4.info


<bound method DataFrame.info of       type category                                             review star
0     몽베스트       별점  타 브랜드 제품에 비해 갈증이 덜한거같아서 재구매했어용 라벨이 없어 분리수거 하기에편해요  평점5
1     몽베스트       별점  저번엔 플라스틱이 너무 얇아서 칼로 바깥비닐 열려고 했는데 물이 나와 깜짝 이번엔 ...  평점5
2     몽베스트       별점           항상 생수는 몽샵에서 구입해요 깜빡하고 늦게 시켜도 배송도 빠르고 좋아요  평점5
3     몽베스트       별점                    무라벨이라 환경을 생각하는 점이 매우 좋고 물맛도 좋아요  평점5
4     몽베스트       별점                      물맛도 다 다르구나 자취하면서 알게되었네욬ㅋㅋ맛잇어요  평점5
...    ...      ...                                                ...  ...
1995  몽베스트       별점      배송도 빠르고 너무 좋아요택배 기사님께 죄송하지만 많이 시키고 싶을 정도로 좋아요  평점5
1996  몽베스트       별점               처음 시켜봅니다 배송 빠르고 좋네요저렴하게 잘산거 같네요감사합니다  평점5
1997  몽베스트       별점                                         좋아요  재구매 각  평점5
1998  몽베스트       별점  물을 많이 마시다보니 집에서까지 짜리로 먹기엔쓰레기가 넘 많이 나와 부담이라리터가 ...  평점5
1999  몽베스트       별점             친정집에 사드렸어요 마트에서는 배달불가라 배송기사님 넘 수고 하셨네요  평점5

[2000 rows x 4 columns]>

df4.to_csv('mongbest.csv')

마지막으로 혹시 수집과정에서 중복이 발생할수도 있으니 위와같이 중복제거처리를 해줍니다. 다행히 중복은 없습니다.

최종적으로 데이터를 csv 형태로 저장해줍니다