You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
Data-Science-For-Beginners/translations/el/2-Working-With-Data/08-data-preparation
leestott 264ebcc9fd
🌐 Update translations via Co-op Translator
2 weeks ago
..
README.md 🌐 Update translations via Co-op Translator 2 weeks ago
assignment.ipynb 🌐 Update translations via Co-op Translator 3 weeks ago
assignment.md 🌐 Update translations via Co-op Translator 3 weeks ago
notebook.ipynb 🌐 Update translations via Co-op Translator 3 weeks ago

README.md

Εργασία με Δεδομένα: Προετοιμασία Δεδομένων

 Σκίτσο από (@sketchthedocs)
Προετοιμασία Δεδομένων - Σκίτσο από @nitya

Προ-Διάλεξη Κουίζ

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

Η σημασία του καθαρισμού δεδομένων

  • Ευκολία χρήσης και επαναχρησιμοποίησης: Όταν τα δεδομένα είναι σωστά οργανωμένα και κανονικοποιημένα, είναι πιο εύκολο να αναζητηθούν, να χρησιμοποιηθούν και να μοιραστούν με άλλους.

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

  • Ακρίβεια μοντέλου: Τα καθαρισμένα δεδομένα βελτιώνουν την ακρίβεια των μοντέλων που βασίζονται σε αυτά.

Κοινά καθαριστικά στόχοι και στρατηγικές

  • Εξερεύνηση ενός συνόλου δεδομένων: Η εξερεύνηση δεδομένων, η οποία καλύπτεται σε ένα μεταγενέστερο μάθημα, μπορεί να σας βοηθήσει να εντοπίσετε δεδομένα που χρειάζονται καθαρισμό. Η οπτική παρατήρηση τιμών μέσα σε ένα σύνολο δεδομένων μπορεί να θέσει προσδοκίες για το πώς θα μοιάζει το υπόλοιπο ή να δώσει μια ιδέα για τα προβλήματα που μπορούν να επιλυθούν. Η εξερεύνηση μπορεί να περιλαμβάνει βασικές ερωτήσεις, οπτικοποιήσεις και δειγματοληψία.

  • Μορφοποίηση: Ανάλογα με την πηγή, τα δεδομένα μπορεί να έχουν ασυνέπειες στον τρόπο παρουσίασής τους. Αυτό μπορεί να προκαλέσει προβλήματα στην αναζήτηση και την αναπαράσταση της τιμής, όπου φαίνεται μέσα στο σύνολο δεδομένων αλλά δεν αναπαρίσταται σωστά στις οπτικοποιήσεις ή στα αποτελέσματα ερωτήσεων. Κοινά προβλήματα μορφοποίησης περιλαμβάνουν την επίλυση κενών, ημερομηνιών και τύπων δεδομένων. Η επίλυση προβλημάτων μορφοποίησης είναι συνήθως ευθύνη των χρηστών των δεδομένων. Για παράδειγμα, τα πρότυπα για το πώς παρουσιάζονται οι ημερομηνίες και οι αριθμοί μπορεί να διαφέρουν ανά χώρα.

  • Διπλοτυπίες: Δεδομένα που εμφανίζονται περισσότερες από μία φορές μπορεί να παράγουν ανακριβή αποτελέσματα και συνήθως πρέπει να αφαιρεθούν. Αυτό μπορεί να είναι συνηθισμένο όταν συνδυάζονται δύο ή περισσότερα σύνολα δεδομένων. Ωστόσο, υπάρχουν περιπτώσεις όπου οι διπλοτυπίες σε συνδυασμένα σύνολα δεδομένων περιέχουν στοιχεία που μπορούν να παρέχουν πρόσθετες πληροφορίες και μπορεί να χρειαστεί να διατηρηθούν.

  • Ελλείποντα δεδομένα: Τα ελλείποντα δεδομένα μπορεί να προκαλέσουν ανακρίβειες καθώς και αδύναμα ή προκατειλημμένα αποτελέσματα. Μερικές φορές αυτά μπορούν να επιλυθούν με "επανφόρτωση" των δεδομένων, συμπλήρωση των ελλειπόντων τιμών με υπολογισμούς και κώδικα όπως Python ή απλώς αφαίρεση της τιμής και των αντίστοιχων δεδομένων. Υπάρχουν πολλοί λόγοι για τους οποίους τα δεδομένα μπορεί να λείπουν και οι ενέργειες που λαμβάνονται για την επίλυση αυτών των ελλειπόντων τιμών μπορεί να εξαρτώνται από το πώς και γιατί χάθηκαν εξαρχής.

Εξερεύνηση πληροφοριών DataFrame

Στόχος μάθησης: Μέχρι το τέλος αυτής της υποενότητας, θα πρέπει να είστε άνετοι με την εύρεση γενικών πληροφοριών για τα δεδομένα που αποθηκεύονται σε pandas DataFrames.

Αφού φορτώσετε τα δεδομένα σας στο pandas, πιθανότατα θα βρίσκονται σε ένα DataFrame (ανατρέξτε στο προηγούμενο μάθημα για λεπτομερή επισκόπηση). Ωστόσο, αν το σύνολο δεδομένων στο DataFrame σας έχει 60.000 γραμμές και 400 στήλες, πώς ξεκινάτε να κατανοείτε τι έχετε να δουλέψετε; Ευτυχώς, το pandas παρέχει μερικά βολικά εργαλεία για να δείτε γρήγορα συνολικές πληροφορίες για ένα DataFrame, καθώς και τις πρώτες και τελευταίες γραμμές.

Για να εξερευνήσουμε αυτή τη λειτουργικότητα, θα εισάγουμε τη βιβλιοθήκη Python scikit-learn και θα χρησιμοποιήσουμε ένα εμβληματικό σύνολο δεδομένων: το Iris data set.

import pandas as pd
from sklearn.datasets import load_iris

iris = load_iris()
iris_df = pd.DataFrame(data=iris['data'], columns=iris['feature_names'])
sepal length (cm) sepal width (cm) petal length (cm) petal width (cm)
0 5.1 3.5 1.4 0.2
1 4.9 3.0 1.4 0.2
2 4.7 3.2 1.3 0.2
3 4.6 3.1 1.5 0.2
4 5.0 3.6 1.4 0.2
  • DataFrame.info: Για αρχή, η μέθοδος info() χρησιμοποιείται για να εκτυπώσει μια σύνοψη του περιεχομένου που υπάρχει σε ένα DataFrame. Ας δούμε αυτό το σύνολο δεδομένων για να δούμε τι έχουμε:
iris_df.info()
RangeIndex: 150 entries, 0 to 149
Data columns (total 4 columns):
 #   Column             Non-Null Count  Dtype  
---  ------             --------------  -----  
 0   sepal length (cm)  150 non-null    float64
 1   sepal width (cm)   150 non-null    float64
 2   petal length (cm)  150 non-null    float64
 3   petal width (cm)   150 non-null    float64
dtypes: float64(4)
memory usage: 4.8 KB

Από αυτό, γνωρίζουμε ότι το σύνολο δεδομένων Iris έχει 150 εγγραφές σε τέσσερις στήλες χωρίς κενές εγγραφές. Όλα τα δεδομένα αποθηκεύονται ως αριθμοί κινητής υποδιαστολής 64-bit.

  • DataFrame.head(): Στη συνέχεια, για να ελέγξουμε το πραγματικό περιεχόμενο του DataFrame, χρησιμοποιούμε τη μέθοδο head(). Ας δούμε τις πρώτες γραμμές του iris_df:
iris_df.head()
   sepal length (cm)  sepal width (cm)  petal length (cm)  petal width (cm)
0                5.1               3.5                1.4               0.2
1                4.9               3.0                1.4               0.2
2                4.7               3.2                1.3               0.2
3                4.6               3.1                1.5               0.2
4                5.0               3.6                1.4               0.2
  • DataFrame.tail(): Αντίθετα, για να ελέγξουμε τις τελευταίες γραμμές του DataFrame, χρησιμοποιούμε τη μέθοδο tail():
iris_df.tail()
     sepal length (cm)  sepal width (cm)  petal length (cm)  petal width (cm)
145                6.7               3.0                5.2               2.3
146                6.3               2.5                5.0               1.9
147                6.5               3.0                5.2               2.0
148                6.2               3.4                5.4               2.3
149                5.9               3.0                5.1               1.8

Συμπέρασμα: Ακόμα και μόνο κοιτάζοντας τα μεταδεδομένα για τις πληροφορίες σε ένα DataFrame ή τις πρώτες και τελευταίες τιμές σε αυτό, μπορείτε να αποκτήσετε άμεση ιδέα για το μέγεθος, το σχήμα και το περιεχόμενο των δεδομένων που επεξεργάζεστε.

Αντιμετώπιση Ελλειπόντων Δεδομένων

Στόχος μάθησης: Μέχρι το τέλος αυτής της υποενότητας, θα πρέπει να γνωρίζετε πώς να αντικαθιστάτε ή να αφαιρείτε κενές τιμές από DataFrames.

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

Το pandas χειρίζεται ελλείποντα δεδομένα με δύο τρόπους. Ο πρώτος, που έχετε δει σε προηγούμενες ενότητες, είναι το NaN, ή Not a Number. Πρόκειται για μια ειδική τιμή που αποτελεί μέρος της προδιαγραφής κινητής υποδιαστολής IEEE και χρησιμοποιείται μόνο για να υποδείξει ελλείποντα αριθμούς κινητής υποδιαστολής.

Για ελλείποντα δεδομένα εκτός από αριθμούς κινητής υποδιαστολής, το pandas χρησιμοποιεί το αντικείμενο None της Python. Ενώ μπορεί να φαίνεται μπερδεμένο ότι θα συναντήσετε δύο διαφορετικά είδη τιμών που λένε ουσιαστικά το ίδιο πράγμα, υπάρχουν βάσιμοι προγραμματιστικοί λόγοι για αυτήν την επιλογή σχεδίασης και, στην πράξη, αυτή η προσέγγιση επιτρέπει στο pandas να προσφέρει έναν καλό συμβιβασμό για τη συντριπτική πλειονότητα των περιπτώσεων. Παρ' όλα αυτά, τόσο το None όσο και το NaN φέρουν περιορισμούς που πρέπει να έχετε υπόψη σας σχετικά με το πώς μπορούν να χρησιμοποιηθούν.

Δείτε περισσότερα για το NaN και το None από το notebook!

  • Ανίχνευση κενών τιμών: Στο pandas, οι μέθοδοι isnull() και notnull() είναι οι κύριες μέθοδοι για την ανίχνευση κενών δεδομένων. Και οι δύο επιστρέφουν Boolean μάσκες πάνω από τα δεδομένα σας. Θα χρησιμοποιήσουμε το numpy για τιμές NaN:
import numpy as np

example1 = pd.Series([0, np.nan, '', None])
example1.isnull()
0    False
1     True
2    False
3     True
dtype: bool

Παρατηρήστε προσεκτικά την έξοδο. Σας εκπλήσσει κάτι; Ενώ το 0 είναι αριθμητικά μηδενικό, είναι παρ' όλα αυτά ένας απολύτως καλός ακέραιος αριθμός και το pandas τον αντιμετωπίζει ως τέτοιο. Το '' είναι λίγο πιο λεπτό. Ενώ το χρησιμοποιήσαμε στην Ενότητα 1 για να αντιπροσωπεύσουμε μια κενή τιμή συμβολοσειράς, είναι παρ' όλα αυτά ένα αντικείμενο συμβολοσειράς και όχι μια αναπαράσταση του κενού σύμφωνα με το pandas.

Τώρα, ας το αντιστρέψουμε και ας χρησιμοποιήσουμε αυτές τις μεθόδους με τρόπο πιο κοντά σε αυτόν που θα τις χρησιμοποιήσετε στην πράξη. Μπορείτε να χρησιμοποιήσετε Boolean μάσκες απευθείας ως δείκτη Series ή DataFrame, κάτι που μπορεί να είναι χρήσιμο όταν προσπαθείτε να εργαστείτε με απομονωμένες κενές (ή παρούσες) τιμές.

