Gegevenswetenschap

Panda's Data Frame-zelfstudie

Panda's Data Frame-zelfstudie

Panda's voor numerieke analyse

Pandas is ontwikkeld vanuit de behoefte aan een efficiënte manier om financiële gegevens in Python te beheren.  Pandas is een bibliotheek die in Python kan worden geïmporteerd om te helpen bij het manipuleren en transformeren van numerieke gegevens. Wes McKinney begon het project in 2008.  Pandas wordt nu beheerd door een groep ingenieurs en wordt ondersteund door de non-profitorganisatie NUMfocus, die haar toekomstige groei en ontwikkeling zal verzekeren. Dit betekent dat panda's jarenlang een stabiele bibliotheek zullen zijn en in uw toepassingen kunnen worden opgenomen zonder dat u zich zorgen hoeft te maken over een klein project.

Hoewel panda's in eerste instantie zijn ontwikkeld om financiële gegevens te modelleren, kunnen de gegevensstructuren worden gebruikt om een ​​verscheidenheid aan numerieke gegevens te manipuleren.  Pandas heeft een aantal ingebouwde datastructuren die kunnen worden gebruikt om eenvoudig numerieke gegevens te modelleren en te manipuleren. Deze tutorial behandelt de panda's DataFrame datastructuur in de diepte.

Wat is een DataFrame?

EEN DataFrame is een van de primaire gegevensstructuren in panda's en vertegenwoordigt een 2D-verzameling gegevens.  Er zijn veel analoge objecten voor dit type 2D-gegevensstructuur, waaronder de immer populaire Excel-spreadsheet, een databasetabel of een 2D-array die in de meeste programmeertalen wordt gevonden.  Hieronder is een voorbeeld van een DataFrame in een grafisch formaat.  Het vertegenwoordigt een groep tijdreeksen van slotkoersen op datum by.

Deze tutorial zal je door veel van de methoden van het dataframe leiden en ik zal een realistisch financieel model gebruiken om deze functies te demonstreren.

Gegevens importeren

Pandas-klassen hebben een aantal ingebouwde methoden om te helpen bij het importeren van gegevens in een gegevensstructuur. Hieronder ziet u een voorbeeld van hoe u gegevens in een panda-paneel kunt importeren met de DataReader klasse.  Het kan worden gebruikt om gegevens te importeren uit verschillende gratis financiële gegevensbronnen, waaronder Quandl, Yahoo Finance en Google. Om de panda-bibliotheek te gebruiken, moet je deze als import in je code toevoegen.

panda's importeren als pd

Met de onderstaande methode wordt het programma gestart door de zelfstudie-run-methode uit te voeren.

if __name__ == "__main__":
tutorial_run()

De tutorial_run methode is hieronder:.  Het is de volgende methode die ik aan de code zal toevoegen.  De eerste regel van deze methode definieert een lijst met aandelentickers.  Deze variabele zal later in de code worden gebruikt als een lijst met aandelen waarvoor gegevens zullen worden opgevraagd om de DataFrame.  De tweede regel code roept de gegevens verkrijgen methode.  Zoals we zullen zien, is de gegevens verkrijgen methode heeft drie parameters als invoer. We zullen de lijst met aandelenkoersen, de startdatum en einddatum doorgeven voor de gegevens die we zullen opvragen.

def tutorial_run():
#Stock Tickers naar bron van Yahoo Finance
symbolen = ['SPY', 'AAPL','GOOG']
#gegevens verkrijgen
df = get_data (symbolen, '2006-01-03', '2017-12-31')

Hieronder zullen we de . definiëren gegevens verkrijgen methode.  Zoals ik hierboven al zei, zijn er drie parameters nodig: een lijst met symbolen, een start- en einddatum.

De eerste regel code definieert een panda-paneel door a . te instantiëren DataReader klasse.  De oproep aan de DataReader class zal verbinding maken met de Yahoo Finance-server en de dagelijkse hoge, lage, gesloten en aangepaste slotwaarden opvragen voor elk van de aandelen in de symbolen lijst.  Deze gegevens worden door panda's in een paneelobject geladen.

