爬虫与数据分析结合案例
案例背景
在数据科学与计算领域,爬虫技术与数据分析的结合是常见且强大的应用方式。本案例以“中国大学排名”为例,演示如何从高三网爬取大学排名数据,并通过数据预处理、分析和可视化,最终生成直观的统计图表(柱形图和饼图)。
任务流程
数据爬取
目标:爬取高三网(`http://www.bspider.top/gaosan/`)中的中国大学排名数据,包括以下字段:
学校名称
总分
全国排名
星级排名
办学层级
工具:Python 的 `requests` 和 `BeautifulSoup` 库。
结果:数据保存为 `school.csv` 文件。
数据预处理
爬取后的数据可能存在缺失值(如“总分”列),需通过 `pandas` 进行清洗:
方法 1:删除空值行
df.dropna(subset=['总分'], inplace=True)
方法 2:指定值填充空值
df['总分'].fillna("未知", inplace=True)
方法 3:均值/中位数填充
mean_score = df['总分'].mean()
df['总分'].fillna(mean_score, inplace=True)
median_score = df['总分'].median()
df['总分'].fillna(median_score, inplace=True)
数据分析
数据包含 **820 所大学**,按星级排名分布如下:
星级 学校数量 占比
8 星 8 所 1%
7 星 16 所 2%
6 星 36 所 4.5%
5 星 59 所 7.2%
4 星 103 所 12.5%
3 星 190 所 23.1%
2 星 148 所 18%
1 星 260 所 31.7%
数据可视化
柱形图:星级排名分布
使用 `Seaborn` 绘制柱形图,直观展示各星级学校的数量差异:
import seaborn as sns
sns.barplot(x='星级', y='数量', data=df_star)
plt.title("中国大学星级排名分布")
plt.show()
饼图:星级占比
通过饼图展示比例分布:
plt.pie(df_star['占比'], labels=df_star['星级'], autopct='%1.1f%%')
plt.title("中国大学星级占比")
plt.show()
总结
1. 爬虫技术:通过 `requests` 获取网页数据,`BeautifulSoup` 解析 HTML 结构。
2. 数据清洗:`pandas` 提供灵活的缺失值处理方式(删除、填充)。
3. 可视化工具:`Seaborn` 和 `Matplotlib` 快速生成统计图表。