Συμπέρασμα: Οι μέθοδοι isnull() και notnull() παράγουν παρόμοια αποτελέσματα όταν τις χρησιμοποιείτε σε DataFrames: δείχνουν τα αποτελέσματα και τον δείκτη αυτών των αποτελεσμάτων, κάτι που θα σας βοηθήσει πολύ καθώς παλεύετε με τα δεδομένα σας.

  • Αφαίρεση κενών τιμών: Πέρα από την αναγνώριση ελλειπόντων τιμών, το pandas παρέχει έναν βολικό τρόπο για να αφαιρέσετε κενές τιμές από Series και DataFrames. (Ιδιαίτερα σε μεγάλα σύνολα δεδομένων, είναι συχνά πιο συνετό να αφαιρέσετε απλώς τις ελλείπουσες [NA] τιμές από την ανάλυσή σας παρά να τις αντιμετωπίσετε με άλλους τρόπους.) Για να το δείτε αυτό στην πράξη, ας επιστρέψουμε στο example1:
example1 = example1.dropna()
example1
0    0
2     
dtype: object

Σημειώστε ότι αυτό θα πρέπει να μοιάζει με την έξοδό σας από το example3[example3.notnull()]. Η διαφορά εδώ είναι ότι, αντί να κάνετε απλώς δείκτη στις τιμές της μάσκας, το dropna έχει αφαιρέσει αυτές τις ελλείπουσες τιμές από τη Series example1.

Επειδή τα DataFrames έχουν δύο διαστάσεις, προσφέρουν περισσότερες επιλογές για την αφαίρεση δεδομένων.

example2 = pd.DataFrame([[1,      np.nan, 7], 
                         [2,      5,      8], 
                         [np.nan, 6,      9]])
example2
0 1 2
0 1.0 NaN 7
1 2.0 5.0 8
2 NaN 6.0 9

(Παρατηρήσατε ότι το pandas ανέβασε δύο από τις στήλες σε κινητές υποδιαστολές για να φιλοξενήσει τα NaNs;)

Δεν μπορείτε να αφαιρέσετε μια μεμονωμένη τιμή από ένα DataFrame, οπότε πρέπει να αφαιρέσετε πλήρεις γραμμές ή στήλες. Ανάλογα με το τι κάνετε, μπορεί να θέλετε να κάνετε το ένα ή το άλλο, και έτσι το pandas σας δίνει επιλογές και για τα δύο. Επειδή στην επιστήμη δεδομένων οι στήλες γενικά αντιπροσωπεύουν μεταβλητές και οι γραμμές παρατηρήσεις, είναι πιο πιθανό να αφαιρέσετε γραμμές δεδομένων. Η προεπιλεγμένη ρύθμιση για το dropna() είναι να αφαιρεί όλες τις γραμμές που περιέχουν οποιεσδήποτε κενές τιμές:

example2.dropna()
	0	1	2
1	2.0	5.0	8

Εάν είναι απαραίτητο, μπορείτε να αφαιρέσετε τιμές NA από στήλες. Χρησιμοποιήστε axis=1 για να το κάνετε:

example2.dropna(axis='columns')
	2
0	7
1	8
2	9

Παρατηρήστε ότι αυτό μπορεί να αφαιρέσει πολλά δεδομένα που μπορεί να θέλετε να διατηρήσετε, ιδιαίτερα σε μικρότερα σύνολα δεδομένων. Τι γίνεται αν θέλετε απλώς να αφαιρέσετε γραμμές ή στήλες που περιέχουν αρκετές ή ακόμα και όλες τις κενές τιμές; Μπορείτε να καθορίσετε αυτές τις ρυθμίσεις στο dropna με τις παραμέτρους how και thresh.

Από προεπιλογή, how='any' (αν θέλετε να ελέγξετε μόνοι σας ή να δείτε ποιες άλλες παραμέτρους έχει η μέθοδος, εκτελέστε example4.dropna? σε ένα κελί κώδικα). Θα μπορούσατε εναλλακτικά να καθορίσετε how='all' ώστε να αφαιρέσετε μόνο γραμμές ή στήλες που περιέχουν όλες τις κενές τιμές. Ας επεκτείνουμε το παράδειγμα DataFrame για να το δούμε στην πράξη.

example2[3] = np.nan
example2
0 1 2 3
0 1.0 NaN 7 NaN
1 2.0 5.0 8 NaN
2 NaN 6.0 9 NaN

Η παράμετρος thresh σας δίνει πιο λεπτομερή έλεγχο: καθορίζετε τον αριθμό των μη κενών τιμών που χρειάζεται να έχει μια γραμμή ή στήλη για να διατηρηθεί:

example2.dropna(axis='rows', thresh=3)
	0	1	2	3
1	2.0	5.0	8	NaN

Εδώ, η πρώτη και η τελευταία γραμμή έχουν αφαιρεθεί, επειδή περιέχουν μόνο δύο μη κενές τιμές.

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

Συμπέρασμα: Υπάρχουν πολλοί τρόποι για να αντιμετωπίσετε τις ελλείπουσες τιμές στα σύνολα δεδομένων σας. Η συγκεκριμένη στρατηγική που θα χρησιμοποιήσετε (αφαίρεση, αντικατάσταση ή ακόμα και ο τρόπος αντικατάστασης) θα πρέπει να καθορίζεται από τις ιδιαιτερότητες αυτών των δεδομένων. Θα αποκτήσετε καλύτερη αίσθηση για το πώς να διαχειρίζεστε τις ελλείπουσες τιμές όσο περισσότερο ασχολείστε και αλληλεπιδράτε με σύνολα δεδομένων.

Αφαίρεση διπλότυπων δεδομένων

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

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

  • Αναγνώριση διπλότυπων: duplicated: Μπορείτε εύκολα να εντοπίσετε διπλότυπες τιμές χρησιμοποιώντας τη μέθοδο duplicated στο pandas, η οποία επιστρέφει μια μάσκα Boolean που δείχνει αν μια εγγραφή σε ένα DataFrame είναι διπλότυπη μιας προηγούμενης. Ας δημιουργήσουμε ένα άλλο παράδειγμα DataFrame για να δούμε πώς λειτουργεί.
example4 = pd.DataFrame({'letters': ['A','B'] * 2 + ['B'],
                         'numbers': [1, 2, 1, 3, 3]})
example4
letters numbers
0 A 1
1 B 2
2 A 1
3 B 3
4 B 3
example4.duplicated()
0    False
1    False
2     True
3    False
4     True
dtype: bool
  • Αφαίρεση διπλότυπων: drop_duplicates: επιστρέφει απλώς ένα αντίγραφο των δεδομένων για τα οποία όλες οι τιμές duplicated είναι False:
example4.drop_duplicates()
	letters	numbers
0	A	1
1	B	2
3	B	3

Τόσο το duplicated όσο και το drop_duplicates από προεπιλογή εξετάζουν όλες τις στήλες, αλλά μπορείτε να καθορίσετε ότι εξετάζουν μόνο ένα υποσύνολο στηλών στο DataFrame σας:

example4.drop_duplicates(['letters'])
letters	numbers
0	A	1
1	B	2

Συμπέρασμα: Η αφαίρεση διπλότυπων δεδομένων είναι ένα απαραίτητο βήμα σχεδόν σε κάθε έργο επιστήμης δεδομένων. Τα διπλότυπα δεδομένα μπορούν να αλλοιώσουν τα αποτελέσματα των αναλύσεών σας και να σας δώσουν ανακριβή αποτελέσματα!

🚀 Πρόκληση

Όλα τα υλικά που συζητήθηκαν παρέχονται ως Jupyter Notebook. Επιπλέον, υπάρχουν ασκήσεις μετά από κάθε ενότητα, δοκιμάστε τις!

Κουίζ μετά τη διάλεξη

Ανασκόπηση & Αυτομελέτη

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

Εργασία

Αξιολόγηση Δεδομένων από μια Φόρμα


Αποποίηση ευθύνης:
Αυτό το έγγραφο έχει μεταφραστεί χρησιμοποιώντας την υπηρεσία αυτόματης μετάφρασης Co-op Translator. Παρόλο που καταβάλλουμε προσπάθειες για ακρίβεια, παρακαλούμε να έχετε υπόψη ότι οι αυτόματες μεταφράσεις ενδέχεται να περιέχουν σφάλματα ή ανακρίβειες. Το πρωτότυπο έγγραφο στη μητρική του γλώσσα θα πρέπει να θεωρείται η αυθεντική πηγή. Για κρίσιμες πληροφορίες, συνιστάται επαγγελματική ανθρώπινη μετάφραση. Δεν φέρουμε ευθύνη για τυχόν παρεξηγήσεις ή εσφαλμένες ερμηνείες που προκύπτουν από τη χρήση αυτής της μετάφρασης.