Google Colabで始める！Pythonの3D描画入門

## はじめに

こんにちは！今回は、Google Colabを使ってPythonで3D描画を楽しんでみましょう。環境構築不要ですぐに始められます！✨

![napkin-selection (2).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2648069/fc7a6df6-c938-723c-86c3-995cd5f4f169.png)


## なぜGoogle Colab？

- ブラウザだけで実行できる
- 環境構築が不要
- 結果を共有しやすい

## 準備

まずはGoogle Colabでノートブックを開きましょう。基本的なライブラリは既にインストールされていますが、plotlyは明示的にインストールする必要があります：

```python
!pip install plotly
```

## 1. 最初の3Dプロット：インタラクティブな散布図

まずは簡単な3D散布図から始めてみましょう：

```python
import plotly.express as px
import numpy as np

# ランダムなデータを生成
n_points = 100
x = np.random.randn(n_points)
y = np.random.randn(n_points)
z = np.random.randn(n_points)
colors = np.random.randn(n_points)

# 3D散布図を作成
fig = px.scatter_3d(x=x, y=y, z=z, color=colors,
                   title='私の最初の3Dプロット')
fig.show()
```

このコードを実行すると、マウスでぐりぐり回せる3Dプロットが表示されます！
カラフルな点が空間に浮かんでいる様子が見えるはずです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2648069/ba25a609-5746-ffa0-3d4d-7d4eae141ded.png)


## 2. 楽しい応用例：3Dアート生成

次は、数式を使って美しい3Dアートを作ってみましょう：

```python
import plotly.graph_objects as go

# データ生成
t = np.linspace(0, 10*np.pi, 1000)
x = np.sin(t) * (np.exp(np.cos(t)) - 2*np.cos(4*t) - np.sin(t/12)**5)
y = np.cos(t) * (np.exp(np.cos(t)) - 2*np.cos(4*t) - np.sin(t/12)**5)
z = t

# 3Dラインプロット
fig = go.Figure(data=[go.Scatter3d(
    x=x, y=y, z=z,
    mode='lines',
    line=dict(
        color=t,
        colorscale='Viridis',
        width=5
    )
)])

fig.update_layout(
    title='数式アート',
    scene = dict(
        camera=dict(
            up=dict(x=0, y=0, z=1),
            center=dict(x=0, y=0, z=0),
            eye=dict(x=1.5, y=1.5, z=1.5)
        )
    )
)

fig.show()
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2648069/c0a1bd0b-4f6f-350b-cbeb-d4a05a0ee4a8.png)


## 3. 実用的な例：地形データの可視化

3D可視化は実用的なデータ分析にも使えます。例えば地形データを可視化してみましょう：

```python
import plotly.graph_objects as go
import numpy as np

# 地形データをシミュレート
size = 100
x = np.linspace(-5, 5, size)
y = np.linspace(-5, 5, size)
X, Y = np.meshgrid(x, y)

# 山っぽい地形を生成
Z = np.sin(np.sqrt(X**2 + Y**2)) * np.exp(-np.sqrt(X**2 + Y**2)/3)

# サーフェスプロット
fig = go.Figure(data=[go.Surface(z=Z, x=X, y=Y)])

fig.update_layout(
    title='3D地形マップ',
    scene = dict(
        xaxis_title='X軸',
        yaxis_title='Y軸',
        zaxis_title='標高'
    )
)

fig.show()
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2648069/41b3bc74-d136-776f-1af9-efb37e02b4d4.png)


## 4. インタラクティブな3Dグラフ：株価データの可視化

実際のデータ分析でよく使う、時系列データの3D可視化も試してみましょう：

```python
import plotly.graph_objects as go
import pandas as pd
import numpy as np
from datetime import datetime, timedelta

# サンプルデータの生成
dates = pd.date_range(start='2023-01-01', periods=30, freq='D')
prices = np.random.normal(100, 10, 30).cumsum() + 1000
volumes = np.random.normal(1000000, 200000, 30)

# 3D可視化
fig = go.Figure(data=[go.Scatter3d(
    x=dates,
    y=volumes,
    z=prices,
    mode='lines+markers',
    marker=dict(
        size=5,
        color=prices,
        colorscale='Viridis',
    ),
    line=dict(color='darkblue', width=2)
)])

fig.update_layout(
    title='株価と取引量の3D時系列プロット',
    scene = dict(
        xaxis_title='日付',
        yaxis_title='取引量',
        zaxis_title='価格'
    )
)

fig.show()
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2648069/34470ffb-fab6-693a-e5fe-55512cd040ce.png)

## まとめ

![napkin-selection (3).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2648069/cf9ee51e-1958-d6fc-7b5e-4ebcc7aa4386.png)

いかがでしたか？Google Colabを使えば、環境構築に悩むことなく3D可視化を楽しめます！

今回紹介したPlotlyには、他にもたくさんの機能があります：

- 様々な3Dグラフタイプ（等高線、ワイヤーフレームなど）
- アニメーション機能
- インタラクティブな操作
- データのホバー表示

## おわりに

3D可視化は、データを新しい視点で見るのに役立ちます。このチュートリアルを通じて、皆さんの分析の幅が広がれば嬉しいです！

### 参考リンク
- [Plotly公式ドキュメント](https://plotly.com/python/)
- [Google Colab](https://colab.research.google.com/)
- [Plotlyギャラリー](https://plotly.com/python/3d-charts/)