EEN paneel is een 3D-matrix en kan worden beschouwd als een "stapel" van DataFrames.  Elk DataFrame in de stapel bevat een van de dagelijkse waarden voor de gevraagde voorraden en datumbereiken.  Bijvoorbeeld de onderstaande DataFrame, eerder gepresenteerd, is de slotkoers? DataFrame van het verzoek.  Elk type prijs (hoog, laag, dichtbij en aangepast dichtbij) heeft zijn eigen DataFrame in het resulterende paneel dat is geretourneerd uit het verzoek.

De tweede regel code verdeelt het paneel in een enkele DataFrame en wijst de resulterende gegevens toe aan: df.  Dit wordt mijn variabele voor de DataFrame die ik gebruik voor de rest van de tutorial.  Het bevat dagelijkse slotwaarden voor de drie aandelen voor de gespecificeerde periode.  Het paneel wordt gesegmenteerd door op te geven welk van het paneel DataFrames je zou willen terugkeren.  In deze voorbeeldregel code hieronder is dit de 'Sluiten'.

Zodra we onze DataFrame ter plekke zal ik enkele van de handige functies in de panda's-bibliotheek behandelen waarmee we de gegevens in de kunnen manipuleren DataFrame voorwerp.

def get_data (symbolen, startdatum, einddatum):
paneel = gegevens.DataReader (symbolen, 'yahoo', startdatum, einddatum)
df = paneel['Sluiten']
print(df.hoofd(5))
print(df.staart(5))
retour df

Koppen en staarten

De derde en vierde regel van gegevens verkrijgen print de functie kop en staart van het dataframe.  Ik vind dit het handigst bij het debuggen en visualiseren van de gegevens, maar het kan ook worden gebruikt om het eerste of laatste voorbeeld van de gegevens in de DataFrame.  De kop- en staartfunctie haalt de eerste en laatste rij gegevens uit de DataFrame.  De integer-parameter tussen de haakjes definieert het aantal rijen dat door de methode moet worden geselecteerd.

 .plaats

De DataFrame plaats methode snijdt de DataFrame op index.  De onderstaande regel code snijdt de df DataFrame door de index 2017-12-12.  Ik heb een screenshot van de resultaten hieronder gegeven:.

print df.plaats["2017-12-12"]

plaats kan ook als een tweedimensionale plak worden gebruikt. De eerste parameter is de rij en de tweede parameter is de kolom.  De onderstaande code retourneert een enkele waarde die gelijk is aan de slotkoers van Apple op 12/12/2014.

print df.loc["2017-12-12", "AAPL" ]

De plaats methode kan worden gebruikt om alle rijen in een kolom of alle kolommen in een rij te segmenteren. De : operator wordt gebruikt om alles aan te duiden.  De onderstaande coderegel selecteert alle rijen in de kolom voor Google-slotprijzen.

print df.loc[: , "GOOG" ]

.vullen

Het is gebruikelijk, vooral in financiële datasets, om NaN-waarden in uw DataFrame.  Panda's biedt een functie om deze waarden te vullen met een numerieke waarde.  Dit is handig als u een soort berekening wilt uitvoeren op de gegevens die mogelijk scheef zijn of mislukken vanwege de NaN-waarden.

De .vullen methode vervangt de opgegeven waarde voor elke NaN-waarde in uw dataset.  De onderstaande regel code vult alle NaN in onze DataFrame met een 0.  Deze standaardwaarde kan worden gewijzigd voor een waarde die voldoet aan de behoefte van de dataset waarmee u werkt door de parameter bij te werken die aan de methode is doorgegeven.

df.vullen(0)

Gegevens normaliseren

Bij het gebruik van algoritmen voor machine learning of financiële analyse is het vaak handig om uw waarden te normaliseren.  De onderstaande methode is een efficiënte berekening voor het normaliseren van gegevens in een panda DataFrame.  Ik moedig u aan om deze methode te gebruiken omdat deze code efficiënter zal werken dan andere methoden voor normalisatie en grote prestatieverbeteringen kan laten zien op grote datasets.

.iloc is een methode die lijkt op .plaats maar neemt locatiegebaseerde parameters in plaats van op tags gebaseerde parameters.  Er is een op de nul gebaseerde index nodig in plaats van de kolomnaam van de .plaats voorbeeld.  De onderstaande normalisatiecode is een voorbeeld van enkele van de krachtige matrixberekeningen die kunnen worden uitgevoerd.  Ik zal de lineaire algebra-les overslaan, maar in wezen zal deze regel code de hele matrix verdelen of DataFrame door de eerste waarde van elke tijdreeks.   Afhankelijk van je dataset, wil je misschien een norm op basis van min, max of mean.  Deze normen kunnen ook eenvoudig worden berekend met behulp van de onderstaande matrixgebaseerde stijl.

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

Gegevens plotten

Bij het werken met gegevens is het vaak nodig om deze grafisch weer te geven.  Met de plotmethode kunt u eenvoudig een grafiek maken van uw gegevenssets.

De onderstaande methode neemt onze DataFrame en plot het op een standaard lijngrafiek.  De methode duurt een DataFrame en een titel als parameters.  De eerste regel met codesets bijl naar een perceel van de DataFrame df.  Het stelt de titel en lettergrootte voor de tekst in.  De volgende twee regels stellen de labels in voor de x- en y-as.  De laatste regel code roept de show-methode aan die de grafiek naar de console afdrukt. Ik heb een schermafbeelding van de resultaten van de onderstaande plot gegeven:.  Dit vertegenwoordigt de genormaliseerde slotkoersen voor elk van de aandelen gedurende de geselecteerde periode.

def plot_data(df, title="Aandelenkoersen"):
bijl = df.plot(titel=titel,lettergrootte = 2)
bijl.set_xlabel("Datum")
bijl.set_ylabel("Prijs")
verhaal.tonen()

Pandas is een robuuste bibliotheek voor gegevensmanipulatie. Het kan voor verschillende soorten gegevens worden gebruikt en biedt een beknopte en efficiënte reeks methoden om uw gegevensset te manipuleren. Hieronder heb ik de volledige code uit de zelfstudie gegeven, zodat u deze kunt bekijken en wijzigen om aan uw behoeften te voldoen. Er zijn een paar andere methoden die u helpen bij het manipuleren van gegevens en ik moedig u aan om de panda's-documenten te bekijken die op de onderstaande referentiepagina's zijn geplaatst. NumPy en MatPlotLib zijn twee andere bibliotheken die goed werken voor datawetenschap en kunnen worden gebruikt om de kracht van de pandabibliotheek te verbeteren.

Volledige code

panda's importeren als pd
def plot_selected(df, kolommen, start_index, end_index):
plot_data(df.ix[start_index:end_index, kolommen])
def get_data (symbolen, startdatum, einddatum):
paneel = gegevens.DataReader (symbolen, 'yahoo', startdatum, einddatum)
df = paneel['Sluiten']
print(df.hoofd(5))
print(df.staart(5))
print df.plaats["2017-12-12"]
print df.loc["2017-12-12", "AAPL" ]
print df.loc[: , "GOOG" ]
df.vullen(0)
retour df
def normalize_data(df):
retour df / df.ix[0,:]
def plot_data(df, title="Aandelenkoersen"):
bijl = df.plot(titel=titel,lettergrootte = 2)
bijl.set_xlabel("Datum")
bijl.set_ylabel("Prijs")
verhaal.tonen()
def tutorial_run():
#Kies symbolen
symbolen = ['SPY', 'AAPL','GOOG']
#gegevens verkrijgen
df = get_data (symbolen, '2006-01-03', '2017-12-31')
plot_data(df)
if __name__ == "__main__":
tutorial_run()

Referenties

Homepage van panda's
Panda's Wikipedia-pagina
https://nl.wikipedia.org/wiki/Wes_McKinney
NumFocus-startpagina

Strijd om Wesnoth Zelfstudie
The Battle for Wesnoth is een van de meest populaire open source strategiespellen die je op dit moment kunt spelen. Dit spel is niet alleen al heel la...
0 A.D. zelfstudie
Van de vele strategiespellen die er zijn, 0 A.D. slaagt erin om op te vallen als een uitgebreide titel en een zeer diep, tactisch spel ondanks dat het...
Unity3D-zelfstudie
Inleiding tot Unity 3D Unity 3D is een krachtige game-ontwikkelingsengine. Het is platformoverschrijdend, zodat je games voor mobiel, internet, deskto...