Narzędzia użytkownika

Narzędzia witryny


zpd_oszacowania_obserwacji

Dodawanie do bazy oszacowań umiejętności obserwacji

Czynności wstępne

  1. Należy dysponować oszacowaniami przypisanymi do id_obserwacji, czyli do danych pobranych z bazy.
  2. Należy wiedzieć, z jakiej skali pochodzą dane, na podstawie których oszacowano umiejętności.
    1. Jeśli przy pobieraniu danych używano parametru idSkali, będzie to zapewne właśnie ta skala.
    2. Jeśli przy pobieraniu danych nie używano parametru idSkali, właściwa skala może jeszcze w ogóle nie istnieć w bazie - w takim wypadku należy ją utworzyć - patrz definiowanie skal w pakiecie ZPD.
  3. Należy utworzyć w bazie odpowiednie skalowanie.
    INSERT INTO skalowania (id_skali, skalowanie, opis, estymacja, do_prezentacji, data) VALUES (ID_SKALI, SKALOWANIE, 'OPIS', 'ESTYMACJA', TRUE/FALSE, now());

    gdzie:

    • ID_SKALI powinno być identyfikatorem skali, której użyto do pobrania danych;
    • SKALOWANIE powinno być numerem unikalnym w ramach danej skali
      aby zobaczyć, jakie numery są już wykorzystane, należy wykonać zapytanie SQL
      SELECT * FROM skalowania WHERE id_skali = ID_MOJEJ_SKALI
    • OPIS powinien być dość dokładny, w szczególności powinien zawierać nazwę badania i datę, np. skalowanie do EWD gimn.2013 z 23.10.2013
    • Możliwe wartości kolumny ESTYMACJA to: MML (Parscale)/MML (Mirt)/MML (Mplus)/JML (Winsteps)/MML (IRT.ADO)
      • jeśli potrzebna jest jakaś inna wartość, należy zgłosić się do Mateusza Żółtaka.
  4. Należy zdefiniować w bazie grupy użyte w danym skalowaniu (także w wypadku skalowania jednogrupowego, choć może to być po prostu grupa o pustej nazwie).
    INSERT INTO skalowania_grupy (id_skali, skalowanie, grupa) VALUES (ID_SKALI, SKALOWANIE, 'GRUPA');

    gdzie:

    • ID_SKALI i SKALOWANIE - patrz opis skalowania powyżej
    • GRUPA - nazwa grupy (może być też pusta)
  5. Jeśli chcemy jedynie zaktualizować dane skalowania, które już znajdują się w bazie, musimy ją wyczyścić poleceniami SQL:
    DELETE FROM skalowania_elementy WHERE (id_skali, skalowanie) = (ID_SKALI, SKALOWANIE);
    DELETE FROM skalowania_obserwacje WHERE (id_skali, skalowanie) = (ID_SKALI, SKALOWANIE);

    gdzie (ID_SKALI, SKALOWANIE) identyfikują nasze skalowanie w bazie danych.
    Uwaga, usuwanie rekordów z tablicy skalowania_obserwacje może zająć bardzo dużo czasu (ze względu na liczbę danych przechowywanych w tej tablicy).

Import oszacowań

W wyniku czynności wstępnych powinniśmy dysponować parą wartości ID_SKALI i SKALOWANIE, które identyfikują skalowanie, którego wyniki chcemy wprowadzić do bazy.

Oszacowania można importować na dwa sposoby:

  • Poprzez pojedyncze polecenia SQL INSERT.
    • Co można zrobić z każdego programu umiejącego nawiązać połączenie z bazą (np. przez ODBC).
    • Ale jest niezwykle powolne.
  • Za pomocą polecenia SQL COPY.
    • Co jest możliwe jedynie za pomocą programu psql.
    • Ale jest bez porównania szybsze.

Niezależnie od sposobu, wypełniana jest tablica skalowania_obserwacje o następującej strukturze:

  • id_skali - razem z kolumną skalowanie identyfikują skalowanie, którego wyniki przechowuje dany rekord w bazie;
  • skalowanie - razem z kolumną id_skali identyfikują skalowanie, którego wyniki przechowuje dany rekord w bazie;
  • id_obserwacji - id_obserwacji w bazie danych, to samo, co w danych pobranych w bazy;
  • id_testu - id_testu, z którego pochodzą dane użyte do wyliczenia danego oszacowania;
  • estymacja - sposób obliczania oszacowań umiejętności - jedno z: PV / EAP / ML / WML / BM;
  • nr_pv
    • numer PV w wypadku gdy estymacja to PV;
    • -1 w przeciwnym wypadku;
  • wynik - wartość oszacowania poziomu umiejętności ucznia;
  • bl_std - opcjonalnie błąd standardowy wartości oszacowania;
  • grupa - grupa, do której należy oszacowanie.

Za pomocą poleceń INSERT

Dla każdego oszacowania (w wypadku PV dla każdego PV z osobna) wykonujemy zapytanie (wartości kapitalikami należy wypełnić stosownymi danymi):

  • w wypadku PV
    INSERT INTO skalowania_obserwacje (id_skali, skalowanie, id_obserwacji, id_testu, estymacja, nr_pv, wynik, bl_std, grupa) VALUES (ID_SKALI, SKALOWANIE, ID_OBSERWACJI, ID_TESTU, 'ESTYMACJA', NR_PV, WARTOSC_OSZACOWANIA, null, 'GRUPA');
  • w wypadku innych estymacji
    INSERT INTO skalowania_obserwacje (id_skali, skalowanie, id_obserwacji, id_testu, estymacja, nr_pv, wynik, bl_std, grupa) VALUES (ID_SKALI, SKALOWANIE, ID_OBSERWACJI, ID_TESTU, 'ESTYMACJA', -1, WARTOSC_OSZACOWANIA, BLAD_OSZACOWANIA, 'GRUPA');
    • jeśli nie dyspnujemy błędem oszacowania, w miejsce BLAD_OSZACOWANIA należy wstawić null.

Za pomocą polecenia COPY i programu psql

  • Przygotowujemy plik CSV z kolumnami: id_skali, skalowanie, id_obserwacji, id_testu, estymacja, nr_pv, wynik, bl_std, grupa.
  • Kompresujemy go zip-em i przesyłamy na odrę.
  • Rozpakowujemy go na odrze poleceniem:
    unzip NazwaPliku.zip
  • Uruchamiamy w sesji screen-a program psql:
    screen psql -h 10.0.1.7 -U MojaNazwaUżytkownika ewd
  • Wykonujemy polecenie:
    \copy skalowania_obserwacje from 'nazwaPliku.csv' with csv delimiter 'separatorUżytyWPlikuCSV' null '' header;
  • Kiedy psql skończy import, wychodzimy z niego komendą:
    \q

Usuwanie kluczy obcych na czas importu

W wypadku importu dużych ilości oszacowań znaczne przyspieszenie można uzyskać usuwając na czas importu ograniczenia kluczy obcych tablicy skalowania_obserwacje, a następnie przywracając je po zakończeniu importu. Zysk polega na tym, że klucze obce sprawdzane są wtedy raz, hurtowo, a nie dla każdego importowanego rekordu oddzielnie.

Rozwiązanie to ma jedno poważne ograniczenie - usuwanie i dodawanie ograniczeń kluczy obcych wymaga bycia właścicielem tablicy lub praw administratora. Niemniej gdyby ktoś takowe prawa posiadał:

  • Usuwanie ograniczeń kluczy obcych:
    ALTER TABLE skalowania_obserwacje DROP CONSTRAINT skalowania_obserwacje_estymacja_fkey;
    ALTER TABLE skalowania_obserwacje DROP CONSTRAINT skalowania_obserwacje_id_skali_fkey;
    ALTER TABLE skalowania_obserwacje DROP CONSTRAINT skalowania_obserwacje_id_testu_fkey;
    DROP INDEX skalowania_obserwacje_testy_index;
  • Przywracanie ograniczeń kluczy obcych:
    ALTER TABLE skalowania_obserwacje ADD FOREIGN KEY (estymacja) REFERENCES sl_estymacje_obserwacji(estymacja);
    ALTER TABLE skalowania_obserwacje ADD FOREIGN KEY (id_skali, skalowanie) REFERENCES skalowania(id_skali, skalowanie);
    ALTER TABLE skalowania_obserwacje ADD FOREIGN KEY (id_testu, id_obserwacji) REFERENCES testy_obserwacje(id_testu, id_obserwacji);
    CREATE INDEX skalowania_obserwacje_testy_index ON skalowania_obserwacje (id_obserwacji, id_testu);
zpd_oszacowania_obserwacji.txt · ostatnio zmienione: 2015/09/08 21:09 przez zozlak