Toma(とま)のゲーム日記

MHNOW、MHWIB、ELDEN RING、WILD HEARTSなどの役立ち情報をアップしていきます。ツイッターでの懸賞応募、自炊、家庭菜園といろいろ始めました。

記事内に商品プロモーションを含む場合があります。

Pythonで魅せる!note記事別PV推移をアニメーション動画にする方法

Pythonを使ってグラフを動画化(MP4/GIF)するプロジェクト、ついに完成しました!

今回は、noteの累計PV推移を2記事ずつペアで登場させ、各ステップで「溜め」を作ることで、データの推移をじっくり観察できる仕様にこだわっています。50代エンジニアとしてのロジカルな分析と、視覚的な楽しさを融合させた「動くレポート」の作り方を共有します。

第1章:動画化に必要なライブラリと環境構築

グラフを動かし、さらにそれを動画ファイルとして保存するためには、いくつかのライブラリが必要です。特に動画保存には外部のエンコーダーが必要になる点に注意しましょう。

1. 使用するライブラリ

  • matplotlib: グラフ描画の本体です。標準のアニメーション機能(FuncAnimation)を使用します。
  • pandas: PVデータなどの時系列データを効率よく扱うために使用します。
  • Pillow: GIF形式で保存する場合に必要となるバックエンドです。

2. 動画保存(MP4)に必要なツール

  • ffmpeg: MP4形式で書き出すための強力な動画処理エンジンです。Pythonライブラリではなく、OS自体にインストールする必要があります。

3. インストール方法

以下のコマンドをターミナル(またはコマンドプロンプト)で実行して、環境を整えます。

# ライブラリの一括インストール
pip install matplotlib pandas pillow

※ffmpegについては、公式サイトからバイナリをダウンロードし、パス(PATH)を通しておく必要があります。

第2章:こだわり抜いた「魅せる」アニメーション実装

今回のコードの肝は、単に線を引くのではなく、「2記事ずつの並走」「ステップごとの一時停止(Hold)」を組み込んだ点です。

# 2記事ずつ表示し、終わるごとに一時停止を入れるロジック
hold_frames = 7  # 停止用のフレーム数
cycle_len = num_days + hold_frames

def update(frame):
    ax.clear()
    ax.set_xlim(xmin, xmax) # 4/1~4/22で固定
    
    group_idx = frame // cycle_len
    sub_frame = frame % cycle_len
    
    # 2記事ずつのピックアップ表示
    if group_idx < (num_articles // 2):
        # 描画とタイトルの更新処理...

第3章:エンジニア視点での可視化のメリット

静止画のグラフでは「最終的な結果」しか見えませんが、動画にすることで「どのタイミングでどの記事が逆転したか」という時間軸の解像度が飛躍的に高まります。

特に、4/20に向けて急上昇するラインは、施策の効果やSNSでの拡散をリアルに物語っていますね。これこそがデータ分析の醍醐味と言えるでしょう。

↓動画に変更した状態

今回の動画化を経て、noteの累計PVも無事に4,000突破を記録しました。次はどのようなデータを動かしてみようか、今から楽しみです!


詳細な分析や日々の試行錯誤は、こちらのリンクもぜひご覧ください。

Tomaのゲーム日記(はてなブログ)

【AI利用に関する開示】当ブログの一部コンテンツには、AI(人工知能)による執筆支援や画像生成を使用しています。