Σειρά και DataFrame στην Python

Πριν από μερικούς μήνες, παρακολούθησα το διαδικτυακό μάθημα «Using Python for Research» που προσφέρθηκε από το Πανεπιστήμιο του Χάρβαρντ στο edX. Κατά τη διάρκεια του μαθήματος, έμαθα πολλές έννοιες των Python, NumPy, Matplotlib και PyPlot. Είχα επίσης την ευκαιρία να εργαστώ σε μελέτες περιπτώσεων κατά τη διάρκεια αυτού του μαθήματος και μπόρεσα να χρησιμοποιήσω τις γνώσεις μου σε πραγματικά σύνολα δεδομένων. Για περισσότερες πληροφορίες σχετικά με αυτό το πρόγραμμα, δείτε εδώ.

Έμαθα δύο σημαντικές έννοιες σε αυτό το μάθημα - Σειρά και DataFrame. Θέλω να σας παρουσιάσω μέσω ενός σύντομου σεμιναρίου.

Για να ξεκινήσετε με το σεμινάριο, ας λάβουμε τον πιο πρόσφατο πηγαίο κώδικα του Python από τον επίσημο ιστότοπο εδώ.

Μόλις εγκαταστήσετε το Python, θα χρησιμοποιήσετε μια γραφική διεπαφή χρήστη που ονομάζεται IDLE για να εργαστείτε με την Python.

Ας εισαγάγουμε τα Pandas στο χώρο εργασίας μας. Το Pandas είναι μια βιβλιοθήκη Python που παρέχει δομές δεδομένων και εργαλεία ανάλυσης δεδομένων για διαφορετικές λειτουργίες.

Σειρά

Η σειρά είναι ένα μονοδιάστατο αντικείμενο που μπορεί να χωρέσει οποιονδήποτε τύπο δεδομένων όπως ακέραιους αριθμούς, πλωτήρες και χορδές. Ας πάρουμε μια λίστα στοιχείων ως όρισμα εισαγωγής και δημιουργήστε ένα αντικείμενο Σειράς για αυτήν τη λίστα.

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

Οι ετικέτες του άξονα για τα δεδομένα αναφέρονται ως ευρετήριο. Το μήκος του ευρετηρίου πρέπει να είναι το ίδιο με το μήκος των δεδομένων. Επειδή δεν έχουμε περάσει κανένα ευρετήριο στον παραπάνω κώδικα, το προεπιλεγμένο ευρετήριο θα δημιουργηθεί με τιμές[0, 1, … len(data) -1]

Ας προχωρήσουμε και να ορίσουμε ευρετήρια για τα δεδομένα.

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

Το ευρετήριο στην πιο αριστερή στήλη αναφέρεται τώρα σε δεδομένα στη δεξιά στήλη.

Μπορούμε να αναζητήσουμε τα δεδομένα αναφερόμενοι στο ευρετήριό του:

>>> x[“c”]
4

Η Python μας δίνει τα σχετικά δεδομένα για το ευρετήριο.

Ένα παράδειγμα τύπου δεδομένων είναι το λεξικό που ορίζεται παρακάτω. Ο δείκτης και οι τιμές συσχετίζονται με κλειδιά και τιμές. Μπορούμε να χρησιμοποιήσουμε το ευρετήριο για να πάρουμε τις τιμές των δεδομένων που αντιστοιχούν στις ετικέτες του ευρετηρίου.

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

Ένα άλλο ενδιαφέρον χαρακτηριστικό της σειράς είναι τα δεδομένα ως βαθμιαία τιμή. Σε αυτήν την περίπτωση, η τιμή δεδομένων επαναλαμβάνεται για κάθε ένα από τα καθορισμένα ευρετήρια.

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

Πλαίσιο δεδομένων

Το DataFrame είναι ένα δισδιάστατο αντικείμενο που μπορεί να έχει στήλες με δυνητικούς διαφορετικούς τύπους. Διαφορετικό είδος εισόδων περιλαμβάνουν λεξικά, λίστες, σειρές, ακόμη και ένα άλλο DataFrame.

Είναι το πιο συχνά χρησιμοποιούμενο αντικείμενο pandas.

Ας προχωρήσουμε και δημιουργήσουμε ένα DataFrame περνώντας έναν πίνακα NumPy με ώρα χρόνου ως ευρετήρια και στήλες με ετικέτα:

>>> 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

Δημιουργείται ένα DataFrame με εύρος χρόνου 8 ημερών όπως φαίνεται παραπάνω. Μπορούμε να δούμε τις επάνω και κάτω σειρές του πλαισίου χρησιμοποιώντας df.headκαι 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

Μπορούμε επίσης να παρατηρήσουμε μια γρήγορη στατιστική περίληψη των δεδομένων μας:

>>> 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

Μπορούμε επίσης να εφαρμόσουμε συναρτήσεις στα δεδομένα, όπως αθροιστικό άθροισμα, προβολή ιστογραμμάτων, συγχώνευση DataFrames, συνένωση και αναμόρφωση του 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

Μπορείτε να διαβάσετε περισσότερες λεπτομέρειες σχετικά με αυτές τις δομές δεδομένων εδώ.