Delikatne wprowadzenie do biblioteki Pandas w Pythonie — 5 pierwszych funkcji, które musisz znać

May 05 2023
Co to są pandy? Pandas to biblioteka do analizy danych w Pythonie. Jest to jedno z najbardziej kompletnych narzędzi do analizy danych.
Nauka Pand jest jak średnio wymagająca wędrówka: nie jest łatwa, ale dasz radę, jeśli chcesz się pocić. Zdjęcie Francesco Califano na Unsplash

Co to są pandy?

Pandas to biblioteka do analizy danych w Pythonie. Jest to jedno z najbardziej kompletnych narzędzi do analizy danych. Dzięki setkom funkcji i metod do manipulacji i analizy danych stało się jednym z najczęściej używanych narzędzi na świecie i jest podstawową biblioteką do analizy danych w Pythonie. Nauka może być onieśmielająca i osobiście zajęło mi kilka prób, aby naprawdę nauczyć się i zacząć regularnie używać.

Jak wypada w porównaniu z innymi narzędziami?

Chociaż nie jest to idealne porównanie, lubię postrzegać je jako hybrydę SQL i Excela. Ma znajomą tabelaryczną strukturę danych, DataFrame, która jest podobna do tabeli SQL (lub potencjalnie bardzo dobrze sformatowanego arkusza programu Excel) i możemy wykonywać standardowe zadania manipulacji danymi, takie jak sortowanie, filtrowanie, obracanie, agregacja i inne.

Ponadto DataFrame mają wiele wbudowanych metod i funkcji analitycznych i wizualizacyjnych podobnych (i często przewyższających) te z Excela. Byłoby to prawie niemożliwe do replikacji w SQL.

Zagłębię się bardziej w szczegóły DataFrame w innym poście, ale chciałem podzielić się pierwszymi funkcjami, których powinieneś się nauczyć, aby zacząć eksplorować swoje dane.

Co muszę teraz wiedzieć?

Najpierw krótka lekcja słownictwa. Funkcje i metody są podobnymi koncepcjami, główna różnica polega na tym, że podczas gdy obie wykonują zestawy instrukcji, metody są powiązane z określonymi obiektami, np. ciągami znaków, listami, ramkami danych, podczas gdy funkcje nie.

Jedną z głównych wskazówek dotyczących składni jest to, że funkcje można wywoływać w próżni, np. moja_funkcja(a, b, c), podczas gdy metody są powiązane z obiektem za pomocą notacji kropkowej: moja_ramkadanych.metoda(a, b, c). Są na tyle podobne, że nie chciałem zaśmiecać tytułu!

Aby zbadać te funkcje i metody, zebrałem dane dotyczące cen ropy od stycznia 2013 r. do sierpnia 2017 r.

pd.read_csv()

Pierwszą rzeczą, którą musimy zrobić, to wczytać nasze dane. Możliwe jest tworzenie ramek danych z typów danych Pythona, takich jak słowniki i listy, jednak w praktyce jest to rzadko wykonywane. Bardziej prawdopodobne jest, że jako analityk będziesz wczytywał dane z prostego pliku, takiego jak plik csv, arkusz programu Excel lub baza danych SQL. Wczytywaniem danych zajmiemy się później, ale warto mieć świadomość, że oprócz read_csv funkcje read_excel, read_sql i inne mogą być używane do czytania z innych źródeł.

Spójrzmy:

Najpierw importujemy bibliotekę pandas jako pd, następnie wczytujemy ją do naszego csv, przechowując ją w zmiennej oil_prices.

To wszystko! Pomyślnie odczytaliśmy plik oil_prices.csv i zapisaliśmy go w zmiennej „oil_prices”… ale co teraz?

.head() i .tail()

W następnym kroku sprawdźmy nasze dane. W tych danych jest 1218 wierszy, więc nie ma możliwości przejrzenia ich wszystkich, a nawet byśmy tego nie chcieli. Metody .head() i .tail() DataFrame pozwalają nam przyjrzeć się odpowiednio pierwszym n i ostatnim n wierszom naszej ramki DataFrame. Domyślnie n=5.

Nasza DataFrame ma 4 kolumny. NaN służy do reprezentowania brakujących wartości.

Jak dotąd nasze dane wyglądają dobrze — nasza data, dcoilwtico (cena ropy), zmiana_ceny i kategoria_zmian to nagłówki naszych kolumn, a pogrubione liczby po lewej stronie reprezentują nasz indeks. Oba mogą być używane do uzyskiwania dostępu do danych.

Patrząc na same dane, nie ma tu oczywistych błędów: NaN jest jedną z dwóch wartości w Pandach używanych do reprezentowania brakujących danych. Nie będziemy się teraz w to zagłębiać, ale w tym momencie zostawimy je bez zmian. Brakujące dane nie sprawią nam problemów w pracy nad tym artykułem.

Jeśli chcemy sprawdzić więcej (lub mniej) danych, możemy przekazać liczbę całkowitą do metody, aby wyświetlić określoną liczbę wierszy:

Zwykle nie odbiegam od domyślnej wartości 5, ale od czasu do czasu pomocne jest spojrzenie na więcej danych.

Metoda ogona, co być może nie jest zaskoczeniem, działa podobnie do metody head, ale pokazuje nam ostatnie n wierszy danych. Może to być szczególnie przydatne w przypadku danych typu szereg czasowy — będziemy mogli wyświetlić ostateczne daty w naszym zbiorze danych (jeśli zostały posortowane) i możemy sprawdzić, czy rzeczy takie jak brakująca częstotliwość lub formatowanie różnią się znacząco od naszych pierwszych kilku wierszy.

