-
Notifications
You must be signed in to change notification settings - Fork 1
2.1 Koncepcja techniczna
Przy tworzeniu systemu generowania raportów postawiono sobie następujące cele:
- 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)
- Powinien zapewniać jak największą elastyczność analiz użytkownikom zaawansowanym.
- Powinien zapewniać automatyczną anonimizację danych zgodnie z przyjętymi regułami.
- Powinien zapewniać automatyczną generację raportów dla wielu odbiorców.
- 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.).
- Dodatkowym atutem byłaby możliwość łatwego przygotowania interaktywnych raportów w postaci stron WWW.
- Powinien być wieloplatformowy (najlepiej, aby działał zarówno w systemie Windows, Mac Os, jak również Linux).
- 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.
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):
- Użytkownik przygotowuje szablon raportu w języku składu markdown.
- 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.
- 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ść.
- 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:
- (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 ()
- 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.