Pandas & NumPy Academy · Oppitunti

Tietoaineiston profiloinnin tarkistuslista

Tarkastelkaa uuden tietoaineiston yhteydessä järjestelmällisesti sen kokoa, tietotyyppejä, puuttuvien arvojen määriä, ainutkertaisia arvoja ja perustilastoja.

Oppitunti 1/413 vaihetta

Tietoaineiston profiloinnin tarkistuslista on ilmainen Pandas & NumPy Academy-oppitunti CoddyKitissä. Tämä on oppitunti 1/4. Voit lukea koko oppitunnin alta ilmaiseksi ja harjoitella sen jälkeen käytännössä selaimessa sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla. Oppitunti kuuluu Pandas & NumPy Academy-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. Pandas & NumPy Academy-kurssilla on yhteensä 4 oppituntia.

Ensimmäiset viisi minuuttia aineiston parissa

Kokeneet data-analyytikot noudattavat järjestelmällistä profilointitarkistuslistaa aina tutustuessaan uuteen aineistoon. Sen sijaan, että he siirtyisivät suoraan analyysiin, he vastaavat ensin joukkoon selvityskysymyksiä: Kuinka suuri aineisto on? Minkä tyyppisiä sarakkeet ovat? Kuinka paljon arvoja puuttuu? Onko aineistossa ilmeisiä poikkeamia? Tämä jäsennelty lähestymistapa estää tuntikausien turhan työn, jota väärin ymmärretyt tietotyypit tai laskutoimituksia vääristävät piilotetut null-arvot voivat aiheuttaa.

import pandas as pd

# Simulate loading a new dataset
df = pd.read_csv('https://raw.githubusercontent.com/datasciencedojo/datasets/master/titanic.csv')

# Step 1: size
print('Shape:', df.shape)
print('Rows:', len(df))

Vaihe 1: shape, sarakkeet ja dtypes

Kolme ensimmäistä tarkistusta ovat aina shape (rivit × sarakkeet), sarakkeiden nimet (vastaavatko ne odotuksia?) ja dtypes (ovatko numeeriset sarakkeet todella numeerisia?). Yleinen yllätys on, että numeeriset sarakkeet on ladattu object-tyyppisinä, koska ne sisältävät tekstimerkintöjä kuten 'unknown' tai pilkuilla muotoiltuja sekalaisia lukuja. Tämän havaitseminen profilointivaiheessa säästää virheellisiä tuloksia hiljaisesti palauttavilta aggregoinneilta.

import pandas as pd
import seaborn as sns

df = sns.load_dataset('titanic')

print('Shape:', df.shape)
print('\nColumns:', df.columns.tolist())
print('\nData Types:')
print(df.dtypes)

Vaihe 2: puuttuvien arvojen tarkastus

Kutsukaa df.isna().sum() laskeaksenne puuttuvien arvojen määrän sarakkeittain ja jakakaa tulos arvolla len(df) prosenttiosuuden saamiseksi. Sarakkeet, joista puuttuu yli 50 % arvoista, kannattaa yleensä poistaa; 1–20 %:n puuttuvuus edellyttää tyypillisesti imputointia; 0 %:n puuttuvuus vaatii järkevyystarkistuksen, sillä täydellinen kattavuus voi itsessään olla epäilyttävää, jos todellinen aineisto harvoin on näin siistiä. Järjestäkää tulokset laskevaan järjestykseen, jotta eniten puuttuvia arvoja sisältävät sarakkeet näkyvät ensin.

import pandas as pd
import seaborn as sns

df = sns.load_dataset('titanic')

# Missing value audit
missing = df.isna().sum()
missing_pct = (missing / len(df) * 100).round(1)
audit = pd.DataFrame({'count': missing, 'pct': missing_pct})
audit = audit[audit['count'] > 0].sort_values('pct', ascending=False)
print(audit)

Vaihe 3: kuvailevat perustilastot

