Grundlagen von Python x GIS (Teil 2)

Der erste ist hier Teil 3 ist hier Lehrmaterialien der Universität Helsinki Wir werden die Antworten und Ergänzungen für Woche 3 bis Woche 4 zusammenfassen.

Week3

3-1 Geokodierung von Einkaufszentren

Ziel ist es, die Einwohnerzahl von 1,5 km in der Nähe eines großen Einkaufszentrums in Helsinki zu ermitteln, dh die Bevölkerung des Gewerbegebiets. Sie müssen das Internet selbst durchsuchen, um die Adresse des Einkaufszentrums herauszufinden. Einführung der Geokodierung zum Konvertieren von Adressen in Koordinaten. In Japan wird von der Universität Tokio ein CSV-Adressabgleichsdienst angeboten > Ist berühmt. Darüber hinaus werden QGIS bekannte Vorgänge wie Pufferung und räumliche Kopplung angezeigt.

import geopandas as gpd
import pandas as pd
import matplotlib.pyplot as plt
import requests
import geojson
from shapely.geometry import Polygon, LineString, Point
from pyproj import CRS
import os

#Daten gelesen
data = pd.read_table('shopping_centers.txt', sep=';', header=None)
data.index.name = 'id'
data.columns=['name', 'addr']
#Geokodierung
geo = geocode(data['addr'], provider='nominatim', user_agent='autogis_xx', timeout=4)
#Daten kombinieren
geo = geo.to_crs(CRS.from_epsg(3879))
geodata = geo.join(data)

#Pufferung
geodata['buffer']=None
geodata['buffer'] = geodata['geometry'].buffer(distance=1500)
geodata['geometry'] = geodata['buffer']

#Erfassung von Bevölkerungsnetzdaten
url = 'https://kartta.hsy.fi/geoserver/wfs'
params = dict(service='WFS',version='2.0.0',request='GetFeature',
              typeName='asuminen_ja_maankaytto:Vaestotietoruudukko_2018',outputFormat='json')
r = requests.get(url, params=params)
pop = gpd.GeoDataFrame.from_features(geojson.loads(r.content))

#Systemkonvertierung koordinieren
pop = pop[['geometry', 'asukkaita']]
pop.crs = CRS.from_epsg(3879).to_wkt()
geodata = geodata.to_crs(pop.crs)

#Räumliche Kopplung
join = gpd.sjoin(geodata, pop, how="inner", op="intersects")
#Berechnung der Handelsflächenbevölkerung
grouped = join.groupby('name')
for key, group in grouped:
    print('store: ', key,"\n", 'population:', sum(group['asukkaita']))

3-2 Nächstes Einkaufszentrum

Finden Sie das nächste Einkaufszentrum von zu Hause und von der Arbeit aus. Wenn Sie nicht in Finnland leben, geben Sie einen geeigneten Ort in Helsinki als Basisadresse an. (Der Import der Bibliothek wird unten weggelassen.)

#Daten lesen
home = pd.read_table('activity_locations.txt', sep=';', header=None)
home.index.name='id'
home.columns = ['name', 'addr']
shop = pd.read_table('shopping_centers.txt', sep=';', header=None)
shop.index.name = 'id'
shop.columns=['name', 'addr']
#Geokodierung
geo_home = geocode(home['addr'], provider='nominatim', user_agent='autogis_xx', timeout=4)
geo_shop = geocode(shop['addr'], provider='nominatim', user_agent='autogis_xx', timeout=4)
#Ich suche das nächste Geschäft
destinations = MultiPoint(list(geo_shop['geometry']))
for home in geo_home['geometry']:
    nearest_geoms = nearest_points(home, destinations)
    print(nearest_geoms[1])

Week4

4-1 Visualisierung von Eingabehilfen

Visualisieren Sie die Barrierefreiheit, indem Sie Reisezeitdaten und U-Bahn-Netzwerkdaten kombinieren.

#Daten lesen
grid = gpd.read_file('data/MetropAccess_YKR_grid_EurefFIN.shp')
data = pd.read_table('data/TravelTimes_to_5944003_Itis.txt', sep=';')
data = data[["pt_r_t", "car_r_t", "from_id", "to_id"]]
#Datenverbindung
data_geo = grid.merge(data, left_on='YKR_ID', right_on='from_id')
#Ungültige Daten(-1)Ausschluss
import numpy as np
data_geo = data_geo.replace(-1, np.nan)
data_geo = data_geo.dropna()
#Datenebenen
import mapclassify
bins = [15, 30, 45, 60, 75, 90, 105, 120, 135, 150, 165, 180]
classifier = mapclassify.UserDefined.make(bins = bins)
data_geo['pt_r_t_cl'] = data_geo[['pt_r_t']].apply(classifier)
data_geo['car_r_t_cl'] = data_geo[['car_r_t']].apply(classifier)

#Visualisierung
fig = plt.figure(figsize=(10,10))
ax1 = fig.add_subplot(1, 2, 1)  #Öffentliche Verkehrsmittel
data_geo.plot(ax=ax1, column='pt_r_t_cl')
ax1.set_title("Itis-Travel times by PT")
ax2 = fig.add_subplot(1, 2, 2)  #Privatwagen
data_geo.plot(ax=ax2, column='car_r_t_cl')
ax2.set_title("Itis-Travel times by Car")
plt.tight_layout()
plt.show()
fig.savefig('itis_accessibility.png')

Es wird so angezeigt.

4-2 Einflussbereich des Einkaufszentrums

Basierend auf den in 4-1 erhaltenen Daten zur Barrierefreiheit möchten wir die Stromzone visualisieren, indem wir das nächste Einkaufszentrum in jedem Netz finden.

#Daten lesen
filepaths = glob.glob('data/TravelTimes*.txt')
for path in filepaths:
    data = pd.read_table(path, sep=';')
    data = data[['from_id', 'pt_r_t']]
    data = data.rename(columns={'from_id':'YKR_ID'})
    #Spaltenname'pt_r_t_{store}'ändern
    newname = path.replace('data/TravelTimes_to_', '')
    newname = newname.replace('.txt', '')
    newname = re.sub('\d{7}_', '', newname)
    data = data.rename(columns={'pt_r_t':'pt_r_t_'+newname})
    grid = grid.merge(data) #Daten kombinieren
grid = gpd.read_file('data/MetropAccess_YKR_grid_EurefFIN.shp')

#Ungültige Daten(-1)Ausschluss
import numpy as np
grid = grid.replace(-1, np.nan)
grid = grid.dropna()
#Kürzeste Entfernung zum Einkaufszentrum jedes Gitters ・ Name des Einkaufszentrums
grid['min_t'] = None
grid['dominant_service'] = None
columns = ['pt_r_t_Ruoholahti', 'pt_r_t_Myyrmanni','pt_r_t_Itis', 'pt_r_t_Jumbo', 'pt_r_t_IsoOmena', 'pt_r_t_Dixi','pt_r_t_Forum']
mini = lambda row:row[columns].min()
idx = lambda row:row[columns].astype(float).idxmin()
grid['min_t'] = grid.apply(mini, axis=1)
grid['dominant_service'] = grid.apply(idx, axis=1)

dominant_area.png

4-3 Bevölkerung von Einkaufszentren

Es ist eine solide Sache, die Gitterdaten mit Auflösen zu aggregieren und die Population in der Kugel am Schnittpunkt zu finden. Der Teil, der sich mit 4-2 überschneidet, wird weggelassen.

#4-Machen Sie Schritt 2,Erstellen Sie Pop-Daten einschließlich Kugeln

#Auflösen und schneiden
dissolved = grid.dissolve(by = 'dominant_service')
pop = pop[['geometry', 'asukkaita']] #Beschränkt auf notwendige Daten
intersection = gpd.overlay(grid, pop, how='intersection')

