Spis treści

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:

1
2
3
4
[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,806

i utworzyłam nową tabelę zajecia:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
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):

1
2
copy zajecia from 'uzdolnienia_2018_2019.csv' 
csv header;

Sprwdziłam, czy zgadza się liczba zaimportowanych wierszy:

1
2
[karma@tpd|~/d/postgres] cat uzdolnienia_2018_2019.csv | wc -l
804
1
2
3
4
5
6
7
analysis=# 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:

1
select distinct  rodz_zaj from zajecia;
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
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):

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
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.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
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
Procent uczestników w województwie

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:

1
2
where rodz_zaj = 'informatyczne'
order by perc desc;
Procent uczestników na zajęciach informatycznych

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.


Ten wpis jest częścią serii sql.

Wszystkie wpisy w tej serii: