Last active
June 5, 2017 18:46
-
-
Save x3388638/d2fbe3173b815a86b722f42df6b05506 to your computer and use it in GitHub Desktop.
行政院環境保護署 空氣品質監測資料 全年逐時資料 (http://taqm.epa.gov.tw/taqm/tw/YearlyDataDownload.aspx) 格式轉換
This file contains 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
/** | |
* 行政院環境保護署 空氣品質監測資料 全年逐時資料 (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