数据分析过程

根据闺蜜的作业,记录一下。
作业的主题是分析不同的商家的评分、以及评价、并探索他们之间的关系,其中还包括了地理位置可能产生的影响。
其中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)

未完待续……

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容