Bias: onzuiverheid
gemmiddelde vs mediaan (middelste waarde in een gesorteerde gegevensset)
standdarddeviatie= geeft spreiding aan in een gegevensset. de gemiddelde afstand van de gegevens tov het gemiddelde
percentiel van een score
is het percentage waarden in de gegevensset dat onder deze score ligt. Bijv jouw score ligt op het 90% percentiel dwz dat 90% vd kandidaten lager scoorde dan jij
Standaardscore (Z-score):
geeft het aantal std deviaties boven of onder het gemiddelde. handige manier om resultaten in juiste verhouding te presenteren.
Verdeling/distriubtie waarin niet alleen alle mogelijke waarden vd gegevensset worden weergegeven maar ook hoe vaak elke waarde voorkomt.
Normale verdeling. Bekende verdeling, gebaseerd op continue numerieke gegevens zonder vaste stappen of sprongen.
Foutmarge
geeft maximaal te verwachten afwijking aan in vergelijking met een onderzoek van de gehele populatie. Meestal in percenten. dit heeft niets te maken met echte fouten, je krijgt altijd een foutmarge , als je minder dan de een complete populatie onderzoekt, ook al voer je het perfect statistisch uit
Parameter:
statistiek wordt vaak gebruikt om een parameter van een populatie te schatten opbv een onderzochte steekproef, waarna je iets probeert te zeggen over de overeenkomstige waarde van de gehele populatie
Betrouwbaarheidsinterval: statistisch resultaat , bijv een gemiddelde of een percentage, waarbij je foutmarge optelt en aftrekt. Verzameling waarden waar een bepaalde populatieparameter zeer waarschijnlijk binnen valt.
vrijdag 18 mei 2018
maandag 28 augustus 2017
Exploratie met pandas en visualisaties
Exploratie met Pandas en visualisaties
# Begin je notebook altijd met het importeren van reeds geïnstalleerde relevante
packages
import pandas as pd #Pandas
import numpy as np #Numpy
from pydataset import data #In deze package staan voorbeeld datasets zoals deze ook beschikbaar zijn in R
import matplotlib #Matplotlib is een package waar je makkelijk veel verschillende soorten plots mee maakt
import matplotlib.pyplot as plt #Meest gebruikte onderdeel uit de matplotlib package
#specifieke line code om output van matplotlib te plotten in je notebook
%matplotlib inline
0- We gebruiken de beschikbare dataset airquality, die eerst ingeladen moet worden.
df = data("airquality")
1- Validatie van de data
Bekijk de afmetingen van het dataframe
df.shape
(153, 6)
Bekijk hoe de data er uit zie
df.head(5)
| Ozone | Solar.R | Wind | Temp | Month | Day | |
|---|---|---|---|---|---|---|
| 1 | 41.0 | 190.0 | 7.4 | 67 | 5 | 1 |
| 2 | 36.0 | 118.0 | 8.0 | 72 | 5 | 2 |
| 3 | 12.0 | 149.0 | 12.6 | 74 | 5 | 3 |
| 4 | 18.0 | 313.0 | 11.5 | 62 | 5 | 4 |
| 5 | NaN | NaN | 14.3 | 56 | 5 | 5 |
Wat voor datatypen zitten er in de ingeladen dataset
df.dtypes
Ozone float64
Solar.R float64
Wind float64
Temp int64
Month int64
Day int64
dtype: object
Bekijk expliciet hoeveel missende waarden er voorkomen in de dataset
df.isnull().sum()
Ozone 37
Solar.R 7
Wind 0
Temp 0
Month 0
Day 0
dtype: int64
Soms is het handiger om te kijken hoeveel procent van elke kolom leeg is. Dit geeft een beter beeld
print df.isnull().sum()/len(df)* 100
Ozone 24.183007
Solar.R 4.575163
Wind 0.000000
Temp 0.000000
Month 0.000000
Day 0.000000
dtype: float64
Algmene beschrijvende statistieken van de dataset
df.describe()
| Ozone | Solar.R | Wind | Temp | Month | Day | |
|---|---|---|---|---|---|---|
| count | 116.000000 | 146.000000 | 153.000000 | 153.000000 | 153.000000 | 153.000000 |
| mean | 42.129310 | 185.931507 | 9.957516 | 77.882353 | 6.993464 | 15.803922 |
| std | 32.987885 | 90.058422 | 3.523001 | 9.465270 | 1.416522 | 8.864520 |
| min | 1.000000 | 7.000000 | 1.700000 | 56.000000 | 5.000000 | 1.000000 |
| 25% | 18.000000 | 115.750000 | 7.400000 | 72.000000 | 6.000000 | 8.000000 |
| 50% | 31.500000 | 205.000000 | 9.700000 | 79.000000 | 7.000000 | 16.000000 |
| 75% | 63.250000 | 258.750000 | 11.500000 | 85.000000 | 8.000000 | 23.000000 |
| max | 168.000000 | 334.000000 | 20.700000 | 97.000000 | 9.000000 | 31.000000 |
2- Exploratie
Bekijk als er datumranges in een dataset zitten, of deze compleet zijn
Dit kan visueel:
df.groupby('Month')['Day'].size()
Month
5 31
6 30
7 31
8 31
9 30
dtype: int64
Of meer gestandaardiseerd
- Maak een datum van de aanwezige datum-onderdelen in de dataset
- Maak met pandas een range van de minimale datum tot maximale datum (deze is dus volledig)
- Vergelijk de lengtes van deze twee variabelen om te concluderen of de range compleet is
df_dat =pd.to_datetime('2016/'+df['Month'].map(str)+'/'+df['Day'].map(str),format='%Y/%m/%d')
range_dat = pd.date_range(min(df_dat),max(df_dat))
print 'Is the time line complete?',len(df_dat) == len(range_dat)
Is the time line complete? True
Krijg een idee van wat de ranges in de dataset zijn en ook voor hun extreme waarden
df.boxplot(['Solar.R','Ozone','Wind','Temp'],return_type='axes');
Bepaal een aanpak voor de missende waarden, door de features met missende waarden te plotten en naar hun distributies te kijken
plt.figure(figsize=(15, 10))
plt.subplot(221)
plt.title('Lijn Grafiek Ozone')
plt.plot(df['Ozone']);
plt.subplot(222)
plt.title('Histogram Ozone')
plt.hist(df['Ozone'].dropna(),bins=30);
plt.subplot(223)
plt.title('Lijn Grafiek Solar')
plt.plot(df['Solar.R']);
plt.subplot(224)
plt.title('Histogram Solar')
plt.hist(df['S
olar.R'].dropna(),bins=30);
Aanpak 1: Interpoleren
plt.figure(figsize=(15, 10))
plt.subplot(211)
plt.title('Ozone')
a = df['Ozone'].interpolate()[df['Ozone'].isnull()]
plt.plot(df.index, df['Ozone'],'k',a.reindex(df.index) , 'r.');
plt.subplot(212)
plt.title('Solar.R')
b = df['Solar.R'].interpolate()[df['Solar.R'].isnull()]
plt.plot(df.index, df['Solar.R'],'k',b.reindex(df.index) , 'r.');
Aanpak 2: Gemiddelde gebruiken
plt.figure(figsize=(15, 10))
plt.subplot(211)
plt.title('Ozone')
a = df['Ozone'].fillna(np.mean(df['Ozone'].dropna()))[df['Ozone'].isnull()]
plt.plot(df.index, df['Ozone'],'k',a.reindex(df.index) , 'r.')
plt.subplot(212)
plt.title('Solar.R')
b = df['Solar.R'].fillna(np.mean(df['Solar.R'].dropna()))[df['Solar.R'].isnull()]
plt.plot(df.index, df['Solar.R'],'k',b.reindex(df.index) , 'r.')
[<matplotlib.lines.Line2D at 0xb535d30>,
<matplotlib.lines.Line2D at 0xb8faf98>]
Aanpak 3: Vorige waarden nemen -> Pad
plt.figure(figsize=(15, 10))
plt.subplot(211)
plt.title('Ozone')
a = df['Ozone'].fillna(method = 'pad')[df['Ozone'].isnull()]
plt.plot(df.index, df['Ozone'],'k',a.reindex(df.index) , 'r.')
plt.subplot(212)
plt.title('Solar.R')
b = df['Solar.R'].fillna(method = 'pad')[df['Solar.R'].isnull()]
plt.plot(df.index, df['Solar.R'],'k',b.reindex(df.index) , 'r.')
[<matplotlib.lines.Line2D at 0xb993fd0>,
<matplotlib.lines.Line2D at 0xbcb4e48>]
Er
is niet 1 juiste manier om missende waarden in te vullen. Vaak kun je
op basis van domeinkennis van de data het beste beslissen wat de beste
manier is. Anders is het visueel inspecteren van manieren zoals
hierboven een goede methodiek
df['Ozone'] = df['Ozone'].interpolate()
df['Solar.R'] = df['Solar.R'].interpolate()
Correlatie, plots en density bekijken
df[['Ozone','Solar.R','Wind','Temp']].corr()
| Ozone | Solar.R | Wind | Temp | |
|---|---|---|---|---|
| Ozone | 1.000000 | 0.159473 | -0.507534 | 0.601636 |
| Solar.R | 0.159473 | 1.000000 | -0.029280 | 0.229697 |
| Wind | -0.507534 | -0.029280 | 1.000000 | -0.457988 |
| Temp | 0.601636 | 0.229697 | -0.457988 | 1.000000 |
pd.tools.plotting.scatter_matrix(df[['Ozone','Solar.R','Wind','Temp']], figsize=(15, 15), diagonal='kde');
Abonneren op:
Posts (Atom)
Datums bepalen adhv begin en einddatum in Dataframe
Voorbeeld op losse velden ####################################################################### # import necessary packages from datetime...
-
The Pandas loc indexer can be used with DataFrames for two different use cases: a.) Selecting rows by label/index b.) Selecting r...
-
how to use else if in lambda functions f = lambda x : 1 if x > 0 else 0 if x == 0 else - 1 dfGert.apply(lambda x: 1 ...
-
Het is mogelijk om op alle waarden in een kolom in een dataframe een eigen functie toe te passen. def mijnfunctie(waarde): code_list...