CDA数据分析师出品 【导语】:今天我们聊聊国产职场剧《完美关系》,Python技术部分可以直接看第三部分。 Showmedata,用数据说话 今天我们聊聊职场剧《完美关系》 点击下方视频,先睹为快: 最近一连出了好几部职场剧,有孙俪主演讲述房地产行业的《安家》,李易峰主演讲律师的《我在北京等你》,以及佟丽娅、黄轩主演围绕公关行业展开的《完美关系》。 其中,《安家》是翻拍自高分日剧《卖房子的女人》,《我在北京等你》讲的是一名律师奋斗的故事,《完美关系》则是国产职场剧涉及的又一全新行业公关。 那么这三部剧的口碑如何呢? 截止到目前为止,《安家》在豆瓣的评分为6。2分,《我在北京等你》豆瓣5。2分,《完美关系》为3。9分。都不是特别好的成绩。 《完美关系》播出后更是有公关行业的小伙伴吐槽:我们不想被这么代言啊! 那么《完美关系》到底是哪里差强人意呢?今天我们就先聊聊这部《完美关系》 01:hr近年频频扑街的 国产职场剧 近年来,推出的国产职场剧还真不少,涉及的行业从地产、互联网、医疗、到翻译、律师等等,几乎形形色色的行业都有。但这些剧的口碑如何呢? 先看几部比较热门的: 以上这些剧在播出时都频频上热搜,但口碑就差强人意了。分数3。55。5不等,连6分及格线都不到。 相关行业的从业者也吐槽,根本没有反应出行业的真实现状,美其名曰职场剧,其实这不是披着行业外衣的偶像剧嘛! 进一步汇总国产职场剧的情况可以发现: 图源:DT财经 从2008年到2020年3月,共出品64部职场剧,近两年职场题材更有井喷之势,2018年和2019年每年都有13部,数量是2014年的13倍! 数量上来了,然后质量就堪忧了。从这些职场剧的豆瓣评分可见,平均分一直在5。5分徘徊。 02:hr披着公关外衣的 《完美关系》 那这次瞄准公关行业的《完美关系》能为国产职场剧正名吗? 《完美关系》是由安建执导,黄轩、佟丽娅领衔主演,陈数、高露主演的都市职场剧。 故事讲的是公关合伙人卫哲、江达琳等人从单枪匹马到并肩作战,积极迎接在公关实战中遇到的压力与困难,互相影响、共同成长的故事。 图源:《完美关系》官方剧照 从2月18日首播以来,《完美关系》的收视率越来越高,3月11日《完美关系》凭借6。92的市场占有率,拿下了收视率排行榜的冠军宝座。 但同时收获的吐槽和差评也不少,主要集中在: 剧情太浮夸,对公关行业的刻画不真实; 女主的傻白甜人设实在不讨喜; 演员的演技流于表面,难以产生共鸣等等 03:hr《完美关系》豆瓣3。9分 到底冤不冤? 《完美关系》在豆瓣已有60284人进行评分,目前仅为3。9分。那么《完美关系》豆瓣3。9分到底冤不冤呢? 我们对《完美关系》豆瓣的影评数据进行了收集整理。 整个数据分析的过程分为三步: 获取数据 数据预处理 数据可视化 以下是具体的步骤和代码实现: 获取数据 1:hr此次我们选择豆瓣短评的数据作为分析对象。由于豆瓣的限制,非登录状态下最多获取200条数据,登录状态下最多获取500条数据。 为了解决登录的问题,此次我们使用requests的Session方法来让代码自动保存Cookie信息,维持登录和会话保持状态。然后使用Xapth配合正则语句进行数据的提取。 如图所示,本次我们需要获取的主要内容如下: 用户名 用户主页 评论时间 评论星级 短评内容 短评投票数 用户主页(用于获取城市) 评分分布 代码实现: 导入所需包 importpandasaspd importrequests importparsel importre importtime fromfakeuseragentimportUserAgent deflogindouban(): 功能:登录豆瓣,维持会话形式 globals 初始化session srequests。Session() 登录地址 loginurlhttps:accounts。douban。comjmobileloginbasic 添加headers headers{useragent:UserAgent()。random} 表单数据 formdata{ name:你的账号, password:你的密码, remember:false } post登录 try: s。post(loginurl,headersheaders,dataformdata) except: print(登录失败) defgetonepage(url): 功能:给定URL地址,获取豆瓣电影一页的短评信息 :paramurl:电影URL地址 :return:返回数据框 添加headers headers{useragent:UserAgent()。random} 发起请求 try: rs。get(url,headersheaders,timeout5) except: time。sleep(3) rs。get(url,headersheaders,timeout5) 解析网页 dataparsel。Selector(r。text) 获取用户名 username〔re。findall(r。?(。?)。,i) foriindata。xpath(span〔classcommentinfo〕)。extract()〕 获取评分 rating〔re。findall(r。?spanclassallstardtitle(。?)。,i) foriindata。xpath(span〔classcommentinfo〕)。extract()〕 获取评论时间 commenttime〔re。findall(spanclasscommenttimetitle(。)。,i) foriindata。xpath(span〔classcommentinfo〕)。extract()〕 获取短评信息 commentinfodata。xpath(span〔classshort〕text())。extract() 投票次数 votesnumdata。xpath(span〔classcommentvote〕spantext())。extract() 获取主页URL userurldata。xpath(div〔classavatar〕ahref)。extract() 保存数据 dfonepd。DataFrame({ username:username, rating:rating, commenttime:commenttime, commentinfo:commentinfo, votesnum:votesnum, userurl:userurl }) returndfone defgetallpage(movieid,pagenum25): 功能:获取豆瓣电影25页短评信息 :parammovieid:电影ID :parampagenum:爬取页面数 :return:返回数据框 df25pd。DataFrame() foriinrange(pagenum): 构造URL urlhttps:movie。douban。comsubject{}comments?start{}limit20statusP。format(movieid, i20) 调用函数 dfgetonepage(url) 循环追加 df25df25。append(df,ignoreindexTrue) 打印进度 print(我正在获取第{}页的信息。format(i1)) 休眠一秒 time。sleep(1) returndf25 ifnamemain: 先登录豆瓣 logindouban() 获取完美关系 dfallgetallpage(movieid30221758) print(dfall。shape) 获取的数据以数据框的形式存储,结果如下: 从用户主页的地址可以进一步获取到用户的城市信息,此次共获取500条数据。 数据预处理 2:hr对于获取的数据,我们需要进行进一步的处理以满足可视化的需求。 推荐星级:转换为15分 评论时间:转换为时间类型,并提取日期数据 城市信息:有未填写数据、海外城市、写错的需要进行处理 短评信息:需要进行分词处理 部分关键代码: 处理评分列 df〔rating〕〔re。sub(r〔〕,,i)foriindf〔rating〕〕 替换空列表 df〔rating〕。replace(〔〕,还行,inplaceTrue) 定义字典 ratingdict{ 很差:1星, 较差:2星, 还行:3星, 推荐:4星, 力荐:5星 } df〔rating〕df〔rating〕。map(ratingdict) 评论信息分词处理 合并为一篇 txtdf〔commentinfo〕。str。cat(sep。) 添加关键词 jieba。addword(黄轩) jieba。addword(佟丽娅) jieba。addword(男主) jieba。addword(女主) jieba。addword(跳戏) jieba。addword(颜值) jieba。addword(吐槽) jieba。addword(装逼) jieba。addword(国产剧) 读入停用词表 stopwords〔〕 withopen(stopwords。txt,r,encodingutf8)asf: linesf。readlines() forlineinlines: stopwords。append(line。strip()) 添加停用词 stopwords。extend(〔一部,一拳,一行,10,啊啊啊,一句, get,哈哈哈哈,哈哈哈,越来越,一步, 一种,样子,几个,第一集,一点, 第一,没见,一集,第一次,两个, 二代,真的,2020,令人〕) 评论字段分词处理 wordnumjieba。analyse。extracttags(txt, topK100, withWeightTrue, allowPOS()) 去停用词 wordnumselected〔〕 foriinwordnum: ifi〔0〕notinstopwords: wordnumselected。append(i) keywordspd。DataFrame(wordnumselected,columns〔words,num〕) 数据可视化 3:hr我们使用pyecharts进行数据可视化分析,安装命令:pipinstallpyecharts。分析结果如下: 总体评分分布 有41。6的人都给了1星,其次28。2的人给了5星。15。4的人给了2星。由此可见本剧的两极分化特别严重,有些人特别喜欢给到了5星好评,同时觉得拍的很烂的也有不少。 代码实现: scorepercdf〔rating〕。valuecounts()df〔rating〕。valuecounts()。sum() scorepercnp。round(scoreperc100,2) print(scoreperc) 绘制饼图 frompyecharts。chartsimportPie frompyechartsimportoptionsasopts pie1Pie(initoptsopts。InitOpts(width1350px,height750px)) pie1。add(, 〔zip(scoreperc。index,scoreperc。values)〕, radius〔35,70〕) pie1。setglobalopts(titleoptsopts。TitleOpts(title总体评分分布), legendoptsopts。LegendOpts(orientvertical,postop15,posleft2), toolboxoptsopts。ToolboxOpts()) pie1。setseriesopts(labeloptsopts。LabelOpts(formatter{c})) pie1。setcolors(〔D7655A,FFAF34,3B7BA9,EF9050,6FB27C〕) pie1。render() 评分热度时间走势 评分热度主要集中在2月18日,也就是《完美关系》首播的那天,其次热度不断下降。 代码实现: df〔commenttime〕pd。todatetime(df〔commenttime〕) df〔commentdate〕df〔commenttime〕。dt。date commentnumdf〔commentdate〕。valuecounts()。sortindex() 折线图 frompyecharts。chartsimportLine line1Line(initoptsopts。InitOpts(width1350px,height750px)) line1。addxaxis(commentnum。index。tolist()) line1。addyaxis(评论热度,commentnum。values。tolist(), areastyleoptsopts。AreaStyleOpts(opacity0。5), labeloptsopts。LabelOpts(isshowFalse)) line1。setglobalopts(titleoptsopts。TitleOpts(title时间走势图), toolboxoptsopts。ToolboxOpts(), visualmapoptsopts。VisualMapOpts(max200)) line1。render() 评论用户城市分布 观看和评分人群主要集中在北上广三地,其次是江苏、四川等地。 代码实现: 国内城市top10 citytop10df〔citydealed〕。valuecounts()〔:12〕 citytop10。drop(国外,inplaceTrue) citytop10。drop(未填写,inplaceTrue) 条形图 frompyecharts。chartsimportBar bar1Bar(initoptsopts。InitOpts(width1350px,height750px)) bar1。addxaxis(citytop10。index。tolist()) bar1。addyaxis(城市,citytop10。values。tolist()) bar1。setglobalopts(titleoptsopts。TitleOpts(title评论者Top10城市分布), visualmapoptsopts。VisualMapOpts(max50), toolboxoptsopts。ToolboxOpts()) bar1。render() citynumdf〔citydealed〕。valuecounts() citynum。drop(国外,inplaceTrue) citynum。drop(未填写,inplaceTrue) frompyecharts。chartsimportMap 地图 map1Map(initoptsopts。InitOpts(width1350px,height750px)) map1。add(,〔list(z)forzinzip(citynum。index。tolist(),citynum。values。tolist())〕, maptypechina) map1。setglobalopts(titleoptsopts。TitleOpts(title评论者国内城市分布), visualmapoptsopts。VisualMapOpts(max50), toolboxoptsopts。ToolboxOpts()) map1。render() 评论词云 而在词云方面讨论最多的就是黄轩和佟丽娅两大主演了。 其次关于女配陈数的讨论也很多,无论是陈数这次强大的职场新女性人设,还是惊艳干练的职场穿搭都是很吸睛的。 然后对演技和剧情上的吐槽也不少。评价中油腻、尴尬、狗血等负面词频频出现。 代码实现: 词云图 frompyecharts。chartsimportWordCloud frompyecharts。globalsimportSymbolType word1WordCloud(initoptsopts。InitOpts(width1350px,height750px)) word1。add(,〔zip(keywords。words,keywords。num)〕, wordsizerange〔20,200〕, shapeSymbolType。DIAMOND) word1。setglobalopts(titleoptsopts。TitleOpts(完美关系豆瓣短评词云图), toolboxoptsopts。ToolboxOpts()) word1。render() 那么《完美关系》你怎么看呢? 作者:Mika