数据分析案例报告(【爬虫+数据分析+数据可视化】python数据分析全流程《2021胡润百富榜》榜单数据!)
一 、爬虫
1.1 爬取目标
本次爬取的目标是 ,2021年胡润百富榜的榜单数据:胡润百富 - 榜单
页面上能看到的信息有:
排名 、财富值、排名变化 、个人信息(姓名 、性别 、年龄) 、企业信息(企业名称 、所属行业)
页面结构很整齐 ,数据也很完整 ,非常适合爬虫和数据分析使用 。1.2 分析页面
老规矩 ,打开Chrome浏览器 ,按F12进入开发者模式 ,依次点击Network->Fetch/XHR ,准备好捕获ajax请求 。
重新刷新一下页面 ,发现一条请求:
在预览界面 ,看到一共20条(0~19)返回数据,正好对应页面上的20个富豪信息。
所以 ,后面编写爬虫代码 ,针对这个地址发送请求就可以了 。
另外,关于翻页 ,我的个人习惯是 ,选择每页显示最多的数据量,这样能保证少翻页几次 ,少发送几次请求 ,防止被对端服务器反爬 。
所以 ,每页选择200条数据:
再刷新一下页面 ,进行几次翻页 ,观察请求地址的变化规律:
以翻到第3页为例 ,url中的offset(偏移量)为400 ,limit(每页的条数)为200 ,所以 ,可得出规律:
offset = (page - 1) * 200
limit = 200下面开始编写爬虫代码 。
1.3 爬虫代码
首先,导入需要用到的库:
import requests # 发送请求 import pandas as pd # 存入excel数据 from time import sleep # 等待间隔,防止反爬 import random # 随机等待根据1.2章节分析得出的结论 ,编写逻辑代码 ,向页面发送请求:
# 循环请求1-15页 for page in range(1, 16): # 胡润百富榜地址 sleep_seconds = random.uniform(1, 2) print(开始等待{}秒.format(sleep_seconds)) sleep(sleep_seconds) print(开始爬取第{}页.format(page)) offset = (page - 1) * 200 url = https://www.hurun.net/zh-CN/Rank/HsRankDetailsList?num=YUBAO34E&search=&offset={}&limit=200.format(offset) # 构造请求头 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 } # 发送请求 r = requests.get(url, headers=headers)用json格式解析返回的请求数据:(一行代码即可完成接收)
json_data = r.json()由于解析的字段较多,这里不再赘述详细过程 ,字段信息包含:
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 = [] # 所在行业_中文 Industry_En_list = [] # 所在行业_英文 Ranking_list = [] # 排名 Ranking_Change_list = [] # 排名变化 Relations_list = [] # 组织结构 Wealth_list = [] # 财富值_人民币_亿 Wealth_Change_list = [] # 财富值变化 Wealth_USD_list = [] # 财富值_美元 Year_list = [] # 年份最后 ,依然采用我最习惯的保存数据的方法,先拼装DataFrame数据:
df = pd.DataFrame( # 拼装爬取到的数据为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, 所在行业_中文: Industry_Cn_list, 所在行业_英文: Industry_En_list, 组织结构: Relations_list, 财富值_人民币_亿: Wealth_list, 财富值变化: Wealth_Change_list, 财富值_美元: Wealth_USD_list, 年份: Year_list } )再用pandas的to_csv方法保存:
# 保存结果数据 df.to_csv(2021胡润百富榜.csv, mode=a+, index=False, header=header, encoding=utf_8_sig)注意 ,加上这个编码格式选项(utf_8_sig) ,否则产生乱码哦 。
爬虫开发完成 ,下面展示结果数据 。1.4 结果数据
看一下榜单上TOP20的数据吧:
数据一共2916条 ,19个字段信息 ,含:
排名 、排名变化 、全名_中文 、全名_英文 、年龄、出生地_中文 、出生地_英文 、性别、公司名称_中文 、公司名称_英文 、公司总部地_中文、公司总部地_英文 、所在行业_中文 、所在行业_英文 、组织结构 、财富值_人民币_亿 、财富值变化 、 财富值_美元 、年份 。
数据信息还是很丰富的 ,希望能够挖掘出一些有价值的结论!
二 、数据分析
2.1 导入库
首先 ,导入用于数据分析的库:
import pandas as pd # 读取csv文件 import matplotlib.pyplot as plt # 画图 from wordcloud import WordCloud # 词云图增加一个配置项 ,用于解决matplotlib中文乱码的问题:
# 解决中文显示问题 plt.rcParams[font.sans-serif] = [SimHei] # 显示中文标签 # 指定默认字体 plt.rcParams[axes.unicode_minus] = False # 解决保存图像是负号-显示为方块的问题读取csv数据:
# 读取csv数据 df = pd.read_csv(2021胡润百富榜.csv)2.2 数据概况
查看数据形状:
查看前3名富豪:
查看最后3名富豪:
描述性统计:
从描述性统计 ,可以得出结论:
从最大值3900亿 、最小值20亿、方差242来看,分布很零散 ,各位富豪掌握的财富差距很大 ,马太效应明显 。2.3 可视化分析
2.3.1 财富分布
代码:
df_Wealth = df[财富值_人民币_亿] # 绘图 df_Wealth.plot.hist(figsize=(18, 6), grid=True, title=财富分布-直方图) # 保存图片 plt.savefig(财富分布-直方图.png)可视化图:
结论:大部分的富豪的财富集中在20亿~400亿之间,个别顶级富豪的财富在3000亿以上 。
2.3.2 年龄分布
代码:
# 剔除未知 df_Age = df[df.年龄 != 未知] # 数据切割 ,8个分段 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)可视化图:
结论:大部分富豪的年龄在50-60岁 ,其次是60-70和40-50岁 。极少数富豪在20-30岁(年轻有为?)
2.3.3 公司总部分布
代码:
df_ComHeadquarters = df[公司总部地_中文].value_counts() # 绘图 df_ComHeadquarters.nlargest(n=30).plot.bar( figsize=(16, 6), # 图片大小 grid=False, # 显示网格 title=公司总部分布TOP30-柱形图 # 图片标题 ) # 保存图片 plt.savefig(公司总部分布TOP30-柱形图.png)可视化图:
结论:公司分布城市,大多集中在北上广深等一线城市 ,另外杭州 、香港 、苏州也位列前茅。
2.3.4 性别分布
代码:
df_Gender = df[性别].value_counts() # 绘图 df_Gender.plot.pie( figsize=(8, 8), # 图片大小 legend=True, # 显示图例 autopct=%1.2f%%, # 百分比格式 title=性别占比分布-饼图, # 图片标题 ) # 保存图片 plt.savefig(性别占比分布-饼图.png)可视化图:
结论:男性富豪占据绝大多数 ,个别女性在列(巾帼不让须眉?)
2.3.5 行业分布
代码:
df_Industry = df[所在行业_中文].value_counts() df_Industry.nlargest(n=20).plot.bar( figsize=(18, 6), # 图片大小 grid=False, # 显示网格 title=行业分布TOP20-柱形图 # 图片标题 ) # 保存图片 plt.savefig(行业分布TOP20-柱形图.png)可视化图:
结论:百富榜中占比最多的行业分别是:房地产、医药 、投资 、化工等 。
2.3.6 组织结构分布
代码:
df_Relations = df[组织结构].value_counts() # 绘图 df_Relations.plot.pie( figsize=(8, 8), # 图片大小 legend=True, # 显示图例 autopct=%1.2f%%, # 百分比格式 title=组织结构分布-饼图, # 图片标题 ) # 保存图片 plt.savefig(组织结构分布-饼图.png)可视化图:
结论:半数以上是未知 ,企业未对外开放 ,或榜单没有统计到;家族和夫妇占据前两类 。
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,#最大字符数 width=800, # 图宽 height=500, # 图高 font_path=/System/Library/Fonts/SimHei.ttf, # 字体文件路径 ,根据实际情况替换 stopwords=stopwords, # 停用词 # mask=backgroud_Image, # 背景图片 ) wc.generate_from_text(ComName_str) # 生成词云图 wc.to_file(2021胡润百富榜_公司名称_词云图.png) # 保存图片 wc.to_image() # 显示图片可视化图:
结论:阿里系公司占据榜首 ,其次是海天味业等。
三、整体结论
综上所述 ,针对2021年胡润百富榜的榜单数据 ,得出如下结论:
财富分布:大部分的富豪的财富集中在20亿~400亿之间 ,个别顶级富豪的财富在3000亿以上 。
年龄分布:大部分富豪的年龄在50-60岁,其次是60-70和40-50岁 。极少数富豪在20-30岁(年轻有为?)
城市分布:公司分布城市 ,大多集中在北上广深等一线城市 ,另外杭州 、香港 、苏州也位列前茅
性别分布:男性富豪占据绝大多数,个别女性在列(巾帼不让须眉?)
行业分布:百富榜中占比最多的行业分别是:房地产 、医药 、投资 、化工等
组织结构分布:半数以上是未知 ,企业未对外开放 ,或榜单没有统计到;家族和夫妇占据前两类。
公司名称分布:阿里系公司占据榜首,其次是海天味业等 。四 、同步视频讲解
4.1 上集(爬虫讲解)
爬虫讲解视频:
https://www.zhihu.com/zvideo/14925234590878965774.2 下集(数据分析讲解)
可视化讲解视频:
https://www.zhihu.com/zvideo/1492525821340729344五 、附完整源码
完整源码:【爬虫+数据分析+数据可视化】python数据分析全流程《2021胡润百富榜》榜单数据!
创心域SEO版权声明:以上内容作者已申请原创保护,未经允许不得转载,侵权必究!授权事宜、对本内容有异议或投诉,敬请联系网站管理员,我们将尽快回复您,谢谢合作!