import tempfile
import pandas as pd
import geopandas as gpd
import pyogrio
import httpxwith tempfile.TemporaryDirectory() as tmpdirname:
    with open(tmpdirname + "/data.csv", "wb") as f:
        r = httpx.get("https://www.czso.cz/documents/62353418/205988586/sldb2021_vzdelani_vek2_pohlavi.csv/5d7a6d5c-a7b1-468f-aa48-80560fbce267?version=1.1")
        f.write(r.content)
    edu_age_sex = pd.read_csv(tmpdirname + "/data.csv")edu_age_sex["pohlavi_txt"] = edu_age_sex["pohlavi_txt"].fillna("both")obce = edu_age_sex[edu_age_sex.uzemi_typ == "obec"]vals = obce.set_index(["uzemi_kod", "vzdelani_txt", "vek_txt", "pohlavi_txt"])["hodnota"]
valsuzemi_kod  vzdelani_txt  vek_txt        pohlavi_txt
500011     Bez vzdělání  15 - 64 let    both            6
                                        muž             4
                                        žena            2
                         65 a více let  both            3
                                        muž             2
                                                       ..
599999     Nezjištěno    15 - 64 let    muž            38
                                        žena           13
                         65 a více let  both           21
                                        muž            10
                                        žena           11
Name: hodnota, Length: 525336, dtype: int64total_population = vals[:, :, :, "both"].groupby(level=0).sum()
by_edu = vals[:, :, :, "both"].groupby(level=[0, 1]).sum().unstack()proportions = by_edu.div(total_population, axis=0) * 100uzsz_url = "https://vdp.cuzk.cz/vymenny_format/soucasna/20230930_ST_UZSZ.xml.zip"pyogrio.list_layers(uzsz_url)array([['Staty', 'Point'],
       ['RegionySoudrznosti', 'Point'],
       ['Kraje', 'Point'],
       ['Vusc', 'Point'],
       ['Okresy', 'Point'],
       ['Orp', 'MultiPoint'],
       ['Pou', 'MultiPoint'],
       ['Obce', 'MultiPoint'],
       ['SpravniObvody', 'Point'],
       ['Mop', 'Point'],
       ['Momc', 'Point'],
       ['CastiObci', 'Point'],
       ['KatastralniUzemi', 'MultiPoint'],
       ['Zsj', 'MultiPoint']], dtype=object)obce = gpd.read_file(uzsz_url, layer="Obce")obec_to_okres = obce.set_index("Kod")["OkresKod"].rename_axis(index="uzemi_kod")
obec_to_okresuzemi_kod
569151    3601.0
569291    3601.0
569330    3811.0
569402    3601.0
569615    3601.0
           ...  
551503    3301.0
530166    3201.0
548235    3304.0
550159    3306.0
530611    3201.0
Name: OkresKod, Length: 6258, dtype: float64okresy = gpd.read_file(uzsz_url, layer="Okresy")obec_to_okres = obec_to_okres.map(dict(zip(okresy.Kod, okresy.Nazev))).fillna("Praha")
obec_to_okresuzemi_kod
569151      Havlíčkův Brod
569291      Havlíčkův Brod
569330             Jeseník
569402      Havlíčkův Brod
569615      Havlíčkův Brod
                ...       
