作者 | 罗昭成

责编 | 唐小引

转载自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位相关推荐

  1. Python 分析 9 万条数据告诉你复仇者联盟谁才是绝对 C 位!

    <复联 4>国内上映第十天,程序员的江湖里开始流传这样一个故事,即: 漫威宇宙,其实就讲了一件事情.整个宇宙就好比一个项目组.其中有一群叫作美国队长.钢铁侠.惊奇队长.浩克.索尔等人在维护 ...

  2. 复仇者联盟谁才是绝对 C 位?Python分析9万条数据告诉你答案

    作者 | 罗昭成 责编 | 唐小引 <复联 4>国内上映第十天,程序员的江湖里开始流传这样一个故事,即:漫威宇宙,其实就讲了一件事情.整个宇宙就好比一个项目组.其中有一群叫作美国队长.钢铁 ...

  3. python的歌曲评论数据分析_用Python分析44万条数据,揭秘如何成为网易云音乐评论区的网红段子手...

    有个段子讲"十年文案老司机,不如网易评论区,网易文豪遍地走,评论全部单身狗",网易云音乐的评论区也一直都是各类文案大神的聚集地. 那么我们普通用户到底如何成为网易云音乐评论里的热评 ...

  4. Python 分析 10 万条弹幕告诉你:《古董局中局2》到底好不好看?

    作者 | 泽龙.Mika 来源 | CDA数据分析师 今天我们聊一聊<古董局中局2> 点击下方视频,先睹为快: 上周日,有一部鉴宝题材的剧静悄悄上线了,那就是夏雨.魏晨等主演的古董局中局系 ...

  5. 8万条数据告诉你:跟着大股东和高管买他家股票,能赚钱吗?【邢不行|量化小讲堂系列60-实战篇】

    引言: 邢不行的系列帖子"量化小讲堂",通过实际案例教初学者使用python进行量化投资,了解行业研究方向,希望能对大家有帮助. [历史文章汇总]请点击此处 [必读文章]EOS期现 ...

  6. [译] 使用 python 分析 14 亿条数据

    原文地址:Analysing 1.4 billion rows with python 原文作者:Steve Stagg 译文出自:掘金翻译计划 本文永久链接:github.com/xitu/gold ...

  7. 讲python讲得好的评价_分析20万条弹幕告诉你,8.9分的高分剧《隐秘的角落》到底好看在哪儿?...

    CDA数据分析师 出品作者:Mika 数据:真达 后期:泽龙 Show me data,用数据说话 今天我们聊一聊 <隐秘的角落> 点击下方视频,先睹为快: 最近这部<隐秘的角落&g ...

  8. 分析20万条弹幕告诉你,8.9分的高分剧《隐秘的角落》到底好看在哪儿?

    最近这部<隐秘的角落>彻底火了,目前在豆瓣高达8.9分,有45万余人进行了评论. 一时间剧中张东升那句「爬山」.「你说我还有机会吗」 承包了6月份的梗.各种表情包和段子齐飞. 作为主演秦昊 ...

  9. EDG夺冠,用爬虫+数据分析+自然语言处理(情感分析)+数据可视化分析3万条数据:粉丝都疯了(唯一原创)

    原创不易,本文禁止抄袭.转载,违权必究! 目录 一.EDG夺冠信息 二.实战目标 2.1 网络爬虫 2.2 数据可视化(词云图) 2.3 自然语言处理(情感分析) 三.bilibili接口分析 四.编 ...

最新文章

  1. Docker 不香吗,为啥还要 K8s?
  2. 雷林鹏分享:PHP 简介
  3. eclipse常用插件安装
  4. qt定时连续发送udp数据包_TCP和UDP
  5. 成功解决Both binary classification-only and multiclassification-only loss function or metrics specified
  6. SAP Fiori Elements 公开课第二单元学习笔记:Fiori Elements 架构
  7. 三菱电机宣布放弃液晶面板业务 2022年6月停止生产相关模组
  8. hector与gmapping总结
  9. 员工考勤管理系统html,网页考勤系统人员排班操作说明
  10. 2019冬季乙级考试
  11. 【标准】ISO14001:2015新版标准正式发布
  12. 针对华为荣耀6移动高配版(H60-L11)的root工作
  13. 中国移动 呼叫转移 设置
  14. 飞飞影视php 漏洞,飞飞影视SQL injection exploit[转]
  15. Hive——Hive数据类型
  16. 科比最新超酷广告《门徒》
  17. 第6章 冷眼看“学而无用”——《逆袭大学》连载
  18. 怎样将PPT文件进行压缩?这几步很简单
  19. SQL之ADD_MONTHS函数用法
  20. [渝粤教育] 西南交通大学 大学生的智慧篮球 参考 资料

热门文章

  1. 工商银行支付接口 B2C PHP ecshop
  2. 分类鱼 VGG网络 python学习 深度学习 paddlepaddle学习
  3. 安装SQL Server 2000出现“以前进行的程序安装创建了挂起的文件操作”的解决办法
  4. opencv3.1 提取图像中某一像素点的HSV值并判断颜色
  5. (转载)ACM训练计划,先过一遍基础再按此拼搏吧!!!!
  6. ABAP开发smartforms的打印问题小数位的逗号设置成小数点
  7. h5——socket io的使用
  8. 安腾服务器性能测试,黎明中的64位 WIN64位与32位性能对比
  9. 性能测试-操作和优化分析
  10. 芯旺微chipon IDE KF32 IDE安装教程