当前位置: 首页 > 面试题库 >

用seaborn绘制时间序列数据

东门晓博
2023-03-14
问题内容

假设我使用以下方法创建一个完全随机的“Dataframe”:

from pandas.util import testing
from random import randrange

def random_date(start, end):
    delta = end - start
    int_delta = (delta.days * 24 * 60 * 60) + delta.seconds
    random_second = randrange(int_delta)
    return start + timedelta(seconds=random_second)

def rand_dataframe():
  df = testing.makeDataFrame()
  df['date'] = [random_date(datetime.date(2014,3,18),datetime.date(2014,4,1)) for x in xrange(df.shape[0])]
  df.sort(columns=['date'], inplace=True)      
  return df

df = rand_dataframe()

这将导致数据帧显示在这篇文章的底部。我想
使用
时间序列
“seaborn”中的可视化功能使我得到了以下线索

我如何解决这个问题?从我读到的
笔记本](http://www.stanford.edu/~mwaskom/software/seaborn/timeseries_plots.html),
电话应该是:

sns.tsplot(df, time="time", unit="unit", condition="condition", value="value")

但这似乎需要用不同的
以某种方式编码“time”、“unit”、“condition”和
`值,这不是我的情况。如何转换数据帧(如下所示)
变成这种格式?
这是我的数据帧:

      date         A         B         C         D

2014-03-18  1.223777  0.356887  1.201624  1.968612
2014-03-18  0.160730  1.888415  0.306334  0.203939
2014-03-18 -0.203101 -0.161298  2.426540  0.056791
2014-03-18 -1.350102  0.990093  0.495406  0.036215
2014-03-18 -1.862960  2.673009 -0.545336 -0.925385
2014-03-19  0.238281  0.468102 -0.150869  0.955069
2014-03-20  1.575317  0.811892  0.198165  1.117805
2014-03-20  0.822698 -0.398840 -1.277511  0.811691
2014-03-20  2.143201 -0.827853 -0.989221  1.088297
2014-03-20  0.299331  1.144311 -0.387854  0.209612
2014-03-20  1.284111 -0.470287 -0.172949 -0.792020
2014-03-22  1.031994  1.059394  0.037627  0.101246
2014-03-22  0.889149  0.724618  0.459405  1.023127
2014-03-23 -1.136320 -0.396265 -1.833737  1.478656
2014-03-23 -0.740400 -0.644395 -1.221330  0.321805
2014-03-23 -0.443021 -0.172013  0.020392 -2.368532
2014-03-23  1.063545  0.039607  1.673722  1.707222
2014-03-24  0.865192 -0.036810 -1.162648  0.947431
2014-03-24 -1.671451  0.979238 -0.701093 -1.204192
2014-03-26 -1.903534 -1.550349  0.267547 -0.585541
2014-03-27  2.515671 -0.271228 -1.993744 -0.671797
2014-03-27  1.728133 -0.423410 -0.620908  1.430503
2014-03-28 -1.446037 -0.229452 -0.996486  0.120554
2014-03-28 -0.664443 -0.665207  0.512771  0.066071
2014-03-29 -1.093379 -0.936449 -0.930999  0.389743
2014-03-29  1.205712 -0.356070 -0.595944  0.702238
2014-03-29 -1.069506  0.358093  1.217409 -2.286798
2014-03-29  2.441311  1.391739 -0.838139  0.226026
2014-03-31  1.471447 -0.987615  0.201999  1.228070
2014-03-31 -0.050524  0.539846  0.133359 -0.833252

最后,我要找的是一个重叠的图(每列一个),其中每一个都如下所示(注意CI的不同值不同的alphas值)


问题答案:

我不认为’tsplot’能处理你的数据。这个它对输入数据所做的假设是,你已经采样了相同的数据
每个时间点的单位(尽管有些时间点可能会丢失)单位)。例如,假设你每天测量同一个人的血压
一个月,然后你想用条件(其中“条件”变量可能是他们的饮食)。tsplot可以做到这一点,用一个看起来像sns.tsplot图(df,time=“day”,unit=“person”,condition=“diet”,
value=“血压”)`这种情况不同于在不同的
每天从每组中随机抽取一部分并测量血压。从你给出的例子来看,你的数据似乎是
像这样的结构。然而,要想把matplotlib和熊猫结合起来并不难我想你想干什么就干什么:

# Read in the data from the stackoverflow question
df = pd.read_clipboard().iloc[1:]

# Convert it to "long-form" or "tidy" representation
df = pd.melt(df, id_vars=["date"], var_name="condition")

# Plot the average value by condition and date
ax = df.groupby(["condition", "date"]).mean().unstack("condition").plot()

# Get a reference to the x-points corresponding to the dates and the the colors
x = np.arange(len(df.date.unique()))
palette = sns.color_palette()

# Calculate the 25th and 75th percentiles of the data
# and plot a translucent band between them
for cond, cond_df in df.groupby("condition"):
    low = cond_df.groupby("date").value.apply(np.percentile, 25)
    high = cond_df.groupby("date").value.apply(np.percentile, 75)
    ax.fill_between(x, low, high, alpha=.2, color=palette.pop(0))


 类似资料:
  • 我有一个时间序列,列出了几个月交易历史中期货合约的成交价格数据。我希望有一个图表(折线图),显示时间序列中最近4周内每周滴答数据的交易历史(该序列不断更新) X轴将显示周一至周五的日期,图表上任何时候都会有4条单独的线详细说明刻度数据。我已经设法做到这一点,使用一些代码,绘制最后一笔交易的每一天,但我需要的是滴答数据绘图,而不是仅仅一个数据点,每天为每一行。 这是一张Excel图表(!)在我试图用

  • 如何使用Python绘制时间序列图?因为在数据集中,时间被拆分为年和周期(如M1、M2的月份)。 我正在使用matplotlib,但不知道如何分配时间。 我写的代码来获取数据:导入熊猫作为pd从熊猫导入DataFrame data1=pd.read_csv('CUUR0000SA0.txt',标头=无)data2=pd.read_csv('SUUR0000SA0.txt',标头=无)data=pd

  • 有没有一种方法来绘制的CDF累积直方图的熊猫系列在Python中只使用海运?我有以下几点: 我知道我可以用绘制累积直方图,然后我知道我可以使用,但我想在Seaborn中实现这两个功能,就像用,提供kde拟合和直方图。有办法吗?

  • 我试着用plotly绘制一个gannt图。重要的是,水平泳道可以有多个横杆在时间上分开。 我发现了一个使用日历日期(YYYY-MM-DD)的例子,并尝试使用时间(HH:MM:SS)进行转换。但是当我使用时间戳时,所有的东西都聚集在一起,没有间隙。

  • 我试图在一个5年的时间序列图上绘制日期(N=50),我很难弄清楚如何在for循环上运行迭代。下面是我试图绘制日期的一个例子。 我正在绘制日期的视觉效果 目前,我正在尝试: 我收到一个错误: 我不确定这是否与dtype是datetime有关,或者我是否需要尝试另一种方法,但是任何建议/指导都非常感谢! 谢谢你! 这就是我试图完成的:示例图像 编辑:生成打印的代码 ` 这将复制我使用的精确数据的样本。

  • 问题内容: 如果我使用Python中的seaborn库绘制线性回归的结果,是否有办法找出回归的数值结果?例如,我可能想知道拟合系数或拟合的R 2。 我可以使用基础的statsmodels接口重新运行相同的拟合,但这似乎是不必要的重复工作,无论如何,我希望能够比较结果系数以确保数值结果与我的结果相同在情节中看到。 问题答案: 没有办法做到这一点。 我认为,要求可视化库为您提供统计建模结果是倒退的。,