from datetime import datetime
print(f'Päivitetty {datetime.now()}')
Päivitetty 2022-12-14 07:44:20.198403
Tilastokeskuksen tietokantoihin (https://statfin.stat.fi/PxWeb/pxweb/fi/StatFin/) tekemistäni kyselyistä voin tallentaa linkkejä, joita voin käyttää koodissa.
Tässä esimerkissä tallennan automaattisesti päivittyvän linkin tietokantapoiminnan tuloksiin. Käytän esimerkissä tietokantapoimintaa tietokantaan "Vanhojen osakeasuntojen hintaindeksi (2020=100) ja kauppojen lukumäärät, kuukausittain...". Kyseiseen tietokantaan pääsee osoitteesta https://statfin.stat.fi/PxWeb/pxweb/fi/StatFin/StatFin__ashi/statfin_ashi_pxt_13ms.px/
Tietokannasta olen poiminut Neliöhinnat, Kaikki kuukaudet, Pääkaupunkiseutu ja Koko maa ilman pääkaupunkiseutua, Kerrostalot.
Käänsin manuaalisesti taulukkoa siten että ainoastaan kuukausi jäi riveille.
Tietokantapoiminnan viimeisessä vaiheessa (Näytä taulukko) tallensin päivittyvän linkin tietokantapoimintaan Tallenna poiminta -toiminnolla. Käytin vaihtoehtoa Kiinteä aloitusaika, johon lisätään päivitetyt jaksot ja tiedostomuotoa Pilkkueroteltu otsikoton.
Huomaa, että tilastokeskus ei käytä Pythonin oletus merkistökoodausta UTF-8, jonka vuoksi määrittelen käytetyn merkistökoodauksen encoding-paramterilla.
import pandas as pd
import matplotlib.pyplot as plt
df = pd.read_csv('https://statfin.stat.fi:443/PxWeb/sq/fefc9029-9e16-456b-91ca-124333085037', encoding = 'cp1252')
# Sarakeotsikot
df.columns = ['Kuukausi', 'Pääkaupunkiseutu', 'Muu Suomi']
df
Kuukausi | Pääkaupunkiseutu | Muu Suomi | |
---|---|---|---|
0 | 2020M01 | 4715 | 1911 |
1 | 2020M02 | 4684 | 1958 |
2 | 2020M03 | 4710 | 1954 |
3 | 2020M04 | 4869 | 1966 |
4 | 2020M05 | 4758 | 1948 |
5 | 2020M06 | 4858 | 1976 |
6 | 2020M07 | 4829 | 1985 |
7 | 2020M08 | 4881 | 2011 |
8 | 2020M09 | 4834 | 1981 |
9 | 2020M10 | 4859 | 1953 |
10 | 2020M11 | 4901 | 1922 |
11 | 2020M12 | 4970 | 1983 |
12 | 2021M01 | 4947 | 1956 |
13 | 2021M02 | 4870 | 1986 |
14 | 2021M03 | 5103 | 1991 |
15 | 2021M04 | 5054 | 2038 |
16 | 2021M05 | 5197 | 2066 |
17 | 2021M06 | 5175 | 2078 |
18 | 2021M07 | 5076 | 2104 |
19 | 2021M08 | 5194 | 2085 |
20 | 2021M09 | 5022 | 2010 |
21 | 2021M10 | 5211 | 2036 |
22 | 2021M11 | 5281 | 2035 |
23 | 2021M12 | 5076 | 2031 |
24 | 2022M01* | 5125 | 2078 |
25 | 2022M02* | 5052 | 2096 |
26 | 2022M03* | 5094 | 2064 |
27 | 2022M04* | 5237 | 2108 |
28 | 2022M05* | 5200 | 2155 |
29 | 2022M06* | 5189 | 2141 |
30 | 2022M07* | 5035 | 2110 |
31 | 2022M08* | 4972 | 2173 |
32 | 2022M09* | 5080 | 2100 |
33 | 2022M10* | 4679 | 2037 |
# Poistan tähdet ennakkotiedoista (tähdellä merkitään tietoja, jotka saattavat vielä tarkistusten jälkeen muuttua)
df['Kuukausi'] = df['Kuukausi'].astype(str).str.strip('*')
# Lisään aikaleimat indeksiin. Huomaa formaatti, jossa M vuosiluvun Y ja kuukauden m välissä!
df.index = pd.to_datetime(df['Kuukausi'], format = '%YM%m')
df = df.drop('Kuukausi', axis = 1)
df
Pääkaupunkiseutu | Muu Suomi | |
---|---|---|
Kuukausi | ||
2020-01-01 | 4715 | 1911 |
2020-02-01 | 4684 | 1958 |
2020-03-01 | 4710 | 1954 |
2020-04-01 | 4869 | 1966 |
2020-05-01 | 4758 | 1948 |
2020-06-01 | 4858 | 1976 |
2020-07-01 | 4829 | 1985 |
2020-08-01 | 4881 | 2011 |
2020-09-01 | 4834 | 1981 |
2020-10-01 | 4859 | 1953 |
2020-11-01 | 4901 | 1922 |
2020-12-01 | 4970 | 1983 |
2021-01-01 | 4947 | 1956 |
2021-02-01 | 4870 | 1986 |
2021-03-01 | 5103 | 1991 |
2021-04-01 | 5054 | 2038 |
2021-05-01 | 5197 | 2066 |
2021-06-01 | 5175 | 2078 |
2021-07-01 | 5076 | 2104 |
2021-08-01 | 5194 | 2085 |
2021-09-01 | 5022 | 2010 |
2021-10-01 | 5211 | 2036 |
2021-11-01 | 5281 | 2035 |
2021-12-01 | 5076 | 2031 |
2022-01-01 | 5125 | 2078 |
2022-02-01 | 5052 | 2096 |
2022-03-01 | 5094 | 2064 |
2022-04-01 | 5237 | 2108 |
2022-05-01 | 5200 | 2155 |
2022-06-01 | 5189 | 2141 |
2022-07-01 | 5035 | 2110 |
2022-08-01 | 4972 | 2173 |
2022-09-01 | 5080 | 2100 |
2022-10-01 | 4679 | 2037 |
# Viivakuvio neliöhintojen kehityksestä (kummallakin sarjalla oma arvoakseli)
plt.figure(figsize = (10, 6))
ax1 = df['Pääkaupunkiseutu'].plot(color = 'C0', title = 'Vanhojen osakeasuntojen neliöhinta')
ax1.set_ylabel('Pääkaupunkiseutu', color = 'C0', fontsize = 12)
ax2 = ax1.twinx()
df['Muu Suomi'].plot(ax = ax2, color = 'C1')
ax2.set_ylabel('Muu Suomi', color = 'C1', fontsize = 12)
Text(0, 0.5, 'Muu Suomi')