0
0

データ分析で3Dプロットを第三角法で使う

Posted at

中学校の技術で立体で何か設計する時にキャビネット図や等角図など色々やりましたが、その中でデータサイエンスにも昇華できると思うのが三角投影図です。
今は三角投影図ではなく第三角法と言われているそうですが(自分が中学校の時は三角投影図と習いましたゆとり世代です)。

第三角法

第三角法では立体図形を右上に置いて左上に上から見た図、左下に横(左)から見た図、右下に正面から見た図を作ります。
イメージ↓
image.png
これを基に、3Dでのプロットで三次元でのプロットだけでは分からない詳細な部分を他の三面図で表します。

関数

from mpl_toolkits.mplot3d import Axes3D
import matplotlib.pyplot as plt
def factor_plot3D(x, y, z, c=None, cmap=None):
    fig = plt.figure(figsize=(16,10))
    ax1 = fig.add_subplot(2, 2, 1)
    ax1.scatter(x, y, cmap=cmap, c=c)
    ax2 = fig.add_subplot(2, 2, 2, projection='3d')
    ax2.scatter(x, y, z, cmap=cmap, c=c)
    ax3 = fig.add_subplot(2, 2, 3)
    ax3.scatter(z, y, cmap=cmap, c=c)
    ax4 = fig.add_subplot(2, 2, 4)
    ax4.scatter(x, z, cmap=cmap, c=c)
    plt.show()

使用例

ここではScikit-Learnのwineデータに対して主成分分析で三次元にしたデータを第三角法の観点からプロットしてみようと思います。

from sklearn.decomposition import PCA
import pandas as pd

df = pd.read_csv("wine.csv")

y = df["Wine"]
x = df.drop("Wine", axis=1)
for col in x.columns:
    x[col] = (x[col] - x[col].mean())/x[col].std()
pca = PCA()
pca.fit(x)
tx = pca.transform(x)
factor_plot3D(tx[:, 0], tx[:, 1], tx[:, 2], c=y, cmap="brg")

Untitled.png
このように3Dのプロットでは右上から観察されているため左から見た図が非常に重要になります。

まとめ

中学校で習ったことも使い方次第では役に立つ。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0