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"]
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())
このコードを付け加えるとグラフをアニメーション化してくるくると動かすことができるようになります。
○コードの説明
このコードは、PandasとMatplotlibを使用して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という名前のPandasのDataFrameに格納しています。
データの準備:
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は少ないコードでいろいろできて楽しいですね。
0 件のコメント:
コメントを投稿