Python分析9万条数据告诉你复仇者联盟谁才是绝对C位
作者 | 罗昭成
责编 | 唐小引
转载自CSDN(ID:CSDNnews)
《复联 4》国内上映第十天,程序员的江湖里开始流传这样一个故事,即:
漫威宇宙,其实就讲了一件事情。整个宇宙就好比一个项目组。其中有一群叫作美国队长、钢铁侠、惊奇队长、浩克、索尔等人在维护这个项目,兢兢业业的维护整个项目。
某一天,出现了一个天才程序员,叫灭霸。当他加入到这家公司的时候,他意识到,这个项目已经非常庞大,仅仅是编译,就要几个小时。运行起来负重累累。而服务器资源又非常的有限,老板又不给预算买新机器,如果一直继续这么开发下去,这个项目迟早要出现 P0 事故。于是,他下定决定要把这个项目全面优化,使用用面向对象思想,提取重复代码,业务拆分,算法优化等手段,彻底优化,目标是代码量减少 50%。
美国队长带领的项目组叫复仇者联盟,发现了灭霸程序员的想法后,阻止并警告灭霸说:不要轻易去改老代码!!很容易出 bug 的,代码能跑就行!!
—— 以上来自知乎@郭启军
https://www.zhihu.com/question/321428495/answer/663671132
那么,作为一个写程序员的电影,我们怎么不能用数据来分析一下,喜欢漫威宇宙的观众对《复联 4》的评价呢?
抓取数据
业界朋友们,在电影分析中,使用猫眼的数据比较多。在本文中,笔者也使用了猫眼的接口来获取数据,方便处理,数据量也比较多。
有关接口,大家可以自己去猫眼的网站上看,也可以使用如下地址:
http://m.maoyan.com/mmdb/comments/movie/248172.json?_v_=yes&offset=20&startTime=2019-04-24%2002:56:46
在 Python 中,使用 Request 可以很方便地发送请求,拿到接口返回的 JSON 数据,来看代码:
def getMoveinfo(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)
if response.status_code == 200:
return response.text
return None
请求返回的是一个 JSON 数据,拿到我们想要的评论原始数据,并将数据存储在数据库中:
def saveItem(dbName, moveId, id, originalData) :
conn = sqlite3.connect(dbName)
conn.text_factory=str
cursor = conn.cursor()
ins="INSERT OR REPLACE INTO comments values (?,?,?)"
v = (id, originalData, moveId)
cursor.execute(ins,v)
cursor.close()
conn.commit()
conn.close()
经过大概两个小时,终于从猫眼爬取了大约 9 万条数据。数据库文件已经超过了 100M 了。
数据清洗
因为在上面抓取下来的数据,直接进行了原数据的存储,没有进行数据的解析处理。接口中包含了很多数据,有用户信息、评论信息等。本次分析,只使用了部分数据,所以需要将用到的相关数据清洗出来:
def convert(dbName):
conn = sqlite3.connect(dbName)
conn.text_factory = str
cursor = conn.cursor()
cursor.execute("select * from comments")
data = cursor.fetchall()
for item in data:
commentItem = json.loads(item[1])
movieId = item[2]
insertItem(dbName, movieId, commentItem)
cursor.close()
conn.commit()
conn.close()
def insertItem(dbName, movieId, item):
conn = sqlite3.connect(dbName)
conn.text_factory = str
cursor = conn.cursor()
sql = '''
INSERT OR REPLACE INTO convertData values(?,?,?,?,?,?,?,?,?)
'''
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 * from convertData", 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]))
print city_com
data_map_all = [(getRealName(city_com['cityName'][i], citysJson),city_com['count'][i]) for i in range(0,city_com.shape[0])]
data_map_list = {}
for item in data_map_all:
if data_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] ) for key in data_map_list.keys()]
漫威电影一直深受中国朋友们喜欢的高分电影。豆瓣评分 8.7 分,那我们的评论用户中,又是一个什么样的趋势呢?见下图:
评分数
从图中可以看到,评 5 分的数量远高于其他评分,可见中国的观众朋友确实喜欢漫威的科幻电影。
复联从 1 开始便是漫威宇宙各路超级英雄的集结,到现在的第 4 部,更是全英雄的汇聚。那么,在这之中,哪位英雄人物更受观众欢迎?先看代码:
attr = ["灭霸","美国队长",
"钢铁侠", "浩克", "奇异博士", "蜘蛛侠", "索尔" ,"黑寡妇",
"鹰眼", "惊奇队长", "幻视",
"猩红女巫","蚁人", "古一法师"]
alias = {
"灭霸": ["灭霸", "Thanos"],
"美国队长": ["美国队长", "美队"],
"浩克": ["浩克", "绿巨人", "班纳", "HULK"],
"奇异博士": ["奇异博士", "医生"],
"钢铁侠": ["钢铁侠", "stark", "斯塔克", "托尼", "史塔克"],
"蜘蛛侠": ["蜘蛛侠","蜘蛛","彼得", "荷兰弟"],
"索尔":["索尔", "雷神"],
"黑寡妇": ["黑寡妇", "寡姐"],
"鹰眼":["鹰眼","克林顿","巴顿","克林特"],
"惊奇队长":["惊奇队长","卡罗尔", "惊奇"],
"星云":["星云"],
"猩红女巫": ["猩红女巫", "绯红女巫", "旺达"],
"蚁人":["蚁人", "蚁侠", "Ant", "AntMan"],
"古一法师": ["古一", "古一法师", "法师"]
}
v1 = [getCommentCount(getAlias(alias, attr[i])) for i in range(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 制作词云,来看看,观众朋友们对《复联》的整体评价:
词云分析
可以看到,灭霸和钢铁侠出现的词频比其他英雄要高很多。这是否表示,这部剧的主角就是他们两个呢?
细心的朋友应该发现了,钢铁侠、灭霸的数量在词云和评论数量里面不一致。原因在于,评论数量就按评论条数来统计的,而词云中,使用的是词频,同一条评论中,多次出现会多次统计。所以,灭霸出现的次数居然高于了钢铁侠。
最后,再来分析一下钢铁侠与灭霸的情感分析,先上代码:
def emotionParser(name):
conn = conn = sqlite3.connect("end.db")
conn.text_factory = str
cursor = conn.cursor()
likeStr = "like \"%" + name + "%\""
cursor.execute("select content from convertData where content " + likeStr)
values = cursor.fetchall()
sentimentslist = []
for item in values:
sentimentslist.append(SnowNLP(item[0].decode("utf-8")).sentiments)
plt.hist(sentimentslist, bins=np.arange(0, 1, 0.01), facecolor="#4F8CD6")
plt.xlabel("Sentiments Probability")
plt.ylabel("Quantity")
plt.title("Analysis of Sentiments for " + name)
plt.show()
cursor.close()
conn.close()
此处,使用 SnowNLP 来进行情感分析。
情感分析,又称为意见挖掘、倾向性分析等。简单而言,是对带有情感色彩的主观性文本进行分析、处理、归纳和推理的过程。
灭霸
钢铁侠
从图中看到, 钢铁侠的正向情感要比灭霸的正向情感要高,反派角色就是容易被人抗拒。
最最后,从《银河护卫队》时期穿越而来的灭霸在最后分钟变成了粉末消散而去,这也给我们程序员一个警钟:
“重构代码,改善设计,降低系统复杂度,这样做很好。但是,一定要保证系统的稳定运行,不留安全隐患,不然,早晚会丢掉自己的工作。”
(本文为 AI科技大本营转载文章,转载请微信联系原作者)
◆
CTA核心技术及应用峰会
◆
5月25-27日,由中国IT社区CSDN与数字经济人才发展中心联合主办的第一届CTA核心技术及应用峰会将在杭州国际博览中心隆重召开,峰会将围绕人工智能领域,邀请技术领航者,与开发者共同探讨机器学习和知识图谱的前沿研究及应用。
更多重磅嘉宾请识别海报二维码查看,目前会议早鸟票发售中(原票价1099元),点击阅读原文即刻抢购。添加小助手微信15101014297,备注“CTA”,了解票务以及会务详情。
推荐阅读
他25岁进贝尔实验室,32岁提信息论,40岁办达特茅斯会议,晚年患上阿兹海默 | 人物志
重磅!Facebook更新PyTorch 1.1,打算跨GPU分割神经网络
小样,加张图你就不认识我了?“补丁”模型骗你没商量!| 技术头条
东大漆桂林、清华李涓子、复旦肖仰华等大牛确认出席CTA峰会!5月一起打卡杭州
京东 60 天哗变!CTO 成优化第一人 | 畅言
异构计算=未来?一文带你秒懂3大主流异构
《互联网人叹气图鉴》
回报率29%! 大神用情感分析创建一个比特币交易算法, 原来交易玩的是心理战
她说:为啥程序员都特想要机械键盘?这答案我服!
Python分析9万条数据告诉你复仇者联盟谁才是绝对C位相关推荐
- Python 分析 9 万条数据告诉你复仇者联盟谁才是绝对 C 位!
<复联 4>国内上映第十天,程序员的江湖里开始流传这样一个故事,即: 漫威宇宙,其实就讲了一件事情.整个宇宙就好比一个项目组.其中有一群叫作美国队长.钢铁侠.惊奇队长.浩克.索尔等人在维护 ...
- 复仇者联盟谁才是绝对 C 位?Python分析9万条数据告诉你答案
作者 | 罗昭成 责编 | 唐小引 <复联 4>国内上映第十天,程序员的江湖里开始流传这样一个故事,即:漫威宇宙,其实就讲了一件事情.整个宇宙就好比一个项目组.其中有一群叫作美国队长.钢铁 ...
- python的歌曲评论数据分析_用Python分析44万条数据,揭秘如何成为网易云音乐评论区的网红段子手...
有个段子讲"十年文案老司机,不如网易评论区,网易文豪遍地走,评论全部单身狗",网易云音乐的评论区也一直都是各类文案大神的聚集地. 那么我们普通用户到底如何成为网易云音乐评论里的热评 ...
- Python 分析 10 万条弹幕告诉你:《古董局中局2》到底好不好看?
作者 | 泽龙.Mika 来源 | CDA数据分析师 今天我们聊一聊<古董局中局2> 点击下方视频,先睹为快: 上周日,有一部鉴宝题材的剧静悄悄上线了,那就是夏雨.魏晨等主演的古董局中局系 ...
- 8万条数据告诉你:跟着大股东和高管买他家股票,能赚钱吗?【邢不行|量化小讲堂系列60-实战篇】
引言: 邢不行的系列帖子"量化小讲堂",通过实际案例教初学者使用python进行量化投资,了解行业研究方向,希望能对大家有帮助. [历史文章汇总]请点击此处 [必读文章]EOS期现 ...
- [译] 使用 python 分析 14 亿条数据
原文地址:Analysing 1.4 billion rows with python 原文作者:Steve Stagg 译文出自:掘金翻译计划 本文永久链接:github.com/xitu/gold ...
- 讲python讲得好的评价_分析20万条弹幕告诉你,8.9分的高分剧《隐秘的角落》到底好看在哪儿?...
CDA数据分析师 出品作者:Mika 数据:真达 后期:泽龙 Show me data,用数据说话 今天我们聊一聊 <隐秘的角落> 点击下方视频,先睹为快: 最近这部<隐秘的角落&g ...
- 分析20万条弹幕告诉你,8.9分的高分剧《隐秘的角落》到底好看在哪儿?
最近这部<隐秘的角落>彻底火了,目前在豆瓣高达8.9分,有45万余人进行了评论. 一时间剧中张东升那句「爬山」.「你说我还有机会吗」 承包了6月份的梗.各种表情包和段子齐飞. 作为主演秦昊 ...
- EDG夺冠,用爬虫+数据分析+自然语言处理(情感分析)+数据可视化分析3万条数据:粉丝都疯了(唯一原创)
原创不易,本文禁止抄袭.转载,违权必究! 目录 一.EDG夺冠信息 二.实战目标 2.1 网络爬虫 2.2 数据可视化(词云图) 2.3 自然语言处理(情感分析) 三.bilibili接口分析 四.编 ...
最新文章
- Docker 不香吗,为啥还要 K8s?
- 雷林鹏分享:PHP 简介
- eclipse常用插件安装
- qt定时连续发送udp数据包_TCP和UDP
- 成功解决Both binary classification-only and multiclassification-only loss function or metrics specified
- SAP Fiori Elements 公开课第二单元学习笔记:Fiori Elements 架构
- 三菱电机宣布放弃液晶面板业务 2022年6月停止生产相关模组
- hector与gmapping总结
- 员工考勤管理系统html,网页考勤系统人员排班操作说明
- 2019冬季乙级考试
- 【标准】ISO14001:2015新版标准正式发布
- 针对华为荣耀6移动高配版(H60-L11)的root工作
- 中国移动 呼叫转移 设置
- 飞飞影视php 漏洞,飞飞影视SQL injection exploit[转]
- Hive——Hive数据类型
- 科比最新超酷广告《门徒》
- 第6章 冷眼看“学而无用”——《逆袭大学》连载
- 怎样将PPT文件进行压缩?这几步很简单
- SQL之ADD_MONTHS函数用法
- [渝粤教育] 西南交通大学 大学生的智慧篮球 参考 资料
热门文章
- 工商银行支付接口 B2C PHP ecshop
- 分类鱼 VGG网络 python学习 深度学习 paddlepaddle学习
- 安装SQL Server 2000出现“以前进行的程序安装创建了挂起的文件操作”的解决办法
- opencv3.1 提取图像中某一像素点的HSV值并判断颜色
- (转载)ACM训练计划,先过一遍基础再按此拼搏吧!!!!
- ABAP开发smartforms的打印问题小数位的逗号设置成小数点
- h5——socket io的使用
- 安腾服务器性能测试,黎明中的64位 WIN64位与32位性能对比
- 性能测试-操作和优化分析
- 芯旺微chipon IDE KF32 IDE安装教程