Narzędzia użytkownika

Narzędzia witryny


r_gr_oszacowania

Grupa danych oszacowania

Wstęp

  • Grupa oszacowania udostępnia oszacowania umiejętności uczniów uzyskane w wyniku skalowania wyników egzaminów lub innych testów.
  • Każde oszacowanie pochodzi z jakiegoś skalowania, które trzeba znać przed pobraniem danych z tej skali - patrz opis szczegółowy.
  • Listę zmiennych zawartych w tej grupie danych znajdziesz tutaj.
  • Z uwagi na:
    • liczbę danych (na październik 2015 r. ponad 350 milionów oszacowań);
    • różnorodność danych (oszacowania uzyskane różnymi metodami, często na wiele różnych sposobów dla tego samego ucznia na tym samym egzaminie/teście);
  • dane te bezwzględnie należy odfiltrować przed pobraniem na komputer czy to czasownikiem filter() czy to złączając ją z inną, odpowiednio zawężoną, grupą danych (czytaj poniżej). Graniczy z pewnością, że próba pobrania wszystkich oszacowań umiejętności uczniów zakończy się (po wielu godzinach oczekiwania) jakimś błędem (najpewniej braku pamięci).

Funkcje

  • pobierz_oszacowania_uczniow(src)
    Pobiera oszacowania umiejętności uczniów
    Parametry:
    • src - zmienna zawierająca połączenie z bazą danych zwrócone przez funkcję polacz()
  • filtruj_przystapienia(src, pierwsze, rodzajEgzaminu, czescEgzaminu = NULL, czyEwd, obserwacje = NULL)
    Patrz opis funkcji

Informacje szczegółowe

Skale, skalowania, estymatory

Oszacowania umiejętności uczniów obliczane są:

  • określonym estymatorem (np. EAP, PV);
  • na określonej skali;
  • dla określonego skalowania.

Stąd, aby móc pobrać interesujące Cię oszacowania umiejętności uczniów musisz wiedzieć, oszacowań na jakiej skali, w jakim skalowaniu i uzyskanych jakim estymatorem poszukujesz.

  • Listę wszystkich skal i skalowań zawiera grupa danych skale - te skalowania, które posiadają PV (EAP), mają wartość TRUE w kolumnie posiada_pv (posiada_eap).
  • Aby wyszukać skalowania wykorzystane do obliczenia danego wskaźnika, skorzystaj z grupy danych wskazniki.

  • Wskazówki, co do właściwych skali, skalowania i estymatora możesz też znaleźć w rozdziałach omawiających konkretne zastosowania (np. wyliczanie PWE z PV).

Przykład

Pobieramy PV dla zrównanych oszacowań umiejętności uczniów z matury na poziomie podstawowym z języka polskiego w 2012 r. Pozostawiamy tylko wyniki uczniów, którzy do egzaminu w tym roku przystępowali po raz pierwszy.

  • PV oznaczają estymację umiejętności PV;
  • właściwą skalę i skalowanie odnajdujemy odfiltrowując skalowania pobrane funkcją pobierz_skale() (patrz grupa danych skale) - filtrujemy po rodzaju skali równemu zrównywanie i rodzaju egzaminu równemu matura, jak również posiadaniu oszacowań PV;
  • grupa danych oszacowania zawiera zmienną rok, a więc możemy też łatwo odfiltrować rok 2012;
  • do odfiltrowania uczniów przystępujących do egzaminu po raz pierwszy używamy funkcji filtruj_przystapienia().
library(ZPD)
src = polacz()
 
skale = pobierz_skale(src) %>%
  filter(rodzaj_skali == 'zrównywanie', rodzaj_egzaminu == 'matura', posiada_pv == TRUE) %>%
  select(id_skali, skalowanie, rodzaj_egzaminu, czesc_egzaminu) %>%
  distinct()
as.data.frame(skale)
#   id_skali skalowanie rodzaj_egzaminu          czesc_egzaminu
# 1      728      31002          matura   matematyka podstawowa
# 2      776      32002          matura    j. polski podstawowa
# 3      777      33002          matura j. angielski podstawowa
#
# Interesujące nas skalowanie to id_skali 728 i skalowanie 31002
 
pv = pobierz_oszacowania_uczniow(src)
# odfiltrowanie
pv = pv %>% filter(estymacja == 'PV', id_skali == 728, skalowanie == 31002, rok == 2012)
# pobranie na komputer
pv = pv %>% collect()
 
