數(shù)據(jù)分析過(guò)程

根據(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ù)……

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容