Commit 618eb083 authored by Álex Cortiñas's avatar Álex Cortiñas
Browse files

Adding parser to handle post-june data

parent ca1f6df7
......@@ -28,11 +28,12 @@ npm start
## Data
From: https://www.ine.es/covid/covid_movilidad.htm
From: https://www.ine.es/experimental/movilidad/experimental_em.htm
* https://www.ine.es/covid/areas_de_movilidad_y_poblacion_a_1_ene_2019.xlsx
* https://www.ine.es/covid/datos_disponibles.zip
* https://www.ine.es/covid/shapefiles_celdas_marzo2020.zip
* https://www.ine.es/experimental/movilidad/movilidad_cotidiana_junio_diciembre.zip
It should be unzipped in the data folder, keeping the same folder structure:
......@@ -40,6 +41,14 @@ It should be unzipped in the data folder, keeping the same folder structure:
* areas_de_movilidad_y_poblacion_a_1_ene_2019.xlsx
* shapefiles_celdas_marzo2020/
* shapefile files
* movilidad_cotidiana_junio_diciembre
* Agosto 2020
* xlsx files
* Diciembre 2020
* 2 Diciembre 2020
* xlsx files
* ...
* ...
* datos_disponibles/
* DIA_01ABR_2020/
* DIA_01ABR_2020/
......
......@@ -6,6 +6,7 @@ import {
CeldasPobParser,
GenericXLSParser,
FlujosDestinoNOVXLSParser,
FlujosPostJunioXLSParser,
CSVParser,
GenericSHPParser,
} from "./parsers/index.js";
......@@ -23,6 +24,7 @@ import {
const csvParser = new CSVParser();
const genericXLSParser = new GenericXLSParser();
const flujosDestinoNOVXLSParser = new FlujosDestinoNOVXLSParser();
const flujosPostJunioXLSParser = new FlujosPostJunioXLSParser();
const pobxCeldasOrigenSQLWriter = new PobxCeldasOrigenSQLWriter();
const pobxCeldasDestinoSQLWriter = new PobxCeldasDestinoSQLWriter();
const flujosSQLWriter = new FlujosSQLWriter();
......@@ -44,6 +46,13 @@ const filesParser = [
encoding: "ISO-8859-1",
outputPrefix: "09-",
},
{
file: "Tabla 1.3 Movilidad Cotidiana-Flujos Origen-Destino +15 personas",
extension: "xlsx",
parser: flujosPostJunioXLSParser,
writer: flujosSQLWriter,
outputPrefix: "08-",
},
{
file: "PobxCeldasOrigen",
extension: "csv",
......@@ -179,6 +188,11 @@ function _getDate(filePath) {
filePath = filePath.toLowerCase();
if (filePath.indexOf("noviembre 2019") != -1) {
return "2019-11-18";
} else if (filePath.indexOf("movilidad_cotidiana_junio_diciembre") != -1) {
const idxFin = filePath.lastIndexOf(".xlsx");
const mes = filePath.substr(idxFin - 2, 2);
const dia = filePath.substr(idxFin - 4, 2);
return `2020-${mes}-${dia}`;
} else if (filePath.indexOf("dia_") != -1) {
const idxInicio = filePath.indexOf("dia_") + 4;
const idxMes = Math.min(
......
......@@ -3,6 +3,7 @@ import CodPostalCeldasMovilidadParser from "./xls/CodPostalCeldasMovilidadParser
import CeldasPobParser from "./xls/CeldasPobParser.js";
import GenericXLSParser from "./GenericXLSParser.js";
import FlujosDestinoNOVXLSParser from "./xls/FlujosDestinoNOVXLSParser.js";
import FlujosPostJunioXLSParser from "./xls/FlujosPostJunioXLSParser.js";
import CSVParser from "./CSVParser.js";
import GenericSHPParser from "./GenericSHPParser.js";
......@@ -12,6 +13,7 @@ export {
CeldasPobParser,
GenericXLSParser,
FlujosDestinoNOVXLSParser,
FlujosPostJunioXLSParser,
CSVParser,
GenericSHPParser,
};
import XLSParser from "../XLSParser.js";
export default class FlujosDestinoNOVXLSParser extends XLSParser {
constructor() {
super();
}
doParse(workSheets) {
const results = [];
const headers = workSheets[0].data[0]
.map((header) => header.trim())
.map((header) => {
switch (header) {
case "Código área de residencia":
return "CELDA_ORIGEN";
case "Código área de destino":
return "CELDA_DESTINO";
case "Flujo origen-destino (nº de personas)":
return "FLUJO";
case "Nombre área de residencia":
return "NOMBRE_CELDA_ORIGEN";
case "Nombre área de destino":
return "NOMBRE_CELDA_DESTINO";
default:
return header;
}
});
Object.keys(workSheets)
.map((index) => {
return workSheets[index].data;
})
.flat()
.forEach((row, i) => {
row.forEach((p) => {
if (p && p.trim) {
p.trim();
}
});
if (i == 0) {
return;
}
const newRow = {};
headers.forEach((header, idx) => {
newRow[header] = row[idx];
});
results.push(newRow);
});
return results;
}
}
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment