根據(jù)閨蜜的作業(yè),記錄一下。
作業(yè)的主題是分析不同的商家的評(píng)分、以及評(píng)價(jià)、并探索他們之間的關(guān)系,其中還包括了地理位置可能產(chǎn)生的影響。
其中business.csv主要描述的是商家的ID、名稱、地理位置、開業(yè)時(shí)間和星級(jí)評(píng)分和主營(yíng)種類。
review_train.csv主要有評(píng)論發(fā)表的時(shí)間、內(nèi)容、對(duì)于該條評(píng)價(jià)的評(píng)價(jià)(類似于我們可以給某條評(píng)論點(diǎn)贊一樣)。
前期準(zhǔn)備工作
基本操作
導(dǎo)入必要的model
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
import statsmodels.api as sm
%matplotlib inline
read_csv() 讀取文件
train = pd.read_csv('review_train.csv')
test = pd.read_csv("review_test.csv")
business = pd.read_csv('business.csv')
查看文件
train.head(5) #查看文件前5行
#train.tail() 查看文件倒數(shù)4行

- review_id:評(píng)論ID
- polarity:表示該評(píng)價(jià)是積極還是消極的
- date:評(píng)論發(fā)表時(shí)間
- text:評(píng)論內(nèi)容
- cool、funny、useful:對(duì)評(píng)論的評(píng)價(jià)
- business_id:商戶ID
- use_id:發(fā)表評(píng)論的用戶ID
檢查空數(shù)據(jù),并刪除掉無(wú)用的列。
pay attention to sum() and count()
train.isnull().sum()

因?yàn)橛脩鬒D對(duì)我們的分析目標(biāo)沒(méi)用,可以刪除。
train = train.drop(columns="user_id")
查看確實(shí)數(shù)據(jù)所占比例
total= train.isnull().sum().sort_values(ascending=False)
percentage = (train.isnull().sum()/train.isnull().count()).sort_values(ascending=False)
missing_data = pd.concat([total, percentage], axis=1, keys=['Total','Percentage'])
missing_data.head().round(4)

填充缺失數(shù)據(jù),
train["cool"]= train["cool"].fillna(0)
train["funny"]= train["funny"].fillna(0)
train["useful"]= train["useful"].fillna(0)
train["text"] = train["text"].fillna('NAN')
初步分析數(shù)據(jù)
我們認(rèn)為polarity是個(gè)很關(guān)鍵的指標(biāo),通過(guò)這個(gè)指標(biāo)去查看該條評(píng)論是積極還是消極的。
p = train['polarity'].value_counts()
p

計(jì)算他們不同級(jí)性所占比例
data = {'count':p.values}
polarity_df=pd.DataFrame(data,index=['Negative','Positive'])
polarity_df['percentage']=p.values/train['polarity'].count()
polarity_df.round(4)

對(duì)polarity進(jìn)行分析后,我們認(rèn)為數(shù)據(jù)可以再一次清洗。
刪除異常值
整體查看一下
train.describe().round(3)

通過(guò)箱型表查看
sns.boxplot('polarity','cool',data=train)
plt.show()

或者通過(guò)散點(diǎn)圖查看
對(duì)cool、funny和usefull都做相同的操作后,獲得無(wú)異常值的數(shù)據(jù)。(其實(shí)這一步我不是很理解,我覺(jué)得cool、funny高了不就代表這是條熱評(píng)嘛,不算異常吧,但是學(xué)商科的不是我,我就不BB了??)
train = train[-((train['cool'] > 150)|(train['funny'] > 120) | (train['useful'] > 160))]
print(train.shape) #(62382, 8)
未完待續(xù)……