夕蛙のなく頃に

データアナリストとして学んだことや趣味で勉強し始めたIoTをアウトプットする

ラベルつき散布図をPlotlyで描画する

はじめに

普段seabornでグラフを作成することが多く、散布図もどこにデータが偏っているかを確認するために見ることが大半で、個別にラベルを付すことがありません。

ただビジネスの人と話をする際に、ラベル付きの散布図が必要となりました。
ex) 広告データについてx軸を閲覧数、y軸をCVRとして各広告記事を可視化した上で、各点がどんな記事かも知りたい

そこでSeabornでの簡単な実現方法がわからなかったので、Plotlyを使おうと思います。 Plotlyは、アカウントを作成することで図をクラウド上で共有することができますが、今回はオフラインにhtmlファイルを出力することを目指します。

※この記事では現時点でのColaboratoryのplotlyのバージョン'3.6.1'を利用しています。

ラベルなし

import pandas as pd
import plotly
import plotly.graph_objs as go

plotly.offline.init_notebook_mode(connected=False)

# テストデータを定義
df = pd.DataFrame([['記事A', '1000', '20'], ['記事B', '2000', '100'], ['記事C', '800', '200']], columns=['app_name', 'show_num', 'click_num'])

# lauoutを定義
layout= go.Layout(
    title= '広告毎の閲覧数とクリック数',
    xaxis= dict(
        title= '閲覧数'
    ),
    yaxis=dict(
        title= 'クリック数'
    )
)

trace = go.Scatter(
    x = df['show_num'],
    y = df['click_num'],
    mode = 'markers'
)
data = [trace]

fig = go.Figure(data=data, layout=layout)
plotly.offline.plot(fig, file_name='result.html', auto_open=False) #htmlとして出力
# plotly.offline.iplot(fig, show_link=False) #jupyter上に表示

ラベルあり(常時表示)

ラベルを表示するためには、Scatterの引数としてtextを追加します。 また常時表示するためには、modeとして'+text'を追加します。

trace = go.Scatter(
    x = df['show_num'],
    y = df['click_num'],
    text = df['app_name']
    mode = 'markers+text'
)
data = [trace]

ラベルあり(マーカー近くにポインタを寄せるとラベル表示)

表示するマーカーが多いと、常時表示は必要ないでしょう。 マーカー近くにポインタを寄せた時に詳細がわかるようにしたい場合は、modeに'+text'は必要ありません。

trace = go.Scatter(
    x = df['show_num'],
    y = df['click_num'],
    text = df['app_name']
    mode = 'markers'
)
data = [trace]

Colaboratoryのソースコード

colab.research.google.com