Jak wyciągnąć tabele z PDF i zamienić je w dane – praktyczny przykład pracy z raportami

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.