Postgres - krótka analiza danych dot. zajęć dodatkowych

Przyglądam się danym opublikowanym przez Ministerstwo Edukacji dotyczącym liczby dzieci biorących udział w zajęciach pozalekcyjnych.
Źródło danych
Potrzebuję prawdziwe dane do ćwiczeń. Spróbuję zrobić jakąś mini-analizę dostępnych publicznie informacji.
Przeglądam dane na dane.gov.pl i znajduję taki zasób: Liczba uczestników różnych form zajęć pozaszkolnych według form zajęć, rodzaju zajęć (stałe lub okresowe) i według gmin - dane za rok szkolny 2018/2019
Nie są może one najświeższe, ale zobaczmy, co można z nich wyczytać…
Import danych
Sprawdziłam, jakie kolumny zawiera plik csv:
[karma@tpd|~/d/postgres] head -n3 uzdolnienia_2018_2019.csv
idTerytGmina,idTerytWojewodztwo,Wojewodztwo,Powiat,Gmina,Typ obszaru,idFormaZajec,Forma zajęć,idRodzajZajec,Rodzaj zajęć,Liczba Zajec,Liczba Uczestnikow
0201011,02,DOLNOŚLĄSKIE,bolesławiecki,Bolesławiec,obszar miejski,1,Zajęcia stałe,2,techniczne,3,36
0201011,02,DOLNOŚLĄSKIE,bolesławiecki,Bolesławiec,obszar miejski,1,Zajęcia stałe,4,artystyczne,57,806i utworzyłam nową tabelę zajecia:
create table zajecia (
idTeryt text,
idTerytWoj numeric,
woj text,
powiat text,
gmina text,
typ_obsz text,
id_forma_zaj numeric,
forma_zaj text,
id_rodz_zaj numeric,
rodz_zaj text,
licz_zaj numeric,
licz_ucze numeric);
Zaimportowałam do niej dane korzystając z funkcji copy (z opcjami csv header informującymi o formacie oraz występowaniu nagłówka w pierwszym wierszu pliku):
copy zajecia from 'uzdolnienia_2018_2019.csv'
csv header;Sprwdziłam, czy zgadza się liczba zaimportowanych wierszy:
[karma@tpd|~/d/postgres] cat uzdolnienia_2018_2019.csv | wc -l
804analysis=# select count(*) from zajecia;
count
-------
803
(1 row)
analysis=#Zgadza się; plik csv ma dodatkowy wiersz z nagłówkiem, więc liczba wierszy w pliku jest o 1 większa od liczby rekordów w bazie.
Typy zajęć
Jakie są w ogóle typy zajęć? Sprawdzam prostym zapytaniem:
select distinct rodz_zaj from zajecia;analysis=# select distinct rodz_zaj from zajecia;
rodz_zaj
--------------------------
przedmiotowe
techniczne
inne
sportowe
turystyczno-krajoznawcze
artystyczne
informatyczne
(7 rows)
analysis=# Liczba uczniów przypadająca na typ zajęć
Sprwdzę, ilu uczniów uczęszcza na każde z tych rodzajów zajęć (i obliczę procent):
analysis=# with summary as (
analysis(# select rodz_zaj, sum(licz_ucze) in_rodz,
analysis(# sum(sum(licz_ucze)) over() as allu
analysis(# from zajecia group by rodz_zaj)
analysis-# select rodz_zaj, in_rodz, round(in_rodz*100/allu, 2) pc
analysis-# from summary
analysis-# order by pc desc;
rodz_zaj | in_rodz | pc
--------------------------+---------+-------
artystyczne | 528535 | 46.96
sportowe | 225046 | 19.99
inne | 223150 | 19.83
przedmiotowe | 101356 | 9.00
turystyczno-krajoznawcze | 30781 | 2.73
informatyczne | 10422 | 0.93
techniczne | 6273 | 0.56
(7 rows)
analysis=#Ha! Prawie 47% uczniów uczęszcza na zajęcia artystyczne; 1,5% to zajęcia informatyczne bądź techniczne.
Gdzie największy odsetek na informatycznych?
Innymi słowy: w której części Polski udało się zaangażować relatywnie najwięcej młodzieży w zajęcia informatyczne?
Spróbuję najpierw policzyć procentowy udział uczniów w każdym z typów zajęć w każdym z województw.
with s as(
select
woj,
rodz_zaj,
sum(licz_zaj) lz, -- liczba oferowanych zajęć
sum(licz_ucze) lu, -- liczba uczestników
rank() over (partition by woj order by sum(licz_ucze) desc) r, -- miejsce po liczbie uczestników w woj
sum(sum(licz_ucze)) over (partition by woj) sumu -- liczba wszystkich w woj
from zajecia
group by woj, rodz_zaj
order by woj, sum(licz_ucze) desc
) select *, round(lu*100/sumu, 2) perc from s
order by woj
A teraz - zamiast porządkowania po województwie – dodam warunek wybierający tylko jeden interesujący mnie rodzaj zajęć: informatyczne. Uporządkuję malejąco po punktach procentowych, aby zobaczyć, gdzie jest największy odsetek uczniów:
where rodz_zaj = 'informatyczne'
order by perc desc;
Wniosek: Największy odsetek uczniów wybierających zajęcia informatyczne jest w woj. podlaskim. To ponad 14%.
A liczbowo?
Po uporządkowaniu po liczbie uczestników widać, że np. w województwie dolnośląskim jest jedynie 509 uczniów uczęszczających na zajęcia informatyczne. Najwięcej to województwa śląskie, mazowieckie, i - zaskoczenie - właśnie podlaskie. Ciekawe. Możliwe, że rok szkolny 2018/2019 był rokiem realizacji jakiegoś programu unijnego?
Szybki research
Rzeczywiście. W latach 2014-2020 był wielki transfer (prawie milion złotych) na Podlasie w ramach programu unijnego “Cyfrowe Podlaskie” mającego podnosić kompetencje cyfrowe osób powyżej 18 r.ż. Oto moja robocza hipoteza: z tego programu skorzystali nauczyciele, którzy później - nabywszy “kompetencji cyfrowych” - prowadzili zajęcia szkolne/pozaszkolne dla mlodzieży. Niestety, nie mam zasobów do zbadania tej sprawy głębiej. Wydaje mi się też, że na stronie dane.gov.pl nie ma danych dotyczących wcześniejszych lat, których możnaby użyć do porównania (albo nie mogę ich łatwo znaleźć)
Wnioski
Oczywiście, powyższa “analiza” nie jest zbyt głęboka ani też szczególnie poważna; to takie takie zapiski na kolanie na szybko. Niewątpliwie jednak suche liczby nabierają kolorów, kiedy się im przyjrzy z bliska.
Myślę, że SQL powinien być obowiązkowy na studiach dziennikarskich; może wtedy komentarze prasowe miałyby więcej pokrycia w danych, a nie tylko w zasłyszanych wypowiedziach polityków czy w ich strumieniu tweetów.
This text is part of the series sql...
- 2021-04-11 - Postgres - dates
- 2021-16-10 - Postgres - krótka analiza danych dot. zajęć dodatkowych
- 2021-04-10 - Postgres - JSON
- 2021-04-10 - Postgres - exercises
- 2021-30-09 - Postgres - installation