Python對(duì)中國(guó)500強(qiáng)排行榜數(shù)據(jù)進(jìn)行可視化分析實(shí)戰(zhàn)
??數(shù)據(jù)采集
??確定網(wǎng)址
首先,我們對(duì)目標(biāo)網(wǎng)址進(jìn)行數(shù)據(jù)采集。我們可以清楚的看到,在2022年中新財(cái)富500富人榜。
確定好我們的目標(biāo)網(wǎng)址之后,我們要找到我們需要的數(shù)據(jù)源,通過開發(fā)者工具分析,我們不難發(fā)現(xiàn)其數(shù)據(jù)地址。
下面,我們開始寫代碼。
??獲取數(shù)據(jù)
第一步,發(fā)送請(qǐng)求,獲得數(shù)據(jù)。
import requests url = 'https://service.ikuyu.cn/XinCaiFu2/pcremoting/bdListAction.do?method=getPage&callback=jsonpCallback&sortBy=&order=&type=4&keyword=&pageSize=15&year=2022&pageNo=1&from=jsonp&_=1680092323527' headers = { 'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36'} res = requests.get(url,headers=headers)
我們得到數(shù)據(jù)是這樣的,大家可能會(huì)以為是一個(gè)json數(shù)據(jù),其實(shí)不是,這個(gè)返回值需要我們進(jìn)一步處理。
jsonpCallback({"data":{"pagesize":15,"current":1,"total":500,"rows":[{"assets":4983.5,"year":2022,"sex":"男","name":"鐘睒睒","rank":1,"company":"農(nóng)夫山泉/萬泰生物","industry":"礦泉水飲料、醫(yī)藥生物","id":151478,"addr":"浙江杭州/北京","rankLst":"1","age":"68"}······)
??解析數(shù)據(jù)
我們發(fā)現(xiàn),我們得到了這樣jsonpCallback()
的數(shù)據(jù),可能就有人擔(dān)心了,那這種情況,我們?cè)撛趺崔k呢,不要慌,我們只需要正則表達(dá)式就可以。
html_data = re.findall('jsonpCallback((.*?))',res.text)[0]
這段代碼中,我們使用 Python 的 re
模塊中的 findall()
函數(shù)來查找 JSONP 回調(diào)函數(shù)的參數(shù)。findall()
函數(shù)可以返回一個(gè)列表,其中包含了所有匹配的子字符串。
在這個(gè)例子中,我們使用 findall()
函數(shù)來查找 JSONP 回調(diào)函數(shù)的參數(shù),并將其存儲(chǔ)在 res.text
變量中。然后,我們使用 [0]
來獲取第一個(gè)匹配的子字符串,并將其存儲(chǔ)在 html_data
變量中。
這樣,我們就得到了json數(shù)據(jù),接下來,我們就開始解析數(shù)據(jù)。
for index in json.loads(html_data)['data']['rows']: # print(index) dit = { '姓名':index['name'], '財(cái)富值':index['assets'], '主要公司':index['company'], '相關(guān)行業(yè)': index['industry'], '公司總部':index['addr'], '排名': index['rank'], }
??保存數(shù)據(jù)
我們先把數(shù)據(jù)存入到字典里面,然后,方便我們寫入csv文件里面,我們看看打印出來的字典數(shù)值是怎么樣子的。
下面就是數(shù)據(jù)的寫入了。其實(shí),把字典數(shù)值寫入到csv文件里面,特別簡(jiǎn)單,只需呀四行代碼就可以實(shí)現(xiàn)。
f = open('財(cái)富榜.csv',mode='a',encoding='utf-8',newline='') csv_writer = csv.DictWriter(f,fieldnames=['姓名','財(cái)富值','主要公司','相關(guān)行業(yè)','公司總部','排名']) csv_writer.writeheader()
這段代碼中,我們使用 Python 的 open()
函數(shù)打開了一個(gè)名為 "財(cái)富榜.csv" 的文件,并使用 csv.DictWriter()
函數(shù)創(chuàng)建了一個(gè) csv_writer
對(duì)象。fieldnames
參數(shù)用于指定字段名稱,這里我們指定了 "姓名"、"財(cái)富值"、"主要公司"、"相關(guān)行業(yè)"、"公司總部"、"排名" 六個(gè)字段。
然后,我們使用 csv_writer.writeheader()
方法寫入表頭,表頭包括了字段名稱。
最后,我們使用 csv_writer.write()
方法向文件中寫入數(shù)據(jù),數(shù)據(jù)內(nèi)容為一個(gè)字典對(duì)象。
寫入字典數(shù)值。
csv_writer.writerow(dit)
這時(shí)候,我們就會(huì)在文件夾里面找到財(cái)富值的csv文件,我們打開看看效果。
在這里,我只采集了第一頁(yè)的數(shù)據(jù),也就是前15的數(shù)據(jù),如果,我們想進(jìn)行多頁(yè)數(shù)據(jù)采集,只需要對(duì)網(wǎng)址進(jìn)行改變,我們會(huì)發(fā)現(xiàn)網(wǎng)址有相似的規(guī)律。直接for循環(huán)遍歷就可以,這里,就不過多解釋。
??數(shù)據(jù)可視化
??代碼
我們?cè)谶@里,就要用到pyecharts庫(kù),不得不說,這個(gè)功能非常強(qiáng)大,我們寫這個(gè)代碼也非常簡(jiǎn)單,我們只需要去官方文檔,復(fù)制粘貼就可以,根據(jù)自己的數(shù)據(jù)稍微改動(dòng)一點(diǎn)代碼就可以。
import pandas as pd import pyecharts.options as opts from pyecharts.charts import Line df = pd.read_csv('財(cái)富榜.csv') x = ['農(nóng)夫山泉/萬泰生物' ,'寧德時(shí)代' ,'騰訊控股' ,'今日頭條', '拼多多'] c = ( Line() .add_xaxis(x) .add_yaxis("財(cái)富值",df['財(cái)富值'].values) .set_global_opts(title_opts=opts.TitleOpts(title="財(cái)富值分布")) )
這段代碼中,我們使用 Pandas 庫(kù)的 read_csv()
函數(shù)讀取了一個(gè)名為 "財(cái)富榜.csv" 的 CSV 文件,并將其存儲(chǔ)在 df
變量中。然后,我們使用 Line()
函數(shù)創(chuàng)建了一個(gè)新的 DataFrame 對(duì)象,并使用 add_xaxis()
方法將 x
列添加到 DataFrame 中。接著,我們使用 add_yaxis()
方法將 DataFrame 中的 "財(cái)富值"
列添加到 DataFrame 的 "財(cái)富值"
列中。最后,我們使用 set_global_opts()
方法設(shè)置了 DataFrame 的標(biāo)題選項(xiàng),并使用 title_opts
參數(shù)設(shè)置了標(biāo)題。
我們直接讓它生成一個(gè)網(wǎng)頁(yè),方便我們直觀的感受。
c.render('地圖.html')
??效果
這里,我做的圖不夠好看,但是基本功能都實(shí)現(xiàn)了。
大家如果想做更多的圖表,可以去官方網(wǎng)站看看,官方網(wǎng)站有很多示例可以使用。
??總結(jié)
通過本文的學(xué)習(xí),我們學(xué)習(xí)了數(shù)據(jù)采集以及可視化分析。我們?cè)谘芯抗俜轿臋n的時(shí)候,也是在一種學(xué)習(xí),本次實(shí)戰(zhàn),我們明白如何解決返回值是jsonpCallback()的問題。今天就到這里
以上就是Python對(duì)中國(guó)500強(qiáng)排行榜數(shù)據(jù)進(jìn)行可視化分析實(shí)戰(zhàn)的詳細(xì)內(nèi)容,更多關(guān)于Python排行榜數(shù)據(jù)可視化的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
- Python mplfinance庫(kù)繪制金融圖表實(shí)現(xiàn)數(shù)據(jù)可視化實(shí)例探究
- Python報(bào)表自動(dòng)化之從數(shù)據(jù)到可視化一站式指南
- Caffe數(shù)據(jù)可視化環(huán)境python接口配置教程示例
- python數(shù)據(jù)可視化pygal模擬擲骰子實(shí)現(xiàn)示例
- python數(shù)據(jù)可視化繪制火山圖示例
- python數(shù)據(jù)可視化繪制世界人口地圖
- python數(shù)據(jù)可視化matplotlib繪制折線圖示例
- python?AutoViz庫(kù)一行代碼實(shí)現(xiàn)可視化數(shù)據(jù)集
相關(guān)文章
解決python2.7用pip安裝包時(shí)出現(xiàn)錯(cuò)誤的問題
這篇文章主要介紹了在python2.7用pip安裝包時(shí)出現(xiàn)錯(cuò)誤問題的解決方法,需要的朋友可以參考借鑒,下面來一起看看吧。2017-01-01使用python實(shí)現(xiàn)抓取騰訊視頻所有電影的爬蟲
這篇文章主要介紹了使用python實(shí)現(xiàn)抓取騰訊視頻所有電影的爬蟲,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-04-04python?matplotlib實(shí)現(xiàn)條形圖的填充效果
這篇文章主要為大家詳細(xì)介紹了python?matplotlib實(shí)現(xiàn)條形圖的填充效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-04-04python實(shí)現(xiàn)兩個(gè)一維列表合并成一個(gè)二維列表
今天小編就為大家分享一篇python實(shí)現(xiàn)兩個(gè)一維列表合并成一個(gè)二維列表,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2019-12-12Python使用pycharm導(dǎo)入pymysql教程
這篇文章主要介紹了Python使用pycharm導(dǎo)入pymysql教程,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-09-09Python Flask全棧項(xiàng)目實(shí)戰(zhàn)構(gòu)建在線書店流程
這篇文章主要為大家介紹了Python Flask全流程全棧項(xiàng)目實(shí)戰(zhàn)之在線書店構(gòu)建實(shí)現(xiàn)過程,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-11-11django數(shù)據(jù)庫(kù)migrate失敗的解決方法解析
這篇文章主要介紹了django數(shù)據(jù)庫(kù)migrate失敗的解決方法解析,分享了相關(guān)代碼示例,小編覺得還是挺不錯(cuò)的,具有一定借鑒價(jià)值,需要的朋友可以參考下2018-02-02