0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

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

电子工程师 来源:fqj 2019-05-05 09:13 次阅读

《复联 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 分,那我们的评论用户中,又是一个什么样的趋势呢?见下图:

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

评分数

从图中可以看到,评 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 位,甚至于远超美队、寡姐和雷神:

Python分析9万条数据 复仇者联盟谁才是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 来进行情感分析。

情感分析,又称为意见挖掘、倾向性分析等。简单而言,是对带有情感色彩的主观性文本进行分析、处理、归纳和推理的过程。

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

灭霸

钢铁侠

从图中看到, 钢铁侠的正向情感要比灭霸的正向情感要高,反派角色就是容易被人抗拒。

最最后,从《银河护卫队》时期穿越而来的灭霸在最后分钟变成了粉末消散而去,这也给我们程序员一个警钟:

“重构代码,改善设计,降低系统复杂度,这样做很好。但是,一定要保证系统的稳定运行,不留安全隐患,不然,早晚会丢掉自己的工作。”

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 数据
    +关注

    关注

    8

    文章

    6892

    浏览量

    88827
  • 代码
    +关注

    关注

    30

    文章

    4748

    浏览量

    68351
  • python
    +关注

    关注

    56

    文章

    4782

    浏览量

    84453

原文标题:Python分析9万条数据告诉你复仇者联盟谁才是绝对C位

文章出处:【微信号:rgznai100,微信公众号:rgznai100】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    科沃斯DK39复仇者联盟版扫地机器人开箱体验

    如果你是一个电影爱好,一定不会错过当前最热门的电影——复仇者联盟3,作为漫威宇宙近十年的最强集结,曾经各自为战的超级英雄们,为了对抗共同的敌人而齐聚复仇者
    的头像 发表于 05-21 10:35 5654次阅读

    一加6复仇者联盟版图赏

    一加6复仇者联盟版 随着《复仇者联盟3:无限战争》的热映,有不少品牌方也选择在这个时间节点推出复联版产品,抢跟一波热潮,一加手机也是其中之一。5月17日,一加6正式发布,除了普通版本外
    的头像 发表于 05-28 14:35 4555次阅读

    铭瑄正式推出复仇者M3 RGB内存,具有12种灯效的复仇者M3实际表现如何呢?

    复仇者M3灯效方面,预设有绚彩RGB灯效,5个独立光效区域,支持主板软件调控,12种灯效模式,和其他支持调控的硬件同步,展现别致的灯光氛围。
    的头像 发表于 07-20 15:48 4739次阅读

    复仇者”ER无人机持续飞行了23.4小时,完成模拟侦察任务

    通用原子公司“复仇者”ER无人机创造了新的续航纪录,该无人机在典型情报、监视与侦察(ISR)任务设置中持续飞行了23.4小时,执行了模拟侦察任务。
    发表于 07-30 14:31 4471次阅读

    复仇者M3用性价比吹响了普及RGB“马甲”的号角

    3200MHz时铭瑄复仇者M3的读取、写入和复制性能分别提升了33.12%、29.14%和21.72%,延迟也降低至83.6ns。
    的头像 发表于 08-30 10:22 3709次阅读

    台积电组成复仇者联盟 重回战场对抗英特尔

    趁对手放缓脚步,英特尔过去的手下败将,结合台积电的先进制程组成复仇者联盟,一一重回半导体的舞台发光发热,这是今年值得注意的投资机会。
    的头像 发表于 05-27 14:08 2481次阅读

    小米手环4复仇者联盟系列限量版发布 售价349元

    小米手环4复仇者联盟系列限量版正式亮相,售价349元
    发表于 06-13 15:59 5406次阅读

    小米手环4复仇者联盟限量版正式开卖 售价349元

    6月28日消息,小米商城官方微博预告,小米手环4复仇者联盟限量版将在今天上午10点正式开卖,售价349元。
    发表于 06-28 14:47 1490次阅读

    小米手环4复仇者联盟限量版高清图赏

    7月29日消息,小米手环4还带来了复仇者联盟限量版,售价349元。包含金属铭牌、收藏证书、定制腕带等,其中定制腕带为美队、钢铁侠、漫威三款,致敬荧幕经典英雄。
    的头像 发表于 07-30 10:08 7441次阅读

    AMAZFIT智能手表2ECG版和复仇者联盟系列限量版因工艺复杂无法按时开售

    7月30日晚,华米科技发布公告,由于全陶瓷表身工艺十分复杂、加工难度很高,导致原定于本月上市的AMAZFIT智能手表2 ECG版和复仇者联盟系列限量版无法按时开售,后续上市日期确定之后,我们将第一时间通知。
    发表于 07-31 14:28 1367次阅读

    94折采购元器件 还能免费看“复仇者联盟”?

    94折采购元器件,还能免费看“复仇者联盟”?
    的头像 发表于 03-01 11:13 1615次阅读

    AMAZFIT智能手表2复仇者联盟限量版将于10月18日开启限量预售

    6月11日,华米发布AMAZFIT智能手表2,定位旗舰,支持三网4G通话,标准版定价999元,ECG版售价1299元。此外还有复仇者联盟限量版,售价1499元。
    发表于 10-15 16:20 1759次阅读

    英特尔宣布《复仇者联盟》系列酷睿处理器停产

    、i9-10850K 和 i9-10900K 都将停产。 IT之家了解到,今年 8 月底,英特尔在京东上架了复仇者联盟珍藏版的 i7-10700KA 和 i
    的头像 发表于 12-19 09:41 3433次阅读

    复仇者联盟工厂监控装置

    电子发烧友网站提供《复仇者联盟工厂监控装置.zip》资料免费下载
    发表于 11-08 15:18 0次下载
    <b class='flag-5'>复仇者</b><b class='flag-5'>联盟</b>工厂监控装置

    科技巨头组建“复仇者联盟”,挑战英伟达的NVLink技术

    据报导,包括 AMD、谷歌、微软、英特尔(Intel)、博通(Broadcom)和思科(Cisco)在内的多家国际科技龙头联手,组成“复仇者联盟”,欲挑战 NVIDIA 的 NVLink 技术。
    的头像 发表于 05-31 11:54 579次阅读