(大)數據分析:豆瓣電影分析報告【1】

Python 2.7
IDE Pycharm 5.0.3
PyExcelerator 0.6.4a
可視化 Plotly


前言

在上次爬完豆瓣的東西后,感覺鍛(zhuang)煉(yi)能(xia)力(bi)之外,貌似并沒有實際用處,說實話,我寧可去網頁一頁頁瀏覽電影也不愿意面對這蒼白的文字。所以,分析一下比較好。


目的

根據豆瓣所有的電影,分析各國各地區各類別時間年份評分數量等各個參數之間的聯系,大體上進行分析。我會說謊,但是數據不會。


豆瓣的電影世界

這次爬取的電影總共6323部,因為豆瓣沒有全部電影的列表,所以爬取的時候按照每類進行爬取,之后整合,去重,所剩參評影片4007部。(算法略簡陋,最后列表大概有十部左右未爬取,但是綜合各類別包含關系,誤差會變得很小)

簡單介紹下情況后,根據所需要的對比數據再進行再分割的處理,這個具體代碼片段詳見后半部分。好了,接下來輪到plotly大顯身手的時候了。


今天要分析什么?

主要比較世界電影和中國,以及中國大陸和中國港臺電影之間的差別,分析各參數之間是否存在關聯性及對評分產生的影響;數據來源于豆瓣,我對評分不做主觀表現,我只對數據進行分析展示,能力偏弱,但圖像不弱。


能從年份&評分中看出點什么?

首先放上一張堪憂的世界電影好評趨勢圖

豆瓣世界電影的評分均值趨勢
  • 世界電影的評分均值趨勢
世界電影的評分Box箱線圖趨勢
  • 世界電影的評分Box箱線圖趨勢
豆瓣世界的均值圖趨勢
  • 可以看出的是,豆瓣世界電影(簡稱世界電影),近些年的好評的趨勢在逐年下降,特別是近兩年!也就是說,在豆瓣里,近些年的低分評價越來越多,從評分均值上看,一直處于下滑狀態,而且下滑曲線越來越陡,大量的爛片充斥著電影世界,導致平均分被嚴重拉低。另一方面,觀察箱線圖(箱線圖的是什么意思?),從箱線圖的第三四分位數(等于該樣本中所有數值由小到大排列后第75%的數字)越來越低,可見,有75%的數據評分都在(約)7.3分之下;而第二四分位數,也就是中位數線也逐年向低分線靠近,對最近世界電影略微感到堪憂,難怪好片越來越少,垃圾片縱橫。。。

補充箱線圖概念:(@ZhangHongju--箱線圖(數據分布)分析 )

箱線圖描述

世界電影趨勢這樣,那么中國呢?

豆瓣中國電影評分均值圖趨勢
  • 中國電影評分均值圖趨勢,紅色線為均值線
中國評分均值和全世界之間的比較
  • 中國評分均值和全世界之間的比較

  • 這零零散散的數據也真是少的可憐,上架豆瓣的中國電影數據量略微有點少,參評數目大概為662部左右,其中中國大陸電影為295部,中國港臺為367部,趨勢和世界電影的趨勢差不多,也是頹廢狀態,但是分數更加低,大概中位數在6分以下 ,那么喜歡電影的朋友肯定知道大陸和港臺電影風格還是有很大區別的,至于他們趨勢分別是怎樣的呢。。。


接下來看下大陸和港臺的電影趨勢

豆瓣中國大陸港臺的box圖趨勢
  • 豆瓣中國大陸港臺的box圖趨勢
  • 整體趨勢圖大概是這樣的,對比圖形如上所示,大致維持在一個對等的水平,港臺電影幾乎穩定發揮,有好有壞,而大陸電影在有些年份的評分卻差距非常大,為了方便,截取1980年之后的數據,使用均值線來看一下效果;
這里寫圖片描述
  • 豆瓣中國大陸港臺的評分均值圖趨勢
  • 注:這里大于2是指取均值時候分母大于二,不然就是單個樣本了,沒辦法,稍微協調一下,不然會抖動太明顯。

把時間軸推移到二十世紀八十年代

豆瓣中國大陸港臺的box圖趨勢放大圖1980-2000
  • 豆瓣中國大陸港臺的box圖趨勢放大圖1980-2000
