Steamデータ取得 データ取得

Steam同時接続数を定期取得して可視化する方法|CCU推移をPythonで保存する

2025年10月17日

この記事では、Steamの現在同時接続数(CCU)をPythonで定期取得し、CSVに保存して可視化する方法をまとめます。

CCU取得の考え方

Steam Web APIの ISteamUserStats/GetNumberOfCurrentPlayers を使うと、指定したAppIDの現在同時接続数を取得できます。この値は「取得した瞬間の値」です。過去推移を見たい場合は、自分で定期取得して保存する必要があります。

import requests

def get_current_players(appid: int) -> int:
    url = "https://api.steampowered.com/ISteamUserStats/GetNumberOfCurrentPlayers/v1/"
    params = {"appid": appid}
    response = requests.get(url, params=params, timeout=30)
    response.raise_for_status()
    data = response.json()["response"]
    return int(data["player_count"])

CSVに追記する

import csv
from datetime import datetime, timezone
from pathlib import Path

def append_ccu(appid: int, csv_path: Path) -> None:
    player_count = get_current_players(appid)
    now = datetime.now(timezone.utc).isoformat()

    csv_path.parent.mkdir(parents=True, exist_ok=True)
    exists = csv_path.exists()

    with csv_path.open("a", encoding="utf-8-sig", newline="") as f:
        writer = csv.DictWriter(f, fieldnames=["timestamp_utc", "appid", "player_count"])
        if not exists:
            writer.writeheader()
        writer.writerow({
            "timestamp_utc": now,
            "appid": appid,
            "player_count": player_count,
        })

append_ccu(730, Path("outputs/steam_ccu.csv"))

定期実行する

Windowsならタスクスケジューラ、Linuxならcronで定期実行できます。まずは1時間に1回など、負荷の低い間隔で十分です。細かすぎる間隔で取得しても、分析に使い切れないことが多いです。

pandasで可視化する

import pandas as pd
import plotly.express as px

df = pd.read_csv("outputs/steam_ccu.csv")
df["timestamp_utc"] = pd.to_datetime(df["timestamp_utc"])

fig = px.line(
    df,
    x="timestamp_utc",
    y="player_count",
    color="appid",
    title="Steam CCU trend",
)
fig.show()

分析時の注意

  • 取得間隔が粗いとピークを逃す
  • タイムゾーンはUTCで保存し、表示時に変換する
  • メンテナンスや大型アップデートで急変することがある
  • 1時点のCCUだけで人気や売上を断定しない

まとめ

Steamの同時接続数は現在値として取得できます。推移を見たい場合は、取得時刻と一緒にCSVへ蓄積し、後から可視化します。レビュー分析やアップデート前後の反応を見る補助指標として使うと扱いやすいです。

-Steamデータ取得, データ取得