上巻 第6章 練習問題#

ここでは、 本書の学習内容の定着 を目的とした練習問題を掲載します。 解答・解説は「解答例」ページを参照してください。 なお、問題の性質上、本書で取り上げた処理と重複することがあります。 ご了承ください。

前提#

以下のように、ライブラリのインポートと変数の定義が完了していることを前提とします。

Hide code cell content
# pathlibモジュールのインポート
# ファイルシステムのパスを扱う
# 組み合わせを生成するためのitertoolsをインポート
from itertools import combinations
from pathlib import Path

# pandas:データ解析ライブラリのインポート
# pdという名前で参照可能
import pandas as pd

# plotly.expressのインポート
# インタラクティブなグラフ作成のライブラリ
# pxという名前で参照可能
import plotly.express as px

# plotly.graph_objectsからFigureクラスのインポート
# 型ヒントの利用を主目的とする
from plotly.graph_objects import Figure
Hide code cell content
# アニメ・ゲームの基礎分析済みデータを読み込み
DIR_AN_IN = Path("../../../data/an/input")  # アニメデータ
DIR_GM_IN = Path("../../../data/gm/input")  # ゲームデータ

# アニメ各話に関するファイル
FN_AE = "an_ae.csv"
# アニメ作品と声優の対応関係に関するファイル
FN_AC_ACT = "an_ac_act.csv"

# ゲームパッケージとプラットフォームの対応関係に関するファイル
FN_PKG_PF = "gm_pkg_pf.csv"

以下のファイルを読み込み済みと仮定します。

Hide code cell content
df_ae = pd.read_csv(DIR_AN_IN / FN_AE)  # アニメ各話データ
df_ac_act = pd.read_csv(DIR_AN_IN / FN_AC_ACT)  # アニメ作品と声優
df_pkg_pf = pd.read_csv(DIR_GM_IN / FN_PKG_PF)  # ゲームパッケージとプラットフォーム
Hide code cell content
# 日付列をdatetime型に変換
df_ae["date"] = pd.to_datetime(df_ae["date"])
df_ac_act["first_date"] = pd.to_datetime(df_ac_act["first_date"])
df_ac_act["last_date"] = pd.to_datetime(df_ac_act["last_date"])

基礎 問題1:特定列のユニーク値数の確認#

関連セクション: ゲームデータの基礎分析

本書では df_pkg_pf.nunique() を用いて全列のユニーク値数を確認しました。 ここでは、特定の列(pfnamepublisher)に絞ってユニーク値数を確認してみましょう。

df_pkg_pf から pfname 列と publisher 列を選択し、それぞれのユニーク値数を表示してください。

基礎 問題2:声優データの活動期間の確認#

関連セクション: アニメデータの基礎分析

本書では df_ae["date"] 列の最小値と最大値を確認して、アニメ各話の放送期間を把握しました。 ここでは、声優データ(df_ac_act)の first_date 列と last_date 列の範囲を確認してみましょう。

df_ac_actfirst_date 列と last_date 列それぞれについて、最小値と最大値を表示してください。

標準 問題3:特定プラットフォームに絞った価格統計#

関連セクション: ゲームデータの基礎分析

本文では df_pkg_pf.describe() を用いて全データの価格統計を確認しました。 ここでは、特定のプラットフォーム(プレイステーション2)に絞って価格の統計を確認してみましょう。

df_pkg_pf から pfname が「プレイステーション2」のデータのみを抽出し、price 列の記述統計量を表示してください。

標準 問題4:特定年代に絞ったアニメ作品数#

関連セクション: アニメデータの基礎分析

本文で確認したように、アニメデータは1990年以前に大きな欠損があります。 ここでは、十分余裕を持たせて2000年以降のデータに絞って分析を行ってみましょう。

df_ae から2000年以降のデータのみを抽出し、年ごとのユニークなアニメ作品数(acid)を集計して、作品数が多い順に上位10件を表示してください。

発展 問題5:放送日データの空白期間の特定#

関連セクション: アニメデータの基礎分析

第6章で触れた通り、アニメデータには特定の期間に大規模な欠損が見られます。 単純に groupby で集計すると「データが0件の年」は結果から消えてしまい、欠損の深刻さを見落とす可能性があります。

  • データの最小年から最大年までの全ての年を含む「枠(レンジ)」を作成してください

  • それに対して df_ae の作品数を紐付けてください

  • 完全にデータが欠損している年を列挙してください。

なお、ここでは簡単のため「当該年にそもそもアニメが放送されていたかどうか(つまり0が正解かどうか)」には深入りしません。 実態は別として、 データとして アニメ作品数が0の年を抽出しましょう。

応用 問題6:年代別の声優カバー率#

関連セクション: アニメデータの基礎分析

本書で扱うアニメ作品データの中には、声優情報に欠損があるものも含まれます。 どの時代の分析にこのデータが適しているのか、その限界を明らかにしましょう。

  • first_date を利用して作品を「年代(10年単位)」ごとに分類してください

  • 年代別に「総作品数」と「声優情報あり作品数」を集計してください

  • 年代別の声優データカバー率を算出してください

応用 問題7:マルチプラットフォーム展開のペア分析#

関連セクション: ゲームデータの基礎分析

ゲーム業界において、複数のプラットフォームで同一タイトルが展開されることは珍しくありません。 どのような組み合わせが多いのか、「プラットフォームのペア」を分析してみましょう。

  • df_pkg_pf において、2つ以上のプラットフォームで発売されているタイトルを対象にしてください

  • タイトルが3機種以上に展開されている場合、全ての2機種の組み合わせを個別にカウントしてください

  • 最も頻出するプラットフォームのペアの上位10件を表示してください