豆瓣中國大陸港臺的均值線趨勢放大圖1980-2000
  • 豆瓣中國大陸港臺的均值線趨勢放大圖1980-2000
  • 值得驚訝的是,在我的印象中,港臺的電影應該會好于大陸,但是出乎我的意料,那時候的中國大陸電影評分都非常好,93,94年更是出彩,除了1989年那一年,其余的都要好于港臺的水平,那時候的中國電影啊,感覺才是最繁盛的時候。

把時間軸推移到近十余年

豆瓣中國大陸港臺評分均值圖趨勢放大圖2002-2016
  • 豆瓣中國大陸港臺評分均值圖趨勢放大圖2002-2016
  • 大陸電影在2009年之后,很穩定的下滑,而港臺方面則是掙扎下滑,2006年大陸方面達到一個小巔峰,但之后有嚴重下滑,雖然09年略有起勢,但之后又開始下滑,一蹶不振的那種下滑

豆瓣中國大陸港臺的box圖趨勢放大圖2002-2016

豆瓣中國大陸港臺的box圖趨勢放大圖2002-2016
  • 豆瓣中國大陸港臺的box圖趨勢放大圖2002-2016
  • 在觀察完均值之后,對箱線圖進行觀察:在2012年之前,港臺和大陸電影都能保持一個比較穩定的水平,評分不算太高,但是也不低,兩位并駕齊驅,雖然最高分在07年之后一直由港臺電影占據,但是大陸的最高分也緊追其后。在2014年到達高峰之后,大陸和港臺電影都陷入了低分的頹勢當中,中位數急劇下滑,各個指數評分都下滑嚴重,下限也不斷被刷新,這點從2014年的下限就可以看出一股爛片趨勢,而在15和16年達到整體電影向爛片遷徙的狀態,中位數紛紛跌破6分,而最高評分也止步于8分;我的分析能力并不是很強,但我仍然可以看出近些年來的確沒有讓人眼前一亮的片子了,不止是中國,全世界范圍內也是大抵如此。

對比近十余年同期世界電影

世界電影與中國電影均值箱線圖2002-2016
  • 世界電影與中國電影均值箱線圖2002-2016
  • 雖然全世界電影都有頹廢芝士,但是在14年之前,最低評分一直由國外保持著(08除外),但是在14年之后,最低分一直由我國負責刷新,而且第三四分位數幾乎一直保持在世界平均水平之下,這點也值得我們思考。雖然世界電影有頹廢趨勢,但是高分電影仍然可以到達9分以上的分數,相比較于中國高分低分一塊下降的局勢。。。。。。

再來看一下上世紀八十年代世界其他電影進展

上世紀八十年代同期對比
  • 上世紀八十年代同期對比
上世紀八十年代同期對比
  • 一句話概括這段時期:均值分始終低于世界平均水平,不好意思,我們扯著世界的蛋了。。。。

影評數和年份又有什么關系呢?

全世界和中國電影影評數對比
  • 全世界和中國電影影評數對比

  • 注意:這里我選取了每年電影必須大于5部的年份進行比較,不然曲線會變得太陡峭。比如橙色這根線,我沒有做過處理,在1980年之后,參評電影遠超5部之多,所以兩線重合,但是在1980年之前,參評數目少于5部,被我切了。。

  • 可以看出,中文的影評數在1980年一直追平世界平均水平,而在2004年之后呈上升趨勢,一方面中國電影在此時刻開始數量不斷上升,近兩年成爆炸方式上升(難怪爛片也增加超多,評分就被相應拉低),來看看近些年電影產量:

中港電影產量對比
  • 中港電影產量對比:我說,國內的大導演們,能消停點拍點好片么,這兩年拍的都是什么玩意啊,數量是上去了,質量呢?港臺電影雖然數量沒有上升,但是不驕不躁穩扎穩打啊,你看看吊車尾一溜的中國大陸。。。。。
評分倒數幾位
  • 評分倒數幾位:幾乎都是15-16年拍的,全部是大陸拍的,厲害了word哥(手動再見)

所以回到上一個話題,就是電影評論數和年份的關系,一個原因就是拍的片多了,評論會相應上升,但是,這些求得都是均值,所以數量而言并不是非常重要,我!覺!得!是!爛片太多!吐槽也越發嚴重!!!!!但看著爛片吐槽我趕腳著還是很有意思的哈哈

補充一張圖:類型和評論數的關系

