情報基礎A 「Cプログラミング」総合演習
このページには、ARモデルという枠組みを使って、電力使用量の予測を行うCプログラムの開発を、演習課題としてまとめました。 「腕試し」として、課題1から順に取り組んでみてください。
準備
課題に取り組む前に、以下のページを読み、内容を理解しておくこと。
課題1
MWH=メガワット時
2010年の電力使用量のデータファイル(juyo_2010_tohoku.csv)を読み込み、 年間を通して、時間あたりの電力使用のピーク値(MWHに換算)と、それが発生した日時を出力するプログラムを作成せよ。
要件
- プログラムファイル名は
tsa-kadai1.c
に統一 - プログラムの出力フォーマットは、各自の工夫に任せるが、目安として、以下を示しておく。
$ a.out reading: juyo_2010_tohoku.csv 8760 points XXXXX MWH 2010/X/XX XX:00--XX:00
課題2
2011年の電力使用量のデータファイル(juyo_2011_tohoku.csv)を読み込み、 年間を通して、一時間あたりの電力使用量の上昇変化(1時間前から「現在」までのプラスの変化)が最も大きかった日時と、 その変動量(MWHに換算)を出力するプログラムを作成せよ。
要件
- プログラムファイル名は
tsa-kadai2.c
に統一
課題3
2010年の電力使用量のデータファイル(juyo_2010_tohoku.csv)を読み込み、 年間を通して、1日あたり(午前0時〜24時まで)の電力使用量が最大であった日付とその日の電力量の総計(MWH)、 および、使用電力量が最小であった日付とその日の電力量の総計(MWH)を、それぞれ出力するプログラムを作成せよ。
要件
- プログラムファイル名は
tsa-kadai3.c
に統一
ヒント
言うまでもないかもしれないが、「一日あたりの電力量」とは、0時から1時まで、1時から2時まで、・・・23時から24時まで、の電力量の総和によって計算。
課題4
2010年の電力使用量のデータファイル(juyo_2010_tohoku.csv)を読み込み、 曜日(日曜〜土曜)毎に、電力量の平均値と標準偏差を計算し、一覧を出力するプログラムを作成せよ。
要件
- プログラムファイル名は
tsa-kadai4.c
に統一
ヒント
「曜日毎の計算」をもう少し詳しく説明すると・・・・
その年の$k$番目の日曜日の(1日の)総電力量を$S_k \; (k=1,2,\cdots,N_{Sun})$とすると、データの集まり$\{S_k\}$の平均と標準偏差を計算して結果を出力する。
月曜、火曜・・・についても、同様の処理を繰り返す。
という意味である。
1週間は7日、1日は24時間。よって、元旦が何曜日かさえ分かれば、「元旦零時からXX時間後は何曜日」という換算が可能。
課題5
2010年のデータファイル(juyo_2010_tohoku.csv)を元に、ARモデルの係数($a(i),c$)を求め、 それらの係数を用いて、2012年の「1時間先の予測」を行うプログラムを作成せよ。
具体的には、2012年7月1日深夜0時から2012年7月1日23時までの各時刻$t$において、 それ以前$(t,t-1,\cdots,t-p+1)$の実測データを用いて1時間先$(t+1)$の予測を行い、 「日時 予測値 実際の値」の一覧が出力されるようにせよ。 ARモデルの次数$p$は各自で決定せよ。
要件
- プログラムファイル名は
tsa-kadai5.c
に統一
ヒント
ARモデルのパラメータの決定には、支援プログラムのarcoef()
関数を用いること。
$p$の値をあまり大きくするとうまく予測できない場合がある。「数日分」程度の時間数を目安に調整すること。
課題6
2010年のデータファイル(juyo_2010_tohoku.csv)を元に、ARモデルの係数($a(i),c$)を求め、 それらの係数を2012年のデータに適用することによって、 電力値のデータが入手可能な最後の日からその1週間先までの時間毎の電力使用量の推移を予測し、結果を出力するプログラムを作成せよ。
要件
- プログラムファイル名は
tsa-kadai6.c
に統一
ヒント
電力会社が提供するデータはときどき更新されるから、いつの時点でのデータをダウンロードしたかによって、「データが入手可能な最後の日」は異なる。
けれども、支援プログラムのread_csv()
関数を使うと、読み込んだデータの数(=元旦からの時間数)を知ることができるから、
「それからさらに1週間先」までを予測するよう、プログラムできるはずだ。