|
4 weeks ago | |
---|---|---|
.. | ||
README.md | 4 weeks ago | |
assignment.md | 4 weeks ago |
README.md
Työskentely datan kanssa: Datan valmistelu
![]() |
---|
Datan valmistelu - Sketchnote by @nitya |
Esiluentakysely
Riippuen datan lähteestä, raakadatan mukana voi tulla epäjohdonmukaisuuksia, jotka aiheuttavat haasteita analyysissä ja mallinnuksessa. Toisin sanoen, tämä data voidaan luokitella "likaiseksi" ja se täytyy puhdistaa. Tämä oppitunti keskittyy tekniikoihin, joilla dataa puhdistetaan ja muokataan käsittelemään puuttuvaa, epätarkkaa tai epätäydellistä dataa. Oppitunnin aiheet hyödyntävät Pythonia ja Pandas-kirjastoa, ja ne havainnollistetaan muistikirjassa tässä hakemistossa.
Datan puhdistamisen tärkeys
-
Helppokäyttöisyys ja uudelleenkäyttö: Kun data on asianmukaisesti järjestetty ja normalisoitu, sitä on helpompi etsiä, käyttää ja jakaa muiden kanssa.
-
Johdonmukaisuus: Data-analyysi vaatii usein työskentelyä useamman datasetin kanssa, jolloin eri lähteistä tulevat datasetit täytyy yhdistää. Varmistamalla, että jokainen datasetti on standardoitu samalla tavalla, varmistetaan, että data on käyttökelpoista, kun ne yhdistetään yhdeksi datasetiksi.
-
Mallien tarkkuus: Puhdistettu data parantaa mallien tarkkuutta, jotka ovat riippuvaisia siitä.
Yleiset puhdistustavoitteet ja -strategiat
-
Datasetin tutkiminen: Datan tutkiminen, joka käsitellään myöhemmässä oppitunnissa, voi auttaa löytämään dataa, joka täytyy puhdistaa. Datasetin arvojen visuaalinen tarkastelu voi luoda odotuksia siitä, miltä loput datasta näyttävät, tai antaa käsityksen ongelmista, jotka voidaan ratkaista. Tutkiminen voi sisältää peruskyselyitä, visualisointeja ja otantaa.
-
Muotoilu: Riippuen lähteestä, datassa voi olla epäjohdonmukaisuuksia sen esitystavassa. Tämä voi aiheuttaa ongelmia arvon etsimisessä ja esittämisessä, jolloin se näkyy datasetissä, mutta ei esiinny oikein visualisoinneissa tai kyselytuloksissa. Yleisiä muotoiluongelmia ovat välilyöntien, päivämäärien ja datatyypin korjaaminen. Muotoiluongelmien ratkaiseminen on yleensä datan käyttäjien vastuulla. Esimerkiksi päivämäärien ja numeroiden esitystavat voivat vaihdella maittain.
-
Duplikaatiot: Data, jossa on useampi esiintymä, voi tuottaa epätarkkoja tuloksia ja se tulisi yleensä poistaa. Tämä on yleistä, kun yhdistetään kaksi tai useampia datasettejä. On kuitenkin tilanteita, joissa yhdistetyissä dataseteissä olevat duplikaatiot sisältävät lisätietoa ja ne täytyy säilyttää.
-
Puuttuva data: Puuttuva data voi aiheuttaa epätarkkuuksia sekä heikkoja tai puolueellisia tuloksia. Joskus nämä voidaan ratkaista "uudelleenlataamalla" data, täyttämällä puuttuvat arvot laskennalla ja koodilla, kuten Pythonilla, tai yksinkertaisesti poistamalla arvo ja siihen liittyvä data. Puuttuvan datan syyt voivat vaihdella, ja toimenpiteet sen ratkaisemiseksi riippuvat siitä, miten ja miksi data on alun perin puuttunut.
DataFramen tietojen tutkiminen
Oppimistavoite: Tämän osion lopussa sinun tulisi osata löytää yleistä tietoa pandas DataFrameihin tallennetusta datasta.
Kun olet ladannut datasi pandasilla, se on todennäköisesti DataFrame-muodossa (katso edellinen oppitunti saadaksesi yksityiskohtaisen yleiskatsauksen). Mutta jos DataFramessa on 60 000 riviä ja 400 saraketta, mistä edes aloitat ymmärtääksesi, mitä sinulla on käsissäsi? Onneksi pandas tarjoaa käteviä työkaluja, joilla voit nopeasti tarkastella DataFramen yleistä tietoa sekä sen ensimmäisiä ja viimeisiä rivejä.
Tämän toiminnallisuuden tutkimiseksi tuomme käyttöön Pythonin scikit-learn-kirjaston ja käytämme ikonista datasettiä: Iris-datasettiä.
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: Aloitetaan
info()
-metodilla, jota käytetään tulostamaan yhteenvetoDataFrame
-sisällöstä. Katsotaanpa tätä datasettiä:
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
Tästä tiedämme, että Iris-datasetissä on 150 merkintää neljässä sarakkeessa, eikä siinä ole tyhjiä arvoja. Kaikki data on tallennettu 64-bittisinä liukulukuarvoina.
- DataFrame.head(): Seuraavaksi tarkastellaan
DataFrame
-sisältöähead()
-metodilla. Katsotaanpa, miltä ensimmäiset rivitiris_df
:ssä näyttävät:
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(): Vastaavasti tarkastellaan
DataFrame
-viimeisiä rivejätail()
-metodilla:
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
Yhteenveto: Jo pelkästään tarkastelemalla DataFramen metatietoja tai sen ensimmäisiä ja viimeisiä rivejä, voit saada välittömän käsityksen datan koosta, muodosta ja sisällöstä.
Puuttuvan datan käsittely
Oppimistavoite: Tämän osion lopussa sinun tulisi osata korvata tai poistaa tyhjiä arvoja DataFrameista.
Useimmiten datasetit, joita haluat käyttää (tai joudut käyttämään), sisältävät puuttuvia arvoja. Puuttuvan datan käsittelyyn liittyy hienovaraisia kompromisseja, jotka voivat vaikuttaa lopulliseen analyysiin ja tosielämän tuloksiin.
Pandas käsittelee puuttuvia arvoja kahdella tavalla. Ensimmäinen, jonka olet nähnyt aiemmissa osioissa, on NaN
(Not a Number). Tämä on erityinen arvo, joka kuuluu IEEE-liukulukumääritykseen ja jota käytetään vain puuttuvien liukulukuarvojen merkitsemiseen.
Muiden kuin liukulukujen puuttuvien arvojen kohdalla pandas käyttää Pythonin None
-objektia. Vaikka voi tuntua hämmentävältä kohdata kaksi erilaista arvoa, jotka tarkoittavat käytännössä samaa asiaa, tähän suunnitteluratkaisuun on hyvät ohjelmalliset syyt. Käytännössä tämä mahdollistaa sen, että pandas tarjoaa hyvän kompromissin useimmissa tapauksissa. Tästä huolimatta sekä None
että NaN
sisältävät rajoituksia, jotka on hyvä pitää mielessä niiden käytössä.
Lue lisää NaN
- ja None
-arvoista muistikirjasta!
- Tyhjien arvojen tunnistaminen: Pandasissa
isnull()
- janotnull()
-metodit ovat ensisijaisia työkaluja tyhjän datan tunnistamiseen. Molemmat palauttavat Boolean-maskit datan päälle. Käytämmenumpy
-kirjastoaNaN
-arvojen kanssa:
import numpy as np
example1 = pd.Series([0, np.nan, '', None])
example1.isnull()
0 False
1 True
2 False
3 True
dtype: bool
Katso tarkasti tulosta. Yllättääkö jokin? Vaikka 0
on aritmeettisesti nolla, se on silti täysin kelvollinen kokonaisluku, ja pandas käsittelee sen sellaisena. ''
on hieman hienovaraisempi. Vaikka käytimme sitä osiossa 1 tyhjänä merkkijonona, se on silti merkkijono-objekti eikä pandasissa tyhjän arvon esitys.
Nyt käännetään tämä ja käytetään näitä metodeja tavalla, jolla niitä käytetään käytännössä. Voit käyttää Boolean-maskeja suoraan Series
- tai DataFrame
-indeksinä, mikä on hyödyllistä, kun haluat työskennellä eristettyjen puuttuvien (tai olemassa olevien) arvojen kanssa.
Yhteenveto: Sekä
isnull()
- ettänotnull()
-metodit tuottavat samanlaisia tuloksia, kun käytät niitäDataFrame
-objekteissa: ne näyttävät tulokset ja niiden indeksit, mikä auttaa sinua valtavasti datan käsittelyssä.
- Tyhjien arvojen poistaminen: Tyhjien arvojen tunnistamisen lisäksi pandas tarjoaa kätevän tavan poistaa tyhjiä arvoja
Series
- jaDataFrame
-objekteista. (Erityisesti suurissa dataseteissä on usein suositeltavampaa yksinkertaisesti poistaa puuttuvat [NA] arvot analyysistä kuin käsitellä niitä muilla tavoilla.) Katsotaanpa tätä toiminnallisuuttaexample1
-datasetillä:
example1 = example1.dropna()
example1
0 0
2
dtype: object
Huomaa, että tämä näyttää samalta kuin tulos example3[example3.notnull()]
. Erona on, että dropna
on poistanut puuttuvat arvot Series
-objektista example1
sen sijaan, että vain indeksoisi maskattuja arvoja.
Koska DataFrame
-objekteilla on kaksi ulottuvuutta, ne tarjoavat enemmän vaihtoehtoja datan poistamiseen.
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 |
(Huomasitko, että pandas muutti kaksi saraketta liukuluvuiksi mukautuakseen NaN
-arvoihin?)
Et voi poistaa yksittäistä arvoa DataFrame
-objektista, joten sinun täytyy poistaa kokonaisia rivejä tai sarakkeita. Riippuen siitä, mitä olet tekemässä, saatat haluta tehdä jomman kumman, ja pandas antaa sinulle vaihtoehdot molempiin. Koska data-analyysissä sarakkeet edustavat yleensä muuttujia ja rivit havaintoja, olet todennäköisemmin poistamassa rivejä; dropna()
-metodin oletusasetuksena on poistaa kaikki rivit, jotka sisältävät tyhjiä arvoja:
example2.dropna()
0 1 2
1 2.0 5.0 8
Jos tarpeen, voit poistaa NA-arvot sarakkeista. Käytä axis=1
tehdäksesi niin:
example2.dropna(axis='columns')
2
0 7
1 8
2 9
Huomaa, että tämä voi poistaa paljon dataa, jonka haluaisit säilyttää, erityisesti pienemmissä dataseteissä. Entä jos haluat poistaa vain rivit tai sarakkeet, jotka sisältävät useita tai jopa kaikki tyhjät arvot? Voit määrittää nämä asetukset dropna
-metodissa how
- ja thresh
-parametreilla.
Oletuksena how='any'
(jos haluat tarkistaa itse tai nähdä, mitä muita parametreja metodilla on, suorita example4.dropna?
koodisolussa). Voit vaihtoehtoisesti määrittää how='all'
, jolloin poistetaan vain rivit tai sarakkeet, jotka sisältävät kaikki tyhjät arvot. Laajennetaan esimerkkimme DataFrame
-objektia nähdäksesi tämä toiminnassa.
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
-parametri antaa sinulle tarkemman hallinnan: voit asettaa rivin tai sarakkeen tarvitsemien ei-tyhjien arvojen määrän, jotta se säilytetään:
example2.dropna(axis='rows', thresh=3)
0 1 2 3
1 2.0 5.0 8 NaN
Tässä ensimmäinen ja viimeinen rivi on poistettu, koska niissä on vain kaksi ei-tyhjää arvoa.
- Tyhjien arvojen täyttäminen: Riippuen datasetistäsi, voi joskus olla järkevämpää täyttää tyhjät arvot kelvollisilla arvoilla kuin poistaa ne. Voisit käyttää
isnull
-metodia tehdäksesi tämän paikan päällä, mutta se voi olla työlästä, erityisesti jos täytettäviä arvoja on paljon. Koska tämä on niin yleinen tehtävä data-analyysissä, pandas tarjoaafillna
-metodin, joka palauttaa kopionSeries
- taiDataFrame
-objektista, jossa puuttuvat arvot on korvattu valitsemallasi arvolla. Luodaan toinen esimerkkiSeries
-objekti nähdäksesi, miten tämä toimii käytännössä.
example3 = pd.Series([1, np.nan, 2, None, 3], index=list('abcde'))
example3
a 1.0
b NaN
c 2.0
d NaN
e 3.0
dtype: float64
Voit täyttää kaikki tyhjät arvot yhdellä arvolla, kuten 0
:
example3.fillna(0)
a 1.0
b 0.0
c 2.0
d 0.0
e 3.0
dtype: float64
Voit täyttää eteenpäin tyhjät arvot, eli käyttää viimeistä kelvollista arvoa täyttämään tyhjän:
example3.fillna(method='ffill')
a 1.0
b 1.0
c 2.0
d 2.0
e 3.0
dtype: float64
Voit myös täyttää taaksepäin, jolloin seuraava kelvollinen arvo täyttää tyhjän:
example3.fillna(method='bfill')
a 1.0
b 2.0
c 2.0
d 3.0
e 3.0
dtype: float64
Kuten arvata saattaa, tämä toimii samalla tavalla DataFrame
-objekteissa, mutta voit myös määrittää axis
-parametrin, jonka mukaan tyhjät arvot täytetään. Käytetään aiemmin käytettyä example2
-datasettiä uudelleen:
example2.fillna(method='ffill', axis=1)
0 1 2 3
0 1.0 1.0 7.0 7.0
1 2.0 5.0 8.0 8.0
2 NaN 6.0 9.0 9.0
Huomaa, että kun edellistä arvoa ei ole saatavilla eteenpäin täyttämiseen, tyhjä arvo jää jäljelle.
Tärkeä huomio: Puuttuvien arvojen käsittelyyn on useita tapoja. Käyttämäsi strategia (poistaminen, korvaaminen tai tapa, jolla korvaat ne) tulisi määritellä datan erityispiirteiden mukaan. Saat paremman käsityksen puuttuvien arvojen käsittelystä, kun työskentelet ja vuorovaikutat datasetien kanssa.
Dublikaattidatan poistaminen
Oppimistavoite: Tämän alajakson lopussa sinun tulisi osata tunnistaa ja poistaa dublikaattiarvot DataFrameista.
Puuttuvan datan lisäksi kohtaat usein dublikaattidataa todellisissa datasetissä. Onneksi pandas
tarjoaa helpon tavan havaita ja poistaa dublikaattimerkinnät.
- Dublikaattien tunnistaminen:
duplicated
: Voit helposti havaita dublikaattiarvot käyttämällä pandas-kirjastonduplicated
-metodia, joka palauttaa Boolean-maskin, joka osoittaa, onkoDataFrame
-merkintä aiemman merkinnän dublikaatti. Luodaan toinen esimerkkidataframe, jotta näet tämän toiminnassa.
example4 = pd.DataFrame({'letters': ['A','B'] * 2 + ['B'],
'numbers': [1, 2, 1, 3, 3]})
example4
kirjaimet | numerot | |
---|---|---|
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
- Dublikaattien poistaminen:
drop_duplicates
: palauttaa yksinkertaisesti kopion datasta, jossa kaikkiduplicated
-arvot ovatFalse
:
example4.drop_duplicates()
letters numbers
0 A 1
1 B 2
3 B 3
Sekä duplicated
että drop_duplicates
oletuksena tarkastelevat kaikkia sarakkeita, mutta voit määrittää, että ne tarkastelevat vain tiettyä sarakejoukkoa DataFrame
-rakenteessasi:
example4.drop_duplicates(['letters'])
letters numbers
0 A 1
1 B 2
Tärkeä huomio: Dublikaattidatan poistaminen on olennainen osa lähes jokaista data-analytiikkaprojektia. Dublikaattidata voi muuttaa analyysien tuloksia ja antaa virheellisiä lopputuloksia!
🚀 Haaste
Kaikki käsitelty materiaali on saatavilla Jupyter Notebook -tiedostona. Lisäksi jokaisen osion jälkeen on harjoituksia, kokeile niitä!
Luennon jälkeinen kysely
Kertaus ja itseopiskelu
On olemassa monia tapoja löytää ja lähestyä datan valmistelua analyysia ja mallinnusta varten, ja datan puhdistaminen on tärkeä vaihe, joka vaatii "kädet savessa" -työskentelyä. Kokeile näitä Kaggle-haasteita tutkiaksesi tekniikoita, joita tämä oppitunti ei käsitellyt.
Tehtävä
Vastuuvapauslauseke:
Tämä asiakirja on käännetty käyttämällä tekoälypohjaista käännöspalvelua Co-op Translator. Vaikka pyrimme tarkkuuteen, huomioithan, että automaattiset käännökset voivat sisältää virheitä tai epätarkkuuksia. Alkuperäistä asiakirjaa sen alkuperäisellä kielellä tulisi pitää ensisijaisena lähteenä. Kriittisen tiedon osalta suositellaan ammattimaista ihmiskäännöstä. Emme ole vastuussa tämän käännöksen käytöstä johtuvista väärinkäsityksistä tai virhetulkinnoista.