第13回:データ分析入門(演習)#

学籍番号:…

氏名:…


演習1#

本演習では,講義資料と同じく アイスクリーム屋さんで学ぶ楽しい統計学 というサイトの架空のデータを用いる(ただしデータの種類は少し異なる).

まずは以下のセルを実行し,データをダウンロードしよう. ダウンロードしたデータは data フォルダ内に ice_cream_kadai.csv という名前で保存される.

!mkdir data
!wget -P data https://raw.githubusercontent.com/ground-zero-programming/zero-pro2024-public/main/docs/13/data/ice_cream_kadai.csv
mkdir: data: File exists
--2025-01-08 12:46:59--  https://raw.githubusercontent.com/ground-zero-programming/zero-pro2024-public/main/docs/13/data/ice_cream_kadai.csv
Resolving raw.githubusercontent.com (raw.githubusercontent.com)... 2606:50c0:8000::154, 2606:50c0:8001::154, 2606:50c0:8002::154, ...
Connecting to raw.githubusercontent.com (raw.githubusercontent.com)|2606:50c0:8000::154|:443... connected.
HTTP request sent, awaiting response... 
200 OK
Length: 172 [text/plain]
Saving to: 'data/ice_cream_kadai.csv.1'


ice_cream_kadai.csv   0%[                    ]       0  --.-KB/s               
ice_cream_kadai.csv 100%[===================>]     172  --.-KB/s    in 0s      

2025-01-08 12:46:59 (5.29 MB/s) - 'data/ice_cream_kadai.csv.1' saved [172/172]

本ファイルには,アイスクリーム屋の店舗別の平均客数と,駅からの距離(単位は [m] )のデータが入っている.

店舗, 駅からの距離, 平均客数
1, 10, 795
2, 1200, 213
3, 500, 465
...

このデータに対して,MatplotlibやPandasを用いて解析を行う. 適宜,これら外部ライブラリをインポートしながら以下の演習課題に解答せよ.

演習1-1#

上記ファイル ice_cream_kadai.csv を読み込み,PandasのDataFrameとして変数 df に格納せよ.また, df の中身を表示し,正しく読み込めていることを確認せよ.

# 解答用セル

演習1-2#

df のうち,「駅からの距離」が 500 以上の行だけを抽出して表示せよ.

# 解答用セル

演習1-3#

df のうち,「駅からの距離」が 500 以上の行について,「平均客数」だけを抜き出して表示せよ.

# 解答用セル

演習1-4#

df のうち,「平均客数」が 500 未満の行について,「駅からの距離」の 最大値最小値平均値 をそれぞれ計算し,表示せよ.

# 解答用セル

演習2#

df について,「駅からの距離」と「平均客数」の間の関係を散布図として出力せよ. ただし,図タイトル,x軸とy軸のタイトルを必ず付けること. それ以外に,グラフを見やすくする工夫を自分なりに考えて加えてよい.

グラフ中で日本語フォントを利用するため,以下のセルをあらかじめ実行しておくこと.

from matplotlib import rcParams
rcParams['font.family'] = 'sans-serif'
rcParams['font.sans-serif'] = ['Hiragino Sans', 'Yu Gothic', 'Meiryo', 'Takao', 'IPAexGothic', 'IPAPGothic', 'VL PGothic', 'Noto Sans CJK JP']
Intel MKL WARNING: Support of Intel(R) Streaming SIMD Extensions 4.2 (Intel(R) SSE4.2) enabled only processors has been deprecated. Intel oneAPI Math Kernel Library 2025.0 will require Intel(R) Advanced Vector Extensions (Intel(R) AVX) instructions.
Intel MKL WARNING: Support of Intel(R) Streaming SIMD Extensions 4.2 (Intel(R) SSE4.2) enabled only processors has been deprecated. Intel oneAPI Math Kernel Library 2025.0 will require Intel(R) Advanced Vector Extensions (Intel(R) AVX) instructions.

出力例

注意:タイトルなどが文字化けする場合

PC環境によっては,日本語フォント表示用コードを実行してもグラフ中に日本語がうまく表示されず,文字が のように表示されることがある.

その場合は,以下のコードをコードセルに貼り付け,実行してからグラフを描画せよ.

!pip install japanize-matplotlib
import japanize_matplotlib
japanize_matplotlib.japanize()
# 解答用セル

演習3#

df について,「駅からの距離」と「平均客数」の間の相関係数を計算し,表示せよ. また,説明 と書かれたMarkdownセルに,演習2の散布図と本演習で算出した相関係数の結果から,何が読み取れるか考えて自分なりに考察を書くこと.

# 解答用セル

説明

演習4:発展課題#

