データ分析実践
上級問題チェック

問題 31 /40

日経平均の終値をグラフにした次の記述に関して、誤った説明はどれか。 import pandas as pd import plotly.express as px df = pd.read_csv( 'nikkei_stock_average_daily_jp.csv', encoding='cp932', parse_dates=['データ日付'], date_format='%Y/%m/%d', usecols=[0, 1], index_col=0, skipfooter=1) df['移動平均7日'] = df['終値'].rolling(window=7, min_periods=1).mean() df['移動平均30日'] = df['終値'].rolling(window=30, min_periods=1).mean() px.line(df['2024-08-01':'2024-08-31'])

選択 1

read_csvメソッドで、ローカルのCSVファイルを取得している。

選択 2

rollingメソッドで、現在のデータ点を中心として前後7日間と前後30日間の平均値を算出している。

選択 3

rollingメソッドのmin_periods引数で、データがNaNにならないようにしている。

選択 4

Plotly Expressのline関数で、特定の期間のデータを折れ線グラフにしている。

解説

選択肢2が正解です。 import pandas as pd import plotly.express as px df = pd.read_csv( 'nikkei_stock_average_daily_jp.csv', encoding='cp932', parse_dates=['データ日付'], date_format='%Y/%m/%d', usecols=[0, 1], index_col=0, skipfooter=1) df['移動平均7日'] = df['終値'].rolling(window=7, min_periods=1).mean() df['移動平均30日'] = df['終値'].rolling(window=30, min_periods=1).mean() px.line(df['2024-08-01':'2024-08-31']) ▶︎
【選択肢1】 read_csvメソッドで、ローカルのCSVファイルを取得している。 正しい説明です。 日経平均のデータは次のサイトでダウンロードできます。 https://indexes.nikkei.co.jp/nkave/index?type=download read_csvメソッドはインターネット上のデータを取得できるため、通常は次の記述で取得できますが、日経平均のサイトはエラーになります。 df = pd.read_csv('https://indexes.nikkei.co.jp/nkave/historical/nikkei_stock_average_daily_jp.csv', encoding='cp932') ▶︎ HTTPError: HTTP Error 403: Forbidden ブラウザ以外のアクセスが拒否されているためエラーになります。回避方法としては、requestsモジュールでheaders引数をつけて取得するか、ブラウザで手動でダウンロードしてファイルをローカルに保存します。 df = pd.read_csv( 'nikkei_stock_average_daily_jp.csv', encoding='cp932', parse_dates=['データ日付'], date_format='%Y/%m/%d', usecols=[0, 1], index_col=0, skipfooter=1) ▶︎ 【選択肢2】 rollingメソッドで、現在のデータ点を中心として前後7日間と前後30日間の平均値を算出している。 誤った説明です。 rollingメソッドは、デフォルトで「Center=False」の引数になり、現在のデータ点とその前のデータ点を対象とします。例えば、8月7日が現在のデータ点で7日間の移動平均の場合、8月1日〜8月7日のデータで平均を算出します。 「Center=True」の引数をつけると、現在のデータ点を中心として前後のデータ点を対象とします。例えば、8月7日が現在のデータ点で7日間の移動平均の場合、8月4日〜8月10日のデータで平均を算出します。 問題文の場合は引数がないので「Center=False」です。これを「Center=True」にすると、このグラフの場合は特に移動平均7日間の見え方が変わります。 Center=False ▶︎
Center=True ▶︎
【選択肢3】 rollingメソッドのmin_periods引数で、データがNaNにならないようにしている。 正しい説明です。 rollingメソッドは、デフォルトで現在のデータ点とその前のデータ点を対象とします。そのため、データの最初のほうはその前のデータが存在しないため、NaNになります。 df['移動平均7日'] = df['終値'].rolling(window=7).mean() df['移動平均30日'] = df['終値'].rolling(window=30).mean() df ▶︎
「min_periods=1」の引数をつけると、データが1個でもあれば計算するため、NaNがなくなります。 df['移動平均7日'] = df['終値'].rolling(window=7, min_periods=1).mean() df['移動平均30日'] = df['終値'].rolling(window=30, min_periods=1).mean() df ▶︎
2022年1月4日は1日だけで平均を算出しており、2022年1月5日は1月4日と1月5日の2日で平均を算出しています。 【選択肢4】 Plotly Expressのline関数で、特定の期間のデータを折れ線グラフにしている。 正しい説明です。 DataFrameの期間は2022年1月4日〜2025年4月4日ですが、df['2024-08-01':'2024-08-31']により、2024年8月1日〜2024年8月31日のデータを対象にしています。 px.line(df['2024-08-01':'2024-08-31']) ▶︎
移動平均は、変化の激しいデータの傾向を把握しやすくなります。このグラフの場合、終値でリアルタイムの値、移動平均7日で短期の傾向、移動平均30日で長期の傾向を把握します。終値を見ると変化が激しいですが、長期で見ると緩やかな下降であることが分かります。 Plotlyはグラフにマウスオーバーすると値を確認できます。2024年8月5日の大暴落は何があったのでしょう。