Erasmus pro předškolní vzdělávání

Analýza dostupnosti mateřských škol v příhraničních oblastech v Česku, Rakousku a Německu

Téma a cíle projektu

S tématem na projekt přišla Helča, která má zkušenost se sháněním míst pro české děti v německy mluvících školkách. Na začátku jsme chtěly zmapovat právě tato vyhrazená místa pro děti z ČR ve školkách v Německu či Rakousku a zjistit, jestli i v Česku nenabízí některé školky místa pro děti ze sousední země. Při shánění dat jsme ale tvrdě narazily, nebyla souhrnně vůbec dostupná. Na chvíli jsme se začaly věnovat i jinému tématu projektu, avšak nakonec jsme se k analýze školek opět vrátily s novou vizí.

Sběr a příprava dat

Vzhledem k tomu, že Lenka neumí německy a Helča je naopak vystudovaná učitelka němčiny, bylo rozdělení toho, kdo zkusí získat jaká data, jasné.

Práce s daty

Jako první úkol jsme si stanovily spočítat vzdálenost jednotlivých školek od hranic. Možností jak souřadnice vygenerovat se nabízelo několik a jelikož se nám oběma líbilo od počátku programování v Pythonu, zvolili jsme právě jeho. Náš mentor Karel Minichbauer nám pomohl s nalezením a nastavením modulu Geopy.geocoders a následně napsáním skriptu v Pythonu, který uměl vygenerovat z adresy souřadnice GPS. Adresy jednotlivých školek byly ale pro každou zemi v jiném formátu a ne vždy si s ním uměl náš skript poradit, proto jsme musely skript upravovat pro každou sadu dat tak, aby generování GPS souřadnic bylo funkční. Skript jsme nastavily zároveň tak, že školky, u nichž se podařilo souřadnice vygenerovat, se ukládaly do jednoho souboru a školky, u nichž ne, do jiného. Adresy z něj jsme pak následně ještě upravily pro využití v nástroji https://www.gpsvisualizer.com/geocoder/, který nám doporučil Jirka Pešík a získaly tak další údaje o zeměpisné délce a šířce. Tyto původně nepovedené adresy jsme připsaly k již dříve vygenerovaným souřadnicím. Vše opět pomocí skriptů v Pythonu.

# import modulu geopy 
from geopy.geocoders import Nominatim

# načtení the Nominatim tool
loc = Nominatim(user_agent="GetLoc")

# otevření souboru
with open('seznam_skolky_Bavorsko.csv', encoding='utf-8') as vstup:
radky = vstup.readlines()

# vytvoření seznamu z jednoho řádku
jeden_radek = [radek.split('\n') for radek in radky]

# proměnné pro ukládání
nepovedene = []
povedene = []

# generování souřadnic - povedené se ukládají do jednoho souboru a nepovedené do jiného
for cast_radku in jeden_radek[1:]:
try:
# rozdělení řádku na jednotlivé údaje
cast = cast_radku[0].split(";")

# načtení adresy
adresa = cast[7] + ', ' + cast[9]
getLoc = loc.geocode(adresa)

# vypsání adresy a souřadnic (pouze pro kontrolu, že se generují)
print(getLoc.address)
print("Latitude = ", getLoc.latitude, "\n")
print("Longitude = ", getLoc.longitude)

# uložení potřebných údajů do proměnné povedené
data = ""
nazev = cast[2] + ' ' + cast[3]
skolka = nazev + ";" + adresa + ";" + cast[14] + ";" + cast[12] + ";" + cast[16]
data+=skolka
povedene.append(skolka + ";" + str(getLoc.latitude) + ";" + str(getLoc.longitude) + "\n")
except Exception as chyba:
# uložení potřebných údajů do proměnné nepovedené
data_nepov = ""
skolka_nepov = nazev + ";" + adresa + ';' + cast[14] + ";" + cast[12] + ";" + cast[16]
data_nepov+=skolka_nepov
nepovedene.append(data_nepov + ";" +"\n")
pass

# vložení hlavičky u povedených
hlavicka = "NAZEV" + ";" + "ADRESA" + ";" + "KAPACITA" + ";" + "WEB" + ";" + "AKTUALNI_OBSAZENOST" + ";" + "LATITUDE" + ";" + "LONGITUDE" + "\n"
povedene.insert(0,hlavicka)
#print(povedene)

# uložení povedených do souboru
with open("DE_Bavorsko_povedene_MS.csv", "w", encoding="utf-8") as vystup:
vystup.writelines(povedene)

# uložení nepovedených do souboru
with open("DE_Bavorsko_nepovedene.csv", "w", encoding="utf-8") as soubor:
soubor.writelines(nepovedene)
CREATE OR REPLACE TABLE "MS_DE_Bav_vzdalenosti" AS
SELECT 'Německo' AS STAT
,MS.NAZEV
,MS.ADRESA
,MS.KAPACITA
,MS.WEB
,MS.AKTUALNI_OBSAZENOST
,MS.LATITUDE
,MS.LONGITUDE
,MIN(ROUND(HAVERSINE(HP.LATITUDE,HP.LONGITUDE,MS.LATITUDE,MS.LONGITUDE))) AS VZDALENOST_OD_HRANIC
FROM "MS_DE_BAV_2" AS MS
CROSS JOIN "souradnice_HP" AS HP
GROUP BY MS.NAZEV, MS.ADRESA, MS.KAPACITA, MS.WEB, MS.AKTUALNI_OBSAZENOST, MS.LATITUDE, MS.LONGITUDE
HAVING VZDALENOST_OD_HRANIC < 50
;
import pandas as pd
import statsmodels.formula.api as smf
import statsmodels.api as sm
from statsmodels.formula.api import ols
import seaborn
import matplotlib.pyplot as plt
import numpy as np

#vykresleni grafu zavislosti obsazenosti skolek na porodnosti
df = pd.read_csv("regrese_AT.csv")
df["narozene_deti"] = df["2016"] + df["2017"] + df["2018"] + df["2019"]
X=df[['2016', '2017', '2018', '2019']]
g = seaborn.JointGrid(data=df, x="narozene_deti", y="OBSAZENOST")
g.plot_joint(seaborn.scatterplot, legend=False)
plt.show()

df = pd.read_csv("regrese_AT.csv")

#do osy X vstupuji pocty narozenych deti, ktere v roce 2021 mohou navstevovat skolku
#model vyhodnoti, v jake mire se tyto rocniky podileji na obszenosti
df["total"] = df["2015"] + df["2016"] + df["2017"] + df["2018"] + df["2019"]
print(df.head())
X=df[['2015','2016', '2017', '2018', '2019']]
Y=df["OBSAZENOST"]

model=sm.OLS(Y,X).fit()
print(model.summary())
#lze otestovat i RLM: model=sm.RLM(Y,X).fit()

#test predikce na stavajicich datech
predictions=model.predict(X)
print(predictions)

#predikce pro rok 2023
df1 = pd.read_csv("regrese_AT.csv")
df1["total"]= df1["2017"] + df1["2018"] + df1["2019"] + df1["2020"] + df1["2021"]
X1=df1[['2017','2018', '2019', '2020', '2021']]
predictions=model.predict(X1)
print(predictions)

Výstupy projektu

Pro vizualizaci dat jsme si zvolily Tableau. Celý výstup je dostupný na Tableau Public zde.

Další směřování projektu

V rámci projektu jsme se věnovaly ze sousedních zemí pouze Rakousku a Německu. Z pohledu českých rodičů nám přišla atraktivní především možnost naučit děti nenásilnou formou němčinu. Projekt by se dal rozšířit i na polské a slovenské příhraniční oblasti. V tomto poslední jmenovaném případě by pak mohla být přínosnost především v praktičnosti pro rodiče, kdy pro ně slovenská školka může být dostupnější (dopravně nebo i kapacitně) než ta česká.

Rozdělení práce na projektu

Helena Svobodová

Zdroje informací a dat

Poděkování

Rády bychom poděkovaly našemu mentorovi Karlu Minichbauerovi za konzultace v průběhu celého projektu a lektorovi Jiřímu Pešíkovi za konzultaci při práci na lineární regresi. V neposlední řadě chceme poděkovat také našim rodinám, že s námi v období realizace projektu měli trpělivost a podporovali nás.

--

--

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store