溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

怎么用Python展示全國高校的分布情況

發布時間:2023-04-12 09:54:53 來源:億速云 閱讀:128 作者:iii 欄目:編程語言

怎么用Python展示全國高校的分布情況

目錄

  1. 引言
  2. 數據獲取
  3. 數據預處理
  4. 數據可視化
  5. 分析與結論
  6. 代碼實現
  7. 總結

引言

隨著中國高等教育的快速發展,全國高校的數量和分布情況成為了一個備受關注的話題。了解高校的分布情況不僅有助于教育資源的合理配置,還能為考生和家長提供有價值的參考信息。本文將介紹如何使用Python編程語言,結合數據獲取、數據預處理和數據可視化技術,展示全國高校的分布情況。

數據獲取

數據來源

要展示全國高校的分布情況,首先需要獲取高校的地理位置數據。這些數據可以從多個渠道獲取,例如:

  • 教育部官方網站:教育部通常會發布全國高校的名單和基本信息。
  • 第三方數據平臺:如高德地圖、百度地圖等,提供了豐富的地理位置數據。
  • 開放數據平臺:如Kaggle、GitHub等,可能有用戶分享的高校數據集。

數據爬取

如果從教育部官方網站獲取數據,可以使用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展示全國高校的分布情況。通過數據獲取、數據預處理和數據可視化,我們能夠直觀地了解高校在全國范圍內的分布情況。這不僅為教育資源的合理配置提供了參考,也為考生和家長提供了有價值的信息。希望本文能夠幫助讀者掌握相關技術,并在實際應用中發揮作用。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女