PYTHON

[NLP③] 데이터 병합 및 INT화

한번해보즈아 2022. 7. 4. 19:33

저번에 수집했던 전처리한 데이터를 하나의 데이터 프레임으로 만든후 각 데이터를 비교해보이는 EDA를 시행해보겠습니다.

import pandas as pd
df1 = pd.read_csv('baecksansoo.csv')
df2 = pd.read_csv('isis.csv')
df3 = pd.read_csv('mongbest.csv')
df4 = pd.read_csv('samdasoo.csv')
df5 = pd.read_csv('seoksoo.csv')
df6 = pd.read_csv('sparkle.csv')

# unnamed :0 열이 생겨서 제거작업
df1.drop(['Unnamed: 0'], axis = 1, inplace = True)
df2.drop(['Unnamed: 0'], axis = 1, inplace = True)
df3.drop(['Unnamed: 0'], axis = 1, inplace = True)
df4.drop(['Unnamed: 0'], axis = 1, inplace = True)
df5.drop(['Unnamed: 0'], axis = 1, inplace = True)
df6.drop(['Unnamed: 0'], axis = 1, inplace = True)

#데이터 병합 및 새 인덱스 부여
df = pd.concat([df1,df2,df3,df4,df5,df6], ignore_index=True)
print(df)
      type category                          review star
0      백산수       별점  타 상품에 비교해도 물 맛도 좋고 가격면에서도 만족해요  평점5
1      백산수       별점         좋아요 포인트까지해서 저렴학 잘 구매했어요  평점5
2      백산수       별점         가격도 저렴하고 배송도 빨라서 만족스러워요  평점5
3      백산수       별점         아기 배앓이에 좋다고해서 백산수만 먹여요   평점5
4      백산수       별점          생수계의 원탑이라 들었습니다 믈맛 좋아요  평점5
...    ...      ...                             ...  ...
11854  스파클       별점       주기적으로 매번 잘 시켜 마시고 있어요 좋아요  평점5
11855  스파클       별점             최저가 개이득 다먹으면 또 시킬게요  평점5
11856  스파클       별점            깨끘하고 담백한 스파클언제나 감사해요  평점5
11857  스파클       별점            빠른배송과 저렴해서 꾸준히 구매합니다  평점5
11858  스파클       별점            항상 여유있게 시켜놓고 먹으니 편해요  평점5

[11859 rows x 4 columns]

6개의 브랜드의 후기를 각 2,000개씩 수집했지만 전처리 과정에서 141개의 리뷰가 제거된것을 확인할수있습니다. 그 다음 'star' 열에있는 데이터는 문자+숫자 형태라 문자를 제거 해주고 int로 인식을 할 수 있게 처리해줍니다.

 

# "평점5" -> "5" 숫자만 추출
df['star'] = df['star'].str.replace("[^0-9]","")
# int로 변환
df['star'] = pd.to_numeric(df['star'])

df.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 11859 entries, 0 to 11858
Data columns (total 4 columns):
 #   Column    Non-Null Count  Dtype 
---  ------    --------------  ----- 
 0   type      11859 non-null  object
 1   category  11859 non-null  object
 2   review    11857 non-null  object
 3   star      11859 non-null  int64 
dtypes: int64(1), object(3)
memory usage: 370.7+ KB

 

'star'열의 부분만 int64 타입으로 바뀐것을 확인할수있습니다. 아직 토크나이저 전이기 때문에 EDA하기에는 한정적인 데이터 형식입니다 . 이번에는 간단히 type 별로 star의 평균값 정도 구할수 있을거같습니다.

 

df.groupby('type').mean('star')


star
type	
몽베스트	4.841000
백산수	4.794486
삼다수	4.718534
석수	4.833082
스파클	4.898449
아이시스	4.822378

 

스파클이 제일높고, 삼다수가 제일 낮은것을 확인할수 있습니다.

# 글꼴 깨짐 방지 맟 평점 분포 확인
import seaborn as sns
import matplotlib.pyplot as plt

plt.rc("font", family = "Malgun Gothic")
sns.set(font="Malgun Gothic", 
rc={"axes.unicode_minus":False}, style='darkgrid')
sns.countplot(df['star'])

df['star'].value_counts().sort_values(ascending=False) / df['star'].count()
5    0.871406
4    0.094274
3    0.023695
1    0.007505
2    0.003120
Name: star, dtype: float64

 

평점 분포도와 분포비율을 구하였습니다 . 5점이 압도적으로 많은것을 확인할수있습니다