Michaรซl Macaulay

Moet Panda's-functies kennen voor Machine Learning Journey

Bronknooppunt: 1865356

Dit artikel is gepubliceerd als onderdeel van het Data Science-blogathon

Introductie

Nou, er is een goede mogelijkheid dat je dat kunt!

Voor datawetenschappers die Python als hun primaire programmeertaal gebruiken, is het Pandas-pakket een onmisbare tool voor data-analyse. Het Pandas-pakket heeft alles wat een datawetenschapper nodig heeft, en elke cursus leerde ons in eerste instantie hoe we het moesten gebruiken. Het is zo groot, krachtig en voert bijna elke tafelmanipulatie uit die je maar kunt bedenken. Deze breedte kan echter soms een nadeel zijn.

Het heeft veel mooie functies die zeldzame randgevallen, verschillende scenario's oplossen.

Een van de belangrijkste nadelen van panda's is dat het worstelt met grote datasets omdat panda's hun datastructuren in RAM opslaan, wat onvoldoende kan worden naarmate de data groter wordt. Gebruik hiervoor PySpark of Dask.

Hoewel het Pandas-pakket veel wordt gebruikt, zijn er nog steeds veel functies die mensen over het hoofd kunnen zien, hetzij omdat het minder wordt gebruikt of omdat ze niet op de hoogte zijn van het bestaan โ€‹โ€‹ervan. Dit bericht is bedoeld om je opnieuw kennis te laten maken met die functies en aan te tonen dat Pandas veel competenter is dan je eerder wist.

Pijp

Om data opschonen op een beknopte, compacte manier in panda's uit te voeren, kan men Pipe-functies gebruiken, waarmee u meerdere functies in รฉรฉn handeling kunt combineren.

Als u bijvoorbeeld functies wilt toepassen zoals drop_duplicates, encode_categoricals, remove_outliers die de argumenten accepteren.

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

Factoriseren

Deze functie is een alternatief voor Sklearns Label Encoder.

# Let op de [0] aan het einde diamanten["cut_enc"] = pd.factorize(diamonds["cut"])[0] >>> diamanten["cut_enc"].sample(5) 52103 2 39813 0 31843 0 10675 0 6634 0 Naam: cut_enc, dtype: int64

Factorize resulteert in een tuple van waarden: de gecodeerde waarde en een lijst met unieke categorieรซn.

waarden, uniek = pd.factorize(diamanten["cut"], sort=True) >>> waarden[:10] array([0, 1, 3, 1, 3, 2, 2, 2, 4, 2], dtype=int64) >>> uniek ['Ideaal', 'Premium', 'Zeer goed', 'Goed', 'Redelijk']

Exploderen

Ontploffen | panda's functies

Foto door Edewa Foster on Unsplash

Explode is een functie met een interessante naam. Laten we beginnen met een voorbeeld en daarna een uitleg:

df = pd.Serie([1, 6, 7, [46, 56, 49], 45, [15, 10, 12]]).to_frame("vuil") >>> df
gegevens | panda's functies
Afbeelding door auteur

De kenmerkkolom heeft twee rijen die worden aangeduid met lijsten. Dit type gegevens is beschikbaar in enquรชtes waar een paar vragen meerdere keuzes accepteren.

>>> df.explode("vies", ignore_index=True)
gegevens exploderen
Afbeelding door auteur

Deze functie neemt een cel met een reeks waarden en explodeert in meerdere rijen. Om de volgorde van een numerieke index te behouden, gebruikt u ignore_index als True.

Tussen

Voor booleaanse indexering van numerieke functies binnen een bereik is hier een handige functie:

# Krijg diamanten die geprijsd zijn tussen 3500 en 3700 dollar diamanten[diamanten["prijs"].between(3500, 3700, inclusive="geen van beide")].sample(5)
tussen gegevens | panda's functies
Afbeelding door auteur

 

T

DataFrame heeft een eenvoudig T-attribuut, bekend als transponeren. We gebruiken het misschien niet vaak, de methode beschrijven is handig tijdens het bekijken van de dataframes.

>>> boston.beschrijven().T.head(10)
transponeren
Afbeelding door auteur

 

Panda's opties

Men kan globale instellingen van panda's gebruiken die helpen bij het aanpassen en wijzigen van het standaardgedrag.

>>> dir(pd.opties) ['berekenen', 'weergeven', 'io', 'mode', 'plotten']

Het bestaat uit 5 modulen. Laten we de beschikbare opties onder het scherm bekijken. Er zijn veel opties beschikbaar, maar ik gebruik meestal max_columns.

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

De meeste mensen gebruiken max_columns en precisie

