Pythonで使えるおススメのグラフ(プロット)ライブラリ4選

スポンサーリンク

Pythonにはインタラクティブなプロットパッケージがたくさんあり、それを使って最も美しくカスタマイズ可能なグラフやチャートを作成することができます

この記事では、プロットに使用されるいくつかのPythonモジュールと、それらを使ってどのように基本的なグラフがコーディングされるかを見ていきたいと思います。

これらは最も広く使われているpythonパッケージで、すべてのプラットフォーム(Windows、Linux、Macなど)で利用可能です。

スポンサーリンク

1. matplotlib – 最も古いプロット用ライブラリ

Pythonに慣れている人なら、matplotlibについて聞いたことがあるはずです。

これはプロット用に使われる最も古いPythonライブラリの1つで、18年前にMichael Droettboomによって作られ、元々はJohn D. Hunterによって書かれましたが、今でもPython学習者やデータ分析者の間で非常に人気があります。

オブジェクト指向のアプリケーションインタフェースを提供し、matplotlib のプロットを様々なアプリケーションで簡単に実行できるようにします。

それでは、matplotlib を使ってグラフを描くコードをいくつか見てみましょう。

Line Chart

Fake Tags
Fake Tags

Histogram

Fake tag
Fake tag

2. Seaborn

統計データからグラフを作成するための matplotlib をベースにしたサブモジュールです。

Seabornは、プログラマが配列やデータフレームから直接データを抽出し、その統計データからグラフを視覚化させることができます。

可視化するために、matplotlibのフレームワークで動作し、データ統合のために、pandasに大きく依存しています。

seabornの動作を理解するために、サンプルコードを見てみましょう。

スキャッター

import matplotlib.pyplot as plt
from numpy import random
 
var1=random.randint(100, size=(100))
var2=random.randint(100, size=(100))
var1.sort()
var2.sort()
 
plt.plot(var1,var2)
plt.show()
import matplotlib.pyplot as plt
import numpy as np
from numpy import random
hist_var = np.random.normal(170, 10, 250)
plt.hist(hist_var)
plt.show()

上記のコードでは、データフレーム ‘scores.csv’ から取得した攻撃力と防御力の値を散布図にプロットしています。

scatter_plot()」というメソッドにはseabornの関数「sns.lmplot」が含まれており、「Attack」をX軸、「Defense」をY軸として散布図を描画しています。

別のコード例を見てみましょう。

前回の例で使用したのと同じ値のセットで、seaborn を使用して boxplot をプロットします。

Boxplot

Fake Tags
Fake tag

