爬取电视剧《破冰行动》数据。
与此同时我也发现了爱奇艺对电视剧进行数据分析的一个网站——爱奇艺指数。
http://index.iqiyi.com/q/?name=%E7%A0%B4%E5%86%B0%E8%A1%8C%E5%8A%A8&aid=226128201
/ 01 / 播放地域
数据就是从网站上拿的,然后通过pyecharts生成地图。
爬取代码就不放了,也比较简单,给大家展示一下数据就好。
这里感觉数据应该是各地区的播放量。
import pandas as pd
# 读取数据
df = pd.read_csv('map.csv', header=None, names=['name', 'value'], encoding='gbk')
# 地图参数
value = [int(i) for i in df['value']]
attr = [i.replace('省', '').replace('特别行政区', '').replace('自治区', '').replace('回族', '').replace('壮族', '').replace('市', '').replace('维吾尔', '') for i in df['name']]
# 绘制地图
map = Map("破冰行动播放地域分布", title_pos='center', title_top=0)
map.add("", attr, value, maptype="china", is_visualmap=True, visual_text_color="#000", is_map_symbol_show=False, visual_range=[0, 60000000], is_piecewise=True, visual_split_number=5, visual_range_color=['#C5F1D8', '#99E6BB', '#6EDC9E', '#42D1A9', '#16C664'], visual_range_text=['低', '高'])
map.render('破冰行动播放地域分布.html')
生成分布图如下。
这里调整了一下地图颜色,所以和网站的地图看起来就差不多了。
可以发现沿海省份观看的人数相对较多。
/ 02 / 明星看点
明星看点是一张河流图,是面积图的一种形式。
数据是基于智能图像识别技术,自动分析出特定明星出场的片段,反映视频的角色出场比重。
同样,数据来自于网站,爬取不做分析,仅展示数据。
这里发现12集「黄景瑜」没有出场,没有「飞飞」的日子,弹幕应该会很开心。
from pyecharts import ThemeRiver
import pandas as pd
import numpy as np
# 读取数据
df = pd.read_csv('people.csv', header=None, names=['num', 'value', 'name'], encoding='gbk')
# 将DataFrame转为List
data = np.array(df)
result = data.tolist()
# 绘制河流图
tr = ThemeRiver("破冰行动明星看点", title_pos='center', title_top='0', width=800, height=400)
tr.add(['黄景瑜', '吴刚', '王劲松', '任达华', '李墨之', '张晞临', '公磊'], result, is_label_show=False, legend_top='7%')
tr.render("破冰行动明星看点.html")
生成河流图如下。
这里pyecharts没法对集数生成时间序列,所以横坐标看着有点尴尬,实际上就是1到48集。
下面就是最后一集的数据图,「公磊」饰演的「林宗辉」在上一集领盒饭了,所以数据显示为0。
黑色圆圈处,为吴刚老师饰演的「李维民」被省纪委调查。
最后剧情表明那只是一个局而已(不愧是达康书记)~
/ 03 / 人物词云
获取网站上2万多条评论数据,对人物进行词云展示。
就是不知道第一列的数字是什么意思...
from wordcloud import WordCloud
import matplotlib.pyplot as plt
import pandas as pd
import random
import jieba
# 读取数据
df = pd.read_csv('iqiyi.csv', header=None, names=['num', 'comment', 'key', 'emotion', 'type'], encoding='utf-8-sig')
# 设置文本随机颜色
def random_color_func(word=None, font_size=None, position=None, orientation=None, font_path=None, random_state=None):
h, s, l = random.choice([(188, 72, 53), (253, 63, 56), (12, 78, 69)])
return "hsl({}, {}%, {}%)".format(h, s, l)
def create_wordcloud(df, picture):
"""
生成标题以及摘要词云
"""
words = pd.read_csv('chineseStopWords.txt', encoding='gbk', sep='\t', names=['stopword'])
# 分词
text = ''
for line in df['comment']:
text += ' '.join(jieba.cut(str(line), cut_all=False))
# 停用词
stopwords = set('')
stopwords.update(words['stopword'])
backgroud_Image = plt.imread('iqiyi.jpg')
wc = WordCloud(
background_color='white',
mask=backgroud_Image,
font_path='C:\Windows\Fonts\华康俪金黑W8.TTF',
max_words=2000,
max_font_size=150,
min_font_size=15,
prefer_horizontal=1,
color_func=random_color_func,
random_state=50,
stopwords=stopwords
)
wc.generate_from_text(text)
# 看看词频高的有哪些
process_word = WordCloud.process_text(wc, text)
sort = sorted(process_word.items(), key=lambda e: e[1], reverse=True)
print(sort[:50])
plt.imshow(wc)
plt.axis('off')
wc.to_file(picture)
print('生成词云成功!')
全部评论
create_wordcloud(df, '全部.jpg')
# 包含李飞的评论
# df = df[df['comment'].str.contains('李飞|景瑜|飞|飞飞')]
# create_wordcloud(df, '李飞.jpg')
# 包含李维民的评论
# df = df[df['comment'].str.contains('李维民|书记|达康|李局|吴刚')]
# create_wordcloud(df, '李维民.jpg')
# 包含林耀东的评论
# df = df[df['comment'].str.contains('林耀东|东叔|吴劲松')]
# create_wordcloud(df, '林耀东.jpg')
# 包含赵嘉良的评论
# df = df[df['comment'].str.contains('赵嘉良|良叔|任达华')]
# create_wordcloud(df, '赵嘉良.jpg')
# df = df[df['comment'].str.contains('编剧|导演')]
# create_wordcloud(df, '编剧_导演.jpg')
先看一下全部评论的词云图。
口碑很不错,所以也推荐大家去看看哈。
先来看一下「黄景瑜」饰演的「李飞」,该剧的男主角。
有夸的,也有贬的,就我观察弹幕来看,贬大于夸。
/ 04 / 总结
相关数据已上传网盘:
链接:https://pan.baidu.com/s/1WNZzpXEXv267ZMBXF54obA 提取码:f5ut