類型和評論數的關系
  • 大家看西部電影評論數為什么那么高呢?我們來看下中國都有哪些西部電影
中國的西部電影
  • 讓子彈飛,無人區。。。。。哎,我還是太年輕了
狗帶

腦洞1:年份和時長有沒有關系呢?

  • 還是看數據說話

中國大陸電影時長

中國大陸電影時長
  • 這個就有點意思了哈,我一直以為會保持在一個穩定的值,沒想到浮動還有點劇烈(雖然也只有20分鐘上下浮動)但是可以看出,時長的總體趨勢是越來越長了,近些年最低的時長也超過100分鐘,而且竟然有點周期性波動的意思,導演,這個是什么套路?
港臺和大陸時長對比
  • 港臺和大陸時長對比:難道玩的是同個套路?

嚇得我把世界電影時長拿出來看一下

中國與世界電影時長對比
  • 中國與世界電影時長對比:可以看出,國外電影時長普遍偏高,大家從電影院上映的大片也可以看出,隨隨便便就上120分鐘了,國內的話還在追趕或者說拼湊時長來比肩世界水平,這個時候我真的想把美國的數據也拿出來,大片估計時長都會上120.。。。。
中國與世界電影時長對比近五年
  • 中國與世界電影時長對比近五年:2014年之后連續兩年下降趨勢,導演你又在弄啥捏~

腦洞2:時長不會和評分有關吧?

時長和評分

時長和評分
  • 可以看出一點的是,時長很長的電影,都不會太爛,最容易踩雷區的是那種80-120分鐘的,話又說回來,時間很短的電影看來分數還是會挺高的呢,低于80分鐘的電影,評分竟然都高于8分,不管中國還是全世界,都是這個趨勢,所以,導演們,要么濃縮精華,把電影拍精致了,或者就是用內容來填充時間,飽含內容的電影或許包羅萬象,那么我們來看看,時間比較長的電影都是什么內容呢。

時長和類型探索

時長和類型對比
  • 可以看出,幾乎所有類型,中國電影的時長都在世界電影時長平均線以下,情色電影超長因為樣本只有一個,沒有什么好對比的,其余的都短于平均水平。BTW中國沒有黑色電影。。。
  • 全世界電影時長可以看出的是,歷史,戰爭,傳記,西部,災難片類型占據時長的前五名,那這時長前五的電影評分怎么樣呢,是不是有內在關聯呢?

類型&評分分析

全世界類型及評分

全世界類型評分
  • 可以看出,兒童類型電影不僅時間很短而且評分很好呢,我們來看下什么電影貼了兒童標簽
超級八Super8,6.4,27856,科幻/懸疑/驚悚/兒童,美國,英語,2011/6/10,112

所以,這個標簽是不是亂貼的呢,還是主演是孩子就是兒童電影呢,當然不是啦,反正我是沒搞懂兒童電影和動畫電影實質區別,動畫電影有些并不適合兒童呢(腦補);


世界電影時長&類型&評分探索--最長時長

時長排名前五的類型
  • 時長排名前五的類型:這里比較明顯,時長越長,評分基本能達到很高的地步,時長排名前四的電影,評分都在8分以上,所以這幾個類型可以拍的時間長一點,敘述事情可以比較清晰,細節方面可以安排較多,而災難類型電影,不建議時長拉伸,觀眾們對于災難片的認識多于特效和緊湊的劇情,所以時長的拉伸容易讓觀眾產生疲勞,觀眾只是為了尋求現實生活中不會體會到的災難刺激而去看片。壓縮災難片時長可以把成本放在特效上比較有報答率。

大陸和港臺的時長&評分及類型分布--最長時長

大陸和港臺的時長&評分及類型分布
  • 相比較而言,港臺的趨勢與世界趨勢更加接近一些,大陸我估計點錯時長樹了。上面剛分析過,災難片的時長需要控制一下不要太長,你剛拍就踩這個雷區,你說你分數低出了怪特效,怪演員,怪導演,怪編劇,怪龍套,怪我沒給你早分析你還能怪誰!學學港臺啊,把歷史,傳記往長了拍!喜歡看這類的估計都很耐得住性子的,他們要的是內涵!

大陸和港臺的時長&評分及類型分布--時長最短

