Transformacja danych podstawowych u pand za pomocą tych trzech przydatnych technik

Zagłębienie się w filtrowanie, manipulowanie i funkcjonowanie

Photo by Milada Fakuriana on Unsplash

Przypomnij sobie, kiedy ostatni raz pracowałeś z ładnie sformatowanym zbiorem danych. Dobrze nazwane kolumny, minimalne braki danych i właściwa organizacja. To miłe uczucie – niemal uwalniające – zostać pobłogosławionym danymi, których nie trzeba czyścić i przekształcać.

Cóż, jest miło, dopóki nie otrząsniesz się ze swoich marzeń i nie zaczniesz majstrować przy beznadziejnym chaosie połamanych rzędów i bezsensownych etykiet przed tobą.

Nie ma czegoś takiego jak czyste dane (w ich oryginalnej formie). Jeśli jesteś analitykiem danych, wiesz o tym. Jeśli dopiero zaczynasz, powinieneś to zaakceptować. Aby efektywnie z nimi pracować, będziesz musiał przekształcić swoje dane.

Porozmawiajmy o trzech sposobach, aby to zrobić.

Filtrowanie — ale wyjaśnione właściwie

Porozmawiajmy o filtrowaniu — ale nieco głębiej, niż zwykle. Skuteczne filtrowanie, będące jedną z najpowszechniejszych i najbardziej przydatnych operacji transformacji danych, jest umiejętnością niezbędną każdemu badaczowi danych. Jeśli znasz Pandy, jest to prawdopodobnie jedna z pierwszych operacji, jakie nauczyłeś się wykonywać.

Przeanalizujmy, używając mojego ulubionego, dziwnie wszechstronnego przykładu: ramki danych zawierającej oceny uczniów, trafnie nazwanej grades:

Obraz według autora

Zamierzamy odfiltrować wszelkie wyniki poniżej 90, ponieważ tego dnia zdecydowaliśmy, że będziemy słabo wyszkolonymi nauczycielami, którzy obsługują tylko najlepszych uczniów (proszę, nigdy tak naprawdę nie róbcie). Standardowy wiersz kodu umożliwiający osiągnięcie tego celu jest następujący:

oceny[oceny['Wynik'] >= 90]
Obraz według autora

Zostaje nam Jack i Hermiona. Fajny. Ale co dokładnie się tutaj wydarzyło? Czemu czy powyższa linia kodu działa? Zanurkujmy trochę głębiej, przyglądając się wynikowi wyrażenia znajdującego się w zewnętrznych nawiasach powyżej:

oceny ['Wynik'] >= 90
Obraz według autora

Ah, dobrze. To ma sens. Wygląda na to, że ta linia kodu zwraca obiekt Pandas Series, który przechowuje wartość Boolean ( True / False ) wartości określone przez co >= 90 zwracane dla każdego pojedynczego wiersza. Jest to kluczowy etap pośredni. Następnie ta seria wartości logicznych jest przekazywana do zewnętrznych nawiasów i odpowiednio filtruje wszystkie wiersze.

Na koniec wspomnę również, że to samo zachowanie można osiągnąć za pomocą loc słowo kluczowe:

stopni.loc[oceny['Wynik'] >= 90]
Obraz według autora

Istnieje wiele powodów, dla których możemy zdecydować się na skorzystanie z tej opcji loc (jednym z nich jest to, że faktycznie pozwala nam filtrować wiersze i kolumny w ramach jednej operacji), ale otwiera to drogę do operacji na Pandach z puszki Pandory, które najlepiej pozostawić w innym artykule.

Na razie ważnym celem nauki jest to: kiedy filtrujemy w Pandach, myląca składnia nie jest jakąś dziwną magią. Musimy po prostu podzielić go na dwa etapy składowe: 1) uzyskanie serii logicznej wierszy spełniających nasz warunek oraz 2) użycie serii do odfiltrowania całej ramki danych.

