Grupa wyniki udostępnia wyniki egzaminów i testów zrównujących.
Z uwagi na liczbę danych (na październik 2015 r. wyniki ponad 48 milionów przystąpień przez uczniów do poszczególnych testów) dostęp do nich możliwy jest jedynie partiami. Za jednym razem pobrać można jedynie:
Teoretycznie dostęp do wszystkich danych możliwy jest w postaci długiej (gdzie wiersz zbioru danych odpowiada odpowiedzi udzielonej przez ucznia na jedno konkretne kryterium oceny w konkretnym teście) za pomocą funkcji pobierz_odpowiedzi(), jednak jest to możliwość czysto teoretyczna. Wywołanie funkcji pobierz_odpowiedzi() bez odfiltrowania jej wyników oznaczałoby próbę pobrania zbioru danych o ok. 1,5 miliarda wierszy, zajmującego kilkadziesiąt gigabajtów danych. Stąd w przypadku użycia funkcji pobierz_odpowiedzi() niezbędne jest odfiltrowanie pobieranych danych, np. przez ograniczenie się do wybranego testu, rodzaju i roku egzaminu, itp.
Pobiera wyniki wybranej części egzaminu, z wybranego roku, pochodzące z wybranego źródła danych.
Można wybrać pomiędzy pobraniem danych wypunktowanych lub dystraktorów.
Możliwe jest również zastosowanie do pobieranych danych wskazanej skali
pobierz_wyniki_egzaminu(src, rodzajEgzaminu, czescEgzaminu, rokEgzaminu, czyEWD, punktuj = TRUE, idSkali = NULL, skroc = TRUE)
Pobranie wyników części humanistycznej egzaminu gimnazjalnego (połączone dane CKE i EWD) z 2011 roku:
src = polacz() gh2011 = pobierz_wyniki_egzaminu(src, 'egzamin gimnazjalny', 'humanistyczna', 2011, TRUE) gh2011 = gh2011 %>% collect() # pobranie wyników z bazy danych na komputer
Wymuszenie ściągnięcia danych z bazy na komputer (czy to funkcją collect(), jak w przykładzie powyżej, czy przekształceniem pobranych danych na zwykłą ramkę danych) powinno zająć od kilku do kilkunastu minut, jednak w skrajnie niekorzystnym wypadku, jeśli wiele osób będzie w tym samym czasie obciążać bazę, czas ten może się wydłużyć nawet do kilkudziesięciu minut. W tym czasie R może przestać odpowiadać i sprawiać wrażenie, że się zawiesił.
Z uwagi na długi czas pobierania danych zalecane jest, aby:
library(ZPD) src = polacz() wyniki = list() for(rok in as.character(2012:2014)){ dane = pobierz_wyniki_egzaminu(src, 'egzamin gimnazjalny', 'matematyka', rok, TRUE) wyniki[rok] = dane %>% collect() } save(wyniki, file = 'wynikiGimMat12-14.RData')
Pobiera wyniki wskazanego testu.
Można wybrać pomiędzy pobraniem danych wypunktowanych lub dystraktorów.
Możliwe jest również zastosowanie do pobieranych danych wskazanej skali
pobierz_wyniki_testu(src, idTestu, punktuj = TRUE, idSkali = NULL, skroc = TRUE)
W typowych zastosowaniach znaczenie mają jedynie pierwsze 2 parametry. Pozostałe użyteczne są w specyficznych zastosowaniach.
Pobranie wyników testu od id 1541 (zeszyt 9 zrównywania matury z j. polskiego w 2014 r.)
Jak znaleźć id interesującego nas testu - patrz grupa danych testy
library(ZPD) src = polacz() zr14jp9 = pobierz_wyniki_testu(src, 1541) zr14jp9 = zr14jp9 %>% collect() # pobranie wyników z bazy danych na komputer
Czas wykonania funkcji collect() albo przekształcenia na zwykłą ramkę danych w decydującej mierze zależy od liczby uczniów, którzy pisali test:
Funkcja analogiczna do pobierz_wyniki_egzaminu(), pobierająca wyniki badań zrównujących.
Można wybrać pomiędzy pobraniem danych wypunktowanych lub dystraktorów.
Możliwe jest również zastosowanie do pobieranych danych wskazanej skali
pobierz_wyniki_zrownywania(src, rodzajEgzaminu, rok, punktuj = TRUE, idSkali = NULL, skroc = TRUE)
W typowych zastosowaniach znaczenie mają przede wszystkim pierwsze 3 parametry.
Pobranie wypunktowanych wyników zrównywania sprawdzianu z 2013 roku:
library(ZPD) src = polacz() zr13spr = pobierz_wyniki_zrownywania(src, 'sprawdzian', 2013) zr13spr = zr13spr %>% collect() # pobranie wyników z bazy danych na komputer
Badania zrównujące realizowane były w poszczególnych latach na próbach po kilka tysięcy uczniów, tak więc ich pobranie z bazy nie powinno zajmować od kilkunastu sekund do 2-3 minut.
Pobiera wyniki w postaci długiej, tzn. jeden wiersz zbioru danych odpowiada odpowiedzi udzielonej przez ucznia na konkretne kryteria oceny w konkretnym teście (w odróżnieniu od formy szerokiej, zwracanej przez pobierz_wyniki_egzaminu(), pobierz_wyniki_testu() i pobierz_wyniki_zrownywania(), gdzie jeden wiersz odpowiadał kompletowi odpowiedzi ucznia na wszystkie kryteria oceny w danym teście).
pobierz_odpowiedzi(src)
Pobranie wyników testu o id 1601 (matura rozszerzona z biologii w 2014 roku).
Z uwagi na wydajność istotne jest przekazanie id_testu jako liczby całkowitej - stąd as.integer(1601).
Jak znaleźć id interesującego nas testu - patrz grupa danych testy.
library(ZPD) src = polacz() # pobieramy dane test1601 = pobierz_odpowiedzi(src) %>% # odfiltrowując porządany test filter(id_testu == as.integer(1601)) %>% collect() # podglądamy pierwsze wiersze head(test1601)
Jest determinowany przez sposób odfiltrowywania danych i rozciąga się od nieskończoności (próba pobrania wszystkich danych bez odfiltrowania) do kilkunastu sekund (pobieranie wyników niewielkiego testu).
Grupa danych wyniki udostępnia szeroki wachlarz funkcji pomocniczych służacych do przekształcania pobranych wyników.
Pobiera ramkę danych pozwalającą odfiltrować pierwsze lub ostatnie przystąpienia uczniów do danego rodzaju egzaminu lub jego części odnotowane w bazie.
filtruj_przystapienia(src, pierwsze, rodzajEgzaminu, czescEgzaminu = NULL, czyEwd, obserwacje = NULL)
Określamy interesującą nas populację jako uczniowie podchodzący po raz pierwszy do matury w roku 2011. W zbiorze pobranych wyników egzaminu maturalnego z biologii na poziomie rozszerzonym z roku 2012 chcemy oznaczyć uczniów, którzy należą do naszej populacji.
library(ZPD) src = polacz() # pobieramy wyniki z biologii uzupełnione o zmienną "pop_podejscie" z grupy danych uczniowieTesty matBioR12 = pobierz_wyniki_egzaminu(src, 'matura', 'biologia rozszerzona', 2012, TRUE) %>% inner_join(pobierz_dane_uczniowie_testy(src)) %>% collect() # pobieramy informacje o pierwszych przystąpieniach z funkcji filtruj_przystapienia() pierwsze = filtruj_przystapienia(src, TRUE, 'matura', NULL, TRUE) %>% collect() %>% # tworzymy zmienną, która pozwoli nam zidentyfikować, że uczeń należał do tego zbioru mutate(pierwsze = TRUE) # złączamy obydwa zbiory danych i tworzymy zmienną określającą populację matBioR12 = matBioR12 %>% left_join(pierwsze) %>% mutate(populacja = !is.na(pierwsze) & is.na(pop_podejscie)) # sprawdzamy, ilu uczniów należy do populacji, a ilu nie table(matBioR12$populacja)
W zależności od liczby lat, jakie dla danej kombinacji egzaminu i źródła danych przechowywane są w bazie od ok. 3 do 10 minut.
Przekodowuje liczbowe kody dystraktorów na faktyczne kody odpowiedzi z arkusza (np. A/B/C/D, PP/PF/FP/FF, itp.).
odkoduj_dystraktory(src, dane, kolDystr = „^(odpowiedz|k_[0-9]+)$”, kolKryt = „^kryterium$”)
Odkodowujemy dystraktory w wynikach zrównywania sprawdzianu w 2014 roku.
library(ZPD) src = polacz() # pobieramy wyniki zrównywania w dystraktorach zrSpr14 = pobierz_wyniki_zrownywania(src, 'sprawdzian', 2014, FALSE) %>% collect() # zamieniamy kody liczbowe na kody dystraktorów zrSpr14 = zrSpr14 %>% odkoduj_dystraktory(src) # wyświetlamy pierwsze wiersze head(zrSpr14)
Stosuje do danych wskazaną skalę.
zastosuj_skale(dane, src, idSkali, skroc = TRUE)
Stosujemy skalę 41 (zrównywanie sprawdzianu dla lat 2002-2013) do wyników sprawdzianu z 2002 roku.
library(ZPD) src = polacz() # pobieramy dane sprawdzianu dane = pobierz_wyniki_egzaminu(src, 'sprawdzian', '', 2002, FALSE) %>% collect() # zapamiętujemy listę zmiennych przed = colnames(dane) # stosujemy skalę dane = dane %>% zastosuj_skale(src, 41) # porównujemy listę zmiennych po przekształceniu - jak widać niektóre kryteria zostały złączone w pseudokryteria setdiff(przed, names(dane)) setdiff(names(dane), przed)
Oblicza w zmiennej wynik sumy punktów dla danego zbioru danych.
zsumuj_punkty(dane, usunKryteria = TRUE)
Pobieramy wyniki testu 1541 (zeszyt 9 zrównywania matury z j. polskiego w 2014 roku) i obliczamy sumy punktów pozostawiając jednocześnie w zbiorze zmienne z punktacją za poszczególne kryteria oceny.
library(ZPD) src = polacz() dane = pobierz_wyniki_testu(src, 1541) %>% collect() %>% zsumuj_punkty(usunKryteria = FALSE) head(dane)
Dokonuje normalizacji sum punktów (np. wyliczonych funkcją zsumuj_punkty()) albo z użyciem wskazanej normy albo poprzez wykonanie normalizacji ekwikwantylowej przekazanych danych.
normalizuj(dane, src = NULL, kolWynik = „wynik”, idSkali = NULL, skalowanie = NULL, grupa = NULL, …)
Stosujemy dwie różne normy do wyników sprawdzianu z 2002 roku:
library(ZPD) src = polacz() dane = pobierz_wyniki_egzaminu(src, 'sprawdzian', '', 2002, FALSE) %>% collect() # normalizacja ekwikwantylowa na podstawie danych (domyślna średnia 100 i odchylenie standardowe 15) daneNormEkw = dane %>% zsumuj_punkty() %>% normalizuj() head(daneNormEkw) # normalizacja na podstawie normy zrównującej {idSkali, skalowanie, grupa} = {778, 2, ''} w bazie daneNormZrwn = dane %>% # skala, z której pochodzi norma zrównująca zastosuj_skale(src, 778) %>% zsumuj_punkty() %>% normalizuj(src, idSkali = 778, skalowanie = 2, grupa = '') head(daneNormZrwn)
W celu wykonywania analiz na oszacowaniach umiejętności uczniów często potrzebne mogą być dodatkowe dane kontekstowe, znajdujące się w innych grupach danych. Ich dołączanie jest łatwe, gdyż grupa danych wyniki łączy się bezpośrednio z dowolną inną grupą danych. Stąd wystarczy wykonać odpowiednie złączenie danych pomiędzy pobranymi grupami danych.
Do wyników części matematyczno-przyrodniczej egzaminu gimnazjalnego z roku 2011 (dane złączone z OKE i CKE) dołączamy zmienne z grup danych: uczniowie, uczniowieTesty i szkoły.
library(ZPD) src = polacz() # Pobieramy grupy danych //wyniki//, //uczniowie//, //uczniowieTesty//, //szkoły//: wyniki = pobierz_wyniki_egzaminu(src, 'egzamin gimnazjalny', 'matematyczno-przyrodnicza', 2011, TRUE) uczniowie = pobierz_uczniow(src) uczniowieTesty = pobierz_dane_uczniowie_testy(src) szkoly = pobierz_szkoly(src) # Złączamy grupy danych ze sobą gmp_11 = inner_join(wyniki, uczniowie) %>% inner_join(uczniowieTesty) %>% inner_join(szkoly) # Pobieramy dane na komputer i zapisujemy lokalnie (patrz rozdział o czasie pobierania danych z serwera powyżej) gmp_11 = gmp_11 %>% collect() save(gmp_11, file = 'gmp_11.RData')
W wypadku pobierania całej serii wyników egzaminacyjnych, które współdzielą te same dane kontekstowe (np. wyniki egzaminu maturalnego z danego roku dla wszystkich przedmiotów), szybsze może okazać się oddzielne pobranie i zapisanie lokalnie na komputerze:
a następnie złączanie ich już lokalnie na swoim komputerze.
Patrz jak rozsądnie dzielić przetwarzanie danych między bazę danych i własny komputer?