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
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']))
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
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.
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)
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