Znanost o podacima

Vodič za Pandas okvir podataka

Vodič za Pandas okvir podataka

Pande za numeričku analizu

Pandas je razvijen iz potrebe za učinkovitim načinom upravljanja financijskim podacima u Pythonu.  Pandas je knjižnica koja se može uvesti u python za pomoć u manipulaciji i transformiranju numeričkih podataka. Wes McKinney započeo je projekt 2008. godine.  Pandasom sada upravlja grupa inženjera, a podržava neprofitna organizacija NUMFocus, koja će osigurati njezin budući rast i razvoj. To znači da će pande biti stabilna knjižnica dugi niz godina i moći će se uključiti u vaše aplikacije bez brige zbog malog projekta.

Iako su pande u početku razvijene za modeliranje financijskih podataka, njihove strukture podataka mogu se koristiti za manipulaciju raznim numeričkim podacima.  Pandas ima niz ugrađenih struktura podataka koje se mogu koristiti za jednostavno modeliranje i manipulaciju numeričkim podacima. Ovaj vodič obuhvatit će pande DataFrame dubinska struktura podataka.

Što je DataFrame?

A DataFrame jedna je od primarnih struktura podataka u pandama i predstavlja 2-D zbirku podataka.  Postoji mnogo analognih objekata za ovu vrstu 2-D strukture podataka od kojih neki uključuju uvijek popularnu Excel tablicu, tablicu baze podataka ili 2-D niz koji se nalazi u većini programskih jezika.  Ispod je primjer a DataFrame u grafičkom formatu.  Predstavlja skup vremenskih serija cijena zatvaranja dionica po datumu.

Ovaj vodič će vas provesti kroz mnoge metode okvira podataka, a ja ću upotrijebiti financijski model iz stvarnog svijeta da pokažem ove funkcije.

Uvoz podataka

Klase panda imaju neke ugrađene metode koje pomažu u uvozu podataka u strukturu podataka. Ispod je primjer kako uvesti podatke u ploču panda pomoću DataReader razred.  Može se koristiti za uvoz podataka iz nekoliko besplatnih izvora financijskih podataka, uključujući Quandl, Yahoo Finance i Google. Da biste koristili biblioteku panda, morate je dodati kao uvoz u svoj kôd.

uvoziti pande kao pd

Metoda u nastavku pokrenut će program izvođenjem metode pokretanja vodiča.

ako je __name__ == "__glavno__":
tutorial_run ()

The tutorial_run metoda je dolje.  To je sljedeća metoda koju ću dodati kodu.  Prvi redak ove metode definira popis dionica.  Ova će se varijabla koristiti kasnije u kodu kao popis zaliha za koje će se tražiti podaci kako bi se popunili DataFrame.  Drugi redak koda poziva get_data metoda.  Kao što ćemo vidjeti, get_data metoda uzima tri parametra kao svoj ulaz. Proslijedit ćemo popis dionica, datum početka i datum završetka podataka koje ćemo zatražiti.

def tutorial_run ():
#Stock Tickers za izvor iz Yahoo Finance
simboli = ['ŠPIJUNIRANJE', 'AAPL', 'GOOG']
# dobiti podatke
df = get_data (simboli, '03.01.2006', '31.12.2017')

U nastavku ćemo definirati get_data metoda.  Kao što sam gore spomenuo, potrebna su tri parametra: popis simbola, datum početka i završetka.

Prvi redak koda definira panel pandi instanciranjem a DataReader razred.  Poziv na DataReader klase će se povezati s Yahoo Finance poslužiteljem i zatražiti dnevne visoke, niske, bliske i prilagođene vrijednosti zatvaranja za svaku dionicu u simboli popis.  Te podatke pande učitavaju u objekt ploče.

A ploča je 3-D matrica i može se smatrati "hrpom" od Okviri podataka.  Svaki DataFrame u hrpi sadrži jednu od dnevnih vrijednosti zaliha i traženih raspona.  Na primjer, dolje DataFrame, predstavljena ranije, cijena je zatvaranja DataFrame iz zahtjeva.  Svaka vrsta cijene (visoka, niska, bliska i prilagođena zatvorena) ima svoju DataFrame u rezultirajućem panelu vraćenom iz zahtjeva.

Drugi redak koda rezanje ploče u jedan DataFrame i dodjeljuje rezultirajuće podatke df.  Ovo će biti moja varijabla za DataFrame koje koristim za ostatak tutorijala.  Drži dnevne bliske vrijednosti za tri dionice za navedeni datumski raspon.  Ploča se reže određivanjem koje od ploča Okviri podataka htjeli biste se vratiti.  U ovom primjeru retka koda ispod, to je "Zatvori".

Jednom kad imamo svoje DataFrame na mjestu ću pokriti neke korisne funkcije u biblioteci panda koje će nam omogućiti manipulaciju podacima u DataFrame objekt.

def get_data (simboli, datum_početka, datum_konca):
ploča = podaci.DataReader (simboli, 'yahoo', start_date, end_date)
df = ploča ['Zatvori']
ispis (df.glava (5))
ispis (df.rep (5))
povratak df

Glave i repovi

Treći i četvrti redak get_data ispisati funkcijsku glavu i rep okvira podataka.  Smatram da je ovo najkorisnije u otklanjanju pogrešaka i vizualizaciji podataka, ali se također može koristiti za odabir prvog ili posljednjeg uzorka podataka u DataFrame.  Funkcija glave i repa izvlači prvi i zadnji redak podataka iz DataFrame.  Cjelobrojni parametar između zagrada definira broj redaka koje će metoda odabrati.

 .lok

The DataFrame lok metoda reže DataFrame po indeksu.  Donji redak koda reže df DataFrame indeksom 2017-12-12.  U nastavku sam dao snimak zaslona rezultata.

ispis df.loc ["12.12.2017"]

lok može se koristiti i kao dvodimenzionalna kriška. Prvi parametar je redak, a drugi parametar stupac.  Kôd u nastavku vraća jednu vrijednost koja je jednaka cijeni zatvaranja Applea 12. 12. 2014.

ispis df.loc ["12.12.2017", "AAPL"]

The lok metoda može se koristiti za rezanje svih redaka u stupcu ili svih stupaca u redu. The : operator se koristi za označavanje svih.  Redak koda u nastavku odabire sve retke u stupcu za Googleove cijene zatvaranja.

ispis df.loc [:, "GOOG"]

.fillna

Uobičajeno je, posebno u skupovima financijskih podataka, imati NaN vrijednosti u sebi DataFrame.  Pandas nudi funkciju za popunjavanje ovih vrijednosti numeričkom vrijednošću.  To je korisno ako želite izvršiti neku vrstu izračuna na podacima koji mogu biti iskrivljeni ili neće uspjeti zbog NaN vrijednosti.

The .fillna metoda će zamijeniti navedenu vrijednost za svaku NaN vrijednost u vašem skupu podataka.  Donji redak koda ispunit će sav NaN u našem DataFrame sa 0.  Ova zadana vrijednost može se promijeniti za vrijednost koja udovoljava potrebi skupa podataka s kojim radite ažuriranjem parametra koji se prosljeđuje metodi.

df.fillna (0)

Normaliziranje podataka

Kada koristite algoritme strojnog učenja ili financijske analize, često je korisno normalizirati svoje vrijednosti.  Dolje navedena metoda učinkovit je izračun za normalizaciju podataka u pandama DataFrame.  Preporučujem vam da koristite ovu metodu jer će se ovaj kôd izvoditi učinkovitije od ostalih metoda za normalizaciju i može pokazati veliko povećanje performansi na velikim skupovima podataka.

.iloc je metoda slična .lok ali uzima parametre koji se temelje na lokaciji, a ne na parametrima koji se temelje na oznakama.  Potreban je indeks zasnovan na nuli, a ne naziv stupca iz datoteke .lok primjer.  Donji normalizacijski kod primjer je nekih moćnih matričnih izračuna koji se mogu izvesti.  Preskočit ću lekciju linearne algebre, ali u osnovi će ovaj redak koda podijeliti cijelu matricu ili DataFrame prvom vrijednošću svakog vremenskog niza.   Ovisno o vašem skupu podataka, možda ćete htjeti normu koja se temelji na minimalnoj, maksimalnoj ili srednjoj vrijednosti.  Te se norme također mogu lako izračunati pomoću dolje navedenog matričnog stila.

def normalize_data (df):
povratak df / df.iloc [0 ,:]

Ucrtavanje podataka

Kada radite s podacima, često ih je potrebno grafički prikazati.  Način crtanja omogućuje vam lako građenje grafa iz vaših skupova podataka.

Metoda u nastavku uzima našu DataFrame i iscrtava ga na standardnom linijskom grafikonu.  Metoda uzima a DataFrame i naslov kao njegove parametre.  Prvi redak skupova kodova sjekira na zaplet DataFrame df.  Postavlja naslov i veličinu fonta za tekst.  Sljedeća dva retka postavljaju oznake za osi x i y.  Posljednji redak koda poziva metodu show koja ispisuje graf na konzolu. U nastavku sam pružio snimku zaslona rezultata iz zavjere.  To predstavlja normalizirane cijene zatvaranja svake od dionica tijekom odabranog vremenskog razdoblja.

def plot_data (df, title = "Cijene dionica"):
sjekira = df.zaplet (naslov = naslov, veličina slova = 2)
sjekira.set_xlabel ("Datum")
sjekira.set_ylabel ("Cijena")
zemljište.pokazati()

Pandas je robusna biblioteka za upravljanje podacima. Može se koristiti za različite vrste podataka i predstavlja sažet i učinkovit skup metoda za upravljanje vašim skupom podataka. U nastavku sam dao cjeloviti kôd iz vodiča tako da ga možete pregledati i promijeniti u skladu sa svojim potrebama. Postoji nekoliko drugih metoda koje vam pomažu u manipulaciji podacima i potičem vas da pregledate dokumente o pandama objavljene na donjim referentnim stranicama. NumPy i MatPlotLib dvije su druge knjižnice koje dobro rade za znanost o podacima i mogu se koristiti za poboljšanje snage knjižnice panda.

Puni kod

uvoziti pande kao pd
def plot_selected (df, columns, start_index, end_index):
podaci o parceli (df.ix [start_index: end_index, stupci])
def get_data (simboli, datum_početka, datum_konca):
ploča = podaci.DataReader (simboli, 'yahoo', start_date, end_date)
df = ploča ['Zatvori']
ispis (df.glava (5))
ispis (df.rep (5))
ispis df.loc ["12.12.2017"]
ispis df.loc ["12.12.2017", "AAPL"]
ispis df.loc [:, "GOOG"]
df.fillna (0)
povratak df
def normalize_data (df):
povratak df / df.ix [0 ,:]
def plot_data (df, title = "Cijene dionica"):
sjekira = df.zaplet (naslov = naslov, veličina slova = 2)
sjekira.set_xlabel ("Datum")
sjekira.set_ylabel ("Cijena")
zemljište.pokazati()
def tutorial_run ():
#Odaberi simbole
simboli = ['ŠPIJUNIRANJE', 'AAPL', 'GOOG']
# dobiti podatke
df = get_data (simboli, '03.01.2006', '31.12.2017')
podaci o parceli (df)
ako je __name__ == "__glavno__":
tutorial_run ()

Reference

Početna stranica Pande
Stranica Pandas Wikipedia
https: // en.wikipedija.org / wiki / Wes_McKinney
Početna stranica NumFocusa

Kako prikazati brojač FPS-a u Linux igrama
Linux gaming dobio je velik poticaj kada je Valve najavio Linux podršku za Steam klijent i njihove igre 2012. godine. Od tada su mnoge AAA i indie igr...
Kako preuzeti i igrati Sid Meier's Civilization VI na Linuxu
Uvod u igru Civilization 6 moderan je pogled na klasični koncept predstavljen u seriji igara Age of Empires. Ideja je bila prilično jednostavna; započ...
Kako instalirati i igrati Doom na Linuxu
Uvod u Doom Serija Doom nastala je 90-ih nakon izlaska originalnog Dooma. To je bio trenutni hit i od tog vremena nadalje igraća serija dobila je broj...