# Verwijder de limiet om het aantal kolommen weer te geven pd.options.display.max_columns = Geen # Toon slechts 5 getallen achter de komma pd.options.display.precision = 5 # verwijdert de wetenschappelijke notatie

Converteren_dtypes

We zijn ons er allemaal van bewust dat panda's de vervelende gewoonte hebben om sommige kolommen als objectgegevenstypen te markeren. In plaats van hun typen rechtstreeks te definiรซren, kunt u de convert dtypes-methode gebruiken, die probeert het beste gegevenstype af te leiden:

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

Selecteer_dtypes

Uit de naam blijkt volgens mij duidelijk wat de functie doet. U kunt de opties voor opnemen en uitsluiten gebruiken om kolommen op te geven die specifieke gegevenstypen bevatten of weglaten.

Kies alleen numerieke kolommen met np.number, bijvoorbeeld:

# Kies alleen numerieke kolommen diamonds.select_dtypes(include=np.number).head()
selecteer dtypen
Afbeelding door auteur

 

Masker

Deze functie helpt bij het vervangen van waarden waarbij niet aan de aangepaste voorwaarde wordt voldaan.

# Maak voorbeeldgegevens leeftijden = pd.Series([55, 52, 50, 66, 57, 59, 49, 60]).to_frame("leeftijden") leeftijden
masker | gegevens
Afbeelding door auteur

Na het uitvoeren van de bovenstaande bewerking.

maskering uitgevoerd
Afbeelding door auteur

Min en Max

Hoewel min en max bekend zijn, heeft het enkele betere eigenschappen voor sommige randgevallen.

index = ["Diamonds", "Titanic", "Iris", "Heart Disease", "Loan Default"] bibliotheken = ["XGBoost", "CatBoost", "LightGBM", "Sklearn GB"] df = pd.DataFrame( {lib: np.random.uniform(90, 100, 5) voor lib in bibliotheken}, index=index ) >>> df
min en max
Afbeelding door auteur 

Het fictieve DataFrame hierboven toont de resultaten van vier verschillende gradiรซntverhogende bibliotheken op vijf datasets. We zijn op zoek naar het pakket dat het beste presteerde op elke dataset. Hier leest u hoe u dit op een stijlvolle manier met max kunt bereiken:

>>> df.max(axis=1) Diamanten 99.52684 Titanic 99.63650 Iris 99.10989 Hartziekte 99.31627 Lening Wanbetaling 97.96728 dtype: float64

Grootste en kleinste

De ngrootste en nkleinste zijn handig om de hoogste N- of ~(top N)-waarden van een variabele te bekijken.

diamanten.nlargest(5, "prijs")
grootste en kleinste
Afbeelding door auteur
diamanten.nsmallest(5, "prijs")
kleinste
Afbeelding door auteur

 

Idxmax en Idxmin

Panda's retourneren het grootste/kleinste getal wanneer u max of min op een kolom roept. Er zijn echter situaties waarin u de positie van de min/max nodig heeft, die deze functies niet bieden.

In plaats daarvan kunt u idxmax/idxmin gebruiken:

>>> diamanten.prijs.idxmax() 27749 >>> diamanten.karaat.idxmin() 14

Waarde_tellingen

Een gebruikelijke manier om het percentage van de ontbrekende waarden te vinden, is door isnull en som te combineren en te delen door de grootte van de array.

Maar value_counts met relevante argumenten doet hetzelfde:

behuizing = pd.read_csv("train.csv") >>> behuizing["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 Naam: FireplaceQu, dtype: float64

Klem

De clipfunctie helpt om uitschieters buiten een bereik te vinden en deze te vervangen door harde limieten.

>>> leeftijden.clip(50, 60)
gegevens voor clip
Afbeelding door auteur

 

At_time en Between_time

Deze functies zijn handig bij het werken met tijdreeksen met een hoge granulariteit.

at_time helpt om waarden op een specifieke datum of tijd te krijgen.

index = pd.date_range("2021-08-01", perioden=100, freq="H") df = pd.DataFrame({"col": list(range(100))}, index=index) >>> df.head()
om_tijd voorbeeld | panda's functies
Afbeelding door auteur

>>> df.at_time(โ€œ15:00โ€)

.om_tijd | panda's functies
Afbeelding door auteur

between_time gebruikt om rijen binnen een aangepast bereik op te halen.

from datetime import datetime >>> df.between_time("09:45", "12:00")
tussen_tijd
Afbeelding door auteur

 

Bdate_bereik

Deze functie helpt bij het maken van tijdreeksindices met werkdagfrequentie. De financiรซle wereld heeft dit soort frequentie. Deze functie kan dus nuttig zijn bij het opnieuw indexeren van tijdreeksen met de functie herindexeren.

series = pd.bdate_range("2021-01-01", "2021-01-31") # Een periode van een maand >>> len(serie) 21

Bij en Iaat

Deze twee accessors zijn aanzienlijk sneller dan loc en iloc. Ze hebben echter een nadeel. U kunt slechts รฉรฉn waarde tegelijk kiezen of vervangen:

# [index, label] >>> diamanten.at[234, "cut"] 'Ideal' # [index, index] >>> diamanten.iat[1564, 4] 61.2 # Vervang 16541e rij van de prijskolom >>> diamanten.at[16541, "price"] = 10000

Argsort

Deze functie helpt bij het extraheren van indices die een reeks functies zouden sorteren.

tips.reset_index(inplace=True, drop=True) sort_idx = tips["total_bill"].argsort(kind="mergesort") # Sorteer nu `tips` op basis van total_bill tips.iloc[sort_idx].head()
arg_sort
Afbeelding door auteur

 

Accessoire voor katten

De panda's maken ingebouwde functies van python op datums en strings mogelijk met behulp van accessors zoals str of dt.

>>> diamanten.dtypes karaat float64 slijpcategorie kleur categorie helderheid categorie diepte float64 tafel float64 prijs int64 x float64 y float64 z float64 cut_enc int64 dtype: object

Men kan veel speciale functies gebruiken met behulp van cat-accessor op categorische kolommen. Het heeft functies zoals categorieรซn om unieke te vinden, rename_categories om de kenmerken te hernoemen.

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

Bekijk dit voor een meer lijst met functies hieronder kat accessoire.

Persen

Squeeze is een functie die wordt gebruikt in zeldzame maar verzwarende omstandigheden.

Wanneer een enkele waarde wordt geretourneerd uit een voorwaarde die wordt gebruikt om een โ€‹โ€‹DataFrame te subsetten, is dit een van deze gevallen. Overweeg het volgende scenario:

subset = diamanten.loc[diamonds.index >> subset
prijs

Zelfs als er maar รฉรฉn cel is, retourneert u het DataFrame. Het is onhandig omdat u nu.loc moet gebruiken met zowel de kolomnaam als de index om de prijs te verkrijgen.

Dat hoeft niet als je weet hoe je moet knijpen. Met deze functie kan een as worden verwijderd uit een DataFrame of Series met รฉรฉn cel. Overweeg het volgende scenario:

>>> subset.squeeze() 326

Het is mogelijk om de te verwijderen as op te geven. Het was nu alleen scalair teruggekeerd.

>>> subset.squeeze("kolommen") # of "rijen" 0 326 Naam: prijs, dtype: int64

Merk op dat deze functie alleen werkt voor Series of DataFrame met enkele waarden.

Excel_schrijver

Het is een generieke klasse voor het maken van Excel-bestanden en het erin schrijven van DataFrame. Bedenk dat we deze twee datasets hebben.

# Laad twee datasets diamonds = sns.load_dataset("diamonds") tips = sns.load_dataset("tips") # Schrijf naar hetzelfde Excel-bestand met pd.ExcelWriter("data/data.xlsx") als schrijver: diamonds.to_excel (writer, sheet_name="diamonds") tips.to_excel(writer, sheet_name="tips")

Het heeft eigenschappen om het te gebruiken DateTime-formaat te specificeren, of u nu een nieuw bestand nodig hebt of een bestaand bestand wijzigt, wat er gebeurt als er een blad bestaat. Check dit documentatie voor meer details.

Conclusie

Het is geen uitputtend overzicht van panda's, en de documentatie bevat meer informatie over de code en functies. Ik raad u aan te experimenteren met verschillende variaties van de codefragmenten die hier worden verstrekt, evenals verschillende parameters. Men kan de kracht van panda's volledig begrijpen door dit te doen.

Bibliotheken zoals Dask en datatable verdringen Panda's geleidelijk met hun flitsende nieuwe functies voor het verwerken van grote datasets. Panda's blijft de meest gebruikte tool voor gegevensmanipulatie in de Python-datawetenschapsgemeenschap. Vanwege hoe goed het in de huidige SciPy-stack past, dient de bibliotheek als een paradigma voor andere pakketten om te volgen en te bouwen.

Ik hoop dat je dit bericht verhelderend vond en bedankt voor het lezen.

De media die in dit artikel worden getoond, zijn geen eigendom van Analytics Vidhya en worden naar goeddunken van de auteur gebruikt.

Bron: https://www.analyticsvidhya.com/blog/2021/08/must-know-pandas-functions-for-machine-learning-journey/

Tijdstempel:

Meer van Analytics Vidhya