实战 | 用Python爬取《云南虫谷》3.6万条评论( 二 )


2.5. 保存数据到本地
# 将评论数据保存本地def save_csv(df):file_name = '评论数据.csv'if os.path.exists(file_name):df.to_csv(file_name, mode='a', header=False,index=None, encoding='utf_8_sig')else:df.to_csv(file_name, index=None, encoding='utf_8_sig')print('数据保存完成!')
3. 数据统计与可视化展示
本次的数据统计与可视化展示方法可以参考此前推文《只需8招,搞定数据筛选与查询》和《你知道怎么用绘制带交互的可视化图表吗?》等
3.1. 数据预览
抽样5条看看
df.sample(5)
看看数据信息
df.info()
RangeIndex: 35758 entries, 0 to 35757Data columns (total 12 columns):#ColumnNon-Null CountDtype ---------------------------- 0id35758 non-nullint64 1targetid35758 non-nullint64 2parent35758 non-nullint64 3time35758 non-nullobject4userid35758 non-nullint64 5content35735 non-nullobject6up35758 non-nullint64 7nick35758 non-nullobject8head35758 non-nullobject9gender35758 non-nullint64 10hwlevel35758 non-nullint64 11剧集35758 non-nullint64 dtypes: int64(8), object(4)memory usage: 3.3+ MB
才哥也进行了评论,我们看看是不是采集到了

实战 | 用Python爬取《云南虫谷》3.6万条评论

文章插图
才哥的评论
才哥的为,我们查询一下,发现才哥VIP等级居然6级啦
df.query('userid==1296690233')
head字段是头像,我们看看是不是才哥头像
from skimage import io# 显示头像img_url = df.query('userid==1296690233')['head'].iloc[0]image = io.imread(img_url)io.imshow(image)
对上了,对上了!!
3.2. 分集评论数
绘图参考《你知道怎么用绘制带交互的可视化图表吗?》,所以我们这里是绘制带交互的可视化图,引入环境:
import pandas as pdimport pandas_bokehpandas_bokeh.output_notebook()pd.set_option('plotting.backend', 'pandas_bokeh')
接下来,正式的数据统计与可视化展示开始
from bokeh.transform import linear_cmapfrom bokeh.palettes import Spectralfrom bokeh.io import curdoc# curdoc().theme = 'caliber'episode_comment_num = df.groupby('剧集')['id'].nunique().to_frame('评论数')y = episode_comment_num['评论数']mapper = linear_cmap(field_name='评论数', palette=Spectral[11] ,low=min(y) ,high=max(y))episode_bar = episode_comment_num.plot_bokeh.bar(ylabel="评论数量", title="分集评论数", color=mapper,alpha=0.8,legend=False)
我们可以看到,第一集评论数最高,高达1.7万,占了全部评论的一半;其次是第7集的评论数,主要是本周播到了第7集哈!
3.3. 分日期评论数
df['日期'] = pd.to_datetime(df.time).dt.datedate_comment_num = df.groupby('日期')['id'].nunique().to_frame('评论数')date_comment_num.index = date_comment_num.index.astype('string')y = date_comment_num['评论数']mapper = linear_cmap(field_name='评论数', palette=Spectral[11] ,low=min(y) ,high=max(y))date_bar = date_comment_num.plot_bokeh.bar(ylabel="评论数量", title="分日期评论数", color=mapper,alpha=0.8,legend=False)
从8月30日开播,首播当天会员可看5集,作为会员的我一口气就看完了 。我们发现开播后前2天评论数较多,由于每周1-3更新,所以这几天的评论数整体也较高 。