歡迎光臨
每天分享高質量文章

2組語法,1個函式,教你用Python做資料分析

 (點選上方快速關註並設定為星標,一起學Python)

 

大家好,我是大鵬,城市資料團聯合發起人,致力於Python資料分析、資料視覺化的應用與教學。

 

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

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

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

A.變數和賦值

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

  • 在記憶體中建立了一個值為4的整型資料
  • 在記憶體中建立了一個名為a的變數,並把它指向4

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

 

例如下圖程式碼,“=”的作用就是賦值,同時Python會自動識別資料型別:

a=4 #整型資料
b=2 #整型資料
c=“4” #字串資料
d=“2” #字串資料

print(“a+b結果為”,a+b)#兩個整數相加,結果是6
print(“c+d結果為”,c+d)#兩個文字合併,結果是文字“42”

#以下為執行結果
>>>a+b結果為 6
>>>c+d結果為 42
請閱讀程式碼塊裡的程式碼和註釋,你會發現Python是及其易讀易懂的。

B.資料型別

在初級的資料分析過程中,有三種資料型別是很常見的:

  • 串列list(Python內建)
  • 字典dic(Python內建)
  • DataFrame(工具包pandas下的資料型別,需要import pandas才能呼叫)

它們分別是這麼寫的:

 

串列(list):

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

list是一種有序的集合,裡面的元素可以是之前提到的任何一種資料格式和資料型別(整型、浮點、串列……),並可以隨時指定順序新增其中的元素,其形式是:
#ist是一個可變的有序表,所以,可以往list中追加元素到末尾:
liebiao.append('瘦')
ptint(liebiao)
#結果1
>>>[12.223, -3'劉強東''章澤天''周傑倫''昆凌', ['微博''B站''抖音'], '瘦']

#也可以把元素插入到指定的位置,比如索引號為5的位置,插入“胖”這個元素:
liebiao.insert(5'胖')
print(liebiao)
#結果2
>>>[12.223, -3'劉強東''章澤天''胖''周傑倫''昆凌', ['微博''B站''抖音'], '瘦']

 

字典(dict):

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

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

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

 

DataFrame:

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

import pandas as pd

df=pd.DataFrame.from_dict(zidian,orient='index',columns=['age'])#註意DataFrame的D和F是大寫
df=df.reset_index().rename(columns={'index':'name'})#給姓名加上欄位名

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

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

2.從Python爬蟲學迴圈函式

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

A.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函式。

B.爬蟲和迴圈

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又是否能實現呢?利用電影票房資料,我們分別舉一個例子說明:

A.Python分析

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

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

import pandas as pd
data = pd.read_csv('中國票房資料爬取測試20071-20192.csv',engine='python')
data[data['平均上座人數']>20]['電影名']
#計算周票房第一隨時間變化的結果,匯入資料,並選擇平均上座人數在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['電影名']
#整理index列,使之變為電影名,並刪掉原來的電影名列

dataTop1_week
#檢視資料

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

B.函式化分析

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

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

def pypic(pf):
    #定義一個pypic函式,變數是pf
    dataTop1_sum = data[['電影名',pf]]
    #取出源資料中,列名為“電影名”和pf兩列資料

    dataTop1_sum = dataTop1_sum.groupby('電影名').max()[pf].reset_index()
    #用“電影名”來分組資料,相同電影連續霸榜的選擇最大的pf票房保留,其他資料刪除

    dataTop1_sum = dataTop1_sum.sort_values(by=pf,ascending=False)
    #將資料按照pf進行降序排序

    dataTop1_sum.index = dataTop1_sum['電影名']
    del dataTop1_sum['電影名']
    #整理index列,使之變為電影名,並刪掉原來的電影名列

    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資料分析:

贊(1)

分享創造快樂