大陸和港臺的時長&評分及類型分布
  • 這個就有點有趣了,時長最低的幾乎都是動畫和兒童,全世界和中國的局勢幾乎一致,大家都認為,兒童類型電影沒必要排那么多時間,把一個故事講清楚了就可以了,而且你說兒童會有多大耐心去看一部兩個多小時的電影呢。所以,這點分析出來還是挺符合現實的。

中國大陸和中國港臺類型和時長

中國大陸和中國港臺類型和時長
  • 空白的為無此類型電影,就像大陸沒有情色電影,港臺沒有歌舞電影一個道理。
  • 可以看出的是,大陸評分前五的是西部,歌舞,音樂,兒童和動畫,而港臺的前幾名依次是戰爭,傳記和家庭。差距較大的電影就是大家熟悉的港臺動作,驚悚,愛情都比大陸高出很多,要知道的是,這是平均分!大陸能勝于港臺很少,災難科幻,額。。。。。

時長&年份&評分炫酷看下

中國大陸時長&評分&年份三維分布

中國大陸時長&評分&年份三維分布

中國港臺時長&評分&年份三維分布

中國港臺時長&評分&年份三維分布
  • 我看不出啥,看著頭暈,但是挺炫酷,就掛上了。不服可以過來打我啊哈哈哈

腦洞3:標簽數目大家都是怎樣的呢?

這個大家可能沒注意,但是經過我分析(湊巧)發現,中國和世界的標簽數目都是不一樣的呢,差別還挺大的呢,還特么會影響評分呢!!(科幻/恐怖 這樣算兩個標簽)

全世界的類別標簽數目比例

全世界的類別標簽數目比例
  • OK,兩個標簽最多,三個標簽其次

中國的類型標簽數目比例

中國的類型標簽數目比例
  • 貌似和世界的差不多呢,排序一致,那我們來看看美國這個電影大國是怎樣的

美國的類型標簽數目比例

美國的類型標簽數目比例
  • 哇塞,是不是被震驚到了,竟然三個標簽的占了第一名而且差距還那么大,別看這大概沒什么影響,再給你看一幅圖

類別和詞頻

類別和詞頻
  • 這里能看出的是,美國的電影相比較于世界而言,平均每部電影所占標簽數要高于全世界平均水平和遠高于大陸水平,這能不能從另一個側面反映出美國電影受歡迎的原因呢,如果說一部電影只能闡述一方面也就是一個類別,這樣會不會使電影顯得太單調乏味呢,而美國大片,一般電影元素中都會包含好幾個主題相互映襯,并且主線依舊保持不亂,內容豐富又不缺乏主旨性,我想這點大陸電影真的可以學學。話說回來,港臺電影和世界電影保持同一水平,而大陸電影卻遠離這條基準線,我想這和受歡迎程度應該還算有點軌跡可尋。

標簽數和評分的關系

標簽數和評分的關系
  • 結論是,沒啥關系,標簽數越多最低分越高,但是標簽數那么多的電影量太少,所以并不能作為評判標準,比如我們來看一下標簽數目為8的電影的是什么奇葩玩意
厲害了我的哥

末世紀爆潮 95年的科幻片,有空我得去看看集成科幻動作懸疑驚悚犯罪音樂奇幻的電影到底是個啥


mdzz

接下來要分析什么?

時間間隔有點長,我腦子差不多糊了,還有什么想知道的,相分析的請留言,可能會得出很有意思結論呢,搞不好還能被大導演看到然后走上人生巔峰贏取白富美呢

請大家開腦洞,我來幫你驗證你的想法

福利環節

最后奉上豆瓣評分9分以上并且評論超過25萬的不看就浪費生命系列電影。

TOP27

還有豆瓣評分6分以下并且有25k人忍著被侮辱的心靈寫下影評,看了就浪費生命系列電影。

-TOP21

BTW-祖國總算為我們掙了口氣呢~話說我趕腳獨立日還是挺好看的啊0.0


好了,接下來就是程序員世界了


程序實現部分


douban_Crawl_Parts codes

代碼貼了太長,需要的請下載[源碼下載][1]
[1]: http://download.csdn.net/detail/mrlevo520/9650050

注意:原始代碼我基本不怎么用,但是能用;對于類別的連續爬取,其實寫個循環就可以了,我再爬電視劇的事后才想到,然后在之后的寫入txt也好,寫入excel也好,都是用了批量處理的代碼,這樣就不用查崗了,要知道,一個類別460部電影,即使用靜態爬也爬了我25分鐘,我還得看著它,爬完一類爬下一類。

