【爬蟲+數(shù)據(jù)分析+數(shù)據(jù)可視化】python數(shù)據(jù)分析全流程《胡潤(rùn)百富榜》榜單數(shù)據(jù)在跳!

一、爬蟲

大家好隐岛,我是@馬哥python說(shuō)猫妙,一名10年程序猿。

1.1 爬取目標(biāo)

本次爬取的目標(biāo)是聚凹,2021年胡潤(rùn)百富榜的榜單數(shù)據(jù):胡潤(rùn)百富 - 榜單

榜單頁(yè)面

頁(yè)面上能看到的信息有:
排名割坠、財(cái)富值、排名變化妒牙、個(gè)人信息(姓名彼哼、性別、年齡)湘今、企業(yè)信息(企業(yè)名稱沪羔、所屬行業(yè))
頁(yè)面結(jié)構(gòu)很整齊,數(shù)據(jù)也很完整象浑,非常適合爬蟲和數(shù)據(jù)分析使用。

1.2 分析頁(yè)面

老規(guī)矩琅豆,打開Chrome瀏覽器愉豺,按F12進(jìn)入開發(fā)者模式,依次點(diǎn)擊Network->Fetch/XHR茫因,準(zhǔn)備好捕獲ajax請(qǐng)求蚪拦。

重新刷新一下頁(yè)面,發(fā)現(xiàn)一條請(qǐng)求:
開發(fā)者模式

在預(yù)覽界面冻押,看到一共20條(0~19)返回?cái)?shù)據(jù)驰贷,正好對(duì)應(yīng)頁(yè)面上的20個(gè)富豪信息。
所以洛巢,后面編寫爬蟲代碼括袒,針對(duì)這個(gè)地址發(fā)送請(qǐng)求就可以了。
另外稿茉,關(guān)于翻頁(yè)锹锰,我的個(gè)人習(xí)慣是芥炭,選擇每頁(yè)顯示最多的數(shù)據(jù)量,這樣能保證少翻頁(yè)幾次恃慧,少發(fā)送幾次請(qǐng)求园蝠,防止被對(duì)端服務(wù)器反爬。

所以痢士,每頁(yè)選擇200條數(shù)據(jù):
翻頁(yè)

再刷新一下頁(yè)面彪薛,進(jìn)行幾次翻頁(yè),觀察請(qǐng)求地址的變化規(guī)律:
url變化

以翻到第3頁(yè)為例怠蹂,url中的offset(偏移量)為400善延,limit(每頁(yè)的條數(shù))為200,所以褥蚯,可得出規(guī)律:

offset = (page - 1) * 200
limit = 200

下面開始編寫爬蟲代碼挚冤。

1.3 爬蟲代碼

首先,導(dǎo)入需要用到的庫(kù):

import requests  # 發(fā)送請(qǐng)求
import pandas as pd  # 存入excel數(shù)據(jù)
from time import sleep  # 等待間隔,防止反爬
import random  # 隨機(jī)等待

根據(jù)1.2章節(jié)分析得出的結(jié)論赞庶,編寫邏輯代碼训挡,向頁(yè)面發(fā)送請(qǐng)求:

# 循環(huán)請(qǐng)求1-15頁(yè)
for page in range(1, 16):
    # 胡潤(rùn)百富榜地址
    sleep_seconds = random.uniform(1, 2)
    print('開始等待{}秒'.format(sleep_seconds))
    sleep(sleep_seconds)
    print('開始爬取第{}頁(yè)'.format(page))
    offset = (page - 1) * 200
    url = 'https://www.hurun.net/zh-CN/Rank/HsRankDetailsList?num=YUBAO34E&search=&offset={}&limit=200'.format(offset)
    # 構(gòu)造請(qǐng)求頭
    headers = {
        'User-Agent': 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/99.0.4844.51 Mobile Safari/537.36',
        'accept': 'application/json, text/javascript, */*; q=0.01',
        'accept-language': 'zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7',
        'accept-encoding': 'gzip, deflate, br',
        'content-type': 'application/json',
        'referer': 'https://www.hurun.net/zh-CN/Rank/HsRankDetails?pagetype=rich'
    }
    # 發(fā)送請(qǐng)求
    r = requests.get(url, headers=headers)

