Przygotowanie danych do wykresu

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.

Obiekty 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.

Deklarowanie typów kolumn

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.

Rysunek 11.1. Jedna z możliwych interpretacji danych

Jedna z możliwych interpretacji danych

Inna interpretacja może być taka, że każdy wiersz zawiera dwie serię danych ‘b’ oraz ‘c’ dla pojedynczej wartości ‘a’

Rysunek 11.2. Alternatywna interpretacja danych

Alternatywna interpretacja danych

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'])
                

Automatyczne uzyskiwanie typu danych

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.

Szablony specyfikacji danych

Ten podrozdział opisuje wszystkie możliwe formaty parametru dataSpecification konstruktora obiektu Data.

Notacja

N

Nazwa zmiennej liczbowej, powinna być umiejscowiona pomiędzy cudzysłowem ‘ lub ”

C

Nazwa zmiennej nominalnej, powinna być umiejscowiona pomiędzy cudzysłowem ‘ lub ”

[ rzeczy ]

Nawiasy używane są tworzenia list (składnia Gython)

,

Separuje poszczególne rzeczowniki w liście

Terminologia: kategoria vs. serie

Wykres poniżej pokazuje co jest rozumiane jako termin ‘kategoria’ (category) oraz ‘serie’ (series) w tym podrozdziale

Rysunek 11.3. Różnica pomiędzy 'kategorią' a 'serią'

Różnica pomiędzy 'kategorią' a 'serią'

CNN

Opis:

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.

Możliwe grupy wykresów

2D

Przykład:
Data('sample_table', ['gender', 'age', 'weight'])
                            

[N, N]+

Opis:

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.

Możliwe grupy wykresów:

2D

Przykład:
Data('sample_table', [['age', 'weight'], ['age_serie2', 'weight_after']])
Data('sample_table', ['age', 'weight'])
                            

N[N+]

Opis:

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.

Możliwe grupy wykresów:

2D

Przykład:
Data('sample_table', ['age', ['weight_before', 'weight_after']])
                            

[N, N, N]+

Opis:

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.

Możliwe grupy wykresów:

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()
    

Rysunek 11.4. Bubble plot with 2 data series

Bubble plot with 2 data series

CCN

Opis:

Każdy rekord tabeli ustawia wartość N dla serii określonej przez pierwszą wartość C oraz kategorię określoną przez drugą wartość C.

Możliwe grupy wykresów:

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()
    

Rysunek 11.5. Category plot with CCN data specification

Category plot with CCN data specification

CN+

Opis:

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.

Możliwe grupy wykresów:

Wykresy danych nominalnych

Przykład 11.4. Category plot with CN+ data specification

table 'survey_2':
    experiment  simple  extended
    'day1'           121.1   115.4
    'day2'           107.8   121.2
    'day3'           135.3   101.9
    'day4'           101.1   102.7

d = Data('survey_2', ['experiment', 'simple', 'extended'])
CategoryPlot(d).show()
    

Rysunek 11.6. Category plot with CN+ data specification

Category plot with CN+ data specification

N+

Opis:

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

Możliwe grupy wykresów:

Nominalne

Przykład 11.5. Category plot with N+ data specification

table 'survey_3':
    simple  extended
    121.1   115.4
    122.8   111.2
    122.3   101.9
    122.1   102.7

d = Data('survey_3', ['simple', 'extended'])
CategoryPlot(d).show()
    

Rysunek 11.7. Category plot with N+ data specification

Category plot with N+ data specification

Grupowanie serii

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.

Rysunek 11.8. Chart with grouped series

Chart with grouped series

Niespójne dane

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.

Wartości NULL

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.

Wielokrotne rekordy z tym samym kluczem

Notatka

Odnosi się to tylko do szablonów danych nominalnych

Niektóre dane wymagają różnych kluczy rekordu (nazw serii). W takiej sytuacji klucze powtarzające się są ignorowane, a na monitorze pojawi się komunikat.