內容格式:

殿下,這是利息!殿、利息でござる!  7.2  579  喜劇  日本  日語  2016-05-14  129

代碼格式爬取形式:

操作形式
  • 相較于以前版本,這次是爬名字類型評分等非動態元素,所以采用了靜態方式爬取,速度加快很多。當然在頁面類型的時候采用selenium的模擬點擊也就是動態的爬取,這次是動態+靜態的雙重爬取,分工不同,請選擇不同的爬取方式。

數據清洗過程

*** -去重:***因為我爬十六個種類全部爬完,然后再聚合起來,其中肯定有重合部分,所以使用set函數去重,當然,你會發現,set函數也無法完全去重,因為爬的時候,評論數目還在變化,只要有一項不同,set就無法去重,結果還是excel直接去重。

爬取的電影和存儲

- 格式規范化:因為使用plotly展現圖形,所以最好的方式就是將其寫成excel的,至于怎么寫,我下面有代碼。

*** - 缺失數據處理:***對于此類型數據,我的方法是剔除,當然我用的是最暴力的方法,剔除之后肯定不會對分析有點影響,但是這樣的電影很少。比如說各種這樣的電影,只要主要信息都在,我還是會爬取的,主要信息是指殿下,這是利息!殿、利息でござる! 7.2 579 喜劇 日本 日語 2016-05-14 129名字,評分,評論數,類型,國家,語言,時間,時長八個參數。

這里寫圖片描述

放上一個標準頁面:

這里寫圖片描述

douban_Analysis_Parts codes

  • 清洗函數

  • 計算標簽所占比例代碼片

#計算總標簽數,以及各類所占比例
import re
dicttype = {}
def TypeCount(line):
    line = re.sub("\t",",",line)
    line = line.split(",")
    typeline = line[3]
    typelines = typeline.split("/")

    for i in typelines:
        if i not in dicttype:dicttype[i]=0
        dicttype[i] +=1
    return dicttype

#測試的line格式,中間是tab鍵隔開的,制表符
#line = "諾斯費拉圖Nosferatu/eineSymphoniedesGrauens 8.3 4202    恐怖/科幻   德國  德語  1922/3/4    94"
f = open("C:\\Users\\MrLevo\\PycharmProjects\\test\\M&TCleanData\\ALLMovie.txt")
fr = open("C:\\Users\\MrLevo\\PycharmProjects\\test\\M&TCleanData\\ALLMovie_typenum.txt","a")
k=0
lines = f.readlines()
for line in lines:
    k +=1
    dicttype = TypeCount(line)

x=0
for j in dicttype.values():
    x +=j
print "參評影片總數:%s;所有標簽總數:%s"%(k,x)
for i in dicttype:
    print "%s:%s;類型所占比例:%.2f;標簽詞頻比例:%.2f"%(i,dicttype[i],(dicttype[i])/(k*0.01),(dicttype[i])/(x*0.01))
    fr.write("%s,%s,%.2f,%.2f"%(i,dicttype[i],(dicttype[i])/(k*0.01),(dicttype[i])/(x*0.01)))
    fr.write('\n')

最后得出如下記錄,存入txt或者excel中就可以后續繪圖處理了:

這里寫圖片描述

  • 獲取各類電影及分割存儲碼片
# 獲取各個種類電影及存儲分割,這里是對全部電影的切割,單獨國家電影種類切割同理
def Write2txt(line,txtname):
    fr = open(txtname,"a")
    if line :
        fr.write(line)
        fr.write("\n")
        fr.close()
readpath = "C:\\Users\\MrLevo\\PycharmProjects\\test\\M&TCleanData\\ALLMovie.txt"
writepath = "C:\\Users\\MrLevo\\PycharmProjects\\test\\M&TCleanData\\%s.txt"
typelist = ["犯罪","動作","歌舞","家庭","鬼怪","劇情","音樂","武俠","運動","戰爭","黑色電影","傳記","歷史","情色","兒童","懸疑","災難","愛情","冒險","奇幻","科幻","古裝","驚悚","恐怖","喜劇","動畫","同性","西部"]
f = open(readpath)
lines = f.readlines()
for line in lines:
    line = line.strip() # 記得去除空格,不然輸出存在空格行
    lineSplit = line.split("\t")
    for type1 in typelist:
        if type1 in lineSplit[3]:# 列表第四個為種類
            lineCsv = line.replace("\t",",").strip()
            Write2txt(lineCsv,writepath%(type1.decode('utf-8')))
            
