Ajoneuvodataa ja sql:ää

classic Classic list List threaded Threaded
1 message Options
Reply | Threaded
Open this post in threaded view
|

Ajoneuvodataa ja sql:ää

Juha Valtonen

Toinen aineisto, open-data, jota esittelin laivaseminaarissa oli Trafin avoin data
ajoneuvorekisteristä.

Se löytyy:
https://www.trafi.fi/tietopalvelut/avoin_data

ja on ladattavissa zippinä.

- Aineistossa on rivejä 5 013 460 kpl
- Aineiston päivämäärä 31.3.2018
- Julkaisuajankohta 25.4.2018
- Tiedostomuoto: ZIP-pakattu CSV
- Tiedoston koko: 829 MT (pakattuna 235 MT)
- Aineisto on lisensoitu Creative Commons Nimeä 4.0 Kansainvälinen -lisenssillä

Testailin sitä lähinnä siinä mielessä, että missä menee Survon kapasiteetin raja -
ja miten Survo-R:n sqlite-pakettia voi hyödyntää apuna.

Zippi pitää sisällään csv-tiedoston, joka on ihan siistin ja survo-kelpoisen näköinen semicolon-eroteltu
tekstitiedosto.

SHOWlla katsoessa kannattaa huomioida pari asiaa - toinen on se, että useimmilla varmaa
rajoituksena on näyttää 2 M riviä - rajan saa muutettua system-komennolla

SYSTEM max_show_lines=5000000

toinen huomioitava asia on se, että SHOWlla kestää jonnin aikaa, jos esimerkiksi
haluaa siirtyä tiedoston loppuun.

File save vie tekstitiedoston muutamassa minuutissa svo-tiedostoksi,

*VARLEN=200
*TIME COUNT START
*FILE SAVE AT52.csv TO NEW KOE  /  DELIMITER=;
*TIME COUNT END   204.335
#
*204(s:hms)=00:03:24

Sitten kokeilin tuplata tiedoston - ja tuplauksen jälkeen svon raja tuli vastaan -
näkyi siten, että
FILE SHOW -kaatoi Survon.

Jostain Reijon vanhasta viestistä kopioin, että ainakin seuraavat paketit
tarvitaan:

install.packages("sqldf")
install.packages("RSQLite")

Erilaisten hapuilujen jälkeen sain luotua tietokannan, taulun ja
vietyä dataa sinne:

*
R library(sqldf)
*
*
Rdb <- dbConnect(SQLite(), dbname="Testi.db")
*
*
*
*show k.csv
* ensin pienempi testiaineisto:
Rread.csv2.sql("k.csv", sql = "create table at1   as select * from file",  dbname = "Testi.db")
*
RdbListTables(db)
* sitten lisää...
Rread.csv2.sql("k2.csv", sql = "insert into at1   select * from file",  dbname = "Testi.db", append=TRUE)
*
*
Se, mikä minua erityisesti viehättää tässä Survon SQL.ssä, että kyseskriptejä voi kirjoittaa
survolla, ja tuottaa otuputin suoraan survotiedostoksi, eli esim

*FILE SQL KYSELY1 TO NEW KYS1   /   DATABASE=Testi.db
*
*QUERY KYSELY1
* SELECT COUNT(*) AS LKM FROM at1;
*END
*
*FILE SHOW KYS1
*

Seuraavaksi kokeilin, miten onnistuu kysely, kun ko. Trafi-aineisto on viety tuplana tietokantaa


*/activate a
aTIME COUNT START
aFILE DEL T10
aFILE SQL TAJO  TO NEW T10  / DATABASE=Testi.db
aTIME COUNT END   853.763
#
*
*853(s:hms)=00:14:13   (ei mennyt näin kauaa, kävin juomassa kupin kahvia välillä!)
*
*FILE SHOW T10
*
*
*QUERY TAJO
*SELECT ajoneuvoluokka,ajoneuvoryhma,SUBSTR(ensirekisterointipvm,1,4),
*merkkiSelvakielinen,mallimerkinta,count(mallimerkinta)
*FROM TEST
* GROUP BY ajoneuvoluokka,ajoneuvoryhma,SUBSTR(ensirekisterointipvm,1,4),
*merkkiSelvakielinen,mallimerkinta
* ORDER BY ajoneuvoluokka,ajoneuvoryhma,merkkiSelvakielinen;
*END
*
*
Pitkät muuttujanimet aiheuttivat pienen herjan survo-tiedoston syntyessä
kyselyn tuloksena, minkä vuoksi seuraava update on tarpeen.


*FILE update T10
* Copied from R data frame resu
*FIELDS: (active)
*   1 SA_   3 aluokka
*   2 NA_   2 ajoneuvoryhma
*   3 SA_   4 VV
*   4 SA_  43 merkkiSelvakielinen
*   5 SA_ 105 mallimerkinta
*   6 NA_   2 count
*END


*
*MTAB T10 CUR+2  /  VARIABLES=count  OPTIONS=SUMS
*
*Sums
*
*         count
*
* S    10026920
*
*
*
Tässähän nyt ei vielä ole hyödynnetty mitään esimerkiksi SQL:n relaatiotaulujen käyttöä,
vaan oli lähinnä koe / opettelu, miten Rsqliten ja Survon yhteispeli sujuu.

Tästähän on alunperin Reijo viestinyt
Feb 12, 2013; 11:21am Musteen uusi FILE SQL

ja jonkinlaista keskustelua siinä ketjussa käyty (Reijo ja Petri) vuosina 2014 ja 2015.

Olisi varmaan hyvä, jos toimivia esimerkkejä saataisiin malliksi palstalle lisääkin...

**