Nic nie wygląda na końcu naszych danych.

.informacje()

Wizualna kontrola naszych danych może pomóc w szybkim ujawnieniu oczywistych problemów, ale aby naprawdę wiedzieć, co się dzieje, musimy zajrzeć pod maskę. Metoda info() daje nam przydatne podsumowanie naszej ramki DataFrame, w tym informacje takie jak jej rozmiar pod względem wierszy i kolumn, wykorzystanie pamięci, typ danych każdej kolumny, liczba brakujących wartości i typ indeksu, który mamy. Rozbijmy to:

Tutaj możemy szybko zobaczyć, że w każdej kolumnie oprócz daty brakuje wartości. Zgłaszanie liczby innej niż null jest nieco sprzeczne z intuicją i istnieją bardziej szczegółowe metody wyszukiwania brakujących danych, ale jeśli wartość nie jest równa liczbie wierszy, w tej kolumnie brakuje danych.

Na przykład możemy zobaczyć, że na podstawie danych wyjściowych znajduje się 1218 wpisów (wierszy), aw kolumnach „cena_zmiana” i „kategoria_zmiany” znajduje się 1216 wartości innych niż null, co wskazuje na brak dwóch wartości. Są to te same brakujące wartości, które widzieliśmy w naszym wywołaniu metody .head().

Innym potencjalnym problemem z danymi, który możemy tutaj zauważyć, jest to, że nasza kolumna daty ma typ „obiekt”. Obiekty są domyślnym typem danych łańcuchowych, a podczas wczytywania kolumn dat Pandas domyślnie ustawi obiekt, chyba że określono inaczej. Ale Pandas ma dedykowany typ danych datetime, który pozwala nam robić takie rzeczy, jak agregacja szeregów czasowych i rozdzielanie dat.

Powinniśmy więc tutaj zmienić typ danych. Można to zrobić na kilka sposobów, ale zamierzam użyć argumentu parse_dates w read_csv, który instruuje funkcję, aby rzutowała kolumny określone jako datetime64, jeśli to możliwe.

I voila, nasz typ kolumny to teraz datetime64. Przyjrzyjmy się teraz naszej ostatniej funkcji, która służy zarówno jako podsumowanie analityczne, jak i dodatkowy krok kontroli jakości danych.

.opisać()

Metoda opis zwraca statystyki podsumowujące dla naszych kolumn. Jest to naprawdę pomocne w zrozumieniu rozkładów w danych i statystykach podsumowujących, takich jak średnia i mediana. Ponadto statystyki te mogą ujawnić takie rzeczy, jak skrajne wartości odstające lub inne potencjalne problemy, które wymagają leczenia, zanim będziemy mogli z całą pewnością zgłosić jakiekolwiek dane.

Zauważ, że domyślnie ta funkcja „opisuje” tylko kolumny liczbowe. Otrzymujemy świetne informacje na temat rozkładu danych w tych kolumnach. Spojrzenie na min i max może nas poinformować, czy istnieją jakieś wartości ekstremalne, takie jak ceny ujemne (z wyjątkiem tego jednego razu podczas Covid) lub wartości absurdalne, takie jak 99999. Widzimy również, że nasza średnia zmiana ceny wyniosła -0,037, co wskazuje, że średnia zmiana wyniosła 3,7 procentowy spadek ceny. Nasza mediana (50. percentyl) wynosi jednak 0, co wskazuje, że w najbardziej typowy dzień nie odnotowano żadnych zmian.

Wreszcie, nasza liczba może również powiedzieć nam o brakujących wartościach. Ponieważ count liczy tylko wartości inne niż null, po raz kolejny widzimy, że nasza kolumna dcoilwtico ma 1175 wierszy z brakującymi danymi.

A co z naszymi innymi kolumnami? Można powiedzieć, aby opis skupił się na określonych typach danych w kolumnach. Wolę inne metody sprawdzania kolumn kategorycznych, ale spójrzmy na include=”all”, która obejmie wszystkie kolumny.

datetime_is_numeric=True pozwala nam spojrzeć na rozkład dat.

Dane wyjściowe zaczynają być dość brzydkie, ale jeśli spojrzymy na change_category, zobaczymy, że było 1216 wartości innych niż null, 3 unikalne wartości, z górną lub najczęstszą wartością ujemną. Ta wartość miała częstotliwość („freq”) równą 592, co wskazuje, że 592 wiersze odnotowały spadki cen.

Kilka metod, które omówiliśmy tutaj, pozwoli Ci szybko zorientować się w swoich danych i pozwoli zidentyfikować wiele najczęstszych problemów, które napotkasz z danymi. Istnieją setki metod i funkcji w Pandach, ale zapoznanie się z garstką szybko przyspieszy produktywność. Z biegiem czasu będziemy nadal eksplorować tę niesamowitą bibliotekę Pythona. Dziękuje za przeczytanie!

Jeśli Ci się podobało, byłoby nam miło, gdybyś zasubskrybował naszą publikację.

I zostaw nam komentarz, informując nas, co chciałbyś zobaczyć w następnej kolejności. Możesz również przesłać nam swój własny tekst do promowania, więc nie wstydź się, jeśli chcesz zostać współtwórcą.

Miłej nauki!