Dlaczego jest to przydatne, możesz zapytać? Cóż, ogólnie rzecz biorąc, użycie operacji bez zrozumienia, jak one faktycznie działają, może prowadzić do mylących błędów. Filtrowanie to przydatna i niezwykle powszechna operacja, a teraz wiesz, jak to działa.

Przejdźmy dalej.

Piękno funkcji lambda

Czasami Twoje dane wymagają transformacji, które po prostu nie są wbudowane w funkcjonalność Pand. Spróbuj, jak możesz, żadna ilość przeszukiwania Stack Overflow ani dokładnego przeglądania dokumentacji Pand nie ujawni rozwiązania Twojego problemu.

Wprowadź funkcje lambda — użyteczną funkcję językową, która doskonale integruje się z Pandami.

Oto krótki przegląd, jak działają lambdy:

>>> add_function = lambda x, y: x + y
>>> dodaj_funkcję(2, 3)
5

Funkcje Lambda nie różnią się od zwykłych funkcji, z tą różnicą, że mają bardziej zwięzłą składnię:

  • Nazwa funkcji po lewej stronie znaku równości
  • Połączenia lambda słowo kluczowe po prawej stronie znaku równości (podobnie jak def słowo kluczowe w tradycyjnej definicji funkcji Pythona, dzięki temu Python wie, że definiujemy funkcję).
  • Parametr(y) po lambda słowo kluczowe po lewej stronie dwukropka.
  • Zwróć wartość na prawo od dwukropka.

A teraz zastosujmy funkcje lambda do realistycznej sytuacji.

Zestawy danych często mają swoje własne dziwactwa w formatowaniu, specyficzne dla różnic we wprowadzaniu i gromadzeniu danych. W rezultacie dane, z którymi pracujesz, mogą zawierać dziwnie specyficzne problemy, którymi musisz się zająć. Rozważmy na przykład prosty zestaw danych poniżej, w którym przechowywane są nazwiska osób i ich dochody. nazwijmy to monies.

Obraz według autora

Teraz, jako Wysokości Master Data w tej firmie, otrzymaliśmy ściśle tajną informację: wszyscy w tej firmie otrzymają 10% podwyżki plus dodatkowe 1000 dolarów. Jest to prawdopodobnie zbyt szczegółowe obliczenie, aby znaleźć konkretną metodę, ale wystarczająco proste w przypadku funkcji lambda:

update_income = lambda num: num + (num * 10) + 1000

Następnie wszystko, co musimy zrobić, to użyć tej funkcji z Pandami apply funkcja, która pozwala zastosować funkcję do każdego elementu wybranej Serii:

pieniądze['Nowy dochód'] = pieniądze['Dochód'].apply(update_income)
pieniądze
Obraz według autora

I gotowe! Nowa, genialna ramka DataFrame zawierająca dokładnie te informacje, których potrzebowaliśmy, a wszystko to w dwóch linijkach kodu. Aby było jeszcze bardziej zwięźle, moglibyśmy nawet zdefiniować wewnątrz funkcję lambda apply bezpośrednio — fajna wskazówka, o której warto pamiętać.

Ujmę to w prosty sposób.

Lambdy są niezwykle przydatne i dlatego warto z nich korzystać. Cieszyć się!

Funkcje manipulacji ciągami szeregowymi

W poprzedniej sekcji mówiliśmy o wszechstronności funkcji lambda i wszystkich ciekawych rzeczach, które mogą pomóc Ci osiągnąć z danymi. To jest doskonałe, ale trzeba uważać, żeby się nie dać ponieść emocjom. Niezwykle często zdarza się, że jesteś tak zaabsorbowany jednym znajomym sposobem wykonywania czynności, że pomijasz prostsze skróty, którymi Python pobłogosławił programistów. Dotyczy to oczywiście nie tylko lambd, ale na razie się przy tym pozostaniemy.

Załóżmy na przykład, że mamy wywołaną następującą ramkę danych names który przechowuje imiona i nazwiska osób:

Obraz według autora

Teraz, ze względu na ograniczoną ilość miejsca w naszej bazie danych, zdecydowaliśmy, że zamiast przechowywać całe nazwisko osoby, bardziej efektywne będzie po prostu przechowywanie jej ostatniej inicjału. Dlatego musimy przekształcić 'Last Name' odpowiednio kolumna. W przypadku lambd nasza próba może wyglądać mniej więcej tak:

nazwy['Nazwisko'] = imiona['Nazwisko'].apply(lambda s: s[:1])
Nazwy
Obraz według autora

To oczywiście działa, ale jest trochę niezgrabne i dlatego nie jest tak Pythoniczne, jak mogłoby być. Na szczęście, biorąc pod uwagę piękno funkcji manipulacji ciągami znaków w Pandach, istnieje inny, bardziej elegancki sposób (na potrzeby następnego wiersza kodu po prostu załóżmy, że nie zmieniliśmy jeszcze 'Last Name' kolumna z powyższym kodem):

nazwy['Nazwisko'] = imiona['Nazwisko'].str[:1]
Nazwy
Obraz według autora

Ta-da! The .str Właściwość serii Pandas pozwala nam połączyć każdy ciąg w serii za pomocą określonej operacji na ciągu, tak jak gdybyśmy pracowali z każdym ciągiem indywidualnie.

Zaczekaj, robi się coraz lepiej. Od .str skutecznie pozwala nam uzyskać dostęp do normalnej funkcjonalności ciągu za pośrednictwem Serii, możemy również zastosować szereg funkcji ciągów, aby pomóc szybko przetwarzać nasze dane! Załóżmy na przykład, że decydujemy się na konwersję obu kolumn na małe litery. Poniższy kod spełnia swoje zadanie:

nazwy['Imię'] = imiona['Imię'].str.lower()
nazwy['Nazwisko'] = imiona['Nazwisko'].str.lower()
Nazwy
Obraz według autora

Znacznie prostsze niż kłopotliwe definiowanie własnych funkcji lambda i wywoływanie znajdujących się w nich funkcji łańcuchowych. Nie żebym nie kochał lambd — ale wszystko ma swoje miejsce, a w Pythonie prostota powinna zawsze być priorytetem.

Omówiłem tutaj tylko kilka przykładów, ale do Twojej dyspozycji jest duży zbiór funkcji łańcuchowych [1].

Używaj ich swobodnie. Są doskonałe.

Końcowe przemyślenia i podsumowanie

Oto mała ściągawka dotycząca transformacji danych:

  1. Filtruj tak, jak myślisz. Dowiedz się, co się naprawdę dzieje, abyś wiedział, co robisz.
  2. Uwielbiam Twoje lambdy. Mogą pomóc Ci manipulować danymi w niesamowity sposób.
  3. Pandy kochają sznurki tak samo jak Ty. Istnieje wiele wbudowanych funkcji — równie dobrze możesz z nich skorzystać.

Oto ostatnia rada: nie ma „poprawnego” sposobu filtrowania zbioru danych. Zależy to od dostępnych danych, a także od unikalnego problemu, który chcesz rozwiązać. Jednakże, chociaż nie ma ustalonej metody, którą można zastosować za każdym razem, istnieje przydatny zbiór narzędzi, które warto mieć do dyspozycji. W tym artykule omówiłem trzy z nich.

Zachęcam Cię do wyjścia i znalezienia czegoś więcej.

Referencje

[1] https://www.aboutdatablog.com/post/10-most-useful-string-functions-in-pandas

Transformacja danych podstawowych w Pandach za pomocą trzech przydatnych technik opublikowana ponownie ze źródła https://towardsdatascience.com/master-data-transformation-in-pandas-with-these-three-useful-techniques-20699f03e51d?source=rss—-7f60cf5620c9— 4 na stronie https://towardsdatascience.com/feed

<!–

->

Znak czasu:

Więcej z Konsultanci Blockchain