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

使用python和tableau對數(shù)據(jù)進行抓取及可視化

大數(shù)據(jù) 數(shù)據(jù)可視化
本篇文章介紹使用python抓取貸款及理財平臺的數(shù)據(jù),并將數(shù)據(jù)拼接和匯總。最終通過tableau進行可視化。與之前的python爬蟲文章 不同之處在于之前是一次性抓取生產(chǎn)數(shù)據(jù)表,本次的數(shù)據(jù)需要每天重復(fù)抓取及存儲,并匯總在一起進行分析和可視化。

[[190576]]

本篇文章介紹使用python抓取貸款及理財平臺的數(shù)據(jù),并將數(shù)據(jù)拼接和匯總。最終通過tableau進行可視化。與之前的python爬蟲文章 不同之處在于之前是一次性抓取生產(chǎn)數(shù)據(jù)表,本次的數(shù)據(jù)需要每天重復(fù)抓取及存儲,并匯總在一起進行分析和可視化。

 

開始前的準(zhǔn)備工作

開始之前先導(dǎo)入所需使用的庫文件,各個庫文件在整個抓取和拼表過程中負(fù)責(zé)不同的部分。Requests負(fù)責(zé)頁面抓取,re負(fù)責(zé)從抓取下

來的頁面中提取有用的信息,pandas負(fù)責(zé)拼接并生成數(shù)據(jù)表以及最終的數(shù)據(jù)表導(dǎo)出。

  1. </pre> 
  2. #導(dǎo)入requests庫(請求和頁面抓取) 
  3. import requests 
  4. #導(dǎo)入正則庫(從頁面代碼中提取信息) 
  5. import re 
  6. #導(dǎo)入科學(xué)計算庫(拼表及各種分析匯總) 
  7. import pandas as pd 
  8. <pre>  

設(shè)置一個頭文件信息,方便后面的抓取。這個頭文件有兩個作用,第一防止抓取時被封,第二方便后面對頁面源文件的轉(zhuǎn)碼。

  1. </pre> 
  2. #設(shè)置請求中頭文件的信息 
  3. headers = {'User-Agent':'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.64 
  4. Safari/537.11', 
  5. 'Accept':'text/html;q=0.9,*/*;q=0.8'
  6. 'Accept-Charset':'ISO-8859-1,utf-8;q=0.7,*;q=0.3'
  7. 'Connection':'close'
  8. 'Referer':'https://www.bluewhale.cc/' 
  9. <pre>  

抓取貸款及理財信息

準(zhǔn)備工作完成后開始對貸款和理財信息進行抓取,這里我們偷個懶,直接抓取p2peye.com的信息。p2peye.com是一個網(wǎng)貸咨詢及數(shù)據(jù)

平臺,內(nèi)容很豐富。他們定期更新各平臺的貸款及理財數(shù)據(jù)。

因為所有的網(wǎng)貸平臺信息都在一頁上,所以抓取起來比較簡單,不需要翻頁。下面是抓取并保存頁面信息的代碼。

  1. </pre> 
  2. #抓取并保存頁面信息 
  3. r=requests.get('http://www.p2peye.com/shuju/ptsj/',headers=headers) 
  4. html=r.content 
  5. <pre>  

抓取下來的信息需要進行轉(zhuǎn)碼才能變成有用的信息,下面對頁面源代碼進行GBK轉(zhuǎn)碼。

  1. </pre> 
  2. #對抓取的頁面進行編碼 
  3. html=str(html, encoding = "GBK"
  4. <pre>  

查看一下轉(zhuǎn)碼后的頁面,我們需要的信息都包含在里面了。后面只需要使用正則表達式逐個提取出來就可以了。

  1. </pre> 
  2. #查看抓取的頁面源碼 
  3. html 
  4. <pre>   

 

提取信息并進行數(shù)據(jù)清洗

使用正則表達式對應(yīng)著頁面中的字段逐個將關(guān)鍵數(shù)據(jù)從頁面源碼中提取出來,下面是具體的過程,首先提取的是平臺名稱字段。在頁

面源碼中平臺名稱在title中。

  1. </pre> 
  2. #使用正則提取title字段信息 
  3. title=re.findall(r'"return false".*?title="(.*?)"',html) 
  4. <pre>  

提取后查看下結(jié)果,內(nèi)容很干凈,不需要進行清洗可以直接使用。

  1. </pre> 
  2. #查看title字段信息 
  3. title 
  4. <pre>   

 

這里有一點要注意的是每個提取出來的字段最好都要檢查下,并且查看下數(shù)據(jù)的條目。因為有時候提取的條目中包含有其他的信息,

導(dǎo)致字段間條目數(shù)量不一致,這種情況下后面是無法拼接成數(shù)據(jù)表的。

  1. </pre> 
  2.  
  3. #查看title字段數(shù)量 
  4.  
  5. len(title) 
  6.  
  7. 607 
  8.  
  9. <pre>  

按照提取平臺名稱title的方法,后面我們依次提取了貸款利率,貸款金額,滿標(biāo)時間等關(guān)鍵信息。下面是具體的代碼。

  1. </pre> 
  2.  
  3. #使用正則提取total字段信息 
  4.  
  5. total=re.findall(r'"total">(.*?)萬<',html) 
  6.  
  7. #使用正則提取rate字段信息 
  8.  
  9. rate=re.findall(r'"rate">(.*?)<',html) 
  10.  
  11. #使用正則提取pnum字段信息 
  12.  
  13. pnum=re.findall(r'"pnum">(.*?)人<',html) 
  14.  
  15. #使用正則提取cycle字段信息 
  16.  
  17. cycle=re.findall(r'"cycle">(.*?)月<',html) 
  18.  
  19. #使用正則提取plnum字段信息 
  20.  
  21. p1num=re.findall(r'"p1num">(.*?)人<',html) 
  22.  
  23. #使用正則提取fuload字段信息 
  24.  
  25. fuload=re.findall(r'"fuload">(.*?)分鐘<',html) 
  26.  
  27. #使用正則提取alltotal字段信息 
  28.  
  29. alltotal=re.findall(r'"alltotal">(.*?)萬<',html) 
  30.  
  31. #使用正則提取captial字段信息 
  32.  
  33. capital=re.findall(r'"capital">(.*?)萬<',html) 
  34.  
  35. <pre>  

由于后面我們要對數(shù)據(jù)進行累計追加及趨勢分析,因此在這里導(dǎo)入time庫生成當(dāng)天的日期,并將日期作為一個字段一起放在數(shù)據(jù)表。

  1. </pre> 
  2.  
  3. #導(dǎo)入time庫(獲取日期) 
  4.  
  5. import time 
  6.  
  7. date=time.strftime('%Y-%m-%d',time.localtime(time.time())) 
  8.  
  9. <pre> 
  10.  
  11. 當(dāng)天的日期信息將和數(shù)據(jù)一起生成數(shù)據(jù)表。 
  12.  
  13. </pre> 
  14.  
  15. #日期 
  16.  
  17. date 
  18.  
  19. '2017-04-13' 
  20.  
  21. <pre>  

創(chuàng)建貸款及理財數(shù)據(jù)表

將前面提取出來的數(shù)據(jù)和日期信息一起生成數(shù)據(jù)表,首先使用columns參數(shù)設(shè)置數(shù)據(jù)表中各字段的排列順序。

  1. </pre> 
  2.  
  3. #設(shè)置數(shù)據(jù)表各字段順序 
  4.  
  5. columns = ['采集日期','平臺名稱','成交額(萬)','綜合利率','投資人(人)','借款周期(月)','借款人(人)','滿標(biāo)速度(分鐘)',' 
  6.  
  7. 累計貸款余額(萬)','凈資金流入(萬)'] 
  8.  
  9. <pre>  

然后設(shè)置各字段的名稱,并生成數(shù)據(jù)表。

  1. </pre> 
  2.  
  3. #創(chuàng)建數(shù)據(jù)表 
  4.  
  5. table=pd.DataFrame({'采集日期':date
  6.  
  7. '平臺名稱':title, 
  8.  
  9. '成交額(萬)':total, 
  10.  
  11. '綜合利率':rate, 
  12.  
  13. '投資人(人)':pnum, 
  14.  
  15. '借款周期(月)':cycle, 
  16.  
  17. '借款人(人)':p1num, 
  18.  
  19. '滿標(biāo)速度(分鐘)':fuload, 
  20.  
  21. '累計貸款余額(萬)':alltotal, 
  22.  
  23. '凈資金流入(萬)':capital}, 
  24.  
  25. columns=columns) 
  26.  
  27. <pre>  

查看生成的數(shù)據(jù)表,字段順序與我們設(shè)置的一致,下一步把數(shù)據(jù)表導(dǎo)出為csv文件。便于后續(xù)的處理和分析。

  1. </pre> 
  2.  
  3. #查看數(shù)據(jù)表 
  4.  
  5. table 
  6.  
  7. <pre>   

 

 

導(dǎo)出及追加數(shù)據(jù)

將生成的數(shù)據(jù)表導(dǎo)出為csv文件。這里有兩種導(dǎo)出方式。第一是新建數(shù)據(jù)表。但比較麻煩,后續(xù)要需要手動將每天的數(shù)據(jù)進行拼接。因

此還有第二種導(dǎo)出方式就是在一個數(shù)據(jù)表中不斷追加新數(shù)據(jù)。

第一種方式將數(shù)據(jù)表導(dǎo)出為一個新的csv文件,文件名為wdty加上數(shù)據(jù)抓取的具體日期,也就是date中的值。

  1. </pre> 
  2.  
  3. #導(dǎo)出csv文件 
  4.  
  5. table.to_csv('C:\\Users\\ Desktop\\wdty'+date+'.csv',index=False
  6.  
  7. <pre>  

第二種方式是在一個csv文件中持續(xù)追加導(dǎo)出新的數(shù)據(jù)表。這里我們建立一個wdty的csv文件,每天抓取的數(shù)據(jù)都會追加到這個csv文件

中。代碼與之前的新建csv文件類似,唯一的區(qū)別是增加了mode參數(shù),這個參數(shù)默認(rèn)值是w,也就是新建。把值改為a就是追加導(dǎo)出。

  1. </pre> 
  2.  
  3. #在歷史csv文件中追加新信息 
  4.  
  5. table.to_csv('wdty.csv',index=False,mode='a'
  6.  
  7. <pre>  

以下是導(dǎo)出后的數(shù)據(jù)表截圖。內(nèi)容與前面創(chuàng)建的數(shù)據(jù)表內(nèi)容一致。  

 

創(chuàng)建自定義函數(shù)

從導(dǎo)入所需的庫文件,到提取數(shù)據(jù)拼接和導(dǎo)出,我們一共進行了30+步的操作。為了簡化步驟,我們把這些步驟放在一個loan_data自

定義函數(shù)中。以后每次只需要執(zhí)行以下這個自定義函數(shù)就可以將數(shù)據(jù)抓取下來并導(dǎo)出到csv里了。下面是具體的代碼,其中為了獲得代

碼執(zhí)行中的過程信息,我們在一些關(guān)鍵步驟后使用print輸出了一些狀態(tài)信息。并計算了整個代碼執(zhí)行所耗費的時間。

  1. </pre> 
  2. def loan_data(): 
  3. import os 
  4. import requests 
  5. import re 
  6. import pandas as pd 
  7. import time 
  8. start = time.clock() 
  9. headers = {'User-Agent':'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.64 
  10. Safari/537.11', 
  11. 'Accept':'text/html;q=0.9,*/*;q=0.8'
  12. 'Accept-Charset':'ISO-8859-1,utf-8;q=0.7,*;q=0.3'
  13. 'Connection':'close'
  14. 'Referer':'https://www.bluewhale.cc/' 
  15. r=requests.get('http://www.p2peye.com/shuju/ptsj/',headers=headers) 
  16. status=r.status_code 
  17. if status == 200: 
  18. print('頁面抓取狀態(tài)正常。'
  19. else
  20. os._exit(0) 
  21. html=r.content 
  22. html=str(html, encoding = "GBK"
  23. print('編碼轉(zhuǎn)換完成!'
  24. title=re.findall(r'"return false".*?title="(.*?)"',html) 
  25. total=re.findall(r'"total">(.*?)萬<',html) 
  26. rate=re.findall(r'"rate">(.*?)<',html) 
  27. pnum=re.findall(r'"pnum">(.*?)人<',html) 
  28. cycle=re.findall(r'"cycle">(.*?)月<',html) 
  29. p1num=re.findall(r'"p1num">(.*?)人<',html) 
  30. fuload=re.findall(r'"fuload">(.*?)分鐘<',html) 
  31. alltotal=re.findall(r'"alltotal">(.*?)萬<',html) 
  32. capital=re.findall(r'"capital">(.*?)萬<',html) 
  33. date=time.strftime('%Y-%m-%d',time.localtime(time.time())) 
  34. print('數(shù)據(jù)提取完成!'
  35. columns = ['采集日期','平臺名稱','成交額(萬)','綜合利率','投資人(人)','借款周期(月)','借款人(人)','滿標(biāo)速度(分 
  36. 鐘)','累計貸款余額(萬)','凈資金流入(萬)'] 
  37. table=pd.DataFrame({'采集日期':date
  38. '平臺名稱':title, 
  39. '成交額(萬)':total, 
  40. '綜合利率':rate, 
  41. '投資人(人)':pnum, 
  42. '借款周期(月)':cycle, 
  43. '借款人(人)':p1num, 
  44. '滿標(biāo)速度(分鐘)':fuload, 
  45. '累計貸款余額(萬)':alltotal, 
  46. '凈資金流入(萬)':capital}, 
  47. columns=columns) 
  48. print('數(shù)據(jù)表創(chuàng)建完成!'
  49. table.to_csv('C:\\Users\\cliffwang\\Desktop\\wdty'+date+'.csv',index=False
  50. print(date+'日數(shù)據(jù)導(dǎo)出完畢!'
  51. table.to_csv('wdty.csv',index=False,mode='a'
  52. print('累計數(shù)據(jù)追加導(dǎo)出完畢!'
  53. end = time.clock() 
  54. print ("執(zhí)行時間: %f s" % (end-start)) 
  55. <pre>  

自定義函數(shù)寫好后,每次只需要執(zhí)行l(wèi)oan_data()就可以完成之前的30+步驟的工作了。下面是代碼和輸出的狀態(tài)信息以及代碼執(zhí)行時間信息。

  1. </pre> 
  2. loan_data() 
  3.  
  4. 頁面抓取狀態(tài)正常。 
  5. 編碼轉(zhuǎn)換完成! 
  6. 數(shù)據(jù)提取完成! 
  7. 數(shù)據(jù)表創(chuàng)建完成! 
  8. 2017-04-19日數(shù)據(jù)導(dǎo)出完畢! 
  9. 累計數(shù)據(jù)追加導(dǎo)出完畢! 
  10. 執(zhí)行時間: 0.933262 s 
  11. <pre>  

使用tableau進行可視化

導(dǎo)出的數(shù)據(jù)雖然為csv格式,但使用excel進行可視化并不理想,主要問題在于excel對圖表行列數(shù)的限制(每張圖最多只能容納255個數(shù)

量列)。因此,我們將數(shù)據(jù)表導(dǎo)入到tableau中進行可視化。下面是對600+家網(wǎng)貸平臺數(shù)據(jù)的可視化截圖。尺寸為各平臺總成交額,顏色為綜合利率。   

 

所有文章及圖片版權(quán)歸 藍鯨(王彥平)所有。 

責(zé)任編輯:龐桂玉 來源: 36大數(shù)據(jù)
相關(guān)推薦

2017-02-22 13:48:49

Tableau可視化

2021-11-09 08:15:18

Grafana 數(shù)據(jù)可視化運維

2023-02-15 08:24:12

數(shù)據(jù)分析數(shù)據(jù)可視化

2021-02-20 09:14:35

PythonPygal可視化

2020-03-11 14:39:26

數(shù)據(jù)可視化地圖可視化地理信息

2015-08-20 10:00:45

可視化

2018-10-11 20:47:23

書籍數(shù)據(jù)可視化數(shù)據(jù)分析

2021-10-11 08:04:22

Python數(shù)據(jù)行程

2023-07-20 08:00:00

可視化數(shù)據(jù)Python

2014-05-28 15:23:55

Rave

2017-10-14 13:54:26

數(shù)據(jù)可視化數(shù)據(jù)信息可視化

2019-08-02 09:39:57

Python可視化技術(shù)腳本語言

2022-08-26 09:15:58

Python可視化plotly

2023-05-06 12:57:34

Python工具

2023-10-10 09:13:15

Python數(shù)據(jù)的操作轉(zhuǎn)換

2022-02-23 09:50:52

PythonEchartspyecharts

2020-05-26 11:34:46

可視化WordCloud

2021-04-09 10:42:03

數(shù)據(jù)可視化框架大數(shù)據(jù)

2024-12-24 07:30:00

Seaborn可視化Python

2018-05-07 14:50:27

可視化數(shù)據(jù)散點圖
點贊
收藏

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