首先导入数据,进行一个初步的统计:
import pandas as pd
data = pd.read_csv('doubanliulangdiqiu.csv',encoding ='GB18030')
data['评分'].value_counts()
可以看到这样的情况:
如果没有数据,可以去看爬虫实战之《流浪地球》豆瓣影评分析(一)的爬取过程。
先做一个饼图来分析分布情况,先把评分的值计算命名为num,然后设置字体,绘制饼图,设置小数点的位数,还有给一个标题:
import matplotlib.pyplot as plt
num = data['评分'].value_counts()
plt.rcParams['font.sans-serif'] = "Simhei"
plt.pie(num, autopct="%.2f %%",labels=num.index)
plt.title('《流浪地球》豆瓣短评评分分数分布')
因为之前爬取数据的时候,把时分秒也爬了下来,而这次只需要日期,所以要选择一下。然后用日期排序:
num = data['发表时间'].apply(lambda x: x.split(" ")[0]).value_counts()
num = num.sort_index() # 日期排序
plt.plot(range(len(num)),num) # 刻度与num的长度一致
plt.xticks(range(len(num)),num.index,rotation=90)
plt.grid() # 添加网格背景
最后效果:
因为只有500条数据,可以看懂,2月五号上映的时候到了一个峰值。
前面是日期,这次就是时刻了:
num = pd.to_datetime(data['发表时间']).apply(lambda x: x.hour).value_counts() # 首先转换成时间格式,然后转换成小
num = num.sort_index()
plt.plot(range(len(num)),num) # 刻度与num的长度一致
plt.xticks(range(len(num)),num.index)
plt.title("评论数量随时刻的变化情况")
plt.grid() # 添加网格背景
可以看出来,凌晨基本没人,晚上是高峰期,可以看出来大部分人是夜猫子
首先需要进行去重操作,以发表时间为例:data['发表时间'].drop_duplicates().sort_values()
。时间也处理一下data["发表时间"] = data["发表时间"].apply(lambda x: x.split(' ')[0])
然后建立一个空表格,然后进行数据填充,最后指标:
在这里插入代码片data["发表时间"] = data["发表时间"].apply(lambda x: x.split(' ')[0])
tmp = pd.DataFrame(0,
index=data['发表时间'].drop_duplicates().sort_values(),# 去重
columns=data['评分'].drop_duplicates().sort_values())
for i,j in zip(data['发表时间'],data["评分"]):
tmp.loc[i, j] +=1
tmp = tmp.iloc[:,:-1]
n,m= tmp.shape
plt.figure(figsize=(10,5))
plt.rcParams['axes.unicode_minus']=False
for i in range(m):
plt.plot(range(n),(-1 if i<2 else 1)*tmp.iloc[:,i])#绘制图
plt.fill_between(range(n),(-1 if i<2 else 1)*tmp.iloc[:,i],alpha=0.5)
plt.grid()
plt.legend(tmp.columns) # 图例
plt.xticks(range(n),tmp.index,rotation=45) # 横轴左闭
plt.show()
- 在点映期间,对电影的大部分评价都是正面的,但是上映之后两级分化。
- 一星评价中,在2019-02-10有一个小高峰,当天是星期一,好评低,可能是刷负分的评价
但是这是500条数据,不能代表所有!!!
还是一样,先导入数据,然后数据处理,最后绘制条形图:
import pandas as pd
import matplotlib.pyplot as plt
data = pd.read_csv("doubanliulangdiqiu.csv",encoding='GB18030')
num = data['居住城市'].value_counts()[:10]
plt.rcParams['font.sans-serif'] = "Simhei"
plt.bar(range(10),num)
plt.xticks(range(10),num.index,rotation=45)
plt.title('平均价数量最多的前十个城市')
for i,j in enumerate(num):
plt.text(i,j,j, ha = 'center',va='bottom')
plt.show()
看一下效果:
得出了评价数最多的十个城市后。就开始整理数据,一样,先构建一个空表格,然后再统计导入数据
tmp = pd.DataFrame(0,
index= data['评分'].drop_duplicates().sort_values(),
columns=data['居住城市'].drop_duplicates())
for i ,j in zip(data['评分'],data['居住城市']):
tmp.loc[i,j] += 1
但是城市太多了,就取前五个城市吧
cities = num.index[:5] # 取前五个城市
tmp=tmp.loc[:,cities] # 选取评论数前五的城市
tmp = tmp.iloc[:5,:]# 去除NAN
n,m= tmp.shape
plt.figure(figsize=(10,5))
plt.rcParams['axes.unicode_minus']=False
for i in range(m):
plt.plot(range(n),tmp.iloc[:,i])#绘制图
plt.fill_between(range(n),tmp.iloc[:,i],alpha=0.5)
plt.grid()
plt.title("评论评分与城市的关系")
plt.legend(tmp.columns) # 图例
plt.xticks(range(n),tmp.index,rotation=45) # 横轴左闭
plt.show()
谢谢大家,喜欢就点个赞吧