Rumah >pembangunan bahagian belakang >Tutorial Python >Cara menggunakan Python untuk memaparkan pengedaran kolej dan universiti di seluruh negara

Cara menggunakan Python untuk memaparkan pengedaran kolej dan universiti di seluruh negara

WBOY
WBOYke hadapan
2023-05-01 10:16:121084semak imbas

Pemerolehan Data

Untuk menunjukkan taburan kolej dan universiti, anda mesti mendapatkan data lokasi kolej dan universiti di seluruh negara dahulu. Data untuk artikel ini datang daripada Rangkaian Peperiksaan Kemasukan Kolej Palm

Semasa artikel ini ditulis pada Jun 2022, sebanyak 2,822 maklumat kolej dan universiti telah diperolehi. Selepas menyemak data, kecuali beberapa nilai nol, keseluruhan data adalah sangat lengkap dan tidak menjejaskan penggunaan. Data mempunyai sejumlah 44 medan Artikel ini hanya akan menggunakan beberapa medan Ia tidak perlu diproses dan boleh diperolehi apabila menggunakannya.

Cara menggunakan Python untuk memaparkan pengedaran kolej dan universiti di seluruh negara

Pengenalan kepada kaedah pemerolehan data (pengetahuan asas crawler):

1 Rangkaian. Pilih semua sekolah pada halaman

2. Tekan kekunci F12, klik Rangkaian > dan kemudian klik API yang diakses dan maklumat lain akan dipaparkan pada halaman XHR.

3. Salin API setiap kali anda membelek halaman untuk perbandingan Terdapat dua parameter yang berubah apabila membelok halaman: halaman dan tanda selamat ialah bilangan halaman yang diakses pada masa ini , dan signsafe ialah a Nilai md5 tidak boleh diselesaikan secara terbalik, tetapi nilai sebelumnya boleh disimpan dan digunakan secara rawak kemudian. Dengan maklumat ini, dengan sentiasa menukar bilangan halaman yang dilawati dan nilai tanda selamat, semua data sekolah boleh diperolehi.

Nilai parameter numFound dalam Respons ialah jumlah bilangan sekolah Bahagikan dengan bilangan sekolah yang dipaparkan pada setiap halaman untuk mendapatkan jumlah halaman Anda juga boleh terus mengklik pada daripada halaman untuk melihat jumlah halaman dengan cara ini: Bilangan lawatan ditentukan.

4. Oleh kerana tapak web memerlukan log masuk untuk digunakan, pengepala juga perlu diperoleh semasa akses, seperti Kaedah Permintaan (POST digunakan kali ini), Ejen Pengguna, dsb.

5 Dengan maklumat di atas, gelungkan URL semua halaman, gunakan permintaan untuk menghantar permintaan untuk mendapatkan data semua universiti, dan kemudian gunakan panda untuk menulis data untuk cemerlang.

Peringatan hangat: Apabila mendapatkan data, anda mesti mematuhi penyataan tapak web yang berkaitan Cuba tetapkan selang masa tertentu untuk kod perangkak dan jangan jalankan kod perangkak semasa tempoh capaian puncak.

Mendapatkan latitud dan longitud

Palm College Entrance Examination Network adalah laman web untuk mengisi perkhidmatan sukarelawan peperiksaan kemasukan kolej Walaupun data yang diperolehi mempunyai 44 medan, ia tidak mengandungi latitud dan longitud sekolah. Untuk memaparkan lokasi kolej dan universiti dengan lebih baik pada peta, adalah perlu untuk mendapatkan longitud dan latitud yang sepadan berdasarkan alamat sekolah.

Artikel ini menggunakan platform terbuka Peta Baidu: https://lbsyun.baidu.com/apiconsole/center#/home Anda boleh menggunakan antara muka terbuka Peta Baidu untuk mendapatkan longitud dan latitud daripada lokasi geografi.

Langkah-langkah untuk digunakan ialah:

1. Daftar dan log masuk ke akaun Baidu Akaun ini boleh menjadi akaun biasa untuk keseluruhan ekosistem Baidu (seperti akaun untuk cakera rangkaian, perpustakaan, dsb. adalah universal).

2. Log masuk ke Baidu Map Open Platform, klik untuk memasuki , kemudian klik dalam , dan kemudian klik Buat aplikasi. Sesuaikan nama aplikasi, isikan maklumat lain seperti yang digesa dan diperlukan, dan jalankan pengesahan nama sebenar untuk menjadi pembangun individu.

Cara menggunakan Python untuk memaparkan pengedaran kolej dan universiti di seluruh negara

3. Selepas membuat aplikasi, anda akan mendapat aplikasi Anda boleh menggunakan nilai AK ini untuk memanggil API Baidu Kod rujukan adalah seperti berikut.

import requests


def baidu_api(addr):
url = "http://api.map.baidu.com/geocoding/v3/?"
params = {
"address": addr,
"output": "json",
"ak": "复制你创建的应用AK到此"
}
req = requests.get(url, params)
res = req.json()
if len(res["result"]) > 0:
loc = res["result"]["location"]
return loc
else:
print("获取{}经纬度失败".format(addr))
return {'lng': '', 'lat': ''}

4. Selepas berjaya memanggil API Peta Baidu, baca lokasi semua kolej dan universiti, panggil fungsi di atas dalam urutan, dapatkan longitud dan latitud semua kolej dan universiti, dan tulis semula ke dalam excel.

import pandas as pd
import numpy as np


def get_lng_lat():
df = pd.read_excel('school.xlsx')
lng_lat = []
for row_index, row_data in df.iterrows():
addr = row_data['address']
if addr is np.nan:
addr = row_data['city_name'] + row_data['county_name']
# print(addr)
loc = baidu_api(addr.split(',')[0])
lng_lat.append(loc)
df['经纬度'] = lng_lat
df['经度'] = df['经纬度'].apply(lambda x: x['lng'])
df['纬度'] = df['经纬度'].apply(lambda x: x['lat'])
df.to_excel('school_lng_lat.xlsx')

