怎么用Python展示全国高校的分布情况

发布时间:2023-04-12 09:54:53 作者:iii
来源:亿速云 阅读:124

怎么用Python展示全国高校的分布情况

目录

  1. 引言
  2. 数据获取
  3. 数据预处理
  4. 数据可视化
  5. 分析与结论
  6. 代码实现
  7. 总结

引言

随着中国高等教育的快速发展,全国高校的数量和分布情况成为了一个备受关注的话题。了解高校的分布情况不仅有助于教育资源的合理配置,还能为考生和家长提供有价值的参考信息。本文将介绍如何使用Python编程语言,结合数据获取、数据预处理和数据可视化技术,展示全国高校的分布情况。

数据获取

数据来源

要展示全国高校的分布情况,首先需要获取高校的地理位置数据。这些数据可以从多个渠道获取,例如:

数据爬取

如果从教育部官方网站获取数据,可以使用Python的requests库和BeautifulSoup库进行网页爬取。以下是一个简单的爬取示例:

import requests
from bs4 import BeautifulSoup

url = "http://www.moe.gov.cn/s78/A03/moe_560/jytjsj_2019/qg/202001/t20200106_414658.html"
response = requests.get(url)
soup = BeautifulSoup(response.text, 'html.parser')

# 假设高校信息在表格中
table = soup.find('table')
rows = table.find_all('tr')

for row in rows:
    cols = row.find_all('td')
    if len(cols) > 0:
        school_name = cols[0].text.strip()
        location = cols[1].text.strip()
        print(f"学校名称: {school_name}, 所在地: {location}")

数据预处理

数据清洗

获取到的原始数据通常需要进行清洗,以去除无效或重复的数据。常见的数据清洗步骤包括:

import pandas as pd

# 假设数据已经存储在一个CSV文件中
df = pd.read_csv('universities.csv')

# 去除空值
df.dropna(inplace=True)

# 去除重复值
df.drop_duplicates(inplace=True)

# 统一格式
df['location'] = df['location'].str.replace('市', '')

数据转换

为了在地图上展示高校的分布情况,需要将地理位置信息转换为经纬度坐标。可以使用geopy库进行地理编码。

from geopy.geocoders import Nominatim

geolocator = Nominatim(user_agent="geoapiExercises")

def get_lat_lon(location):
    try:
        location = geolocator.geocode(location + ", 中国")
        return (location.latitude, location.longitude)
    except:
        return (None, None)

df['coordinates'] = df['location'].apply(get_lat_lon)
df[['latitude', 'longitude']] = pd.DataFrame(df['coordinates'].tolist(), index=df.index)
df.drop(columns=['coordinates'], inplace=True)

数据可视化

地图绘制

使用folium库可以轻松地绘制交互式地图。首先,创建一个基础地图,然后在地图上添加高校的位置标记。

import folium

# 创建基础地图
m = folium.Map(location=[35, 105], zoom_start=5)

# 添加高校位置标记
for idx, row in df.iterrows():
    folium.Marker(
        location=[row['latitude'], row['longitude']],
        popup=row['school_name'],
        icon=folium.Icon(color='blue')
    ).add_to(m)

# 保存地图
m.save('universities_map.html')

高校分布图

为了更直观地展示高校的分布情况,可以使用matplotlib库绘制高校分布图。

import matplotlib.pyplot as plt

# 绘制高校分布图
plt.figure(figsize=(10, 8))
plt.scatter(df['longitude'], df['latitude'], alpha=0.5)
plt.title('全国高校分布图')
plt.xlabel('经度')
plt.ylabel('纬度')
plt.grid(True)
plt.show()

交互式地图

为了增强用户体验,可以使用plotly库创建交互式地图。用户可以通过鼠标悬停查看高校的详细信息。

import plotly.express as px

fig = px.scatter_geo(df, lat='latitude', lon='longitude', hover_name='school_name', scope='asia')
fig.update_layout(title='全国高校分布图', title_x=0.5)
fig.show()

分析与结论

通过上述步骤,我们成功获取并展示了全国高校的分布情况。从地图上可以看出,高校主要集中在东部沿海地区,尤其是北京、上海、广州等大城市。中西部地区的高校数量相对较少,但近年来随着国家政策的支持,中西部地区的高校数量也在逐步增加。

代码实现

完整代码

以下是完整的Python代码,包括数据获取、数据预处理和数据可视化的所有步骤。

import requests
from bs4 import BeautifulSoup
import pandas as pd
from geopy.geocoders import Nominatim
import folium
import matplotlib.pyplot as plt
import plotly.express as px

# 数据获取
url = "http://www.moe.gov.cn/s78/A03/moe_560/jytjsj_2019/qg/202001/t20200106_414658.html"
response = requests.get(url)
soup = BeautifulSoup(response.text, 'html.parser')

table = soup.find('table')
rows = table.find_all('tr')

data = []
for row in rows:
    cols = row.find_all('td')
    if len(cols) > 0:
        school_name = cols[0].text.strip()
        location = cols[1].text.strip()
        data.append([school_name, location])

df = pd.DataFrame(data, columns=['school_name', 'location'])

# 数据清洗
df.dropna(inplace=True)
df.drop_duplicates(inplace=True)
df['location'] = df['location'].str.replace('市', '')

# 数据转换
geolocator = Nominatim(user_agent="geoapiExercises")

def get_lat_lon(location):
    try:
        location = geolocator.geocode(location + ", 中国")
        return (location.latitude, location.longitude)
    except:
        return (None, None)

df['coordinates'] = df['location'].apply(get_lat_lon)
df[['latitude', 'longitude']] = pd.DataFrame(df['coordinates'].tolist(), index=df.index)
df.drop(columns=['coordinates'], inplace=True)

# 数据可视化 - 地图绘制
m = folium.Map(location=[35, 105], zoom_start=5)

for idx, row in df.iterrows():
    folium.Marker(
        location=[row['latitude'], row['longitude']],
        popup=row['school_name'],
        icon=folium.Icon(color='blue')
    ).add_to(m)

m.save('universities_map.html')

# 数据可视化 - 高校分布图
plt.figure(figsize=(10, 8))
plt.scatter(df['longitude'], df['latitude'], alpha=0.5)
plt.title('全国高校分布图')
plt.xlabel('经度')
plt.ylabel('纬度')
plt.grid(True)
plt.show()

# 数据可视化 - 交互式地图
fig = px.scatter_geo(df, lat='latitude', lon='longitude', hover_name='school_name', scope='asia')
fig.update_layout(title='全国高校分布图', title_x=0.5)
fig.show()

总结

本文详细介绍了如何使用Python展示全国高校的分布情况。通过数据获取、数据预处理和数据可视化,我们能够直观地了解高校在全国范围内的分布情况。这不仅为教育资源的合理配置提供了参考,也为考生和家长提供了有价值的信息。希望本文能够帮助读者掌握相关技术,并在实际应用中发挥作用。

推荐阅读:
  1. python中xrange()函数有什么用
  2. 如何使用Python中的@classmethod实现单例模式

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

python

上一篇:Python怎么实现交通数据可视化

下一篇:Python匹配方法怎么用

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》