これ以降は発展的な演習課題となります. 解くことは必須ではありませんが,ぜひチャレンジしてみてください.

演習4では,気象庁のオープンデータから取得した東広島市の1979年〜2021年までの月別平均気温のデータを用いる. 本データは,higashi-hiroshima-temps.csv という CSVファイルに保存されている.

まずは以下のセルを実行し,当該ファイルをダウンロードして data フォルダに格納せよ.

!mkdir data
!wget -P data https://raw.githubusercontent.com/ground-zero-programming/zero-pro2024-public/main/docs/13/data/higashi-hiroshima-temps.csv
mkdir: data: File exists
--2025-01-08 12:47:01--  https://raw.githubusercontent.com/ground-zero-programming/zero-pro2024-public/main/docs/13/data/higashi-hiroshima-temps.csv
Resolving raw.githubusercontent.com (raw.githubusercontent.com)... 2606:50c0:8000::154, 2606:50c0:8001::154, 2606:50c0:8002::154, ...
Connecting to raw.githubusercontent.com (raw.githubusercontent.com)|2606:50c0:8000::154|:443... 
connected.
HTTP request sent, awaiting response... 
200 OK
Length: 6694 (6.5K) [text/plain]
Saving to: 'data/higashi-hiroshima-temps.csv.1'


          higashi-h   0%[                    ]       0  --.-KB/s               
higashi-hiroshima-t 100%[===================>]   6.54K  --.-KB/s    in 0s      

2025-01-08 12:47:02 (13.1 MB/s) - 'data/higashi-hiroshima-temps.csv.1' saved [6694/6694]

次に,以下のセルを実行して higashi-hiroshima-temps.csv の内容を df_temps というDataFrameに格納せよ.

import pandas as pd

df_temps = pd.read_csv('data/higashi-hiroshima-temps.csv') 

df_temps
平均気温
0 1979 1 2.9
1 1979 2 4.1
2 1979 3 5.9
3 1979 4 11.0
4 1979 5 14.8
... ... ... ...
521 2022 6 22.0
522 2022 7 25.8
523 2022 8 26.6
524 2022 9 23.1
525 2022 10 15.4

526 rows × 3 columns

上記の出力結果から分かるように,本データは 平均気温 の3つの列から構成されており,1979年1月〜2022年10月までの平均気温が行方向に続いている.

以降,この df_temps を用いて演習課題に解答すること. グラフを描画する際は,タイトルや軸ラベルなど,必要な情報を含めること.

演習4-1#

df_temps から各年の11月の平均気温だけを抽出し,線グラフを描画せよ. なお,グラフの横軸は年,縦軸は平均気温とする.

出力例

# 解答用セル

演習4-2#

以下の仕様の関数を作成せよ.

関数名: plot_temps
引数: df, year, month
処理の内容: 引数で渡されたDataFrame df に対し,year 年以降の month 月の平均気温を線グラフで出力する.

※グラフの横軸は年,縦軸は平均気温とする.
※プログラムには,関数の呼び出し命令文を含めること(引数 df には df_temps を渡し,yearmonth は任意に設定して良い).

実行例と出力例

# 2000年以降の11月の平均気温を出力したい場合
plot_temps(df_temps, 2000, 11)

# 解答用セル

演習4-3#

以下の仕様の関数を作成せよ.

関数名: plot_temps_multi
引数: df, months
処理の内容: DataFrame df に対し,リスト months に格納された複数の月の平均気温をそえぞれ線グラフで重ねて出力する.

※グラフの横軸は年,縦軸は平均気温とする.各線グラフは色分けし,グラフ中に凡例を示すこと.
※プログラムには,関数の呼び出し命令文を含めること(引数 df には df_temps を渡し,yearmonth は任意に設定して良い).

実行例と出力例

# 1月, 4月, 9月, 12月の線グラフを重ねて表示する.
plot_temps(df_temps, [1, 4, 9, 12])

# 解答用セル

演習4-4#

df_temps の1月〜12月の各月について,全ての年に対する「平均気温」の平均と標準偏差を計算せよ.

また,横軸を「月」,縦軸を「平均気温」の平均とする棒グラフを描画せよ. このとき,棒グラフには「平均気温」の標準偏差をエラーバー(誤差範囲)として付与すること.

エラーバー(誤差範囲)の付け方

棒グラフにエラーバーを付ける際には,引数 yerr に誤差範囲を定義する値のリスト(例:標準偏差や標準誤差など)を渡せば良い.

例えば,変数 Y_std に誤差範囲を定義する値のリストが入っている場合は,以下のように書く.

plt.bar(X, Y, yerr=Y_std)

出力例

# 解答用セル