Skip to content

2.1 Koncepcja techniczna

zozlak edited this page Oct 25, 2016 · 10 revisions

Wymagania

Przy tworzeniu systemu generowania raportów postawiono sobie następujące cele:

  1. Powinien zapewniać jak największą łatwość korzystania początkującym użytkownikom, w szczególności:
  • Pozwalać na łatwe obliczanie podstawowych statystyk takich jak średnia, mediana, krotności, odsetki, kwantyle, korelacja liniowa i rangowa.
  • Pozwalać na łatwe generowanie podstawowych wykresów: rozkładów, słupkowych oraz kołowych.
  • Pozwalać na łatwe wczytywanie danych przygotowanych w zewnętrznym oprogramowaniu (np. programie eksportu danych z IRK i USOS, arkuszu kalkulacyjnym)
  1. Powinien zapewniać jak największą elastyczność analiz użytkownikom zaawansowanym.
  2. Powinien zapewniać automatyczną anonimizację danych zgodnie z przyjętymi regułami.
  3. Powinien zapewniać automatyczną generację raportów dla wielu odbiorców.
  4. Na podstawie tego samego szablonu raportu i danych, na podstawie których generowany jest raport w formacie PDF powinna istnieć możliwość wygenerowania raportu także w innych formatach (np. HTML, DOCX, itp.).
  5. Dodatkowym atutem byłaby możliwość łatwego przygotowania interaktywnych raportów w postaci stron WWW.
  6. Powinien być wieloplatformowy (najlepiej, aby działał zarówno w systemie Windows, Mac Os, jak również Linux).
  7. O ile to możliwe, powinien opierać się na już dostępnych, wypróbowanych rozwiązaniach, przy czym powinny to być rozwiązania darmowe z punktu widzenia użytkownika pakietu.

Motywacją dla ostatniego z wyżej wymienionych celów było zredukowanie czasu potrzebnego na przygotowanie systemu oraz dążenie do zapewnienia jak największej niezawodności działania.

Wybór technologii i operacjonalizacja wymagań

W wyniku analizy dostępnego zdecydowano oprzeć się na środowisku programu statystycznego R. Istniejące w ramach tego środowiska oprogramowanie (w szczególności sam program R oraz pakiet rmarkdown) zapewniało już realizację wymagań 2., 5., 6., 7. i 8., tak więc niezbędne było jedynie uzupełnienie go o moduły pozwalające na spełnienie wymagań 1., 3. oraz 4. Dodatkowo środowisko R umożliwiało szybkie i łatwe wytworzenie takich modułów poprzez mechanizm pakietów.

Aby zoperacjonalizować wymagania tworzonego oprogramowania niezbędne jest zapoznanie się z procesem generowania raportu w ramach wybranej technologii bazowej (pakiet rmarkdown dla programu statystycznego R):

  1. Użytkownik przygotowuje szablon raportu w języku składu markdown.
  2. Dodatkowo w szablonie umieszczać można dowolny kod R (tzw. wstawki R).
  • Podczas generowania raportu, pakiet rmarkdown (za pośrednictwem pakietu knitr) najpierw wykona wstawki R, a następnie zastąpi kod wstawki w szablonie raportu wynikiem jej działania.
  • W wyniku tej operacji powstaje spersonalizowany raport składający się już tylko z kodu w języku składu markdown.
  1. Spersonalizowany raport w języku składu markdown konwertowany jest na wybrany format wyjściowy (PDF, DOCX lub HTML) za pomocą programu Pandoc.
  • wypadku konwersji do PDF w pierwszej kolejności wykonywana jest konwersja na LaTeX, a następnie przy pomocy dystrybucji LaTeX-a generowany jest PDF. Stąd generowanie raportów w PDF wymaga obecności w systemie dystrybucji LaTeX-a.

Mechanizm ten umożliwia także wyświetlanie interaktywnych raportów w postaci stron WWW. W takim wypadku trzeba dodatkowo przygotować skrypt R opisujący kontrolki, za pomocą których użytkownik strony WWW będzie parametryzował treść raportu (np. wybór kierunku studiów, rocznika, itp.). Wybrane przez użytkownika parametry przekazywane są na etapie wykonywania wstawek R (punkt 2. powyżej), co pozwala na wykonanie odpowiednio spersonalizowanego raportu. W tym wypadku eksport raportu, z racji wyświetlania go w postaci strony WWW, następuje zawsze do formatu HTML.

Powyższy proces nie zapewnia realizacji wymagań 1., 3. i 4., w szczególności:

  • (wymaganie 1.) Obliczanie statystyk i generowanie wykresów, które mają się znaleźć w raporcie, wymaga znajomości języka R i ew. jego dodatkowych pakietów (np. pakietów do rysowania wykresów). Z jednej strony dla użytkowników, którzy nie mieli dotąd styczności z R ani z programowaniem, może to stanowić bardzo poważna barierę. Z drugiej strony pisanie pełnej składni poleceń w języku R może czynić szablon raportu mniej czytelnym i udostępnienie najczęściej wykorzystywanych statystyk i wykresów (wymienionych w wymaganiu 1.) w postaci gotowych, krótkich w zapisie funkcji będzie korzystne także w wypadku użytkowników zaawansowanych.
    • Np. chcąc policzyć średnią ze zmiennej Z i wyświetlić jej wynik zaokrąglony do dwóch miejsc po przecinku pełny kod w języku R wyglądałby następująco:
      sprintf(‘%.2f’, mean(Z, na.rm = TRUE))
      Jest to zapis długi i nieczytelny. Korzystnie byłoby móc zastąpić go krótszym wywołaniem, które wewnętrznie wykona wszystkie potrzebne czynności, a dodatkowo samo przyjmie najczęściej wykorzystywane wartości formatowań (a więc np. domyślnie przyjmie zaokrąglanie wartości do 2 miejsc po przecinku): E(Z)
    • Jeszcze bardziej jaskrawo różnicą tą widać w wypadku wykresów, gdzie wyświetlenie elegancko sformatowanego wykresu w R wymaga wpisania wielu linii kodu oraz znajomości rozlicznych parametrów graficznych sterujących wyglądem wykresu. Możliwość zastąpienia ich krótkim wywołaniem, w którym przekazywałoby się jedynie niezbędne informacje (dane, tytuł wykresu i ew. osi), znacznie upraszczałoby przygotowanie szablonu raportu oraz poprawiało jego czytelność.
  • (wymaganie 1.) Wczytywanie danych przygotowanych w zewnętrznym oprogramowaniu, podobnie jak obliczanie statystyk, wymaga znajomości języka R. Także w tym wypadku korzystnie byłoby obudować je prostymi funkcjami pomocniczymi, którym wystarczyłoby jedynie przekazać nazwę pliku, a one same rozpoznawałyby jego format i w odpowiedni sposób wczytywały dane.
  • (wymaganie 1.) Istnieje jeszcze kilka innych aspektów związanych z koniecznością znajomości języków R oraz markdown i dobrego zrozumienia relacji pomiędzy nimi w procesie generowania raportu, które mogą być nadmiernie trudne dla użytkownika. W szczególności dotyczą one tworzenia tabel w połączeniu ze stosowaniem wstawek R wewnątrz kolumn, warunkowego zamieszczania treści w raporcie oraz sposobu przetwarzania wstawek R w szablonie raportu. Również tutaj warto byłoby wytworzyć funkcje, które dawałyby użytkownikowi możliwość łatwego i intuicyjnego tworzenia szablonu raportu bez konieczności zagłębiania się w szczegóły techniczne.
  • (wymaganie 3.) Nie zapewnia mechanizmów automatycznej anonimizację danych. Najbardziej wygodnym sposobem byłoby zintegrowanie anonimizacji danych z opisywanymi wyżej funkcjami obliczania statystyk oraz generowania wykresów. Pozwoliłoby to na stosowanie reguł anonimizacji wyników w sposób całkowicie przezroczysty i niewymagający podejmowania jakichkolwiek dodatkowych działań przez osoby przygotowujące szablon raportu i/lub generujące raporty.
  • (wymaganie 4.) Nie zapewnia mechanizmów automatycznego generowania raportów.

Pozwala to zoperacjonalizować wymagania pakietu MLAK jako:

  • Wytworzenie funkcji obliczających statystyki: średnią, medianę, dowolne kwantyle, krotności, odsetki, korelację liniową (i jej kwadrat) oraz korelację rangową. Funkcje te powinny automatycznie dbać o anonimizację danych, jak również formatować wynik (uwzględniając wymogi stawiane formatowaniu przy osadzaniu wyniku w kolumnie tabeli). Przy formatowaniu powinny zakładać domyślnie najczęściej stosowany sposób formatowania, umożliwiając jednak dostosowanie go na życzenie użytkownika. Powinny zapewniać jak najbardziej skrótowy i czytelny zapis w szablonie raportu.
    • E(), Me(), N(), P(), Pw(), Q(), R(), R2(), Tau(), W()
  • Wytworzenie funkcji wspomagającej obliczanie statystyk dla podgrup ze względu na kwantyle (np. analizy w podziale na grupy ze względu na wyniki studentów).
    • G()
  • Wytworzenie funkcji umożliwiających generowanie wykresów: histogramu, słupkowego i kołowego. Funkcje te powinny zapewnić możliwie krótki i przejrzysty zapis w szablonie raportu (w wypadku konieczności radzenia sobie z różnymi rodzajami danych lepiej więc stworzyć kilka wariantów funkcji niż komplikować jej parametryzację). Powinny domyślnie formatować wykres zgodnie z przekazanymi danymi, ale także umożliwiać ew. ręczną zmianę parametrów wykresu przez użytkownika. Powinny automatycznie dbać o anonimizację danych.
    • wykresHistogram(), wykresSlupkowy(), wykresKolowy(), wykresKolowyNorm(), wykresKolowyZlicz()
  • Wytworzenie funkcji umożliwiającej warunkowe wyświetlanie danego fragmentu raportu
    • wstawTresc()
  • Wytworzenie funkcji ułatwiających wczytywanie danych przygotowanych w oprogramowaniu zewnętrznym. Powinny odczytywać dane w formatach CSV (zapisanym zgodnie z  MS Excel dla polskich ustawień językowych – separator pola: średnik, kodowanie znaków: Windows-1250) oraz RData. Powinny umożliwiać łatwe wczytywanie kompletu danych niezbędnych do wygenerowania raportu (zarówno dane o odbiorcy, jak i o jednostkach obserwacji, które typowo znajdują się w oddzielnych plikach).
    • wczytajOdbiorce(), wczytajDane()
  • Wytworzenie funkcji umożliwiającej automatyczną generację raportów dla wielu odbiorców.
    • generujRaporty()
  • Wytworzenie i zintegrowanie z funkcjami do automatycznego generowania raportów oraz wczytywania danych odbiorcy funkcji ustawiających właściwą domyślną parametryzację przetwarzania wstawek R przez pakiet rmarkdown (tak naprawdę przez używany przez rmarkdown pakiet knitr).
    • konfigurujKnitr ()

Podsumowanie architektury rozwiązania

  • Jako środowisko pracy wykorzystywany jest interpreter języka R.
  • W ramach tego środowiska generowanie raportów odbywa się za pośrednictwem pakietu rmarkdown i polega na:
    • Odczytaniu szablonu raportu zapisanego jako kombinacja języka składu markdown oraz wstawek w języku R.
    • Wykonaniu wszystkich wstawek w języku R i podstawienie wyników ich działania w miejsca, gdzie znajdowały się w szablonie raportu. W rezultacie otrzymywany jest raport w postaci czystego kodu markdown.
    • Konwersję raportu w formacie markdown do wybranego formatu wynikowego (DOCX, HTML, PDF) za pomocą programu Pandoc.
      • W wypadku PDF najpierw następuje konwersja raportu na format LaTeX, a dopiero potem, za pośrednictwem dystrybucji LaTeX-a, konwersja na PDF. Istnieje również wariant powyższej procedury umożliwiający generowanie raportów w postaci interaktywnych stron WWW.
  • Pakiet MLAK dostarcza funkcji w języku R umożliwiających krótszy, bardziej czytelny oraz niewymagający głębszej znajomości języka R zapis wstawek w języku R w szablonie raportu.
    • Jednocześnie funkcje te dbają o zachowanie anonimowości danych.
  • Pakiet MLAK dostarcza funkcji w języku R umożliwiającej automatyczne wygenerowanie raportów dla wielu odbiorców.