#Gruppieren Sie nach Kugel, um die Kugelpopulation zu finden
grouped = intersection.groupby('dominant_service')
for key, group in grouped:
    print(key, ':', sum(group['asukkaita']))

Recommended Posts

Python x GIS-Grundlagen (3)
Grundlagen von Python x GIS (Teil 2)
Python x GIS-Grundlagen (1)
Python-Grundlagen ①
Grundlagen von Python ①
Grundlagen der Python-Scraping-Grundlagen
# 4 [Python] Grundlagen der Funktionen
Grundlagen von Python: Ausgabe
Python: Grundlagen der Verwendung von Scikit-Learn ①
2.x, 3.x Serienzeichencode von Python
Python-Grundlagen ⑤
Paiza Python Primer 5: Grundlagen von Wörterbüchern
[Für Anfänger] Grundlagen von Python erklärt durch Java Gold Teil 2
Python-Grundlagen ④
Erste Schritte mit Python Grundlagen von Python
Python-Grundlagen ③
Python-Grundlagen
Python-Grundlagen
Python-Grundlagen
Python-Grundlagen ③
Python-Grundlagen ②
Python-Grundlagen ②
[Für Anfänger] Grundlagen von Python erklärt durch Java Gold Teil 1
Informationen zur Grundlagenliste der Python-Grundlagen
Lernen Sie die Grundlagen von Python ① Grundlegende Anfänger
[Algorithmus x Python] Berechnung der Basisstatistik Teil2 (Mittelwert, Median, am häufigsten)
Grundlagen der binärisierten Bildverarbeitung durch Python
Python: Grundlagen der Bilderkennung mit CNN
[Lernnotiz] Grundlagen des Unterrichts mit Python
[Python3] Verstehe die Grundlagen von Beautiful Soup
Ich kannte die Grundlagen von Python nicht
[Grundlagen der Python-Grundlagen] Warum __name__ == "__main__"
[Python] Kapitel 02-04 Grundlagen des Python-Programms (Informationen zu Kommentaren)
[Python] Kapitel 02-03 Grundlagen von Python-Programmen (Eingabe / Ausgabe)
[Einführung in Data Scientist] Grundlagen von Python ♬
[Python3] Grundlegendes zu Dateivorgängen
QGIS + Python Teil 2
Python-Grundlagen: Liste
Python-Grundmemorandum
QGIS + Python Teil 1
# Python-Grundlagen (#matplotlib)
Python-Grundlagen: Wörterbuch
Python Slice Grundlagen
# Python-Grundlagen (Umfang)
# Python-Grundlagen (#Numpy 1/2)
Kopie von Python
Python: Scraping Teil 1
Grundlagen des Python-Arrays
Grundlagen der Python-Profilerstellung
Python #Numpy Basics
Python-Grundlagen: Funktionen
# Python-Grundlagen (Klasse)
Zusammenfassung der Python-Grundlagen
Lösung Wenn Sie Python 3.6 oder höher verwenden, benötigen Sie die enum34-Bibliothek ebenfalls nicht. Deinstallieren Sie sie daher und verwenden Sie das Standard-Enum-Modul. Enum34 deinstallieren Führen Sie nach der Deinstallation von enum34 erneut `pip install optuna` aus und Sie haben Optuna erfolgreich installiert! Python, pip, Python3, enum, OptunaPython3 Beginn Teil 1
Python: Scraping Teil 2
Einführung von Python
Grundlagen des Lernens mit einem Lehrer Teil 1 - Einfache Regression - (Hinweis)
[Cx_Oracle Primer] (Teil 3) Grundlagen zum Durchsuchen von Tabellen
[Python of Hikari-] Kapitel 05-06 Steuerungssyntax (Grundlagen der Einschlussnotation)
EV3 x Python Maschinelles Lernen Teil 2 Lineare Regression