今天继续探索 twitter 电影数据集,昨天我们已经对这个数据集完成特征工程处理,三张表分别关于电影、用户和电影评分。在探索前,我们设想几个有趣的问题,循着好奇心,更容易坚持下去,看完今天这篇 EDA 实战。
问题包括:
- 29 类电影中,猜测下哪几类影片数是最多的?
- 从上世纪初到现在,电影的产出数是平稳的还是线型增长,或者指数增长?
- 喜剧片、动作片、爱情片、惊悚片你心目中的 TOP10 榜单是怎样的? 根据 twitter 80 多万影评,挖出的TOP榜单又是怎样的?
- 近 100 年,所有电影的 TOP10 榜单里有我们熟知的肖申克救赎,阿甘正传吗?
- 近 100 年,最烂的垃圾篇 BAD10 榜单里都有哪些部电影被不幸入选?
- 哪些电影是最有槽点的,被人们茶余饭后津津乐道呢?
- 有哪些时期人们的吐槽兴致大增?
- 哪些影迷最能吐槽吗?他们的 twitter ID 也被挖出来了!
- 他们的吐槽数能有几千条吗?
- 他们的评论严厉吗?平均评论得分是多少?
今天,通过 twitter 电影数据集进行有趣的数据分析,一一回答以上 8 个问题。
今天课程的完整 notebook 代码,下载地址链接: 链接: https://pan.baidu.com/s/1oR1Ok41gfY9M4QRzRu4w 提取码: ryp6
今天课程使用的包如下:
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from pyecharts.charts import Bar,Grid,Line,Pie
import pyecharts.options as opts
from pyecharts.globals import ThemeType
from snapshot_phantomjs import snapshot # pyecharts导出图片使用到的库
from pyecharts.render import make_snapshot
1 哪几类影片数最多?
重新熟悉下三个 DataFrame 的前五行:
movies2.head()
users.head()
ratings.head()
昨天已经得出最百花齐放的前 10 类电影:
top10
[('Mystery', 2649),
('Adventure', 3116),
('Documentary', 3224),
('Horror', 4288),
('Crime', 4723),
('Action', 5175),
('Romance', 5987),
('Thriller', 7307),
('Comedy', 10741),
('Drama', 17589)]
排名第一的是 Drama (戏剧)类电影,一共有 17589 部,那么它的出厂时间跨度呢?
movies2.drop('index',axis=1,inplace=True) # 删除 index 列
movies2
mdrama = movies2[movies2['Genre'].str.contains('Drama')]
mdrama
mdrama.sort_values(by='year')
看到 Drama 电影最早出厂追溯到上世纪 1909 年, 最近出厂年份 2019 年,整整110年。
2 近百年电影的产出数如何变化?
接下来,我们每十年,对数据完成下采样。
tmp = mdrama.copy()
tmp.loc[:,'yeardt'] = pd.to_datetime(mdrama['year'],format='%Y')
tmp
tmpdt_index = pd.DatetimeIndex(tmp['yeardt'].dt.date)
tmpdt_index # 先创建 DatetimeIndex 索引对象
tmp.loc[:,'Movie Count'] = 1
tmp10 = tmp.set_index(tmpdt_index).resample('10Y')['Movie Count'].sum().to_frame()
tmp10
对 resample
我们在专栏 day36 : Pandas 12 个实用小技巧里已经讲到,不会的读者可以返回去看看。
最终得到的结果如下所示:
直观展示以上数据:
c = (
Bar()
.add_xaxis(tmp10.index.year.to_list())
.add_yaxis("电影数", tmp10['Movie Count'].to_list(), category_gap=0,color='blue')
.set_global_opts(title_opts=opts.TitleOpts(title="每10年Drama类电影生产数"))
)
c.render_notebook()