Dynamiczne pobieranie danych poprzez Web API i funkcje Power Query
Ostatni projekt, którym się zajmuje dotyczy analizy danych kryptowalut. Dane do analizy miałem pozyskać z popularnego serwisu coinmarketcap.com. Serwis oferuje dostęp do danych zbieranych regularnie poprzez Web API. W wersji darmowej niestety niewiele możemy pobrać, ale postanowiłem potraktować to źródło jako słownik, który wykorzystam do pobrania reszty danych.
Połączenie z Web API CoinMarketCap
Jak zatem połączyć się z CoinMarketCap? Wystarczy zarejestrować się na stronie pro.coinmarketcap.com i pobrać swój klucz API. Następnie przechodzimy do Power BI Desktop i wybieramy odpowiednio Home -> Get data -> Web.
Następnie przechodzimy do karty Advanced. W polu URL parts podajemy link do strony, z której chcemy pobrać dane. Dodatkowo w polu HTTP request header parameters wpisujemy wartość X-CMC_PRO_API_KEY i w polu obok podajemy otrzymany klucz API.
Nasze dane zostaną załadowane do edytora Power Query. Wykonałem następnie kilka kroków w celu oczyszczenia danych i moja tabela ostatecznie wygląda następująco:
Połączenie z Web API CryptoCompare
W celu pobrania danych dziennych dotyczących kryptowalut zdecydowałem się skorzystać z serwisu cryptocompare.com. W wersji darmowej oferują oni 100 000 zapytań miesięcznie. Postanowiłem w ten sposób pobierać historię 50 kryptowalut o obecnie największej kapitalizacji rynkowej. W tym celu połączyłem się z API po raz kolejny. Tym razem połączenie z API wygląda następująco:
https://min-api.cryptocompare.com/data/v2/histodayfsym=BTC&tsym=USD&allData=true&api_key=KluczAPI gdzie KluczAPI to Twój unikalny klucz, który możesz wygenerować po rejestracji w serwisie. W ten sposób uzyskaliśmy pełne dane dotyczące relacji Bitcoin/USD.
Utworzenie tabeli przy pomocy Power Query
Pozostaje teraz pytanie – jak uzyskać dane dla pozostałych 49 walut? Przecież nie będziemy kopiować każdej z nich do oddzielnej tabeli. Aby pobrać dane dla pozostałych kryptowalut posłużymy się funkcjami Power Query. Po edycji tabeli BTC/USD zmieniłem jej nazwę na Coin Pull. Przejdźmy teraz do edytora zaawansowanego. W pierwszej linii wpisz (CoinQuote as text) as table =>. Następnie popraw link, którego wcześniej użyliśmy zmieniając atrybut BTC na „&CoinQuote&”. Po zaakceptowaniu zmian nasza tabela zmieniła się w funkcję Power Query.
Utworzenie tabeli faktów przy użyciu Web API i funkcji Power Query
Pozostaje nam teraz przejść do utworzenia naszej tabeli faktów. Posłużymy się w tym celu utworzonym słownikiem. Utwórz puste zapytanie w Power Query poprzez wybór Home -> New source -> Blank query. Nazwiemy to zapytanie fCoins. Następnie w pasku formuły wpisz =dCoins. W ten sposób utworzysz tabelę na identyczną do tabeli dCoins. Kolejnym krokiem będzie dodanie nowej kolumny, która wykorzysta utworzoną przez nas funkcję. W tym celu udaj się do Add Column -> Invoke Custom Function. Wywoła to kolejne okno, w którym ustawisz nazwę nowej kolumny (CoinData), wybierzesz funkcję (Coin Pull), oraz wybierzesz parametr CoinQuote – w tym celu posłużymy się kolumną symbol. Po kliknięciu OK zostanie utworzona nowa kolumna o nazwie CoinData, której rekordem będzie tabela.
Wystarczy teraz tylko rozwinąć tabelę wybierając interesujące nas kolumny i dokonać niezbędnych transformacji w celu oczyszczenia danych. Tabela fCoins prezentuje się jak poniżej.
Podsumowanie
W kilku prostych krokach przygotowaliśmy model danych w oparciu o źródła internetowe pochodzące z serwisów CoinMarketCap oraz CryptoCompare. Podstawę naszego modelu danych stanowi tabela wymiarów zawierająca 50 kryptowalut o obecnie najwyższej kapitalizacji rynkowej oraz tabela faktów zawierająca dane dotyczące tych walut w układzie dziennym. W artykule opisałem jak w Power BI Desktop nawiązać połączenie poprzez Web API, a także opisałem proces tworzenia tabeli danych na podstawie funkcji Power Query.