Hasil data akhir adalah seperti yang ditunjukkan di bawah:

Cara menggunakan Python untuk memaparkan pengedaran kolej dan universiti di seluruh negara

Pembangun individu perlu memberi perhatian apabila menggunakan platform terbuka Peta Baidu Terdapat kuota harian had, jadi nyahpepijat kod dahulu Jangan gunakan semua data, jalankan demo dahulu, jika tidak, anda perlu menunggu sehari atau membeli kredit.

Cara menggunakan Python untuk memaparkan pengedaran kolej dan universiti di seluruh negara

Paparan lokasi kolej

Data sudah sedia. Seterusnya, paparkannya pada peta.

Artikel ini menggunakan alat visualisasi data sumber terbuka Baidu Echarts menyediakan perpustakaan pyecharts untuk bahasa Python, yang sangat mudah digunakan.

Arahan pemasangan:

pip install pyecharts

1 Tandakan lokasi kolej dan universiti

from pyecharts.charts import Geo
from pyecharts import options as opts
from pyecharts.globals import GeoType
import pandas as pd

def multi_location_mark():
"""批量标注点"""
geo = Geo(init_opts=opts.InitOpts(bg_color='black', width='1600px', height='900px'))
df = pd.read_excel('school_lng_lat.xlsx')
for row_index, row_data in df.iterrows():
geo.add_coordinate(row_data['name'], row_data['经度'], row_data['纬度'])
data_pair = [(name, 2) for name in df['name']]
geo.add_schema(
maptype='china', is_roam=True, itemstyle_opts=opts.ItemStyleOpts(color='#323c48', border_color='#408080')
).add(
'', data_pair=data_pair, type_=GeoType.SCATTER, symbol='pin', symbol_size=16, color='#CC3300'
).set_series_opts(
label_opts=opts.LabelOpts(is_show=False)
).set_global_opts(
title_opts=opts.TitleOpts(title='全国高校位置标注图', pos_left='650', pos_top='20',
title_textstyle_opts=opts.TextStyleOpts(color='white', font_size=16))
).render('high_school_mark.html')

Cara menggunakan Python untuk memaparkan pengedaran kolej dan universiti di seluruh negara

Daripada hasil penandaan Nampaknya kolej dan universiti kebanyakannya terletak di sepanjang pantai, kawasan tengah dan timur, dengan agak sedikit di barat, terutamanya di kawasan altitud tinggi.

2. Lukiskan peta haba bagi taburan universiti

from pyecharts.charts import Geo
from pyecharts import options as opts
from pyecharts.globals import ChartType
import pandas as pd

def draw_location_heatmap():
"""绘制热力图"""
geo = Geo(init_opts=opts.InitOpts(bg_color='black', width='1600px', height='900px'))
df = pd.read_excel('school_lng_lat.xlsx')
for row_index, row_data in df.iterrows():
geo.add_coordinate(row_data['name'], row_data['经度'], row_data['纬度'])
data_pair = [(name, 2) for name in df['name']]
geo.add_schema(
maptype='china', is_roam=True, itemstyle_opts=opts.ItemStyleOpts(color='#323c48', border_color='#408080')
).add(
'', data_pair=data_pair, type_=ChartType.HEATMAP
).set_series_opts(
label_opts=opts.LabelOpts(is_show=False)
).set_global_opts(
title_opts=opts.TitleOpts(title='全国高校分布热力图', pos_left='650', pos_top='20',
title_textstyle_opts=opts.TextStyleOpts(color='white', font_size=16)),
visualmap_opts=opts.VisualMapOpts()
).render('high_school_heatmap.html')

Cara menggunakan Python untuk memaparkan pengedaran kolej dan universiti di seluruh negara

Daripada peta haba, tempat di mana universiti lebih banyak tertumpu terutamanya kawasan pantai, utara, Shanghai, Guangzhou, Yangtze dan lembangan Sungai Kuning, dan kawasan yang lebih barat hanya Sichuan dan Chongqing.

3.绘制按省划分的分布密度图

from pyecharts.charts import Map
from pyecharts import options as opts
import pandas as pd


def draw_location_density_map():
"""绘制各省高校分布密度图"""
map = Map(init_opts=opts.InitOpts(bg_color='black', width='1200px', height='700px'))
df = pd.read_excel('school_lng_lat.xlsx')
s = df['province_name'].value_counts()
data_pair = [[province, int(s[province])] for province in s.index]
map.add(
'', data_pair=data_pair, maptype="china"
).set_global_opts(
title_opts=opts.TitleOpts(title='全国高校按省分布密度图', pos_left='500', pos_top='70',
title_textstyle_opts=opts.TextStyleOpts(color='white', font_size=16)),
visualmap_opts=opts.VisualMapOpts(max_=200, is_piecewise=True, pos_left='100', pos_bottom='100',textstyle_opts=opts.TextStyleOpts(color='white', font_size=16))
).render("high_school_density.html")

Cara menggunakan Python untuk memaparkan pengedaran kolej dan universiti di seluruh negara

从省级分布密度图可以看出,高校数量多的省份集中在中部和东部,尤其是北京和上海附近的几个省。

4.211和985高校的分布情况

筛选出211和985的高校数据,再绘制一次。(代码不重复粘贴,只需要加一行筛选代码即可)

Cara menggunakan Python untuk memaparkan pengedaran kolej dan universiti di seluruh negara

Atas ialah kandungan terperinci Cara menggunakan Python untuk memaparkan pengedaran kolej dan universiti di seluruh negara. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:yisu.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam