根据闺蜜的作业,记录一下。
作业的主题是分析不同的商家的评分、以及评价、并探索他们之间的关系,其中还包括了地理位置可能产生的影响。
其中business.csv主要描述的是商家的ID、名称、地理位置、开业时间和星级评分和主营种类。
review_train.csv主要有评论发表的时间、内容、对于该条评价的评价(类似于我们可以给某条评论点赞一样)。
前期准备工作
基本操作
导入必要的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() 查看文件倒数4行
- review_id:评论ID
- polarity:表示该评价是积极还是消极的
- date:评论发表时间
- text:评论内容
- cool、funny、useful:对评论的评价
- business_id:商户ID
- use_id:发表评论的用户ID
检查空数据,并删除掉无用的列。
pay attention to sum() and count()
train.isnull().sum()
因为用户ID对我们的分析目标没用,可以删除。
train = train.drop(columns="user_id")
查看确实数据所占比例
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)
填充缺失数据,
train["cool"]= train["cool"].fillna(0)
train["funny"]= train["funny"].fillna(0)
train["useful"]= train["useful"].fillna(0)
train["text"] = train["text"].fillna('NAN')
初步分析数据
我们认为polarity是个很关键的指标,通过这个指标去查看该条评论是积极还是消极的。
p = train['polarity'].value_counts()
p
计算他们不同级性所占比例
data = {'count':p.values}
polarity_df=pd.DataFrame(data,index=['Negative','Positive'])
polarity_df['percentage']=p.values/train['polarity'].count()
polarity_df.round(4)
对polarity进行分析后,我们认为数据可以再一次清洗。
删除异常值
整体查看一下
train.describe().round(3)
通过箱型表查看
sns.boxplot('polarity','cool',data=train)
plt.show()
或者通过散点图查看
对cool、funny和usefull都做相同的操作后,获得无异常值的数据。(其实这一步我不是很理解,我觉得cool、funny高了不就代表这是条热评嘛,不算异常吧,但是学商科的不是我,我就不BB了😂)
train = train[-((train['cool'] > 150)|(train['funny'] > 120) | (train['useful'] > 160))]
print(train.shape) #(62382, 8)
未完待续……