Procedura rank oblicza kolejność elementów w kolumnie oraz tworzy tabelę wyjściową z wartościami kolejności zamiast elementów kolumny. Najmniejsza wartość z tabeli wejściowej posiada wartość kolejności 1 w tabeli wyjściowej, a kolejne wartości z tabeli wejściowej mają wartość uporządkowaną zwiększaną o 1. Równe sobie wartości posiadają takie same wartości uporządkowania. Każda konwersja wykonywana jest dla każdej kolumny oddzielnie.
Aby użyć komendy rank niezbędne jest zaimportowanie specialized.data z modułu biblioteki Gython.
Składnia:
rank(alias.intable, alias.outtable, columns)
alias - alias wskazujący na bazę danych
intable - nazwa tabeli wejściowej
outtable - nazwa tabeli wyjściowej
columns - lista nazw kolumn, które mają zostać uporządkowane (jeżeli kolumny nie są wyszczególnione, wartości wszystkich kolumn będą uporządkowane)
Przykład 4.34. Rank procedure
table 'sport_cars': name weight speed cost 'skoda' 1200 260 10.000 'renault' 1360 280 10.500 'opel' 900 240 8.200 'VW' 1400 280 12.00 'Fiat' 1450 260 7.800 'Alfa Romeo' 1300 280 11.000 from specialized.data import rank rank('sport_cars', 'sport_cars_rank') tab = tableRead('sport_cars_rank') for i in range(len(tab)): for j in range(len(tab[i])): print tab[i][j], print
Output:
name weight speed cost skoda 2.0 2.5 3.0 renault 4.0 5.0 4.0 opel 1.0 1.0 2.0 VW 5.0 5.0 6.0 Fiat 6.0 2.5 1.0 Alfa Romeo 3.0 5.0 5.0
Procedura interpolate dokonuje interpolacji danych w kolumnach tabeli. Wynikiem jest nowa tabela. Tabela wyjściowa zawiera wartości niezależnych oraz zależnych zmiennych. Niezależna zmienna jest modyfikowana w sposób: zaczynając od najmniejszej wartości nowej obserwacji, dodawana jest wartość przyrostu równa parametrowi step. Odpowiednie zależne wartości są interpolowane w sześcienną krzywą składaną (wymaga granicy pochodnej o wartości równej 0). Aby poprawić czas wykonywania procedury zalecane jest zdefiniowanie kolumn z zmiennymi niezależnymi jako KLUCZ PODSTAWOWY.
Aby użyć komendy interpolate niezbędne jest zaimportowanie specialized.data z modułu biblioteki Gython.
Składnia:
interpolate(alias.intable, alias.outtable, independent, step, dependents)
alias - alias wskazujący na bazę danych
intable - nazwa tabeli wejściowej
outtable - nazwa tabeli wyjściowej
independent - nazwa kolumny z zmiennymi niezależnymi
step - Krok przyrostu wartości modyfikującej zmienne niezależne w tabeli wyjściowej
dependents - lista nazw kolumn z zmiennymi zależnymi. Jeżeli nazwa kolumny zależnej jest nieokreślona, wyliczenie jest przeprowadzane dla wszystkich kolumn.
Przykład 4.35. Interpolate procedure:
table 'interpolate_in': x y1 y2 0 None None 1 None None 3 None 8 4 5 6 6 9 None from specialized.data import interpolate interpolate('interpolate_in', 'interpolate_out', 'x', 0.5) tab = tableRead('interpolate_out') for i in range(len(tab)): for j in range(len(tab[i])): print tab[i][j], print
Output:
x y1 y2 3.0 NULL 8.0 3.5 NULL 7.0 4.0 5.0 6.0 4.5 6.0 NULL 5.0 7.0 NULL 5.5 8.0 NULL 6.0 9.0 NULL
Komenda sample tworzy tabelę z losowymi próbkami wartości z tabeli wejściowej. Tabela wyjściowa może zawierać wszystkie kolumny bądź tylko wybrane.
Składnia:
sample(alias.intable, alias.outtable, outsize, columnNames, withReplacement=0|1, seed)
alias - alias wskazujący na bazę danych
intable - nazwa tabeli wejściowej
outtable - nazwa tabeli wyjściowej
outsize - liczba wierszy w tabeli wyjściowej do próbkowania (np. liczba generowanych wartości próbki)
columnNames - lista nazw kolumn do próbkowania (jeżeli kolumny są nie określone wtedy wszystkie kolumny będą próbkowane)
withReplacement - jeżeli 1 próbkowanie z podmianą. Domyślnie: 0
seed - za pomocą tego parametru można określić stałe ziarno generatora liczb losowych. Jeżeli ten parametr jest nieokreślony, domyślnie przyjmowana jest losowa liczba generatora.
Przykład 4.36. Sample procedure
table 'transactions': id value type 110 210 'outgoing' 120 320 'outgoing' 130 480 'incoming' 140 338 'incoming' 150 270 'outgoing' 160 302 'incoming' 170 None 'outgoing' 180 420 'incoming' 190 570 'incoming' 200 380 'outgoing' 210 90 'incoming' 220 None 'incoming' 230 800 'incoming' 230 670 'outgoing' sample('transactions', 'transactions_sample1', 5, withReplacement=1, seed=1234) sample('transactions', 'transactions_sample2', 5, ['id', 'value'], seed=1234) strFormat = "%-10s%-10s%-10s" print "Table transactions_sample1" print strFormat%("id","value","type") trans None <- 'transactions_sample1': print $strFormat%(id,value,type) strFormat = "%-10s%-10s" print "\nTable transactions_sample2" print strFormat%("id","value") trans None <- 'transactions_sample2': print $strFormat%(id,value)
Output:
Table transactions_sample1 id value type 150 270 outgoing 110 210 outgoing 210 90 incoming 130 480 incoming 230 800 incoming Table transactions_sample2 id value 150 270 160 302 170 None 190 570 230 800
Komenda tableSplit dzieli tabelę w dowolną ilość tabel. Można dostarczyć ilość tabel określonych na liście reguł podziału lub dostarczyć tylko jedną tabelę z dodatkową kolumną GroupId. Kolumna GroupId zawiera identyfikatory grup, których wiersze są oznaczone.
Tabela wejściowa może być umiejscowiona w innej bazie danych niż tabele wyjściowe, ale niektóre bazy danych są niekompatybilne. Na przykład, tabela mySQL nie może być podzielona w tabelach MSSQL ponieważ MSSQL nie wspiera typu danych double. Co więcej, tabele wyjściowe mogą być umiejscowione w różnych bazach danych. Jeżeli chcesz użyć tej funkcjonalności, musisz określić alias dla każdej bazy danych, którą chcesz użyć.
Składnia:
tableSplit(alias.inTable[, group = 0 | 1][, split = l][, seed = n][, output = l])
Znaczenie parametrów wyjaśnione jest poniżej:
alias - alias wskazujący na bazę danych
inTable - nazwa tabeli wejściowej
inTable – ustaw ten parametr na 1 jeżeli chcesz, jeśli chcesz stworzyć przy pomocy tableSplit tylko jedną tabelę z dodaną kolumną GroupId, która zawiera identyfikatory grup, do których zawiera bieżące wiersze. Domyślnie parametr ten jest ustawiony na 0, dlatego tableSplit daje wynik tak wielu tabel jak wiele użytych jest ról podziału.
split - określa rozmiar podziału. Na przykład split = [3,7] wygeneruje dwie tabele z 30% oraz 70% losowo wziętych wierszy z tabeli wejściowej. Możliwe jest określenie więcej niż dwa udziały podziału, np. split = [10, 20, 30, 10, 30] dostarczy 5 tabel z wierszami podzielonymi procentowo na 10%, 20%, 30%, 10% and 15 % z tabeli wejściowej.
seed - za pomocą tego parametru można określić stałe ziarno dla generatora liczb losowych. Jeżeli ten parametr nie jest określony, użyta zostanie domyślnie losowa liczba generatora.
output - użyj tego parametru do określenia konwencji nazewnictwa tabeli wyjściowych. Jeżeli parametr nie jest dostarczony, tableSplit uzyskane nazwy tabel wyjściowych są kombinacją nazwy tabeli wejściowej i liczby – np. jeżeli nazwa tabeli ma nazwę „TEST_data” i podzielisz ją na dwie tabele, nazwy wyjściowe będą "TEST_data_1", "TEST_data_2".
Możliwe jest także określenie prefiksu nazwy tabeli wyjściowej – np. wyjście=”splits” wygeneruje "splits_1", "splits_2", "splits_3", itd.
Możesz także dostarczyć określone nazwy wyjścia. W takim przypadku liczba dostarczonych nazw musi się zgadzać z liczbą reguł podziału, np. wyjście=["a", "b"], podział=[3, 4]
Przydział wierszy do grup/tabel jest wykonywane przez procedurę losową. Dla każdej tabeli występuje prawdopodobieństwo (określone przez listę reguł podziału), że bieżący wiersz będzie przypisany do tej konkretnej tabeli. Jeżeli próbujesz podzielić tabelę na dwie równe części split = [1,1]), liczba wierszy dla każdego z nich może być trochę różna niż dokładnie 50% w stosunku do wierszy tabeli wejściowej, ale suma liczby wierszy tabel wyjściowych będzie równa liczbie wierszy tabeli wejściowej.
Rozbieżność pomiędzy proporcją reguł podziału i aktualnej liczbie wierszy w tabelach wyjściowych zmniejsza się gdy ilość wierszy w tabeli wejściowej rośnie.
Przykład 4.37. Split table
table 'sport_cars': name weight speed cost 'skoda' 1200 260 10.000 'renault' 1360 280 10.500 'opel' 900 240 8.200 'VW' 1400 280 12.00 'Fiat' 1450 260 7.800 'Alfa Romeo' 1300 280 11.000 # This yields two tables - "sport_cars_part_1" and "sport_cars_part_2" tableSplit('sport_cars', split=[1, 2], seed=124, output=['sport_cars_part']) print 'First part:' trans None <- 'sport_cars_part_1': print name,weight,speed,cost print 'Second part:' trans None <- 'sport_cars_part_2': print name,weight,speed,cost
Output:
First part: opel 900 240 8.2 Second part: skoda 1200 260 10.0 renault 1360 280 10.5 VW 1400 280 12.0 Fiat 1450 260 7.8 Alfa Romeo 1300 280 11.0
Procedura transpose wykonuje transpozycji tabeli (kolumny są zamieniane z wierszami). W tabeli wyjściowej kolumna nazwana ‘name’ tworzona jest z wartościami, które w tej kolumnie są nazwami kolumn z tabeli wejściowej o nazwie ‘columnX’ (gdzie X jest numerem wiersza z tabeli wejściowej). Transpozycja powiedzie się tylko wtedy, gdy typ danych dla wszystkich kolumn tabeli wejściowej może być uogólniony do jednego typu danych.
Aby użyć komendy transpose niezbędne jest zaimportowanie specialized.data z modułu biblioteki Gython.
Składnia:
transpose(alias.intable, alias.outtable)
alias - alias wskazujący na bazę danych
intable - nazwa tabeli wejściowej
outtable - nazwa tabeli wyjściowej
Przykład 4.38. The transpose procedure
table 'matrix': a b c 1 2 3 4 5 6 7 8 9 from specialized.data import transpose tableDelete('trans_matrix') transpose('matrix', 'trans_matrix') tab = tableRead('trans_matrix') for i in range(len(tab)): for j in range(len(tab[i])): print tab[i][j], print
Output:
name column1 column2 column3 a 1.0 4.0 7.0 b 2.0 5.0 8.0 c 3.0 6.0 9.0
Komenda tablesCompare wyświetla podstawowe informacje o porównaniu dwóch tabel:
kolumny występujące tylko w pierwszej tabeli
kolumny występujące tylko w drugiej tabeli
kolumny, które posiadają różny typ danych
liczba wierszy z tą samą wartośćią klucza
liczba nadmiarowych wierszy w pierwszej tabeli
liczba nadmiarowych wierszy w drugiej tabeli
liczba wierszy z dopasowaniem kluczy i różnicą wartości w obu tabelach
Możliwe jest mapowanie nazw kolumn z jednej tabeli do innej nazwy kolumny w innej tabeli
Wiersze z wartościami kluczy NULL są pomijane.
Składnia:
tablesCompare(alias.table1, key1, alias.table2, key2[, {var1: var2,...}][, silent= 0 | 1])
alias - alias wskazujący na bazę danych
table1, table2 - nazwy porównywanych tabel
key1, key2 - klucze, które mają byc użyte do porównania.
var1, var2 - odpowiadające sobie kolumny w tabeli (jeśli żadne kolumny nie zostaną tu wymienione, zakładane jest, że kolumny w obu tabelach muszą nazywać się tak samo)
silent - jeżeli 1 - wynik porównania nie jest wyświetlany w nowym oknie. Domyślnie: 0
Przykład 4.39. The tablesCompare procedure
table 'compare1': format c INTEGER, d INTEGER a b c d f 1 1 None None 1 2 2 None None 2 3 3 None None 1 4 4 None None 2 6 6 None None 1 7 7 None None 2 8 8 None None 1 table 'compare2': format d VARCHAR(32), e INTEGER aa bb d e f 4 4 None None 1 5 5 None None 1 6 5 None None 2 7 5 None None 2 8 8 None None 1 result = tablesCompare('compare1', 'f','compare2', 'f',silent=1) print "Comparison - (tablesCompare('compare1', 'f','compare2', 'f')):" print "Variable presented only in first table:", result.columnsInFirst print "Variable presented only in second table:", result.columnsInSecond print "Variables with different types:", result.columnsWithDifferentTypes print "Matching rows:",result.matchingRows print "Unmatched rows in the first table:", result.unmatchedRowsInFirst print "Unmatched rows in the second table:", result.unmatchedRowsInSecond print "Rows with different values:",result.rowsWithDifferentValues result = tablesCompare('compare1', 'a','compare2', 'aa', {'b' : 'bb'},silent=1) print "\nComparison - (tablesCompare('compare1', 'a','compare2', 'aa', {'b' : 'bb'})):" print "Variable presented only in first table:", result.columnsInFirst print "Variable presented only in second table:", result.columnsInSecond print "Variables with different types:", result.columnsWithDifferentTypes print "Matching rows:",result.matchingRows print "Unmatched rows in the first table:", result.unmatchedRowsInFirst print "Unmatched rows in the second table:", result.unmatchedRowsInSecond print "Rows with different values:",result.rowsWithDifferentValues
Output:
Comparison - (tablesCompare('compare1', 'f','compare2', 'f')): Variable presented only in first table: ['a', 'c', 'b'] Variable presented only in second table: ['bb', 'aa', 'e'] Variables with different types: ['d'] Matching rows: 5 Unmatched rows in the first table: 2 Unmatched rows in the second table: 0 Rows with different values: 0 Comparison - (tablesCompare('compare1', 'a','compare2', 'aa', {'b' : 'bb'})): Variable presented only in first table: ['c'] Variable presented only in second table: ['e'] Variables with different types: ['d'] Matching rows: 4 Unmatched rows in the first table: 3 Unmatched rows in the second table: 1 Rows with different values: 3