手把手教你用Python爬中國電影票房數據

2021-03-02 挖數

以下文章來自我的好友,城市數據團的大鵬。

大家好,我是大鵬,致力於Python數據分析、數據可視化的應用與教學。

和很多同學接觸過程中,我發現自學Python數據分析的一個難點是資料繁多,過於複雜。大部分網上的資料總是從Python語法教起,夾雜著大量Python開發的知識點,花了很多時間卻始終雲裡霧裡,不知道哪些知識才是真正有用的。本來以為上手就能寫爬蟲出圖,卻在看基礎的過程中消耗了一周又一周,以至於很多勵志學習Python的小夥伴犧牲在了入門的前一步。



於是,我總結了以下一篇乾貨,來幫助大家理清思路,提高學習效率。總共分為三大部分:做Python數據分析必知的語法,如何實現爬蟲,怎麼做數據分析。

1.必須知道的兩組Python基礎術語

Python可以直接定義變量名字並進行賦值的,例如我們寫出a = 4時,Python解釋器幹了兩件事情:


在內存中創建了一個值為4的整型數據

在內存中創建了一個名為a的變量,並把它指向4


用一張示意圖表示Python變量和賦值的重點

例如下圖代碼,「=」的作用就是賦值,同時Python會自動識別數據類型:

a=4 
b=2 
c=「4」 
d=「2」 

print(「a+b結果為」,a+b)
print(「c+d結果為」,c+d)


>>>a+b結果為 6
>>>c+d結果為 42

請閱讀代碼塊裡的代碼和注釋,你會發現Python是及其易讀易懂的。


在初級的數據分析過程中,有三種數據類型是很常見的:

它們分別是這麼寫的:

列表(list):


liebiao=[1,2.223,-3,'劉強東','章澤天','周杰倫','昆凌',['微博','B站','抖音']]

list是一種有序的集合,裡面的元素可以是之前提到的任何一種數據格式和數據類型(整型、浮點、列表……),並可以隨時指定順序添加其中的元素,其形式是:


liebiao.append('瘦')
print(liebiao)

>>>[1, 2.223, -3, '劉強東', '章澤天', '周杰倫', '昆凌', ['微博', 'B站', '抖音'], '瘦']


liebiao.insert(5, '胖')
print(liebiao)

>>>[1, 2.223, -3, '劉強東', '章澤天', '胖', '周杰倫', '昆凌', ['微博', 'B站', '抖音'], '瘦']


字典(dict):


zidian={'劉強東':'46','章澤天':'36','周杰倫':'40','昆凌':'26'}

字典使用鍵-值(key-value)存儲,無序,具有極快的查找速度。以上面的字典為例,想要快速知道周杰倫的年齡,就可以這麼寫:

dict內部存放的順序和key放入的順序是沒有關係的,也就是說,"章澤天"並非是在"劉強東"的後面。


DataFrame:

DataFrame可以簡單理解為Excel裡的表格格式。導入pandas包後,字典和列表都可以轉化為DataFrame,以上面的字典為例,轉化為DataFrame是這樣的:

import pandas as pd

df=pd.DataFrame.from_dict(zidian,orient='index',columns=['age'])
df=df.reset_index().rename(columns={'index':'name'})

和excel一樣,DataFrame的任何一列或任何一行都可以單獨選出進行分析。

以上三種數據類型是python數據分析中用的最多的類型,基礎語法到此結束,接下來就可以著手寫一些函數計算數據了。


2.從Python爬蟲學循環函數

掌握了以上基本語法概念,我們就足以開始學習一些有趣的函數。我們以爬蟲中繞不開的遍歷url為例,講講大家最難理解的循環函數for的用法:

for函數是一個常見的循環函數,先從簡單代碼理解for函數的用途:

zidian={'劉強東':'46','章澤天':'36','周杰倫':'40','昆凌':'26'}
for key in zidian:
        print(key)
