{ "cells": [ { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Päivitetty 2025-05-17 / Aki Taanila\n" ] } ], "source": [ "from datetime import datetime\n", "print(f'Päivitetty {datetime.now().date()} / Aki Taanila')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Ajoneuvojen avoin data sisältää kaikkien liikennekäytössä olevien ajoneuvojen rekisteröinti-, hyväksyntä- ja teknisiä tietoja Traficomin ylläpitämästä liikenneasioiden rekisteristä. Datan laajuus on useita miljoonia rivejä, joten sitä ei voi ladata suoraan esimerkiksi Exceliin. Dataa päivitetään säännöllisesti. Data löytyy osoitteesta:\n", "\n", "https://tieto.traficom.fi/fi/tietotraficom/avoin-data?toggle=Ajoneuvojen%20avoin%20data\n", "\n", "Samasta osoitteesta löytyy myös aineistokuvaus, muuttujaluettelo Excel-muodossa ja käytetty merkistökoodaus (ISO8859-1). Data on ladattavissa zip-pakettina.\n", "\n", "Poimin datasta tiedot vuoden 2020 alusta eteenpäin rekisteröidyistä henkilöautoista. Otan mukaan vain osan muuttujista. Tallennan poimitun datan myöhempää käyttöä varten. Tallennettu data on sen kokoinen että sen voi avata tarvittaessa myös Exceliin.\n", "\n", "**Koodin suoritus kestää kauan, koska ison datan lataaminen netistä on hidasta**. Sen jälkeen kun data (Ajoneuvoreksiteri.zip) on ladattu koneelle, niin sen lataamiseen liittyvää koodisolua ei tarvitse enää uudelleen suorittaa." ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "# Ajoneuvorekisteri.zip -tiedoston lataaminen samaan hakemistoon tämän muistion kanssa\n", "# Tämän solun suoritus kestää kauan, koska ladattava data on iso!\n", "\n", "import requests\n", "url = \"https://opendata.traficom.fi/Content/Ajoneuvorekisteri.zip\"\n", "r = requests.get(url)\n", "with open(\"Ajoneuvorekisteri.zip\",'wb') as file:\n", " file.write(r.content)" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [], "source": [ "import pandas as pd" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [], "source": [ "# Mukaan otettavat muuttujat\n", "cols = ['ajoneuvoluokka', 'ensirekisterointipvm', 'vari', 'korityyppi', 'omamassa', \n", " 'ajonKokPituus', 'ajonLeveys', 'ajonKorkeus', 'kayttovoima', 'suurinNettoteho', \n", " 'sahkohybridi', 'sahkohybridinluokka', 'merkkiSelvakielinen','mallimerkinta', \n", " 'vaihteisto', 'kaupallinenNimi', 'kunta', 'matkamittarilukema']\n", "\n", "# Datan avaus (pandas osaa purkaa zip-paketin)\n", "df = pd.read_csv('Ajoneuvorekisteri.zip', sep=';', encoding='ISO8859-1', usecols=cols, low_memory=False)" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\n", "RangeIndex: 5128155 entries, 0 to 5128154\n", "Data columns (total 18 columns):\n", " # Column Dtype \n", "--- ------ ----- \n", " 0 ajoneuvoluokka object \n", " 1 ensirekisterointipvm object \n", " 2 vari object \n", " 3 korityyppi object \n", " 4 omamassa float64\n", " 5 ajonKokPituus float64\n", " 6 ajonLeveys float64\n", " 7 ajonKorkeus float64\n", " 8 kayttovoima object \n", " 9 suurinNettoteho float64\n", " 10 sahkohybridi object \n", " 11 sahkohybridinluokka float64\n", " 12 merkkiSelvakielinen object \n", " 13 mallimerkinta object \n", " 14 vaihteisto object \n", " 15 kaupallinenNimi object \n", " 16 kunta float64\n", " 17 matkamittarilukema float64\n", "dtypes: float64(8), object(10)\n", "memory usage: 704.2+ MB\n" ] } ], "source": [ "# Tietoa muuttujista\n", "df.info()" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [], "source": [ "# Poimitaan datasta vain henkilöautot (ajoneuvoluokat M1 ja M1G)\n", "df = df[df['ajoneuvoluokka'].isin(['M1', 'M1G'])]" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [], "source": [ "# Varmistetaan, että päivämäärät tunnistuvat päivämääriksi\n", "df['ensirekisterointipvm'] = pd.to_datetime(df['ensirekisterointipvm'], format='%d.%m.%Y')" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [], "source": [ "# Rajoitutaan vuoden 2020 alusta lähtien rekisteröityihin\n", "df = df[df['ensirekisterointipvm']>'2020-01-01'].sort_values('ensirekisterointipvm')" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [], "source": [ "# Tallennus csv-muotoon\n", "df.to_csv('autot.csv', index=False)" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
ajoneuvoluokkaensirekisterointipvmvarikorityyppiomamassaajonKokPituusajonLeveysajonKorkeuskayttovoimasuurinNettotehosahkohybridisahkohybridinluokkamerkkiSelvakielinenmallimerkintavaihteistokaupallinenNimikuntamatkamittarilukema
4147548M12020-01-026AF1314.04346.01826.01605.00196.0FalseNaNHondaHR-V Monikäyttöajoneuvo (AF) 5ov 1498cm31HR-V740.048024.0
3848423M12020-01-026AB1322.04512.01844.01515.00192.0FalseNaNFordFocus Viistoperä (AB) 4ov 999cm31Focus790.060224.0
4110795M12020-01-020AC1808.04889.01832.01521.001115.0True1.0Volkswagen, VWPASSAT Farmari (AC) 5ov 1395cm3 A2PASSAT290.0175700.0
4110826M12020-01-020AC2050.04936.01890.01442.001223.0True1.0VolvoV90 T8 Twin Engine Farmari (AC) 5ov 1969cm3 A2V90 T8 Twin Engine853.078201.0
4161482M12020-01-028AC1665.04600.01855.01685.001131.0True2.0ToyotaTOYOTA RAV4 Farmari (AC) 4ov 2487cm33TOYOTA RAV4609.035766.0
.........................................................
5126161M12025-03-310AA2525.04964.01961.01508.004NaNFalseNaNMercedes-BenzAMG EQE 53 4MATIC+ Sedan (AA) 4ovYAMG EQE 53 4MATIC+109.09109.0
5126164M12025-03-310SH2885.05986.02040.02365.002130.0FalseNaNMANTGE Pyörätuolin käyttäjälle tarkoitettu ajoneu...2TGE398.012.0
5122614M12025-03-316AB1978.04488.01884.01654.004NaNFalseNaNSkodaELROQ 60 Viistoperä (AB) 5ov A2ELROQ 60935.0NaN
5103543M12025-03-312AC2132.04745.01890.01680.001141.0True1.0MazdaMAZDA CX-60 Farmari (AC) 4ov 2488cm3 A2MAZDA CX-60169.0NaN
5128154M12025-03-316AC2440.04953.01967.01695.0040.0FalseNaNBMWiX xDrive40 Farmari (AC) 4ov A2iX xDrive4091.033860.0
\n", "

634457 rows × 18 columns

\n", "
" ], "text/plain": [ " ajoneuvoluokka ensirekisterointipvm vari korityyppi omamassa \\\n", "4147548 M1 2020-01-02 6 AF 1314.0 \n", "3848423 M1 2020-01-02 6 AB 1322.0 \n", "4110795 M1 2020-01-02 0 AC 1808.0 \n", "4110826 M1 2020-01-02 0 AC 2050.0 \n", "4161482 M1 2020-01-02 8 AC 1665.0 \n", "... ... ... ... ... ... \n", "5126161 M1 2025-03-31 0 AA 2525.0 \n", "5126164 M1 2025-03-31 0 SH 2885.0 \n", "5122614 M1 2025-03-31 6 AB 1978.0 \n", "5103543 M1 2025-03-31 2 AC 2132.0 \n", "5128154 M1 2025-03-31 6 AC 2440.0 \n", "\n", " ajonKokPituus ajonLeveys ajonKorkeus kayttovoima suurinNettoteho \\\n", "4147548 4346.0 1826.0 1605.0 01 96.0 \n", "3848423 4512.0 1844.0 1515.0 01 92.0 \n", "4110795 4889.0 1832.0 1521.0 01 115.0 \n", "4110826 4936.0 1890.0 1442.0 01 223.0 \n", "4161482 4600.0 1855.0 1685.0 01 131.0 \n", "... ... ... ... ... ... \n", "5126161 4964.0 1961.0 1508.0 04 NaN \n", "5126164 5986.0 2040.0 2365.0 02 130.0 \n", "5122614 4488.0 1884.0 1654.0 04 NaN \n", "5103543 4745.0 1890.0 1680.0 01 141.0 \n", "5128154 4953.0 1967.0 1695.0 04 0.0 \n", "\n", " sahkohybridi sahkohybridinluokka merkkiSelvakielinen \\\n", "4147548 False NaN Honda \n", "3848423 False NaN Ford \n", "4110795 True 1.0 Volkswagen, VW \n", "4110826 True 1.0 Volvo \n", "4161482 True 2.0 Toyota \n", "... ... ... ... \n", "5126161 False NaN Mercedes-Benz \n", "5126164 False NaN MAN \n", "5122614 False NaN Skoda \n", "5103543 True 1.0 Mazda \n", "5128154 False NaN BMW \n", "\n", " mallimerkinta vaihteisto \\\n", "4147548 HR-V Monikäyttöajoneuvo (AF) 5ov 1498cm3 1 \n", "3848423 Focus Viistoperä (AB) 4ov 999cm3 1 \n", "4110795 PASSAT Farmari (AC) 5ov 1395cm3 A 2 \n", "4110826 V90 T8 Twin Engine Farmari (AC) 5ov 1969cm3 A 2 \n", "4161482 TOYOTA RAV4 Farmari (AC) 4ov 2487cm3 3 \n", "... ... ... \n", "5126161 AMG EQE 53 4MATIC+ Sedan (AA) 4ov Y \n", "5126164 TGE Pyörätuolin käyttäjälle tarkoitettu ajoneu... 2 \n", "5122614 ELROQ 60 Viistoperä (AB) 5ov A 2 \n", "5103543 MAZDA CX-60 Farmari (AC) 4ov 2488cm3 A 2 \n", "5128154 iX xDrive40 Farmari (AC) 4ov A 2 \n", "\n", " kaupallinenNimi kunta matkamittarilukema \n", "4147548 HR-V 740.0 48024.0 \n", "3848423 Focus 790.0 60224.0 \n", "4110795 PASSAT 290.0 175700.0 \n", "4110826 V90 T8 Twin Engine 853.0 78201.0 \n", "4161482 TOYOTA RAV4 609.0 35766.0 \n", "... ... ... ... \n", "5126161 AMG EQE 53 4MATIC+ 109.0 9109.0 \n", "5126164 TGE 398.0 12.0 \n", "5122614 ELROQ 60 935.0 NaN \n", "5103543 MAZDA CX-60 169.0 NaN \n", "5128154 iX xDrive40 91.0 33860.0 \n", "\n", "[634457 rows x 18 columns]" ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Näytetään tulosteissa kaikki sarakkeet\n", "pd.set_option.display_columns = None\n", "df" ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [], "source": [ "# Värit selviävät aineistokuvauksesta\n", "varit = ['Musta', 'Ruskea (beige)', 'Punainen', 'Oranssi','Keltainen', 'Vihreä', 'Sininen',\n", " 'Violetti', 'Harmaa', 'Valkoinen', 'Monivär.', 'Hopea', 'Turkoosi']" ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
f
Valkoinen163957
Harmaa138748
Musta129870
Sininen71708
Punainen50975
Hopea31197
Ruskea (beige)19479
Vihreä10470
Oranssi6748
Keltainen5272
Monivär.2159
Violetti898
Turkoosi536
\n", "
" ], "text/plain": [ " f\n", "Valkoinen 163957\n", "Harmaa 138748\n", "Musta 129870\n", "Sininen 71708\n", "Punainen 50975\n", "Hopea 31197\n", "Ruskea (beige) 19479\n", "Vihreä 10470\n", "Oranssi 6748\n", "Keltainen 5272\n", "Monivär. 2159\n", "Violetti 898\n", "Turkoosi 536" ] }, "execution_count": 12, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Kuinka suosittuja ovat eri värit olleet?\n", "df1 = pd.crosstab(df['vari'], 'f')\n", "df1.columns.name = ''\n", "\n", "# Sijoitan värien nimet indeksiin, jossa alunperin on värien koodit\n", "df1.index = varit\n", "\n", "# Värit suosituimmuusjärjestyksessä\n", "df1.sort_values('f', ascending = False)" ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
f
merkkiSelvakielinen
Toyota83543
Volvo69694
Volkswagen, VW58584
Mercedes-Benz57331
Skoda49427
BMW44034
Kia40575
Audi27177
Tesla26325
Ford23492
Nissan18041
Hyundai17562
Opel12520
Peugeot12033
Mitsubishi12028
Renault7940
Citroen6918
Polestar6536
Mazda5364
Seat5326
\n", "
" ], "text/plain": [ " f\n", "merkkiSelvakielinen \n", "Toyota 83543\n", "Volvo 69694\n", "Volkswagen, VW 58584\n", "Mercedes-Benz 57331\n", "Skoda 49427\n", "BMW 44034\n", "Kia 40575\n", "Audi 27177\n", "Tesla 26325\n", "Ford 23492\n", "Nissan 18041\n", "Hyundai 17562\n", "Opel 12520\n", "Peugeot 12033\n", "Mitsubishi 12028\n", "Renault 7940\n", "Citroen 6918\n", "Polestar 6536\n", "Mazda 5364\n", "Seat 5326" ] }, "execution_count": 13, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# 20 suosituinta merkkiä\n", "df2 = pd.crosstab(df['merkkiSelvakielinen'], 'f').nlargest(20, 'f' )\n", "df2.columns.name = ''\n", "df2" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Jotkin automerkit saattavat esiintyä tietokannassa useilla eri nimillä. Esimerkiksi Volkswagen esiintyy ainakin kahdella eri nimellä (Volkswagen ja Volkswagen, VW). Seuraavassa yhdistän molemmat saman nimen alle." ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
f
merkkiSelvakielinen
Toyota83543
Volvo69694
Volkswagen62646
Mercedes-Benz57331
Skoda49427
BMW44034
Kia40575
Audi27177
Tesla26325
Ford23492
Nissan18041
Hyundai17562
Opel12520
Peugeot12033
Mitsubishi12028
Renault7940
Citroen6918
Polestar6536
Mazda5364
Seat5326
\n", "
" ], "text/plain": [ " f\n", "merkkiSelvakielinen \n", "Toyota 83543\n", "Volvo 69694\n", "Volkswagen 62646\n", "Mercedes-Benz 57331\n", "Skoda 49427\n", "BMW 44034\n", "Kia 40575\n", "Audi 27177\n", "Tesla 26325\n", "Ford 23492\n", "Nissan 18041\n", "Hyundai 17562\n", "Opel 12520\n", "Peugeot 12033\n", "Mitsubishi 12028\n", "Renault 7940\n", "Citroen 6918\n", "Polestar 6536\n", "Mazda 5364\n", "Seat 5326" ] }, "execution_count": 14, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df['merkkiSelvakielinen'] = df['merkkiSelvakielinen'].replace({'Volkswagen, VW':'Volkswagen'})\n", "df3 = pd.crosstab(df['merkkiSelvakielinen'], 'f').nlargest(20, 'f' )\n", "df3.columns.name = ''\n", "df3" ] }, { "cell_type": "code", "execution_count": 15, "metadata": {}, "outputs": [ { "data": { "text/html": [ "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
 MustaRuskea (beige)PunainenOranssiKeltainenVihreäSininenViolettiHarmaaValkoinenMonivär.HopeaTurkoosi
merkkiSelvakielinen             
Audi782539111293814347930432167336375488716
BMW1508961411274193985152543083551100210100124
Citroen8322047992443707341144824610313
Ford3842123396111873244446964949548951442
Hyundai2013909206511013272123181376944630786233
Kia5712619482433141417045941677679819133901
Mazda620581729219439011227107312310
Mercedes-Benz2012897023141256456839323514516118311319864
Mitsubishi273966717391314748952404354313412
Nissan24306132453607172161128735674416105913373
Opel17491021798201123486113502395404304702
Peugeot13811101013192284413217573234724840220
Polestar1466148014379502832112311340
Renault62012113267531019132643152121491392
Seat8101494210348637741212155002180
Skoda85186442625605255121399914129681209304288
Tesla5858111001421423497403711986904400
Toyota9927705083393111113479676030013086234683124906
Volkswagen841057546217416584167856741640719168153323182
Volvo2152440513390501266806868121631614564417671
\n" ], "text/plain": [ "" ] }, "execution_count": 15, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Rajoitutaan vai suosituimpiin merkkeihin\n", "df_suositut = df[df['merkkiSelvakielinen'].isin(df3.index)]\n", "\n", "# Värit suosituilla merkeillä\n", "df4 = pd.crosstab(df_suositut['merkkiSelvakielinen'], df_suositut['vari'])\n", "\n", "# Sijoitan värien nimet sarakkeisiin\n", "df4.columns = varit\n", "\n", "# Värjätään kunkin merkin kohdalla suosituin väri\n", "df4.style.highlight_max(color='lightgreen', axis=1)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Lisätietoa\n", "\n", "Data-analytiikka Pythonilla https://tilastoapu.wordpress.com/python/" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3 (ipykernel)", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.13.2" } }, "nbformat": 4, "nbformat_minor": 4 }