3. Plotly(プロトリー

Plotlyは、2012年に作成されたデータ可視化ツールです。

今回は、Plotlyのサブモジュールである「Plotly Express」について学びます。

このサブモジュールは、1回の関数呼び出しでグラフィックのビジュアライゼーションを作成することを目的としたPythonのライブラリです。

一方、メディアやコミュニケーションのためにカスタムメイドのグラフィックを作成するための良いベースも提供しています。

それでは、Plotlyのコード例で、1回の関数呼び出しで簡単なグラフを作成する方法を見てみましょう。

import pandas as pand
from matplotlib import pyplot as plt
import seaborn as sns
 
scores = pand.read_csv('scores.csv', encoding='unicode_escape', index_col=0)
 
def scatter_plot():
    sns.lmplot(x='Attack', y='Defense', data=scores,
           fit_reg=False# It removes a diagonal line that remains by default
           hue='Stage'
           )
    plt.show()
 
scatter_plot()

上のコードでは、プログラムは3つの異なるメソッド関数を持っており、それらは一緒に呼び出されます。

それぞれのメソッド関数が呼び出されると、ユーザーのためにグラフを描画します。

よく観察すると、それぞれのメソッド関数は異なる入力メソッドを持っています。

最初の関数はPlotly expressのデータベースからデータをロードします。

2番目の関数は、2つの異なる配列から取得した値から散布図を可視化します。

3番目の関数は、最初の関数と同様に、Plotly expressのデータベースからデータをロードし、棒グラフを描画する関数です。

import pandas as pand
from matplotlib import pyplot as plt
import seaborn as sns
 
scores = pand.read_csv('scores.csv', encoding='unicode_escape', index_col=0)
sns.boxplot(data=scores)
plt.show()
import plotly.express as px
 
def linechart():
    df_india = px.data.gapminder().query("country=='India'")
    fig = px.line(df_india, x="year", y="lifeExp", title='Average life span in India:')
    fig.show()
 
def scatter():
    # x and y given as array_like objects
    import plotly.express as px
    fig = px.scatter(x=[5, 1, 3, 4, 3], y=[1, 5, 4, 13, 19])
    fig.show()
 
def barplot():
    import plotly.express as px
    data_Japan = px.data.gapminder().query("country == 'Japan'")
    fig = px.bar(data_Japan, x='year', y='pop')
    fig.show()
 
linechart()
barplot()
scatter()
import dash
from dash import dcc
from dash import html
from dash.dependencies import Input, Output
import plotly.express as px
 
frame_data = px.data.gapminder()
every_continent = frame_data.continent.unique()
 
app = dash.Dash(__name__)
 
app.layout = html.Div([
    dcc.Checklist(
        id="checklist",
        options=[{"label": x, "value": x}
                 for x in every_continent],
        value=every_continent[3:],
        labelStyle={'display': 'inline-block'}
    ),
    dcc.Graph(id="lineChart"),
])
 
@app.callback(
    Output("lineChart", "figure"),
    [Input("checklist", "value")])
def update_line_chart(continents):
    data_mask = frame_data.continent.isin(continents)
    figure = px.line(frame_data[data_mask],
        x="year", y="lifeExp", color='country')
    return figure
 
app.run_server(debug=True)

4. Dash

Dash は Web アプリケーションを作るための Plotly フレームワークで、グラフィック、テキスト、コントロールを一緒にリンクさせることができます。

このサブモジュールは基本的に、アプリケーションのフロントエンドのレイアウトやスタイリングなど、様々な面を管理するのに役立ちます。

最終的には、様々なウェブホスティングプラットフォームに簡単にデプロイできるflaskアプリケーションとなります。

理解を深めるために、いくつかのコードを見てみましょう。

最初のプログラムは、Plotly gapminder データベースから平均寿命の折れ線グラフをプロットするものです。

これは、選択された大陸に存在するすべての国の平均寿命をプロットするものです。

Line Chart

Fake Tags
Fake Tags

散布図

以下のコードは、Pythonのdashを使用して散布図をプロットする方法を示しています。

ここでは、入力データフレームとして虹彩データベースを使用しました。

虹彩データベースは、3つの異なるクラスの花の花弁の大きさを含むパターン認識データセットです。

このプログラムは、入力として与えられたデータの花びらの大きさの散布図をプロットします。

import dash
from dash import dcc
from dash import html
from dash.dependencies import Input, Output
import plotly.express as px
 
frame_data = px.data.iris()
 
app = dash.Dash(__name__)
 
app.layout = html.Div([
    dcc.Graph(id="plotis_scatter"),
    html.P("Width of Petal:"),
    dcc.RangeSlider(
        id='range-slider',
        min=0, max=2.5, step=0.1,
        marks={0: '0', 2.5: '2.5'},
        value=[0.5, 2]
    ),
])
 
@app.callback(
    Output("plotis_scatter", "figure"),
    [Input("range-slider", "value")])
def update_bar_chart(slider_range):
    low, high = slider_range
    damask = (frame_data['petal_width'] > low) & (frame_data['petal_width'] < high)
    figure = px.scatter(
        frame_data[damask], x="sepal_width", y="sepal_length",
        color="species", size='petal_length',
        hover_data=['petal_width'])
    return figure
 
app.run_server(debug=True)
matplotlib-linechart.png

まとめ

この記事は、Pythonで利用可能な重要なプロットツールを説明することを目的としました。

これらの Python ライブラリはデータサイエンス分野で広く使われていますが、初心者でも手に取れるように、概念とコードを学びやすい方法で提供することを心がけました。

この記事で説明したすべてのライブラリ – matplotlib, Seaborn, Plotly, Dash – の基本的な概念を理解するのに役立てば幸いです。

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