简体   繁体   English

Python使用Seaborn绘制Pandas SQL数据框

[英]Python Plotting Pandas SQL Dataframe with Seaborn

I am new to data visualization and attempting to make a simple time series plot using an SQL output and seaborn. 我是数据可视化的新手,并尝试使用SQL输出和seaborn来绘制简单的时间序列图。 I am having difficulty inserting the data retrieved from the SQL query into Seaborn. 我很难将从SQL查询中检索到的数据插入Seaborn。 Is there some direction you can give me on how to visualize this dataframe using Seaborn? 关于使用Seaborn如何可视化此数据框,您可以给我一些指导吗?

My Python Code: 我的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) output: 数据框(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

When I try to run plt.show() I get the following error: 当我尝试运行plt.show()时,出现以下错误:

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

Instead of sns.kdeplot try the following: 代替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()

The function kdeplot() is not what you want if you're trying to make a line graph. 如果要制作线形图,则不需要kdeplot()函数。 It does make a line, but the line is intended to approximate the distribution of a variable rather than show how a variable changes over time. 它的确形成了一条直线,但该直线旨在近似变量的分布,而不是显示变量如何随时间变化。 By far the easiest way to make a line plot is from pandas df.plot() . 到目前为止,制作线条图的最简单方法是从df.plot() If you want the styling options of seaborn, you can use sns.plt.subplots to create your axis object (what I do). 如果需要seaborn的样式选项,则可以使用sns.plt.subplots创建轴对象(我该怎么做)。 You can also use sns.set_style() like in this question . 您也可以在此问题中使用sns.set_style()

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM