Serie og DataFrame i Python

For et par måneder siden tog jeg online-kurset “Brug af Python til forskning”, der blev tilbudt af Harvard University på edX. Mens jeg tog kurset, lærte jeg mange begreber Python, NumPy, Matplotlib og PyPlot. Jeg havde også mulighed for at arbejde på casestudier i løbet af dette kursus og var i stand til at bruge min viden om faktiske datasæt. For mere information om dette program, se her.

Jeg lærte to vigtige begreber i dette kursus - Series og DataFrame. Jeg vil introducere disse til dig gennem en kort vejledning.

For at starte med vejledningen kan vi hente den nyeste kildekode for Python fra den officielle hjemmeside her.

Når du har installeret, er Python installeret, bruger du en grafisk brugergrænseflade kaldet IDLE til at arbejde med Python.

Lad os importere pandaer til vores arbejdsområde. Pandas er et Python-bibliotek, der leverer datastrukturer og dataanalyseværktøjer til forskellige funktioner.

Serie

En serie er et endimensionelt objekt, der kan indeholde enhver datatype som heltal, flyder og strenge. Lad os tage en liste over emner som inputargument og oprette et serieobjekt til denne liste.

>>> import pandas as pd
>>> x = pd.Series([6,3,4,6])
>>> x
0 6
1 3
2 4
3 6
dtype: int64

Aksemærkerne for dataene kaldet indekset. Indeksets længde skal være den samme som datalængden. Da vi ikke har bestået noget indeks i koden ovenfor, oprettes standardindekset med værdier[0, 1, … len(data) -1]

Lad os gå videre og definere indekser for dataene.

>>> x = pd.Series([6,3,4,6], index=[‘a’, ‘b’, ‘c’, ‘d’])
>>> x
a 6
b 3
c 4
d 6
dtype: int64

Indekset i kolonnen mest til venstre henviser nu til data i højre kolonne.

Vi kan slå dataene op ved at henvise til dets indeks:

>>> x[“c”]
4

Python giver os de relevante data til indekset.

Et eksempel på en datatype er nedenstående ordbog. Indekset og værdierne korrelerer med nøgler og værdier. Vi kan bruge indekset til at få de værdier af data, der svarer til etiketterne i indekset.

>>> data = {‘abc’: 1, ‘def’: 2, ‘xyz’: 3}
>>> pd.Series(data)
abc 1
def 2
xyz 3
dtype: int64

Et andet interessant træk i serien er at have data som en skalær værdi. I så fald gentages dataværdien for hvert af de definerede indekser.

>>> x = pd.Series(3, index=[‘a’, ‘b’, ‘c’, ‘d’])
>>> x
a 3
b 3
c 3
d 3
dtype: int64

DataFrame

En DataFrame er et todimensionelt objekt, der kan have kolonner med forskellige potentielle typer. Forskellige slags input inkluderer ordbøger, lister, serier og endda en anden DataFrame.

Det er det mest anvendte pandaobjekt.

Lad os gå videre og oprette en DataFrame ved at sende et NumPy-array med datetime som indekser og mærkede kolonner:

>>> import numpy as np
>>> dates = pd.date_range(‘20170505’, periods = 8)
>>> dates
DatetimeIndex([‘2017–05–05’, ‘2017–05–06’, ‘2017–05–07’, ‘2017–05–08’,
‘2017–05–09’, ‘2017–05–10’, ‘2017–05–11’, ‘2017–05–12’],
dtype=’datetime64[ns]’, freq=’D’)
>>> df = pd.DataFrame(np.random.randn(8,3), index=dates, columns=list(‘ABC’))
>>> df
A B C
2017–05–05 -0.301877 1.508536 -2.065571
2017–05–06 0.613538 -0.052423 -1.206090
2017–05–07 0.772951 0.835798 0.345913
2017–05–08 1.339559 0.900384 -1.037658
2017–05–09 -0.695919 1.372793 0.539752
2017–05–10 0.275916 -0.420183 1.744796
2017–05–11 -0.206065 0.910706 -0.028646
2017–05–12 1.178219 0.783122 0.829979

En DataFrame med et datetime interval på 8 dage oprettes som vist ovenfor. Vi kan se de øverste og nederste rækker af rammen ved hjælp af df.headog df.tail:

>>> df.head()
A B C
2017–05–05 -0.301877 1.508536 -2.065571
2017–05–06 0.613538 -0.052423 -1.206090
2017–05–07 0.772951 0.835798 0.345913
2017–05–08 1.339559 0.900384 -1.037658
2017–05–09 -0.695919 1.372793 0.539752
>>> df.tail()
A B C
2017–05–08 1.339559 0.900384 -1.037658
2017–05–09 -0.695919 1.372793 0.539752
2017–05–10 0.275916 -0.420183 1.744796
2017–05–11 -0.206065 0.910706 -0.028646
2017–05–12 1.178219 0.783122 0.829979

Vi kan også observere en hurtig statistikoversigt over vores data:

>>> df.describe()
A B C
count 8.000000 8.000000 8.000000
mean 0.372040 0.729842 -0.109691
std 0.731262 0.657931 1.244801
min -0.695919 -0.420183 -2.065571
25% -0.230018 0.574236 -1.079766
50% 0.444727 0.868091 0.158633
75% 0.874268 1.026228 0.612309
max 1.339559 1.508536 1.744796

Vi kan også anvende funktioner til dataene som kumulativ sum, se histogrammer, flette DataFrames, sammenkæde og omforme DataFrames.

>>> df.apply(np.cumsum)
A B C
2017–05–05 -0.301877 1.508536 -2.065571
2017–05–06 0.311661 1.456113 -3.271661
2017–05–07 1.084612 2.291911 -2.925748
2017–05–08 2.424171 3.192296 -3.963406
2017–05–09 1.728252 4.565088 -3.423654
2017–05–10 2.004169 4.144905 -1.678858
2017–05–11 1.798104 5.055611 -1.707504
2017–05–12 2.976322 5.838734 -0.877526

Du kan læse flere detaljer om disse datastrukturer her.