Datavitenskap

Pandas Data Frame Tutorial

Pandas Data Frame Tutorial

Pandaer for numerisk analyse

Pandas ble utviklet ut fra behovet for en effektiv måte å administrere økonomiske data i Python.  Pandas er et bibliotek som kan importeres til python for å hjelpe til med å manipulere og transformere numeriske data. Wes McKinney startet prosjektet i 2008.  Pandas administreres nå av en gruppe ingeniører og støttes av NUMFocus nonprofit, som vil sikre fremtidig vekst og utvikling. Dette betyr at pandaer vil være et stabilt bibliotek i mange år og kan inkluderes i applikasjonene dine uten bekymring for et lite prosjekt.

Selv om pandaer opprinnelig ble utviklet for å modellere økonomiske data, kan datastrukturene brukes til å manipulere en rekke numeriske data.  Pandas har en rekke datastrukturer som er innebygd og kan brukes til å enkelt modellere og manipulere numeriske data. Denne opplæringen vil dekke pandaene Dataramme datastruktur i dybden.

Hva er en DataFrame?

EN Dataramme er en av de primære datastrukturene i pandaer og representerer en 2-D-samling av data.  Det er mange analoge objekter til denne typen 2-D datastruktur, hvorav noen inkluderer det stadig populære Excel-regnearket, en databasetabell eller et 2-D-utvalg som finnes i de fleste programmeringsspråk.  Nedenfor er et eksempel på en Dataramme i et grafisk format.  Det representerer en gruppe tidsserier med aksjekurs etter dato.

Denne opplæringen vil lede deg gjennom mange av metodene i datarammen, og jeg vil bruke en økonomisk økonomimodell for å demonstrere disse funksjonene.

Importerer data

Pandas-klasser har noen innebygde metoder for å hjelpe med å importere data til en datastruktur. Nedenfor er et eksempel på hvordan du importerer data til et pandapanel med DataReader klasse.  Den kan brukes til å importere data fra flere gratis økonomiske datakilder, inkludert Quandl, Yahoo Finance og Google. For å kunne bruke pandabiblioteket, må du legge det til som en import i koden din.

importer pandaer som pd

Metoden nedenfor vil starte programmet ved å kjøre opplæringsmetoden.

hvis __name__ == "__main__":
tutorial_run ()

De tutorial_run metoden er nedenfor.  Det er den neste metoden jeg vil legge til i koden.  Den første linjen i denne metoden definerer en liste over aksjemarkeringer.  Denne variabelen vil bli brukt senere i koden som en liste over aksjer som data blir bedt om for å fylle ut Dataramme.  Den andre kodelinjen kaller get_data metode.  Som vi vil se, er get_data metoden tar tre parametere som input. Vi vil sende listen over aksjemarkeringer, startdato og sluttdato for dataene vi vil be om.

def tutorial_run ():
# Aksjekort til kilde fra Yahoo Finance
symboler = ['SPY', 'AAPL', 'GOOG']
# få data
df = get_data (symboler, '2006-01-03', '2017-12-31')

Nedenfor vil vi definere get_data metode.  Som jeg nevnte ovenfor tar det tre parametere en liste over symboler, en start- og sluttdato.

Den første linjen med kode definerer et pandapanel ved å starte en DataReader klasse.  Samtalen til DataReader klasse vil koble seg til Yahoo Finance-serveren og be om de daglige høye, lave, nærme og justerte sluttverdiene for hver av aksjene i symboler liste.  Disse dataene lastes inn i et panelobjekt av pandaer.

EN panelet er en 3D-matrise og kan betraktes som en "stabel" av DataFrames.  Hver Dataramme i stabelen inneholder en av de daglige verdiene for aksjer og datoperioder som er forespurt.  For eksempel nedenfor Dataramme, presentert tidligere, er sluttkursen Dataramme fra forespørselen.  Hver type pris (høy, lav, nær og justert nær) har sin egen Dataramme i det resulterende panelet returnert fra forespørselen.

Den andre kodelinjen kutter panelet i en enkelt Dataramme og tildeler de resulterende dataene til df.  Dette vil være min variabel for Dataramme som jeg bruker resten av opplæringen.  Den holder daglige nærverdier for de tre aksjene for det angitte datoperioden.  Panelet kuttes opp ved å spesifisere hvilket av panelet DataFrames du vil returnere.  I dette eksemplet på kodelinjen nedenfor er det 'Lukk'.

Når vi har fått vår Dataramme på plass, vil jeg dekke noen av de nyttige funksjonene i pandabiblioteket som lar oss manipulere dataene i Dataramme gjenstand.

def get_data (symboler, startdato, sluttdato):
panel = data.DataReader (symboler, 'yahoo', startdato, sluttdato)
df = panel ['Lukk']
skriv ut (df.hode (5))
skriv ut (df.hale (5))
retur df

Hoder og haler

Den tredje og fjerde linjen av get_data skrive ut funksjonshode og hale på datarammen.  Jeg synes dette er mest nyttig i feilsøking og visualisering av dataene, men det kan også brukes til å velge den første eller siste prøven av dataene i Dataramme.  Hode- og halefunksjonen trekker den første og siste raden med data fra Dataramme.  Heltallsparameteren mellom parentesene definerer antall rader som skal velges etter metoden.

 .lok

De Dataramme lok metoden skiver Dataramme etter indeks.  Kodelinjen nedenfor skiver df Dataramme av indeksen 12-12-2017.  Jeg har gitt et skjermbilde av resultatene nedenfor.

skriv ut df.loc ["12-12-2017"]

lok kan også brukes som et todimensjonalt stykke. Den første parameteren er raden og den andre parameteren er kolonnen.  Koden nedenfor returnerer en enkelt verdi som er lik sluttprisen på Apple den 12/12/2014.

skriv ut df.loc ["12-12-2017", "AAPL"]

De lok metoden kan brukes til å skjære alle rader i en kolonne eller alle kolonnene i en rad. De : operatør brukes til å betegne alle.  Kodelinjen nedenfor velger alle radene i kolonnen for Google-sluttpriser.

skriv ut df.loc [:, "GOOG"]

.fillna

Det er vanlig, spesielt i økonomiske datasett, å ha NaN-verdier i Dataramme.  Pandas gir en funksjon for å fylle disse verdiene med en numerisk verdi.  Dette er nyttig hvis du ønsker å utføre en slags beregning av dataene som kan være skjev eller mislykkes på grunn av NaN-verdiene.

De .fillna metoden vil erstatte den angitte verdien for hver NaN-verdi i datasettet.  Kodelinjen nedenfor vil fylle hele NaN i vår Dataramme med en 0.  Denne standardverdien kan endres for en verdi som oppfyller behovet til datasettet du jobber med, ved å oppdatere parameteren som sendes til metoden.

df.fillna (0)

Normalisering av data

Når du bruker algoritmer for maskinlæring eller økonomisk analyse, er det ofte nyttig å normalisere verdiene dine.  Metoden nedenfor er en effektiv beregning for normalisering av data i pandaer Dataramme.  Jeg oppfordrer deg til å bruke denne metoden fordi denne koden vil kjøre mer effektivt enn andre metoder for normalisering og kan vise store ytelsesøkninger på store datasett.

.iloc er en metode som ligner på .lok men tar stedsbaserte parametere i stedet for de tagbaserte parametrene.  Det tar en nullbasert indeks i stedet for kolonnenavnet fra .lok eksempel.  Normaliseringskoden nedenfor er et eksempel på noen av de kraftige matriseberegningene som kan utføres.  Jeg vil hoppe over den lineære algebra-leksjonen, men i hovedsak vil denne linjen med kode dele hele matrisen eller Dataramme etter den første verdien i hver tidsserie.   Avhengig av datasettet, vil du kanskje ha en norm basert på min, maks eller gjennomsnitt.  Disse normene kan også enkelt beregnes ved hjelp av den matrisebaserte stilen nedenfor.

