カウントダウンブロック |
カウントダウンイベントはありません
|
|
|
1 |
大気汚染常時監視測定データ処理用 perl スクリプトのプロトタイプ |
森

 |
森 2004-12-16 23:08:59
[返信] [編集]
東京都の大気汚染常時監視測定データ処理用 perl スクリプトのプロトタイプです。サイトはこちら。
連続的に集計や統計処理をするには、どうも書式が気になります。特に風向風速。 そこで、次のようなスクリプトを組んでみました。ご参考まで。#! /usr/bin/perl
##################################
#
# perl 5.6 からは、UTF-8 は普通に使える。
#
# が、このスクリプト自身が EUC なので、各ファイルは nkf -e を通した後、このスクリプトを通過すべき。
#
##################################
%direction=(
' N', 00.0,
' NNE', 22.5,
' NE', 45.0,
' ENE', 67.5,
' E', 90.0,
' ESE', 112.5,
' SE', 135.0,
' SSE', 157.5,
' S', 180.0,
' SSW', 202.5,
' SW', 225.0,
' WSW', 247.5,
' W', 270.0,
' WNW', 292.5,
' NW', 315.0,
' NNW', 337.5,
' C', -1,
);
$selectflag=0;
$winddtflag=0;
$firstflag=1;
while($line = <>){
if( $line =~ /^#/ ){
next;
}elsif( $line =~ /(.*)日,([^,]*),([^,]*),([^,]*),([^,]*),([^,]*),([^,]*),([^,]*),([^,]*),([^,]*),([^,]*),([^,]*),([^,]*),([^,]*),([^,]*),([^,]*),([^,]*),([^,]*),([^,]*),([^,]*),([^,]*),([^,]*),([^,]*),([^,]*),([^,]*),([^,]*),([^,]*),([^,]*),([^,]*),([^,]*)$/){
@data=($2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12, $13, $14, $15, $16, $17, $18, $19, $20, $21, $22, $23, $24, $25);
if( $selectflag == 1 ){
if( $winddflag == 1 ){
print $1;
foreach $name ( @data ){
printf("%6.1f", $direction{$name});
}
}else{
print $1, @data;
}
print "\n";
}
}elsif( $line =~ /[^,]*,測定場所,[^,]*,([^ ,]*)[ ]*,項目,[^,]*,([^, ]*)[ ]*,単位,.*/ ){
$PLACE = $1;
$KIND = $2;
if( $firstflag == 1 ){
print $PLACE,"\n";
$firstflag = 0;
}
if( $KIND =~ "^風向\$" || $KIND =~ "^風速\$" ){
$selectflag = 1;
if( $KIND =~ "^風向\$" ){
$winddflag=1;
}else{
$winddflag=0;
}
}else{
$selectflag = 0;
}
}
}
|
2 |
Re: 大気汚染常時監視測定データ処理用 perl スクリプトのプロトタイプ |
森

 |
森 2004-12-20 0:06:52
[返信] [編集]
ちょっとバージョンアップしました。風向等に限らない汎用的なスクリプトになっています。御覧になればわかりますが、データの配列を変えただけです。 東京都大気汚染常時監視測定データ で得られるデータ用です。
#! /usr/bin/perl
##################################
#
# ファイル名 cutOsenData.pl
#
# Author : Atsusih Mori
# Last Modified On : Sun, 19 Dec 2004 23:55:54 +0900
# Status : Working, but use with caution!
# License: GPLv2
#
##################################
#
# 東京都大気汚染常時監視測定データ(http://www2.kankyo.metro.tokyo.jp/kansi/taiki/download/data_download_top.htm)
# で得られる CSV のデータを、R で処理しやすくするためのスクリプト
#
# perl 5.6 からは、UTF-8 は普通に使える。
# が、このスクリプト自身が EUC なので、各ファイルは nkf -e を通した後、このスクリプトを通過すべき。
#
# 使用例 :
# nkf -e a*.csv | ./cutOsenData.pl > alldata.txt
#
##################################
#
# パラメタ, 初期値
#
%direction=(
' N', 00.0,
' NNE', 22.5,
' NE', 45.0,
' ENE', 67.5,
' E', 90.0,
' ESE', 112.5,
' SE', 135.0,
' SSE', 157.5,
' S', 180.0,
' SSW', 202.5,
' SW', 225.0,
' WSW', 247.5,
' W', 270.0,
' WNW', 292.5,
' NW', 315.0,
' NNW', 337.5,
' C', -1,
);
$winddtflag= 0;
$PLCID = 0;
##################################
#
# パラメタ, 初期値
#
while($line = <>){
#
# 空行
#
if( $line =~ /^#/ ){
next;
#
# データ
#
}elsif( $line =~ /(.*)日,([^,]*),([^,]*),([^,]*),([^,]*),([^,]*),([^,]*),([^,]*),([^,]*),([^,]*),([^,]*),([^,]*),([^,]*),([^,]*),([^,]*),([^,]*),([^,]*),([^,]*),([^,]*),([^,]*),([^,]*),([^,]*),([^,]*),([^,]*),([^,]*),([^,]*),([^,]*),([^,]*),([^,]*),([^,]*)$/){
$hour=0;
$date=$1;
@data=($2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12, $13, $14, $15, $16, $17, $18, $19, $20, $21, $22, $23, $24, $25);
foreach $dataone ( @data ){
$hour ++;
printf("%s %s %4d %4d %2d %2d %2d %2d ", $PLACE, $KIND, $PLCID, $KNDID, $year, $month, $date, $hour);
if( $winddflag == 1 ){
printf("%6.1f\n", $direction{$dataone});
}else{
print $dataone,"\n";
}
}
#
#
# 年月
#
}elsif( $line =~ /[^,]*,大気環境月報 ,平成[ ]*(.*)年[ ]*(.*)月.*/ ){
$year = $1;
$month = $2;
#
#
# 地点・観測項目情報
#
}elsif( $line =~ /[^,]*,測定場所,[ ]*\(([^,]*)\),([^ ,]*)[ ]*,項目,[ ]*\(([^,]*)\),([^, ]*)[ ]*,単位,.*/ ){
$PLCID = $1;
$PLACE = $2;
$KNDID = $3;
$KIND = $4;
if( $KIND =~ "^風向\$" ){
$winddflag=1;
}else{
$winddflag=0;
}
}
}
|
|