猿でもわかるAIプログラミングシリーズ 🐵💻 Matplotlibでデータの傾向を見てみよう



## Matplotlibでデータの傾向を見てみよう！グラフで「なんとなく」を「見える化」

---

### 1. はじめに：AI以前に「データを見る」ことの大切さ

AIや機械学習というと、どうしても「モデル」「精度」「チューニング」といったキーワードに注目しがちです。でも実務の現場では、「そもそもデータがどうなっているか？」を正しく把握することが何よりも大切です。

実際、筆者が過去に関わったプロジェクトでも、「データの偏りを見落として精度が出なかった」「欠損値が多いことに気づかず学習が破綻した」といったケースが何度もありました。

そこで今回は、Python界隈で定番の可視化ライブラリ「Matplotlib」を使って、データの傾向を**視覚的に直感的に理解する**方法を解説します！

---

### 2. Matplotlibとは？なぜ使われ続けるのか

**Matplotlib**はPythonで最も古くからある可視化ライブラリのひとつで、
`matplotlib.pyplot` モジュールを中心に、折れ線グラフ、棒グラフ、散布図、ヒートマップなど様々なグラフを描画できます。

競合として `seaborn` や `plotly` などもありますが、Matplotlibは以下の理由で未だに実務でよく使われています：

* **シンプルで柔軟**：細かいカスタマイズが効く
* **エコシステムとの親和性**：NumPyやPandasと相性が良い
* **Jupyter Notebookとの統合**：インラインでグラフが見やすい

---

### 3. 実践！MatplotlibでCSVデータの傾向を見てみよう

今回は、ある架空の会社の「社員の勤怠データ（出勤時間と退勤時間）」を使って、基本的なグラフ化をやってみましょう。

#### 3.1 データの準備（CSVファイルを読み込む）

```csv
# attendance.csv
name,date,start_time,end_time
田中,2025-05-20,08:45,18:10
佐藤,2025-05-20,09:10,17:55
鈴木,2025-05-20,08:30,19:00
...
```

```python
import pandas as pd
import matplotlib.pyplot as plt

# データ読み込み
df = pd.read_csv('attendance.csv', parse_dates=['date'])

# 出勤・退勤時間をdatetime型に変換
df['start_time'] = pd.to_datetime(df['date'].astype(str) + ' ' + df['start_time'])
df['end_time'] = pd.to_datetime(df['date'].astype(str) + ' ' + df['end_time'])

# 勤務時間を計算
df['work_hours'] = (df['end_time'] - df['start_time']).dt.total_seconds() / 3600
```

#### 3.2 棒グラフで個人別の勤務時間を比較

```python
plt.figure(figsize=(10, 6))
plt.bar(df['name'], df['work_hours'], color='skyblue')
plt.ylabel('勤務時間（時間）')
plt.title('社員ごとの勤務時間')
plt.xticks(rotation=45)
plt.grid(True, axis='y', linestyle='--', alpha=0.7)
plt.tight_layout()
plt.show()
```

📊 このグラフを見れば、誰が長時間働いているかが一目で分かります。

#### 3.3 勤務時間の分布を見る（ヒストグラム）

```python
plt.hist(df['work_hours'], bins=8, color='salmon', edgecolor='black')
plt.xlabel('勤務時間（時間）')
plt.ylabel('人数')
plt.title('勤務時間の分布')
plt.grid(True, linestyle='--', alpha=0.5)
plt.show()
```

🔍 勤務時間の偏りがあるかどうか、働きすぎている社員はいないか？などがわかります。

---

### 4. 実務でよくあるミスとTips

#### ✅ よくあるミス

| ミス内容              | 解説                     |
| ----------------- | ---------------------- |
| `plt.show()` を忘れる | Jupyter以外ではグラフが表示されません |
| データがNaNなのに気づかない   | 欠損があるとグラフが歪むことも        |
| 軸ラベルをつけない         | 意味の分からないグラフになる         |

#### 💡 実務Tips

* `plt.xticks(rotation=45)` などで**軸ラベルの重なり回避**
* `figsize`で**プレゼン用に大きめに設定**
* `color`で**部署ごとに色分けする**と視認性UP
* `tight_layout()` で**グラフがはみ出さないように調整**

---

### 5. 応用：時間の推移を見る折れ線グラフ（トレンド分析）

```python
# 日ごとの平均勤務時間の推移
daily_avg = df.groupby('date')['work_hours'].mean()

plt.plot(daily_avg.index, daily_avg.values, marker='o', linestyle='-')
plt.title('日ごとの平均勤務時間の推移')
plt.xlabel('日付')
plt.ylabel('平均勤務時間（時間）')
plt.grid(True, linestyle='--', alpha=0.5)
plt.xticks(rotation=45)
plt.tight_layout()
plt.show()
```

📈 これはまさに「トレンドを見る」用途。
プロジェクト前後での働き方の変化や、月末繁忙なども把握できます。

---

### 6. まとめ：グラフは最強のデバッグツール

| 項目 | 内容                              |
| -- | ------------------------------- |
| 利点 | データの傾向や異常を直感的に発見できる             |
| 欠点 | グラフの種類や設定ミスで誤解を生むことも            |
| 今後 | SeabornやPlotlyとの連携でさらにリッチに可視化可能 |

---

### 🎯 さいごに

AIや機械学習に取り組む上で、まずは「データを理解する」ことが何よりも大切です。そしてそのためには、**グラフによる可視化が一番の近道**。

Matplotlibは少し地味ですが、使いこなせば非常にパワフルです。ぜひこの記事を参考に、実際の業務データで「見える化」を試してみてください！

---

ご質問・フィードバックなどあればぜひコメント欄へ🐵💬
次回は「NumPyだけで作るミニAIモデル」に挑戦予定です！お楽しみに！

---

🔗 GitHubにサンプルコードも公開予定です（希望があればぜひ教えてください）