Skip to content

Instantly share code, notes, and snippets.

@x3388638
Last active June 5, 2017 18:46
Show Gist options
  • Save x3388638/d2fbe3173b815a86b722f42df6b05506 to your computer and use it in GitHub Desktop.
Save x3388638/d2fbe3173b815a86b722f42df6b05506 to your computer and use it in GitHub Desktop.
行政院環境保護署 空氣品質監測資料 全年逐時資料 (http://taqm.epa.gov.tw/taqm/tw/YearlyDataDownload.aspx) 格式轉換
/**
* 行政院環境保護署 空氣品質監測資料 全年逐時資料 (http://taqm.epa.gov.tw/taqm/tw/YearlyDataDownload.aspx) 格式轉換
* keywords: 空污,空氣,品質,空氣品質,監測,逐年,逐時,資料,行政院,環保署,環境保護署
*
* 將原本以時間(小時)為欄,測項為列之資料轉換成
* 以測項為欄,時間(小時)為列
*
* Usage: $ node AirDataReformat.js < /PATH/TO/oriAirData.xml
*/
var readline = require('readline');
var fs = require('fs');
var rl = readline.createInterface({
input: process.stdin,
output: process.stdout,
terminal: false
});
var lineNum = 0;
/**
* resultObj = {
* '2016/01/01': {
* '00': {
* AMB_TEMP: 16
* }
* }
* }
*/
var resultObj = {};
var resultCSV = '"date","station","hour",';
var area = '';
/**
* head = {
* AMB_TEMP: 1,
* CO: 1
* }
*/
var head = {};
rl.on('line', function(line){
lineNum ++;
if (lineNum != 1) {
storeData(line);
}
});
rl.on('close', function(){
reFormat();
});
function storeData(line) {
var lineArr = line.split(',');
var [date, station, item] = lineArr;
area = station;
head[item] = 1;
for (let i = 3; i < lineArr.length; i++) {
var value = `"${lineArr[i]}"`;
var hour = `"${(i - 3)}"`;
resultObj[date] = resultObj[date] || {};
resultObj[date][hour] = resultObj[date][hour] || {};
resultObj[date][hour][item] = value;
}
}
function reFormat() {
for (let item in head) {
resultCSV += `${item},`;
}
resultCSV.slice(0, -1);
resultCSV += '\n';
for (let date in resultObj) {
for (let hour in resultObj[date]) {
resultCSV += `${date},${area},${hour},`;
for (let item in head) {
resultCSV += `${resultObj[date][hour][item] || ''},`;
}
resultCSV = resultCSV.slice(0, -1);
resultCSV += '\n';
}
}
fs.writeFile("./reFormatedAirData.csv", resultCSV, function(err) {
if(err) {
return console.log(err);
} else {
console.log('Done!');
}
});
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment