Principes de base de Python x SIG (3)

Le premier est ici La partie 2 est ici Matériel pédagogique de l'Université d'Helsinki Nous résumerons les réponses et les suppléments pour la semaine 5-semaine 6.

Week5

5-1 Créer une carte statique

Au cours de la semaine 5, le cahier d'origine n'existe pas et vous devrez lire le README sur Github, sélectionner vous-même le matériel approprié et visualiser la carte.

5-2 Créer une carte dynamique

Week6

6-1 Devinez l'emplacement du magasin

Dans la première moitié de la semaine 6, nous utiliserons OSM (Open Street Map) pour estimer les points de départ et d'arrivée des données de mouvement fournies à l'avance. La bibliothèque mplleaflet vous permet de tracer des figures créées avec matplotlib sur une carte interactive. (Pour mplleaflet, voir Cet article .) Mplleaflet ne peut pas enregistrer d'images par lui-même. Il est nécessaire de sauvegarder l'image à l'aide d'une capture d'écran ou autre.

#Lire les données
origin = pd.read_csv('data/origins.csv') #Point de départ
dest = pd.read_csv('data/destinations.csv') #Lieu d'arrivée
#Montrer du doigt
make_point = lambda row:Point(row['x'], row['y'])
origin['geometry'] = origin.apply(make_point, axis=1)
dest['geometry'] = dest.apply(make_point, axis=1)
origin_geo = gpd.GeoDataFrame(origin, geometry='geometry')
dest_geo = gpd.GeoDataFrame(dest, geometry='geometry')
#Définition et transformation du système de coordonnées
rigin_geo.crs = CRS.from_epsg(3857)
dest_geo.crs = CRS.from_epsg(3857)
origin_geo = origin_geo.to_crs(CRS.from_epsg(3857))
dest_geo = dest_geo.to_crs(CRS.from_epsg(3857))
#terrain
fig, ax = plt.subplots(figsize=(12,8))
origin_geo.plot(ax=ax)
dest_geo.plot(ax=ax)
mplleaflet.show() #Combiner avec la carte

Vous pouvez voir que les points sont regroupés près de Tarin, la capitale de l'Estonie. Vérifions par géocodage.

6-2 Analyse du réseau de Tarin

Le but est de trouver l'itinéraire / distance entre le point de départ et le point d'arrivée obtenu en 6-1. (1) Conversion en un graphique en utilisant la bibliothèque ʻosmxbasée sur les données routières OSM ② Approcher le point de départ / magasin d'arrivée au nœud le plus proche dans le graphique ③ Créez la route la plus courte entre les nœuds avecnetworkx` et trouvez sa longueur Travaillez dans cet ordre.

#Créer un package convexe qui comprend tous les points
merged = pd.concat([origin, dest])
make_p = lambda row: (row['geometry'].x, row['geometry'].y)
merged['p'] = merged.apply(make_p, axis=1)
list_point = merged['p'].values.tolist()
multi = MultiPoint(list_point)
extent = multi.convex_hull
#Extraction de graphes
import osmnx as ox
graph = ox.graph_from_polygon(extent, network_type='drive')
#Créer des nœuds et des liens à partir de graphiques
nodes_proj, edges_proj = ox.graph_to_gdfs(graph_proj, nodes=True, edges=True)
#Point approximatif au nœud
graph_proj = ox.project_graph(graph)
orig_nodes = []
for orig in origin_geo['geometry']:
    orig_xy = (orig.y, orig.x)
    orig_node = ox.get_nearest_node(graph, orig_xy)
    orig_nodes.append(orig_node)
dest_nodes = []
for des in dest_geo['geometry']:
    dest_xy = (des.y, des.x)
    dest_node = ox.get_nearest_node(graph, dest_xy)
    dest_nodes.append(dest_node)
#Créer un chemin minimum
route_lines = []
route_lengths=[]
for i in orig_nodes:
    for j in dest_nodes:
        if i==j: #Exclus si les points de départ et d'arrivée sont proches du même point
            continue
        route = nx.shortest_path(G=graph, source=i, target=j, weight='length')
        route_nodes = nodes_proj.loc[route]
        route_line = LineString(list(route_nodes.geometry.values))
        route_lines.append(route_line)
        route_lengths.append(route_line.length)
route_geom = pd.DataFrame([route_lines, route_lengths]).T
route_geom.columns = ['geometry', 'route_dist']
route_geom = gpd.GeoDataFrame(route_geom,geometry='geometry', crs=edges_proj.crs)
#Distance la plus courte et la plus longue distance
mini = route_geom['route_dist'].min()
maxx = route_geom['route_dist'].max()
#Visualisation
fig, ax = plt.subplots(figsize=(12,8))
route_geom.plot(ax=ax, color='red')
edges_proj.plot(ax=ax, color='gray', alpha=0.5, linewidth=0.7)
fig.savefig('network.png')

network.png Si vous peignez tous les itinéraires, cela ressemblera à la figure ci-dessus. Pour l'analyse de réseau, il semble que vous puissiez essayer diverses choses en utilisant Python plutôt qu'en utilisant le SIG.

Recommended Posts

Principes de base de Python x SIG (3)
Principes de base de Python x SIG (partie 2)
Principes de base de Python x SIG (1)
Les bases de Python ①
Bases de python ①
Principes de base du grattage Python
# 4 [python] Bases des fonctions
Bases de python: sortie
python: principes de base de l'utilisation de scikit-learn ①
2.x, 3.x code de caractères des séries python
Les bases de Python ⑤
Paiza Python Primer 5: Principes de base des dictionnaires
[Pour les débutants] Les bases de Python expliquées par Java Gold Part 2
Les bases de Python
Les bases de Python ④
Premiers pas avec Python Bases de Python
Les bases de Python ③
Les bases de Python
Revue des bases de Python (FizzBuzz)
Les bases de Python
Les bases de Python
Les bases de Python ③
Les bases de Python ②
Les bases de Python ②
[Pour les débutants] Les bases de Python expliquées par Java Gold Part 1
À propos de la liste de base des bases de Python
Apprenez les bases de Python ① Débutants élémentaires
[Algorithme x Python] Calcul des statistiques de base Partie 2 (moyenne, médiane, la plus fréquente)
Bases du traitement d'images binarisées par Python
Python: principes de base de la reconnaissance d'image à l'aide de CNN
[Mémo d'apprentissage] Bases de la classe par python
[Python3] Comprendre les bases de Beautiful Soup
Je ne connaissais pas les bases de Python
Principes de base pour exécuter NoxPlayer en Python
[Principes de base de Python] Pourquoi __name__ == "__main__"
[Python] Chapitre 02-04 Bases du programme Python (À propos des commentaires)
[Python] Chapitre 02-03 Bases des programmes Python (entrée / sortie)
[Introduction au Data Scientist] Bases de Python ♬
[Python3] Comprendre les bases des opérations sur les fichiers
QGIS + Python Partie 2
bases de python: liste
Mémorandum de base Python
QGIS + Python Partie 1
Les bases de #Python (#matplotlib)
Principes de base de Python CGI
bases de python: dictionnaire
bases de la tranche de python
# Principes de base de Python (portée)
Les bases de #Python (#Numpy 1/2)
Copie de python
Les bases de #Python (#Numpy 2/2)
# Bases de Python (fonctions)
Python: grattage partie 1
principes de base des tableaux python
Principes de base du profilage Python
Principes de base de Python #Numpy
bases de python: fonctions
Les bases de #Python (classe)
Résumé des bases de Python