隨著中國高等教育的快速發展,全國高校的數量和分布情況成為了一個備受關注的話題。了解高校的分布情況不僅有助于教育資源的合理配置,還能為考生和家長提供有價值的參考信息。本文將介紹如何使用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('市', '')
為了在地圖上展示高校的分布情況,需要將地理位置信息轉換為經緯度坐標??梢允褂?code>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展示全國高校的分布情況。通過數據獲取、數據預處理和數據可視化,我們能夠直觀地了解高校在全國范圍內的分布情況。這不僅為教育資源的合理配置提供了參考,也為考生和家長提供了有價值的信息。希望本文能夠幫助讀者掌握相關技術,并在實際應用中發揮作用。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。