Pythonで3次元プロットをして散布図を作ろう

# 概要
pythonで３次元の散布図を作成します。

# 事前準備
今回**Anaconda**で実行しています。そのため先にAnacondaのインストールをお願い致します。

https://www.anaconda.com/download

## Anacondaがインストールされている方はこちら
Excelで拡張子がcsvとなっているファイルを作成してください。その中に分析したいデータを入れてください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3553821/43800d27-3f91-e424-e8e2-1e9df8862beb.png)

:::note warn
身内の話になりますが、本来統計学で使用したCollege Analysisを使用したときA列の１行目には空白ですが、今回使用するコードでは、A列に１行目に題名が必要です。今回私だと、下に県名が書いてあるのでA列１行目に**県名**と書いてください。
:::
そしてこれを作ったら適当にどこでもいいので保存してください。

:::note warn
保存した場所は覚えておくこと!!
:::
# コード解説
最初にしてもしなくてもいいのですが、新規ファイルを押して新しいファイルを作成してください。(既に何も書いないまっさらなファイルがある人はする必要性はないです。)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3553821/7396c397-d4fd-e181-87df-f19c19ffa5d5.png)
最初にパッケージをインポートしてください。これをインポートしないと使えないです。
``` python
#パッケージをインポート
from matplotlib import pyplot as plt
import pandas as pd
```
次に軸の名前などに対して日本語が使えるようにします。
``` python
#日本語フォントを使えるようにする
plt.rcParams['font.family'] = 'Meiryo'
```

:::note info
今回私の環境ではこの行を書かなくても日本語表示されているため、正直いらないですが、どのような条件で英語表記や□文字になるのかわからないため、一応念のため書いておきます。(いらない人はけしてくださっても構いません。)
:::
### 次にcsvファイルを読み込みます
```
#csvの読み込み
df = pd.read_csv(r"C:\Users\hakue\OneDrive\デスクトップ\統計学Ⅱ\analys-data.csv", encoding="utf-8")
```
保存した先のパスをコピーでここにもって来るのですが、注意点としてそのまま持ってくると、`"C:\Users\hakue\OneDrive\デスクトップ\統計学Ⅱ\analys-data.csv"`となり`\`がエスケープ文字になってしまうため最初に`r`を付けてください。
つまり
```
df = pd.read_csv(r"ここを自分のおいてあるファイルパスにする", encoding="utf-8")
```
という事です。
次に、プロットする図を製作していこうと思います。
```python
#3bプロットをする新たな図(Fiugre)を作成する
fig = plt.figure()
ax =fig.add_subplot(111, projection = "3d")
ax.scatter(df["主成分1"], df["皮の薄さ"],df["主成分3"], color=colorlist)
```
最後の一文の`主成分１`、`皮の薄さ`、`主成分3`は自身が置いたcsvファイルの名前に変えてください。
以下のようにcsvファイルの行名と一致させることが重要です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3553821/e1a1beb6-4e93-bef3-61ca-74fd6ba2a3ec.png)

:::note warn
ここで全角・半角で名前が一致しないエラーを吐く場合があるので、できるだけcsvファイルの行名をコピーした方が安全です。
:::
### 軸名と点のプロットについて
```python
#軸の名前を付ける
ax.set_xlabel('X軸の名前', fontdict={'fontsize': 10, 'fontweight': 'medium'})
ax.set_ylabel('y軸の名前', fontdict={'fontsize': 10, 'fontweight': 'medium'})
ax.set_zlabel('z軸の名前', fontdict={'fontsize': 10, 'fontweight': 'medium'})

#県名をプロットされた点に対して名前を付ける
for i in range(len(df)):
    ax.text(df.iloc[i]['主成分1'], df.iloc[i]['皮の薄さ'], df.iloc[i]['主成分3'], df.iloc[i]["県名"])

```
ここでは、x軸、y軸、z軸それぞれに対して軸名とプロットされた点に対して、県名を付けてどの点がどの県なのかを判別しています。`[i]`の後ろの`[主成分1]`のところは、対応する行名に変えてください。

## 結果
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3553821/161e6277-126f-afaa-c8de-3bcae6f87834.png)

## 応用
プロットされたときのデフォルトの色は青色ですが、色を変えたい人は、
```python
colorlist = ["#FFA500"] #オレンジ色
```
を加えて
```python
#3bプロットをする新たな図(Fiugre)を作成する
fig = plt.figure()
ax =fig.add_subplot(111, projection = "3d")
ax.scatter(df["主成分1"], df["皮の薄さ"],df["主成分3"], color=colorlist)
```
最後に`color=colorlist`を加えてください。
そうすることで色を変える事ができます。
# 全体コード
```python
#パッケージをインポート

from matplotlib import pyplot as plt
import pandas as pd

#日本語フォントを使えるようにする
plt.rcParams['font.family'] = 'Meiryo'

#csvの読み込み
df = pd.read_csv(r"C:\Users\hakue\OneDrive\デスクトップ\統計学Ⅱ\analys-data.csv", encoding="utf-8")

colorlist = ["#FFA500"]

#3bプロットをする新たな図(Fiugre)を作成する
fig = plt.figure()
ax =fig.add_subplot(111, projection = "3d")
ax.scatter(df["主成分1"], df["皮の薄さ"],df["主成分3"], color=colorlist)

#軸の名前を付ける
ax.set_xlabel('X軸の名前', fontdict={'fontsize': 10, 'fontweight': 'medium'})
ax.set_ylabel('y軸の名前', fontdict={'fontsize': 10, 'fontweight': 'medium'})
ax.set_zlabel('z軸の名前', fontdict={'fontsize': 10, 'fontweight': 'medium'})

#県名をプロットされた点に対して名前を付ける
for i in range(len(df)):
    ax.text(df.iloc[i]['主成分1'], df.iloc[i]['皮の薄さ'], df.iloc[i]['主成分3'], df.iloc[i]["県名"])
```
# 最後に
初心者が書いてあるのでもっと効率的に書く方法があるかもしれません。その時は教えてください。

**一応Gitに上げたものを置いておきます。**

https://github.com/Thakuei/statistics

ここまで読んでいただきありがとうございます。