各類電影分割存儲
  • 注意讀取的txt格式必須是utf-8格式的!保存時候需要為utf-8格式,ANSI格式的會失效!

上述的式子只需要略微修改參數即可用于分類各個國家的各電影種類并單獨存儲,接下來是將存儲在txt中的數據批量轉化存儲在excel中(有人會說為啥不一次性寫入excel中,因為我懶啊,哈哈,其實,模塊化我感覺挺好用,要不是為了能在plotly上用,我才懶得存excel)

# 以"中國大陸愛情.txt"的txt文件為例,其中存在txt中的格式為:蘇州河,7.8,80931,劇情/愛情,中國大陸,漢語普通話,2000,83
from pyExcelerator import *
readpath = "C:\\Users\\MrLevo\\PycharmProjects\\test\\M&TCleanData\\%s.txt"
writepath = "C:\\Users\\MrLevo\\PycharmProjects\\test\\M&TCleanData\\%s.xls"
typelist = ["犯罪","動作","歌舞","家庭","鬼怪","劇情","音樂","武俠","運動","戰爭","黑色電影","傳記","歷史","情色","兒童","懸疑","災難","愛情","冒險","奇幻","科幻","古裝","驚悚","恐怖","喜劇","動畫","同性","西部"]
for type1 in typelist:
    try:
        f = open(readpath%(u"中國大陸"+type1.decode('utf-8')))
        lines = f.readlines()
        w = Workbook()
        sheet1 = w.add_sheet("Sheet1")
        i = 0
        for line in lines:
            linesplist = line.split(",")
            j = 0
            for linesp in linesplist:
                sheet1.write(i,j,linesp.strip().decode('utf-8')) # 需要轉化成unicode才能存儲
                j += 1
            i +=1
        w.save(writepath%(u"中國大陸"+type1.decode('utf-8')+u"xls")) # 解碼成unicode碼
    except:
        print "No type: %s"%type1

  • 分割月份單獨存儲碼片
    分析評分或者類型是否與月份有關,那就有必要把月份單獨提出出來了,隨便修改個程序,同樣批處理。
# 分割月份單獨存儲
def Write2txt(line,txtname):
    fr = open(txtname,"a")
    if line :
        fr.write(line)
        fr.write("\n")
        fr.close()
readpath = "C:\\Users\\MrLevo\\PycharmProjects\\test\\M&TCleanData\\AllOverTheWorld_alltype_splite\\%s.txt"
writepath = "C:\\Users\\MrLevo\\PycharmProjects\\test\\M&TCleanData\\AllOverTheWorld_alltype_splite\\%s.txt"
typelist = ["犯罪","動作","歌舞","家庭","鬼怪","劇情","音樂","武俠","運動","戰爭","黑色電影","傳記","歷史","情色","兒童","懸疑","災難","愛情","冒險","奇幻","科幻","古裝","驚悚","恐怖","喜劇","動畫","同性","西部"]
    for typelist1 in typelist:
        try:
            f = open(readpath%(u"港臺"+typelist1.decode('utf-8')))
            lines = f.readlines()
            for line in lines:
                line = line.strip() # 記得去除空格,不然輸出存在空格行
                lineSplit = line.split(",")
                try:
                    newline ="%s,%s,%s,%s,%s,%s"%(lineSplit[1],lineSplit[2],lineSplit[4],lineSplit[5],lineSplit[6].split("/")[1],lineSplit[7])
                    Write2txt(newline,writepath%(u"港臺"+typelist1.decode('utf-8')+u"OnlyMonth"))
                except:
                    print "Only year No month:%s"%lineSplit[0]
        except:
            print "No Type :%s"%typelist1

對照一下,粗略看一下有沒有處理正確,ok,沒什么錯誤。

對照原數據

  • 計算評分,評論數,時長等均值并存儲excel的代碼片段
# 計算不同年份的評分,評論數,時長平均值并存儲excel
from pyExcelerator import *
def Write2txt(line,txtname):
    fr = open(txtname,"a")
    if line :
        fr.write(line)
        fr.write("\n")
        fr.close()
def txt2excel():
        try:
            f = open("C:\\Users\\MrLevo\\PycharmProjects\\test\\M&TCleanData\\ChinaAllmovieOnlyYearWithAverage.txt")
            lines = f.readlines()
            w = Workbook()
            sheet1 = w.add_sheet("Sheet1")
            i = 0
            for line in lines:
                linesplist = line.split(",")
                j = 0
                for linesp in linesplist:
                    sheet1.write(i,j,linesp.strip().decode('utf-8')) # 需要轉化成unicode才能存儲
                    j += 1
                i +=1
            w.save("C:\\Users\\MrLevo\\PycharmProjects\\test\\M&TCleanData\\ChinaAllmovieOnlyYearWithAverage.xls") # 解碼成unicode碼
        except:
            print "Something wrong"
path = "C:\\Users\\MrLevo\\PycharmProjects\\test\\M&TCleanData\\ChinaAllmovieOnlyYear.txt"

lines = open(path).readlines()
for years in range(1900,2017):
    TotalStar,TotalComment,TotalTime,i = 0.0,0.0,0.0,0.0
    for line in lines:
        lineSplit = line.split("\t")
        if lineSplit[6] == str(years):
            TotalStar +=float(lineSplit[1])
            TotalComment +=float(lineSplit[2])
            TotalTime +=float(lineSplit[7])
            i +=1
    try:
        if i>4: # 設置影片數目閾值
            print "%s:Average star %s"%(years,TotalStar/i)
            print "%s:Average comment %s"%(years,TotalComment/i)
            print "%s:Average time %s"%(years,TotalTime/i)
            print "%s: movieNum %s"%(years,i)
            writeline = "%s,%s,%s,%s,%s"%(years,i,TotalStar/i,TotalComment/i,TotalTime/i)
            Write2txt(writeline,"C:\\Users\\MrLevo\\PycharmProjects\\test\\M&TCleanData\\ChinaAllmovieOnlyYearWithAverage.txt")
            txt2excel()
    except:
        print "No movie this year %s"%years

之后效果應該是這樣的

1981:Average star 7.6125
1981:Average comment 2312.25
1981:Average time 97.0
1981:movieNum 8.0
...

最后

總結這一次的小項目, 經歷了數據的收集爬取-數據的清洗規范-數據存儲-數據可視化-數據分析,雖然對大神來說非常淺顯而沒有太多價值,但這也是我這種菜雞必須需要經歷的一步,完完整整,雖有各種波折,所幸全部解決,從中也學到很多,以后編代碼思考也會成熟,共勉各位。


撰寫記錄

  1. 2016.10.2-19:49-第一次撰寫
  2. 2016.10.4-21:12-第二次撰寫
  3. 2016.10.5-11:21-第三次撰寫
  4. 2016.10.7-22:21-第四次撰寫
  5. 2016.10.10-18:10-第五次撰寫

致謝

python對excel的讀取操作
@MrLevo520--Python自定義豆瓣電影種類,排行,點評的爬取與存儲(基礎)
@MrLevo520--Python自定義豆瓣電影種類,排行,點評的爬取與存儲(初級)
@MrLevo520--Python自定義豆瓣電影種類,排行,點評的爬取與存儲(進階上)
@MrLevo520--Python自定義豆瓣電影種類,排行,點評的爬取與存儲(進階下)
@MrLevo520--Python自定義豆瓣電影種類,排行,點評的爬取與存儲(高階上)

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 寫在前面 在上次觀看了比利.林恩的中場戰事之后,開始進入了豆瓣的電影世界,對于一個新...
    VigoLin閱讀 11,676評論 1 14
  • 1 前言 豆瓣電影提供最新的電影介紹及評論包括上映影片的影訊查詢及購票服務。你可以記錄想看、在看和看過的電影電視劇...
    Airing閱讀 2,299評論 2 10
  • dubito ergo cogito: cogito ergo sum 8.19
    DO怪人閱讀 270評論 0 0
  • 按鈕是HTML非常重要的控件之一,以唯品會的注冊按鈕為例制作一個當前非常流行的按鈕的CSS樣式。其他主流網站的按鈕...
    jdzhangxin閱讀 3,139評論 0 1
  • 軍訓第八天。 啦啦啦, 教官沒有走。 早上本來說把我們班每個人寫的話給教官的, 結果他自己翻了一遍, 好尷尬的說。...
    Mean_me閱讀 257評論 0 0