551503    České Budějovice
530166             Benešov
548235           Pelhřimov
550159          Prachatice
530611             Benešov
Name: OkresKod, Length: 6258, dtype: objectproportions_w_okres = proportions.assign(okres=obec_to_okres)proportions_w_okres.columnsIndex(['Bez vzdělání', 'Nezjištěno', 'Neúplné základní vzdělání',
       'Nižší střední a střední vzdělání', 'Nástavbové vzdělání',
       'Pomaturitní studium', 'Vysokoškolské bakalářské vzdělání',
       'Vysokoškolské doktorské vzdělání',
       'Vysokoškolské magisterské vzdělání', 'Vyšší odborné vzdělání',
       'Vyšší odborné vzdělání v konzervatoři', 'Základní vzdělání',
       'Úplné střední odborné vzdělání', 'Úplné střední všeobecné vzdělání',
       'okres'],
      dtype='object', name='vzdelani_txt')proportions_w_okres.columns = [
    'Without education',
    'Undetermined',
    'Incomplete primary education',
    'Lower secondary and secondary education',
    'Further education',
    'Post_maturita studies',
    'Bachelors degree',
    'Doctoral degree',
    'Masters degree',
    'Higher vocational education',
    'Higher vocational education in a conservatory',
    'Primary education',
    'Complete secondary vocational education',
    'Complete secondary general education',
    'Okres',
]
proportions_w_okres.columns = proportions_w_okres.columns.str.lower().str.replace(" ", "_")proportions_w_okres| without_education | undetermined | incomplete_primary_education | lower_secondary_and_secondary_education | further_education | post_maturita_studies | bachelors_degree | doctoral_degree | masters_degree | higher_vocational_education | higher_vocational_education_in_a_conservatory | primary_education | complete_secondary_vocational_education | complete_secondary_general_education | okres | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| uzemi_kod | |||||||||||||||
| 500011 | 0.570704 | 3.741281 | 1.141408 | 34.242232 | 1.775523 | 0.507292 | 2.853519 | 0.634115 | 12.935954 | 1.395054 | 0.126823 | 11.350666 | 17.945466 | 10.779962 | Zlín | 
| 500020 | 0.885827 | 3.346457 | 1.968504 | 40.157480 | 2.066929 | 0.885827 | 1.771654 | 0.492126 | 6.299213 | 1.574803 | 0.000000 | 15.059055 | 16.338583 | 9.153543 | Šumperk | 
| 500046 | 0.359195 | 3.232759 | 0.790230 | 39.152299 | 2.514368 | 0.790230 | 3.520115 | 0.215517 | 10.632184 | 1.364943 | 0.143678 | 9.770115 | 15.301724 | 12.212644 | Nový Jičín | 
| 500062 | 0.238237 | 3.573556 | 1.072067 | 32.757594 | 2.084574 | 1.131626 | 3.037522 | 0.178678 | 13.281715 | 0.714711 | 0.119119 | 11.316260 | 18.701608 | 11.792734 | Vsetín | 
| 500071 | 0.412939 | 2.890571 | 1.238816 | 34.067447 | 1.720578 | 0.757054 | 3.028217 | 0.137646 | 11.080523 | 0.894701 | 0.000000 | 9.772884 | 20.027529 | 13.971094 | Vsetín | 
| ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | 
| 599930 | 0.717703 | 5.645933 | 1.339713 | 38.133971 | 1.818182 | 0.622010 | 3.157895 | 0.191388 | 8.086124 | 1.148325 | 0.095694 | 11.531100 | 16.555024 | 10.956938 | Nový Jičín | 
| 599948 | 0.714031 | 4.534095 | 1.677972 | 35.201714 | 1.856480 | 0.892538 | 3.498750 | 0.392717 | 11.602999 | 1.392360 | 0.071403 | 10.888968 | 16.137094 | 11.138879 | Nový Jičín | 
| 599956 | 0.272480 | 3.337875 | 1.294278 | 35.217984 | 2.520436 | 0.681199 | 3.269755 | 0.272480 | 10.967302 | 1.430518 | 0.204360 | 10.354223 | 18.528610 | 11.648501 | Nový Jičín | 
| 599964 | 0.253807 | 1.903553 | 0.888325 | 32.994924 | 2.030457 | 0.507614 | 3.045685 | 1.015228 | 14.467005 | 2.538071 | 0.126904 | 11.675127 | 17.131980 | 11.421320 | Nový Jičín | 
| 599999 | 0.437318 | 3.498542 | 1.117590 | 32.361516 | 2.089407 | 1.068999 | 3.449951 | 0.631681 | 15.014577 | 1.506317 | 0.242954 | 9.912536 | 16.909621 | 11.758989 | Nový Jičín | 
6254 rows × 15 columns
proportions_w_okres.to_csv("../../regression/data/education.csv")