用Python来揭秘吃瓜群众是如何看待罗志祥事件的
前言
最近娱乐圈可以说得上是热闹非凡,前有霸道总裁爱小三,正宫撕逼网红女,后有阳光大男孩罗志祥,被周扬青扒的名声扫地。贵圈的爱情故事,常人是难以理解的,正如贾旭明张康这段相声所说的这样,娱乐圈的爱情总是分分合合,成为老百姓茶余饭后的谈资,城外的人想进去,城里的人真会玩。
各种版本的洗白、谣言遍地乱飞,吃瓜网友们是如何看待的呢?
用数据说话,是数据工作者的意义所在,整个数据分析的过程分为三步:
- 数据获取
- 数据预处理
- 数据可视化及数据分析
以下是具体步骤和代码实现:
数据获取
数据获取地址:
'http://ent.163.com/20/0423/09/fastlq7i00038fo9.html'
在爬取评论数据之前,我们需要按f12对评论数据网页进行分析,可以发现共计172页,offset从0开始,每增加一页offset增加30,可以使用get方法获取。
核心代码:
headers = {'user-agent': 'mozilla/5.0 (windows nt 10.0; wow64) applewebkit/537.36 (khtml, like gecko) chrome/80.0.3987.106 safari/537.36'} # 评论地址 url="http://comment.api.163.com/api/v1/products/a2869674571f77b5a0867c3d71db5856/threads/fastlq7i00038fo9/comments/newlist?ibc=newspc&limit=30&showlevelthreshold=72&headlimit=1&taillimit=2&offset={}" # 循环爬取 df = pd.dataframe(none) i = 0 while true: ret = requests.get(url.format(str(i*30)), headers=headers) text = ret.text result = json.loads(text) t = result['comments'].values() s = json_normalize(t) i += 1 if len(s) == 0: print("爬取结束") break else: df = df.append(s) print("第{}页爬取完毕".format(i)) df.to_csv('data.csv')
数据展示
数据预处理
数据预处理是数据可视化之前非常重要的一部分。包含数据读取、评论去重、数据格式转换等
import pandas as pd #数据读取 df = pd.read_csv('data.csv') # 评论去重 df=df.drop_duplicates('commentid').reset_index(drop=true) #格式转换 df['new_time'] = df.apply(lambda x : x['createtime'].split(':',1)[0],axis=1)
数据分析及可视化
1.事件关注指数
从周扬青的微博、头条等平台的推送时间为4月23日9点,时间很准,足以说明为了这次离婚声明已准备有一段时间,绝非冲动所为。从发送内容上看,声明中开头略有调侃,后面刀刀见血,文笔也润色了不少。在事件发生后,关注指数来看,23日10点评论指数达到高峰,之后评论逐步减少。
2.网友评论词语分析
从词云图中我们不难看出,很多人为周扬青打抱不平,跟随九年,最后闹得如此收场。隔着屏幕,都可以感受到大众对罗志祥人品的愤怒,当然也能看着吃瓜群众的呵呵声。艺人是公众人物,一言一行都会给社会,特别青少年群体带来深远的影响。人品不仅仅是镜头下的人品,更是生活中的人品。“始于颜值,陷于才华,忠于人品”是大众对胡歌的赞誉,也是老百姓对文艺工作者的期许,这是罗志祥要改正的地方。
核心代码
import jieba.analyse import os from pyecharts.charts import wordcloud from pyecharts.globals import symboltype, themetype from pyecharts.charts import page from pyecharts import options as opts def get_comment_word(df): # 集合形式存储-去重 stop_words = set() print(stop_words) # 加载停用词 cwd = os.getcwd() stop_words_path = cwd + '/stop_words.txt' print(stop_words_path) with open(stop_words_path, 'r', encoding="iso-8859-1") as sw: for line in sw.readlines(): stop_words.add(line.strip()) print(stop_words) # 合并评论信息 df_comment_all = df['content'].str.cat() # 使用tf-idf算法提取关键词 word_num = jieba.analyse.extract_tags(df_comment_all, topk=300, withweight=true, allowpos=()) print(word_num) # 做一步筛选 word_num_selected = [] # 筛选掉停用词 for i in word_num: if i[0] not in stop_words: word_num_selected.append(i) else: pass return word_num_selected
3.爱留言的吃瓜群众来自何处
从上述图表中,我们可以看到广州、深圳、上海的网友留言位列前三名,喜欢评论的人基本处于一线城市、准一线城市,一方面是由于人口聚集量比较大,另外一方面为这些城市信息流通比较快。
核心代码
from snapshot_selenium import snapshot as driver from pyecharts import options as opts from pyecharts.charts import bar from pyecharts.render import make_snapshot df = df.groupby(['user.location']).agg({'序号':'count'}).reset_index() df.rename(columns={'place':'user.location'}, inplace=true) df = df[~df['user.location'].isin(['上海','中国','来自火星','火星'])] df = df.sort_values(['序号'],axis = 0,ascending = false) df_gb_top = df[:15] def bar_chart() -> bar: c = ( bar() .add_xaxis(list(df_gb_top['user.location'])) .add_yaxis("写评论top15的地区", list(df_gb_top['序号'])) .reversal_axis() .set_series_opts(label_opts=opts.labelopts(position="right")) .set_global_opts(title_opts=opts.titleopts(title="排行榜")) ) return c
如果你处于想学python或者正在学习python,python的教程不少了吧,但是是最新的吗?说不定你学了可能是两年前人家就学过的内容,在这小编分享一波2020最新的python教程。获取方式,私信小编 “ 资料 ”,即可免费获取哦!
上一篇: 在Ajax中使用get和post所遇到的问题及解决办法
下一篇: ajax传递多个参数的实现代码