Michaela Macaulaya

Musisz znać funkcje Pandy do podróży z uczeniem maszynowym

Węzeł źródłowy: 1865356

Ten artykuł został opublikowany jako część Blogathon Data Science

Wprowadzenie

Cóż, istnieje duża szansa, że ​​możesz!

Dla naukowców zajmujących się danymi, którzy używają Pythona jako podstawowego języka programowania, pakiet Pandas jest niezbędnym narzędziem do analizy danych. Pakiet Pandas ma wszystko, czego potrzebuje analityk danych, a każdy kurs na początku nauczył nas, jak z niego korzystać. Jest tak duży, potężny i wykonuje prawie każdą manipulację tabelaryczną, jaką możesz sobie wyobrazić. Jednak ta szerokość może być czasami wadą.

Ma wiele pięknych funkcji, które rozwiązują rzadkie przypadki brzegowe, różne scenariusze.

Jedną z głównych wad pandy jest to, że zmaga się z dużymi zestawami danych, ponieważ pandy przechowują swoje struktury danych w pamięci RAM, która może stać się niewystarczająca wraz ze wzrostem rozmiarów danych. Użyj do tego PySpark lub Dask.

Mimo że pakiet Pandas jest szeroko stosowany, nadal istnieje wiele funkcji, które ludzie mogą przeoczyć, czy to dlatego, że jest mniej używany, czy też dlatego, że nie są świadomi jego istnienia. Ten post ma na celu ponowne wprowadzenie Cię do tych funkcji i zademonstrowanie, że Pandas jest znacznie bardziej kompetentny, niż wcześniej wiedziałeś.

Pipe

Aby przeprowadzić czyszczenie danych w zwięzły, zwięzły sposób w pandach, można użyć funkcji Pipe, które pozwalają połączyć wiele funkcji w jednej operacji.

Na przykład, jeśli chcesz zastosować funkcje, takie jak drop_duplicates, encode_categoricals, remove_outliers, które akceptują jego argumenty.

df_cleaned = (diamonds.pipe(drop_duplicates). pipe(remove_outliers, ['price', 'carat', 'depth']). pipe(encode_categoricals, ['cut', 'color', 'clarity']))

Rozkładać na czynniki

Ta funkcja jest alternatywą dla Sklearns Label Encoder.

# Uwaga na [0] na końcu diamonds["cut_enc"] = pd.factorize(diamonds["cut"])[0] >>> diamonds["cut_enc"].sample(5) 52103 2 39813 0 31843 0 10675 0 6634 0 Nazwa: cut_enc, dtype: int64

Rozkład wyników na czynniki to krotka wartości: zakodowana wartość i lista unikalnych kategorii.

wartości, unikalne = pd.factorize(diamonds["wytnij"], sort=True) >>> wartości[:10] array([0, 1, 3, 1, 3, 2, 2, 2, 4, 2] , dtype=int64) >>> unique ['Idealny', 'Premium', 'Bardzo dobry', 'Dobry', 'Dostateczny']

Eksplodować

Eksploduj | funkcje pandy

Photo by Edewy Fostera on Unsplash

Explode to funkcja o ciekawej nazwie. Zacznijmy od przykładu, a następnie wyjaśnienia:

df = pd.Series([1, 6, 7, [46, 56, 49], 45, [15, 10, 12]]).to_frame("brudne") >>> df
dane | funkcje pandy
Zdjęcie autora

Kolumna funkcji ma dwa wiersze oznaczone listami. Ten typ danych jest dostępny w ankietach, w których kilka pytań akceptuje wielokrotny wybór.

>>> df.explode("brudne", ignore_index=Prawda)
dane eksplodują
Zdjęcie autora

Ta funkcja pobiera komórkę z tablicą wartości i rozbija się w wielu wierszach. Aby zachować kolejność indeksu numerycznego, użyj ignore_index jako True.

Między

W przypadku funkcji indeksowania liczb logicznych w zakresie, oto przydatna funkcja:

# Zdobądź diamenty o cenie od 3500 do 3700 dolarów diamonds[diamonds["price"].between(3500, 3700, inclusive="neither")].sample(5)
między danymi | funkcje pandy
Zdjęcie autora

 

T

DataFrame ma prosty atrybut T, znany jako transpozycja. Nie możemy go często używać, metoda opisu jest pomocna podczas przeglądania ramek danych.

>>> boston.opis().T.głowa(10)
transponować
Zdjęcie autora

 

Opcje Pandy

Można skorzystać z globalnych ustawień pand, które pomagają podkręcać i zmieniać domyślne zachowania.

>>> dir(pd.options) ['obliczanie', 'wyświetlanie', 'io', 'tryb', 'drukowanie']

Składa się z 5 modułów. Zobaczmy dostępne opcje pod wyświetlaczem. Dostępnych jest wiele opcji, ale ja głównie używam max_columns.

>>> dir(pd.options.display) ['chop_threshold', 'max_columns', 'max_colwidth', 'max_info_columns', 'max_info_rows', 'max_rows', ... 'precision', 'show_dimensions', 'unicode' , 'szerokość']

Większość ludzi używa max_columns i precyzji