df.describe() palauttaa yhdellä kutsulla jokaisesta numeerisesta sarakkeesta lukumäärän, keskiarvon, keskihajonnan, pienimmän arvon, kvartiilit ja suurimman arvon. Tarkistakaa aina pienin ja suurin arvo mahdottomien arvojen varalta (esimerkiksi ikä = -3 tai ikä = 999), keskiarvo ja mediaani vinouden havaitsemiseksi (suuri ero viittaa poikkeama-arvoihin) sekä lukumäärä (jos se on kokonaisrivimäärää pienempi, arvoja puuttuu). Lisäämällä include='all' saatte mukaan myös object-sarakkeiden tilastot (uniikkien arvojen määrä, yleisin arvo ja frekvenssi).

import pandas as pd
import seaborn as sns

df = sns.load_dataset('titanic')

# Describe numeric columns
print('Numeric statistics:')
print(df.describe().round(2))

print('\nObject column statistics:')
print(df.describe(include='object'))

Vaihe 4: uniikkien arvojen lukumäärät

Tarkistakaa kategorisista sarakkeista uniikkien arvojen määrä komennolla df[col].nunique() ja yleisimmät arvot komennolla value_counts(). Kiinnittäkää huomiota sarakkeisiin, jotka vaikuttavat kategorisilta mutta sisältävät satoja uniikkeja arvoja (ne voivat olla vapaatekstikenttiä tai tunnisteita), sekä sarakkeisiin, joiden pitäisi olla boolean-tyyppisiä mutta jotka sisältävät kolme arvoa (True, False ja NaN). Tarkistakaa myös kirjainkoko: 'Male' ja 'male' käsitellään erillisinä kategorioina.

import pandas as pd
import seaborn as sns

df = sns.load_dataset('titanic')

categorical = df.select_dtypes(include='object').columns
for col in categorical:
    n = df[col].nunique()
    top_vals = df[col].value_counts().head(3).to_dict()
    print(f'{col}: {n} unique — top3: {top_vals}')

Vaihe 5: otosrivit komennoilla head ja tail

df.head(10) ja df.tail(10) näyttävät vastaavasti ensimmäiset ja viimeiset rivit. Molempien tarkastelu on tärkeää, koska aineistoissa on usein siistit otsikkorivit mutta viennin seurauksena syntyneitä epäsiistejä loppurivejä (esimerkiksi CSV-viennin loppuun lisätty 'Total'-yhteenvetorivi). Käyttäkää myös komentoa df.sample(10) nähdäksenne satunnaisen otoksen riveistä. Näin vältätte aineiston alkuun painottuvan harhan.

import pandas as pd
import seaborn as sns

df = sns.load_dataset('titanic')

print('First 3 rows:')
print(df.head(3))

print('\nLast 3 rows:')
print(df.tail(3))

print('\nRandom sample of 3:')
print(df.sample(3, random_state=42))

Vaihe 6: kaksoiskappaleiden tarkistaminen

Kutsukaa df.duplicated().sum() laskeaksenne täysin päällekkäiset rivit (joissa jokainen sarake on sama). Jos aineiston väitetään sisältävän yksilöllisiä asiakastietueita, yksikin kaksoiskappale on merkki tiedon laatuun liittyvistä ongelmista. Tarkastelkaa varsinaisia kaksoiskappalerivejä komennolla df[df.duplicated(keep=False)]. Kun taulukossa pitäisi olla yksilölliset avaimet (kuten käyttäjätunnus), tarkistakaa yksilöllisyys myös avaintasolla komennolla df['id'].duplicated().sum().

import pandas as pd
import seaborn as sns

df = sns.load_dataset('titanic')

# Full-row duplicates
full_dups = df.duplicated().sum()
print(f'Fully duplicated rows: {full_dups}')

# Key-level duplicates (e.g. passenger class + name)
key_dups = df.duplicated(subset=['pclass', 'sex', 'age', 'fare']).sum()
print(f'Near-duplicate rows (pclass+sex+age+fare): {key_dups}')

Vaihe 7: päivämäärä- ja aikarakenteet

Jos aineisto sisältää päivämäärä- tai aikaleimasarakkeita, tarkistakaa, että Pandas latasi ne datetime64-tyyppisinä (ei object-tyyppisinä). Muuntakaa ne komennolla pd.to_datetime(df['col']). Tarkastelkaa sitten päivämääräväliä komennoilla df['date'].min() ja df['date'].max(). Etsikää kaukana tulevaisuudessa olevia aikaleimoja (vuosi 2099) tai menneisyydessä olevia arvoja (epookin nolla: 1970-01-01), jotka viittaavat puuttuvien päivämäärien esittämiseen käytettyihin paikkamerkkiarvoihin.

import pandas as pd

# Synthetic example with a date column
df = pd.DataFrame({
    'order_id': [1, 2, 3, 4],
    'order_date': ['2024-01-10', '2024-02-05', '1970-01-01', '2024-12-31']
})

df['order_date'] = pd.to_datetime(df['order_date'])

print('Date range:', df['order_date'].min(), 'to', df['order_date'].max())
print('\nSuspect dates (before 2020):')
print(df[df['order_date'] < '2020-01-01'])

Tarkistuslistan automatisointi funktioksi

Kun profilointivaiheet kootaan uudelleenkäytettäväksi funktioksi, samat tarkistukset suoritetaan yhdenmukaisesti jokaiselle aineistolle. Funktion tulisi tulostaa jäsennelty raportti, joka näyttää muodon, puuttuvat arvot, dtypes-tiedot, kaksoiskappaleiden määrän ja perustilastot. Voitte laajentaa sitä visualisoinneilla tai tallentaa sen HTML-raportiksi. Tällaiset funktiot ovat ammattimaisten data science -tiimien vakiotyökaluja, kun useat analyytikot työskentelevät saman prosessiputken parissa.

import pandas as pd

def profile(df, name='DataFrame'):
    print(f'=== Profile: {name} ===')
    print(f'Shape: {df.shape[0]} rows x {df.shape[1]} cols')
    print(f'Duplicates: {df.duplicated().sum()}')
    print(f'\nMissing values (top 5):')
    missing = (df.isna().sum() / len(df) * 100).sort_values(ascending=False)
    print(missing[missing > 0].head(5).round(1).to_string())
    print(f'\ndtypes:')
    print(df.dtypes.value_counts().to_string())
    print('=' * 35)

import seaborn as sns
df = sns.load_dataset('titanic')
profile(df, 'Titanic')

ydata-profiling automatisoituun tutkivaan data-analyysiin

ydata-profiling-kirjasto (aiemmin pandas-profiling) luo DataFramesta kattavan HTML-raportin yhdellä rivillä: ProfileReport(df).to_file('report.html'). Raportti sisältää histogrammeja, korrelaatiomatriiseja, puuttuvien arvojen lämpökarttoja, kaksoiskappaleiden tunnistuksen ja vuorovaikutuskuvaajia. Se on nopein tapa jakaa koko aineiston profiili sidosryhmän kanssa, kun heidän on ymmärrettävä data ilman koodin kirjoittamista.

# Install: pip install ydata-profiling
# from ydata_profiling import ProfileReport
# import pandas as pd
# import seaborn as sns

# df = sns.load_dataset('titanic')
# profile = ProfileReport(df, title='Titanic Profiling Report', explorative=True)
# profile.to_file('titanic_profile.html')

# The above generates a full HTML report automatically.
# Alternatively, use minimal mode for faster generation:
# profile = ProfileReport(df, minimal=True)
print('ydata-profiling generates HTML EDA reports automatically.')
print('Run: pip install ydata-profiling')

Profiloinnin tarkistuslistan yhteenveto

Jokaisen uuden aineiston täydellinen profiloinnin tarkistuslista sisältää seitsemän vaihetta: 1) koko ja sarakkeet, 2) tietotyypit ja epäilyttävät tyyppimääritykset, 3) puuttuvien arvojen määrä ja prosenttiosuus sarakkeittain, 4) kuvailevat tilastot (minimi, maksimi, keskiarvo, mediaani), 5) kategoristen sarakkeiden yksilölliset arvot ja arvojen lukumäärät, 6) kaksoiskappalerivien tunnistus sekä 7) päivämäärävälin tarkistus. Kun tämä tarkistuslista käydään läpi ennen analyysiä, vältetään hiljaiset virheet, jotka vääristäisivät myöhempiä tuloksia.

Pikatarkistus

Testatkaa, kuinka hyvin ymmärrätte tämän oppitunnin aineiston profiloinnin tarkistuslistan.

Oppitunnin kertaus

Tässä oppitunnissa opitte: 7-vaiheisen profiloinnin tarkistuslistan (koko, tietotyypit, puuttuvat arvot, tilastot, yksilöllisten arvojen lukumäärät, kaksoiskappaleet ja päivämäärät), tarkistusten kokoamisen uudelleenkäytettäväksi profiilifunktioksi sekä ydata-profiling-kirjaston käytön automaattisten HTML-raporttien luomiseen. Seuraavaksi perehdymme univariaattiseen analyysiin eli kunkin sarakkeen tarkasteluun erikseen poikkeamien, vinoumien ja epätavallisten jakaumien havaitsemiseksi.

Aloita maksutta

Opi Python tekoälytuutorin avulla — ilmaiseksi

Kirjoita ja suorita oikeaa koodia selaimessa, saa välitöntä apua tekoälytuutorilta ympäri vuorokauden ja jatka siitä, mihin jäit, verkossa tai sovelluksessa.

Kurssit
30
Oppitunnit
120

Usein kysytyt kysymykset

Onko oppitunti ”Tietoaineiston profiloinnin tarkistuslista” ilmainen?

Kyllä – oppitunnin ”Tietoaineiston profiloinnin tarkistuslista” koko tekstin voi lukea täällä verkossa ilmaiseksi. Jos haluat harjoitella interaktiivisesti sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla sekä avata koko Pandas & NumPy Academy-kurssin, päivitä CoddyKit PROhon. Pandas & NumPy Academy-kurssilla on yhteensä 4 oppituntia.

Mitä opin oppitunnilla ”Tietoaineiston profiloinnin tarkistuslista”?

Tarkastelkaa uuden tietoaineiston yhteydessä järjestelmällisesti sen kokoa, tietotyyppejä, puuttuvien arvojen määriä, ainutkertaisia arvoja ja perustilastoja. Harjoittelet Pandas & NumPy Academy-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.

Tarvitsenko kokemusta aloittaakseni Pandas & NumPy Academy-opiskelun?

Aiempi kokemus ei ole tarpeen. CoddyKitin Pandas & NumPy Academy-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 1/4.

Kuinka kauan ”Tietoaineiston profiloinnin tarkistuslista”-oppitunnin suorittaminen kestää?

Useimmat CoddyKitin oppitunnit kestävät noin 5–10 minuuttia. Jokainen oppitunti on lyhyt ja interaktiivinen, joten edistyt tasaisesti ja voit jatkaa siitä, mihin jäit – sekä verkossa että sovelluksessa.

Voinko kirjoittaa ja suorittaa koodia tällä Pandas & NumPy Academy-oppitunnilla?

Kyllä. Jokainen Pandas & NumPy Academy-oppitunti sisältää sisäänrakennetun koodieditorin, joten voit kirjoittaa ja suorittaa oikeaa koodia suoraan selaimessa ja saada välitöntä palautetta tekoälyltä – paikallista asennusta ei tarvita.

Kaikki tämän kurssin oppitunnit

  1. Tietoaineiston profiloinnin tarkistuslista
  2. Yksiulotteinen analyysi
  3. Kaksiulotteinen ja korrelaatioanalyysi
  4. Tulosten kokoaminen raportiksi
← Takaisin: Pandas & NumPy Academy