上巻 第5章 練習問題#

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

前提#

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

Hide code cell content
# pathlibモジュールのインポート
# ファイルシステムのパスを扱う
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_IN = Path("../../../data/cm/input")

# ファイル名の定義
FN_CE = "cm_ce.csv"

# plotlyの描画設定の定義
# Jupyter Notebook環境のグラフ表示に適切なものを選択
RENDERER = "plotly_mimetype+notebook"

また、本書中で取り上げた以下の関数も、同様に利用可能とします。

Hide code cell source
def show_fig(fig: Figure) -> None:
    """
    所定のレンダラーを用いてplotlyの図を表示
    Jupyter Bookなどの環境での正確な表示を目的とする

    Parameters
    ----------
    fig : Figure
        表示対象のplotly図

    Returns
    -------
    None
    """

    # 図の周囲の余白を設定
    # t: 上余白
    # l: 左余白
    # r: 右余白
    # b: 下余白
    fig.update_layout(margin=dict(t=25, l=25, r=25, b=25))

    # 所定のレンダラーで図を表示
    fig.show(renderer=RENDERER)

以下のようにファイルを読み込んでいると仮定します。

Hide code cell content
# マンガ各話データを格納するcm_ce.csvを読み出し、df_ceとして格納
df_ce = pd.read_csv("../../../data/cm/input/cm_ce.csv")

基礎 問題1:DataFrameの冒頭行の確認#

関連セクション: Pandasの基礎

データ分析の第一歩は、データの中身を確認することです。 本文では head() メソッドでデフォルトの5行を表示しましたが、もう少し多くの行を確認してみましょう。

df_ce の先頭10行を表示してください。

基礎 問題2:記述統計量の確認#

関連セクション: Pandasの基礎

数値データの全体像を把握するには、平均値や標準偏差などの記述統計量を確認することが有効です。

df_cepages(ページ数)列と page_start_position(掲載位置)列に対して describe() メソッドを適用し、記述統計量を確認してください。

標準 問題3:特定の雑誌に絞った基礎統計#

関連セクション: Pandasの基礎

全体の統計量だけでなく、特定のカテゴリに絞った統計量を確認することで、より詳細な傾向が見えてきます。

df_ce から週刊少年チャンピオン(mcname が「週刊少年チャンピオン」)のデータのみを抽出し、pages 列の記述統計量を describe() で確認してください。

標準 問題4:特定の条件で絞ったソート#

関連セクション: Pandasの基礎

データをソートすることで、特定の傾向を持つデータを見つけやすくなります。 フィルタリングとソートを組み合わせて、特定の条件を満たすデータを確認してみましょう。

df_ce からページ数(pages)が10以上のデータのみを抽出し、掲載位置(page_start_position)で昇順にソートして先頭5行を表示してください。

標準 問題5:短ページ作品の除外と基礎統計#

関連セクション: Pandasの基礎

データセットの中には、数ページのみの告知や短編掲載が含まれていることがあります。 一般的なマンガ作品を分析する際は、これらを除外した方が良いでしょう。

  • pages(ページ数)列を利用して、ページ数が3ページより大きい(pages > 3)データのみを抽出してください

  • 抽出後のデータの平均ページ数を算出し、全体像を確認しましょう

発展 問題6:雑誌1冊あたりのマンガ作品数#

関連セクション: Pandasの基礎

マンガ雑誌を「物理的な1冊」として捉えたとき、そこに何作品が詰め込まれているかは、雑誌の個性や読み応えを決定づける重要な要素です。

  • 雑誌名(mcname)と雑誌巻号ID(miid)をキーにグループ化してください

  • 1冊ごとの作品数(ccidのユニーク数)を算出し、新しいデータフレーム df_counts を作成してください

  • 各雑誌(mcname)ごとの「1冊あたりの平均作品数」を算出して比較しましょう

発展 問題7:作品数分布#

関連セクション: Plotlyの基礎

問題6で算出した「平均値」だけでは、合併号や増刊号などで作品数が大きく変動している可能性(分布の広がり)が見えません。 df_counts を利用して、1冊あたりの作品数の分布を雑誌ごとに可視化しましょう。

  • px.histogram() を使用して、1冊あたりの作品数(ccid_per_miid)のヒストグラムを作成してください

  • facet_colmcname を指定して、雑誌ごとに分布の形状を比較してください