Python爬蟲和數據分析需要哪些知識儲備,自學順序是怎樣的?

爭做合格槓精


1、先大致搞清楚html的基本概念。

2、熟練使用一種主流瀏覽器(比如chromr),以致可以手動從網絡上“扒取”感興趣的html文檔片段。

3、可以選學python,或你可以請教的人推薦的需要。

4、搞清楚軟件語境下的“沙箱”概念是什麼?這一步很重要。

5、為避免引入過多的“新概念”,找一段可用的爬蟲程序,運行一下。

6、逐行理解第(5)的練習代碼。

除去第(4)需要一次搞清楚,其他內容,反覆循環,直到你厭煩了為止。有人指導,第一個循環需要1整天(8個工時),完全自學,有人支持2~3天。完全自學,主要看毅力和運氣。

好運、預祝成功。


井151276607


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('瘦')

print(liebiao)

#結果1

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

#也可以把元素插入到指定的位置,比如索引號為5的位置,插入“胖”這個元素:

liebiao.insert(5, '胖')

print(liebiao)

#結果2

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

字典(dict):

#字典

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

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

zidian['周杰倫']

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數據分析中用的最多的類型,基礎語法到此結束,接下來就可以著手寫一些函數計算數據了。

從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爬蟲中經常被應用,因為爬蟲經常需要遍歷每一個網頁,以獲取信息,所以構建完整而正確的網頁鏈接十分關鍵。以某票房數據網為例,他的網站信息長這樣:

我們要做的是,遍歷每一個日期下的網址,用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函數的遍歷過程示意圖:

3.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,快速出圖:

當然可以,只要使用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)









Echa攻城獅


1.協議分析,提取關鍵索引

2.協議實現,數據過濾分析

3.爬取資源慮重

4. 數據存儲,數據庫相關

5.使用數據庫(關係行/非關係型)接口進行關聯查詢分析


北漂IT難


這個簡單,python基礎就好,然後學習selenium api就可以了。任意找個網站爬就好。


分享到:


相關文章: