Pythonデータ分析と可視化の基本

## 前書き

Pythonはデータ分析や可視化の分野で非常に強力なツールを提供しています。本記事では、具体的なデータ分析と可視化の例を通じて、Pythonを使った実践的な手法を紹介します。
実行結果を加えてQiita用の記事としてまとめます。以下に実行結果の画像を含めた完全な記事を示します。

## 1. データの作成と基本統計量の計算

Pythonでは、データの作成とその基本統計量の計算が簡単に行えます。以下はその具体例です。

まず、ランダムデータを含むDataFrameを作成します。このDataFrameには3つの列（A、B、C）があり、それぞれランダムな数値が格納されています。

```python
import pandas as pd
import numpy as np

# サンプルデータの作成
data = pd.DataFrame({
    'A': np.random.randn(100),
    'B': np.random.rand(100),
    'C': np.random.rand(100)
})
```

次に、各列の基本統計量（平均、中央値、分散、標準偏差）を計算して表示します。これにより、データの中心傾向やばらつきを把握できます。

```python
# 基本統計量の計算と表示
print("Mean:\n", data.mean())
print("Median:\n", data.median())
print("Variance:\n", data.var())
print("Standard Deviation:\n", data.std())
```

### 実行結果

```
Mean:
 A    -0.048305
B     0.510058
C     0.491047
dtype: float64
Median:
 A    -0.063992
B     0.499608
C     0.508349
dtype: float64
Variance:
 A    0.982269
B    0.091010
C    0.085688
dtype: float64
Standard Deviation:
 A    0.991104
B    0.301681
C    0.292748
dtype: float64
```

## 2. データの可視化

データの可視化は、データの特性を視覚的に理解するために重要です。以下は、MatplotlibとSeabornを使用したデータの可視化の例です。

### ヒストグラムの作成

ヒストグラムを使用すると、データの分布を視覚的に確認できます。

```python
import matplotlib.pyplot as plt

# ヒストグラムの作成
plt.figure(figsize=(10, 6))
plt.hist(data['A'], bins=30, alpha=0.5, label='A')
plt.hist(data['B'], bins=30, alpha=0.5, label='B')
plt.hist(data['C'], bins=30, alpha=0.5, label='C')
plt.legend(loc='upper right')
plt.title('Histogram')
plt.show()
```

### 実行結果

![スクリーンショット 2024-08-02 22.27.59.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3851752/6457a0f0-5ed0-da12-bf29-a678ab8747c8.png)


### 散布図の作成

散布図は、2つの変数間の関係を視覚的に確認するために使用されます。

```python
# 散布図の作成
plt.figure(figsize=(10, 6))
plt.scatter(data['A'], data['B'], alpha=0.5)
plt.title('Scatter Plot between A and B')
plt.xlabel('A')
plt.ylabel('B')
plt.show()
```

### 実行結果

![スクリーンショット 2024-08-02 22.29.08.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3851752/bb9ad33e-29a4-1a23-711d-2b50b06ed743.png)


### 箱ひげ図の作成

箱ひげ図は、データの分布や異常値を視覚的に確認するためのツールです。

```python
import seaborn as sns

# 箱ひげ図の作成
plt.figure(figsize=(10, 6))
sns.boxplot(data=data)
plt.title('Box Plot')
plt.show()
```

### 実行結果

![スクリーンショット 2024-08-02 22.30.09.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3851752/b153d410-4574-722a-079b-54922e9445c7.png)


## 3. データのクリーニング

データ分析において、データのクリーニングは欠かせないステップです。以下は、欠損値の処理や異常値の検出と処理の例です。

### 欠損値の処理

データに欠損値が含まれている場合、適切な方法で補完する必要があります。

```python
# 欠損値の処理
data_with_nan = data.copy()
data_with_nan.iloc[0, 0] = np.nan  # 一つの欠損値を追加
print("Before filling NaN:\n", data_with_nan.head())

# 欠損値の補完
data_filled = data_with_nan.fillna(data_with_nan.mean())
print("After filling NaN:\n", data_filled.head())
```

### 実行結果

```
Before filling NaN:
          A         B         C
0       NaN  0.583585  0.850682
1  0.283692  0.563157  0.763359
2  0.872019  0.295104  0.293991
3 -0.064257  0.682568  0.309063
4 -1.061786  0.336252  0.266989

After filling NaN:
          A         B         C
0 -0.048305  0.583585  0.850682
1  0.283692  0.563157  0.763359
2  0.872019  0.295104  0.293991
3 -0.064257  0.682568  0.309063
4 -1.061786  0.336252  0.266989
```

### 異常値の検出と処理

異常値はデータ分析の結果を歪める可能性があるため、適切に処理する必要があります。

```python
# 異常値の検出と処理
data_with_outliers = data.copy()
data_with_outliers.iloc[0, 0] = 999  # 一つの異常値を追加
print("Before removing outliers:\n", data_with_outliers.head())

# 異常値の処理
data_without_outliers = data_with_outliers[data_with_outliers['A'] < 3]
print("After removing outliers:\n", data_without_outliers.head())
```

### 実行結果

```
Before removing outliers:
            A         B         C
0  999.000000  0.583585  0.850682
1    0.283692  0.563157  0.763359
2    0.872019  0.295104  0.293991
3   -0.064257  0.682568  0.309063
4   -1.061786  0.336252  0.266989

After removing outliers:
           A         B         C
1   0.283692  0.563157  0.763359
2   0.872019  0.295104  0.293991
3  -0.064257  0.682568  0.309063
4  -1.061786  0.336252  0.266989
5   0.281592  0.212844  0.489092
```

## 4. Seabornによるペアプロットの作成

Seabornは、統計データの可視化を簡単に行うための高レベルなインターフェースを提供します。ペアプロットは、複数の変数間の関係を視覚的に確認するのに役立ちます。

```python
# ペアプロットの作成
sns.pairplot(data)
plt.show()
```

### 実行結果

![スクリーンショット 2024-08-02 22.31.05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3851752/850ed92a-eca1-ff2a-90b6-67fad44abc9c.png)


## 5. Bokehによるインタラクティブなプロットの作成

Bokehは、インタラクティブなWebベースの可視化を作成するためのライブラリです。以下は、Bokehを使用したインタラクティブな散布図の作成例です。

```python
from bokeh.plotting import figure, show, output_file
import webbrowser

# HTMLファイルに出力
output_file("scatter_plot.html")

# Bokehプロットの作成
p = figure(title="Scatter Plot of A vs B", x_axis_label='A', y_axis_label='B')

# 散布図の追加
p.scatter(data['A'], data['B'], legend_label='A vs B', fill_alpha=0.6, size=10)

# プロットの表示
show(p)

# ブラウザで自動的に開く
webbrowser.open("scatter_plot.html")
```

### 実行結果

![スクリーンショット 2024-08-02 22.32.02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3851752/5706e955-6b1a-44bc-1c9d-941e42928272.png)


## まとめ
この記事では、データの基本統計量の計算と可視化、データのクリーニング、インタラクティブなプロットの作成など、Pythonを使ったデータ分析と可視化の基本的な手法を紹介しました。各モジュールの使い方を理解し、実際に手を動かして試してみてください。