Last active
August 7, 2019 14:42
-
-
Save jagedn/0d1c3b5c0bd81aea2bb5e8b5e07f695d to your computer and use it in GitHub Desktop.
Vuelca a una Hoja Google los datos históricos de la M30 (vehiculos, velocidad, recorrido)
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
function onOpen(e) { | |
var ui = SpreadsheetApp.getUi(); | |
var menu = ui.createAddonMenu() | |
menu.addItem('Historico M30', 'dumpM30'); | |
menu.addItem('Accidentes M30', 'accidentesM30'); | |
menu.addToUi(); | |
} | |
function populateHeader(sheet){ | |
sheet.appendRow([ "Fecha", "Vehiculos","VelocidadMedia","DistanciaMedia","TiempoMedio" ]); | |
} | |
function dumpM30(){ | |
var ss = SpreadsheetApp.getActiveSpreadsheet(); | |
var sheet = ss.getActiveSheet(); | |
sheet.clearContents(); | |
populateHeader(sheet); | |
var url = 'http://www.mc30.es/images/xml/historicousuarios.xml'; | |
var xml = UrlFetchApp.fetch(url).getContentText(); | |
var document = XmlService.parse(xml); | |
var root = document.getRootElement(); | |
var entries = document.getRootElement().getChildren('Historico'); | |
var entriesArray = Array.prototype.slice.call(entries, 0); | |
var pattern = /(\d{2})\/(\d{2})\/(\d{4})/; | |
entriesArray.sort(function(a,b) { | |
var aCat = new Date( a.getChild("Fecha").getText().replace(pattern,'$3-$2-$1')); | |
var bCat = new Date( b.getChild("Fecha").getText().replace(pattern,'$3-$2-$1')); | |
if (aCat > bCat) return 1; | |
if (aCat < bCat) return -1; | |
return 0; | |
}); | |
for (var i = 0; i < entries.length; i++) { | |
//if( i%5 != 0 ) continue; // filtrar solo algunos datos, que son muchos | |
var item = entriesArray[i]; | |
var fecha = entriesArray[i].getChild('Fecha').getText(); | |
var usuariosCalle30 = entriesArray[i].getChild('UsuariosCalle30').getText().split(' ')[0]; | |
var velocidadMedia = entriesArray[i].getChild('velocidadMedia').getText().replace('.',',').split(' ')[0]; | |
var distanciaMediaRecorrida = entriesArray[i].getChild('distanciaMediaRecorrida').getText().split(' ')[0]; | |
var tiempoMediodeRecorrido = entriesArray[i].getChild('tiempoMediodeRecorrido').getText().replace(/ /g,'').replace('.',',').replace('min','').replace('seg.',''); | |
sheet.appendRow([ | |
fecha,usuariosCalle30,velocidadMedia,distanciaMediaRecorrida,tiempoMediodeRecorrido | |
]); | |
} | |
} | |
function accidentesM30(){ | |
var ss = SpreadsheetApp.getActiveSpreadsheet(); | |
var sheet = ss.getActiveSheet(); | |
sheet.clearContents(); | |
populateAccidentesHeader(sheet) | |
var urls = [ | |
'https://datos.madrid.es/egob/catalogo/300201-2-calle30-accidentes-historico.csv', //2016 | |
'https://datos.madrid.es/egob/catalogo/300201-0-calle30-accidentes-historico.csv', //2017 | |
'https://datos.madrid.es/egob/catalogo/300201-4-calle30-accidentes-historico.csv' //2018 | |
] | |
for(var url=0; url < urls.length; url++){ | |
var csv = UrlFetchApp.fetch(urls[url]).getContentText(); | |
var csvData = Utilities.parseCsv(csv,";"); | |
for( var i=1; i<csvData.length; i++){ | |
csvData[i][1] = csvData[i][1].replace('.',':') //wtf | |
sheet.appendRow([ | |
Utilities.formatString('=WEEKDAY("%s/%s/%s")', csvData[i][0].substr(6,4), csvData[i][0].substr(3,2), csvData[i][0].substr(0,2)), | |
Utilities.formatString('=ROUND( ((%s*60)+%s)/60 )', csvData[i][1].split(':')[0], csvData[i][1].split(':')[1]), | |
csvData[i][6] | |
]); | |
} | |
} | |
} | |
function populateAccidentesHeader(sheet){ | |
sheet.appendRow(["Dia Semana", "Hora", "Lugar" ]); | |
} |
Más info sobre el dataset, en el portal de datos abiertos de Madrid
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Crea una hoja de Google Sheet y en Herramientas, Editor de secuencias pega este código y salva el proyecto
Cuando refresques la Hoja deberías tener una opción nueva en el menú de Complementos llamada "HistoricoM30". Cuando la selecciones el script borrara la hoja actual y empezará a volcar los datos directamente desde el portal de datos de Madrid
Desde 2013 a 2019 son unos 2400 registros así que tardará un rato, unos 5 minutos (?)
A partir de estos datos puedes hacer el tratamiento de datos que se te antoje como gráficas, comparativas, etc