from datetime import datetime
print(f'Päivitetty {datetime.now().date()} / Aki Taanila')
Päivitetty 2023-05-02 / Aki Taanila
Katso myös Datan muunnokset: http://nbviewer.org/github/taanila/data/blob/main/muunna.ipynb
Seuraavassa tarkastelen funktion määrittelyä lambda-lausekkeena, apply-funktiota, logaritmimuunnosta ja standardointia (normittaminen).
import pandas as pd
import numpy as np
df = pd.read_excel('https://taanila.fi/data1.xlsx')[['palkka', 'johto', 'työtov', 'työymp', 'palkkat', 'työteht']]
df.info()
<class 'pandas.core.frame.DataFrame'> RangeIndex: 82 entries, 0 to 81 Data columns (total 6 columns): # Column Non-Null Count Dtype --- ------ -------------- ----- 0 palkka 82 non-null int64 1 johto 82 non-null int64 2 työtov 81 non-null float64 3 työymp 82 non-null int64 4 palkkat 82 non-null int64 5 työteht 82 non-null int64 dtypes: float64(1), int64(5) memory usage: 4.0 KB
df
palkka | johto | työtov | työymp | palkkat | työteht | |
---|---|---|---|---|---|---|
0 | 3587 | 3 | 3.0 | 3 | 3 | 3 |
1 | 2963 | 1 | 5.0 | 2 | 1 | 3 |
2 | 1989 | 3 | 4.0 | 1 | 1 | 3 |
3 | 2144 | 3 | 3.0 | 3 | 3 | 3 |
4 | 2183 | 2 | 3.0 | 2 | 1 | 2 |
... | ... | ... | ... | ... | ... | ... |
77 | 1598 | 4 | 4.0 | 4 | 3 | 4 |
78 | 1638 | 1 | 3.0 | 2 | 1 | 2 |
79 | 2612 | 3 | 4.0 | 3 | 3 | 3 |
80 | 2808 | 3 | 4.0 | 3 | 3 | 3 |
81 | 2183 | 3 | 4.0 | 4 | 3 | 4 |
82 rows × 6 columns
# Käännän mielipideasteikollisten muuttujien (1-5) asteikon päinvastaikseksi
# lambda tarkoittaa funktiota; tässä funktio suorittaa laskutoimituksen 6-x, jokaiselle muuttujan arvolle x
df[['johto2', 'työtov2', 'työymp2', 'palkkat2', 'työteht2']] = \
df[['johto', 'työtov', 'työymp', 'palkkat', 'työteht']].apply(lambda x:6-x)
df
palkka | johto | työtov | työymp | palkkat | työteht | johto2 | työtov2 | työymp2 | palkkat2 | työteht2 | |
---|---|---|---|---|---|---|---|---|---|---|---|
0 | 3587 | 3 | 3.0 | 3 | 3 | 3 | 3 | 3.0 | 3 | 3 | 3 |
1 | 2963 | 1 | 5.0 | 2 | 1 | 3 | 5 | 1.0 | 4 | 5 | 3 |
2 | 1989 | 3 | 4.0 | 1 | 1 | 3 | 3 | 2.0 | 5 | 5 | 3 |
3 | 2144 | 3 | 3.0 | 3 | 3 | 3 | 3 | 3.0 | 3 | 3 | 3 |
4 | 2183 | 2 | 3.0 | 2 | 1 | 2 | 4 | 3.0 | 4 | 5 | 4 |
... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... |
77 | 1598 | 4 | 4.0 | 4 | 3 | 4 | 2 | 2.0 | 2 | 3 | 2 |
78 | 1638 | 1 | 3.0 | 2 | 1 | 2 | 5 | 3.0 | 4 | 5 | 4 |
79 | 2612 | 3 | 4.0 | 3 | 3 | 3 | 3 | 2.0 | 3 | 3 | 3 |
80 | 2808 | 3 | 4.0 | 3 | 3 | 3 | 3 | 2.0 | 3 | 3 | 3 |
81 | 2183 | 3 | 4.0 | 4 | 3 | 4 | 3 | 2.0 | 2 | 3 | 2 |
82 rows × 11 columns
# Teen palkalle logaritmimuunnoksen kahdella vaihtoehtoisella tavalla
# Tapa 1
df['palkka_log1'] = df['palkka'].apply('log')
# Tapa 2
df['palkka_log2'] = np.log(df['palkka'])
df
palkka | johto | työtov | työymp | palkkat | työteht | johto2 | työtov2 | työymp2 | palkkat2 | työteht2 | palkka_log1 | palkka_log2 | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 3587 | 3 | 3.0 | 3 | 3 | 3 | 3 | 3.0 | 3 | 3 | 3 | 8.185071 | 8.185071 |
1 | 2963 | 1 | 5.0 | 2 | 1 | 3 | 5 | 1.0 | 4 | 5 | 3 | 7.993958 | 7.993958 |
2 | 1989 | 3 | 4.0 | 1 | 1 | 3 | 3 | 2.0 | 5 | 5 | 3 | 7.595387 | 7.595387 |
3 | 2144 | 3 | 3.0 | 3 | 3 | 3 | 3 | 3.0 | 3 | 3 | 3 | 7.670429 | 7.670429 |
4 | 2183 | 2 | 3.0 | 2 | 1 | 2 | 4 | 3.0 | 4 | 5 | 4 | 7.688455 | 7.688455 |
... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... |
77 | 1598 | 4 | 4.0 | 4 | 3 | 4 | 2 | 2.0 | 2 | 3 | 2 | 7.376508 | 7.376508 |
78 | 1638 | 1 | 3.0 | 2 | 1 | 2 | 5 | 3.0 | 4 | 5 | 4 | 7.401231 | 7.401231 |
79 | 2612 | 3 | 4.0 | 3 | 3 | 3 | 3 | 2.0 | 3 | 3 | 3 | 7.867871 | 7.867871 |
80 | 2808 | 3 | 4.0 | 3 | 3 | 3 | 3 | 2.0 | 3 | 3 | 3 | 7.940228 | 7.940228 |
81 | 2183 | 3 | 4.0 | 4 | 3 | 4 | 3 | 2.0 | 2 | 3 | 2 | 7.688455 | 7.688455 |
82 rows × 13 columns
# Kaksi vaihtoehtoista tapaa standardoida (normittaa)
# Keskiarvo
ka = df['palkka'].mean()
# Keskihajonta
# Huom. keskihajonnan kaavassa voi olla jakajana n tai n-1, tässä ddof-parametri määrää jakajaksi n
kh = df['palkka'].std(ddof=0)
# Tapa 1
df['palkka_norm1'] = (df['palkka']-ka)/kh
# Tapa 2
df['palkka_norm2'] = df['palkka'].apply(lambda x:(x-ka)/kh)
df
palkka | johto | työtov | työymp | palkkat | työteht | johto2 | työtov2 | työymp2 | palkkat2 | työteht2 | palkka_log1 | palkka_log2 | palkka_norm1 | palkka_norm2 | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 3587 | 3 | 3.0 | 3 | 3 | 3 | 3 | 3.0 | 3 | 3 | 3 | 8.185071 | 8.185071 | 1.212007 | 1.212007 |
1 | 2963 | 1 | 5.0 | 2 | 1 | 3 | 5 | 1.0 | 4 | 5 | 3 | 7.993958 | 7.993958 | 0.472806 | 0.472806 |
2 | 1989 | 3 | 4.0 | 1 | 1 | 3 | 3 | 2.0 | 5 | 5 | 3 | 7.595387 | 7.595387 | -0.681010 | -0.681010 |
3 | 2144 | 3 | 3.0 | 3 | 3 | 3 | 3 | 3.0 | 3 | 3 | 3 | 7.670429 | 7.670429 | -0.497394 | -0.497394 |
4 | 2183 | 2 | 3.0 | 2 | 1 | 2 | 4 | 3.0 | 4 | 5 | 4 | 7.688455 | 7.688455 | -0.451194 | -0.451194 |
... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... |
77 | 1598 | 4 | 4.0 | 4 | 3 | 4 | 2 | 2.0 | 2 | 3 | 2 | 7.376508 | 7.376508 | -1.144195 | -1.144195 |
78 | 1638 | 1 | 3.0 | 2 | 1 | 2 | 5 | 3.0 | 4 | 5 | 4 | 7.401231 | 7.401231 | -1.096810 | -1.096810 |
79 | 2612 | 3 | 4.0 | 3 | 3 | 3 | 3 | 2.0 | 3 | 3 | 3 | 7.867871 | 7.867871 | 0.057006 | 0.057006 |
80 | 2808 | 3 | 4.0 | 3 | 3 | 3 | 3 | 2.0 | 3 | 3 | 3 | 7.940228 | 7.940228 | 0.289191 | 0.289191 |
81 | 2183 | 3 | 4.0 | 4 | 3 | 4 | 3 | 2.0 | 2 | 3 | 2 | 7.688455 | 7.688455 | -0.451194 | -0.451194 |
82 rows × 15 columns
Data-analytiikka Pythonilla https://tilastoapu.wordpress.com/python/