Plotly-with-pandas-and-cufflinks

提供:Dev Guides
移動先:案内検索

パンダとカフリンクスをプロッタに

パンダはデータ分析のためのPythonで非常に人気のあるライブラリです。 また、独自のプロット関数もサポートしています。 ただし、Pandasプロットは、視覚化に対話性を提供しません。 ありがたいことに、plotlyのインタラクティブで動的なプロットは、 Pandas dataframe オブジェクトを使用して構築できます。

まず、単純なリストオブジェクトからデータフレームを作成します。

data = [[Ravi',21,67],['Kiran',24,61],['Anita',18,46],['Smita',20,78],['Sunil',17,90]]
df = pd.DataFrame(data,columns = ['name','age','marks'],dtype = float)

データフレーム列は、グラフオブジェクトトレースの x および y プロパティのデータ値として使用されます。 ここでは、 name 列と marks 列を使用してバートレースを生成します。

trace = go.Bar(x = df.name, y = df.marks)
fig = go.Figure(data = [trace])
iplot(fig)

シンプルな棒グラフが以下のようにJupyterノートブックに表示されます-

Pandasデータフレーム

Plotlyは d3.js の上に構築されており、 Cufflinks という名前の別のライブラリを使用して Pandas dataframes で直接使用できるチャートライブラリです。

まだ利用できない場合は、以下に示す pip のようなお気に入りのパッケージマネージャーを使用してカフリンクスパッケージをインストールします-

pip install cufflinks
or
conda install -c conda-forge cufflinks-py

まず、カフリンクを、 Pandasnumpy など、オフラインで使用できるように構成できる他のライブラリと一緒にインポートします。

import cufflinks as cf
cf.go_offline()

これで、 Pandas dataframe を直接使用して、以前に行っていた* graph_objsモジュール*のトレースオブジェクトと図オブジェクトを使用する必要なく、さまざまな種類のプロットを表示できます。

df.iplot(kind = 'bar', x = 'name', y = 'marks')

以前のものと非常によく似た棒グラフが以下のように表示されます-

Pandas Dataframe Cufflinks

データベースからのPandasデータフレーム

Pythonリストを使用してデータフレームを作成する代わりに、さまざまなタイプのデータベースのデータを入力できます。 たとえば、CSVファイル、SQLiteデータベーステーブル、またはmysqlデータベーステーブルからのデータをPandasデータフレームにフェッチできます。このデータフレームは、最終的に* Figureオブジェクト*または* Cufflinksインターフェイス*を使用して、グラフにプロットされます。

  • CSVファイル*からデータを取得するには、Pandasライブラリの* read_csv()*関数を使用できます。
import pandas as pd
df = pd.read_csv('sample-data.csv')

データが* SQLiteデータベーステーブル*で利用可能な場合、次のように* SQLAlchemyライブラリ*を使用して取得できます-

import pandas as pd
from sqlalchemy import create_engine
disk_engine = create_engine('sqlite:///mydb.db')
df = pd.read_sql_query('SELECT name,age,marks', disk_engine)

一方、* MySQLデータベース*からのデータは、次のようにPandasデータフレームで取得されます-

import pymysql
import pandas as pd
conn = pymysql.connect(host = "localhost", user = "root", passwd = "xxxx", db = "mydb")
cursor = conn.cursor()
cursor.execute('select name,age,marks')
rows = cursor.fetchall()
df = pd.DataFrame( [[ij for ij in i] for i in rows] )
df.rename(columns = {0: 'Name', 1: 'age', 2: 'marks'}, inplace = True)