2016-10-13 2 views
1

저는 데이터 시각화에 익숙하지 않고 SQL 출력과 seaborn을 사용하여 간단한 시계열을 작성하려고합니다. SQL 쿼리에서 검색 한 데이터를 Seaborn에 삽입하는 데 문제가 있습니다. Seaborn을 사용하여이 데이터 프레임을 시각화하는 방법에 대해 나에게 줄 수있는 방향이 있습니까?Python Plotting Pandas SQL Dataframe with Seaborn

내 파이썬 코드 :

#!/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의 플로팅은 모두 matplotlib를 통해 이루어 지므로 도움을 요청할 때 'axis labels matplotlib pandas'와 같은 것을 원할 것입니다. 그러면 도움이되는 결과를 얻을 수 있습니다. [다음은 판다에서 음모를 꾸미기위한 좋은 입문서입니다.] (http://pandas.pydata.org/pandas-docs/version/0.18.1/visualization.html) – benten

+1

외모가 너무 아름답 기 때문에 나에게 다가가 포옹을주고 싶습니다. ! 도와 주셔서 정말 감사합니다. 이것은 나에게 정말로 좋은 출발을 제공한다. 건배. – MBasith