Plotly超入門:データ可視化の新境地

Plotly超入門:データ可視化の新境地

データにあふれた現代において、情報を正確に理解し、効果的に伝えることは、あらゆる分野で重要性を増しています。膨大なデータの山から意味を見出し、価値を引き出すためには、データ可視化が欠かせません。

データ可視化とは、データをグラフやチャートなどの視覚的な形式に変換することで、隠れたパターンや傾向を明らかにするプロセスです。複雑な情報を直感的に理解できる形にすることで、データ分析をより深く、よりスムーズに進めることができます。

そして、データ可視化をより効果的に、より魅力的に行うための強力なツールが、Plotlyです。Pythonでインタラクティブなグラフを作成できるPlotlyは、多様なグラフとチャート、豊富なカスタマイズオプション、そしてアニメーション機能などを備え、データに命を吹き込みます。

本記事では、Plotlyで描画できる様々なグラフとチャートを紹介します。

Plotlyとは?

 データ可視化の重要性

データにあふれた現代において、情報を正確に理解し、効果的に伝えることは、あらゆる分野で重要性を増しています。膨大なデータの山から意味を見出し、価値を引き出すためには、データ可視化が欠かせません。

データ可視化とは、データをグラフやチャートなどの視覚的な形式に変換することで、隠れたパターンや傾向を明らかにするプロセスです。複雑な情報を直感的に理解できる形にすることで、データ分析をより深く、よりスムーズに進めることができます。

そして、データ可視化をより効果的に、より魅力的に行うための強力なツールが、Plotlyです。Pythonでインタラクティブなグラフを作成できるPlotlyは、多様なグラフとチャート、豊富なカスタマイズオプション、そしてアニメーション機能などを備え、データに命を吹き込みます。

 

 なぜPlotlyを選ぶのか?

Plotlyには、他のデータ可視化ライブラリにはない、多くの魅力的な特徴があります。

インタラクティブ性

Plotlyで作成されたグラフは、ズーム、パン、ホバーなどの操作によって動的に探索することができます。これにより、データの細部まで深く理解することができます。

多様なグラフとチャート

Plotlyは、折れ線グラフ、散布図、棒グラフ、円グラフなど、基本的なグラフはもちろんのこと、ヒートマップ、箱ひげ図、バイオリンプロットなど、統計的なグラフも豊富にサポートしています。

カスタマイズ性

Plotlyでは、グラフの色、サイズ、ラベルなどを自由に設定することができます。これにより、自分の好みに合わせた、見やすく美しいグラフを作成することができます。

アニメーション

データの変化をアニメーションで表現することができます。時間軸に沿ったデータの推移を視覚的に表現するのに最適です。

地図との連携

地図上にデータをプロットすることができます。地理空間的な情報を可視化するのに役立ちます。

これらの特徴により、Plotlyはデータ分析、機械学習、科学技術計算、ビジネスインテリジェンスなど、様々な分野で活用されています。

 

 Plotlyライブラリをインストール

Plotlyを始めるには、まずライブラリをインストールする必要があります。

pip install plotly

 

基本的なグラフとチャート

 折れ線グラフ (Line Plot)

折れ線グラフは、時系列データや連続的なデータの変化を表現するのに最適です。

Plotlyでは、plotly.expressモジュールを使うことで、簡単に折れ線グラフを作成できます。

以下、コードです。

import plotly.express as px

df = px.data.gapminder().query("country=='Canada'")
fig = px.line(
    df, # DataFrame
    x="year", # 横軸
    y="lifeExp", # 縦軸
    title='カナダの平均寿命の推移', # タイトル 
    labels={
        "year": "年", 
        "lifeExp": "平均寿命"
    } # ラベル
)
fig.show()

 

以下、実行結果です。

 

 散布図 (Scatter Plot)

散布図は、2つの変数の関係性を可視化するのに役立ちます。

Plotlyでは、plotly.express.scatter関数を使って散布図を作成できます。

以下、コードです。

import plotly.express as px

df = px.data.iris()
fig = px.scatter(
    df, # DataFrame
    x="sepal_width", # 横軸
    y="sepal_length", # 縦軸
    color="species", # カラー
    title='花の幅と長さの関係', # タイトル
    labels={
        "sepal_width": "幅", 
        "sepal_length": "長さ"
    } # ラベル
)
fig.show()

 

以下、実行結果です。

 

 バブルチャート (Bubble Plot)

バブルチャートは、散布図に第3の変数をバブルの大きさで表現したグラフです。

Plotlyでは、plotly.express.scatter関数のsize引数に第3の変数を指定することで、バブルチャートを作成できます。

以下、コードです。

import plotly.express as px

df = px.data.gapminder()

fig = px.scatter(
    df.query("year==2007"), # DataFrame
    x="gdpPercap", # 横軸
    y="lifeExp", # 縦軸
    size="pop", # サイズ
    color="continent", # カラー
    hover_name="country", # マウスオーバーラベル
    log_x=True, # 横軸が対数スケール
    title="2007年のGDPと平均寿命の関係", # タイトル
    size_max=60, # サイズの最大値
    labels={
        "gdpPercap": "1人当たりGDP", 
        "lifeExp": "平均寿命", 
        "continent": "大陸", 
        "pop": "人口"
    }, # ラベル
)
fig.show()

 

