タイトルのテキスト
タイトルのテキスト
タイトルのテキスト
タイトルのテキスト

Google Colab上でPythonにて3D散布図のアニメーションをつくる

t f B! P L

 

Pythonで重回帰分析を行った時に、3次元の散布図を作ります。Google Colab上で表示させると手動で回転させることができないので、いろいろな角度でグラフを見たい場合、少しずつ設定を変えないといけません。

それが、面倒くさいので今回はグラフをアニメーションにしてみました。

○アニメーションにするメリット

グラフをアニメーション化すると以下のようなメリットがあります。

データの変化を視覚的に理解しやすい:

アニメーションは時間経過に沿ってデータがどのように変化するかを直感的に示すことができます。静止した図よりも、動いているアニメーションはデータのトレンドやパターンを理解しやすくします。

 

相互作用性の向上:

アニメーションを使用すると、ユーザーは視点の変更やアニメーションの一時停止などの操作を行うことができます。これにより、より深い分析や比較が可能になります。

 

説明やプレゼンテーションの効果的な支援:

データのアニメーションは、説明やプレゼンテーションで使用すると、観客にデータの重要な側面やパターンを明確に伝えることができます。特に複雑なデータセットや多次元のデータを扱う場合に有効です。

 

洞察の発見:

アニメーションによって、データの時間的な変化や相関関係、変数間の動的な関係を発見することができる場合があります。特に、データの時間的なトレンドや周期性がある場合に役立ちます。

 

インタラクティブ性の向上:

アニメーションを使用することで、ユーザーはグラフの表示や操作を行いながらデータを理解することができます。これにより、データの深い探索が可能になります。

3次元散布図を書くPythonコード

import pandas as pd

import matplotlib.pyplot as plt

data = pd.read_excel("/content/aaa.xls")

x = data["b"]

y = data["d"]

z = data["c"]

 fig = plt.figure()

aa = plt.subplot(projection="3d")

bb = aa.scatter(x,y,z,color = "red")

このコードで、コラボ上にアップロードしたaaaというExcelファイルからパンダスでデータを抽出して、3次元のグラフを書くことができます。

三次元散布図

 ○アニメーションにするPythonコード

from matplotlib.animation import FuncAnimation

from IPython.display import HTML

def upload(frame):

  aa.view_init(elev=10,azim=frame)

  return bb,

ani = FuncAnimation(fig,upload,frames=range(0,300,5),blit=True)

HTML(ani.to_jshtml())

このコードを付け加えるとグラフをアニメーション化してくるくると動かすことができるようになります。

散布図のアニメ

 ○コードの説明

このコードは、PandasMatplotlibを使用して3次元散布図をアニメーション化し、Googleコラボ上で表示するものです。以下にコードの詳細な説明を示します。

 

ライブラリのインポート:

import pandas as pd

import matplotlib.pyplot as plt

from matplotlib.animation import FuncAnimation

from IPython.display import HTML

pandas: データを操作するためのライブラリ。

matplotlib.pyplot: グラフを描画するためのライブラリ。

FuncAnimation Matplotlibでアニメーションを作成するためのクラス。

HTML:アニメーションを表示するためのクラス。

データの読み込み:

data = pd.read_excel("/content/aaa.xls")

Excelファイル(/content/aaa.xls)からデータを読み込み、dataという名前のPandasDataFrameに格納しています。

データの準備:

x = data["b"]

y = data["d"]

z = data["c"]

DataFrame data から列 "b", "d", "c" を抽出し、それぞれx, y, zに代入しています。これらは3次元散布図の座標として使用されます。

図の設定:

fig = plt.figure()

aa = plt.subplot(projection="3d")

bb = aa.scatter(x, y, z, color="red")

plt.figure() で新しい図を作成し、aa という名前の3次元サブプロットを作成します。

aa.scatter() で散布図を描画し、座標(x, y, z)を使い、全ての点を赤色で表示しています。

アニメーション関数の定義:

def upload(frame):

    aa.view_init(elev=10, azim=frame)

    return bb,

upload 関数は FuncAnimation によってフレームごとに呼び出される関数です。frame はアニメーションのフレーム番号を表します。

aa.view_init(elev=10, azim=frame) で視点の角度を設定しています。elev は上下方向の角度、azim は左右方向の角度です。

アニメーションの作成:

ani = FuncAnimation(fig, upload, frames=range(0, 300, 5), blit=True)

FuncAnimation を使用してアニメーションを作成します。

frames=range(0, 300, 5) 0から299までの数値を5刻みでフレームとして使用します。

blit=True はアニメーションの高速化のためのオプションです。

アニメーションの表示:

HTML(ani.to_jshtml())

ani.to_jshtml() でアニメーションをHTMLの形式に変換し、HTML() を使ってGoogleコラボ上で表示可能な形式に変換します。

このコードは、Excelファイルからデータを読み込んで3次元散布図を描画し、視点をアニメーション化しています。Googleコラボで実行することで、インタラクティブな形式でアニメーションを確認することができます。

○まとめ

Pythonで重回帰分析などを行った時に作る3次元散布図をアニメーション化する方法を説明しました。普通のグラフをアニメーション化すると動きのある資料で説明ができるようになり、説得力を増すことができます。

Pythonは少ないコードでいろいろできて楽しいですね。

koneka1208

koneka1208

自己紹介

自分の写真
エクセル好きの窓際会社員です。 エクセルの操作法や日々の会社で得た知見などを発信していきます。 よろしくお願いします。

ブログ アーカイブ

連絡フォーム

名前

メール *

メッセージ *

QooQ