情報基礎A 「Cプログラミング」総合演習

このページには、ARモデルという枠組みを使って、電力使用量の予測を行うCプログラムの開発を、演習課題としてまとめました。 「腕試し」として、課題1から順に取り組んでみてください。

準備

課題に取り組む前に、以下のページを読み、内容を理解しておくこと。

  1. 時系列データの解析(基礎編)
  2. プログラミングのための準備
  3. 「支援プログラム」の仕様

課題1

MWH=メガワット時

2010年の電力使用量のデータファイル(juyo_2010_tohoku.csv)を読み込み、 年間を通して、時間あたりの電力使用のピーク値(MWHに換算)と、それが発生した日時を出力するプログラムを作成せよ。

要件
    $ 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に換算)を出力するプログラムを作成せよ。

要件

課題3

2010年の電力使用量のデータファイル(juyo_2010_tohoku.csv)を読み込み、 年間を通して、1日あたり(午前0時〜24時まで)の電力使用量が最大であった日付とその日の電力量の総計(MWH)、 および、使用電力量が最小であった日付とその日の電力量の総計(MWH)を、それぞれ出力するプログラムを作成せよ。

要件
ヒント

言うまでもないかもしれないが、「一日あたりの電力量」とは、0時から1時まで、1時から2時まで、・・・23時から24時まで、の電力量の総和によって計算。

課題4

2010年の電力使用量のデータファイル(juyo_2010_tohoku.csv)を読み込み、 曜日(日曜〜土曜)毎に、電力量の平均値と標準偏差を計算し、一覧を出力するプログラムを作成せよ。

要件
ヒント

「曜日毎の計算」をもう少し詳しく説明すると・・・・
その年の$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$は各自で決定せよ。

要件
ヒント

ARモデルのパラメータの決定には、支援プログラムのarcoef()関数を用いること。

$p$の値をあまり大きくするとうまく予測できない場合がある。「数日分」程度の時間数を目安に調整すること。

課題6

2010年のデータファイル(juyo_2010_tohoku.csv)を元に、ARモデルの係数($a(i),c$)を求め、 それらの係数を2012年のデータに適用することによって、 電力値のデータが入手可能な最後の日からその1週間先までの時間毎の電力使用量の推移を予測し、結果を出力するプログラムを作成せよ。

要件
ヒント

電力会社が提供するデータはときどき更新されるから、いつの時点でのデータをダウンロードしたかによって、「データが入手可能な最後の日」は異なる。 けれども、支援プログラムのread_csv()関数を使うと、読み込んだデータの数(=元旦からの時間数)を知ることができるから、 「それからさらに1週間先」までを予測するよう、プログラムできるはずだ。