過去の気象データを分析する【重要】以下の欄をすべて埋めてから応募してください
氏名：
所属学部学科(専攻)：email：【考察記述欄】作業をすべて終えてから考察を自由に記述してください。実行結果の考察だけでなく、データを集めたりプログラムを実行するにあたって苦労した点や、こんなデータを収集、解析してみたい、プログラムを改造してこんな解析や予測もしてみたいというアイデアなどでも構いません。また、実際にプログラムを改造するなど特別に工夫したことがあれば記載してください。
‐‐‐記述欄はじめ

はじめに、結果として作成した画像について考察する。
6 月下旬から 7 月中旬にかけて、周囲よりも少し色の寒い領域ができた。これは梅雨の時期を示しているものと考える。
梅雨の時期、および夏休みの時期を避けた場合、新潟で運動会を実施するのに最適なのは 5 月上旬から 6 月上旬までの時期だと考える。この時期は過去 120 年間にわたって晴れの日が多く、運動会が延期・中止される可能性が低い。
この画像は 12 行 31 列のマトリクスとなっており、6 月 31 日など存在しない日付を表すピクセルが含まれることに注意が必要である。ここでは存在しない日付を表すピクセルの画素値は 0 とした。
この画像のもっとも低い画素値は 2 月 29 日に相当するピクセルの 8 である（ただし画素値 0 は除いた場合）。この日付はうるう年にしか存在しないため、過去 120 年にわたる晴れの日の数も少なくなっている。今回は周囲の画素値から結果に影響しないと考え無視したが、状況によっては画素値を 4 倍する等の補正が必要となる。

プログラムを改造して 120 年間分の降水量データを解析した。しかし、過去 120 年間で気象の傾向が変わっていないとは限らず、これについては確かめていない。使用するデータを近年のもののみに絞ることで、データ量は減少するが、逆に正確な予測となる可能性がある。

データ処理の過程において、日付をキー、晴れの日の回数を値として保持するデータ構造を使用した。
これはいわゆる「ハッシュテーブル」「ハッシュマップ」と呼ばれるデータ構造であり、MATLAB にはcontainers.Map として実装されている。筆者がこれに不慣れなため、今回は自力で実装したが、いずれこれも使用してみたいところである。

1記述欄おわり---

新潟で運動会を実施するのに最適な日付はいつか？
1 月 1 日から 12 月 31 日（各日付）のなかで、もっとも運動会に適しているのはどの日付だろうか？ここでは、最も雨が降りにくい日付を最適な日付と定義し、過去の降水量データから最適な日付を推測する。

データのダウンロード
サンプルコードに記載されていた方法を参考に、気象庁 Web から 1901 年 1 月 1 日から 2020 年 12 月 31 日までの新潟観測所における降水量の日合計データをダウンロードした。ダウンロード容量制限のためファイルは4 つに分けて保存されている。

ファイルからデータを読み込む
ファイルの読み込みには readtable 関数を使用した。
clear
filename1 = '1901to1930.csv';
filename2 = '1931to1960.csv';
filename3 = '1961to1990.csv';
filename4 = '1991to2020.csv';
table1 = readtable(filename1,'VariableNamingRule','preserve');table2 = readtable(filename2,'VariableNamingRule','preserve');table3 = readtable(filename3,'VariableNamingRule','preserve');table4 = readtable(filename4,'VariableNamingRule','preserve');
catTable = vertcat(table1,table2,table3,table4);disp(catTable(2,:)) %first row has NaN and NaT
Var1__________

新潟____

新潟_1______

新潟_2______

新潟_3______

1901/01/01

6.4

081

データの整形
使用するデータは以下の 2 種類である。
• 日付(catTable1 列目)• 降水量 (mm)(catTable2 列目)

2これらのデータのみを catTable から取り出し、配列に格納する。
dateTimes = table2array(catTable(:,1));
rainAmounts = table2array(catTable(:,2));disp(dateTimes(2)); disp(rainAmounts(2));
1901/01/01
6.4000

データの解析
1 月 1 日から 12 月 31 日（各日付）のなかで、最も雨の降りにくい日を推測する。そのために、各日付について 1901 年から 2020 年までで晴れの日（降水量が 0 の日）の回数をカウントする。
結果は sunnyDayCount 変数に格納する。この変数は添え字が日付を表し、値が晴れの日の回数を表す。ただし、添え字は月日を mmdd の形式で数値化したものとなっている。
mmdds = datestr(dateTimes,'mmdd');
sunnyDayCount = zeros(1231,1);
for i = 1:length(mmdds)if rainAmounts(i)~=rainAmounts(i) %rainAmouts(i)==NaN
continue;end
index = str2double(mmdds(i,:)); %example) 0101, 1023, 1231
if rainAmounts(i)==0
sunnyDayCount(index) = sunnyDayCount(index) + 1;
end
end
figure(1);plot(sunnyDayCount);xlim([101 1231]);3

過去 120 年間において、もっとも晴れが多かった日は 8 月 11 日である。
disp(find(sunnyDayCount==max(sunnyDayCount)));811

8 月 11 日は多くの場合夏休み期間内である。この日に運動会を開くことは難しい。

解析データの表示「もっとも晴れる日」は運動会を開くことが難しい日であった。そこで運動会に適した日付を定性的に決定する。そのために前項で求めた結果を画像化して表示する。
sunnyDayCountMatrix = zeros(12,31);
for i = 1:length(mmdds)
if rainAmounts(i)~=rainAmounts(i) %rainAmouts(i)==NaN
continue;end
index = str2double(mmdds(i,:));
m = str2double(mmdds(i,1:2));d = str2double(mmdds(i,3:4));
sunnyDayCountMatrix(m,d) = sunnyDayCount(index);
end
figure(2);imagesc(sunnyDayCountMatrix,[0 max(sunnyDayCount(:))]);
4

ylabel('month');xlabel('day');

この画像は縦が月を、横が日を表している。ピクセルの色が暖かいほどに晴れやすいことを表している。
全体的な傾向としては、画像中央側（7 月頃を中心とした夏季）ほど暖色となっている。
ただし、6 月下旬から 7 月中旬までは例外的に周囲よりも少し寒い色となっている。そのため、5 月中旬から 6月中旬まで、および 7 月下旬から 8 月下旬までの二つの区域に暖色の帯が形成されている。
この画像の解釈は考察で述べる。

考察:
実行結果に対して、冒頭の考察記述欄に考察を自由に記述してみましょう。

保存(レポート化):
ここまでの作業お疲れさまでした。最後に作業の結果を残しておきましょう。
このプログラムは実行結果とともにレポート出力できます。
[ライブエディター]タブの[エクスポート]ボタンを押して、PDF を選んでエクスポートしてください。
保存された PDF 形式のファイルをコンテスト窓口に送付してください。

5

Copyright 2021 The MathWorks, Inc.

6