seed houses
This commit is contained in:
@@ -1,104 +1,71 @@
|
||||
module.exports = function(done) {
|
||||
import extend from "extend";
|
||||
import moment from "moment";
|
||||
import csv from "fast-csv";
|
||||
import fs from 'fs';
|
||||
import MathUtils from "./../utils/math"
|
||||
import DB from './../../config/database';
|
||||
|
||||
var csv = require("fast-csv"),
|
||||
Database = require("./config/database"),
|
||||
Country = require("./models/country"),
|
||||
Datum = require("./models/datum"),
|
||||
countries = [],
|
||||
data = new Map();
|
||||
export class PowerDataSeed {
|
||||
|
||||
function seedEmissions(fn){
|
||||
var i = -1;
|
||||
csv
|
||||
.fromPath(__dirname + "/data/CAIT/emissions.csv")
|
||||
.on("data", (row)=>{
|
||||
i += 1;
|
||||
if (i == 0) return true;
|
||||
var name = row[0],
|
||||
year = parseInt(row[1]),
|
||||
key = name + year,
|
||||
energy = parseFloat(row[11]) || null,
|
||||
industrial = parseFloat(row[12]) || null,
|
||||
agriculture = parseFloat(row[13]) || null,
|
||||
waste = parseFloat(row[14]) || null,
|
||||
lucf = parseFloat(row[15]) || null,
|
||||
total_emissions = Math.max((energy + industrial + agriculture + waste + lucf), parseFloat(row[3])) || null; // MtCO2eq
|
||||
static saveCsv(opts, done){
|
||||
opts = extend({
|
||||
path: __dirname + "/../../data/example/power_data.csv"
|
||||
}, opts || {});
|
||||
var stream = fs.createReadStream(opts.path),
|
||||
csvStream = csv.fromStream(stream, {headers: ['house_id', 'time', 'power']}),
|
||||
rows = [];
|
||||
|
||||
if (countries.indexOf(name) < 0) countries.push(name);
|
||||
data.set(key, data.get(key) || {name: name, year: year});
|
||||
datum = data.get(key);
|
||||
datum.energy_emissions = energy; // MtCO2eq
|
||||
datum.industrial_emissions = industrial; // MtCO2eq
|
||||
datum.agriculture_emissions = agriculture; // MtCO2eq
|
||||
datum.waste_emissions = waste; // MtCO2eq
|
||||
datum.lucf_emissions = lucf; // MtCO2eq
|
||||
datum.total_emissions = total_emissions; // MtCO2eq
|
||||
})
|
||||
.on("end", fn);
|
||||
}
|
||||
function seedSocioEco(fn){
|
||||
var i = -1;
|
||||
csv
|
||||
.fromPath(__dirname + "/data/CAIT/socioeconomic.csv")
|
||||
.on("data", (row)=>{
|
||||
i += 1;
|
||||
if (i == 0) return true;
|
||||
var name = row[0],
|
||||
year = parseInt(row[1]),
|
||||
key = (name + year),
|
||||
population = parseInt(row[2]) || null,
|
||||
gdp = parseFloat(row[4]) || null, // Million 2005 USD
|
||||
energy = parseFloat(row[5]) || null; // ktoe
|
||||
|
||||
if (countries.indexOf(name) < 0) countries.push(name);
|
||||
data.set(key, data.get(key) || {name: name, year: year});
|
||||
datum = data.get(key);
|
||||
datum.population = population;
|
||||
datum.energy = energy;
|
||||
datum.gdp = gdp;
|
||||
})
|
||||
.on("end", fn);
|
||||
}
|
||||
|
||||
Database.sync().then(()=>{
|
||||
seedEmissions(()=>{
|
||||
seedSocioEco(()=>{
|
||||
|
||||
Country.sql.bulkCreate(countries.map((name)=>{ return {name: name}; }), {validate: true}).catch((errors)=>{
|
||||
console.error(`=== Error ===\n${JSON.stringify(errors)}\n`);
|
||||
}).then(()=>{
|
||||
return Country.sql.findAll();
|
||||
}).then((_countries)=>{
|
||||
var country_name_to_id = new Map();
|
||||
for (var country of _countries){
|
||||
country_name_to_id.set(country.name, country.id);
|
||||
}
|
||||
for (var datum of data.values()){
|
||||
datum.country_id = country_name_to_id.get(datum.name);
|
||||
delete datum["name"];
|
||||
}
|
||||
|
||||
var bulk_data = Array.from(data.values());
|
||||
Datum.sql.bulkCreate(bulk_data, {validate: true}).catch((errors)=>{
|
||||
console.error(`=== Error ===\n${JSON.stringify(errors)}\n`);
|
||||
}).error((err)=>{
|
||||
console.error(`=== Error ===\n${err}`);
|
||||
}).then(()=>{
|
||||
return Datum.sql.count();
|
||||
}).then((count)=>{
|
||||
console.log(`Count: ${count} ${bulk_data.length}`)
|
||||
if (count === bulk_data.length){
|
||||
done();
|
||||
} else {
|
||||
console.log("Error!");
|
||||
done();
|
||||
}
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
});
|
||||
csvStream.on("data", function(data){
|
||||
rows.push(rows);
|
||||
});
|
||||
});
|
||||
csvStream.on("end", function(){
|
||||
DB.PowerDatum.bulkCreate(rows, {validate: true}).then(done);
|
||||
});
|
||||
}
|
||||
|
||||
static generateCsv(opts, done){
|
||||
opts = extend({
|
||||
start_date: moment.subtract(1, "months").unix(),
|
||||
end_date: moment().unix(),
|
||||
interval: 15 * 60, // every 15 minutes (in s)
|
||||
average: 1400, // Wh
|
||||
path: __dirname + "/../../data/example/power_data.csv"
|
||||
}, opts || {});
|
||||
|
||||
var row_date = opts.start_date,
|
||||
csvStream = csv.format({headers: true}),
|
||||
writableStream = fs.createWriteStream(opts.path);
|
||||
|
||||
csvStream.pipe(writableStream);
|
||||
writableStream.on("finish", done);
|
||||
|
||||
while (row_date <= end_date){
|
||||
csvStream.write(house_ids.map((house_id)=>{
|
||||
return [house_id, row_date, MathUtils.normal(opts.average)]
|
||||
}));
|
||||
row_date += opts.interval;
|
||||
}
|
||||
csvStream.end();
|
||||
}
|
||||
}
|
||||
|
||||
export class HouseSeed {
|
||||
static saveCsv(opts, done){
|
||||
opts = extend({
|
||||
path: __dirname + "/../../data/example/houses.csv"
|
||||
}, opts || {});
|
||||
var stream = fs.createReadStream(opts.path),
|
||||
csvStream = csv.fromStream(stream, {headers: ['id', 'name']}),
|
||||
rows = [];
|
||||
|
||||
csvStream.on("data", function(data){
|
||||
console.log(JSON.stringify(data))
|
||||
rows.push(data);
|
||||
});
|
||||
csvStream.on("end", function(){
|
||||
console.log(rows);
|
||||
DB.House.bulkCreate(rows, {validate: true}).then(done);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user