《復(fù)聯(lián) 4》國(guó)內(nèi)上映第十天,程序員的江湖里開(kāi)始流傳這樣一個(gè)故事,即:
漫威宇宙,其實(shí)就講了一件事情。整個(gè)宇宙就好比一個(gè)項(xiàng)目組。其中有一群叫作美國(guó)隊(duì)長(zhǎng)、鋼鐵俠、驚奇隊(duì)長(zhǎng)、浩克、索爾等人在維護(hù)這個(gè)項(xiàng)目,兢兢業(yè)業(yè)的維護(hù)整個(gè)項(xiàng)目。
某一天,出現(xiàn)了一個(gè)天才程序員,叫滅霸。當(dāng)他加入到這家公司的時(shí)候,他意識(shí)到,這個(gè)項(xiàng)目已經(jīng)非常龐大,僅僅是編譯,就要幾個(gè)小時(shí)。運(yùn)行起來(lái)負(fù)重累累。而服務(wù)器資源又非常的有限,老板又不給預(yù)算買新機(jī)器,如果一直繼續(xù)這么開(kāi)發(fā)下去,這個(gè)項(xiàng)目遲早要出現(xiàn) P0 事故。于是,他下定決定要把這個(gè)項(xiàng)目全面優(yōu)化,使用用面向?qū)ο笏枷耄崛≈貜?fù)代碼,業(yè)務(wù)拆分,算法優(yōu)化等手段,徹底優(yōu)化,目標(biāo)是代碼量減少 50%。
美國(guó)隊(duì)長(zhǎng)帶領(lǐng)的項(xiàng)目組叫復(fù)仇者聯(lián)盟,發(fā)現(xiàn)了滅霸程序員的想法后,阻止并警告滅霸說(shuō):不要輕易去改老代碼!!很容易出 bug 的,代碼能跑就行!!
那么,作為一個(gè)寫程序員的電影,我們?cè)趺床荒苡脭?shù)據(jù)來(lái)分析一下,喜歡漫威宇宙的觀眾對(duì)《復(fù)聯(lián) 4》的評(píng)價(jià)呢?
抓取數(shù)據(jù)
業(yè)界朋友們,在電影分析中,使用貓眼的數(shù)據(jù)比較多。在本文中,筆者也使用了貓眼的接口來(lái)獲取數(shù)據(jù),方便處理,數(shù)據(jù)量也比較多。
在 Python 中,使用 Request 可以很方便地發(fā)送請(qǐng)求,拿到接口返回的 JSON 數(shù)據(jù),來(lái)看代碼:
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
請(qǐng)求返回的是一個(gè) JSON 數(shù)據(jù),拿到我們想要的評(píng)論原始數(shù)據(jù),并將數(shù)據(jù)存儲(chǔ)在數(shù)據(jù)庫(kù)中:
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()
經(jīng)過(guò)大概兩個(gè)小時(shí),終于從貓眼爬取了大約 9 萬(wàn)條數(shù)據(jù)。數(shù)據(jù)庫(kù)文件已經(jīng)超過(guò)了 100M 了。
數(shù)據(jù)清洗
因?yàn)樵谏厦孀ト∠聛?lái)的數(shù)據(jù),直接進(jìn)行了原數(shù)據(jù)的存儲(chǔ),沒(méi)有進(jìn)行數(shù)據(jù)的解析處理。接口中包含了很多數(shù)據(jù),有用戶信息、評(píng)論信息等。本次分析,只使用了部分?jǐn)?shù)據(jù),所以需要將用到的相關(guān)數(shù)據(jù)清洗出來(lái):
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()
通過(guò) JSON 庫(kù)將原始數(shù)據(jù)解析出來(lái),將我們需要的信息存儲(chǔ)到新的數(shù)據(jù)表中。
數(shù)據(jù)分析
因?yàn)闆](méi)有任何一個(gè)平臺(tái)能夠拿到用戶的購(gòu)票數(shù)據(jù),我們只能從評(píng)論的數(shù)據(jù)中,以小見(jiàn)大,從這些數(shù)據(jù)中,分析出一些走勢(shì)。 在評(píng)論數(shù)據(jù)中,我們能看到評(píng)論用戶所在的城市。將數(shù)據(jù)所在的位置解析,劃分到各對(duì)應(yīng)的行政省,可以看到每個(gè)省評(píng)論數(shù)量,見(jiàn)下圖(顏色越紅,用戶評(píng)論數(shù)量越多):
城市
從圖中可以看到, 上海、廣州、四川用戶的數(shù)量顯然要比其他城市的用戶數(shù)量要多得多。再來(lái)看一下代碼:
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()]
漫威電影一直深受中國(guó)朋友們喜歡的高分電影。豆瓣評(píng)分 8.7 分,那我們的評(píng)論用戶中,又是一個(gè)什么樣的趨勢(shì)呢?見(jiàn)下圖:
評(píng)分?jǐn)?shù)
從圖中可以看到,評(píng) 5 分的數(shù)量遠(yuǎn)高于其他評(píng)分,可見(jiàn)中國(guó)的觀眾朋友確實(shí)喜歡漫威的科幻電影。
復(fù)聯(lián)從 1 開(kāi)始便是漫威宇宙各路超級(jí)英雄的集結(jié),到現(xiàn)在的第 4 部,更是全英雄的匯聚。那么,在這之中,哪位英雄人物更受觀眾歡迎?先看代碼:
attr=["滅霸","美國(guó)隊(duì)長(zhǎng)","鋼鐵俠","浩克","奇異博士","蜘蛛俠","索爾","黑寡婦","鷹眼","驚奇隊(duì)長(zhǎng)","幻視","猩紅女巫","蟻人","古一法師"]alias={"滅霸":["滅霸","Thanos"],"美國(guó)隊(duì)長(zhǎng)":["美國(guó)隊(duì)長(zhǎng)","美隊(duì)"],"浩克":["浩克","綠巨人","班納","HULK"],"奇異博士":["奇異博士","醫(yī)生"],"鋼鐵俠":["鋼鐵俠","stark","斯塔克","托尼","史塔克"],"蜘蛛俠":["蜘蛛俠","蜘蛛","彼得","荷蘭弟"],"索爾":["索爾","雷神"],"黑寡婦":["黑寡婦","寡姐"],"鷹眼":["鷹眼","克林頓","巴頓","克林特"],"驚奇隊(duì)長(zhǎng)":["驚奇隊(duì)長(zhǎng)","卡羅爾","驚奇"],"星云":["星云"],"猩紅女巫":["猩紅女巫","緋紅女巫","旺達(dá)"],"蟻人":["蟻人","蟻俠","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")
運(yùn)行結(jié)果如下圖,可以看到鋼鐵俠鋼鐵俠是實(shí)至名歸的 C 位,不僅電影在電影中是,在評(píng)論區(qū)仍然也是實(shí)至名歸的 C 位,甚至于遠(yuǎn)超美隊(duì)、寡姐和雷神:
英雄評(píng)論次數(shù)
從以上觀眾分布和評(píng)分的數(shù)據(jù)可以看到,這一部劇,觀眾朋友還是非常地喜歡。前面,從貓眼拿到了觀眾的評(píng)論數(shù)據(jù)。現(xiàn)在,筆者將通過(guò) Jieba 把評(píng)論進(jìn)行分詞,然后通過(guò) Wordcloud 制作詞云,來(lái)看看,觀眾朋友們對(duì)《復(fù)聯(lián)》的整體評(píng)價(jià):
詞云分析
可以看到,滅霸和鋼鐵俠出現(xiàn)的詞頻比其他英雄要高很多。這是否表示,這部劇的主角就是他們兩個(gè)呢?
細(xì)心的朋友應(yīng)該發(fā)現(xiàn)了,鋼鐵俠、滅霸的數(shù)量在詞云和評(píng)論數(shù)量里面不一致。原因在于,評(píng)論數(shù)量就按評(píng)論條數(shù)來(lái)統(tǒng)計(jì)的,而詞云中,使用的是詞頻,同一條評(píng)論中,多次出現(xiàn)會(huì)多次統(tǒng)計(jì)。所以,滅霸出現(xiàn)的次數(shù)居然高于了鋼鐵俠。
最后,再來(lái)分析一下鋼鐵俠與滅霸的情感分析,先上代碼:
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 來(lái)進(jìn)行情感分析。
情感分析,又稱為意見(jiàn)挖掘、傾向性分析等。簡(jiǎn)單而言,是對(duì)帶有情感色彩的主觀性文本進(jìn)行分析、處理、歸納和推理的過(guò)程。
滅霸
鋼鐵俠
從圖中看到, 鋼鐵俠的正向情感要比滅霸的正向情感要高,反派角色就是容易被人抗拒。
最最后,從《銀河護(hù)衛(wèi)隊(duì)》時(shí)期穿越而來(lái)的滅霸在最后分鐘變成了粉末消散而去,這也給我們程序員一個(gè)警鐘:
“重構(gòu)代碼,改善設(shè)計(jì),降低系統(tǒng)復(fù)雜度,這樣做很好。但是,一定要保證系統(tǒng)的穩(wěn)定運(yùn)行,不留安全隱患,不然,早晚會(huì)丟掉自己的工作。”
-
數(shù)據(jù)
+關(guān)注
關(guān)注
8文章
7134瀏覽量
89402 -
代碼
+關(guān)注
關(guān)注
30文章
4823瀏覽量
68902 -
python
+關(guān)注
關(guān)注
56文章
4807瀏覽量
84956
原文標(biāo)題:Python分析9萬(wàn)條數(shù)據(jù)告訴你復(fù)仇者聯(lián)盟誰(shuí)才是絕對(duì)C位
文章出處:【微信號(hào):rgznai100,微信公眾號(hào):rgznai100】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論