ゲームデータの基礎分析#

準備#

Import#

Hide code cell content
# warningsモジュールのインポート
import warnings

# データ解析や機械学習のライブラリ使用時の警告を非表示にする目的で警告を無視
# 本書の文脈では、可視化の学習に議論を集中させるために選択した
# ただし、学習以外の場面で、警告を無視する設定は推奨しない
warnings.filterwarnings("ignore")
Hide code cell content
# pathlibモジュールのインポート
# ファイルシステムのパスを扱う
from pathlib import Path

# numpy:数値計算ライブラリのインポート
# npという名前で参照可能
import numpy as np

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

# tqdm_notebookのインポート
# Jupyter Notebook環境でのプログレスバー表示に使用
# tqdmという名前で参照可能
from tqdm import tqdm_notebook as tqdm

変数#

Hide code cell content
# 読み込み対象ディレクトリの定義

# ゲームデータが保存されているディレクトリのパス
DIR_IN = Path("../../../data/gm/input")
Hide code cell content
# 読み込み対象ファイル名の定義

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

gm_pkg_pf.csvの基礎分析#

Hide code cell content
# pandasのread_csv関数でCSVファイルの読み込み
df_pkg_pf = pd.read_csv(DIR_IN / FN_PKG_PF)

全体像の把握#

Hide code cell content
# df_pkg_pfデータフレームの先頭5行を転置して表示
df_pkg_pf.head().T
0 1 2 3 4
pkgid M718871 M718876 M718877 M718878 M718879
pfid PF00026 PF00028 PF00028 PF00028 PF00000
pkgname くにおくん 熱血コレクション 1 野々村病院の人々 アイドル雀士スーチーパイ Remix 天地無用! 魎皇鬼 ごくらくCD-ROM for SEGA SATURN Superリアル麻雀 P4 + 相性診断
publisher アトラス エ・ル・フ ジャレコ アローマ セタ
date 2005-08-25 1996-04-26 1995-09-29 1995-09-29 1995-03-10
price 5040.0 6800.0 6900.0 7800.0 9500.0
pfname ゲームボーイアドバンス セガサターン セガサターン セガサターン 3DO
Hide code cell content
# df_pkg_pfデータフレームの形状(行数・列数)を取得
# shape属性を使用すると、(行数, 列数)の形で結果が返される
df_pkg_pf.shape
(35675, 7)
Hide code cell content
# df_pkg_pfデータフレーム内の欠損値(NaN)の情報を集計
# isna()メソッドを使用して欠損値の場所をTrueとして特定
# その後、agg()メソッドを使用して、各列における欠損値の合計と平均を計算
df_pkg_pf.isna().agg([sum, "mean"])
pkgid pfid pkgname publisher date price pfname
sum 0.0 0.0 0.0 0.0 0.0 526.000000 0.0
mean 0.0 0.0 0.0 0.0 0.0 0.014744 0.0
Hide code cell content
# df_pkg_pfデータフレームの記述統計情報を取得
# describe()メソッドを使用して、各列の基本的な統計量を表示
df_pkg_pf.describe()
price
count 35149.000000
mean 5117.557968
std 3619.123743
min 54.000000
25% 2800.000000
50% 5040.000000
75% 6800.000000
max 58000.000000
Hide code cell content
# df_pkg_pfデータフレームの各列に対してユニークな値の数をカウント
# nunique()メソッドを使用して、各列のユニークな値の数を計算
# その後、結果を新しいデータフレームとして整形し、列名を`nunique`とする
df_pkg_pf.nunique().reset_index(name="nunique")
index nunique
0 pkgid 35638
1 pfid 47
2 pkgname 30483
3 publisher 1952
4 date 4115
5 price 1208
6 pfname 47
Hide code cell content
# `pkgid`と`pfid`の組み合わせで重複する行の数をカウント
df_pkg_pf.duplicated(subset=["pkgid", "pfid"]).sum()
0

date列の深掘り#

