Dataan tutustuminen

Datan avaamisen jälkeen kannattaa tutustua dataan. Erityisesti kannattaa kiinnittää huomiota omituisiin tai muista poikkeaviin arvoihin.

In [1]:
# Data-analytiikan peruskirjaston tuonti
import pandas as pd

# Datan avaaminen dataframeen
df = pd.read_excel('http://taanila.fi/data1.xlsx')
In [2]:
# Datan rivien ja sarakkeiden lukumäärät
df.shape
Out[2]:
(82, 16)
In [3]:
df
# Huomaa, että kaikkia datan rivejä ei näytetä
Out[3]:
nro sukup ikä perhe koulutus palveluv palkka johto työtov työymp palkkat työteht työterv lomaosa kuntosa hieroja
0 1 1 38 1 1.0 22.0 3587 3 3.0 3 3 3 NaN NaN NaN NaN
1 2 1 29 2 2.0 10.0 2963 1 5.0 2 1 3 NaN NaN NaN NaN
2 3 1 30 1 1.0 7.0 1989 3 4.0 1 1 3 1.0 NaN NaN NaN
3 4 1 36 2 1.0 14.0 2144 3 3.0 3 3 3 1.0 NaN NaN NaN
4 5 1 24 1 2.0 4.0 2183 2 3.0 2 1 2 1.0 NaN NaN NaN
... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ...
77 78 1 22 1 3.0 0.0 1598 4 4.0 4 3 4 NaN 1.0 1.0 NaN
78 79 1 33 1 1.0 2.0 1638 1 3.0 2 1 2 1.0 NaN NaN NaN
79 80 1 27 1 2.0 7.0 2612 3 4.0 3 3 3 1.0 NaN 1.0 NaN
80 81 1 35 2 2.0 16.0 2808 3 4.0 3 3 3 NaN NaN NaN NaN
81 82 2 35 2 3.0 15.0 2183 3 4.0 4 3 4 1.0 NaN NaN NaN

82 rows × 16 columns

In [4]:
# Jos haluat näyttää kaikki rivit, niin aseta max_rows datan rivien mukaiseksi
# Tuhansien rivien datoilla tätä ei ehkä kannata tehdä
pd.options.display.max_rows = df.shape[0]

