Untuk menunjukkan taburan kolej dan universiti, anda mesti mendapatkan data lokasi kolej dan universiti di seluruh negara terlebih dahulu. Data untuk artikel ini datang daripada Rangkaian Peperiksaan Kemasukan Kolej Palm (https://www.gaokao.cn/school/search).
Ketika menulis artikel ini 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.
Pengenalan kepada kaedah pemerolehan data (pengetahuan asas perangkak):
1. Daftar dan log masuk ke laman web peperiksaan kemasukan kolej mudah alih. Pilih semua sekolah pada halaman .
2 Tekan kekunci F12, klik ke Rangkaian > Ambil/XHR, dan kemudian klik dan . halaman beberapa kali > butang, API yang diakses dan maklumat lain akan dipaparkan pada halaman XHR.
3. Salin API untuk setiap pusingan halaman dan bandingkannya didapati terdapat dua parameter yang berubah semasa membelek halaman: halaman dan signsafe , halaman ialah bilangan halaman yang sedang dilawati, signsafe ialah nilai md5, yang tidak boleh diterbalikkan, 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 halaman untuk melihat jumlah halaman , dengan itu menentukan bilangan lawatan.
4. Oleh kerana tapak web perlu dilog masuk untuk digunakan, ia juga perlu mendapatkan Pengepala semasa akses, seperti Kaedah Permintaan ( POST kali ini), Pengguna -Agen dll.
5 Dengan maklumat di atas, gelung melalui penyambungan URL semua halaman dan gunakan permintaan untuk menghantar permintaan untuk mendapatkan data semua. universiti. Kemudian gunakan panda untuk menulis data untuk cemerlang.
Peringatan hangat: Apabila mendapatkan data, anda perlu mematuhi penyataan berkaitan tapak web. Cuba tetapkan selang masa tertentu untuk kod perangkak dan jangan gunakannya semasa masa lawatan puncak Jalankan kod perangkak dengan kerap.
Penjelasan tambahan:
Pengumuman terkini People's Daily Online: bilangan kolej dan universiti biasa di negara ini ialah 2,759 . Artikel ini adalah daripada laman web peperiksaan kemasukan kolej bergerak Perbezaan antara 2,822 sekolah yang diperolehi ialah 63, terutamanya disebabkan oleh perbezaan kaedah statistik cawangan beberapa sekolah. Perkara yang ditunjukkan oleh artikel ini ialah pengedaran, dan perbezaan ini mempunyai sedikit kesan.
Rangkaian Peperiksaan Kemasukan Kolej Palm merupakan laman web yang menyediakan perkhidmatan sukarelawan untuk peperiksaan kemasukan kolej Walaupun data yang diperolehi mempunyai 44 medan, ia tidak mengandungi longitud dan latitud 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 Baidu Peta Buka antara muka untuk mendapatkan latitud dan longitud 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, Wenku, dll. adalah perkara biasa).
2 Log masuk ke Baidu Map Open Platform, klik untuk memasukkan , kemudian klik dalam , dan kemudian. klik Buat apl. Sesuaikan nama aplikasi, isikan maklumat lain seperti yang digesa dan diperlukan, dan jalani pengesahan nama sebenar untuk menjadi pembangun individu.
3. Selepas membuat aplikasi, anda akan mendapat aplikasi , gunakan 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 universiti, panggil fungsi di atas mengikut urutan, dapatkan longitud dan latitud semua universiti, dan tulis semula. ia menjadi 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 berikut:
Pemaju individu menggunakan Peta Baidu terbuka platform Sila ambil perhatian bahawa terdapat had kuota harian, jadi apabila menyahpepijat kod, jangan gunakan semua data dahulu, gunakan demo dahulu, jika tidak, anda perlu menunggu sehari atau membeli kuota.
Data sudah sedia, kini 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
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')
Daripada hasil anotasi, kolej dan universiti terutamanya diedarkan di sepanjang pantai, kawasan tengah dan timur, dengan agak sedikit di barat, terutamanya di kawasan altitud tinggi.
2 Lukiskan peta haba bagi taburan kolej dan 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')
Daripada Melihat peta haba, tempat di mana universiti lebih tertumpu terutamanya di sepanjang pantai, Beijing, Shanghai, Guangzhou, dan lembangan Yangtze dan Sungai Kuning, manakala Sichuan dan Chongqing adalah satu-satunya tempat yang mempunyai lebih banyak universiti di barat.
3 Lukiskan peta ketumpatan taburan mengikut wilayah
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")
Seperti yang dapat dilihat daripada peta kepadatan taburan wilayah, wilayah yang mempunyai bilangan universiti yang besar tertumpu di bahagian tengah dan timur negara, terutamanya wilayah berhampiran Beijing dan Shanghai.
4.Pengagihan 211 dan 985 kolej dan universiti
Tapis data 211 dan 985 kolej dan universiti dan lukiskannya semula. (Kod tidak perlu ditampal berulang kali, cuma tambah baris kod penapisan)
The di atas adalah keseluruhan kandungan artikel.
Atas ialah kandungan terperinci Gunakan Python untuk memaparkan pengedaran kolej dan universiti di seluruh negara. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!