Dostęp do danych wejściowych odbywa się przez użycie aliasu bazy danych. Użytkownik wybiera nazwę tabeli oraz ustawienia aliasu. Jeżeli wybór kolumny z tabeli nie jest jednoznaczny, dodatkowo musi zostać określone użycie kolumny. Informacje na temat danych wejściowych przechowywane są w obiekcie Data i mogą zostać użyte do tworzenia wielokrotnych wykresów z tymi samymi wymogami danych.
Konstruktor obiektu Data posiada następującą składnię:
Data(tableName[, dataSpecification][, nominal = columnList][, numeric = columnList)
Parametr dataSpecification jest listą Python’a, która określa jak interpretować dane. Zobacz przykłady w sekcji poniżej.
Listy kolumn nominal oraz numeric używane są do wymuszenia traktowania wybranej kolumny zgodnie z specyfikacją typu danych. Oba parametry otrzymują ich wartości jako listy nazw, gdzie użytkownik określa które kolumny powinny być ustawione jako typ znakowy lub liczbowy.
Biblioteka wykresów powinna decydować jak interpretować podstawowe kolumny oraz wiersze dostarczonych danych. Użytkownik może decydować czy powinno być to wykonane automatycznie przez bibliotekę wykresów lub czy ta informacja powinna być ustawiona ręcznie.
W przypadku gdy typ danych nie może być uzyskany, nie może być użyta automatyczna introspekcja. Na przykład, rozważ następującą tabelę danych:
table '3col': a b c 1 2 0.3 2 1 0.1 3 3 0.2 4 2 0.15
Jedna z możliwych interpretacji danych jest taka, że każdy wiersz reprezentuje punkt w 3-wymiarowej przestrzeni.
Inna interpretacja może być taka, że każdy wiersz zawiera dwie serię danych ‘b’ oraz ‘c’ dla pojedynczej wartości ‘a’
Przykład ten pokazuje, że nie ma jednoznacznej interpretacji dla kolumn tej tabeli. Odpowiedzialność interpretacji danych spada na użytkownika.
Przykład 11.1. Deklarowanie typów kolumn
Załóżmy, że chcemy wyświetlić dane w dwóch wymiarach z liczbą serii danych. Tabela składa się z trzech kolumn, a w trzecia kolumna zawiera liczbę serii danych.
W tym przypadku typ danych trzeciej kolumny powinien być określony jako nominalny. Automatyczny proces introspekcji nie zinterpretuje, że ta numeryczna kolumna powinna być traktowana jako nominalna!.
table 'sample': n1 n2 n3 0.3 0.1 10 0.1 0.2 10 0.15 0.1 15 0.05 0.4 10 0.02 0.3 15 d = Data('sample', [ 'n3', 'n2', 'n1' ], nominal=['n3'])
W sytuacji gdy użytkownik nie określi typu danych, zostanie zastosowany proces automatyczny. Biblioteka wykresów może ustalić typ dostarczonych danych jeżeli typy kolumny z zbioru danych pasują tylko do jednego wyrażenia regularnego (CNN, [N,N]+, etc.)
W sytuacji gdy użytkownik nie dostarczy żadnych argumentów opisujących kolumny dla obiektu Data, program spróbuje automatycznie określić, które wyrażenie proponowane przez system jest odpowiednie dla danych. Na początku sprawdza typy danych kolumny, następnie rozważa wszystkie zestawy kombinacji kolumny. Jeżeli tylko jedno wyrażenie pasuje do dostarczonych danych, zostanie ono użyte. W przeciwnym przypadku zostanie wysłana wiadomość do użytkownika z informacją, że musi ręcznie określić porządek oraz interpretację kolumn.
Ten podrozdział opisuje wszystkie możliwe formaty parametru dataSpecification konstruktora obiektu Data.
Nazwa zmiennej liczbowej, powinna być umiejscowiona pomiędzy cudzysłowem ‘ lub ”
Nazwa zmiennej nominalnej, powinna być umiejscowiona pomiędzy cudzysłowem ‘ lub ”
Nawiasy używane są tworzenia list (składnia Gython)
Separuje poszczególne rzeczowniki w liście
Wykres poniżej pokazuje co jest rozumiane jako termin ‘kategoria’ (category) oraz ‘serie’ (series) w tym podrozdziale
Każdy rekord będzie traktowany jako dwu wymiarowy punkt z serii określonej w kolumnie C. Pierwsze N kolumn będzie współrzędnymi x a drugie współrzędnymi y.
2D
Data('sample_table', ['gender', 'age', 'weight'])
Każdy wiersz tabeli reprezentuje serię par zmiennych. Liczba par jest równa liczbie serii. Pierwsza wartość z każdej pary będzie traktowana jako współrzędne x, a druga współrzędne y.
2D
Data('sample_table', [['age', 'weight'], ['age_serie2', 'weight_after']]) Data('sample_table', ['age', 'weight'])
Każdy rekord tabeli reprezentuje serię danych. Liczba serii jest równa liczbie kolumn. Pierwsza kolumna będzie traktowana jako współrzędne x, a pozostałe jako współrzędne y dla kolejnych serii. Nazwy serii będą takie same jak nazwy kolumn w wewnętrznych nawiasach.
2D
Data('sample_table', ['age', ['weight_before', 'weight_after']])
Każdy wiersz tabeli reprezentuje zmienne 3D. Liczba tych zmiennych jest równa liczbie serii. Pierwsza wartość z 3D będzie traktowana jako współrzędne x, druga wartość jako współrzędne y, a trzecia jako z.
3D
Przykład 11.2. Bubble plot with [N, N, N], [N, N, N] data specification (2 series)
table '3d_data': x y z x2 y2 z2 48 83 5.34 48 93 3.34 41 84 4.23 41 84 3.23 50 106 6.27 50 106 3.27 41 82 4.77 41 82 3.77 44 70 6.15 44 50 3.15 57 10 5.16 57 106 3.16 43 73 5.19 43 73 3.19 43 66 4.71 43 26 3.71 34 62 4.2 34 62 3.2 44 98 5.91 44 98 3.91 36 70 4.29 36 70 3.29 34 66 4.08 34 66 3.8 46 74 5.13 46 74 3.13 42 85 4.32 42 85 3.32 49 79 6.09 49 79 3.09 55 03 6.03 55 10 3.03 36 51 3.27 36 31 3.27 41 77 5.91 41 127 3.91 54 100 5.58 54 10 3.58 56 100 6.45 56 10 3.45 47 75 4.59 47 35 3.59 d = Data('3d_data', [['x', 'y', 'z'], ['x2', 'y2', 'z2']]) BubblePlot(d).show()
Każdy rekord tabeli ustawia wartość N dla serii określonej przez pierwszą wartość C oraz kategorię określoną przez drugą wartość C.
Nominalne
Przykład 11.3. Category plot with CCN data specification
table 'survey': day experiment_type measured_value 'day1' 'simple' 121.1 'day2' 'simple' 122.8 'day3' 'simple' 122.3 'day4' 'simple' 122.1 'day1' 'extended' 115.4 'day2' 'extended' 111.2 'day3' 'extended' 101.9 'day4' 'extended' 102.7 d = Data('survey', ['experiment_type', 'day', 'measured_value']) CategoryPlot(d).show()
Każdy rekord tabeli dodaje serię o wartości N do kategorii określonej przez wartość C.
Każda kolumna tabeli będzie stanowić na wykresie kategorię o takiej samej nazwie jak nazwa kolumny.
Wykresy danych nominalnych
Każdy rekord traktowany jest jako nowa seria danych, którego nazwa pochodzi od pierwotnej liczby wiersza tabeli wejściowej
Każda kolumna odpowiada pojedynczej kategorii o tej samej nazwie
Nominalne
Możliwe jest scalenie kilku kolumn z danymi kategorycznymi w jedną. Wykonuje się to przez połączenie wartości ciągu znaków z każdej kolumny w jeden ciąg znaków. Wartości są scalane przez użycie znaku podkreślenia '_'. Funkcjonalność ta nazywana jest series grouping. Jakkolwiek nazwa atrybutu kategorycznego może być umiejscowiona w wyrażeniu Data statement, a pogrupowany atrybut także może być umiejscowiony.
C może być traktowane jako równe z (C,C,...C). Dlatego też gdziekolwiek występuje C, może być zastąpione przez (C,C,...C), itd. W notacji poniżej założono że
C = (C, C, .. C)
Załóżmy, że istnieją dwie kolumny: A oraz B, których wartości każdej kolumny są : A = { 'yes', 'no' } , B = { 'high', 'low' }. (A, B) może być umiejscowiona zamiast A i będzie to traktowane jako pojedynczy atrybut z możliwymi wartościami: A_B = { 'yes_high', 'yes_low', 'no_high', 'no_low' }
Przykład 11.6. Series grouping
table 'series_grouping_example': n1 n2 A B 0.3 0.1 'yes' 'high' 0.1 0.2 'no' 'low' 0.15 0.1 'yes' 'high' 0.05 0.4 'yes' 'high' 0.02 0.3 'yes' 'low' d = Data('series_grouping_example', [ ( 'A', 'B' ), 'n2', 'n1'] ) ScatterPlot(d).show()
krypt tworzy obiekt danych kategorycznych z trzema seriami danych yes_high, no_low, yes_low, co zostało zobrazowane na wykresie poniżej.
W wielu przypadkach dane wejściowe są niespójne. Ten podrozdział opisuje jak bardzo niespójność jest brana pod uwagę podczas tworzenia obiektu Data dla wykresów.
Rekordy z wartościami null są ignorowane. Jeżeli w danych zostanie napotkana wartość brakująca (null), zostanie wyświetlona następująca wiadomość.
'chart_type_name' Warning, plot data "dataset_name" contains NULL values, omitting each
Wiadomość ta pokazuje się tylko dla pierwszego napotkanego rekordu z wartością null.