# Usuń ograniczenie wyświetlania liczby kolumn pd.options.display.max_columns = Brak # Pokaż tylko 5 liczb po przecinku pd.options.display.precision = 5 # pozbywa się notacji naukowej

Konwertuj_typy

Wszyscy wiemy, że pandy mają irytujący zwyczaj oznaczania niektórych kolumn jako obiektowych typów danych. Zamiast bezpośrednio definiować ich typy, możesz użyć metody convert dtypes, która próbuje wydedukować najlepszy typ danych:

sample = pd.read_csv("data/station_day.csv",usecols=["StationId", "CO", "O3", "AQI_Bucket"]) >>> sample.dtypes StationId obiekt CO float64 O3 float64 AQI_Bucket obiekt dtype: object >>> sample.convert_dtypes().dtypes StationId ciąg CO float64 O3 float64 AQI_Bucket ciąg dtype: object

Wybierz_typy

Z nazwy wierzę, że jest jasne, co robi funkcja. Możesz użyć opcji dołączania i wykluczania, aby określić kolumny, które zawierają lub pomijają określone typy danych.

Wybierz tylko kolumny numeryczne z np.number, na przykład:

# Wybierz tylko kolumny liczbowe diamonds.select_dtypes(include=np.number).head()
wybierz typy d
Zdjęcie autora

 

Maska

Ta funkcja pomaga zastąpić wartości, w których warunek niestandardowy nie jest spełniony.

# Utwórz przykładowe dane Ages = pd.Series([55, 52, 50, 66, 57, 59, 49, 60]).to_frame("ages") ages
maska ​​| dane
Zdjęcie autora

Po wykonaniu powyższej operacji.

wykonane maskowanie
Zdjęcie autora

Min. i Maks.

Chociaż min i max są dobrze znane, ma lepsze właściwości w niektórych przypadkach brzegowych.

index = ["Diamenty", "Titanic", "Iris", "Choroba serca", "Domyślność pożyczki"] library = ["XGBoost", "CatBoost", "LightGBM", "Sklearn GB"] df = pd.DataFrame ( {lib: np.random.uniform(90, 100, 5) dla lib w bibliotekach}, index=index ) >>> df
min i max
Zdjęcie autora 

Fikcyjna ramka DataFrame powyżej pokazuje wyniki czterech różnych bibliotek zwiększania gradientu na pięciu zestawach danych. Szukamy pakietu, który najlepiej poradził sobie z każdym zestawem danych. Oto jak osiągnąć to z max w elegancki sposób:

>>> df.max(axis=1) Diamenty 99.52684 Titanic 99.63650 Iris 99.10989 Choroba serca 99.31627 Niewykonanie pożyczki 97.96728 dtype: float64

Największe i N najmniejsze

Wartości nlargest i nsmallest są przydatne do wyświetlenia N górnych lub ~(górnych N) wartości zmiennej.

diamenty.nlargest(5, "cena")
największy i najmniejszy
Zdjęcie autora
diamenty.nsmallest(5, "cena")
nsnajmniejsza
Zdjęcie autora

 

Idxmax i Idxmin

Pandy zwracają największą/najmniejszą liczbę po wywołaniu max lub min w kolumnie. Zdarzają się jednak sytuacje, kiedy potrzebna jest pozycja min/max, której te funkcje nie zapewniają.

Zamiast tego możesz użyć idxmax/idxmin:

>>> diamenty.cena.idxmax() 27749 >>> diamenty.karat.idxmin() 14

Wartość_Counts

Typowym sposobem znalezienia procentu brakujących wartości jest połączenie isnull i sum oraz podzielenie przez rozmiar tablicy.

Ale value_counts z odpowiednimi argumentami robi to samo:

Housing = pd.read_csv("train.csv") >>> Housing["FireplaceQu"].value_counts(dropna=False, normalize=True) NaN 0.47260 Gd 0.26027 TA 0.21438 Fa 0.02260 Ex 0.01644 Po 0.01370 Nazwa: FireplaceQu, dtype: pływak64

Spinacze

Funkcja przycinania pomaga znaleźć wartości odstające poza zakresem i zastąpić je sztywnymi granicami.

>>> wiek.klip(50, 60)
dane do klipu
Zdjęcie autora

 

O godzinie i między godziną

Funkcje te są pomocne podczas pracy z szeregami czasowymi o dużej szczegółowości.

at_time pomaga uzyskać wartości w określonym dniu lub czasie.

index = pd.date_range("2021-08-01", period=100, freq="H") df = pd.DataFrame({"col": list(range(100))}, index=index) >> > df.głowa()
przykład o_czasie | funkcje pandy
Zdjęcie autora

>>> df.o_czas(“15:00”)

.w_czasie | funkcje pandy
Zdjęcie autora

czas między_czasem używany do pobierania wierszy z niestandardowego zakresu.

from datetime import datetime >>> df.between_time("09:45", "12:00")
między_czasem
Zdjęcie autora

 

Bdata_zakres

Funkcja ta pomaga tworzyć indeksy szeregów czasowych z częstotliwością dni roboczych. Świat finansów ma taką częstotliwość. Tak więc ta funkcja może być pomocna w czasie reindeksowania szeregów czasowych za pomocą funkcji reindeksowania.

series = pd.bdate_range("2021-01-01", "2021-01-31") # Okres jednego miesiąca >>> len(series) 21

W i Iat

Te dwa akcesory są znacznie szybsze niż loc i iloc. Mają jednak wadę. Pozwalają one wybrać lub zastąpić tylko jedną wartość na raz:

# [indeks, etykieta] >>> diamonds.at[234, "cut"] 'Ideal' # [indeks, indeks] >>> diamonds.iat[1564, 4] 61.2 # Zastąp 16541. wiersz w kolumnie ceny >> > diamenty.at[16541, „cena”] = 10000

sortowanie arg

Ta funkcja pomaga wyodrębnić indeksy, które posortowałyby tablicę funkcji.

tips.reset_index(inplace=True, drop=True) sort_idx = tips["total_bill"].argsort(kind="mergesort") # Teraz posortuj `tips` na podstawie total_bill tips.iloc[sort_idx].head()
arg_sort
Zdjęcie autora

 

Akcesorium dla kota

Pandy umożliwiają wbudowane funkcje Pythona na datach i ciągach za pomocą akcesorów, takich jak str lub dt.

>>> diamonds.dtypes carat float64 kategoria cięcia kategoria kolor kategoria klarowność głębokość float64 tabela float64 cena int64 x float64 y float64 z float64 cut_enc int64 dtype: object

Można użyć wielu funkcji specjalnych używając akcesora cat na kolumnach kategorii. Posiada funkcje, takie jak kategorie, aby znaleźć unikalne, rename_categories, aby zmienić nazwy funkcji.

diamonds["new_cuts"] = diamonds["cut"].cat.rename_categories(list("ABCDE")) >>> diamonds["new_cuts"].cat.categories Index(['A', 'B', ' C', 'D', 'E'], dtype='object')

Sprawdź to, aby uzyskać więcej listy funkcji pod kot akcesor.

Wyciskać

Squeeze to funkcja używana w rzadkich, ale obciążających sytuacjach brzegowych.

Gdy zwracana jest pojedyncza wartość z warunku używanego do podzbioru elementu DataFrame, jest to jeden z tych przypadków. Rozważ następujący scenariusz:

podzbiór = diamenty.loc[diamenty.indeks >> podzbiór
Cena

Nawet jeśli istnieje tylko jedna komórka, zwróć DataFrame. Jest to niewygodne, ponieważ musisz teraz użyć.loc z nazwą kolumny i indeksem, aby uzyskać cenę.

Nie musisz, jeśli wiesz, jak się ściskać. Za pomocą tej funkcji można usunąć oś z jednokomórkowej ramki DataFrame lub serii. Rozważ następujący scenariusz:

>>> podzbiór.squeeze() 326

Istnieje możliwość określenia osi do usunięcia. Teraz wrócił tylko skalar.

>>> subset.squeeze("kolumny") # lub "wiersze" 0 326 Nazwa: cena, dtype: int64

Zauważ, że ta funkcja działa tylko dla serii lub DataFrame z pojedynczymi wartościami.

Excel_writer

Jest to ogólna klasa do tworzenia plików Excela i zapisywania w nich DataFrame. Zastanów się, mamy te dwa zbiory danych.

# Załaduj dwa zestawy danych diamonds = sns.load_dataset("diamonds") tips = sns.load_dataset("tips") # Napisz do tego samego pliku Excela za pomocą pd.ExcelWriter("data/data.xlsx") jako writer: diamonds.to_excel (writer, sheet_name="diamenty") tips.to_excel(writer, sheet_name="tips")

Ma właściwości pozwalające określić format DateTime do użycia, niezależnie od tego, czy potrzebujesz nowego pliku, czy zmodyfikujesz istniejący, co się stanie, jeśli arkusz istnieje. Sprawdź to dokumentacja by uzyskać więcej szczegółów.

Wnioski

Nie jest to wyczerpujący przegląd pand, a dokumentacja zawiera więcej informacji o kodzie i funkcjach. Zalecam poeksperymentowanie z różnymi odmianami dostarczonych tutaj fragmentów kodu, a także z różnymi parametrami. Dzięki temu można w pełni zrozumieć moc pand.

Biblioteki, takie jak Dask i datatable, stopniowo wypierają Pandy z ich błyskotliwymi nowymi funkcjami do obsługi dużych zestawów danych. Pandy pozostają najczęściej używanym narzędziem do manipulacji danymi w społeczności data science Pythona. Ze względu na to, jak dobrze pasuje do obecnego stosu SciPy, biblioteka służy jako paradygmat dla innych pakietów do naśladowania i budowania.

Mam nadzieję, że znalazłeś ten post wnikliwy i dziękuję za przeczytanie.

Media pokazane w tym artykule nie są własnością Analytics Vidhya i są używane według uznania Autora.

Źródło: https://www.analyticsvidhya.com/blog/2021/08/must-know-pandas-functions-for-machine-learning-journey/

Znak czasu:

Więcej z Analityka Widhja