# pobieramy informacje o pierwszych przystapieniach uczniow do egzaminu
przyst = filtruj_przystapienia(src, TRUE, 'matura', NULL, TRUE) %>% collect()
# filtrujemy PV za pomocą danych o pierwszych przystąpieniach
pv = pv %>% semi_join(przyst)

Czas pobierania danych z serwera

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 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:

  • Przed rozpoczęciem analiz pobrać i zapisać lokalnie na swoim komputerze wszystkie potrzebne oszacowania umiejętności uczniów, np. (zakładając, że potrzebujemy oszacowań estymatorem EAP dla egzaminu gimnazjalnego z historii i WOS-u w latach 2012-2014 - {id_skali, skalowanie}: {13, 3}, {84, 2}, {726, 1}):
    library(ZPD)
    src = polacz()
     
    # część wspólna - oszacowania EAP
    eap = pobierz_oszacowania_uczniow(src) %>% filter(estymacja == 'EAP')
     
    wyniki = list()
    skale   = c(13, 84, 726)
    skalowania = c(3, 2, 1)
    lata = as.character(2012:2014)
    for(i in seq_along(skale)){
      # szczegółowy filtr dla danej skali i skalowania
      dane = eap %>% filter(id_skali == skale[i], skalowanie == skalowania[i])
      # pobranie danych
      wyniki[[lata[i]]] = collect(dane)
    }
     
    save(wyniki, file = 'gh_h_eap_12-14.RData')
  • Analizy przeprowadzać na danych wczytywanych już z lokalnie zapisanych plików, np.:
    library(ZPD)
    load('gh_h_eap_12-14.RData') # zbiór zapisany w poprzednim przykładzie

Dołączanie zmiennych kontekstowych z innych grup danych

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 oszacowania łączy się bezpośrednio z dowolną inną grupą danych. Stąd wystarczy wykonać odpowiednie złączenie danych pomiędzy pobranymi grupami danych.

Przykład

Do oszacowań EAP EWD części matematyczno-przyrodniczej egzaminu gimnazjalnego z roku 2011 dołączamy zmienne z grup danych: uczniowie, uczniowieTesty i szkoły.

  • Zaczynamy od wyszukania odpowiednich id_skali i skalowanie:
    library(ZPD)
    src = polacz()
     
    skale = pobierz_skale(src) %>%
      filter(rodzaj_skali == 'ewd', rodzaj_egzaminu == 'egzamin gimnazjalny', czesc_egzaminu == 'matematyczno-przyrodnicza', rok == 2011, posiada_eap == TRUE) %>%
      select(id_skali, skalowanie, opis_skalowania) %>%
      distinct()
    head(skale)

    Widać jedno skalowanie - id_skali 23, skalowanie 3.

  • Pobieramy grupę danych oszacowania:
    eap = pobierz_oszacowania_uczniow(src) %>% filter(id_skali == 23, skalowanie == 3, estymacja == 'EAP') %>%
      collect()
  • Pobieramy dane kontekstowe filtrując na podstawie już pobranych oszacowań:
    testy = unique(eap$id_testu)
    uczniowie       = pobierz_uczniow(src)
    uczniowieTesty  = pobierz_dane_uczniowie_testy(src) %>%
      filter(id_testu %in% testy)
    szkoly          = pobierz_szkoly(src)
    daneKontekstowe = uczniowieTesty %>% 
      left_join(uczniowie) %>% 
      left_join(szkoly) %>%
      collect()
  • Złączamy ze sobą pobrane dane i zapisujemy na dysku
    eap_ewd_gm_11 = eap %>% left_join(daneKontekstowe)
    save(eap_ewd_gm_11, file = 'eap_ewd_gm_11.RData')

Uwaga

W wypadku pobierania PV lub EAP, których liczba dla jednej części egzaminu idzie w setki tysięcy do milionów (nie mówiąc o pobieraniu ich dla wielu roczników i/lub części egzaminu) oddzielne pobranie i zapisanie lokalnie na komputerze:

  • PV dla każdego roku;
  • danych kontekstowych;

a następnie złączanie ich już lokalnie na swoim komputerze (jak w powyższym przykładzie) będzie znacznie szybsze niż próba złączenia danych po stronie serwera.

Patrz jak rozsądnie dzielić przetwarzanie danych między bazę danych i własny komputer?

r_gr_oszacowania.txt · ostatnio zmienione: 2015/09/25 21:49 przez zozlak