Julkisista rahoista ja kunnallistaloudesta#
Elämme yhteiskunnassa, jonka pyörittämiseksi itse kukin maksaa veroja ja jonka osasina valtio ja kunnat sijoittavat varallisuuttaan erilaisiin kohteisiin. Mutta millaisista rahoista näissä tilanteissa oikeastaan puhutaan?
Alla on vinkkejä muutamille suomalaisille sivustoille jotka avaavat aihetta sekä esimerkkivilkaisu tarjolla olevaan aineistoon. Valtiovarainministeriön puollon avoimuudelle voi löytää täältä: https://vm.fi/avoin-tieto.
Avoindata.fi#
http://www.avoindata.fi/ on valtiollisen DVV:n eli Digi- ja väestötietoviraston ylläpitämä portaali, jonne niin kunnat kuin erilaiset organisaatiotkin julkaisevat omia aineistojaan kansalaisten käytettäväksi. Kohta käsittelemämme Janakkalan ostolaskutiedot on ladattu täältä.
Tutkihallintoa.fi#
https://www.tutkihallintoa.fi tarjoaa kattavan katsauksen Suomen valtion varainkäyttöön. Erityisesti sen tarjoamat visualisaatiot valtion vuosittaisesta tilinpäätöksestä ovat hyvä yleiskuva erilaisen poliittisen keskustelun seuraamiseen https://www.tutkihallintoa.fi/valtio/taloustiedot/valtion-tilinpaatos/.
Tutkihankintoja.fi#
https://tutkihankintoja.fi/ on valtiollisen julkishankintayksikön Hanselin ylläpitämä sivusto, joka hyödyntää muun muassa Avoindata.fi -portaalista saatavaa informaatiota tiivistääkseen erilaisten suurten yhteishankkeiden tilanteen niin päätöksenteon helpottamiseksi kuin kansalaisyhteiskunnan vastuullisuuden edistämiseksikin.
Tehdääs itsekin!
1. Työkalut#
# Aja tämä solu ensin.
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
2. Aineisto - Janakkalan kunta#
# Käytetty aineisto on haettu täältä
# https://www.avoindata.fi/data/fi/dataset/janakkalan-kunnan-ostolaskudata-2022
# Tiedosto oli merkistöltään hassu ja eroteltu puolipisteellä, joten korjataan asia parilla parametrilla.
data = pd.read_csv("https://github.com/opendata-education/Tyopajat/raw/refs/heads/main/materiaali/data/Janakkala_ostolaskut_2022.csv", sep = ";", encoding = "iso8859_10", decimal = ",")
data
Tositenumero | Kirjauspäivämäärä | Kirjanpidon tili | Tilin nimi | Kustannuspaikka | Kustannuspaikan nimi | Toimittajanumero | Toimittajan nimi | Y-tunnus | Summa kirjanpidon valuuttana | |
---|---|---|---|---|---|---|---|---|---|---|
0 | OL000030291 | 1.1.2022 | 434101 | Toimisto- ja asiantuntijapalvelut | 1201220006 | Muut myyntivoitot | T1011621 | Janakkalan Asunnot Oy | 0682797-3 | 471.10 |
1 | OL000030306 | 1.1.2022 | 437001 | Vakuutukset | 1204510001 | Kirjastotoimi | T1001973 | KESKINÄINEN VAKUUTUSYHTIÖ FENNIA | 0196826-7 | 1112.56 |
2 | OL000030314 | 1.1.2022 | 437001 | Vakuutukset | 1208770001 | Hallinto | T1001973 | KESKINÄINEN VAKUUTUSYHTIÖ FENNIA | 0196826-7 | 3452.88 |
3 | OL000030508 | 1.1.2022 | 437001 | Vakuutukset | 1205600201 | Kiinteistöjen ylläpito | T1001973 | KESKINÄINEN VAKUUTUSYHTIÖ FENNIA | 0196826-7 | 994.32 |
4 | OL000030517 | 2.1.2022 | 437001 | Vakuutukset | 1201220019 | Yleishallinnon muu toiminta | T1001973 | KESKINÄINEN VAKUUTUSYHTIÖ FENNIA | 0196826-7 | 4060.88 |
... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... |
42585 | OL000061352 | 31.12.2022 | 430001 | Asiakaspalvelujen ostot | 1203230004 | Ikääntyneiden asiakasohjausyksikkö | T1013180 | Arwo kotihoiva Oy | 3265395-4 | 1064.19 |
42586 | OL000061356 | 31.12.2022 | 452001 | Elintarvikkeet | 1205900202 | Palvelukeittiöt | T1011440 | Sinuhe-Leipomo Oy | 3118830-9 | 26.02 |
42587 | OL000061357 | 21.12.2022 | 452001 | Elintarvikkeet | 1205900202 | Palvelukeittiöt | T1002508 | MEIRA NOVA OY | 0697627-4 | 671.27 |
42588 | OL000061373 | 31.12.2022 | 456021 | Sähkö | 1205600301 | Katualueet | T1013219 | Omavoima Oy | 2209312-1 | 182.41 |
42589 | OL000061374 | 31.12.2022 | 456021 | Sähkö | 1205600301 | Katualueet | T1013219 | Omavoima Oy | 2209312-1 | 2.06 |
42590 rows × 10 columns
Huomaamme heti, että vuonna 2022 Janakkalan kunnan julkaistuissa ostolaskuissa on yli 42 000 tapahtumaa, joiden euromäärät heiluvat joulukuisesta parin euron sähkölaskusta useisiin tuhansiin. Jos etsimme, löydämme varmasti isompiakin eriä. Joten etsitään siis!
3. Analyysiä#
# Tarkastellaan ensin paljonko vuoden summa on ollut.
kirjat = data["Summa kirjanpidon valuuttana"].sum()
print(f"Yhteensä summasarakkeessa on {kirjat} euroa.")
Yhteensä summasarakkeessa on 65763061.72 euroa.
No sehän on melkoinen potti. Jos katsomme Janakkalan kunnan verkkosivuille https://www.janakkala.fi/kunta-ja-paatoksenteko/hallinto-ja-talous/talous/, löydämme sieltä varsinaiset tilinpäätökset vertailtaviksi. Mutta ihan peukalotuntumallakin voimme verrata äskeisten miljoonien määrää vuoden 2023 infografiikkaan:
Tuntuuko summa realistiselta?
Vilkaistaanpa sarakkeen tarkempaan sisältöön.
# Etsitään kallein yksittäinen ostos.
kallein = data["Summa kirjanpidon valuuttana"].max()
print(f"Kallein ostos oli {kallein} euroa.")
# Millä rivillä se on?
paikka = data["Summa kirjanpidon valuuttana"].idxmax()
print(f"Sen rivi-indeksi on numero {paikka}.")
# Kuka se oli?
kohde = data.iloc[paikka]["Toimittajan nimi"]
print(f"Sen toimittaja oli siis {kohde}.")
# Milloin se tapahtui?
aika = data.iloc[paikka]["Kirjauspäivämäärä"]
print(f"Tapahtuma on kirjattu päivämäärälle {aika}.")
# Millaisesta osa-alueesta oli kyse?
ala = data.iloc[paikka]["Kustannuspaikan nimi"]
print(f"Osto on rekisteröity kategoriaan '{ala}'.")
Kallein ostos oli 1756583.33 euroa.
Sen rivi-indeksi on numero 7015.
Sen toimittaja oli siis Kanta-Hämeen sairaanhoitopiirin ky.
Tapahtuma on kirjattu päivämäärälle 1.3.2022.
Osto on rekisteröity kategoriaan 'Erikoissairaanhoito'.
Sellaista salapoliisintyötä. Voisimme myös halutessamme jaotella aineistoa jonkin teeman mukaan, laskea niistä osasummia tai keskimääräisiä arvoja. Itseasiassa, paljonkohan keskimääräinen ostos on ollut?
# Otetaas keskiarvoja.
KA = data["Summa kirjanpidon valuuttana"].mean()
print(f"Keskiarvo kaikkien ostosten välillä on ollut noin {KA} euroa.")
Keskiarvo kaikkien ostosten välillä on ollut noin 1544.096307114346 euroa.
Keskimääräinen ostos on siis toista tonnia osan huidellessa miljoonissa. Mutta kuinka kuvaava tavallinen keskiarvo on? Jos jaottelisimme aineiston sen mukaan, miten suuri osuus lopulta jäisi tuon rajan yläpuolelle?
# Katsotaas millainen jakauma ostoksissa on.
pienet = data.query("`Summa kirjanpidon valuuttana` <= @KA")
isot = data.query("`Summa kirjanpidon valuuttana` > @KA")
print(f"Koko aineistossa on {len(data)} ostosta. Niistä {len(pienet)} jää alle keskiarvon {KA} € ja {len(isot)} ylittää sen.")
print(f"Täten keskiarvon suhdeluku ei tosiaankaan ole noin puolet ja puolet, vaan isompia on {len(isot)/len(pienet)}.")
Koko aineistossa on 42590 ostosta. Niistä 37947 jää alle keskiarvon 1544.096307114346 € ja 4643 ylittää sen.
Täten keskiarvon suhdeluku ei tosiaankaan ole noin puolet ja puolet, vaan isompia on 0.1223548633620576.
3. Aineisto - Kokkolan kaupunki#
Mutta hei, vaikka avoindata.fi -portista ei Kokkolaa vielä löydykään, kaupunki itse tarjoaa omilla sivuillaan https://www.kokkola.fi/hallinto-ja-paatoksenteko/talous/ vastaavaa aineistoa tarkasteltavaksi. Käytäntö on alkanut vuodesta 2022.
# Jotkut Pythonin versiot eivät oletusarvoisesti tue pandaksen kautta Excel-tiedostojen lukemista. Alla oleva käsky auttaa virhetilanteessa.
%pip install openpyxl
Collecting openpyxl
Downloading openpyxl-3.1.5-py2.py3-none-any.whl.metadata (2.5 kB)
Collecting et-xmlfile (from openpyxl)
Downloading et_xmlfile-2.0.0-py3-none-any.whl.metadata (2.7 kB)
Downloading openpyxl-3.1.5-py2.py3-none-any.whl (250 kB)
Downloading et_xmlfile-2.0.0-py3-none-any.whl (18 kB)
Installing collected packages: et-xmlfile, openpyxl
Successfully installed et-xmlfile-2.0.0 openpyxl-3.1.5
Note: you may need to restart the kernel to use updated packages.
# Haetaan aineisto suoraan kaupungin sivuilta.
kokkola = pd.read_excel("https://www.kokkola.fi/app/uploads/2024/06/9c81b62f-ostolaskudata-2023-kokkola.xlsx")
kokkola
Kuntanumero | Kunta | Y-tunnus | Tili | Tili(T) | Tapahtumanumero | Reskontranro | Reskontranro(T) | Y-tunnus.1 | Maatunnus | Jakso | Summa | |
---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 272.0 | Kokkola | 0179377-8 | 1808.0 | PALAUTUSKELPOISET | 200487391.0 | 220832.0 | Rauta Juhinna Oy | 3254973-5 | FI | 202301.0 | 8.86 |
1 | 272.0 | Kokkola | 0179377-8 | 4590.0 | RAKENNUSMATERIAALI | 200487391.0 | 220832.0 | Rauta Juhinna Oy | 3254973-5 | FI | 202301.0 | 36.91 |
2 | 272.0 | Kokkola | 0179377-8 | 1808.0 | PALAUTUSKELPOISET | 200488215.0 | 200705.0 | Kokkolan Teollisuuskylä Oy | 0179213-4 | FI | 202301.0 | 21.60 |
3 | 272.0 | Kokkola | 0179377-8 | 4860.0 | MUUT VUOKRAT | 200488215.0 | 200705.0 | Kokkolan Teollisuuskylä Oy | 0179213-4 | FI | 202301.0 | 90.00 |
4 | 272.0 | Kokkola | 0179377-8 | 1808.0 | PALAUTUSKELPOISET | 200488216.0 | 200705.0 | Kokkolan Teollisuuskylä Oy | 0179213-4 | FI | 202301.0 | 245.96 |
... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... |
141104 | 272.0 | Kokkola | 0179377-8 | 1808.0 | PALAUTUSKELPOISET | 200549668.0 | 201607.0 | Rakennusliike Antti Salonen Oy | 1891434-5 | FI | 202312.0 | 1444.96 |
141105 | 272.0 | Kokkola | 0179377-8 | 4320.0 | URAKAT/INVESTOINNIT | 200549668.0 | 201607.0 | Rakennusliike Antti Salonen Oy | 1891434-5 | FI | 202312.0 | 6020.66 |
141106 | 272.0 | Kokkola | 0179377-8 | 1808.0 | PALAUTUSKELPOISET | 200549883.0 | 200028.0 | Hartman Rauta Oy | 0628046-1 | FI | 202312.0 | -344.40 |
141107 | 272.0 | Kokkola | 0179377-8 | 4590.0 | RAKENNUSMATERIAALI | 200549883.0 | 200028.0 | Hartman Rauta Oy | 0628046-1 | FI | 202312.0 | -1435.00 |
141108 | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | 0.00 |
141109 rows × 12 columns
# Vilkaistaas samalla tavalla Kokkolankin aineistoon.
# Etsitään kallein yksittäinen ostos.
kallein = kokkola["Summa"].max()
print(f"Kallein ostos oli {kallein} euroa.")
# Millä rivillä se on?
paikka = kokkola["Summa"].idxmax()
print(f"Sen rivi-indeksi on numero {paikka}.")
# Kuka se oli?
kohde = kokkola.iloc[paikka]["Reskontranro(T)"]
print(f"Sen toimittaja oli siis {kohde}.")
# Milloin se tapahtui?
aika = kokkola.iloc[paikka]["Jakso"]
print(f"Tapahtuma on kirjattu kuukaudelle {aika}.")
# Millaisesta osa-alueesta oli kyse?
ala = kokkola.iloc[paikka]["Tili(T)"]
print(f"Osto on rekisteröity kategoriaan '{ala}'.")
Kallein ostos oli 8910000.0 euroa.
Sen rivi-indeksi on numero 28017.
Sen toimittaja oli siis Kuntarahoitus Oyj.
Tapahtuma on kirjattu kuukaudelle 202304.0.
Osto on rekisteröity kategoriaan 'KUNTARAHOITUS OY:LTÄ'.
Siinähän on jo heti muutama milli kiinni.
Selvitäpä seuraavaksi itse paljonko ostoja tehtiin kokonaisuudessaa?
Paljonko ostoja tehtiin eri kuukausina?
Mikä kuukausi oli aktiivisin?
Miten suuri osuus ostoista liittyy vuokriin tai muihin aineettomiin ostoihin verrattuna esineiden liikutteluun?
# Koodaile tänne!