def normaliser_data (df):
returner df / df.iloc [0 ,:]

Plotte data

Når du arbeider med data, er det ofte nødvendig å representere dem grafisk.  Plottmetoden lar deg enkelt lage en graf fra datasettene dine.

Metoden nedenfor tar vår Dataramme og tegner den på et standard linjediagram.  Metoden tar en Dataramme og en tittel som parametere.  Den første linjen med kodesett øks til et plott av DataFrame df.  Dens angir tittel og skriftstørrelse for teksten.  De følgende to linjene setter etikettene for x- og y-aksen.  Den siste kodelinjen kaller showmetoden som skriver grafen ut til konsollen. Jeg har gitt et skjermbilde av resultatene fra handlingen nedenfor.  Dette representerer de normaliserte sluttkursene for hver av aksjene over den valgte tidsperioden.

def plot_data (df, title = "Aksjekurser"):
øks = df.plot (tittel = tittel, skriftstørrelse = 2)
øks.set_xlabel ("Date")
øks.set_ylabel ("Pris")
plott.vise fram()

Pandas er et robust databehandlingsbibliotek. Den kan brukes til forskjellige typer data og presenterer et kortfattet og effektivt sett med metoder for å manipulere datasettet. Nedenfor har jeg gitt den fulle koden fra opplæringen, slik at du kan se gjennom og endre for å dekke dine behov. Det er noen få andre metoder som hjelper deg med datamanipulering, og jeg oppfordrer deg til å se gjennom pandadokumentene som er lagt ut på referansesidene nedenfor. NumPy og MatPlotLib er to andre biblioteker som fungerer bra for datavitenskap og kan brukes til å forbedre kraften til pandabiblioteket.

Full kode

importer pandaer som pd
def plot_selected (df, columns, start_index, end_index):
plot_data (df.ix [start_index: end_index, kolonner])
def get_data (symboler, startdato, sluttdato):
panel = data.DataReader (symboler, 'yahoo', startdato, sluttdato)
df = panel ['Lukk']
skriv ut (df.hode (5))
skriv ut (df.hale (5))
skriv ut df.loc ["12-12-2017"]
skriv ut df.loc ["12-12-2017", "AAPL"]
skriv ut df.loc [:, "GOOG"]
df.fillna (0)
retur df
def normaliser_data (df):
returner df / df.ix [0 ,:]
def plot_data (df, title = "Aksjekurser"):
øks = df.plot (tittel = tittel, skriftstørrelse = 2)
øks.set_xlabel ("Date")
øks.set_ylabel ("Pris")
plott.vise fram()
def tutorial_run ():
#Velg symboler
symboler = ['SPY', 'AAPL', 'GOOG']
# få data
df = get_data (symboler, '2006-01-03', '2017-12-31')
plot_data (df)
hvis __name__ == "__main__":
tutorial_run ()

Referanser

Hjemmeside for Panda
Pandas Wikipedia-side
https: // no.wikipedia.org / wiki / Wes_McKinney
NumFocus hjemmeside

Beste spillkonsollemulatorer for Linux
Denne artikkelen vil liste opp populære programvare for spillkonsollemulering tilgjengelig for Linux. Emulation er et programvarekompatibilitetslag so...
Beste Linux Distros for spill i 2021
Linux-operativsystemet har kommet langt fra det originale, enkle, serverbaserte utseendet. Dette operativsystemet har forbedret seg enormt de siste år...
Hvordan fange opp og streame spilløkten din på Linux
Tidligere ble spill bare ansett som en hobby, men med tiden så spillindustrien en enorm vekst når det gjelder teknologi og antall spillere. Spillpubli...