我有一个带有时间和日期值的SCV,但散景线不会渲染。
我遵循了本教程(https://programminghistorian.org/en/lessons/visualizing-with-bokeh)的观点,显示了第一个散点图,它对bokeh和大熊猫有所了解,因为我对Python和程序设计非常陌生。 这在我的jupyter笔记本电脑上工作正常。
所以我想用我自己的数据来尝试一下,女巫是随着时间推移的流侦听器计数。在弄清楚如何正确地将csv导入到pandas.DataFrame之后,我不得不弄乱“日期”和“时间”列中的数据,以将字符串设置为datetime64值。
数据现在看起来像这样:
Date Time Count
0 01.01.2012 00:00:00 69
1 01.01.2012 00:01:00 65
2 01.01.2012 00:02:00 65
3 01.01.2012 00:03:00 65
但是,如果我将“日期”或“时间”以及“计数”一起输入到散景图中,则会得到一个空行,没有行。轴标签和标题正确显示。
我检查了不同的浏览器,以确保它不是浏览器问题。我还尝试不使用ColumnDataSource,而是使用给出相同结果的列表。但是如果我定义了两个这样的简短列表
x = [1, 2, 3, 4]
y = [1, 2, 3, 4]
并使用它们代替行的“时间”或“日期”。
我试图在熊猫和散景文档中找到有关如何使用ColumnDataFrame和线条字形的说明,但对我来说似乎应该绘制图形。
我怀疑原始数据可能存在一些我无法发现的缺陷?在查看.csv时,我找不到丢失的条目之类的东西。
代码如下:
import pandas
from bokeh.plotting import figure, show
from bokeh.io import output_notebook, output_file
from bokeh.models import ColumnDataSource
output_notebook()
data = pandas.read_csv('listener.csv', delimiter=",", usecols= [1, 2, 3], names=["Date", "Time", "Count"])
data["Date"].astype("datetime64")
data["Time"].astype("datetime64")
source = ColumnDataSource(data)
p = figure(title="Title", x_axis_label="Date",x_axis_type="datetime", y_axis_label="Listener")
p.line(x="Time", y="Count", source=source, line_width=2)
output_file("plot.html")
show(p)
由于在上面提到的教程中,所有工作均正常进行,并且使用了基本相同的代码,所以我希望根据输入,随着时间或日期的变化,行会很漂亮。但是我得到的是一个空洞的情节。
答案 0 :(得分:1)
借助Josh Friedlander的帮助,我可以解决我的问题以及一些我在实验中遇到的问题。因此,这是我的解决方案,我使用parse_dates将列“ Date”和“ Time”组合到一个具有数据类型“ datetime64”的列中。由于欧洲日期格式的原因,还使用了“ dayfirst”。
data = pandas.read_csv(
"filename",
delimiter=",",
usecols=[1, 2, 3],
names=["Date", "Time", "Count"],
parse_dates=[["Date", "Time"]],
dayfirst=True)
这已经过时了。
data["Date"].astype("datetime64")
data["Time"].astype("datetime64")