用json格式解析返回的請(qǐng)求數(shù)據(jù):(一行代碼即可完成接收)

json_data = r.json()

由于解析的字段較多,這里不再贅述詳細(xì)過(guò)程歧强,字段信息包含:

Fullname_Cn_list = []  # 全名_中文
Fullname_En_list = []  # 全名_英文
Age_list = []  # 年齡
BirthPlace_Cn_list = []  # 出生地_中文
BirthPlace_En_list = []  # 出生地_英文
Gender_list = []  # 性別
Photo_list = []  # 照片
ComName_Cn_list = []  # 公司名稱_中文
ComName_En_list = []  # 公司名稱_英文
ComHeadquarters_Cn_list = []  # 公司總部地_中文
ComHeadquarters_En_list = []  # 公司總部地_英文
Industry_Cn_list = []  # 所在行業(yè)_中文
Industry_En_list = []  # 所在行業(yè)_英文
Ranking_list = []  # 排名
Ranking_Change_list = []  # 排名變化
Relations_list = []  # 組織結(jié)構(gòu)
Wealth_list = []  # 財(cái)富值_人民幣_(tái)億
Wealth_Change_list = []  # 財(cái)富值變化
Wealth_USD_list = []  # 財(cái)富值_美元
Year_list = []  # 年份

最后澜薄,依然采用我最習(xí)慣的保存數(shù)據(jù)的方法,先拼裝DataFrame數(shù)據(jù):

df = pd.DataFrame(  # 拼裝爬取到的數(shù)據(jù)為DataFrame
        {
            '排名': Ranking_list,
            '排名變化': Ranking_Change_list,
            '全名_中文': Fullname_Cn_list,
            '全名_英文': Fullname_En_list,
            '年齡': Age_list,
            '出生地_中文': BirthPlace_Cn_list,
            '出生地_英文': BirthPlace_En_list,
            '性別': Gender_list,
            '照片': Photo_list,
            '公司名稱_中文': ComName_Cn_list,
            '公司名稱_英文': ComName_En_list,
            '公司總部地_中文': ComHeadquarters_Cn_list,
            '公司總部地_英文': ComHeadquarters_En_list,
            '所在行業(yè)_中文': Industry_Cn_list,
            '所在行業(yè)_英文': Industry_En_list,
            '組織結(jié)構(gòu)': Relations_list,
            '財(cái)富值_人民幣_(tái)億': Wealth_list,
            '財(cái)富值變化': Wealth_Change_list,
            '財(cái)富值_美元': Wealth_USD_list,
            '年份': Year_list
        }
                )

再用pandas的to_csv方法保存:

# 保存結(jié)果數(shù)據(jù)
df.to_csv('2021胡潤(rùn)百富榜.csv', mode='a+', index=False, header=header, encoding='utf_8_sig')

注意摊册,加上這個(gè)編碼格式選項(xiàng)(utf_8_sig)肤京,否則產(chǎn)生亂碼哦。
爬蟲開發(fā)完成茅特,下面展示結(jié)果數(shù)據(jù)忘分。

1.4 結(jié)果數(shù)據(jù)

看一下榜單上TOP20的數(shù)據(jù)吧:
top20數(shù)據(jù)

數(shù)據(jù)一共2916條,19個(gè)字段信息白修,含:

排名妒峦、排名變化、全名中文兵睛、全名英文肯骇、年齡、出生地中文祖很、出生地英文笛丙、性別、公司名稱中文假颇、公司名稱英文胚鸯、公司總部地中文、公司總部地英文拆融、所在行業(yè)中文蠢琳、所在行業(yè)英文啊终、組織結(jié)構(gòu)、財(cái)富值人民幣億傲须、財(cái)富值變化蓝牲、 財(cái)富值_美元、年份泰讽。

數(shù)據(jù)信息還是很豐富的例衍,希望能夠挖掘出一些有價(jià)值的結(jié)論!

二已卸、數(shù)據(jù)分析

2.1 導(dǎo)入庫(kù)

首先佛玄,導(dǎo)入用于數(shù)據(jù)分析的庫(kù):

import pandas as pd  # 讀取csv文件
import matplotlib.pyplot as plt  # 畫圖
from wordcloud import WordCloud  # 詞云圖

增加一個(gè)配置項(xiàng),用于解決matplotlib中文亂碼的問題:

# 解決中文顯示問題
plt.rcParams['font.sans-serif'] = ['SimHei']  # 顯示中文標(biāo)簽  # 指定默認(rèn)字體
plt.rcParams['axes.unicode_minus'] = False  # 解決保存圖像是負(fù)號(hào)'-'顯示為方塊的問題

讀取csv數(shù)據(jù):

# 讀取csv數(shù)據(jù)
df = pd.read_csv('2021胡潤(rùn)百富榜.csv')

2.2 數(shù)據(jù)概況

查看數(shù)據(jù)形狀:
幾行幾列

查看前3名富豪:
前3名

查看最后3名富豪:
后3名

描述性統(tǒng)計(jì):
描述性統(tǒng)計(jì)

從描述性統(tǒng)計(jì)累澡,可以得出結(jié)論:
從最大值3900億梦抢、最小值20億、方差242來(lái)看愧哟,分布很零散奥吩,各位富豪掌握的財(cái)富差距很大,馬太效應(yīng)明顯蕊梧。

2.3 可視化分析

2.3.1 財(cái)富分布

代碼:

df_Wealth = df['財(cái)富值_人民幣_(tái)億']
# 繪圖
df_Wealth.plot.hist(figsize=(18, 6), grid=True, title='財(cái)富分布-直方圖')
# 保存圖片
plt.savefig('財(cái)富分布-直方圖.png')

可視化圖:
財(cái)富分布-直方圖

結(jié)論:大部分的富豪的財(cái)富集中在20億~400億之間霞赫,個(gè)別頂級(jí)富豪的財(cái)富在3000億以上。

2.3.2 年齡分布

代碼:

# 剔除未知
df_Age = df[df.年齡 != '未知']
# 數(shù)據(jù)切割肥矢,8個(gè)分段
df_Age_cut = pd.cut(df_Age.年齡.astype(float), bins=[20, 30, 40, 50, 60, 70, 80, 90, 100])
# 畫柱形圖
df_Age_cut.value_counts().plot.bar(figsize=(16, 6), title='年齡分布-柱形圖')
# 保存圖片
plt.savefig('年齡分布-柱形圖.png')

可視化圖:
年齡分布-柱形圖

結(jié)論:大部分富豪的年齡在50-60歲端衰,其次是60-70和40-50歲。極少數(shù)富豪在20-30歲(年輕有為??)

2.3.3 公司總部分布

代碼:

df_ComHeadquarters = df['公司總部地_中文'].value_counts()
# 繪圖
df_ComHeadquarters.nlargest(n=30).plot.bar(
    figsize=(16, 6),  # 圖片大小
    grid=False,  # 顯示網(wǎng)格
    title='公司總部分布TOP30-柱形圖'  # 圖片標(biāo)題
)
# 保存圖片
plt.savefig('公司總部分布TOP30-柱形圖.png')

可視化圖:
公司總部分布TOP30-柱形圖

結(jié)論:公司分布城市甘改,大多集中在北上廣深等一線城市旅东,另外杭州、香港十艾、蘇州也位列前茅玉锌。

