%matplotlib inline
import pandas as pd
import seaborn as sns
import numpy as np
! head -5 export.csv # hoe ziet het spreadsheet er uit?
2018-01-23;De Brug;IJsselstein;groep 6/7;22;Klas naar huis sturen; 2018-01-26;Montessori;Hilversum;groep 678;26;Klas verdelen; 2018-01-22;De Brug;IJsselstein;groep plusklas;20;Anders of combinatie; 2018-01-19;De Brug;IJsselstein;groep 3/4;25;Klas naar huis sturen; 2018-01-25;De kleine planeet;deventer;groep 3/4/5;27;Parttimer komt extra dag terug;
lt=pd.read_csv('export.csv', sep=';',
error_bad_lines=False,header=None)
lt.head()
b'Skipping line 9843: expected 7 fields, saw 8\n'
0 | 1 | 2 | 3 | 4 | 5 | 6 | |
---|---|---|---|---|---|---|---|
0 | 2018-01-23 | De Brug | IJsselstein | groep 6/7 | 22 | Klas naar huis sturen | NaN |
1 | 2018-01-26 | Montessori | Hilversum | groep 678 | 26 | Klas verdelen | NaN |
2 | 2018-01-22 | De Brug | IJsselstein | groep plusklas | 20 | Anders of combinatie | NaN |
3 | 2018-01-19 | De Brug | IJsselstein | groep 3/4 | 25 | Klas naar huis sturen | NaN |
4 | 2018-01-25 | De kleine planeet | deventer | groep 3/4/5 | 27 | Parttimer komt extra dag terug | NaN |
# Cleaning
for c in [1,2,3,5]:
lt[c]=lt[c].str.strip().str.lower() # namen schoonmaken
lt[0]=pd.to_datetime(lt[0]) # datums goed
lt=lt[(lt[0].dt.year==2018)&(lt[0] <pd.Timestamp.today()) ] # restrictie tot data uit 2018
lt= lt.drop(6, axis=1) # weg met die gekke kolom
lt.columns = ['datum','school','plaats','groep','AantalKinderen','oplossing'] # even goede namen geven
lt.head()
datum | school | plaats | groep | AantalKinderen | oplossing | |
---|---|---|---|---|---|---|
0 | 2018-01-23 | de brug | ijsselstein | groep 6/7 | 22 | klas naar huis sturen |
1 | 2018-01-26 | montessori | hilversum | groep 678 | 26 | klas verdelen |
2 | 2018-01-22 | de brug | ijsselstein | groep plusklas | 20 | anders of combinatie |
3 | 2018-01-19 | de brug | ijsselstein | groep 3/4 | 25 | klas naar huis sturen |
4 | 2018-01-25 | de kleine planeet | deventer | groep 3/4/5 | 27 | parttimer komt extra dag terug |
lt.oplossing.value_counts()
klas verdelen 2389 parttimer komt extra dag terug 2318 klas naar huis sturen 2243 onbevoegde voor de klas 2037 directie of ib-er etc... 1798 anders of combinatie 1760 invaller via detacheringsbureau 724 gepensioneerde voor de klas 363 ouder met lesbevoegdheid voor de klas 38 Name: oplossing, dtype: int64
lt.oplossing.value_counts().plot(kind='barh');
lt.groupby('oplossing')['AantalKinderen'].sum().sort_values().plot(kind='barh');
We kijken of de oplossingen verschillen in de grote stad van de oplossingen elders. We nemen Amsterdam als voorbeeld.
De grafiek laat voor elke oplossing zien hoe vaak die procentueel gekozen wordt als er een klas uitvalt.
We zien dat de "noodoplossingen" veel vaker voorkomen in Amsterdam dan elders.
lt_ams=lt[lt.plaats.str.contains('amsterdam')].groupby('oplossing')['AantalKinderen'].sum()
lt_not_ams=lt[~lt.plaats.str.contains('amsterdam')].groupby('oplossing')['AantalKinderen'].sum()
ams_vs_rest=pd.DataFrame([lt_not_ams ,lt_ams ] ).T
ams_vs_rest.columns=['Rest', 'Amsterdam']
ams_vs_rest.index.name='Oplossing'
ams_vs_rest.sort_values('Amsterdam', ascending=False)
Rest | Amsterdam | |
---|---|---|
Oplossing | ||
klas naar huis sturen | 54110 | 15712 |
klas verdelen | 44090 | 9717 |
onbevoegde voor de klas | 38997 | 7945 |
directie of ib-er etc... | 39056 | 4417 |
invaller via detacheringsbureau | 13336 | 3656 |
anders of combinatie | 39847 | 3452 |
parttimer komt extra dag terug | 53319 | 3258 |
gepensioneerde voor de klas | 7778 | 1119 |
ouder met lesbevoegdheid voor de klas | 847 | 103 |
title='Percentage oplossingen per kind in een uitgevallen klas in Amsterdam en in de rest van Nederland'
(ams_vs_rest/ams_vs_rest.sum()).sort_values('Amsterdam').plot(kind='barh',title=title , figsize=(15,7));
sns.kdeplot(lt.AantalKinderen);
lt.sort_values('AantalKinderen', ascending=False).head(10)
datum | school | plaats | groep | AantalKinderen | oplossing | |
---|---|---|---|---|---|---|
11775 | 2018-03-14 | basisschool achthoek | amsterdam | groep hele school | 831 | klas naar huis sturen |
11785 | 2018-03-14 | basisschool de ark | haarlem | groep hele school | 754 | klas naar huis sturen |
12055 | 2018-03-14 | openbare daltonbasisschool de horizon | amsterdam | groep hele school | 704 | klas naar huis sturen |
11783 | 2018-03-14 | albert schweitzer school | amsterdam | groep hele school | 702 | klas naar huis sturen |
5563 | 2018-02-08 | jenaplan wittevrouwen | utrecht | groep ib | 654 | directie of ib-er etc... |
11781 | 2018-03-14 | 5e montessorischool watergraafsmeer | amsterdam | groep hele school | 617 | klas naar huis sturen |
11784 | 2018-03-14 | basisschool alfons ariens | harderwijk | groep hele school | 574 | klas naar huis sturen |
12107 | 2018-03-14 | obs de compositie | almere | groep hele school | 540 | klas naar huis sturen |
11865 | 2018-03-14 | basisschool boven 't ij montessorischool | amsterdam | groep hele school | 537 | klas naar huis sturen |
12028 | 2018-03-14 | oranje nassauschool | badhoevedorp | groep hele school | 527 | klas naar huis sturen |
pd.concat([lt[lt.AantalKinderen<0] , lt[lt.AantalKinderen>100 ]])
datum | school | plaats | groep | AantalKinderen | oplossing | |
---|---|---|---|---|---|---|
2958 | 2018-02-02 | de wynroas | harkema | groep 4 | -24 | invaller via detacheringsbureau |
3790 | 2018-02-05 | de zonnewijzer | amersfoort | groep 1/2 | -27 | invaller via detacheringsbureau |
6784 | 2018-02-12 | abbs het podium | amsterdam | groep 4 | -26 | directie of ib-er etc... |
11468 | 2018-03-12 | obs de burght | amsterdam | groep 7 | -28 | anders of combinatie |
13744 | 2018-03-29 | sbo de tandem | uden | groep 7 | -4 | klas naar huis sturen |
257 | 2018-01-22 | montessorischool houten | houten | groep 1-8 geen gym | 275 | klas verdelen |
747 | 2018-01-29 | kindcentrum moerschans | hulst | groep alle leerlingen vd school | 150 | klas naar huis sturen |
844 | 2018-01-29 | pr. cathariba amalia | den haag | groep 1/2, 5, 7, 8 | 109 | anders of combinatie |
1245 | 2018-01-29 | st. antonius | mariënheem | groep alle kinderen (gymlessen) | 108 | parttimer komt extra dag terug |
3406 | 2018-01-31 | cbs prinses máxima | berkel en rodernijs | groep ib - werk ligt 3 dagen stil | 260 | anders of combinatie |
5563 | 2018-02-08 | jenaplan wittevrouwen | utrecht | groep ib | 654 | directie of ib-er etc... |
5773 | 2018-02-08 | de schouw | nieuwegein | groep 1,1,4,5,6,7,7 | 175 | anders of combinatie |
7238 | 2018-02-13 | de odyssee | amsterdam | groep verschillende groepen gym | 125 | parttimer komt extra dag terug |
7256 | 2018-02-14 | de tweemaster | huizen | groep alle, vakleerkracht gym | 175 | anders of combinatie |
9809 | 2018-02-26 | dr. w. dreesschool | arnhem | groep 1-2-3/6-7-8 | 138 | anders of combinatie |
10160 | 2018-03-05 | vbs de regenboog | eindhoven | groep 5,5,8,3 | 120 | klas naar huis sturen |
11775 | 2018-03-14 | basisschool achthoek | amsterdam | groep hele school | 831 | klas naar huis sturen |
11776 | 2018-03-14 | basisschool leonardo da vinci | amsterdam | groep hele school | 200 | klas naar huis sturen |
11781 | 2018-03-14 | 5e montessorischool watergraafsmeer | amsterdam | groep hele school | 617 | klas naar huis sturen |
11783 | 2018-03-14 | albert schweitzer school | amsterdam | groep hele school | 702 | klas naar huis sturen |
11784 | 2018-03-14 | basisschool alfons ariens | harderwijk | groep hele school | 574 | klas naar huis sturen |
11785 | 2018-03-14 | basisschool de ark | haarlem | groep hele school | 754 | klas naar huis sturen |
11786 | 2018-03-14 | basisschool boe | amsterdam | groep hele school | 501 | klas naar huis sturen |
11807 | 2018-03-14 | curtevenne | kortenhoef | groep hele school | 250 | klas naar huis sturen |
11808 | 2018-03-14 | kentalis signis | amsterdam | groep hele school | 112 | klas naar huis sturen |
11820 | 2018-03-14 | obs de bloeiende perelaar | zuidoostbeemster | groep hele school | 250 | klas naar huis sturen |
11831 | 2018-03-14 | 14e montesorrischool | amsterdam | groep hele school | 421 | klas naar huis sturen |
11832 | 2018-03-14 | 1e montessorischool | amsterdam | groep hele school | 304 | klas naar huis sturen |
11833 | 2018-03-14 | basisschool 2e dalton | amsterdam | groep hele school | 455 | klas naar huis sturen |
11834 | 2018-03-14 | 2e montesorrischool | amsterdam | groep hele school | 400 | klas naar huis sturen |
... | ... | ... | ... | ... | ... | ... |
11842 | 2018-03-14 | 7e montessorischool | amsterdam | groep hele school | 497 | klas naar huis sturen |
11843 | 2018-03-14 | 6e montesorrischool | amsterdam | groep hele school | 342 | klas naar huis sturen |
11844 | 2018-03-14 | gbs veerkracht | amsterdam | groep hele school | 175 | klas naar huis sturen |
11845 | 2018-03-14 | 9e montesorrischool | amsterdam | groep hele school | 219 | klas naar huis sturen |
11846 | 2018-03-14 | basisschool admiraal de ruyter | amsterdam | groep hele school | 218 | klas naar huis sturen |
11849 | 2018-03-14 | basisschool aldoende | amsterdam | groep hele school | 390 | klas naar huis sturen |
11853 | 2018-03-14 | basisschool amstelmeerschool | amsterdam | groep hele school | 368 | klas naar huis sturen |
11855 | 2018-03-14 | amsterdamse montessorischool | amsterdam | groep hele school | 300 | klas naar huis sturen |
11859 | 2018-03-14 | basisschool de archipel | amsterdam | groep hele school | 277 | klas naar huis sturen |
11861 | 2018-03-14 | basisschool as-siddieq noord | amsterdam | groep hele school | 258 | klas naar huis sturen |
11862 | 2018-03-14 | basisschool as-siddieq oost | amsterdam | groep hele school | 335 | klas naar huis sturen |
11863 | 2018-03-14 | basisschool as-siddieq | amsterdam | groep hele school | 372 | klas naar huis sturen |
11864 | 2018-03-14 | basisschool asvo | amsterdam | groep hele school | 343 | klas naar huis sturen |
11865 | 2018-03-14 | basisschool boven 't ij montessorischool | amsterdam | groep hele school | 537 | klas naar huis sturen |
11910 | 2018-03-14 | pcb de ark | almere | groep hele school | 176 | klas naar huis sturen |
11919 | 2018-03-14 | hoflandschool | mijdrecht | groep hele school | 180 | klas naar huis sturen |
11980 | 2018-03-14 | 14e montessorischool | amsterdam | groep hele school | 456 | klas naar huis sturen |
11993 | 2018-03-14 | dr.e.boekmanschool | amsterdam | groep hele school | 420 | klas naar huis sturen |
12028 | 2018-03-14 | oranje nassauschool | badhoevedorp | groep hele school | 527 | klas naar huis sturen |
12055 | 2018-03-14 | openbare daltonbasisschool de horizon | amsterdam | groep hele school | 704 | klas naar huis sturen |
12062 | 2018-03-14 | het kerspel | hoogkarspel | groep hele school | 340 | klas naar huis sturen |
12096 | 2018-03-14 | 15e montessori maas&waal | amsterdam | groep hele school | 325 | klas naar huis sturen |
12107 | 2018-03-14 | obs de compositie | almere | groep hele school | 540 | klas naar huis sturen |
12117 | 2018-03-14 | pcbs de fontein | den helder | groep hele school | 260 | klas naar huis sturen |
12337 | 2018-03-14 | de wingerd | zwaag | groep hele school | 371 | klas naar huis sturen |
12338 | 2018-03-14 | de ichthus | hoorn | groep hele school | 110 | klas naar huis sturen |
12447 | 2018-03-14 | het mozaïek | houten | groep hele school | 220 | klas naar huis sturen |
12500 | 2018-03-14 | de zonheuvel | driebergen | groep alle | 223 | klas naar huis sturen |
12637 | 2018-03-14 | obs burght | amsterdam | groep hele school | 497 | klas naar huis sturen |
12730 | 2018-03-14 | boulevard410 | amersfoort | groep hele school | 225 | klas naar huis sturen |
62 rows × 6 columns
lt.groupby('datum')['AantalKinderen'].sum().sort_values(ascending=False).head(5)
datum 2018-03-14 19963 2018-02-02 15317 2018-02-08 14831 2018-02-05 13896 2018-02-06 12625 Name: AantalKinderen, dtype: int64
ams_vs_rest=pd.DataFrame([lt_not_ams[5].value_counts(),lt_ams[5].value_counts()] ).T
ams_vs_rest.columns=['Rest', 'Amsterdam']
ams_vs_rest.index.name='Oplossing'
ams_vs_rest.sort_values('Amsterdam', ascending=False)
Rest | Amsterdam | |
---|---|---|
Oplossing | ||
Klas verdelen | 1971 | 435 |
Onbevoegde voor de klas | 1709 | 347 |
Directie of IB-er etc... | 1618 | 193 |
Klas naar huis sturen | 2084 | 177 |
Invaller via detacheringsbureau | 569 | 155 |
Anders of combinatie | 1617 | 152 |
Parttimer komt extra dag terug | 2215 | 125 |
Gepensioneerde voor de klas | 318 | 47 |
Ouder met lesbevoegdheid voor de klas | 34 | 4 |
title='Percentage oplossingen per uitgevallen klas in Amsterdam en in de rest van Nederland'
(ams_vs_rest/ams_vs_rest.sum()).sort_values('Amsterdam').plot(kind='barh',title=title );
Maak een interactieve tabel waarin je een plaats (of een school) kunt kiezen, en die wordt dan vergeleken met de rest.
Hier zijn allerlei varianeten op te verzinnen.
lt_ams[4].plot()
lt_ams[4].describe()
lt[lt[4]>100].head()
0 | 1 | 2 | 3 | 4 | 5 | 6 | |
---|---|---|---|---|---|---|---|
257 | 2018-01-22 | Montessorischool Houten | Houten | groep 1-8 geen gym | 275 | Klas verdelen | NaN |
747 | 2018-01-29 | Kindcentrum Moerschans | Hulst | groep alle leerlingen vd school | 150 | Klas naar huis sturen | NaN |
844 | 2018-01-29 | Pr. Cathariba Amalia | Den Haag | groep 1/2, 5, 7, 8 | 109 | Anders of combinatie | NaN |
1245 | 2018-01-29 | St. Antonius | Mariënheem | groep alle kinderen (gymlessen) | 108 | Parttimer komt extra dag terug | NaN |
3406 | 2018-01-31 | CBS Prinses Máxima | Berkel en Rodernijs | groep ib - werk ligt 3 dagen stil | 260 | Anders of combinatie | NaN |
sns.kdeplot( lt[4]);