Plotly散布図 – チュートリアルと例題

PlotlyはJavaScriptベースのPythonデータ可視化ライブラリで、インタラクティブでWebベースの可視化に重点を置いています。

高水準のAPIを持つSeabornのようなシンプルさと、Bokehのようなインタラクティブさを併せ持っています。

コアライブラリの機能性に加え、ビルトインのPlotly ExpressをDashと一緒に使うことで、通常Flaskで書かれるWebベースのアプリケーションやインタラクティブなデータ駆動型ダッシュボードにとって素晴らしい選択肢になります。

このガイドでは、Plotlyを使って散布図を描く方法を見ていきます。

散布図とは?
散布図は、データセットの2つの数値変数(特徴量)の関係を探索するものです。

インポートデータ

これは心臓発作の可能性の指標として使うことができる様々な身体的な指標のデータを含んでいます。

データセットをインポートし、head()を出力して覗いてみましょう。

import pandas as pd


df = pd.read_csv('heart.csv')
print(df.head())


この結果は

   age cp  trtbps  chol  fbs  restecg  thalachh  exng  oldpeak  slp  caa output
0   63   3     145   233    1        0       150     0      2.3    0    0      1
1   37   2     130   250    0        1       187     0      3.5    0    0      1
2   41   1     130   204    0        0       172     0      1.4    2    0      1
3   56   1     120   236    0        1       178     0      0.8    2    0      1
4   57   0     120   354    0        1       163     1      0.6    2    0      1


ここでは、talachh(最大心拍数)、trtbps(安静時血圧)、chol(コレステロール量)、output0または1、それぞれ心臓発作の可能性が低い、高いことを表す)などの特徴量の間の関係性を探ってみます。

まず、簡潔にするために、特徴を別々に保存して行きましょう。

max_heartrate = df['thalachh']
resting_blood_pressure = df['trtbps']
cholesterol_level = df['chol']
output = df['output']


Plotlyで散布図を描く

最後に、散布図のプロットを行います。

まず、max_heartratecholesterol_level の間の関係を調べてみましょう。

Plotlyで散布図を描くには、Plotly Express (px) インスタンスの scatter() 関数を使用します。

fig = px.scatter(x=cholesterol_level, y=max_heartrate)
fig.show()


必要な引数は xy の機能だけです。

この機能により、散布図(軸ラベルなし)を任意のブラウザ上でサーバーを起動して描画することができます。

また、事前に変数を定義したくない場合は、PlotlyはSeabornと全く同じ構文で、データソースと可視化したいフィーチャーの名前を指定することができます。

データソースと可視化したい特徴の名前を指定すると、特徴をラベルにマッピングし、先ほどのように特徴を指定することなく直接プロットすることができます。

import pandas as pd
import plotly.express as px


df = pd.read_csv('heart.csv')


fig = px.scatter(df, x='chol', y='thalachh')
fig.show()


この結果、以下のようになります。

注意: これらのアプローチを組み合わせて、DataFrame をソースとして提供し、さらに scatter() のコールで特徴のカラム名を参照する代わりに、あらかじめ定義された変数を使用することも可能です。

fig = px.scatter(df, x=cholesterol_level, y=max_heartrate)
fig.show()


この結果、ラベル付けされた散布図が得られます。

このデータセットでは、コレステロール値と最大心拍数の間にあまり相関がないように見えます。

Plotly散布図のカスタマイズ

さて、私たちは無地のプロットを可視化することはほとんどありません。

ポイントは、データの特定の特性を直感的に視覚化することです。

私たちの場合、output機能によってマーカーに色をつけたり、hover_dataを追加して、誰かがマーカーにカーソルを置いたときに何を表示するかを指定することができます。

現在のところ、 hover_data はあまり役に立ちません。

xy の値を表示するだけで、結果のプロットを観察すれば、すでに合理的に推測することができます。

それでは、このプロットをもう少し直感的にするために、いくつかのパラメータを変更してみましょう。

import pandas as pd
import plotly.express as px


df = pd.read_csv('heart.csv')


fig = px.scatter(df, x='chol', y='thalachh', color='output', hover_data=['sex', 'age'])
fig.show()


各マーカーの coloroutput 特徴に対応させ、心臓発作を経験する確率が高いものと低いものを異なる色で表示するように設定しました。

また、各マーカーに各個人の「性別」と「年齢」を入れました。

この結果

最後に、マーカーのサイズを変更することもできます。

fig.update_traces()メソッドにスカラー値(5など)を渡すか、size引数にベクトル値(サイズを特徴にマッピングするなど)を渡せば、サイズを変更できます。

それでは、oldpeak の特徴量と各マーカーのサイズを対応させてみましょう。

import pandas as pd
import plotly.express as px


df = pd.read_csv('heart.csv')


fig = px.scatter(df, x='chol', 
                y='thalachh', 
                color='output', 
                size='oldpeak', 
                hover_data=['sex', 'age'])
fig.show()


これで、各マーカーのサイズは oldpeak 特徴の値によって変化します。

また、すべてのマーカーを同じ固定サイズにしたい場合は、Figureのtraceを更新します。

import pandas as pd
import plotly.express as px


df = pd.read_csv('heart.csv')


fig = px.scatter(df, x='chol',
                y='thalachh',
                color='output',
                hover_data=['sex', 'age'])


fig.update_traces(marker={'size': 10})    
fig.show()


この結果、以下のようになります。

結論

このガイドでは、PythonとPlotlyを使って散布図を作成する方法を見てきました。

もしあなたがデータ可視化に興味があり、何から始めたらよいかわからない場合は、Pythonによるデータ可視化に関する書籍の束をチェックしてみてください。

Pythonによるデータ可視化

データビジュアライゼーションで危険な存在になる

30日間無条件返金保証

初級から上級まで

定期的に無料で更新(最新更新は2021年4月)

ボーナスリソースやガイドを更新

Pythonでデータ可視化 MatplotlibとPandasは、Pythonの基礎知識を持つ全くの初心者が、PandasとMatplotlibを使って、単純なプロットからインタラクティブなボタンを持つアニメーションの3Dプロットまで、これらのライブラリで高度な作業をするための強力な基盤を構築できるように設計された書籍です。

本書は、Pythonの基本的な知識を持つ方を対象としています。

PandasとMatplotlibについて知っておく必要があることすべてを教えてくれる、詳細なガイドです。

Pythonによるデータ可視化」は、Pythonの初級~中級開発者向けの書籍で、Pandasを使った簡単なデータ操作から、MatplotlibやSeabornなどのコアなプロットライブラリ、そしてAltairなどの宣言的・実験的ライブラリの活用方法までを案内しています。

具体的には、11章にわたって、9つのPythonライブラリを取り上げています。

Pandas、Matplotlib、Seaborn、Bokeh、Altair、Plotly、GGPlot、GeoPandas、そしてVisPyです。

データビジュアライゼーションのユニークで実用的なガイドとして、あなたがキャリアで使うかもしれない多くのツールを紹介しています。

タイトルとURLをコピーしました