Maison > Article > développement back-end > Utilisez 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 (https://www.gaokao.cn/school/search).
Lors de la rédaction de cet article en juin 2022, un total de 2822 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 du robot d'exploration) :
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 et de la page . L'API consultée et d'autres informations seront affichées sur la page XHR.
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 visitées. signsafe est une valeur md5, ne peut pas être résolu de manière inverse, 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
Response est le nombre total d'écoles divisé par le nombre d'écoles affichées sur chaque page pour obtenir le nombre total de pages. Vous pouvez également cliquer directement sur sur la page pour afficher le nombre total d'écoles. pages, déterminant ainsi le nombre de visites.
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 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 des 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.
Explication supplémentaire :
La dernière annonce du Quotidien du Peuple : le nombre de collèges et d'universités d'enseignement général dans le pays est de 2759, soit 63 de différence par rapport aux 2822 obtenus sur le site Web de l'examen mobile d'entrée à l'université dans cet article Cela est principalement dû aux différences entre les méthodes statistiques des branches de certaines écoles. Ce que montre cet article, c'est la distribution, et cette différence a peu d'impact.
Le Palm College Entry Examination Network est un site Web permettant de remplir les services bénévoles pour l'examen d'entrée à l'université. Bien que les données obtenues comportent 44 champs, c'est le cas. ne contient 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 la. situation géographique.
Les étapes sont :
1. Inscrivez-vous et connectez-vous à un compte Baidu. Ce compte peut être un compte commun pour l'ensemble de l'écosystème Baidu (tels que les comptes pour les disques réseau, Wenku, etc. sont courants).
2. Connectez-vous à Baidu Map Open Platform, cliquez pour entrer , puis cliquez sur dans , puis cliquez sur pour créer une application. Personnalisez le nom de l'application, remplissez d'autres informations lorsque vous y êtes invité et requis, et soumettez-vous à une authentification par nom réel pour devenir un développeur individuel.
3. Après avoir créé l'application, vous obtiendrez le d'une application. Vous pouvez utiliser cette valeur AK pour appeler l'API de Baidu.
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 existe une limite de quota quotidien, donc lors du débogage du code, ne le faites pas. utilisez d'abord toutes les données, exécutez-les d'abord via la démo, sinon vous devrez attendre un jour ou acheter le montant.
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. Echarts fournit la bibliothèque pyecharts pour le langage Python, qui est très pratique à utiliser. 1. Marquez l'emplacement des collèges et universités côtière, les zones centrales et orientales, en particulier à l'ouest. Il existe relativement peu de zones d'altitude.
pip install pyecharts
À partir de la carte thermique, les endroits où les collèges et universités sont plus concentrés se trouvent principalement le long de la côte, au nord et à Shanghai. , Guangzhou et les bassins du Yangtze et du fleuve Jaune sont le seul endroit où il y a plus d'endroits à l'ouest.
3. Dessinez une carte de densité de répartition par province
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')
On peut voir sur la carte de densité de répartition provinciale que les provinces avec un grand nombre d'universités sont concentrées dans le centre et parties orientales du pays, en particulier dans les régions centrales et orientales du pays, dans plusieurs provinces proches de Pékin et de Shanghai.
4. La répartition de 211 et 985 collèges et universités
Ce qui précède représente l'intégralité du contenu de cet article.
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!