# Jos sarakkeita on paljon, niin saatat tarvita vastaavaa komentoa sarakkeiden määrälle
pd.options.display.max_columns = df.shape[1]
In [5]:
df
# Nyt kaikki rivit näytetään
Out[5]:
nro sukup ikä perhe koulutus palveluv palkka johto työtov työymp palkkat työteht työterv lomaosa kuntosa hieroja
0 1 1 38 1 1.0 22.0 3587 3 3.0 3 3 3 NaN NaN NaN NaN
1 2 1 29 2 2.0 10.0 2963 1 5.0 2 1 3 NaN NaN NaN NaN
2 3 1 30 1 1.0 7.0 1989 3 4.0 1 1 3 1.0 NaN NaN NaN
3 4 1 36 2 1.0 14.0 2144 3 3.0 3 3 3 1.0 NaN NaN NaN
4 5 1 24 1 2.0 4.0 2183 2 3.0 2 1 2 1.0 NaN NaN NaN
5 6 2 31 2 2.0 14.0 1910 4 4.0 5 2 4 1.0 1.0 NaN NaN
6 7 1 49 1 2.0 16.0 2066 3 5.0 4 2 2 NaN NaN 1.0 NaN
7 8 1 55 1 1.0 0.0 2066 3 5.0 3 1 3 1.0 NaN NaN NaN
8 9 1 40 2 1.0 23.0 2768 2 4.0 4 2 4 NaN 1.0 NaN NaN
9 10 1 33 1 1.0 16.0 2106 3 2.0 1 1 1 1.0 NaN NaN NaN
10 11 1 39 2 1.0 22.0 2651 3 5.0 3 1 3 NaN NaN NaN NaN
11 12 1 40 2 3.0 21.0 2846 3 5.0 3 1 2 NaN 1.0 NaN 1.0
12 13 1 35 2 3.0 15.0 2808 3 5.0 3 1 4 NaN 1.0 NaN NaN
13 14 1 58 2 3.0 21.0 3587 4 5.0 4 1 3 NaN NaN NaN NaN
14 15 1 53 2 3.0 12.0 3393 4 4.0 4 4 4 NaN 1.0 NaN NaN
15 16 2 42 2 3.0 23.0 2691 3 3.0 3 3 3 1.0 NaN NaN 1.0
16 17 1 26 1 4.0 2.0 5225 5 5.0 5 4 5 NaN NaN 1.0 NaN
17 18 2 38 2 3.0 17.0 2729 4 3.0 4 2 1 NaN NaN NaN NaN
18 19 1 42 1 3.0 20.0 2925 2 3.0 4 1 4 1.0 NaN NaN 1.0
19 20 2 40 2 2.0 13.0 2457 3 3.0 4 3 2 1.0 NaN NaN 1.0
20 21 2 40 2 3.0 20.0 2691 2 4.0 5 3 4 NaN NaN NaN NaN
21 22 1 47 2 3.0 17.0 4874 2 4.0 3 2 4 NaN 1.0 NaN NaN
22 23 1 44 2 1.0 27.0 3510 4 4.0 4 4 4 NaN 1.0 NaN NaN
23 24 1 36 1 3.0 7.0 4446 3 4.0 3 4 5 NaN NaN NaN NaN
24 25 1 43 2 3.0 1.0 2925 4 4.0 4 4 4 NaN 1.0 NaN NaN
25 26 1 26 1 2.0 3.0 1521 2 4.0 2 1 3 1.0 NaN 1.0 1.0
26 27 1 26 1 2.0 2.0 1989 2 4.0 2 2 3 1.0 NaN NaN 1.0
27 28 2 56 1 1.0 15.0 2223 3 4.0 3 2 4 1.0 NaN NaN 1.0
28 29 1 47 2 2.0 23.0 2808 2 4.0 3 1 4 1.0 NaN NaN NaN
29 30 1 21 1 NaN NaN 1949 4 4.0 3 3 2 1.0 NaN NaN NaN
30 31 1 21 1 3.0 1.0 2340 4 5.0 3 4 2 1.0 NaN 1.0 1.0
31 32 1 45 2 1.0 24.0 2925 4 4.0 4 3 4 NaN 1.0 NaN NaN
32 33 1 59 2 3.0 15.0 6278 4 4.0 5 4 4 NaN 1.0 NaN NaN
33 34 1 37 2 1.0 14.0 2183 1 5.0 1 1 2 1.0 NaN NaN 1.0
34 35 1 28 2 2.0 5.0 1989 3 4.0 3 3 3 1.0 NaN 1.0 1.0
35 36 1 31 2 3.0 0.0 1559 2 4.0 3 1 3 1.0 NaN NaN NaN
36 37 2 56 2 2.0 17.0 2729 5 5.0 5 5 5 NaN NaN NaN 1.0
37 38 1 50 2 1.0 1.0 2027 5 5.0 4 1 4 1.0 1.0 NaN NaN
38 39 1 30 1 2.0 10.0 2300 3 5.0 3 3 4 NaN NaN NaN NaN
39 40 1 32 1 1.0 3.0 2106 1 5.0 4 1 3 1.0 NaN NaN NaN
40 41 1 33 2 3.0 9.0 2846 3 3.0 4 2 3 1.0 NaN NaN NaN
41 42 1 29 1 2.0 6.0 2534 3 4.0 3 1 2 1.0 NaN NaN NaN
42 43 2 40 2 3.0 12.0 2144 4 4.0 4 4 4 NaN 1.0 NaN NaN
43 44 1 30 1 2.0 7.0 2223 2 3.0 4 1 3 1.0 NaN NaN 1.0
44 45 1 55 2 1.0 35.0 2651 4 5.0 4 2 4 1.0 NaN NaN 1.0
45 46 2 51 2 1.0 28.0 1989 3 3.0 2 2 3 1.0 NaN NaN 1.0
46 47 2 22 1 3.0 21.0 1872 3 3.0 4 1 3 NaN NaN 1.0 NaN
47 48 1 34 2 1.0 18.0 2183 4 5.0 4 1 3 NaN NaN NaN NaN
48 49 1 27 2 2.0 7.0 2729 4 4.0 3 3 5 NaN NaN 1.0 NaN
49 50 1 29 1 3.0 7.0 2340 3 4.0 3 2 3 1.0 NaN NaN NaN
50 51 2 39 2 2.0 10.0 2106 4 5.0 5 4 5 NaN 1.0 NaN NaN
51 52 1 41 2 1.0 18.0 2261 5 5.0 5 2 5 NaN 1.0 NaN NaN
52 53 1 44 2 1.0 3.0 1989 1 2.0 2 1 1 1.0 NaN NaN NaN
53 54 1 25 1 2.0 1.0 1559 2 4.0 3 1 2 1.0 NaN NaN NaN
54 55 2 45 2 1.0 17.0 2417 3 5.0 4 3 3 NaN NaN NaN 1.0
55 56 2 31 2 1.0 6.0 1949 4 4.0 4 3 3 1.0 NaN NaN 1.0
56 57 1 61 2 2.0 36.0 3119 2 NaN 2 1 5 1.0 NaN NaN 1.0
57 58 1 38 2 2.0 NaN 2574 2 3.0 1 1 2 1.0 NaN NaN 1.0
58 59 1 20 1 2.0 1.0 2261 3 4.0 3 2 3 NaN NaN NaN NaN
59 60 1 31 1 1.0 10.0 2144 4 4.0 3 1 3 1.0 NaN NaN NaN
60 61 1 44 1 1.0 19.0 2183 2 2.0 1 1 2 1.0 NaN NaN NaN
61 62 1 40 2 1.0 0.0 1872 2 3.0 1 2 3 1.0 NaN NaN NaN
62 63 2 51 2 2.0 10.0 1872 4 3.0 2 2 3 1.0 NaN NaN NaN
63 64 2 44 1 2.0 1.0 1715 4 4.0 3 2 3 1.0 NaN NaN 1.0
64 65 2 35 2 2.0 17.0 2691 4 4.0 5 2 4 1.0 NaN NaN 1.0
65 66 2 37 2 1.0 16.0 2027 5 5.0 5 4 5 1.0 1.0 NaN NaN
66 67 1 37 2 4.0 8.0 5069 3 4.0 3 2 2 1.0 1.0 NaN 1.0
67 68 1 33 2 3.0 7.0 2417 2 4.0 3 1 4 NaN NaN NaN NaN
68 69 1 28 2 2.0 1.0 3510 4 5.0 3 1 4 NaN NaN NaN NaN
69 70 1 52 2 2.0 22.0 3119 3 4.0 3 2 2 1.0 1.0 NaN 1.0
70 71 1 34 2 2.0 1.0 2495 3 5.0 5 3 4 NaN 1.0 NaN NaN
71 72 1 46 2 2.0 23.0 3470 3 5.0 5 3 4 NaN 1.0 NaN NaN
72 73 2 40 2 3.0 2.0 2027 5 3.0 4 3 4 1.0 NaN NaN NaN
73 74 1 45 2 1.0 20.0 2846 3 5.0 1 1 3 1.0 NaN NaN NaN
74 75 1 40 1 1.0 1.0 1949 1 5.0 1 1 1 1.0 NaN NaN NaN
75 76 1 37 1 2.0 15.0 1598 1 5.0 1 1 1 1.0 NaN NaN NaN
76 77 1 39 1 2.0 22.0 2183 4 5.0 3 1 2 NaN NaN NaN NaN
77 78 1 22 1 3.0 0.0 1598 4 4.0 4 3 4 NaN 1.0 1.0 NaN
78 79 1 33 1 1.0 2.0 1638 1 3.0 2 1 2 1.0 NaN NaN NaN
79 80 1 27 1 2.0 7.0 2612 3 4.0 3 3 3 1.0 NaN 1.0 NaN
80 81 1 35 2 2.0 16.0 2808 3 4.0 3 3 3 NaN NaN NaN NaN
81 82 2 35 2 3.0 15.0 2183 3 4.0 4 3 4 1.0 NaN NaN NaN
In [6]:
# Datan alkupää. Voit myös määrittää näytettävien rivien määrän, esimerkiksi df.head(10)
df.head()
Out[6]:
nro sukup ikä perhe koulutus palveluv palkka johto työtov työymp palkkat työteht työterv lomaosa kuntosa hieroja
0 1 1 38 1 1.0 22.0 3587 3 3.0 3 3 3 NaN NaN NaN NaN
1 2 1 29 2 2.0 10.0 2963 1 5.0 2 1 3 NaN NaN NaN NaN
2 3 1 30 1 1.0 7.0 1989 3 4.0 1 1 3 1.0 NaN NaN NaN
3 4 1 36 2 1.0 14.0 2144 3 3.0 3 3 3 1.0 NaN NaN NaN
4 5 1 24 1 2.0 4.0 2183 2 3.0 2 1 2 1.0 NaN NaN NaN
In [7]:
# Datan loppupää 
df.tail()
Out[7]:
nro sukup ikä perhe koulutus palveluv palkka johto työtov työymp palkkat työteht työterv lomaosa kuntosa hieroja
77 78 1 22 1 3.0 0.0 1598 4 4.0 4 3 4 NaN 1.0 1.0 NaN
78 79 1 33 1 1.0 2.0 1638 1 3.0 2 1 2 1.0 NaN NaN NaN
79 80 1 27 1 2.0 7.0 2612 3 4.0 3 3 3 1.0 NaN 1.0 NaN
80 81 1 35 2 2.0 16.0 2808 3 4.0 3 3 3 NaN NaN NaN NaN
81 82 2 35 2 3.0 15.0 2183 3 4.0 4 3 4 1.0 NaN NaN NaN
In [8]:
# n suurinta
df.nlargest(n = 3, columns = 'palkka')
Out[8]:
nro sukup ikä perhe koulutus palveluv palkka johto työtov työymp palkkat työteht työterv lomaosa kuntosa hieroja
32 33 1 59 2 3.0 15.0 6278 4 4.0 5 4 4 NaN 1.0 NaN NaN
16 17 1 26 1 4.0 2.0 5225 5 5.0 5 4 5 NaN NaN 1.0 NaN
66 67 1 37 2 4.0 8.0 5069 3 4.0 3 2 2 1.0 1.0 NaN 1.0
In [9]:
# n pienintä
df.nsmallest(n = 3, columns = 'palkka')
Out[9]:
nro sukup ikä perhe koulutus palveluv palkka johto työtov työymp palkkat työteht työterv lomaosa kuntosa hieroja
25 26 1 26 1 2.0 3.0 1521 2 4.0 2 1 3 1.0 NaN 1.0 1.0
35 36 1 31 2 3.0 0.0 1559 2 4.0 3 1 3 1.0 NaN NaN NaN
53 54 1 25 1 2.0 1.0 1559 2 4.0 3 1 2 1.0 NaN NaN NaN
In [10]:
# Muuttujien nimet ja arvojen lukumäärät
df.count()
Out[10]:
nro         82
sukup       82
ikä         82
perhe       82
koulutus    81
palveluv    80
palkka      82
johto       82
työtov      81
työymp      82
palkkat     82
työteht     82
työterv     47
lomaosa     20
kuntosa      9
hieroja     22
dtype: int64
In [11]:
# Puuttuvien arvojen lukumäärät
df.isnull().sum()
Out[11]:
nro          0
sukup        0
ikä          0
perhe        0
koulutus     1
palveluv     2
palkka       0
johto        0
työtov       1
työymp       0
palkkat      0
työteht      0
työterv     35
lomaosa     62
kuntosa     73
hieroja     60
dtype: int64
In [12]:
# Muuttujien nimet, arvojen lukumäärät ja muuttujien tyypit
df.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 82 entries, 0 to 81
Data columns (total 16 columns):
 #   Column    Non-Null Count  Dtype  
---  ------    --------------  -----  
 0   nro       82 non-null     int64  
 1   sukup     82 non-null     int64  
 2   ikä       82 non-null     int64  
 3   perhe     82 non-null     int64  
 4   koulutus  81 non-null     float64
 5   palveluv  80 non-null     float64
 6   palkka    82 non-null     int64  
 7   johto     82 non-null     int64  
 8   työtov    81 non-null     float64
 9   työymp    82 non-null     int64  
 10  palkkat   82 non-null     int64  
 11  työteht   82 non-null     int64  
 12  työterv   47 non-null     float64
 13  lomaosa   20 non-null     float64
 14  kuntosa   9 non-null      float64
 15  hieroja   22 non-null     float64
dtypes: float64(7), int64(9)
memory usage: 10.4 KB
In [13]:
# Muuttujien ainutkertaiset arvot
# Näiden avulla on helppo huomata virheellisiä/epäilyttäviä arvoja
for var in df:
    print(var, df[var].unique())
nro [ 1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48
 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72
 73 74 75 76 77 78 79 80 81 82]
sukup [1 2]
ikä [38 29 30 36 24 31 49 55 40 33 39 35 58 53 42 26 47 44 43 56 21 45 59 37
 28 50 32 51 22 34 27 41 25 61 20 52 46]
perhe [1 2]
koulutus [ 1.  2.  3.  4. nan]
palveluv [22. 10.  7. 14.  4. 16.  0. 23. 21. 15. 12.  2. 17. 20. 13. 27.  1.  3.
 nan 24.  5.  9.  6. 35. 28. 18. 36. 19.  8.]
palkka [3587 2963 1989 2144 2183 1910 2066 2768 2106 2651 2846 2808 3393 2691
 5225 2729 2925 2457 4874 3510 4446 1521 2223 1949 2340 6278 1559 2027
 2300 2534 1872 2261 2417 3119 2574 1715 5069 2495 3470 1598 1638 2612]
johto [3 1 2 4 5]
työtov [ 3.  5.  4.  2. nan]
työymp [3 2 1 5 4]
palkkat [3 1 2 4 5]
työteht [3 2 4 1 5]
työterv [nan  1.]
lomaosa [nan  1.]
kuntosa [nan  1.]
hieroja [nan  1.]
In [14]:
# Tilastollisia tunnuslukuja
df.describe()
Out[14]:
nro sukup ikä perhe koulutus palveluv palkka johto työtov työymp palkkat työteht työterv lomaosa kuntosa hieroja
count 82.000000 82.000000 82.000000 82.000000 81.000000 80.000000 82.000000 82.000000 81.000000 82.000000 82.000000 82.000000 47.0 20.0 9.0 22.0
mean 41.500000 1.231707 37.951220 1.621951 1.987654 12.175000 2563.878049 3.060976 4.061728 3.219512 2.109756 3.195122 1.0 1.0 1.0 1.0
std 23.815261 0.424519 9.773866 0.487884 0.844006 8.807038 849.350302 1.058155 0.826826 1.154961 1.111179 1.047502 0.0 0.0 0.0 0.0
min 1.000000 1.000000 20.000000 1.000000 1.000000 0.000000 1521.000000 1.000000 2.000000 1.000000 1.000000 1.000000 1.0 1.0 1.0 1.0
25% 21.250000 1.000000 31.000000 1.000000 1.000000 3.750000 2027.000000 2.000000 4.000000 3.000000 1.000000 3.000000 1.0 1.0 1.0 1.0
50% 41.500000 1.000000 37.500000 2.000000 2.000000 12.500000 2320.000000 3.000000 4.000000 3.000000 2.000000 3.000000 1.0 1.0 1.0 1.0
75% 61.750000 1.000000 44.000000 2.000000 3.000000 18.250000 2808.000000 4.000000 5.000000 4.000000 3.000000 4.000000 1.0 1.0 1.0 1.0
max 82.000000 2.000000 61.000000 2.000000 4.000000 36.000000 6278.000000 5.000000 5.000000 5.000000 5.000000 5.000000 1.0 1.0 1.0 1.0