2016-10-13 18 views
1

私はデータの視覚化を初めて勉強し、SQL出力と海底を使って簡単な時系列プロットを作成しようとしています。私はSeabornにSQLクエリから取得したデータを挿入するのが難しいです。 Seabornを使用してこのデータフレームを視覚化する方法について私があなたに与えることのできる方向はありますか?Python Plotting Pandas SQL Dataframe with Seaborn

私のPythonのコード:

#!/usr/local/bin/python3.5 

import cx_Oracle 
import pandas as pd 
from IPython.display import display, HTML 
import matplotlib.pyplot as plt 
import seaborn as sns 

orcl = cx_Oracle.connect('sql_user/sql_pass//sql_database_server.com:9999/SQL_REPORT') 

sql = ''' 
select DATETIME, FRUIT, 
COUNTS 
from FRUITS.HEALTHY_FRUIT 
WHERE DATETIME > '01-OCT-2016' 
AND FRUIT = 'APPLE' 
''' 

curs = orcl.cursor() 

df = pd.read_sql(sql, orcl) 
display(df) 

sns.kdeplot(df) 
plt.show() 

DATAFRAME(DF)出力:

DATETIME FRUIT COUNTS 
0 2016-10-02 APPLE 1.065757e+06 
1 2016-10-03 APPLE 1.064369e+06 
2 2016-10-04 APPLE 1.067552e+06 
3 2016-10-05 APPLE 1.068010e+06 
4 2016-10-06 APPLE 1.067118e+06 
5 2016-10-07 APPLE 1.064925e+06 
6 2016-10-08 APPLE 1.066576e+06 
7 2016-10-09 APPLE 1.065982e+06 
8 2016-10-10 APPLE 1.072131e+06 
9 2016-10-11 APPLE 1.076429e+06 

私は(plt.showを実行しようと)私は次のエラーを取得する:

TypeError: cannot astype a datetimelike from [datetime64[ns]] to [float64] 
+0

どのようなプロットを正確にしたいですか?データフレーム全体を 'kdeplot()'に渡す理由はありますか? – benten

+0

@bentenこんにちは、DATETIMEをX軸、CountをY軸とする単純な線グラフが必要です。 DATETIMEとCOUNTSだけをデータフレームに渡す方法がわかりません。 – MBasith

答えて

2

sns.kdeplotの代わりに次を試してください:

# make time the index (this will help with plot ticks) 
df.set_index('DATETIME', inplace=True) 

# make figure and axis objects 
fig, ax = sns.plt.subplots(1, 1, figsize=(6,4)) 
df.plot(y='COUNTS', ax=ax, color='red', alpha=.6) 
fig.savefig('test.pdf') 
plt.show() 

関数kdeplot()は、折れ線グラフを作成しようとしている場合には必要ありません。行は作成されますが、変数は時間の経過とともに変数がどのように変化するかを示すのではなく、変数の分布を近似することを意図しています。ラインプロットを作る最も簡単な方法は、パンダdf.plot()です。 seabornのスタイリングオプションが必要な場合は、sns.plt.subplotsを使用して軸オブジェクト(私の行うこと)を作成できます。 this questionのようにsns.set_style()を使用することもできます。

+0

それは本当にうまくいった。私は今プロットを見る。唯一の問題は、X軸が実際のDATETIMEの数字(0〜9)を表示していないことです。これはデフォルトのビンですか?私はそれを訂正できる方法はありますか?いいオンラインリソースや本は私がこれを手伝うことができますか? – MBasith

+0

'set_index()'関数に 'inplace = True'を含めるのを忘れました。これはコードがあなたに素敵なx軸ラベルを与えるように修正されています。 pandas/seabornのプロットはvia matplotlibを使って行われるので、あなたがグーグルでヘルプをしているときは、 'axis labels matplotlib pandas'のようなものが必要になります。 [ここでパンダでプロットするための良い入門書](http://pandas.pydata.org/pandas-docs/version/0.18.1/visualization.html) – benten

+1

私は手を伸ばして抱き締めたい!手伝ってくれてどうもありがとう。これは私に本当に良いスタートを与える。乾杯。 – MBasith