Rumah >pembangunan bahagian belakang >Tutorial Python >Cara menggunakan Python untuk memaparkan pengedaran kolej dan universiti di seluruh negara
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.
Pengenalan kepada kaedah pemerolehan data (pengetahuan asas crawler):
1 Rangkaian. Pilih semua sekolah pada halaman
2. Tekan kekunci F12, klik Rangkaian > dan kemudian klik
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
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.
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
3. Selepas membuat aplikasi, anda akan mendapat aplikasi
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:
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.
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')
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')
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")
从省级分布密度图可以看出,高校数量多的省份集中在中部和东部,尤其是北京和上海附近的几个省。
4.211和985高校的分布情况
筛选出211和985的高校数据,再绘制一次。(代码不重复粘贴,只需要加一行筛选代码即可)
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!