- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
金融时间序列通常充满缺失数据。开箱即用,通过仅显示如下所示的一行,以可视化方式处理带有缺失时间戳的系列。但这里的挑战在于,将时间戳解释为一个值,并在图中插入所有缺失的日期。
在大多数情况下,我发现完全忽略这些日期会使 plotly 看起来更好。https://plotly.com/python/time-series/#hiding-weekends-and-holidays 下的 plotly 文档中的示例显示如何使用以下方法处理一些日期类别(如周末或假期)的缺失日期:
fig.update_xaxes(
rangebreaks=[
dict(bounds=["sat", "mon"]), #hide weekends
dict(values=["2015-12-25", "2016-01-01"]) # hide Christmas and New Year's
]
)
这里的缺点是您的数据集也可能缺少任何其他工作日的一些数据。当然,您必须为不同国家/地区指定特定的假期日期,那么还有其他方法吗?
import pandas as pd
import numpy as np
import plotly.graph_objects as go
# data
np.random.seed(1234)
n_obs = 15
frequency = 'D'
daterange = pd.date_range('2020', freq=frequency, periods=n_obs)
values = np.random.randint(low=-5, high=6, size=n_obs).tolist()
df = pd.DataFrame({'time':daterange, 'value':values})
df = df.set_index('time')
df.iloc[0]=100; df['value']=df.value.cumsum()
# Missing timestamps
df.iloc[2:5] = np.nan; df.iloc[8:13] = np.nan
df.dropna(inplace = True)
# plotly figure
fig=go.Figure(go.Scatter(x=df.index, y =df['value']))
fig.update_layout(template = 'plotly_dark')
fig.show()
最佳答案
他们这里的关键还是要用rangebreak
属性。但是,如果您要遵循链接示例中解释的方法,则必须手动包含每个缺失的日期。但这种情况下丢失数据的解决方案实际上是更多丢失数据。这就是为什么:
1.您可以retrieve the timestamps
从系列的开头和结尾,然后
2.构建complete timeline
在那个时期内(可能有更多缺失的日期)使用:
dt_all = pd.date_range(start=df.index[0],
end=df.index[-1],
freq = 'D')
3. 接下来可以isolate the timestamps
你有在df.index
不在该时间线中使用:
dt_breaks = [d for d in dt_all_py if d not in dt_obs_py]
4. 最后,您可以在 rangebreaks
中包含这些时间戳像这样:
fig.update_xaxes(
rangebreaks=[dict(values=dt_breaks)]
)
import pandas as pd
import numpy as np
import plotly.graph_objects as go
# data
np.random.seed(1234)
n_obs = 15
frequency = 'D'
daterange = pd.date_range('2020', freq=frequency, periods=n_obs)
values = np.random.randint(low=-5, high=6, size=n_obs).tolist()
df = pd.DataFrame({'time':daterange, 'value':values})
df = df.set_index('time')
df.iloc[0]=100; df['value']=df.value.cumsum()
# Missing timestamps
df.iloc[2:5] = np.nan; df.iloc[8:13] = np.nan
df.dropna(inplace = True)
# plotly figure
fig=go.Figure(go.Scatter(x=df.index, y =df['value']))
fig.update_layout(template = 'plotly_dark')
# complete timeline between first and last timestamps
dt_all = pd.date_range(start=df.index[0],
end=df.index[-1],
freq = frequency)
# make sure input and synthetic time series are of the same types
dt_all_py = [d.to_pydatetime() for d in dt_all]
dt_obs_py = [d.to_pydatetime() for d in df.index]
# find which timestamps are missing in the complete timeline
dt_breaks = [d for d in dt_all_py if d not in dt_obs_py]
# remove missing timestamps from visualization
fig.update_xaxes(
rangebreaks=[dict(values=dt_breaks)] # hide timestamps with no values
)
#fig.update_layout(title=dict(text="Some dates are missing, but still displayed"))
fig.update_layout(title=dict(text="Missing dates are excluded by rangebreaks"))
fig.update_xaxes(showgrid=False)
fig.show()
关于python - Plotly:如何处理金融时间序列的缺失日期?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64018267/
我正在尝试创建一个新应用程序,我想获取股票更新、货币兑换更新等。您能否推荐一些免费的 API 来获取这些更新?我已经试过了: 1) Google 财经 API。 不使用的原因:已弃用并即将关闭,这将使
我有一个庞大的数据库,其中每天包含一个具有以下格式的文本文件:“HH:mm:ss xxxx.xx”每个交易日的几乎每一秒,所以我在每个文本文件中都有数千行。我正在寻找将这些行转换为 HashMap 的
已关闭。这个问题是 off-topic 。目前不接受答案。 想要改进这个问题吗? Update the question所以它是on-topic用于堆栈溢出。 已关闭10 年前。 Improve th
已关闭。此问题旨在寻求有关书籍、工具、软件库等的建议。不符合Stack Overflow guidelines .它目前不接受答案。 我们不允许提问寻求书籍、工具、软件库等的推荐。您可以编辑问题,以
随着最近SEC proposal要求大多数 Assets 支持证券发行人提交一个 python 计算机程序来记录交易的资金流(或瀑布)规定,我认为现在是时候问你认为金融“必备”Python 包是什么了
当我使用 numpy 方法 irr 计算内部 yield (irr) 时,我收到了 nan 作为返回。 In [45]: numpy.irr([-10, 2, 2, 2, 2]) Out[45]: n
我是一名优秀的程序员,十分优秀!