自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

如果只有1小時(shí)學(xué)Python,看這篇就夠了

開發(fā) 后端
本文,我總結(jié)了以下一篇干貨,來(lái)幫助大家理清思路,提高學(xué)習(xí)效率??偣卜譃槿蟛糠郑鹤鯬ython數(shù)據(jù)分析必知的語(yǔ)法,如何實(shí)現(xiàn)爬蟲,怎么做數(shù)據(jù)分析。

大家好,我是大鵬,城市數(shù)據(jù)團(tuán)聯(lián)合發(fā)起人,致力于Python數(shù)據(jù)分析、數(shù)據(jù)可視化的應(yīng)用與教學(xué)。

和很多同學(xué)接觸過程中,我發(fā)現(xiàn)自學(xué)Python數(shù)據(jù)分析的一個(gè)難點(diǎn)是資料繁多,過于復(fù)雜。大部分網(wǎng)上的資料總是從Python語(yǔ)法教起,夾雜著大量Python開發(fā)的知識(shí)點(diǎn),花了很多時(shí)間卻始終云里霧里,不知道哪些知識(shí)才是真正有用的。本來(lái)以為上手就能寫爬蟲出圖,卻在看基礎(chǔ)的過程中消耗了一周又一周,以至于很多勵(lì)志學(xué)習(xí)Python的小伙伴犧牲在了入門的前一步。

[[264690]]

于是,我總結(jié)了以下一篇干貨,來(lái)幫助大家理清思路,提高學(xué)習(xí)效率??偣卜譃槿蟛糠郑鹤鯬ython數(shù)據(jù)分析必知的語(yǔ)法,如何實(shí)現(xiàn)爬蟲,怎么做數(shù)據(jù)分析。

1.必須知道的兩組Python基礎(chǔ)術(shù)語(yǔ)

A.變量和賦值

Python可以直接定義變量名字并進(jìn)行賦值的,例如我們寫出a = 4時(shí),Python解釋器干了兩件事情:

  • 在內(nèi)存中創(chuàng)建了一個(gè)值為4的整型數(shù)據(jù)
  • 在內(nèi)存中創(chuàng)建了一個(gè)名為a的變量,并把它指向4

用一張示意圖表示Python變量和賦值的重點(diǎn):

如果只有1小時(shí)學(xué)Python,看這篇就夠了

例如下圖代碼,“=”的作用就是賦值,同時(shí)Python會(huì)自動(dòng)識(shí)別數(shù)據(jù)類型:

  1. a=4 #整型數(shù)據(jù) 
  2. b=2 #整型數(shù)據(jù) 
  3. c=“4” #字符串?dāng)?shù)據(jù) 
  4. d=“2” #字符串?dāng)?shù)據(jù) 
  5.  
  6. print(“a+b結(jié)果為”,a+b)#兩個(gè)整數(shù)相加,結(jié)果是6 
  7. print(“c+d結(jié)果為”,c+d)#兩個(gè)文本合并,結(jié)果是文本“42” 
  8.  
  9. #以下為運(yùn)行結(jié)果 
  10. >>>a+b結(jié)果為 6 
  11. >>>c+d結(jié)果為 42 

B.數(shù)據(jù)類型

在初級(jí)的數(shù)據(jù)分析過程中,有三種數(shù)據(jù)類型是很常見的:

  • 列表list(Python內(nèi)置)
  • 字典dic(Python內(nèi)置)
  • DataFrame(工具包pandas下的數(shù)據(jù)類型,需要import pandas才能調(diào)用)

它們分別是這么寫的:

列表(list):

  1. #列表 
  2. liebiao=[1,2.223,-3,'劉強(qiáng)東','章澤天','周杰倫','昆凌',['微博','B站','抖音']] 

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

  1. #ist是一個(gè)可變的有序表,所以,可以往list中追加元素到末尾: 
  2. liebiao.append('瘦'
  3. ptint(liebiao) 
  4. #結(jié)果1 
  5. >>>[1, 2.223, -3, '劉強(qiáng)東''章澤天''周杰倫''昆凌', ['微博''B站''抖音'], '瘦'
  6.  
  7. #也可以把元素插入到指定的位置,比如索引號(hào)為5的位置,插入“胖”這個(gè)元素: 
  8. liebiao.insert(5, '胖'
  9. ptint(liebiao) 
  10. #結(jié)果2 
  11. >>>[1, 2.223, -3, '劉強(qiáng)東''章澤天''胖''周杰倫''昆凌', ['微博''B站''抖音'], '瘦'

字典(dict):

  1. #字典 
  2. zidian={'劉強(qiáng)東':'46','章澤天':'36','周杰倫':'40','昆凌':'26'

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

  1. zidian['周杰倫'
  2. >>>'40' 

dict內(nèi)部存放的順序和key放入的順序是沒有關(guān)系的,也就是說(shuō),"章澤天"并非是在"劉強(qiáng)東"的后面。

DataFrame:

DataFrame可以簡(jiǎn)單理解為excel里的表格格式。導(dǎo)入pandas包后,字典和列表都可以轉(zhuǎn)化為DataFrame,以上面的字典為例,轉(zhuǎn)化為DataFrame是這樣的:

  1. import pandas as pd 
  2.  
  3. df=pd.DataFrame.from_dict(zidian,orient='index',columns=['age'])#注意DataFrame的D和F是大寫 
  4. df=df.reset_index().rename(columns={'index':'name'})#給姓名加上字段名

如果只有1小時(shí)學(xué)Python,看這篇就夠了

和excel一樣,DataFrame的任何一列或任何一行都可以單獨(dú)選出進(jìn)行分析。

以上三種數(shù)據(jù)類型是python數(shù)據(jù)分析中用的最多的類型,基礎(chǔ)語(yǔ)法到此結(jié)束,接下來(lái)就可以著手寫一些函數(shù)計(jì)算數(shù)據(jù)了。

2.從Python爬蟲學(xué)循環(huán)函數(shù)

掌握了以上基本語(yǔ)法概念,我們就足以開始學(xué)習(xí)一些有趣的函數(shù)。我們以爬蟲中繞不開的遍歷url為例,講講大家最難理解的循環(huán)函數(shù)for的用法:

A.for函數(shù)

for函數(shù)是一個(gè)常見的循環(huán)函數(shù),先從簡(jiǎn)單代碼理解for函數(shù)的用途:

  1. zidian={'劉強(qiáng)東':'46','章澤天':'36','周杰倫':'40','昆凌':'26'
  2. for key in zidian: 
  3.         print(key
  4. >>> 
  5. 劉強(qiáng)東 
  6. 章澤天 
  7. 周杰倫 
  8. 昆凌 

因?yàn)閐ict的存儲(chǔ)不是按照l(shuí)ist的方式順序排列,所以,迭代出的結(jié)果順序很可能不是每次都一樣。默認(rèn)情況下,dict迭代的是key。如果要迭代value,可以用for value in d.values(),如果要同時(shí)#迭代key和value,可以用for k, v in d.items()

可以看到,字典里的人名被一一打印出來(lái)了。for 函數(shù)的作用就是用于遍歷數(shù)據(jù)。掌握f(shuō)or函數(shù),可以說(shuō)是真正入門了Python函數(shù)。

B.爬蟲和循環(huán)

for函數(shù)在書寫Python爬蟲中經(jīng)常被應(yīng)用,因?yàn)榕老x經(jīng)常需要遍歷每一個(gè)網(wǎng)頁(yè),以獲取信息,所以構(gòu)建完整而正確的網(wǎng)頁(yè)鏈接十分關(guān)鍵。以某票房數(shù)據(jù)網(wǎng)為例,他的網(wǎng)站信息長(zhǎng)這樣:

如果只有1小時(shí)學(xué)Python,看這篇就夠了

如果只有1小時(shí)學(xué)Python,看這篇就夠了

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

仔細(xì)觀察,該網(wǎng)站不同日期的票房數(shù)據(jù)網(wǎng)址(url)只有后面的日期在變化,訪問不同的網(wǎng)址(url)就可以看到不同日期下的票房數(shù)據(jù):如果只有1小時(shí)學(xué)Python,看這篇就夠了

我們要做的是,遍歷每一個(gè)日期下的網(wǎng)址,用Python代碼把數(shù)據(jù)爬下來(lái)。此時(shí)for函數(shù)就派上用場(chǎng)了,使用它我們可以快速生成多個(gè)符合條件的網(wǎng)址:

  1. import pandas as pd 
  2.  
  3. 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)}) 
  4.  
  5. ''
  6. 將網(wǎng)址相同的部分生成5次,并利用pandas的時(shí)間序列功能生成5個(gè)星期一對(duì)應(yīng)的日期。 
  7. 其中用到了***部分提供的多個(gè)數(shù)據(jù)類型: 
  8. range(5)屬于列表, 
  9. 'urls':[]屬于字典, 
  10. pd.dataframe屬于dataframe 
  11. ''
  12. url_df['urls'] = url_df['urls'] + url_df['date'].astype('str'

滑動(dòng)滑塊可以看到完整代碼和中間的注釋。

如果只有1小時(shí)學(xué)Python,看這篇就夠了

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

如果只有1小時(shí)學(xué)Python,看這篇就夠了

此處省略掉后續(xù)爬取過程,相關(guān)爬蟲代碼見文末。我們使用爬蟲爬取了5800+條數(shù)據(jù),包含20個(gè)字段,時(shí)間囊括了從2008年1月開始至2019年2月十一年期間的單周票房、累計(jì)票房、觀影人次、場(chǎng)均人次、場(chǎng)均票價(jià)、場(chǎng)次環(huán)比變化等信息。

3.Python怎么實(shí)現(xiàn)數(shù)據(jù)分析?

除了爬蟲,分析數(shù)據(jù)也是Python的重要用途之一,Excel能做的事,Python究竟怎么實(shí)現(xiàn)呢;Excel不能做的事,Python又是否能實(shí)現(xiàn)呢?利用電影票房數(shù)據(jù),我們分別舉一個(gè)例子說(shuō)明:

A.Python分析

在做好數(shù)據(jù)采集和導(dǎo)入后,選擇字段進(jìn)行初步分析可以說(shuō)是數(shù)據(jù)分析的必經(jīng)之路。在Dataframe數(shù)據(jù)格式的幫助下,這個(gè)步驟變得很簡(jiǎn)單。

比如當(dāng)我們想看單周票房***的排名分別都是哪些電影時(shí),可以使用pandas工具庫(kù)中常用的方法,篩選出周票房為***名的所有數(shù)據(jù),并保留相同電影中周票房***的數(shù)據(jù)進(jìn)行分析整理:

  1. import pandas as pd 
  2. data = pd.read_csv('中國(guó)票房數(shù)據(jù)爬取測(cè)試20071-20192.csv',engine='python'
  3. data[data['平均上座人數(shù)']>20]['電影名'
  4. #計(jì)算周票房***隨時(shí)間變化的結(jié)果,導(dǎo)入數(shù)據(jù),并選擇平均上座人數(shù)在20以上的電影為有效數(shù)據(jù) 
  5.  
  6. dataTop1_week = data[data['排名']==1][['電影名','周票房']] 
  7. #取出周票房排名為***名的所有數(shù)據(jù),并保留“電影名”和“周票房”兩列數(shù)據(jù) 
  8.  
  9. dataTop1_week = dataTop1_week.groupby('電影名').max()['周票房'].reset_index() 
  10. #用“電影名”來(lái)分組數(shù)據(jù),相同電影連續(xù)霸榜的選擇***的周票房保留,其他數(shù)據(jù)刪除 
  11.  
  12. dataTop1_week = dataTop1_week.sort_values(by='周票房',ascending=False
  13. #將數(shù)據(jù)按照“周票房”進(jìn)行降序排序 
  14.  
  15. dataTop1_week.index = dataTop1_week['電影名'
  16. del dataTop1_week['電影名'
  17. #整理index列,使之變?yōu)殡娪懊?,并刪掉原來(lái)的電影名列 
  18.  
  19. dataTop1_week 
  20. #查看數(shù)據(jù) 

如果只有1小時(shí)學(xué)Python,看這篇就夠了

9行代碼,我們完成了Excel里的透視表、拖動(dòng)、排序等鼠標(biāo)點(diǎn)擊動(dòng)作。***再用Python中的可視化包matplotlib,快速出圖:

如果只有1小時(shí)學(xué)Python,看這篇就夠了

如果只有1小時(shí)學(xué)Python,看這篇就夠了

B.函數(shù)化分析

以上是一個(gè)簡(jiǎn)單的統(tǒng)計(jì)分析過程。接下來(lái)就講講Excel基礎(chǔ)功能不能做的事——自定義函數(shù)提效。觀察數(shù)據(jù)可以發(fā)現(xiàn),數(shù)據(jù)中記錄了周票房和總票房的排名,那么剛剛計(jì)算了周票房排名的代碼,還能不能復(fù)用做一張總票房分析呢?

如果只有1小時(shí)學(xué)Python,看這篇就夠了

當(dāng)然可以,只要使用def函數(shù)和剛剛寫好的代碼建立自定義函數(shù),并說(shuō)明函數(shù)規(guī)則即可:

  1. def pypic(pf): 
  2.     #定義一個(gè)pypic函數(shù),變量是pf 
  3.     dataTop1_sum = data[['電影名',pf]] 
  4.     #取出源數(shù)據(jù)中,列名為“電影名”和pf兩列數(shù)據(jù) 
  5.  
  6.     dataTop1_sum = dataTop1_sum.groupby('電影名').max()[pf].reset_index() 
  7.     #用“電影名”來(lái)分組數(shù)據(jù),相同電影連續(xù)霸榜的選擇***的pf票房保留,其他數(shù)據(jù)刪除 
  8.  
  9.     dataTop1_sum = dataTop1_sum.sort_values(by=pf,ascending=False
  10.     #將數(shù)據(jù)按照pf進(jìn)行降序排序 
  11.  
  12.     dataTop1_sum.index = dataTop1_sum['電影名'
  13.     del dataTop1_sum['電影名'
  14.     #整理index列,使之變?yōu)殡娪懊?,并刪掉原來(lái)的電影名列 
  15.  
  16.     dataTop1_sum[:20].iloc[::-1].plot.barh(figsize = (6,10),color = 'orange'
  17.     name=pf+'top20分析' 
  18.     plt.title(name
  19.     #根據(jù)函數(shù)變量名出圖 

定義函數(shù)后,批量出圖so easy:

 

如果只有1小時(shí)學(xué)Python,看這篇就夠了

學(xué)會(huì)函數(shù)的構(gòu)建,一個(gè)數(shù)據(jù)分析師才算真正能夠告別Excel的鼠標(biāo)點(diǎn)擊模式,邁入高效分析的領(lǐng)域。

4.光看不練是永遠(yuǎn)不能入門的

如果只有一小時(shí)學(xué)習(xí),以上就是大家一定要掌握的Python知識(shí)點(diǎn)。

責(zé)任編輯:未麗燕 來(lái)源: 數(shù)據(jù)森麟
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)