Altairで始めるPythonデータ可視化入門

## 第1章: Altairとは

Altairは、Pythonで簡単に美しいグラフを作成できる強力なデータ可視化ライブラリです。Vega及びVega-Liteという可視化文法に基づいており、直感的なAPIを提供しています。

Altairの特徴:
- 宣言的な文法
- インタラクティブな可視化
- 統計的な変換のサポート
- 多様なグラフタイプ

## 第2章: Altairのインストールと基本設定

まずはAltairをインストールしましょう。

```python
!pip install altair vega_datasets

import altair as alt
from vega_datasets import data

# Jupyter環境での設定
alt.renderers.enable('default')
```

これでAltairを使う準備が整いました。

## 第3章: 最初の散布図

簡単な散布図を作成してみましょう。

```python
# データの準備
cars = data.cars()

# 散布図の作成
chart = alt.Chart(cars).mark_point().encode(
    x='Horsepower',
    y='Miles_per_Gallon',
    color='Origin'
)

chart
```

このコードでは、自動車のデータを使って馬力と燃費の関係を示す散布図を作成しています。

## 第4章: エンコーディングの詳細

Altairでは、データの各側面をグラフの視覚的要素にマッピングすることを「エンコーディング」と呼びます。

```python
chart = alt.Chart(cars).mark_point().encode(
    x=alt.X('Horsepower', title='馬力'),
    y=alt.Y('Miles_per_Gallon', title='燃費 (マイル/ガロン)'),
    color=alt.Color('Origin', title='製造国'),
    size=alt.Size('Weight_in_lbs', title='重量 (ポンド)')
)

chart
```

この例では、X軸、Y軸、色、サイズにそれぞれデータの属性をマッピングしています。

## 第5章: マークの種類

Altairでは様々な「マーク」を使ってデータを表現できます。

```python
# 棒グラフ
bar_chart = alt.Chart(cars).mark_bar().encode(
    x='Origin',
    y='count()',
    color='Origin'
)

# 折れ線グラフ
line_chart = alt.Chart(cars).mark_line().encode(
    x='Year',
    y='average(Miles_per_Gallon)',
    color='Origin'
)

bar_chart | line_chart
```

この例では棒グラフと折れ線グラフを作成し、横に並べて表示しています。

## 第6章: インタラクティブな可視化

Altairの強みの一つは、簡単にインタラクティブな要素を追加できることです。

```python
brush = alt.selection_interval()

chart = alt.Chart(cars).mark_point().encode(
    x='Horsepower',
    y='Miles_per_Gallon',
    color=alt.condition(brush, 'Origin', alt.value('lightgray'))
).add_selection(brush)

chart
```

このコードでは、ユーザーがグラフ上で範囲選択できるインタラクティブな散布図を作成しています。

## 第7章: 複数のビューの連携

Altairでは複数のグラフを連携させることができます。

```python
brush = alt.selection_interval()

points = alt.Chart(cars).mark_point().encode(
    x='Horsepower',
    y='Miles_per_Gallon',
    color=alt.condition(brush, 'Origin', alt.value('lightgray'))
).add_selection(brush)

bars = alt.Chart(cars).mark_bar().encode(
    y='Origin',
    color='Origin',
    x='count(Origin)'
).transform_filter(brush)

points & bars
```

この例では、散布図で選択した範囲に応じて棒グラフの内容が変化します。

## 第8章: データ変換

Altairには強力なデータ変換機能があります。

```python
chart = alt.Chart(cars).mark_bar().encode(
    x='Year:O',
    y='mean(Miles_per_Gallon):Q',
    color='Origin:N'
).transform_filter(
    alt.datum.Miles_per_Gallon > 0
)

chart
```

このコードでは、年ごとの平均燃費を計算し、燃費が0より大きいデータのみをフィルタリングしています。

## 第9章: ファセット（小多重）

ファセットを使うと、データのサブセットごとに小さなグラフを作成できます。

```python
chart = alt.Chart(cars).mark_point().encode(
    x='Horsepower',
    y='Miles_per_Gallon',
    color='Origin'
).facet(
    column='Origin'
)

chart
```

この例では、製造国ごとに散布図を作成しています。

## 第10章: カスタムスケール

スケールをカスタマイズすることで、グラフの見た目を細かく調整できます。

```python
chart = alt.Chart(cars).mark_point().encode(
    x=alt.X('Horsepower', scale=alt.Scale(domain=[0, 250])),
    y=alt.Y('Miles_per_Gallon', scale=alt.Scale(domain=[0, 50])),
    color=alt.Color('Origin', scale=alt.Scale(scheme='category10'))
)

chart
```

この例では、X軸とY軸の範囲、色のスキームをカスタマイズしています。

## 第11章: レイヤー化

複数のレイヤーを重ねることで、複雑なグラフを作成できます。

```python
base = alt.Chart(cars).encode(x='Year:O')

line = base.mark_line().encode(
    y='mean(Miles_per_Gallon)'
)

points = base.mark_point().encode(
    y='Miles_per_Gallon'
)

chart = line + points

chart
```

この例では、平均燃費の折れ線グラフと個々のデータポイントを重ねています。

## 第12章: テーマの適用

Altairには複数のテーマが用意されており、グラフの全体的な見た目を簡単に変更できます。

```python
alt.themes.enable('dark')

chart = alt.Chart(cars).mark_point().encode(
    x='Horsepower',
    y='Miles_per_Gallon',
    color='Origin'
)

chart
```

この例では、ダークテーマを適用しています。

## 第13章: 保存と共有

作成したグラフは様々な形式で保存できます。

```python
chart = alt.Chart(cars).mark_point().encode(
    x='Horsepower',
    y='Miles_per_Gallon',
    color='Origin'
)

# HTMLとして保存
chart.save('chart.html')

# PNGとして保存
chart.save('chart.png')

# SVGとして保存
chart.save('chart.svg')
```

これらの形式で保存することで、簡単に他の人と共有できます。

## 第14章: 高度な統計処理

Altairは高度な統計処理も簡単に行えます。

```python
chart = alt.Chart(cars).mark_point().encode(
    x='Horsepower',
    y='Miles_per_Gallon'
).transform_regression(
    'Horsepower', 'Miles_per_Gallon'
).mark_line()

points = alt.Chart(cars).mark_point().encode(
    x='Horsepower',
    y='Miles_per_Gallon'
)

chart + points
```

この例では、散布図に回帰直線を追加しています。

## 第15章: 応用例：ダッシュボード作成

最後に、これまでの知識を組み合わせてダッシュボードを作成してみましょう。

```python
brush = alt.selection_interval()

points = alt.Chart(cars).mark_point().encode(
    x='Horsepower',
    y='Miles_per_Gallon',
    color=alt.condition(brush, 'Origin', alt.value('lightgray'))
).add_selection(brush)

bars = alt.Chart(cars).mark_bar().encode(
    y='Origin',
    color='Origin',
    x='count(Origin)'
).transform_filter(brush)

hist = alt.Chart(cars).mark_bar().encode(
    x='Weight_in_lbs',
    y='count()',
    color='Origin'
).transform_filter(brush)

(points & bars) | hist
```

このコードでは、散布図、棒グラフ、ヒストグラムを組み合わせたインタラクティブなダッシュボードを作成しています。

以上で、Altairを使ったPythonデータ可視化の基本から応用までを網羅しました。Altairの強力な機能を活用することで、データから洞察を得るための美しく効果的な可視化を簡単に作成できます。ぜひ自分のデータで試してみてください。