>>>
劉強東
章澤天
周杰倫
昆凌

因為dict的存儲不是按照list的方式順序排列,所以,迭代出的結果順序很可能不是每次都一樣。默認情況下,dict迭代的是key。如果要迭代value,可以用for value in d.values(),如果要同時#迭代key和value,可以用for k, v in d.items()

可以看到,字典裡的人名被一一列印出來了。for 函數的作用就是用於遍歷數據。掌握for函數,可以說是真正入門了Python函數。

for函數在書寫Python爬蟲中經常被應用,因為爬蟲經常需要遍歷每一個網頁,以獲取信息,所以構建完整而正確的網頁連結十分關鍵。以某票房數據網為例,他的網站信息長這樣:

該網站的周票房json數據地址可以通過抓包工具找到,網址為http://www.cbooo.cn/BoxOffice/getWeekInfoData?sdate=20190114

仔細觀察,該網站不同日期的票房數據網址(url)只有後面的日期在變化,訪問不同的網址(url)就可以看到不同日期下的票房數據:

我們要做的是,遍歷每一個日期下的網址,用Python代碼把數據爬下來此時for函數就派上用場了,使用它我們可以快速生成多個符合條件的網址:


import pandas as pd

url_df = pd.DataFrame({'urls':['http://www.cbooo.cn/BoxOffice/getWeekInfoData?sdate=' for i in range(5)],'date' :pd.date_range(20190114,freq = 'W-MON',periods = 5)})

'''
將網址相同的部分生成5次,並利用pandas的時間序列功能生成5個星期一對應的日期。
其中用到了第一部分提供的多個數據類型:
range(5)屬於列表,
'urls':[]屬於字典,
pd.dataframe屬於dataframe
'''
url_df['urls'] = url_df['urls'] + url_df['date'].astype('str')

滑動滑塊可以看到完整代碼和中間的注釋。

為了方便理解,我給大家畫了一個for函數的遍歷過程示意圖:

此處省略掉後續爬取過程,相關爬蟲代碼見文末。我們使用爬蟲爬取了5800+條數據,包含20個欄位,時間囊括了從2008年1月開始至2019年2月十一年期間的單周票房、累計票房、觀影人次、場均人次、場均票價、場次環比變化等信息

3.Python怎麼實現數據分析?

除了爬蟲,分析數據也是Python的重要用途之一,Excel能做的事,Python究竟怎麼實現呢;Excel不能做的事,Python又是否能實現呢?利用電影票房數據,我們分別舉一個例子說明:

在做好數據採集和導入後,選擇欄位進行初步分析可以說是數據分析的必經之路。在Dataframe數據格式的幫助下,這個步驟變得很簡單。


比如當我們想看單周票房第一的排名分別都是哪些電影時,可以使用pandas工具庫中常用的方法,篩選出周票房為第一名的所有數據,並保留相同電影中周票房最高的數據進行分析整理:

import pandas as pd
data = pd.read_csv('中國票房數據爬取測試20071-20192.csv',engine='python')
data[data['平均上座人數']>20]['電影名']

dataTop1_week = data[data['排名']==1][['電影名','周票房']]


dataTop1_week = dataTop1_week.groupby('電影名').max()['周票房'].reset_index()


dataTop1_week = dataTop1_week.sort_values(by='周票房',ascending=False)


dataTop1_week.index = dataTop1_week['電影名']
del dataTop1_week['電影名']

dataTop1_week


9行代碼,我們完成了Excel裡的透視表、拖動、排序等滑鼠點擊動作。最後再用Python中的可視化包matplotlib,快速出圖:

以上是一個簡單的統計分析過程。接下來就講講Excel基礎功能不能做的事——自定義函數提效。觀察數據可以發現,數據中記錄了周票房和總票房的排名,那麼剛剛計算了周票房排名的代碼,還能不能復用做一張總票房分析呢?