2.3.4 性別分布

代碼:

df_Gender = df['性別'].value_counts()
# 繪圖
df_Gender.plot.pie(
    figsize=(8, 8),  # 圖片大小
    legend=True,  # 顯示圖例
    autopct='%1.2f%%',  # 百分比格式
    title='性別占比分布-餅圖',  # 圖片標(biāo)題
)
# 保存圖片
plt.savefig('性別占比分布-餅圖.png')

可視化圖:
性別占比分布-餅圖

結(jié)論:男性富豪占據(jù)絕大多數(shù),個(gè)別女性在列(巾幗不讓須眉??)

2.3.5 行業(yè)分布

代碼:

df_Industry = df['所在行業(yè)_中文'].value_counts()
df_Industry.nlargest(n=20).plot.bar(
    figsize=(18, 6),  # 圖片大小
    grid=False,  # 顯示網(wǎng)格
    title='行業(yè)分布TOP20-柱形圖'  # 圖片標(biāo)題
)
# 保存圖片
plt.savefig('行業(yè)分布TOP20-柱形圖.png')

可視化圖:
行業(yè)分布TOP20-柱形圖

結(jié)論:百富榜中占比最多的行業(yè)分別是:房地產(chǎn)疟羹、醫(yī)藥、投資禀倔、化工等榄融。

2.3.6 組織結(jié)構(gòu)分布

代碼:

df_Relations = df['組織結(jié)構(gòu)'].value_counts()
# 繪圖
df_Relations.plot.pie(
    figsize=(8, 8),  # 圖片大小
    legend=True,  # 顯示圖例
    autopct='%1.2f%%',  # 百分比格式
    title='組織結(jié)構(gòu)分布-餅圖',  # 圖片標(biāo)題
)
# 保存圖片
plt.savefig('組織結(jié)構(gòu)分布-餅圖.png')

可視化圖:
組織結(jié)構(gòu)分布-餅圖

結(jié)論:半數(shù)以上是未知,企業(yè)未對(duì)外開放救湖,或榜單沒有統(tǒng)計(jì)到愧杯;家族和夫婦占據(jù)前兩類。

2.3.7 公司名稱詞云圖

代碼:

ComName_list = df['公司名稱_中文'].values.tolist()
ComName_str = ' '.join(ComName_list)
stopwords = []  # 停用詞
# backgroud_Image = np.array(Image.open('幻燈片2.png'))  # 讀取背景圖片
wc = WordCloud(
    scale=3,  # 清晰度
    background_color="white",  # 背景顏色
    max_words=1000,#最大字符數(shù)
    width=800,  # 圖寬
    height=500,  # 圖高
    font_path='/System/Library/Fonts/SimHei.ttf',  # 字體文件路徑鞋既,根據(jù)實(shí)際情況替換
    stopwords=stopwords,  # 停用詞
    #   mask=backgroud_Image,  # 背景圖片
)
wc.generate_from_text(ComName_str)  # 生成詞云圖
wc.to_file('2021胡潤(rùn)百富榜_公司名稱_詞云圖.png')  # 保存圖片
wc.to_image()  # 顯示圖片

可視化圖:
公司名稱-詞云圖

結(jié)論:阿里系公司占據(jù)榜首力九,其次是海天味業(yè)等耍铜。

三、整體結(jié)論

綜上所述跌前,針對(duì)2021年胡潤(rùn)百富榜的榜單數(shù)據(jù)棕兼,得出如下結(jié)論:

財(cái)富分布:大部分的富豪的財(cái)富集中在20億~400億之間,個(gè)別頂級(jí)富豪的財(cái)富在3000億以上抵乓。
年齡分布:大部分富豪的年齡在50-60歲伴挚,其次是60-70和40-50歲。極少數(shù)富豪在20-30歲(年輕有為??)
城市分布:公司分布城市灾炭,大多集中在北上廣深等一線城市茎芋,另外杭州、香港蜈出、蘇州也位列前茅
性別分布:男性富豪占據(jù)絕大多數(shù)田弥,個(gè)別女性在列(巾幗不讓須眉??)
行業(yè)分布:百富榜中占比最多的行業(yè)分別是:房地產(chǎn)、醫(yī)藥铡原、投資偷厦、化工等
組織結(jié)構(gòu)分布:半數(shù)以上是未知,企業(yè)未對(duì)外開放眷蜈,或榜單沒有統(tǒng)計(jì)到沪哺;家族和夫婦占據(jù)前兩類。
公司名稱分布:阿里系公司占據(jù)榜首酌儒,其次是海天味業(yè)等辜妓。

四、同步視頻講解

4.1 上集(爬蟲講解)

爬蟲講解視頻:
https://www.zhihu.com/zvideo/1492523459087896577

4.2 下集(數(shù)據(jù)分析講解)

可視化講解視頻:
https://www.zhihu.com/zvideo/1492525821340729344


by 馬哥python說(shuō)

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末忌怎,一起剝皮案震驚了整個(gè)濱河市籍滴,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌榴啸,老刑警劉巖孽惰,帶你破解...
    沈念sama閱讀 206,013評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異鸥印,居然都是意外死亡勋功,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,205評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門库说,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)狂鞋,“玉大人,你說(shuō)我怎么就攤上這事潜的∩ё幔” “怎么了?”我有些...
    開封第一講書人閱讀 152,370評(píng)論 0 342
  • 文/不壞的土叔 我叫張陵啰挪,是天一觀的道長(zhǎng)信不。 經(jīng)常有香客問我嘲叔,道長(zhǎng),這世上最難降的妖魔是什么抽活? 我笑而不...
    開封第一講書人閱讀 55,168評(píng)論 1 278
  • 正文 為了忘掉前任硫戈,我火速辦了婚禮,結(jié)果婚禮上酌壕,老公的妹妹穿的比我還像新娘掏愁。我一直安慰自己,他們只是感情好卵牍,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,153評(píng)論 5 371
  • 文/花漫 我一把揭開白布果港。 她就那樣靜靜地躺著,像睡著了一般糊昙。 火紅的嫁衣襯著肌膚如雪辛掠。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 48,954評(píng)論 1 283
  • 那天释牺,我揣著相機(jī)與錄音萝衩,去河邊找鬼。 笑死没咙,一個(gè)胖子當(dāng)著我的面吹牛猩谊,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播祭刚,決...
    沈念sama閱讀 38,271評(píng)論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼牌捷,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了涡驮?” 一聲冷哼從身側(cè)響起暗甥,我...
    開封第一講書人閱讀 36,916評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎捉捅,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體棒口,經(jīng)...
    沈念sama閱讀 43,382評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡无牵,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,877評(píng)論 2 323
  • 正文 我和宋清朗相戀三年剥懒,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片合敦。...
    茶點(diǎn)故事閱讀 37,989評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡验游,死狀恐怖保檐,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情崔梗,我是刑警寧澤夜只,帶...
    沈念sama閱讀 33,624評(píng)論 4 322
  • 正文 年R本政府宣布蒜魄,位于F島的核電站,受9級(jí)特大地震影響谈为,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜伞鲫,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,209評(píng)論 3 307
  • 文/蒙蒙 一秕脓、第九天 我趴在偏房一處隱蔽的房頂上張望柒瓣。 院中可真熱鬧吠架,春花似錦、人聲如沸磺平。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,199評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)媒吗。三九已至乙埃,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間介袜,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,418評(píng)論 1 260
  • 我被黑心中介騙來(lái)泰國(guó)打工辙喂, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,401評(píng)論 2 352
  • 正文 我出身青樓秋麸,卻偏偏與公主長(zhǎng)得像炬太,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子亲族,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,700評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容