Maison > Article > développement back-end > Comment utiliser Python pour afficher la répartition des collèges et universités à travers le pays
Pour montrer la répartition des collèges et universités, vous devez d'abord obtenir les données de localisation des collèges et universités à travers le pays. Les données de cet article proviennent du Palm College Entry Examination Network
Lorsque cet article a été rédigé en juin 2022, un total de 2 822 informations sur les collèges et universités ont été obtenues. Après vérification des données, à l'exception de quelques valeurs nulles, l'ensemble des données est très complet et n'affecte pas l'utilisation. Les données comportent un total de 44 champs. Cet article n'utilisera que quelques champs. Ils n'ont pas besoin d'être traités et peuvent être obtenus sur demande lors de leur utilisation.
Introduction aux méthodes d'acquisition de données (connaissances de base des robots) :
1 Inscrivez-vous et connectez-vous au réseau d'examen d'entrée au Palm College. Sélectionnez toutes les écoles sur la page
2. Appuyez sur la touche F12, cliquez sur Réseau > Récupérer/XHR, puis cliquez plusieurs fois sur les boutons
3. Copiez l'API à chaque fois que vous tournez la page pour comparaison. On constate qu'il y a deux paramètres qui changent lorsque vous tournez la page : page et signsafe La page est le nombre de pages actuellement consultées. et ne peut pas être inversé. Solution, mais vous pouvez enregistrer les valeurs précédentes et les utiliser de manière aléatoire plus tard. Avec ces informations, en modifiant constamment le nombre de pages visitées et la valeur signsafe, toutes les données scolaires peuvent être obtenues.
La valeur du paramètre numFound dans la réponse est le nombre total d'écoles. Divisez par le nombre d'écoles affichées sur chaque page pour obtenir le nombre total de pages. Vous pouvez également cliquer directement sur la
4. Parce que le site Web doit être connecté pour être utilisé, il est également nécessaire d'obtenir les en-têtes lors de l'accès, tels que la méthode de requête (POST est utilisé cette fois), l'agent utilisateur, etc.
5. Avec les informations ci-dessus, bouclez les URL de toutes les pages, utilisez des requêtes pour envoyer une requête afin d'obtenir les données de toutes les universités, puis utilisez des pandas pour écrire les données dans Excel.
Rappel chaleureux : lors de l'obtention de données, vous devez vous conformer aux déclarations pertinentes du site Web. Essayez de définir un certain intervalle de temps pour le code du robot d'exploration pendant les périodes de pointe d'accès.
Le Palm College Entry Examination Network est un site Web de services bénévoles pour l'examen d'entrée à l'université. Bien que les données obtenues comportent 44 champs, elles ne contiennent pas la latitude et la longitude de l'école. Afin de mieux afficher l'emplacement des collèges et universités sur la carte, il est nécessaire d'obtenir la longitude et la latitude correspondantes en fonction de l'adresse de l'école.
Cet article utilise la plateforme ouverte Baidu Map : https://lbsyun.baidu.com/apiconsole/center#/home Vous pouvez utiliser l'interface ouverte de Baidu Map pour obtenir la longitude et la latitude de l'emplacement géographique.
Les étapes sont les suivantes :
1. Inscrivez-vous et connectez-vous à un compte Baidu. Ce compte peut être un compte commun à l'ensemble de l'écosystème Baidu (comme les comptes pour les disques réseau, Wenku, etc. sont courants).
2. Connectez-vous à Baidu Map Open Platform, cliquez pour accéder au
3. Après avoir créé l'application, vous obtiendrez le
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. Après avoir appelé avec succès l'API Baidu Map, lisez les emplacements de toutes les universités, appelez la fonction ci-dessus dans l'ordre, obtenez la longitude et la latitude de toutes les universités et réécrivez-la dans 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')
Le résultat final des données est le suivant :
Les développeurs individuels doivent faire attention lorsqu'ils utilisent la plate-forme ouverte Baidu Map. Il y a une limite de quota quotidien, donc lors du débogage du code, n'utilisez pas toutes les données. Tout d'abord, parcourez-le avec la démo, sinon vous devez attendre un jour ou le montant de l'achat.
Les données sont prêtes, affichons-les sur la carte.
Cet article utilise l'outil de visualisation de données open source de Baidu, Echarts, qui fournit la bibliothèque pyecharts pour le langage Python, qui est très pratique à utiliser.
Commande d'installation :
pip install pyecharts
1. Marquez l'emplacement des collèges et universités
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')
D'après les résultats de l'annotation, les collèges et universités sont principalement répartis le long de la côte, dans les zones centrales et orientales, et relativement peu le sont. situé à l'ouest, notamment dans les zones de haute altitude.
2. Dessinez une carte thermique de la répartition des collèges et universités
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')
À partir de la carte thermique, les endroits où les collèges et universités sont plus concentrés sont principalement les zones côtières, le nord, Shanghai, Guangzhou, et les bassins du Yangtsé et du fleuve Jaune, tandis que le Sichuan et Chongqing sont les seuls endroits avec plus de places à l'ouest.
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的高校数据,再绘制一次。(代码不重复粘贴,只需要加一行筛选代码即可)
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!