KNIME czy Pentaho?
Do przetestowania KNIME zabierałem się od dłuższego czasu - nawet trochę dłużej. Kiedyś nawet zainstalowałem to oprogramowanie na swoim PC ale zraził mnie siermiężny interfejs, brak responsywności, złe skalowanie, nachodzące na siebie elementy okien dialogowych - nie wyglądało to profesjonalnie. Oprogramowanie zajmowało wiele miejsca na dysku i wyglądało na ciężkie - jego uruchomienie wymagało czasu. Nie pamiętam już gdzie ale niedawno gdzieś w Internecie przed moimi oczami pojawiła się reklama KNIME „Sophisticated analytics, intuitive interface. Our promise: to build the most intuitive and widely‑used environment for data science”. Dajmy zatem KNIME jeszcze jedną szansę.
Jeśli wpiszemy w Google "most popular etl tools" to nie zobaczymy żadnego linku do strony wymieniającej KNIME na pierwszej stronie. Dużo wiekszy optymizm jeśli wpiszemy "most popular Data Analytics / Data Science Platform" - wtedy duża szansa że link do informacji o tym oprogramowaniu będzie na pierwszej stronie rezultatów wyszukiwania. I to mówi nam jak to oprogramowanie jest postrzegane na rynku, jak jest użytkownane. KNIME samo o sobie mówi że jest oprogramowaniem "ETL, analityka danych, predykcyjna sztuczna inteligencja i tworzenie agentów świadomych danych". Rynek wykorzystuje to oprogramowanie właśnie głownie do "analizy i eksploracji danych", rzadziej jako typowy ETL.
Pierwsze wrażenie - instalacja i interfejs KNIME
Dużym plusem jest to, że oprogramowanie nie wymaga 'instalacji' - wystarczy po prostu rozpakować pobrany plik do dowolnego katalogu PC. Możemy pobrać z ich strony zip lub exe ktory sam rozpakuje się wskazanego katalogu. W przypadku 'self-extracting archive' dla Windows (można też pobrać wersję dla Linux) będzie to plik 634 MB. Po rozpakowaniu na dysku komputera, zajmie on około 1.2GB. Oprogramowanie do działania nie wymaga żadnej bazy danych.
Oprogramownie napisane zostało w Java (Eclipse) i dlatego bardzo lubi pamięć - możesz uruchomić go mając 4GB RAM ale optymalnie twój komputer powinien posiadać nie mniej niż 8GB RAM dla programu. Przed uruchomieniem wejdz do pliku knime.ini (ten sam katalog w ktorym uruchamiasz knime.exe) i ustaw zmienną '-Xmx' (np. -Xmx10g).
Nowy KNIME wygląda ładnie. Nie razi już siermieżny wygląd ikon wezłów ('nodes') i połączeń miedzy nimi. Widać że programiści włożyli w poprawę wyglądu dużo pracy. Niestety, nadal jest problem ze skalowaniem okien dialogowym i np. po otwarciu właściwości węzłów trzeba okna powiekszać ręcznie by ujrzeć wszystkie informacje. Niektóre pola są zbyt wąskie i trzeba je rozciągać myszką, czcionki mikroskopijne i nieczytelne. Pentaho Kettle/PDI prezentuje się w tej kategorii nieco lepiej.
Przepływy, węzły - podstawowe komponenty KNIME
Jak w każdym narzędziu ETL i podobnym mamy workflow (w Pentaho jest to 'Transformation') na którym umieszczamy węzły (nazwane 'nodes') które sterują przepływem lub wykonują pewną pracę w przepływie. W Pentaho te węzły nazywają się 'steps'. Dokumentację KNIME znajdziemy na stronie producenta oprogramowania.

W Pentaho PDI/Kettle mamy pojęcie 'jobs' których używamy do organizacji bardziej złożonych struktur, uruchamiania warunkowego, definicji zmiennych dla przepływów... W KNIME nie mamy jobs - możemy uzyskać podobną fukcjonalność stosując komponenty, parametry, warunki. - wszystko osadzone na poziomie workflow. Wydaje się że Pentaho zapewnia lepszą czytelność i logiczność podziału tej struktury na Transformacje i Zadania, szczególnie jeśli budujemy przepływy ETL.
Często nasz przepływ zawiera tak wiele węzłów że umieszczenie ich na jednym workflow powoduje iż nie jest on czytelny - dużo lepszym pomysłem jest rozbicie takiego przepływu na kilka i połączenie ich strukturą nadrzędną. To co w KNIME nie zachwyca to przechowywanie ustawień Workflows. W Pentaho zarówno transformacje jak i jobs sa przechowywane W JEDNYM pliku, w formacie XML. Plikom można nadać logiczne nazwy, ważą trywialnie mało, są łatwe do przenoszenia między użytkownikami, platformami. Tymczasem KNIME przechowuje ustawienia każdego workflow w katalogu i wielu plików. Każdy z węzłów ma swoj podkatalog. Mogą się tam także znaleźć dane jeśli są buforowane. Wiele plików zajmujących całkiem sporo miejsca na dysku. W tej kategorii zdecydowanym zwycięzcą jest Pentaho.
Analiza koszyka zakupowego algorytmem FPGrowth
Jeśli już jesteś na tej stronie, zapewne wiesz czym jest 'analiza koszyka zakupowego'. Dla wszystkich pozostałych którki wstęp: analiza koszyka zakupowego to technika eksploracji danych, która analizuje wzorce współwystępowania i określa siłę powiązania między produktami kupowanymi razem. Nazywamy ją również eksploracją częstych zestawów przedmiotów lub analizą asocjacji. Wykorzystuje ona te wzorce rozpoznawane w zakupach klientów, aby zrozumieć ich zachowania - zidentyfikowanie relacji między przedmiotami kupowanymi przez klientów.
Źródłem wzorców, jest ogromna ilość danych; transakcji zakupowych. Takie analizy pomagają to w procesach podejmowania decyzji związanych z marketingiem krzyżowym, projektowaniem katalogów, rekomendacjami produktów w sklepach internetowych itd.
Dla przykładu; kiedy klienci kupują piwo, mogą również kupić orzeszki. Ta relacja jest przedstawiona jako warunek, jak poniżej.
JEŚLI piwo TO orzeszki
To oznacza, że produkty podane po prawej stronie są częściej kupowane razem z produktami po lewej stronie. Analiza koszyka zakupowego w eksploracji danych pomaga nam lepiej zrozumieć te zależności i pokazuje zależność decyzji zakupowych.
Najczęściej stosowane algorytmy w analizie koszyka zakupowego
Apriori (zobacz opis jego użycia)
– klasyczny algorytm generowania częstych zestawów i reguł asocjacyjnych.
– podstawowy w wielu bibliotekach (np. mlxtend, Orange, Weka).
Eclat
– oparty na przecięciach zbiorów transakcji (tidsets).
– szybki przy mniejszych przestrzeniach cech.
FP-Growth (Frequent Pattern Growth)
– wydajniejszy niż Apriori, bo unika generowania zbędnych kandydatów.
– używa struktury drzewa (FP-tree).
Przykłady które znajdziesz w Internecie najczęściej bazują właśnie na Apriori. Ten algorytm jest dobrym wyborem dla demonstracji odnajdywania reguł asocjacyjnych, do testów, ale zupełnie nie nadaje się do zastosowania w realnym świecie gdzie mamy setki tysiecy a nawet miliony transakcji, gdzie transakcje mogą zawierać nawet dziesiątki artykułów. Elcat także jest algorytmem który może być użyty tylko dla analizy niewielkich zbiorów danych.
Uruchomienie algorytmu FP-Growth
Jeśli planujesz analizować prawdziwe zbiory danych, realne transakcje klientów, najlepszym pomysłem będzie użycie środowiska Apache Spark. To oprogramowanie posiada implementację algorytmu FP-Growth. Analizę koszykową w Apache Spark z użyciem FP-Growth warto wykonywać ze względu na możliwość efektywnego przetwarzania bardzo dużych zbiorów danych, optymalne wykorzystanie pamięci dzięki kompresji wzorców oraz przetwarzanie rozproszone, które pozwala na szybkie wykonanie obliczeń na wielu maszynach jednocześnie.
Jak typy danych i indeksy wpływają na prędkość działania i wydajność bazy danych
To w jakim formacie przechowujesz dane w bazie danych ma znaczenie. Ogromne. Mają też znaczenie indeksy. Właściwe połaczenie typów danych z indeksami jest kluczowe dla wydajności całej bazy danych. W testach poniżej mamy dwie proste tabele wypełnione pseudolosowymi danymi. Testy pokazują jak zmienia się prędkość wykonania zapytań w zależności od typów danych i obecności lub braku indeksów.
Testowe tabele
Utworzymy dwie proste tabele do testow; 'demo_table1' i 'demo_table2'. Obie tabele maja na celowo ustawiony typ danych varchar dla kolumny 'random_number' by zademonstrować różnice czasie wykonania zapytania dla różnych typów danych.
CREATE TABLE demo_table1 (
random_number VARCHAR(8),
random_text VARCHAR(100)
);
CREATE TABLE demo_table2 (
random_number VARCHAR(8),
random_text VARCHAR(100)
);
Wypełniamy tabele danymi
Umieszczamy pseudolosowe dane w testowych tabelach. W każdej tableli umieszczamy dwa miliony rekordów.
Tabela demo_table1:

Tabela 'demo_table2':

Instalacja Apache Spark w Windows
By korzystać z Apache Spark, potrzebujemy Hadoop. Hadoop to system do przetwarzania dużych zbiorów danych w sposób rozproszony na wielu komputerach. Składa się z HDFS (system plików) i MapReduce (model obliczeniowy). Apache Spark jest do pobrania w jednym z trzech pakietow:
- Prebuilt for Apache Hadoop
- Prebuild for Apache Hadoop (Scala)
- Prebuild with user-provided Hadoop
1. Pobranie Apache Spark
Ze strony https://spark.apache.org/downloads.html pobieramy pierwsza wersję; Prebuilt for Apache Hadoop. Pobrany plik *.tgz rozpakowujemy do pliku *tar który nastepnie rozpakujemy np w katalogu D:\spark-3.5.4-bin-hadoop3
Następnie dodajemy zmienną systemową 'SPARK_HOME' która wskazuje na katalog 'D:\spark-3.5.4-bin-hadoop3' oraz dodajemy '%SPARK_HOME%\bin' do zmiennej środowiskowej PATH.
2. Instalacja Hadoop
Spark wymagać będzie Hadoop do działania. Pobieramy odpowiednia wersje. Wersję dla której będziemy mieć Winutils - na stronie https://github.com/cdarlint/winutils, sprawdzisz dla której wersji dostępne jest narzędzie Winutils. Jesli np ostatnia wersją Winutils jest 'hadoop-3.3.6/bin' - pobierz Hadoop w wersji 3.3.6.
Pobrany plik *.gz rozpakowujemy najpierw do postaci *tar a nastepnie do katalogu docelowego programu, np. 'D:\hadoop'
3. Pobranie Winutils
Winutils.exe to narzędzie umożliwiające działanie Hadoop na Windowsie, emulując funkcje systemu plików Linuxa wymagane przez Hadoop. Wchodzimy na stronę https://github.com/cdarlint/winutils i pobieramy cale repozytorium ('Download zip'). Rozpakowujemy zip i wybieramy wersję Hadoop zgodna z naszym Hadoop zainstalowanym w kroku powyżej. Kopiujemy zawartość katalogu 'hadoop-x.x.x/bin' do katalogu 'D:\hadoop\bin' nadpisując kilka plików.
Następnie tworzymy zmienną 'HADOOP_HOME' wskazującą na 'D:\hadoop' oraz dodajemy '%HADOOP_HOME\bin%' do zmiennej środowiskowej PATH.