Hide code cell content
# df_pkg_pfデータフレームの`date`列から最も古い日付と最も新しい日付を取得
# min()メソッドを使用して、最も古い日付を抽出
# max()メソッドを使用して、最も新しい日付を抽出
df_pkg_pf["date"].min(), df_pkg_pf["date"].max()
('1982-04-25', '2019-04-16')
Hide code cell content
# `date`列を日付型に変換
# pd.to_datetime()メソッドを使用して、文字列型の日付を日付型(datetime)に変換
df_pkg_pf["date"] = pd.to_datetime(df_pkg_pf["date"])

# 年に関する情報を新しい`year`列として追加
# dt.yearを使用して、日付から年のみを取得
df_pkg_pf["year"] = df_pkg_pf["date"].dt.year

# 月に関する情報を新しい`month`列として追加
# dt.monthを使用して、日付から月のみを取得
df_pkg_pf["month"] = df_pkg_pf["date"].dt.month

# 曜日に関する情報を新しい`weekday`列として追加
# dt.weekdayを使用して、日付から曜日の情報を数値(0:月曜日, 6:日曜日)として取得
df_pkg_pf["weekday"] = df_pkg_pf["date"].dt.weekday
Hide code cell content
# `year`(年)ごとに`pkgid`のユニークな値の数を集計
# 具体的には、groupbyメソッドで`year`を基準にグループ化し、
# nuniqueメソッドを使用して`pkgid`のユニークな値の数を計算
# その後、reset_indexメソッドでインデックスをリセットし、データフレームとして結果を返す
df_pkg_pf.groupby("year")["pkgid"].nunique().reset_index()
year pkgid
0 1982 12
1 1983 11
2 1984 30
3 1985 59
4 1986 57
5 1987 106
6 1988 79
7 1989 152
8 1990 300
9 1991 336
10 1992 398
11 1993 427
12 1994 613
13 1995 735
14 1996 841
15 1997 856
16 1998 985
17 1999 1173
18 2000 1259
19 2001 1070
20 2002 1156
21 2003 1065
22 2004 1037
23 2005 1103
24 2006 1244
25 2007 1641
26 2008 1681
27 2009 1968
28 2010 1930
29 2011 1575
30 2012 1700
31 2013 2033
32 2014 2106
33 2015 1964
34 2016 1852
35 2017 2074
36 2018 9
37 2019 1
Hide code cell content
# `month`(月)ごとに`pkgid`のユニークな値の数を集計
# 具体的には、groupbyメソッドで`month`を基準にグループ化し、
# nuniqueメソッドを使用して`pkgid`のユニークな値の数を計算
# その後、reset_indexメソッドでインデックスをリセットし、データフレームとして結果を返す
df_pkg_pf.groupby("month")["pkgid"].nunique().reset_index()
month pkgid
0 1 1978
1 2 2629
2 3 3690
3 4 2728
4 5 1817
5 6 2503
6 7 3216
7 8 2755
8 9 3075
9 10 2911
10 11 3594
11 12 4742
Hide code cell content
# `weekday`(曜日)ごとに`pkgid`のユニークな値の数を集計
# 具体的には、groupbyメソッドで`weekday`を基準にグループ化し、
# nuniqueメソッドを使用して`pkgid`のユニークな値の数を計算
# その後、reset_indexメソッドでインデックスをリセットし、データフレームとして結果を返す
df_pkg_pf.groupby("weekday")["pkgid"].nunique().reset_index()
weekday pkgid
0 0 281
1 1 1692
2 2 4515
3 3 22844
4 4 5331
5 5 810
6 6 165
Hide code cell content
# 年ごとに各曜日に発売されたゲームパッケージのユニークな数を集計
# pivot_tableメソッドで`year`をインデックス、`weekday`をカラムとしてピボット
# `pkgid`のユニークな値の数を値として集計し、欠損値は0で補完
df_pkg_pf.pivot_table(
    index="year", columns="weekday", values="pkgid", aggfunc="nunique"
).fillna(0)
weekday 0 1 2 3 4 5 6
year
1982 0.0 1.0 1.0 0.0 2.0 0.0 8.0
1983 1.0 1.0 1.0 0.0 4.0 4.0 0.0
1984 0.0 2.0 3.0 5.0 12.0 8.0 0.0
1985 3.0 8.0 7.0 12.0 17.0 6.0 6.0
1986 1.0 5.0 13.0 9.0 21.0 6.0 2.0
1987 9.0 11.0 10.0 10.0 43.0 17.0 6.0
1988 2.0 6.0 5.0 10.0 46.0 6.0 4.0
1989 6.0 20.0 10.0 17.0 79.0 19.0 1.0
1990 1.0 17.0 16.0 15.0 197.0 47.0 7.0
1991 17.0 16.0 6.0 13.0 248.0 30.0 6.0
1992 4.0 24.0 10.0 18.0 311.0 23.0 8.0
1993 3.0 11.0 23.0 21.0 343.0 19.0 7.0
1994 9.0 13.0 11.0 55.0 460.0 55.0 10.0
1995 6.0 13.0 19.0 22.0 643.0 28.0 4.0
1996 4.0 10.0 3.0 13.0 776.0 27.0 8.0
1997 4.0 12.0 5.0 353.0 472.0 6.0 4.0
1998 4.0 3.0 89.0 746.0 118.0 18.0 7.0
1999 23.0 37.0 93.0 847.0 152.0 15.0 6.0
2000 10.0 28.0 46.0 985.0 142.0 42.0 6.0
2001 4.0 3.0 28.0 856.0 165.0 11.0 3.0
2002 3.0 15.0 34.0 903.0 182.0 18.0 1.0
2003 3.0 5.0 16.0 873.0 158.0 9.0 1.0
2004 3.0 24.0 88.0 811.0 84.0 20.0 7.0
2005 3.0 7.0 55.0 961.0 54.0 23.0 0.0
2006 5.0 11.0 49.0 1084.0 28.0 65.0 2.0
2007 4.0 203.0 99.0 1294.0 30.0 2.0 9.0
2008 8.0 180.0 219.0 1233.0 31.0 8.0 2.0
2009 23.0 252.0 347.0 1277.0 27.0 14.0 28.0
2010 9.0 139.0 540.0 1193.0 33.0 15.0 1.0
2011 4.0 97.0 355.0 1042.0 10.0 67.0 0.0
2012 16.0 81.0 273.0 1284.0 12.0 32.0 2.0
2013 3.0 67.0 442.0 1466.0 17.0 37.0 1.0
2014 5.0 41.0 504.0 1468.0 20.0 66.0 2.0
2015 8.0 65.0 448.0 1343.0 80.0 15.0 5.0
2016 49.0 132.0 402.0 1147.0 106.0 16.0 0.0
2017 24.0 130.0 245.0 1453.0 206.0 15.0 1.0
2018 0.0 1.0 0.0 5.0 2.0 1.0 0.0
2019 0.0 1.0 0.0 0.0 0.0 0.0 0.0

pkgidpkgname列の深掘り#

Hide code cell content
# `pkgid`ごとにユニークな`pkgname`の数を集計し、その統計情報を取得
df_pkg_pf.groupby("pkgid")["pkgname"].nunique().describe().reset_index()
index pkgname
0 count 35638.0
1 mean 1.0
2 std 0.0
3 min 1.0
4 25% 1.0
5 50% 1.0
6 75% 1.0
7 max 1.0
Hide code cell content
# `pkgname`ごとにユニークな`pkgid`の数を集計し、その統計情報を取得
df_pkg_pf.groupby("pkgname")["pkgid"].nunique().describe().reset_index()
index pkgid
0 count 30483.000000
1 mean 1.169111
2 std 0.527420
3 min 1.000000
4 25% 1.000000
5 50% 1.000000
6 75% 1.000000
7 max 10.000000
Hide code cell content
# ゲームパッケージ名(`pkgname`)ごとにユニークなパッケージID(`pkgid`)の数を集計
# groupbyメソッドで`pkgname`を基準にグループ化し、`pkgid`のユニークな値の数を計算
# その後、ソートしてユニークな`pkgid`の数が多い上位10件の`pkgname`とその数を表示
df_pkg_pf.groupby("pkgname")["pkgid"].nunique().sort_values(
    ascending=False
).reset_index().head(10)
pkgname pkgid
0 FIFA 15 10
1 ぷよぷよテトリス スペシャルプライス 9
2 MotoGP™15 8
3 サイコブレイク 8
4 ぷよぷよフィーバー 8
5 CHAOS;CHILD 8
6 ドラゴンボール ゼノバース 8
7 メタルスラッグ 8
8 LEGO®ジュラシック・ワールド 8
9 メタルスラッグ 3 8
Hide code cell content
# `df_pkg_pf`から`pkgname`が`FIFA 15`である行を抽出
# 見やすさのため、特定の列のみ表示
df_pkg_pf[df_pkg_pf["pkgname"] == "FIFA 15"][["pkgname", "pfname", "date", "price"]]
pkgname pfname date price
11161 FIFA 15 プレイステーション4 2014-10-09 7300.0
11162 FIFA 15 プレイステーション3 2014-10-09 7300.0
11163 FIFA 15 XboxOne 2014-10-09 7300.0
11164 FIFA 15 Xbox360 2014-10-09 7300.0
11165 FIFA 15 プレイステーション4 2014-10-09 5940.0
11166 FIFA 15 プレイステーション3 2014-10-09 5940.0
11167 FIFA 15 プレイステーションVita 2014-10-09 5940.0
11168 FIFA 15 XboxOne 2014-10-09 7300.0
11169 FIFA 15 Xbox360 2014-10-09 3024.0
11170 FIFA 15 プレイステーションVita 2014-10-09 5500.0
Hide code cell content
# ゲームパッケージ名(`pkgname`)ごとに、関連するプラットフォームID(`pfid`)のユニークな数を集計
# groupbyメソッドで`pkgname`を基準にグループ化し、`pfid`のユニークな値の数を計算
# それを基礎集計して、各`pkgname`に紐づく`pfid`の数の統計量を表示
df_pkg_pf.groupby("pkgname")["pfid"].nunique().describe().reset_index()
index pfid
0 count 30483.000000
1 mean 1.108388
2 std 0.398799
3 min 1.000000
4 25% 1.000000
5 50% 1.000000
6 75% 1.000000
7 max 8.000000
Hide code cell content
# ゲームパッケージ名(`pkgname`)ごとに、関連するプラットフォームID(`pfid`)のユニークな数を集計
# groupbyメソッドで`pkgname`を基準にグループ化し、`pfid`のユニークな値の数を計算
# その数を降順にソートし、上位10件の`pkgname`とそれに紐づく`pfid`の数を表示
df_pkg_pf.groupby("pkgname")["pfid"].nunique().sort_values(
    ascending=False
).reset_index().head(10)
pkgname pfid
0 メタルスラッグ 3 8
1 ぷよぷよフィーバー 8
2 メタルスラッグ 8
3 上海 6
4 ぷよぷよテトリス スペシャルプライス 6
5 パックマン 6
6 レミングス 6
7 悪魔城ドラキュラ 6
8 炎の闘球児 ドッジ弾平 6
9 カーズ 6
Hide code cell content
# `df_pkg_pf`から`pkgname`が`ぷよぷよフィーバー`である行を抽出
# 見やすさのため、特定の列のみ表示
df_pkg_pf[df_pkg_pf["pkgname"] == "ぷよぷよフィーバー"][["pkgname", "pfname", "date", "price"]]
pkgname pfname date price
1035 ぷよぷよフィーバー プレイステーション・ポータブル 2004-12-24 5040.0
1093 ぷよぷよフィーバー ゲームボーイアドバンス 2004-07-24 5040.0
1141 ぷよぷよフィーバー ニンテンドーゲームキューブ 2004-03-24 5229.0
1172 ぷよぷよフィーバー プレイステーション2 2004-02-04 5229.0
2657 ぷよぷよフィーバー Xbox 2004-04-24 4980.0
2861 ぷよぷよフィーバー ドリームキャスト 2004-02-24 4980.0
25507 ぷよぷよフィーバー ニンテンドーDS 2004-12-24 5040.0
25508 ぷよぷよフィーバー Xbox360 2007-12-04 1200.0

pfidpfname列の深掘り#

Hide code cell content
# `pfid`ごとにユニークな`pfname`の数を集計し、その統計情報を取得
df_pkg_pf.groupby("pfid")["pfname"].nunique().describe().reset_index()
index pfname
0 count 47.0
1 mean 1.0
2 std 0.0
3 min 1.0
4 25% 1.0
5 50% 1.0
6 75% 1.0
7 max 1.0
Hide code cell content
# `pfname`ごとにユニークな`pfid`の数を集計し、その統計情報を取得
df_pkg_pf.groupby("pfname")["pfid"].nunique().describe().reset_index()
index pfid
0 count 47.0
1 mean 1.0
2 std 0.0
3 min 1.0
4 25% 1.0
5 50% 1.0
6 75% 1.0
7 max 1.0
Hide code cell content
# プラットフォームID(`pfid`)ごとに、関連するゲームパッケージID(`pkgid`)のユニークな数を集計
# groupbyメソッドで`pfid`を基準にグループ化し、`pkgid`のユニークな値の数を計算
# その後、計算結果の基本統計量を表示
df_pkg_pf.groupby(["pfid"])["pkgid"].nunique().describe().reset_index()
index pkgid
0 count 47.000000
1 mean 759.042553
2 std 1068.235786
3 min 1.000000
4 25% 16.000000
5 50% 228.000000
6 75% 943.500000
7 max 4216.000000
Hide code cell content
# 各プラットフォーム(に紐づくゲームパッケージIDのユニークな数を集計
# groupbyメソッドで`pfid`と`pfname`を基準にグループ化し、`pkgid`のユニークな値の数を計算
# 計算結果を降順にソートして、上位10件のプラットフォームとその紐づくゲームパッケージ数を表示
df_pkg_pf.groupby(["pfid", "pfname"])["pkgid"].nunique().sort_values(
    ascending=False
).reset_index().head(10)
pfid pfname pkgid
0 PF00040 プレイステーション2 4216
1 PF00039 プレイステーション 3750
2 PF00044 プレイステーション・ポータブル 3417
3 PF00041 プレイステーション3 2501
4 PF00043 プレイステーションVita 2348
5 PF00031 ニンテンドー3DS 2263
6 PF00032 ニンテンドーDS 2213
7 PF00042 プレイステーション4 1874
8 PF00020 Xbox360 1385
9 PF00015 Wii 1356
Hide code cell content
# ユニークな`pkgid`数が多い上位5のpfidを取得
# `pfid`を基準にグループ化し、各グループのユニークな`pkgid`の数を計算
# その後、降順にソートして上位10の`pfid`をリスト形式で取得
pfids = (
    df_pkg_pf.groupby("pfid")["pkgid"]
    .nunique()
    .sort_values(ascending=False)
    .head()
    .index.tolist()
)

# 上位5のpfidに紐づきデータを抽出
# 発売年(`year`)ごと、プラットフォーム名(`pfname`)ごとに
# ゲームパッケージID(`pkgid`)のユニークな数を集計、NaNは0に置換し、int型にキャスト
df_pkg_pf[df_pkg_pf["pfid"].isin(pfids)].pivot_table(
    index="year", columns="pfname", values="pkgid", aggfunc="nunique"
).fillna(0).astype(int)
pfname プレイステーション プレイステーション2 プレイステーション3 プレイステーションVita プレイステーション・ポータブル
year
1994 14 0 0 0 0
1995 119 0 0 0 0
1996 368 0 0 0 0
1997 434 0 0 0 0
1998 584 0 0 0 0
1999 714 0 0 0 0
2000 668 117 0 0 0
2001 428 241 0 0 0
2002 310 423 0 0 0
2003 96 547 0 0 0
2004 13 634 0 0 16
2005 0 667 0 0 103
2006 1 557 21 0 225
2007 0 425 79 0 160
2008 0 312 146 0 155
2009 0 182 152 0 488
2010 1 92 214 0 637
2011 0 18 291 43 505
2012 0 0 334 167 535
2013 0 1 473 305 378
2014 0 0 398 412 176
2015 0 0 244 529 33
2016 0 0 116 494 5
2017 0 0 33 398 0
2019 0 0 0 0 1
Hide code cell content
# pkgidが多い上位五つのpfidについて、発売曜日ごとのゲームパッケージ数を集計
# 曜日(`weekday`)ごと、プラットフォーム名(`pfname`)ごとに
# ゲームパッケージID(`pkgid`)のユニークな数を集計、NaNは0に置換
df_pkg_pf[df_pkg_pf["pfid"].isin(pfids)].pivot_table(
    index="weekday", columns="pfname", values="pkgid", aggfunc="nunique"
).fillna(0)
pfname プレイステーション プレイステーション2 プレイステーション3 プレイステーションVita プレイステーション・ポータブル
weekday
0 8.0 7.0 3.0 18.0 29.0
1 57.0 24.0 104.0 39.0 44.0
2 154.0 144.0 220.0 148.0 178.0
3 2826.0 3990.0 2124.0 2065.0 3098.0
4 664.0 14.0 26.0 29.0 24.0
5 33.0 32.0 17.0 49.0 11.0
6 8.0 5.0 7.0 0.0 33.0

publisher列の深掘り#

Hide code cell content
# `acname`ごとにユニークな`acid`の数を集計し、その統計情報を取得
df_pkg_pf.groupby("publisher")["pkgid"].nunique().describe().reset_index()
index pkgid
0 count 1952.000000
1 mean 18.257172
2 std 78.522024
3 min 1.000000
4 25% 1.000000
5 50% 2.000000
6 75% 6.000000
7 max 1425.000000
Hide code cell content
# ゲーム販売会社名(`publisher`)ごとにユニークなパッケージID(`pkgid`)の数を集計
# groupbyメソッドで`publisher`を基準にグループ化し、`pkgid`のユニークな値の数を計算
# その後、ソートしてユニークな`pkgid`の数が多い上位10件の`publisher`とその数を表示
df_pkg_pf.groupby("publisher")["pkgid"].nunique().sort_values(
    ascending=False
).reset_index().head(10)
publisher pkgid
0 任天堂株式会社 1425
1 株式会社バンダイナムコゲームス 1216
2 株式会社カプコン 984
3 株式会社ソニー・コンピュータエンタテインメント 915
4 エレクトロニック・アーツ株式会社 860
5 株式会社スクウェア・エニックス 825
6 株式会社コーエーテクモゲームス 698
7 株式会社セガ 683
8 アイディアファクトリー株式会社 669
9 株式会社ディースリー・パブリッシャー 597
Hide code cell content
# ユニークな`pkgid`数が多い上位5のpublisherを取得
# `publisher`を基準にグループ化し、各グループのユニークな`pkgid`の数を計算
# その後、降順にソートして上位10の`pubs`をリスト形式で取得
pubs = (
    df_pkg_pf.groupby("publisher")["pkgid"]
    .nunique()
    .sort_values(ascending=False)
    .head()
    .index.tolist()
)

# 上位5のpubsに紐づきデータを抽出
# 発売年(`year`)ごと、プラットフォーム名(`publisher`)ごとに
# ゲームパッケージID(`pkgid`)のユニークな数を集計、NaNは0に置換し、int型にキャスト
df_pkg_pf[df_pkg_pf["publisher"].isin(pubs)].pivot_table(
    index="year", columns="publisher", values="pkgid", aggfunc="nunique"
).fillna(0).astype(int)
publisher エレクトロニック・アーツ株式会社 任天堂株式会社 株式会社カプコン 株式会社ソニー・コンピュータエンタテインメント 株式会社バンダイナムコゲームス
year
1983 0 7 0 0 0
1984 0 5 0 0 0
1985 0 4 0 0 0
1986 0 5 0 0 0
1987 0 3 0 0 0
1988 0 2 0 0 0
1989 0 6 0 0 0
1990 0 10 3 0 0
1991 0 6 1 0 0
1992 0 11 4 0 0
1993 0 11 4 0 0
1994 0 11 8 0 0
1995 0 11 14 1 0
1996 0 13 17 6 0
1997 0 11 17 7 2
1998 5 28 24 7 1
1999 0 57 19 21 0
2000 0 31 24 9 0
2001 1 23 36 34 1
2002 0 20 22 20 2
2003 32 18 49 18 0
2004 59 56 26 31 0
2005 49 37 33 37 0
2006 48 73 34 62 57
2007 60 66 58 93 86
2008 93 61 45 63 96
2009 89 125 51 80 152
2010 76 54 49 81 96
2011 44 52 68 50 132
2012 43 79 61 79 144
2013 42 128 74 61 207
2014 66 91 86 91 187
2015 39 113 85 59 53
2016 59 136 72 5 0
2017 55 60 0 0 0
2018 0 1 0 0 0
Hide code cell content
# 上位5のpublisherについて、発売曜日ごとのゲームパッケージ数を集計
# 曜日(`weekday`)ごと、ゲーム販売会社名(`publisher`)ごとに
# ゲームパッケージID(`pkgid`)のユニークな数を集計、NaNは0に置換
df_pkg_pf[df_pkg_pf["publisher"].isin(pubs)].pivot_table(
    index="weekday", columns="publisher", values="pkgid", aggfunc="nunique"
).fillna(0)
publisher エレクトロニック・アーツ株式会社 任天堂株式会社 株式会社カプコン 株式会社ソニー・コンピュータエンタテインメント 株式会社バンダイナムコゲームス
weekday
0 6.0 54.0 9.0 0.0 1.0
1 48.0 151.0 73.0 16.0 95.0
2 55.0 434.0 209.0 104.0 141.0
3 680.0 460.0 569.0 730.0 958.0
4 51.0 163.0 96.0 28.0 3.0
5 19.0 145.0 27.0 26.0 14.0
6 1.0 18.0 1.0 11.0 4.0

price列の深掘り#

Hide code cell content
# 各発売年(`year`)ごとにゲームパッケージの価格(`price`)の基本統計量を計算
df_pkg_pf.groupby("year")["price"].describe()
count mean std min 25% 50% 75% max
year
1982 12.0 8833.333333 5804.909103 3500.0 3500.00 6500.0 16500.0 16500.0
1983 11.0 3909.090909 784.161393 2500.0 3400.00 4500.0 4500.0 4500.0
1984 31.0 5116.129032 1195.295437 3500.0 4400.00 4500.0 6250.0 7200.0
1985 61.0 6009.836066 2241.777934 4300.0 4500.00 4900.0 6800.0 14800.0
1986 57.0 4931.578947 1516.075513 2500.0 4500.00 4900.0 5300.0 10000.0
1987 108.0 5540.555556 1828.933520 2000.0 4500.00 5500.0 6800.0 9800.0
1988 80.0 5547.000000 1101.231072 3200.0 4900.00 5500.0 5800.0 9800.0
1989 152.0 5727.480263 1284.464853 2600.0 5500.00 5900.0 6300.0 9800.0
1990 300.0 5584.476667 2031.466372 2600.0 3500.00 5900.0 6780.0 14800.0
1991 336.0 7015.708333 4032.813111 1000.0 3960.00 6500.0 8252.0 23800.0
1992 398.0 7497.690955 3590.501653 1500.0 4825.00 7586.5 8800.0 28000.0
1993 427.0 8327.093677 3340.675027 2900.0 6800.00 8800.0 9700.0 29800.0
1994 613.0 8471.101142 3627.019740 1980.0 6800.00 8800.0 9800.0 29800.0
1995 735.0 8297.306122 4079.354925 1280.0 5800.00 7800.0 9800.0 34800.0
1996 840.0 6729.544048 3678.101536 1280.0 5800.00 5800.0 6800.0 34000.0
1997 855.0 6072.762573 2971.631541 500.0 5800.00 5800.0 6800.0 36800.0
1998 988.0 5495.774291 3066.746656 500.0 3980.00 5800.0 5825.0 58000.0
1999 1165.0 4828.793133 2729.871216 500.0 2800.00 4800.0 5800.0 38000.0
2000 1232.0 4519.135552 2615.820313 500.0 2800.00 4200.0 5800.0 38000.0
2001 1067.0 4793.573571 2692.631026 398.0 2800.00 4800.0 6090.0 38900.0
2002 1159.0 5177.123382 3036.948767 498.0 2940.00 5040.0 6800.0 39800.0
2003 1065.0 5628.345540 3169.873266 1000.0 3800.00 5800.0 7140.0 39800.0
2004 1036.0 5776.046332 3563.713279 404.0 3654.00 5659.5 7140.0 39800.0
2005 1104.0 5497.354167 2455.662403 400.0 3487.50 5040.0 7140.0 26040.0
2006 1239.0 5081.142857 3194.186034 340.0 2940.00 5040.0 7140.0 44800.0
2007 1641.0 4244.517977 3358.101973 300.0 1554.00 3990.0 6090.0 49980.0
2008 1676.0 4535.547136 3899.966591 200.0 2079.00 4410.0 6279.0 49800.0
2009 1965.0 4012.208651 3713.353797 100.0 823.00 3800.0 6090.0 48980.0
2010 1921.0 3812.234253 3239.902939 200.0 800.00 3500.0 6090.0 39800.0
2011 1572.0 4398.479644 3437.800788 200.0 1321.00 4712.5 6090.0 37905.0
2012 1687.0 4825.491998 4103.191562 190.0 2376.00 4800.0 6280.0 39800.0
2013 1976.0 4750.717105 3540.089675 100.0 2480.00 4847.0 6612.0 40000.0
2014 2033.0 4770.133792 4093.907411 100.0 1543.00 5119.0 6800.0 49980.0
2015 1926.0 5183.372793 4228.746421 185.0 2517.75 5500.0 6800.0 49980.0
2016 1697.0 5002.194461 3545.231779 93.0 1944.00 5184.0 6990.0 35980.0
2017 1974.0 4935.767984 3598.236800 54.0 1503.00 4980.0 7000.0 30000.0
2018 9.0 9693.333333 7692.242846 3700.0 7600.00 7800.0 7980.0 29800.0
2019 1.0 2980.000000 NaN 2980.0 2980.00 2980.0 2980.0 2980.0
Hide code cell content
# 各プラットフォーム(`pfname`)ごとに価格(`price`)の統計を取得
# 結果は平均価格でソート
df_pkg_pf[df_pkg_pf["pfid"].isin(pfids)].groupby(["pfname"])[
    "price"
].describe().sort_values("mean")
count mean std min 25% 50% 75% max
pfname
プレイステーション 3715.0 4665.390040 2253.040373 800.0 2800.0 5800.0 5800.0 58000.0
プレイステーション・ポータブル 3411.0 4822.775432 2867.958954 200.0 2800.0 5040.0 5980.0 36729.0
プレイステーション3 2435.0 5803.462423 4075.340210 100.0 3000.0 6000.0 7429.0 49980.0
プレイステーションVita 2215.0 5808.051467 2895.232131 190.0 4600.0 5800.0 6800.0 38076.0
プレイステーション2 4211.0 5888.962954 2759.501278 1500.0 3129.0 6800.0 7140.0 38900.0
Hide code cell content
# 販売会社(publisher)について、各出版社ごとの価格(price)の基本統計量を計算
# 結果は平均価格でソート
df_pkg_pf[df_pkg_pf["publisher"].isin(pubs)].groupby("publisher")[
    "price"
].describe().sort_values("mean")
count mean std min 25% 50% 75% max
publisher
任天堂株式会社 1385.0 3428.166787 3734.275082 200.0 800.0 2800.0 4800.0 40824.0
株式会社ソニー・コンピュータエンタテインメント 899.0 4460.625139 6017.885150 100.0 1500.0 3048.0 5747.5 49800.0
株式会社カプコン 971.0 4659.969104 4591.441594 93.0 2090.0 3990.0 5800.0 48980.0
株式会社バンダイナムコゲームス 1205.0 5268.454772 3757.199341 200.0 2800.0 5122.0 7120.0 39800.0
エレクトロニック・アーツ株式会社 843.0 5630.930012 2862.258948 200.0 3129.0 6090.0 7300.0 39980.0