以下、実行結果です。

 

 ヒストグラム (Histogram)

ヒストグラムは、データの分布を可視化するのに使用されます。

Plotlyでは、plotly.express.histogram関数を使ってヒストグラムを作成できます。

以下、コードです。

import plotly.express as px

df = px.data.tips()
fig = px.histogram(
    df, # DataFrame
    x="total_bill", # 横軸
    nbins=30, # ヒストグラムの分割数
    title="請求額のヒストグラム", # タイトル
    labels={"total_bill": "請求額"} # ラベル
)
fig.show()

 

以下、実行結果です。

 

 バーチャート (Bar Chart)

バーチャートは、カテゴリ別のデータの値を比較するのに便利です。

Plotlyでは、plotly.express.bar関数を使ってバーチャートを作成できます。

以下、コードです。

import plotly.express as px

df = px.data.gapminder().query("continent == 'Oceania'")
fig = px.bar(
    df, # DataFrame
    x='year', # 横軸
    y='pop', # 縦軸
    color='country', # カラー
    title='オセアニアの人口推移', # タイトル
    labels={
        "year": "年", 
        "pop": "人口", 
        "country": "国"
    } # ラベル
)
fig.show()

 

以下、実行結果です。

 

 円グラフ (Pie Chart)

円グラフは、全体に対する各部分の割合を可視化するのに使用されます。

Plotlyでは、plotly.express.pie関数を使って円グラフを作成できます。

以下、コードです。

import plotly.express as px

df = px.data.tips()
fig = px.pie(
    df, # DataFrame
    values='tip', # 円グラフの値
    names='day', # 円グラフの名前
    title="曜日ごとのチップ額の割合",  # タイトル
    labels={
        "tip": "チップ額", 
        "day": "曜日"
    }  # ラベル
)
fig.show()

 

以下、実行結果です。

 

 面グラフ (Area Plot)

面グラフは、時系列データの推移を、面積で表現するグラフです。

Plotlyでは、plotly.express.area関数を使って面グラフを作成できます。

以下、コードです。

import plotly.express as px

df = px.data.gapminder().query("continent == 'Asia'")
fig = px.area(
    df, 
    x="year", # 横軸
    y="pop", # 縦軸
    color="country", # カラー
    title='アジアの人口推移', # タイトル
    labels={
        "year": "年", 
        "pop": "人口", 
        "country": "国"
    } # ラベル
)
fig.show()

 

以下、実行結果です。

 

これらのグラフは、Plotlyで作成できる基本的なグラフの一部です。

Plotlyは、さらに多くのグラフとチャートをサポートしており、データの可視化をより効果的に行うことができます。

 

統計的なグラフとチャート

 箱ひげ図 (Box Plot)

箱ひげ図は、データの分布を簡潔に視覚化し、中央値、四分位範囲、外れ値などを把握するのに役立ちます。

Plotlyでは、plotly.express.box関数を使って箱ひげ図を作成できます。

以下、コードです。

import plotly.express as px

df = px.data.tips()
fig = px.box(
    df, # DataFrame
    x="day", # 横軸
    y="total_bill", # 縦軸 
    color="smoker", # カラー
    notched=True, # ノッチ(くびれ)付き箱ひげ図を描画
    title="曜日別・喫煙者別の請求額の箱ひげ図",
    labels={
        "day": "曜日",
        "total_bill": "請求額",
        "smoker": "喫煙者"
    } # ラベル
)
fig.show()

 

以下、実行結果です。

 

 バイオリンプロット (Violin Plot)

バイオリンプロットは、箱ひげ図とカーネル密度推定を組み合わせたグラフで、データの分布をより詳細に表示できます。

Plotlyでは、plotly.express.violin関数を使ってバイオリンプロットを作成できます。

以下、コードです。

import plotly.express as px

df = px.data.tips()
fig = px.violin(
    df, # DataFrame
    y="tip", # 縦軸
    x="smoker", # 横軸
    color="sex", # カラー
    box=True, # 箱ひげ図を描画
    points="all", # データ点を描画
    hover_data=df.columns, # マウスオーバーラベル
    title="喫煙者別・性別ごとのチップ額のバイオリンプロット",
    labels={
        "tip": "チップ額", 
        "smoker": "喫煙者", 
        "sex": "性別"
    } # ラベル
)
fig.show()

 

以下、実行結果です。

 

 ヒートマップ (Heatmap)

ヒートマップは、2つのカテゴリ変数の関係性を色で表現するグラフです。

Plotlyでは、plotly.express.density_heatmap関数を使ってヒートマップを作成できます。

以下、コードです。

import plotly.express as px
import pandas as pd

# DataFrameを作成
data = {
    "year": ["2000", "2000", "2001", "2001"],
    "month": ["January", "February", "January", "February"],
    "passengers": [150, 200, 160, 210]
}
df = pd.DataFrame(data)

# ヒートマップを作成
fig = px.density_heatmap(
    df, # DataFrame
    x="year", # 横軸
    y="month", # 縦軸
    z="passengers", # ヒートマップの値
    color_continuous_scale="blues", # カラー
    color_continuous_midpoint=200, # カラーの中間値
    title="年・月別の乗客数のヒートマップ", # タイトル
    labels={
        "year": "年",
        "month": "月",
        "passengers": "乗客数"
    } # ラベル
)
fig.show()

 

以下、実行結果です。

 

 散布図行列 (Scatterplot Matrix)

散布図行列は、複数の変数のペアワイズの関係性を可視化するのに役立ちます。

Plotlyでは、plotly.express.scatter_matrix関数を使って散布図行列を作成できます。

以下、コードです。

import plotly.express as px

df = px.data.iris()
fig = px.scatter_matrix(
    df, # DataFrame
    dimensions=[
        "sepal_width", 
        "sepal_length", 
        "petal_width", 
        "petal_length"
    ], # 散布図行列の変数
    color="species", # カラー
    title="アヤメのデータセットの散布図行列", # タイトル
    labels={
        "sepal_width": "がく片の幅", 
        "sepal_length": "がく片の長さ", 
        "petal_width": "花弁の幅", 
        "petal_length": "花弁の長さ", 
        "species": "種"
    } # ラベル
)
fig.show()

 

以下、実行結果です。

 

 相関行列 (Correlation Matrix)

相関行列は、複数の変数の間の相関関係を視覚化します。

Plotlyでは、plotly.express.imshow関数とdf.corr()メソッドを組み合わせて相関行列を作成できます。

以下、コードです。

import plotly.express as px
import pandas as pd

df = px.data.iris()

# 量的変数の相関行列を作成
num_vars = ['sepal_length','sepal_width','petal_length','petal_width']
correlation_matrix = df[num_vars].corr()

# 相関行列を可視化
fig = px.imshow(
    correlation_matrix, # DataFrame
    x=correlation_matrix.columns, # 横軸
    y=correlation_matrix.columns, # 縦軸
    color_continuous_scale="bluered", # カラー修正
    color_continuous_midpoint=0, # カラーの中間値
    title="アヤメのデータセットの相関行列", # タイトル
)
fig.show()

 

以下、実行結果です。

 

これらの統計グラフは、データ分析において非常に重要な役割を果たします。

データの分布、関係性、傾向などを把握することで、より深い洞察を得ることが可能になります。

Plotlyのインタラクティブな機能と組み合わせることで、データ分析をより効果的に進めることができます。

 

Plotlyで階層的なデータを見える化

 ツリーマップ (Treemap)

ツリーマップは、階層構造を矩形で表現するグラフです。

各矩形の面積は、データの値に対応しています。

ツリーマップを使うことで、階層構造とデータの値を同時に把握することができます。

Plotlyでは、plotly.express.treemap関数を使ってツリーマップを作成できます。

以下、コードです。

import plotly.express as px

df = px.data.gapminder().query("year == 2007")
fig = px.treemap(
    df, # DataFrame
    path=[
        px.Constant("world"), # ツリーマップのルート(最上位:親)
        'continent', # 階層のリスト(子)
        'country' # 階層のリスト(子の子)
    ], # 階層
    values='pop', # ツリーマップの面積
    color='lifeExp', # ツリーマップの色
    hover_data=['iso_alpha'], # マウスオーバーラベル
    title="2007年の世界の人口と平均寿命", # タイトル
    labels={
        "continent": "大陸",
        "country": "国",
        "pop": "人口",
        "lifeExp": "平均寿命"
    }
)
fig.show()

 

以下、実行結果です。

 

 サンバーストチャート (Sunburst Chart)

サンバーストチャートは、ツリーマップと同様に階層構造を可視化するグラフですが、円形で表現されます。

中心から外側に向かって階層が深くなり、各セクターの面積はデータの値に対応しています。

Plotlyでは、plotly.express.sunburst関数を使ってサンバーストチャートを作成できます。

以下、コードです。

import plotly.express as px

df = px.data.tips()
fig = px.sunburst(
    df, # DataFrame
    path=['day', 'time', 'sex'], # 階層
    values='total_bill', # ツリーマップの面積
    title="合計請求額(total_bill)",  # タイトル
)
fig.show()

 

以下、実行結果です。

 

ツリーマップとサンバーストチャートは、階層構造を持つデータを分かりやすく可視化するのに役立ちます。

それぞれのグラフの特徴を理解し、データに合わせて使い分けることで、より効果的なデータ可視化を実現できます。

 

まとめ

この記事では、Plotlyの基本的な使い方から、様々なグラフの描画方法を紹介してきました。

Plotlyのインタラクティブな機能は、データの探索と理解を深めるのに役立ちます。

Plotlyは、今後も進化を続けていくでしょう。新たなグラフの種類が追加されたり、インタラクティブ機能が強化されたりする可能性があります。

Plotlyを使いこなすことで、データ可視化の可能性を最大限に引き出し、より効果的なデータ分析を実現できるでしょう。