Praca z danymi rzadko bywa tak prosta, jak mogłoby się wydawać na pierwszy rzut oka. Szczególnie wtedy, gdy interesujące nas liczby znajdują się w plikach PDF. Dokument wygląda czytelnie dla człowieka, ale dla programu komputerowego bywa prawdziwą zagadką. Dokładnie z taką sytuacją można się spotkać przy analizie historycznych danych giełdowych, gdzie część raportów zapisano w arkuszach Excel, a starsze zestawienia istnieją wyłącznie w formacie PDF.
Właśnie wtedy zaczyna się prawdziwa przygoda z przygotowaniem danych.
Gdy dane są w Excelu – wszystko idzie szybko
Pierwszy etap pracy bywa zaskakująco przyjemny. Nowsze zestawienia publikowane przez Giełdę Papierów Wartościowych dostępne są w arkuszach Excel, które można bez problemu pobrać i przetwarzać w Pythonie.
Wystarczy znać adres pliku, aby automatycznie pobrać arkusz i wczytać konkretną zakładkę z danymi. W praktyce oznacza to, że cały proces można zautomatyzować przy pomocy pętli. Program pobiera kolejne pliki, odczytuje ich zawartość i zapisuje dane w jednej strukturze.
W trakcie pracy pojawia się jednak drobna komplikacja. W pewnym momencie zmienia się struktura raportów i pojawia się dodatkowa kolumna. Takie sytuacje zdarzają się w realnych zbiorach danych częściej, niż można by przypuszczać. Wystarczy jednak dodać odpowiedni warunek w kodzie i dopasować sposób wczytywania plików.
Dane z arkuszy Excel można więc stosunkowo łatwo zebrać i przygotować do dalszej analizy.
Problem zaczyna się przy plikach PDF
Starsze raporty – obejmujące lata od 2002 do 2014 – zapisano w formacie PDF. Z punktu widzenia analizy danych to znacznie trudniejszy materiał. Program nie widzi w takim pliku tabeli, tylko fragmenty tekstu i elementy graficzne.
Pomocą okazuje się biblioteka tabula, która potrafi odczytać tabelę z dokumentu PDF i zamienić ją na strukturę danych w Pythonie, czyli DataFrame. W praktyce oznacza to możliwość dalszej pracy z danymi tak, jakby pochodziły z arkusza kalkulacyjnego.
Pierwszym krokiem jest pobranie wszystkich raportów w formacie PDF. Następnie trzeba je wczytać przy użyciu wspomnianej biblioteki. W trakcie analizy dokumentów można zauważyć ciekawą rzecz – w pewnym momencie zmienia się ich układ graficzny. Właśnie dlatego pliki trzeba przetwarzać w dwóch osobnych zakresach czasowych.
Już na tym etapie widać, że praca z danymi rzadko polega tylko na ich pobraniu.
Czyszczenie i przygotowanie danych
Niestety automatyczne odczytanie tabel z PDF nie daje idealnego rezultatu. Część kolumn zostaje połączona, inne wartości pojawiają się w niewłaściwych miejscach. W takiej sytuacji konieczne staje się ręczne przygotowanie danych.
Najpierw warto porównać odczytaną tabelę z oryginalnym raportem. Dopiero wtedy widać, gdzie pojawiły się błędy i które elementy wymagają korekty. W kolejnym kroku można rozdzielić kolumny, oczyścić zbędne fragmenty tekstu i przygotować poprawne nazwy pól.
W przypadku raportów o różnej strukturze potrzebne okazują się dodatkowe funkcje pomocnicze, które ułatwiają przekształcanie danych do wspólnego formatu. Po wykonaniu tych operacji można połączyć wszystkie zestawienia w jedną tabelę obejmującą pełną historię.
Na końcu pozostaje już tylko uporządkowanie informacji i ich agregacja. W analizowanym przykładzie poszczególne spółki zostały przypisane do kategorii branżowych, co pozwoliło spojrzeć na dane w bardziej syntetyczny sposób. Dopiero wtedy liczby zaczynają tworzyć historię, którą można pokazać na wykresie.