Skip to content

Commit 1483d05

Browse files
committed
Päivitetty ajoneuvodatan versiolle 5.30
1 parent c458994 commit 1483d05

File tree

6 files changed

+46
-30
lines changed

6 files changed

+46
-30
lines changed

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,3 @@
11
venv/
22
*.csv
3+
*.zip

README.md

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,13 @@ Ohjeet ovat enimmäkseen Ubuntu Linuxille. Useimmat ohjelmistot asennetaan
1515

1616
Ajoneuvotiedot ovat [Traficomin avointa dataa](https://tieto.traficom.fi/fi/tietotraficom/avoin-data).
1717

18+
Datan voi ladata joko selaimella tai suoraan komentoriviltä curl-ohjelmalla,
19+
tallentaen tiedostoon -o-optiolla:
20+
21+
curl https://opendata.traficom.fi/Content/Ajoneuvorekisteri.zip -o Ajoneuvorekisteri.zip
22+
23+
Verkko-osoite löytyy linkistä Traficomin verkkosivulta.
24+
1825
## Datan siivous
1926

2027
Traficomin ajoneuvodata on CSV-muodossa ja pakattu ZIP-tiedostoon. Pura ZIP-paketti sopivaan
@@ -23,7 +30,7 @@ Sitä voi tarkastella Linuxissa esimerkiksi LibreOffice-ohjelmistolla.
2330

2431
Kopioidaan alkuperäinen tiedosto ensin toiselle nimelle, jotta komennoista ei tule niin hankalia (alkuperäinen tiedosto on edelleen saatavissa Traficomin sivuilta ladatussa ZIP-paketissa):
2532

26-
$ cp Ajoneuvojen_avoin_data_5_21.csv ajoneuvot-original.csv
33+
$ cp Ajoneuvojen_avoin_data_5_30.csv ajoneuvot-original.csv
2734

2835
Käyttämällä file-komentoa voidaan nähdä, että ajoneuvodata on Windows-rivimuodossa
2936
(eli rivinvaihto on kaksi merkkiä, CR ja LF) ja se käyttää ISO 8859-1 -merkistökoodausta:
@@ -44,6 +51,8 @@ Ensimmäisessä vaiheessa muunnetaan rivinvaihdot Unix-tyylisiksi
4451
dos2unix: Converted 5360982 out of 5360982 line breaks.
4552
dos2unix: converting file ajoneuvot-original.csv to file ajoneuvot-unix.csv in Unix format...
4653

54+
HUOM. Datan versiossa 5.30 (tai aikaisemminkin) näyttäisi siltä, että rivinvaihdot ovat jo Unix-tyylisiä, joten edellinen vaihe on tarpeeton.
55+
4756
Toisessa vaiheessa muunnetaan ISO 8859-1 -merkistökoodaus UTF-8:ksi käyttäen `iconv`-komentoa:
4857

4958
$ iconv -f iso-8859-1 -t utf-8 ajoneuvot-unix.csv >ajoneuvot-unix-utf8.csv
@@ -120,12 +129,16 @@ komentojonolla `esipesu.sh`:
120129

121130
bash esipesu.sh
122131

123-
Keräile rekisteröintitiedot vuosilta 2016-2021 Python-ohjelmalla
132+
Keräile rekisteröintitiedot vuosilta 2016-2025 Python-ohjelmalla
124133
`ev_counts.py`. Varmista, että esipesun tuottama tiedosto on
125134
samassa hakemistossa, ja aja sitten ohjelma:
126135

127136
python3 ev_counts.py
128137

138+
HUOM.! Datan versiossa 5.30 (mahdollisesti jo aikaisemmin) päiväykset ovat
139+
muotoa `PP.KK.VVVV`, joten ohjelma on päivitetty sen mukaisesti. Jos käytät
140+
jotain aikaisempaa datajoukkoa, ota tämä huomioon.
141+
129142
Ohjelma pysyy käynnissä kunnes pylväsdiagrammin sisältävä
130143
ikkuna suljetaan.
131144

ev_counts.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,14 +10,15 @@
1010
rows.append(row)
1111
csv_file.close()
1212

13-
years = range(2016, 2024)
13+
years = range(2016, 2026)
1414

1515
counts = {} # make empty dictionary for yearly counts
1616

1717
for row in rows:
1818
if row[1] == '':
1919
continue
20-
year = int(row[1][:4])
20+
# registration date is DD.MM.YYYY
21+
year = int(row[1][6:])
2122
if year not in years:
2223
continue
2324
if year not in counts:

ev_counts_monthly.py

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,17 +14,18 @@
1414

1515
print(len(all_rows))
1616

17-
years = range(2016, 2024)
17+
years = range(2016, 2026)
1818
counts = {}
1919
for row in all_rows:
2020
if row[1] == '': # ohita tyhjä rek. pvm
2121
continue
22-
year = int(row[1][:4]) # irrota rek. vuosi
22+
# registration date is DD.MM.YYYY
23+
year = int(row[1][6:]) # irrota rek. vuosi
2324
if year < years.start: # ohita liian vanha
2425
continue
2526
if year not in counts: # tee uusi lista vuodelle
2627
counts[year] = [0] * 12
27-
month = int(row[1][5:7]) - 1 # irrota rek. kuukausi
28+
month = int(row[1][3:5]) - 1 # irrota rek. kuukausi
2829
counts[year][month] += 1
2930

3031
print(f'Sähköautojen ensirekisteröinnit {years.start} - {years.stop - 1}')

ev_counts_regression.py

Lines changed: 22 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -14,20 +14,20 @@
1414

1515
print(len(all_rows))
1616

17-
years = range(2016, 2024) # nyt on 2023 mukana
17+
years = range(2016, 2027) # nyt on 2026 mukana
1818
counts = {}
1919
for row in all_rows:
2020
if row[1] == '':
2121
continue
22-
year = int(row[1][:4])
22+
year = int(row[1][6:])
2323
if year < years.start:
2424
continue
2525
if year not in counts:
2626
counts[year] = [0] * 12
27-
month = int(row[1][5:7]) - 1
27+
month = int(row[1][3:5]) - 1
2828
counts[year][month] += 1
2929

30-
# Lisää tyhjä lista myös vuodelle 2023:
30+
# Lisää tyhjä lista myös vuodelle 2026:
3131
counts[years.stop - 1] = [0] * 12
3232

3333
print(f'Sähköautojen ensirekisteröinnit {years.start} - {years.stop - 1}')
@@ -52,24 +52,24 @@
5252
for year in years:
5353
# Data puuttuu viimeiseltä vuodelta.
5454
# Se täydennetään ennusteen tuottamalla datalla.
55-
if year == 2023:
55+
if year == 2026:
5656
leftover_count += 12
5757
continue
5858
for month in range(12):
59-
# Data puuttuu myös v. 2022 lopulta
60-
if year == 2022 and month >= 6:
59+
# Data puuttuu myös v. 2025 lopulta
60+
if year == 2025 and month >= 9:
6161
leftover_count += 1
6262
continue
6363
x_arr.append(x_val)
6464
x_val += 1
6565
y_arr.append(counts[year][month])
6666

6767
# Nyt x_arr sisältää arvot 0...77, missä 0 = tammikuu 2016,
68-
# 1 = helmikuu 2016 jne., ja 77 = kesäkuu 2022.
69-
# Yhteensä siis 6 * 12 + 6 = 78 kuukautta.
68+
# 1 = helmikuu 2016 jne., ja 116 = syyskuu 2022.
69+
# Yhteensä siis 9 * 12 + 9 = 117 kuukautta.
7070

71-
# y_arr sisältää rekisteröintimäärät 1/2016 ... 6/2022.
72-
#print(len(y_arr))
71+
# y_arr sisältää rekisteröintimäärät 1/2016 ... 9/2025.
72+
print(f'Kuukausia: {len(y_arr)}')
7373
#print(y_arr)
7474

7575
# NumPy-taulukot ovat hieman erilaisia kuin Pythonin listat,
@@ -117,10 +117,10 @@
117117
year += 1
118118

119119
total_count = 0
120-
count_2022 = 0
121-
count_2023 = 0
122-
year = 2022
123-
month = 6
120+
count_2025 = 0
121+
count_2026 = 0
122+
year = 2025
123+
month = 9
124124
#print(future_x)
125125
for fx in future_x:
126126
count = int(y_new[fx - len(x_arr)])
@@ -129,17 +129,17 @@
129129
labels.append(label)
130130
values.append(count) # lisätään ennustettu arvo
131131
print(f'{label}: {count} *')
132-
if year == 2022:
133-
count_2022 += count
134-
if year == 2023:
135-
count_2023 += count
132+
if year == 2025:
133+
count_2025 += count
134+
if year == 2026:
135+
count_2026 += count
136136
month += 1
137137
if month == 12:
138138
month = 0
139139
year += 1
140-
print(f'Ennuste ajalle 2022-07 - 2023-12: {total_count}')
141-
print(f'Ennuste loppuvuodelle 2022: {count_2022}')
142-
print(f'Ennuste vuodelle 2023: {count_2023}')
140+
print(f'Ennuste ajalle 2025-10 - 2025-12: {total_count}')
141+
print(f'Ennuste loppuvuodelle 2025: {count_2025}')
142+
print(f'Ennuste vuodelle 2026: {count_2026}')
143143

144144
import matplotlib.pyplot as plt
145145
print(labels)

siivous.sh

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
echo "*** Kopioidaan alkuperäinen tiedosto käsiteltäväksi tiedostoksi"
2-
cp -v Ajoneuvojen_avoin_data_5_21.csv ajoneuvot-original.csv
2+
cp -v Ajoneuvojen_avoin_data_5_30.csv ajoneuvot-original.csv
33

44
file ajoneuvot-original.csv
55
file -i ajoneuvot-original.csv

0 commit comments

Comments
 (0)