교수님 피드백
긍정 비율 결과물
부정 비율 결과물
from Local_ver import *
from Frequency_Analysis import *
#0. 데이터 읽어들이기
#함수 변수로 쓸만한 것
filename = '(표제화)스타벅스.csv'
if filename[-3:]=='csv':
df = pd.read_csv(filename)
elif filename[-4:]=='xlsx':
df = pd.read_excel(filename)
else:
print('잘못된 인풋파일 형식입니다.')
try :
#2. 긍정,부정 데이터프레임 필터
pos_condition = (df.label == 1) #긍정리뷰
neg_condition = (df.label == 0) #부정리뷰
except AttributeError :
print('긍부정 라벨링 작업이 되어있지 않으므로 실시합니다.')
#1. 별점을 기반으로 0, 1 라벨링 작업
df['label'] =0
df.loc[(df.score == ' 별표 5개 ') | (df.score == ' 별표 4개 '),'label'] = 1 #긍정은 1로
df.loc[(df.score == ' 별표 1개 ') | (df.score == ' 별표 2개 '),'label'] = 0 #부정은 0으로 라벨링
#2. 긍정,부정 데이터프레임 필터
pos_condition = (df.label == 1) #긍정리뷰
neg_condition = (df.label == 0) #부정리뷰
#3.긍정,부정 리뷰 각각 세트별 단어 빈도분석을 위해 같은 수의 샘플을 xlsx로 저장해야하므로 더 작은 개수로 맞춰준다
pos_review_count = df[pos_condition].label.count() #긍정리뷰 개수
neg_review_count = df[neg_condition].label.count() #부정리뷰 개수
sample_size= min(pos_review_count,neg_review_count) #더 작은 개수로 샘플 사이즈 결정
print('샘플의 개수:',sample_size)
if pos_review_count > neg_review_count:
#4. 긍정, 부정 리뷰를 각각 따로 파일로 만들어서 빈도분석을 돌린다
df_pos = df[pos_condition].sample(sample_size)
df_neg = df[neg_condition]
elif pos_review_count < neg_review_count:
df_pos = df[pos_condition]
df_neg = df[neg_condition].sample(sample_size)
else:
df_pos = df[pos_condition]
df_neg = df[neg_condition]
#df_pos.to_excel(filename1)
#df_neg.to_excel(filename2)
filename1 = '(표제화)스타벅스_긍정리뷰'
filename2 = '(표제화)스타벅스_부정리뷰'
morphs_analysis(filename1)
morphs_analysis(filename2)
#함수 변수로 쓸만한 것
filename1= '(표제화)스타벅스_긍정리뷰 빈도.xlsx'
filename2= '(표제화)스타벅스_부정리뷰 빈도.xlsx'
word_ratio = 0.1 #상위 1퍼센트의 단어를 살펴본다
#5. 긍정,부정 단어 사전만들기
if filename[-3:]=='csv':
pos_df = pd.read_csv(filename1) #긍정리뷰 빈도데이터 프레임
neg_df = pd.read_csv(filename2) #부정리뷰 빈도데이터 프레임
elif filename[-4:]=='xlsx':
pos_df = pd.read_excel(filename1)
neg_df = pd.read_excel(filename2) #부정리뷰 빈도데이터 프레임
else:
print('잘못된 인풋파일 형식입니다.')
sample_size= min(pos_df.freq.count(),neg_df.freq.count())
top_count =int(sample_size * word_ratio)
#긍정셋의 상위 빈도 1% 단어
pos_df_top = pos_df[:top_count]
pos_df_top_lst = pos_df_top['Unnamed: 0'].to_list()
#부정셋의 상위 빈도 1% 단어
neg_df_top = neg_df[:top_count]
neg_df_top_lst = neg_df_top['Unnamed: 0'].to_list()
#한번씩만 실행해줘야하는 부분. 여러번 실행하면 에러남.
try:
pos_df_top= pos_df_top.set_index('Unnamed: 0')
neg_df_top= neg_df_top.set_index('Unnamed: 0')
except :
pass
pos_ratio_dict = {} #긍정비율
#1. 긍정 셋에 나온 단어들 기준으로
#2. 부정 셋에도 있는 단어라면
#3. 긍정 ratio = 긍정 카운트 / (긍정 카운트 + 부정 카운트)
for i in pos_df_top_lst:
pos_count = pos_df_top.loc[i].freq
try :
neg_count = neg_df_top.loc[i].freq
except KeyError:
neg_count = 0 #부정에서는 등장하지 않았을 경우 0으로 처리
pass
pos_ratio_dict[i] = pos_count /(neg_count + pos_count)
neg_ratio_dict = {} #부정비율
#1. 부정 셋에 나온 단어들 기준으로
#2. 긍정 셋에도 있는 단어라면
#3. 부정 ratio = 부정 카운트 / (긍정 카운트 + 부정 카운트)
for i in neg_df_top_lst:
neg_count = neg_df_top.loc[i].freq
try :
pos_count = pos_df_top.loc[i].freq
except KeyError:
pos_count = 0
pass
neg_ratio_dict[i] = neg_count /(neg_count + pos_count)
df1 = pd.DataFrame(list(pos_ratio_dict.items()),
columns=['Word', 'Pos_Ratio'])
df1['Pos_Ratio']= pd.to_numeric(df1['Pos_Ratio'])
df1[df1['Pos_Ratio'] >=0.6].to_excel(filename1+'긍정사전.xlsx')
df2 = pd.DataFrame(list(neg_ratio_dict.items()),
columns=['Word', 'Neg_Ratio'])
df2['Neg_Ratio']= pd.to_numeric(df2['Neg_Ratio'])
df2[df2['Neg_Ratio'] >=0.6].to_excel(filename2+'부정사전.xlsx')