Python分析9万条数据 复仇者联盟谁才是C位

《复联 4》国内上映第十天,程序员的江湖里开始流传这样一个故事,即:
漫威宇宙,其实就讲了一件事情。整个宇宙就好比一个项目组。其中有一群叫作美国队长、钢铁侠、惊奇队长、浩克、索尔等人在维护这个项目,兢兢业业的维护整个项目。
某一天,出现了一个天才程序员,叫灭霸。当他加入到这家公司的时候,他意识到,这个项目已经非常庞大,仅仅是编译,就要几个小时。运行起来负重累累。而服务器资源又非常的有限,老板又不给预算买新机器,如果一直继续这么开发下去,这个项目迟早要出现 p0 事故。于是,他下定决定要把这个项目全面优化,使用用面向对象思想,提取重复代码,业务拆分,算法优化等手段,彻底优化,目标是代码量减少 50%。
美国队长带领的项目组叫复仇者联盟,发现了灭霸程序员的想法后,阻止并警告灭霸说:不要轻易去改老代码!!很容易出 bug 的,代码能跑就行!!
那么,作为一个写程序员的电影,我们怎么不能用数据来分析一下,喜欢漫威宇宙的观众对《复联 4》的评价呢?
抓取数据
业界朋友们,在电影分析中,使用猫眼的数据比较多。在本文中,笔者也使用了猫眼的接口来获取数据,方便处理,数据量也比较多。
在 python 中,使用 request 可以很方便地发送请求,拿到接口返回的 json 数据,来看代码:
defgetmoveinfo(url):session=requests.session()headers={user-agent:mozilla/5.0,
accept:text/html,application/xhtml+xml,
cookie:_lxsdk_cuid=}response=session.get(url,headers=headers)ifresponse.status_code==200:
returnresponse.textreturnnone
请求返回的是一个 json 数据,拿到我们想要的评论原始数据,并将数据存储在数据库中:
defsaveitem(dbname,moveid,id,originaldata):conn=sqlite3.connect(dbname)conn.text_factory=strcursor=conn.cursor()ins=insertorreplaceintocommentsvalues(?,?,?)v=(id,originaldata,moveid)cursor.execute(ins,v)cursor.close()conn.commit()conn.close()
经过大概两个小时,终于从猫眼爬取了大约 9 万条数据。数据库文件已经超过了 100m 了。
数据清洗
因为在上面抓取下来的数据,直接进行了原数据的存储,没有进行数据的解析处理。接口中包含了很多数据,有用户信息、评论信息等。本次分析,只使用了部分数据,所以需要将用到的相关数据清洗出来:
defconvert(dbname):conn=sqlite3.connect(dbname)conn.text_factory=strcursor=conn.cursor()cursor.execute(select*fromcomments)data=cursor.fetchall()foritemindata:commentitem=json.loads(item[1])movieid=item[2]insertitem(dbname,movieid,commentitem)cursor.close()conn.commit()conn.close()definsertitem(dbname,movieid,item):conn=sqlite3.connect(dbname)conn.text_factory=strcursor=conn.cursor()sql='''insertorreplaceintoconvertdatavalues(?,?,?,?,?,?,?,?,?)'''values=(getvalue(item,id),movieid,getvalue(item,userid),getvalue(item,nickname),getvalue(item,score),getvalue(item,content),getvalue(item,cityname),getvalue(item,viptype),getvalue(item,starttime))cursor.execute(sql,values)cursor.close()conn.commit()conn.close()
通过 json 库将原始数据解析出来,将我们需要的信息存储到新的数据表中。
数据分析
因为没有任何一个平台能够拿到用户的购票数据,我们只能从评论的数据中,以小见大,从这些数据中,分析出一些走势。 在评论数据中,我们能看到评论用户所在的城市。将数据所在的位置解析,划分到各对应的行政省,可以看到每个省评论数量,见下图(颜色越红,用户评论数量越多):
城市
从图中可以看到, 上海、广州、四川用户的数量显然要比其他城市的用户数量要多得多。再来看一下代码:
data=pd.read_sql(select*fromconvertdata,conn)city=data.groupby(['cityname'])city_com=city['score'].agg(['mean','count'])city_com.reset_index(inplace=true)fo=open(citys.json,'r')citys_info=fo.readlines()citysjson=json.loads(str(citys_info[0]))printcity_comdata_map_all=[(getrealname(city_com['cityname'][i],citysjson),city_com['count']
[i])foriinrange(0,city_com.shape[0])]data_map_list={}foritemindata_map_all:
ifdata_map_list.has_key(item[0]):
value=data_map_list[item[0]]
value+=item[1]
data_map_list[item[0]]=value
else:
data_map_list[item[0]]=item[1]
data_map=[(realkeys(key),data_map_list[key])forkeyindata_map_list.keys()]
漫威电影一直深受中国朋友们喜欢的高分电影。豆瓣评分 8.7 分,那我们的评论用户中,又是一个什么样的趋势呢?见下图:
评分数
从图中可以看到,评 5 分的数量远高于其他评分,可见中国的观众朋友确实喜欢漫威的科幻电影。
复联从 1 开始便是漫威宇宙各路超级英雄的集结,到现在的第 4 部,更是全英雄的汇聚。那么,在这之中,哪位英雄人物更受观众欢迎?先看代码:
attr=[灭霸,美国队长,钢铁侠,浩克,奇异博士,蜘蛛侠,索尔,黑寡妇,鹰眼,惊奇队长,幻视,猩红女巫,蚁人,古一法师]alias={灭霸:[灭霸,thanos],美国队长:[美国队长,美队],浩克:[浩克,绿巨人,班纳,hulk],奇异博士:[奇异博士,医生],钢铁侠:[钢铁侠,stark,斯塔克,托尼,史塔克],蜘蛛侠:[蜘蛛侠,蜘蛛,彼得,荷兰弟],索尔:[索尔,雷神],黑寡妇:[黑寡妇,寡姐],鹰眼:[鹰眼,克林顿,巴顿,克林特],惊奇队长:[惊奇队长,卡罗尔,惊奇],星云:[星云],猩红女巫:[猩红女巫,绯红女巫,旺达],蚁人:[蚁人,蚁侠,ant,antman],古一法师:[古一,古一法师,法师]}v1=[getcommentcount(getalias(alias,attr[i]))foriinrange(0,len(attr))]bar=bar(hiro)bar.add(count,attr,v1,is_stack=true,xaxis_rotate=30,yaxix_min=4.2,xaxis_interval=0,is_splitline_show=true)bar.render(html/hiro_count.html)
运行结果如下图,可以看到钢铁侠钢铁侠是实至名归的 c 位,不仅电影在电影中是,在评论区仍然也是实至名归的 c 位,甚至于远超美队、寡姐和雷神:
英雄评论次数
从以上观众分布和评分的数据可以看到,这一部剧,观众朋友还是非常地喜欢。前面,从猫眼拿到了观众的评论数据。现在,笔者将通过 jieba 把评论进行分词,然后通过 wordcloud 制作词云,来看看,观众朋友们对《复联》的整体评价:
词云分析
可以看到,灭霸和钢铁侠出现的词频比其他英雄要高很多。这是否表示,这部剧的主角就是他们两个呢?
细心的朋友应该发现了,钢铁侠、灭霸的数量在词云和评论数量里面不一致。原因在于,评论数量就按评论条数来统计的,而词云中,使用的是词频,同一条评论中,多次出现会多次统计。所以,灭霸出现的次数居然高于了钢铁侠。
最后,再来分析一下钢铁侠与灭霸的情感分析,先上代码:
defemotionparser(name):conn=conn=sqlite3.connect(end.db)conn.text_factory=strcursor=conn.cursor()likestr=like%+name+%cursor.execute(selectcontentfromconvertdatawherecontent+likestr)values=cursor.fetchall()sentimentslist=[]foriteminvalues:
sentimentslist.append(snownlp(item[0].decode(utf-8)).sentiments)plt.hist(sentimentslist,bins=np.arange(0,1,0.01),facecolor=#4f8cd6)
plt.xlabel(sentimentsprobability)
plt.ylabel(quantity)
plt.title(analysisofsentimentsfor+name)
plt.show()cursor.close()conn.close()
此处,使用 snownlp 来进行情感分析。
情感分析,又称为意见挖掘、倾向性分析等。简单而言,是对带有情感色彩的主观性文本进行分析、处理、归纳和推理的过程。
灭霸
钢铁侠
从图中看到, 钢铁侠的正向情感要比灭霸的正向情感要高,反派角色就是容易被人抗拒。
最最后,从《银河护卫队》时期穿越而来的灭霸在最后分钟变成了粉末消散而去,这也给我们程序员一个警钟:
“重构代码,改善设计,降低系统复杂度,这样做很好。但是,一定要保证系统的稳定运行,不留安全隐患,不然,早晚会丢掉自己的工作。”

什么是Application Courier Service
为什么服务器选择Linux而不是Windows
KOYUELEC光与电子提供WAYON维安在个人笔记本电脑上的方案与应用
Oracle引入Workflow Manager提供高效服务 LEXUS揭幕“ON/”艺术装置
常用8脚开关电源芯片怎样测量
Python分析9万条数据 复仇者联盟谁才是C位
DIN22 IPO OC系列模拟信号隔离放大器简介
锂电池并非新能源车自燃“罪魁祸首”
实力凸显,陕西源杰科技备受行业认可
中国公司研发机器狗突破世界纪录
台积电继续斥巨资采购芯片加工设备
高能效智能电表电源方案
华为进军全球PC市场,惠普联想地位不保?
天然气制氢装置现场仪表如何选型
江智公司跟进国家居家养老标准加大推进 智能养老康养机器人产业化进程
用于深层组织扫描和成像的适形超声乳房贴片
iRobot家用扫地机器人清理宠物毛发好用吗?看看这篇就知道了!
现网实测:5G比4G快5倍,毫米波比Sub-6GHz快4倍
电焊机的触电条件及工作原理
Devialet帝瓦雷推出全新音响产品 Devialet Dione