當然可以,只要使用def函數和剛剛寫好的代碼建立自定義函數,並說明函數規則即可:

def pypic(pf):
    
    dataTop1_sum = data[['電影名',pf]]
    

    dataTop1_sum = dataTop1_sum.groupby('電影名').max()[pf].reset_index()
    

    dataTop1_sum = dataTop1_sum.sort_values(by=pf,ascending=False)
    

    dataTop1_sum.index = dataTop1_sum['電影名']
    del dataTop1_sum['電影名']
    

    dataTop1_sum[:20].iloc[::-1].plot.barh(figsize = (6,10),color = 'orange')
    name=pf+'top20分析'
    plt.title(name)
    


定義函數後,批量出圖so easy:

學會函數的構建,一個數據分析師才算真正能夠告別Excel的滑鼠點擊模式,邁入高效分析的領域

4.光看不練是永遠不能入門的

如果只有一小時學習,以上就是大家一定要掌握的Python知識點。光看不練永遠都會是門外漢,如果你有興趣學習Python數據分析,卻在過程中感到困惑,歡迎來參加我在網易雲課堂的免費直播,每晚一個主題,有學有練,讓你快速入門Python數據分析:

不間斷直播陪你從入門到精通

 

掃碼即可預約免費直播席位(限前100)

第一場  5月20日 周一 晚上8點(可回看)

《初學者必看:一定需要規避的Python學習誤區》

1. Python基礎語法學習路徑

2. 十大易錯點分別是哪些?

3. 初步用Python實現數據清洗

第二場  5月21日 周二 晚上8點(可回看)

《用Python處理文本數據:星座運勢分析》

1. Python處理文本數據

2. Pandas處理文本數據方法

3. 案例實現:星座運勢文本數據處理

第三場  5月22日 周三 晚上8點

《用Python做詞雲圖:中國電影十年票房分析》

1.中國票房數據採集

2.票房排名及上榜電影分析

3.用詞雲圖看看票房評價關鍵字

第四場  5月23日 周四 晚上8點

《超級乾貨:手把手教可視化工具Tableau》

1.什麼是商業智能?

2.Tableau介紹及基礎操作

3.基於Tableau的數據可視化套路

直播預約方式

掃碼即可預約免費直播席位(限前100)

配練習材料

1. Python語言入門

2. 每月淨收入模型構建

3. 每月支出模型構建

4. 不同情況下的花唄還款場景模擬

5. 負債積累問題

6. 如何用圖表講好一個故事?(彩蛋)

所有以上福利,掃碼添加網易雲課堂小助手即可獲得

微信號:neteasepython1

席位有限,先到先得

相關焦點

  • Python三行代碼實時查看電影票房
    本篇閱讀時間為1分鐘,關注我們,用最高效的時間學最有效的簡潔乾貨內容。還在辛辛苦苦爬電影票房數據嗎?想知道電影排名嗎?想實時獲取票房更新數據嗎?三行代碼教你解決,不,除了列印結果出來,其實只需要兩行代碼,馬上上車!
  • 手把手教你用Python分析豆瓣電影——以《我不是藥神》《邪不壓正》為例
    該片於2018年7月5日在中國上映。上映之後獲得一片好評,不少觀眾甚至直呼「中國電影希望」,「《熔爐》、《辯護人》之類寫實影片同水準」,誠然相較於市面上一眾的摳圖貼臉影視作品,《藥神》在影片質量上確實好的多,不過我個人覺得《藥神》的火爆還有以下幾個原因:影片題材稀少帶來的新鮮感,像這類」針砭時弊」 類影視作品,國內太少。
  • 2017年Python中文社區公眾號十大熱門文章
    去年上映的《羞羞的鐵拳》可謂是票房大豐收啊,作者通過豆瓣爬蟲數據對電影評論做了情感分析。文章介紹如何不利用第三方庫,僅用python自帶的標準庫來構造一個決策樹。用 Python分析胡歌的《獵場》到底值不值得看?
  • 初學者如何用「python爬蟲」技術抓取網頁數據?
    在當今社會,網際網路上充斥著許多有用的數據。我們只需要耐心觀察並添加一些技術手段即可獲得大量有價值的數據。而這裡的「技術手段」就是指網絡爬蟲。 今天,小編將與您分享一個爬蟲的基本知識和入門教程:什麼是爬蟲?網絡爬蟲,也叫作網絡數據採集,是指通過編程從Web伺服器請求數據(HTML表單),然後解析HTML以提取所需的數據。
  • python爬蟲教程,爬取貓眼電影 ,一網打盡好電影
    一、頁面分析首先打開貓眼電影,然後點擊一個正在熱播的電影(比如:毒液)。查閱資料之後知道了一個叫做FontCreator的軟體,用這個軟體可以打開我們下載的字體文件,沒有安裝這個軟體的可以進入官網https://www.high-logic.com/下載安裝,如果下載得很慢的可以用百度雲下載(連結:https://pan.baidu.com/s/1ImxwPhKdzZo2g4bIjiGCZw ,提取碼:m0yf )。
  • 實戰|手把手教你用Python爬取存儲數據,還能自動在Excel中可視化
    來源 | 早起Python大家好,在之前我們講過如何用Python構建一個帶有GUI的爬蟲小程序,很多本文將迎合熱點,延續上次的NBA爬蟲GUI,探討如何爬取虎撲NBA官網數據,並且將數據寫入Excel中同時自動生成折線圖,主要有以下幾個步驟:本文將分為以下兩個部分進行講解:
  • 用python「科學」預測下《哪吒》票房
    一種粗糙的預測方式就是:找一找之前類似電影這個時間的票房是多少,按倍數乘一下。但這裡有個問題,不同電影的票房走勢是不一樣的。以下是我們從貓眼票房上隨手找的幾部大片或類似電影,他們的票房走勢:對於新上映的電影,數據還太少,直接擬合沒有意義。所以我們選擇其他電影擬合出的曲線,進行「縮放」,讓它適合現有的數據。
  • python爬蟲—豆瓣電影top250及數據可視化!
    豆瓣電影top250榜單想必大家都不陌生,上榜的電影都是經過時間的沉澱留下來比較經典。本次教程就是利用requests庫實現對於top250榜單電影數據爬取,並對爬取的數據繪製圖表進行可視化,做簡單的數據分析。文章將分為兩個部分:top250數據爬蟲和數據可視化。
  • 使用Python+OpenCV進行面部合成
    作者:SATYA MALLICK在本篇教程中將教大家如何用OpenCV做面部合成,把一張臉演變為另外一張臉。【實戰視頻】使用scrapy寫爬蟲-爬知乎live簡易SQLite3資料庫學習【視頻教程】對視頻進行基本操作【視頻】抓包小練習-B站評論數據抓取fake-useragent庫:值得花2分鐘學習的庫【視頻】爬取餓了麼平臺上的門店信息如何抓取視頻資源-以頭條視頻為例
  • 人生苦短,我用Python
    2017年python排第一也無可爭議,比較AI第一語言,在當下人工智慧大數據大火的情況下,python無愧第一語言的稱號,至於C、C++、java都是萬年的老大哥了,在代碼量比較方面,小編相信java肯定是完爆其它語言的。
  • Python爬取某個18禁網站的電影資源
    最近在想著爬一些有趣的網站,豆瓣淘寶京東,這些網站大多都被爬爛了,然後就想著爬點簡單點的,例如某色網站啥的是吧,男生一般都會有幾個自己知道的網站
  • python爬取44130條用戶觀影數據,分析挖掘用戶與電影之間的隱藏信息!
    明天就是大年初一,很多電影也上映,看電影前很多人都喜歡去『豆瓣』看影評,所以我爬取44130條『豆瓣』的用戶觀影數據,分析用戶之間的關係,電影之間的聯繫,以及用戶和電影之間分析以電影『送你一朵小紅花』為例,對電影之間進行電影推薦獲取觀看過『送你一朵小紅花
  • 《姜子牙》總票房破11億,但是觀眾對電影不滿意,看看評論如何
    貓眼專業版實時見證10月5日14:59:30,《姜子牙》總票房破11億,位居中國電影市場動畫電影票房第四名,國產動畫電影票房亞軍!網上很多影評好評都是給的動畫特效,差評都是給的劇情方面~言歸正傳~咱們今天爬取一下豆瓣影評
  • 程式設計師用 Python 分析中國演員排名,票房最高的果然是 TA!
    然後我就想,目前吳京在國內演員中位列幾何呢?正好之前爬了貓眼電影數據,基於Python數據分析的方式,分析中國演員排名情況。數據導入導入之前爬取到的貓眼數據,由於爬取過程不是本文的主要內容,所以簡單描述下數據情況:20110101至20191019年在中國上映,並且有用戶評分和票房的影片
  • Python爬蟲 教你四種姿勢解析提取數據
    一、分析網頁以經典的爬取豆瓣電影 Top250 信息為例。每條電影信息在 ol class 為 grid_view 下的 li 標籤裡,獲取到所有 li 標籤的內容,然後遍歷,就可以從中提取出每一條電影的信息。
  • 付費的知識星球要過期了,python 教你怎麼辦
    python 爬蟲的常用技巧總結,帶你輕鬆入門,今天補上一篇實戰指南,爬取知識星球裡某個星球的所有數據,對,你沒有聽錯,是所有數據,包括了內容、問答、評論、圖片、文件、甚至是誰點了贊!當然,本篇文章需要你有一點 python 基礎,如果沒有的話,建議你先收藏,去找一些教程學習一下這門工具人語言。好了,廢話不多說,馬上開始。首先,導入所需要的包:
  • 手把手用Python端對端數據分析識別機器人「殭屍粉」
    我使用Python-twitter模型去查詢兩個終端指標:GET users/lookup(獲取用戶信息)和 GET statuses/user_timeline(獲取用戶狀態、時間軸信息)。獲取用戶信息的終端會返回JSON文本,這些文本中包含了你所希望得到的用戶帳號信息。例如:用戶是否使用了默認的模板配置,關注者/被關注者的數量,發布推文的數量。
  • 代碼跑得慢甩鍋Python?手把手教你如何給代碼提速30%
    Medium上一位小哥就詳細講了講如何讓python提速30%,以此證明代碼跑得慢不是python的問題,而是代碼本身的問題。時序分析在開始進行任何優化之前,我們首先需要找出代碼的哪些部分使整個程序變慢。
  • 獨家|手把手教你用Python進行時間序列分解和預測
    在開始使用時間序列數據預測未來值之前,思考一下我們需要提前多久給出預測是尤其重要的。你是否應該提前一天,一周,六個月或十年來預測(我們用「界限」來表述這個技術術語)?需要進行預測的頻率是什麼?在開始預測未來值的詳細工作之前,與將要使用你的預測結果的人談一談也不失為一個好主意。 如何在PYTHON中繪製時間序列數據?
  • 我敢打賭,你猜不到去年電影國內票房最高的演員是誰
    基本數據情況:票房數據來自中國票房網(cbooo.cn)評分數據來自豆瓣電影(movie.douban.com)、貓眼(maoyan.com)、時光網(mtime.com)、項目整體思路:通過 中國票房網 獲得2018年大陸上映電影和每部電影票房數據根據已有的票房數據,通過豆瓣 api 和詳細頁面,獲得每部電影的導演,演員和豆瓣評分等詳細數據分別通過 貓眼、時光網 和 imdb,獲取這三個網站的電影評分數據新建影人條目,利用豆瓣獲得的影人數據,對2018年每個演員年參演電影進行統計