TimeSeries[{{t1,v1},{t2,v2},…,{tn,vn}}]
表示由时间-数值对 {ti,vi} 指定的时间序列.
TimeSeries[tvspec]
使用时间-值规范 tvspec.
TimeSeries[vspec,tspec]
表示一个时间序列,其值由 vspec 给出,时间由 tspec 指定.
TimeSeries[vspec,tspec,{com1,com2,…}]
指定唯一的时间序列分量键 com1、com2、….
TimeSeries
TimeSeries[{{t1,v1},{t2,v2},…,{tn,vn}}]
表示由时间-数值对 {ti,vi} 指定的时间序列.
TimeSeries[tvspec]
使用时间-值规范 tvspec.
TimeSeries[vspec,tspec]
表示一个时间序列,其值由 vspec 给出,时间由 tspec 指定.
TimeSeries[vspec,tspec,{com1,com2,…}]
指定唯一的时间序列分量键 com1、com2、….
更多信息和选项
- TimeSeries 表示一系列带有对应分量值的时间戳,其中数据点之间总是假定存在某种值.
- 时间序列通常用于表示某种逐渐变化的事物,并且存在不同模型来描述数据点之间的值.
- 典型的时间序列用途:
-
自然 温度、气压、风速等 社会 股价、通货膨胀、失业率、GDP 等 技术 能源产量、速度、电压等 医疗 体温、心率、血糖、ECG 等 - 对于 TimeSeries 对象 ts,在时间 t 处的值使用 ts[t] 计算.
- 一个 TimeSeries 对象总可以被视为一个以 "Timestamp" 为键列、并带有任意数量分量值列的 Tabular 对象,而 Tabular[TimeSeries[…]] 将会转换为一个 Tabular 对象.
- 通过计数事件、累积值或计算局部事件率,可以从 EventSeries 派生出 TimeSeries,而 EventSeriesAccumulate 提供了这种转换.
- 通过寻找零交叉、最大交叉或其他事件,可以从 TimeSeries 派生出 EventSeries,而 TimeSeriesEvents 提供了这种转换.
- 时间 ti 可以是规则的或不规则的;它们可以是数值或 DateObject 实例.
- 可以给出以下时间-值规范 tvspec:
-
{{t1,v1},{t2,v2},…,{tn,vn}}, 时间-数值对的集合 timesvalues 分别给出的时间和值 Tabular[…] 一个 Tabular 对象 - 时间-数值对的集合在输入时无需排序,但在输出中会自动排序,形成一条路径.
- 可以给出以下时间规范 tspec:
-
Automatic
,适用于
个值{tmin} 
{tmin,tmax}
,其中
为自动确定{tmin,Automatic,dt} 
{{t1,t2,…,tn}} 时间列表 
{TabularColumn[…]} 时间的 TabularColumn - ti、tmin 和 tmax 可以是数字,也可以是 DateObject 实例. 此时,dt 可以是数字、时间 Quantity 或日期类型,包括 "BusinessDay"、"Weekday"、"Weekend"、"BeginningOfMonth"、"EndOfMonth",或从 Monday 到 Sunday.
- 可以给出以下数值规范 vspec:
-
{v1,v2,…,vn} 值列表 Tabular[…], TabularColumn[…] 值的 Tabular 或 TabularColumn - 对于时间或事件序列 tes,TimeSeries[tes,options] 返回一个带有给定选项的 TimeSeries 对象.
- TimeSeries 对象 ts 的属性可以通过 ts["property"] 获取.
- 可用属性列表可以通过 ts["Properties"] 获取.
- 可用的时间戳属性包括:
-
"Timestamps" 时间戳的 TabularColumn "FirstTimestamp" 第一个时间戳 "LastTimestamp" 最后一个时间戳 "Dates" 以 DateObject 列表形式表示的时间戳 "Times" 以 AbsoluteTime 列表形式表示的时间戳 "FirstDate", "FirstTime" 第一个时间戳,以 DateObject 或 AbsoluteTime 表示 "LastDate", "LastTime" 最后一个时间戳,以 DateObject 或 AbsoluteTime 表示 - 可用的数值属性包括:
-
"Values" 作为 Tabular 或 TabularColumn 对象的值 "NormalValues" 作为列表的值 {v1,…} "FirstValue" 第一个时间戳处的值 v1 "LastValue" 最后一个时间戳处的值 "ValueType" 简单时间序列的值的类型 "ComponentKeys" 路径分量的键 "ComponentTypes" 路径分量的类型 - 可用的通用属性包括:
-
"Tabular" 将时间序列转换为 Tabular 对象 "ResamplingMethod" 用于对路径分量进行重采样的方法 "NormalPath" 按顺序排列的时间戳-值对 {{t1,v1},…} "Path" 时间戳为 AbsoluteTime 的路径 "DatePath" 时间戳为 DateObject 的路径 "PathLength" 路径的长度 "PathComponents" 将多变量路径拆分为单变量分量 "PathFunction" 作为时间函数的原始时间序列对象 - Normal[ts] 等价于 ts["Path"].
- TimeSeries 接受以下选项:
-
ComponentKeys Automatic 路径组件的键 CalendarType Automatic 要使用的日历类型 DateGranularity Automatic 日历时间戳的粒度 HolidayCalendar Automatic 要使用的节假日日历 TimeSystem Automatic 要使用的时间系统 TimeZone Automatic 要使用的时区 DateFunction Automatic 如何将日期转换为标准形式 MergingFunction Automatic 如何合并重复时间戳的值 MetaInformation None 包含附加元信息 MissingDataMethod None 用于缺失值的方法 ResamplingMethod Automatic 用于重采样的方法 InterpolationOrder Automatic 用于重采样的插值阶数 TemporalRegularity Automatic 是否假定数据是规则的 TimeObservationWindow Automatic 指定时间戳的时间区域 ValueDimensions Automatic 值的维度 - 默认情况下,对于重采样使用零阶或一阶插值:对于等维度的值使用一阶插值,其他情况默认使用零阶插值. 也可以设置 ResamplingMethod->{"Interpolation",opts},其中 opts 是传递给 Interpolation 的选项.
- 设置 MissingDataMethod->Automatic 将根据 ResamplingMethod 的设置,使用插值自动替换头部为 Missing 的值.
- 设置 ValueDimensions->dim 指定数值 vij 的维度为 dim.
范例
打开所有单元 关闭所有单元基本范例 (2)
ts = TimeSeries[{23.1, 24.4, 21.8, 25.5}, {DateObject[{2025, 9, 1}]}]ts[DateObject[{2025, 9, 3}]]DateListPlot[ts]ts = TimeSeries[{{.1, "cat"}, {.2, "dog"}, {.3, "fox"}}, {{Yesterday, Today, Tomorrow}}, {"a", "b"}]ts[Today]Values[ts]Normal[ts]范围 (31)
创建 (4)
TimeSeries[{{DateObject[{2025, 1, 28}, "Day"], 0.1}, {DateObject[{2025, 1, 29}, "Day"], 0.2}, {DateObject[{2025, 1, 30}, "Day"], 0.3}}]TimeSeries[{DateObject[{2025, 1, 27}, "Day"] -> 0.1, DateObject[{2025, 1, 28}, "Day"] -> 0.2, DateObject[{2025, 1, 29}, "Day"] -> 0.3}]TimeSeries[<|DateObject[{2025, 1, 27}, "Day"] -> 0.1, DateObject[{2025, 1, 28}, "Day"] -> 0.2, DateObject[{2025, 1, 29}, "Day"] -> 0.3|>]TimeSeries[{{0.1, "cat"}, {0.2, "dog"}, {0.3, "fox"}}, {{Yesterday, Today, Tomorrow}}]TimeSeries[{{.1, "cat"}, {.2, "dog"}, {.3, "fox"}}, {{Yesterday, Today, Tomorrow}}, {"a", "b"}]TimeSeries[{{.1, "cat"}, {.2, "dog"}, {.3, "fox"}}, {{Yesterday, Today, Tomorrow}}, ComponentKeys -> {"a", "b"}]TimeSeries[{"cat", "dog", "fox", "cow"}, {Yesterday, Automatic, Quantity[2, "Weeks"]}]%["Path"]TimeSeries[{{.1, "cat"}, {.2, "dog"}, {.3, "fox"}}, {Yesterday, Automatic, Quantity[2, "Weeks"]}, {"a", "b"}]创建一个具有 Automatic 时间戳的时间序列:
v = {19, 9, 3, 7, 2, 17, 6, 12};TimeSeries[v, Automatic]Normal[%]提取 (4)
ts = TimeSeries[{{0.1, "cat"}, {0.2, "dog"}, {0.3, "fox"}}, {{Yesterday, Today, Tomorrow}}, {"a", "b"}]ts["Values", "a"]ts["Values", {"a"}]ts["Values", {"b", "a"}]由于 Tabular 对象中的键必须唯一,重复的分量将被丢弃:
ts["Values", {"a", "b", "a"}]创建一个值以 Tabular 对象给出的时间序列:
ToTabular[{"a" -> {.1, .2, .3}, "b" -> {"cat", "dog", "fox"}}, "Columns"]ts = TimeSeries[%, {RandomDate[3, DateGranularity -> "Day"]}]ts["Timestamps"]Normal[%]ts["Timestamps"]["ElementType"]ts = TimeSeries[{RGBColor[0.803921568627451, 0.30980392156862746, 0.07058823529411765], RGBColor[1., 0.7254901960784313, 0.09411764705882353], RGBColor[0.9568627450980393, 0.796078431372549, 0.13725490196078433], RGBColor[0.9529411764705882, 0.9803921568627451, 0.5725490196078431], RGBColor[0.4117647058823529, 0.592156862745098, 0.4], RGBColor[0.30980392156862746, 0.47058823529411764, 0.34509803921568627], RGBColor[0.2980392156862745, 0.28627450980392155, 0.5490196078431373], RGBColor[0.27058823529411763, 0.1843137254901961, 0.3764705882352941], RGBColor[0.8784313725490196, 0.10196078431372549, 0.20784313725490197], RGBColor[0.8, 0.058823529411764705, 0.07450980392156863]}, {DateObject[{2025, 1, 1}]}]TimeSeriesWindow[ts, {DateObject[{2025, 1, 3}], DateObject[{2025, 1, 7}]}]Normal[%]ts = TimeSeries[TimeEventSeries`TimestampData[Association["UniformlySpacedQ" -> False,
"Timestamps" -> TabularColumn[Association["Data" -> {{1, 2, 5, 10, 12, 15}, {}, None},
"ElementType" -> "Integer64"]], "Caller" -> TimeSeries]],
TabularColumn[Association["Data" -> {{2, 1, 6, 5, 7, 4}, {}, None},
"ElementType" -> "Integer64"]], Association[]];Plot[ts[t], {t, 1, 15}]分量键 (6)
TimeSeries[{{.1, "cat"}, {.2, "dog"}, {.3, "fox"}}, {{Yesterday, Today, Tomorrow}}, {"a", "b"}]使用转换为 Tabular 的方式显示数据:
Tabular[%]TimeSeries[{{.1, "cat"}, {.2, "dog"}, {.3, "fox"}}, {{Yesterday, Today, Tomorrow}}, {"number"}]ColumnKeys[%]TimeSeries[{{.1, "cat"}, {.2, "dog"}, {.3, "fox"}}, {{Yesterday, Today, Tomorrow}}, {}]ColumnKeys[%]分量键参数的 Automatic 值会保留输入键:
tab = Tabular[Association["RawSchema" -> Association["ColumnProperties" ->
Association["K1" -> Association["ElementType" -> "Real64"],
"K2" -> Association["ElementType" -> "String"]], "KeyColumns" -> None,
"Backend" -> "WolframKernel"], "Options" -> {},
"BackendData" -> Association["ColumnData" -> DataStructure["ColumnTable",
{{TabularColumn[Association["Data" -> {{0.1, 0.2, 0.3}, {}, None},
"ElementType" -> "Real64"]], TabularColumn[Association[
"Data" -> {{3, {0, 3, 6, 9}, "catdogfox"}, {}, None}, "ElementType" -> "String"]]}}]]]];TimeSeries[tab, {{Yesterday, Today, Tomorrow}}, Automatic]Tabular[%]tab = Tabular[Association["RawSchema" -> Association["ColumnProperties" ->
Association["K1" -> Association["ElementType" -> "Real64"],
"K2" -> Association["ElementType" -> "String"]], "KeyColumns" -> None,
"Backend" -> "WolframKernel"], "Options" -> {},
"BackendData" -> Association["ColumnData" -> DataStructure["ColumnTable",
{{TabularColumn[Association["Data" -> {{0.1, 0.2, 0.3}, {}, None},
"ElementType" -> "Real64"]], TabularColumn[Association[
"Data" -> {{3, {0, 3, 6, 9}, "catdogfox"}, {}, None}, "ElementType" -> "String"]]}}]]]];TimeSeries[tab, {{Yesterday, Today, Tomorrow}}, {"a", "b"}]Tabular[%]当分量键值为 None 时,输出时间序列是简单形式,不含显式分量:
tab = Tabular[Association["RawSchema" -> Association["ColumnProperties" ->
Association["K1" -> Association["ElementType" -> "Real64"],
"K2" -> Association["ElementType" -> "String"]], "KeyColumns" -> None,
"Backend" -> "WolframKernel"], "Options" -> {},
"BackendData" -> Association["ColumnData" -> DataStructure["ColumnTable",
{{TabularColumn[Association["Data" -> {{0.1, 0.2, 0.3}, {}, None},
"ElementType" -> "Real64"]], TabularColumn[Association[
"Data" -> {{3, {0, 3, 6, 9}, "catdogfox"}, {}, None}, "ElementType" -> "String"]]}}]]]];TimeSeries[tab, {{Yesterday, Today, Tomorrow}}, None]Tabular[%]当没有输入键时,Automatic 值将保留简单的分量输入:
TimeSeries[{{.1, "cat"}, {.2, "dog"}, {.3, "fox"}}, {{Yesterday, Today, Tomorrow}}, Automatic]Tabular[%]时间序列算术 (6)
ts = TimeSeries[{3, 4, 2, 7}]ts ^ 2%//Normal与 TimeSeriesMap 的结果进行比较:
TimeSeriesMap[# ^ 2&, ts]% === ts ^ 2求时间序列的均值 Mean:
v = {3, 8, 4, 11, 9, 2};
t = {1, 3, 5, 7, 8, 10};
ts = TimeSeries[v, {t}]Mean[ts]Mean[ts["Values"]]Mean[WeightedData[ts]]//NTimeSeries[{{1, Subscript[x, 1]}, {2, Subscript[x, 2]}, {3, Subscript[x, 3]}}] + TimeSeries[{{1, Subscript[y, 1]}, {2, Subscript[y, 2]}, {3, Subscript[y, 3]}}]Normal[%]ts1 = TimeSeries[{{1, Subscript[x, 1]}, {2, Subscript[x, 2]}, {5, Subscript[x, 5]}}];
ts2 = TimeSeries[{{2, Subscript[y, 2]}, {3, Subscript[y, 3]}, {6, Subscript[y, 6]}}];
sum = ts1 + ts2Normal[sum]//ExpandNumberLinePlot[{{1, 2, 5}, {2, 3, 6}, {Interval[{1, 5}]}, {Interval[{2, 6}]}}, PlotStyle -> {Automatic, Automatic, Directive[Dashed, ColorData[97, 1]], Directive[Dashed, ColorData[97, 2]]}]ts1r = TimeSeriesResample[ts1, {{2, 3, 5}}]ts2r = TimeSeriesResample[ts2, {{2, 3, 5}}]Normal[ts1r + ts2r]//Expands = Quantity[{19, 16, 9, 3, 7, 2, 17, 10, 6, 12}, "Meters"];
t = {1, 2, 4, 8, 16, 32, 64, 128, 256, 512};ts = TimeSeries[s, {t}];QuantityMagnitude[ts];Normal[%]goog = TimeSeries@FinancialData["GOOGL", {"2022", "2025"}]appl = TimeSeries@FinancialData["AAPL", {"2022", "2025"}]goog - applDateListPlot[%]与使用 TimeSeriesThread 的计算进行比较:
TimeSeriesThread[{1, -1}.#&, {goog, appl}]% === (goog - appl)基本处理 (11)
v = {3, 8, 4, 11, 9, 2};
t = {1, 3, 5, 7, 8, 10};ListLinePlot[TimeSeries[v, {t}]]使用 TimeSeriesWindow 提取时间序列的一部分:
ts = TimeSeries[TimeEventSeries`TimestampData[Association["UniformlySpacedQ" -> False,
"Timestamps" -> TabularColumn[Association[
"Data" -> {3333, {{{1357084800000, 1357171200000, 1357257600000, 1357516800000,
1357603200000, 135768 ... r["Quantity"]["Real64",
"USDollars"]]], Association["ResamplingMethod" -> "LinearInterpolation",
"TimeObservationWindow" -> DateInterval[{{{2013, 1, 2, 0, 0, 0.}, {2026, 4, 2, 0, 0, 0.}}},
"Day", "Gregorian", None, "UT", Automatic]]];win = TimeSeriesWindow[ts, {{2023, 5, 1}, {2015, 8, 15}}];DateListPlot[#]& /@ {ts, win}使用 TimeSeriesInsert 替换缺失值:
ts = TimeSeries[{7, 10, 17, 22, Missing[], 34, 35, 36, 44, 46}, {1}];ts[5]ins = TimeSeriesInsert[ts, {5, 27}]ins[5]ListLinePlot[#]& /@ {ts, ins}使用 TimeSeriesShift 将该序列向前移动 2:
v = {3, 8, 4, 11, 9, 2};
t = {1, 3, 5, 7, 8, 10};TimeSeries[v, {t}]TimeSeriesShift[%, 2]ListLinePlot[{%%, %}]使用 TimeSeriesRescale 来拉伸时间序列:
v = {3, 8, 4, 11, 9, 2};
t = {1, 3, 5, 7, 8, 10};TimeSeries[v, {t}]TimeSeriesRescale[%, {0, 20}]ListLinePlot[{%%, %}]使用 TimeSeriesMap 来求取向量值时间序列各分量的总和:
TimeSeries[{{a, x}, {b, y}, {c, z}}, Automatic]TimeSeriesMap[Total, %]Normal[%]为时间序列计算 MovingAverage:
ts = TimeSeries[TimeEventSeries`TimestampData[Association["UniformlySpacedQ" -> True, "Count" -> 100,
"Endpoints" -> TabularColumn[Association["Data" -> {{0, 99}, {}, None},
"ElementType" -> "Integer64"]], "MinimumTimeIncrement" -> 1, "Caller ... -5.83329995009813, -5.365194518466113, -5.614668108914484,
-6.477246191853266, -7.461704439607946, -6.79657593242878, -5.864937981765857,
-6.27785271209235, -5.841962111797332}, {}, None}, "ElementType" -> "Real64"]], Association[]];MovingAverage[ts, 10]ListLinePlot[{ts, %}, PlotLegends -> {"time series", "moving average"}]使用 MovingMap 计算时间序列的移动最大值:
ts = TimeSeries[TimeEventSeries`TimestampData[Association["UniformlySpacedQ" -> True, "Count" -> 100,
"Endpoints" -> TabularColumn[Association["Data" -> {{0, 99}, {}, None},
"ElementType" -> "Integer64"]], "MinimumTimeIncrement" -> 1, "Caller ... -5.83329995009813, -5.365194518466113, -5.614668108914484,
-6.477246191853266, -7.461704439607946, -6.79657593242878, -5.864937981765857,
-6.27785271209235, -5.841962111797332}, {}, None}, "ElementType" -> "Real64"]], Association[]];MovingMap[Max, ts, 10]ListLinePlot[{ts, %}, PlotLegends -> {"time series", "moving maximum"}]使用 TimeSeriesAggregate 计算时间序列的每周总计:
data = TimeSeries[TimeEventSeries`TimestampData[Association["UniformlySpacedQ" -> False,
"Timestamps" -> TabularColumn[Association[
"Data" -> {313, {{{1735776000000, 1735862400000, 1736121600000, 1736208000000, 1736294400000,
1736467 ... gMethod" -> "LinearInterpolation", "TimeObservationWindow" ->
DateInterval[{{{2025, 1, 2, 0, 0, 0.}, {2026, 4, 2, 0, 0, 0.}}}, "Day", "Gregorian", None, "UT",
Automatic], "MetaInformation" -> Association["FinancialProperty" -> "Volume"]]];TimeSeriesAggregate[data, "Week", Total]DateListPlot[{data, %}, PlotRange -> All, PlotLegends -> {"data", "totals"}]ts = TimeSeries[Table[{i ^ 2, i}, {i, 0, 4}]]ListPlot[ts]TimeSeriesResample[ts, 2]Normal[%]ListPlot[{ts, %%}, Filling -> {1 -> 0}, PlotLegends -> {"original time series", "upsampled time series"}]使用 TimeSeriesModelFit 将参数模型拟合到时间序列:
ts = TimeSeries[{5.1, 9.2, 8., 10., 6.1, 10.4, 9.1, 11.6, 7.5, 12.1,
10.4, 13.5, 9., 14.1, 11.9, 15.7, 10.8, 16.4, 13.7, 18.3, 12.9, 19.,
15.8, 21.2, 15.3, 22.1, 18.3, 24.6}]TimeSeriesModelFit[ts]使用 TimeSeriesForecast 预测时间序列的下 10 个值:
TimeSeriesForecast[%, {10}]ListLinePlot[{ts, tsf}, PlotLegends -> {"data", "forecast"}]选项 (21)
CalendarType (3)
默认情况下,没有显式日历规范的日期被解释为 "Gregorian":
TimeSeries[Range[5], {{2024, 2, 14}, Automatic, "Day"}]使用 CalendarTypecal 将把这些 "Gregorian" 日期更改为日历 cal:
TimeSeries[Range[5], {{2024, 2, 14}, Automatic, "Day"}, CalendarType -> "Julian"]Normal[%]TimeSeries[Range[5], {DateObject[{2024, 2, 14}, CalendarType -> "Julian"], Automatic, "Day"}]TimeSeries[%, CalendarType -> "Islamic"]Normal[%]TimeSeries[Range[3], {{DateObject[{2026, 2, 14}, CalendarType -> "Julian"],
DateObject[{2026, 2, 18}, CalendarType -> "Gregorian"],
DateObject[{1447, 8, 25}, CalendarType -> "Islamic"]}}]使用 CalendarType 选项可转换为特定历法:
TimeSeries[%, CalendarType -> "Jewish"]Normal[%]Component Keys (1)
TimeSeries[{{.1, "cat"}, {.2, "dog"}, {.3, "fox"}}, {{Yesterday, Today, Tomorrow}}]使用转换为 Tabular 的方式显示数据:
Tabular[%]TimeSeries[{{.1, "cat"}, {.2, "dog"}, {.3, "fox"}}, {{Yesterday, Today, Tomorrow}}, ComponentKeys -> {"a", "b"}]Tabular[%]DateFunction (2)
TimeSeries[Range[3], {Today}]Normal[%]使用 DateFunction 以选择不同的粒度:
TimeSeries[Range[3], {Today}, DateFunction -> Function[DateObject[#, "Year"]]]Normal[%]data = {{"2006 12-1", 8}, {"2006 12-2", 10}, {"2006 12-3", 12}, {"2006 12-4", 14}, {"2006 12-5", 15}, {"2006 12-6", 20}};DateObject[data[[1, 1]]]TimeSeries[data, DateFunction :> (DateObject[{#, {"Year", "Month", "Day"}}, "Day"]&)]Normal[%]TimeSeries[data, DateFunction :> (DateObject[{#, {"Year", "Day", "Month"}}, "Day"]&)]Normal[%]DateGranularity (2)
指定 TimeSeries 的日期粒度:
dates = Sort@RandomDate[3]ts = TimeSeries[{1, 2, 3}, {dates}, DateGranularity -> "Day"]Normal[ts]dates = {Yesterday, Today, Tomorrow}ts = TimeSeries[{1, 2, 3}, {dates}, DateGranularity -> "Minute"]Normal[ts]HolidayCalendar (3)
TimeSeries[Range[4], {DateObject[{2025, 7, 1}], Automatic, "BusinessDay"}, HolidayCalendar -> "UnitedStates"]Normal[%]TimeSeries[Range[4], {DateObject[{2025, 7, 1}], Automatic, "BusinessDay"}, HolidayCalendar -> "Mexico"]Normal[%]TimeSeries[Range[4], {DateObject[{2026, 4, 1}], Automatic, "BusinessDay"}, HolidayCalendar -> "UnitedStates"]//NormalTimeSeries[Range[4], {DateObject[{2026, 4, 1}], Automatic, "BusinessDay"}, HolidayCalendar -> {"UnitedStates", "NYSE"}]//Normal使用 HolidayCalendar 可视化给定国家/地区的工作日:
ts = TimeSeries[ConstantArray[1, 40], {{2014, 11, 1}, Automatic, "BusinessDay"}, HolidayCalendar -> "UnitedStates"]DateListPlot[ts, Joined -> False, Filling -> Axis, FrameTicks -> {{Automatic, Automatic}, {DateRange[ts["FirstTimestamp"], ts["LastTimestamp"], {2, "Day"}], None}}, DateTicksFormat -> "DayShort"]InterpolationOrder (1)
默认情况下,TimeSeries 使用线性顺序在时间戳之间插值:
s = {Subscript[x, 1], Subscript[x, 2], Subscript[x, 3], Subscript[x, 4]};
t = {2, 4, 6, 8};ts = TimeSeries[s, {t}]ts[Range[2, 8]]//Normal//Simplifyts = TimeSeries[s, {t}, InterpolationOrder -> 2]ts[Range[2, 8]]//Normal//SimplifyMergingFunction (1)
默认情况下,TimeSeries 会对重复时间戳取平均值:
TimeSeries[{1, 2, 3, 4, 5}, {{4.2, 4.2, 5.3, 6.1, 6.1}}]Normal[%]TimeSeries[{1, 2, 3, 4, 5}, {{4.2, 4.2, 5.3, 6.1, 6.1}}, MergingFunction -> Total]// NormalMetaInformation (1)
s = TimeSeries[FinancialData["SBUX", "Jan. 1, 2008"]]ts = TimeSeries[s, MetaInformation -> {"Stock" -> "SBUX"}]ts["MetaInformation"]ts["Properties"]ts["Stock"]MissingDataMethod (1)
missd = {2, 1, 3, Missing[], 2, 1, 2, Missing[], 6, 2, 5};TimeSeries[missd, {0}]ListLinePlot[%["Path"]]使用 MissingDataMethod 用非缺失值的平均值替换缺失值:
TimeSeries[missd, MissingDataMethod -> "Mean"]ListLinePlot[%["Path"]]TimeSeries[missd, MissingDataMethod -> "Interpolation"]ListLinePlot[%["Path"]]TimeSeries[missd, MissingDataMethod -> {"Interpolation", InterpolationOrder -> 2}]ListLinePlot[%["Path"]]ResamplingMethod (1)
默认情况下,TimeSeries 中间时刻的值使用线性插值来计算:
ts1 = TimeSeries[{0, 1, 3, 2, 6, 2, 5}]ts1[1.5]ts2 = TimeSeries[{0, 1, 3, 2, 6, 2, 5}, ResamplingMethod -> {"Interpolation", InterpolationOrder -> 2}]Plot[{ts1[t], ts2[t]}, {t, 0, 6}]TemporalRegularity (1)
TimeObservationWindow (1)
TimeZone (3)
指定 TimeSeries 的时区:
ts = TimeSeries[{1, 2, 3}, {Now, Now + Quantity[2, "Hours"]}, TimeZone -> 0]ts["Timestamps"]Normal[%]日期字符串时间戳即使指定了 TimeZone,也假定是以 $TimeZone 给出的:
ts = TimeSeries[{1, 2, 3}, {"2026/01/01 15:45"}, TimeZone -> 0]ts["Timestamps"]Normal[%]TimeZone 选项影响时间戳但不影响数值,即使数值也是日期:
vals = {DateObject[{2026, 1, 23, 0, 43, 46.093448}, "Instant", "Gregorian", 3.], DateObject[{2026, 1, 23, 3, 1, 46.0935}, "Instant", "Gregorian", 3.]};TimeSeries[vals, {"2026/01/01 15:45"}, TimeZone -> -1]%//Normal应用 (14)
天文 (3)
使用 SunPosition 产生一定日期范围内芝加哥的太阳位置:
sp = SunPosition[Entity["City", {"Chicago", "Illinois", "UnitedStates"}], DateRange[DateObject[{2013, 1, 1, 9}], DateObject[{2013, 12, 31, 9}], 10]]DateListPlot[sp, PlotLegends -> {"azimuth", "altitude"}]使用 MoonPosition 产生一定日期范围内月亮的位置:
mp = MoonPosition[DateRange[DateObject[{2013, 1, 1}], DateObject[{2013, 1, 31}], 1], CelestialSystem -> "Equatorial"]pts = QuantityMagnitude[Normal[mp["Values"]]];Graphics[{ColorData[97, 1], Point[pts]}, Frame -> True, AspectRatio -> .5]ts = TemporalData[TimeSeries, {{{Quantity[33767/3600, "Hours"], Quantity[33811/3600, "Hours"],
Quantity[1881/200, "Hours"], Quantity[3391/360, "Hours"], Quantity[6793/720, "Hours"],
Quantity[11341/1200, "Hours"], Quantity[6817/720, "Hours"], Q ... 59/1800, "Hours"]}},
{TemporalData`DateSpecification[{2015, 1, 1, 0, 0, 0.}, {2015, 12, 31, 0, 0, 0.}, {1, "Day"}]},
1, {"Continuous", 1}, {"Discrete", 1}, 1,
{ResamplingMethod -> {"Interpolation", InterpolationOrder -> 1}}}, True, 314.1]TimeSeries[ts]ts = TimeSeries[TimeEventSeries`TimestampData[Association["UniformlySpacedQ" -> True, "Count" -> 365,
"Endpoints" -> TabularColumn[Association[
"Data" -> {2, {{{1420092000000, 1451541600000}, {}, None}}, None},
"ElementType" -> "Date"[" ... 6769/1800, 16769/1800, 16771/1800, 33551/3600, 33563/3600, 3731/400,
33599/3600, 33623/3600, 673/72, 16841/1800, 16859/1800}, {}, None}}, None},
"ElementType" -> TypeSpecifier["Quantity"]["NumberExpression", "Hours"]]], Association[]];DateListPlot[ts, Filling -> 12, FrameLabel -> Automatic]Mean[ts]//Nrates = MovingMap[UnitConvert[-Subtract@@#, "Minutes"]&, ts, Quantity[2, "Events"]]DateListPlot[rates, FrameLabel -> Automatic, Filling -> 0]人口统计学 (1)
使用 CountryData 产生英国和德国的国内生产总值:
gdpuk = CountryData["UK", {"GDP", {1970, 2008}}]gdpger = CountryData["Germany", {"GDP", {1970, 2008}}]DateListPlot[{gdpuk, gdpger}, FrameLabel -> Automatic, PlotLegends -> {"UK", "Germany"}]金融 (1)
data = TimeSeries[FinancialData["SBUX", "Close", {{2013, 1, 1}, {2013, 12, 1}, "Week"}, Method -> "WDF"], TemporalRegularity -> True]DateListPlot[data, FrameLabel -> Automatic, Filling -> Axis]eproc = EstimatedProcess[data, ARIMAProcess[2, 1, 1], ProcessEstimator -> "MaximumConditionalLikelihood"]forecast = TimeSeriesForecast[eproc, data, {26}]DateListPlot[{data, forecast}, Filling -> Axis]天气 (3)
用 AirPressureData 检查在长岛麦克阿瑟机场的因飓风桑迪引起的压力读数下降:
apdata = AirPressureData["KISP", {DateObject[{2012, 10, 24}], DateObject[{2012, 10, 30}]}]DateListPlot[apdata, FrameLabel -> Automatic]用 WindSpeedData 比较在约翰·肯尼迪国际机场的夏天与冬天的风速:
Summer = WindSpeedData["KJFK", {DateObject[{2013, 6, 1}], DateObject[{2013, 6, 8}]}]Winter = WindSpeedData["KJFK", {DateObject[{2014, 1, 1}], DateObject[{2014, 1, 8}]}]DateListPlot[ToExpression[#], PlotLabel -> #]& /@ {"Summer", "Winter"}temp = WeatherData["Chicago", "Temperature", {{2000, 1, 1, 0, 0, 0.}, {2026, 1, 1, 0, 0, 0.}, "Month"}]DateListPlot[temp, Joined -> True]ts = TimeSeriesResample[temp, Quantity[1, "Months"]]eproc = TimeSeriesModelFit[ts, {"SARIMA", 12}]["Process"]能量 (1)
用 NuclearReactorData 可视化切尔诺贝利反应堆的能量生产:
reactors = EntityValue[EntityClass["NuclearReactor", "Chernobyl"], "Entities"]energyProduction = NuclearReactorData[reactors, EntityProperty["NuclearReactor", "AnnualEnergyProduction", {"Date" -> All}]]DateListPlot[Most[energyProduction], PlotLegends -> Most[reactors]]设备 (2)
dev = DeviceOpen["RandomSignalDemo"];devts = DeviceReadTimeSeries[dev, {10, 0.05}]ma = MovingMap[Mean, devts, Quantity[1.5, "Seconds"], "Reflected"];DateListPlot[{devts, ma}]以下时间序列是通过从一个 TinkerForge 气象站 读取照度数据(每0.1秒一次,持续5秒,期间不停改变设备方向)而生成的:
ts = TimeSeries[TimeEventSeries`TimestampData[Association["UniformlySpacedQ" -> False,
"Timestamps" -> TabularColumn[Association[
"Data" -> {50, {{{1395250839033, 1395250839133, 1395250839233, 1395250839333, 1395250839433,
13952508 ... , "TimeObservationWindow" ->
DateInterval[{{{2014, 3, 19, 11, 40, 39.032999992370605}, {2014, 3, 19, 11, 40,
43.94700002670288}}}, "Instant", "Gregorian", -6., "UT", Automatic],
"MetaInformation" -> Association["Untagged" -> None]]];DateListPlot[ts, PlotRange -> All, Filling -> Axis]Grid[{{"Min", "Mean", "Max"}, {Min[ts], Mean[ts], Max[ts]}}, Dividers -> All, Spacings -> {1.5, 1.5}]ts1 = TimeSeries[TimeEventSeries`TimestampData[Association["UniformlySpacedQ" -> False,
"Timestamps" -> TabularColumn[Association[
"Data" -> {50, {{{1398381829336, 1398381829440, 1398381829543, 1398381829645, 1398381829749,
13983818 ...
Association["ResamplingMethod" -> "LinearInterpolation", "TimeObservationWindow" ->
DateInterval[{{{2014, 4, 24, 17, 23, 49.335999965667725}, {2014, 4, 24, 17, 23,
54.41699981689453}}}, "Instant", "Gregorian", -6., "UT", Automatic]]];DateListPlot[ts1, PlotRange -> All, Filling -> Axis]用 Fourier 验证周期性:
fd = Fourier[QuantityMagnitude[ts1["Values"]]];ListLinePlot[Rest[Abs[fd]], Filling -> Axis, PlotRange -> All]过滤 (1)
用 MeanFilter 过滤时间序列:
ts = TimeSeries[RandomFunction[WienerProcess[], {0., 5, 0.01}]]mf = MeanFilter[ts, .15];ListLinePlot[{ts, mf}]销售 (2)
sales = TimeSeries[{2, 4, 5, 9, 11, 15, 13, 11, 17, 19, 23}, Automatic]用 LinearModelFit 对数据拟和一个线性模型:
salesfit = LinearModelFit[sales, {1, t}, t]Show[ListPlot[sales, PlotLegends -> {"sales"}], Plot[salesfit[x], {x, 0, 10}, PlotStyle -> Lighter@Orange, PlotLegends -> {"fitted model"}]]s[t_Integer] := sales[t]salesexpsmooth = RecurrenceTable[{y[t + 1] == y[t] + 0.45(s[t] - y[t]), y[0] == s[0]}, y, {t, 1, 10}]ListPlot[{Most[sales["Values"]], salesexpsmooth}, Joined -> {False, True}, PlotLegends -> {"sales", "smoothed"}]ts = EntityValue[Entity["Country", "UnitedStates"], EntityProperty["Country", "RetailSales", {"Adjustment" -> "Nominal", "Date" -> All, "Frequency" -> "Monthly", "SeasonalAdjustment" -> "NotSeasonallyAdjusted"}]]用 TimeSeriesModelFit 对数据建一个时间序列模型:
tsm = TimeSeriesModelFit[ts]forecast = TimeSeriesForecast[tsm, {0, 3}]DateListPlot[{TimeSeriesWindow[tsm["TemporalData"], {"1 January 2013", Automatic}], forecast}]属性和关系 (5)
TimeSeries 在两个时间戳之间进行插值:
data = RandomReal[{-1, 1}, 10];ts = TimeSeries[data, Automatic]ts[2.5]用 EventSeries 代表离散的时间:
es = EventSeries[data, Automatic]es["Path"] - ts["Path"]然而,EventSeries 在时间戳之间不进行插值:
es[2.5]You can convert from one to the other:
{TimeSeries[es], EventSeries[ts]}TimeSeries 在某一点处会返回一个值,或进行插值:
ts = TimeSeries[RandomReal[{0, 1}, 10]]{ts[3], ts[3.5]}使用 TemporalData 存储多条路径,并获取某一点处数值的分布:
td = TemporalData[RandomReal[{0, 1}, {5, 10}], Automatic]{td[3], td[3.5]}TimeSeries 在时间域之外的某个时刻会返回最近的元素:
ts = TimeSeries[{1, 2, 3}]{ts[0], ts[4]}Plot[ts[t], {t, -2, 5}]作为参数给出的分量键将覆盖 ComponentKeys 选项给出的分量键:
TimeSeries[{{.1, "cat"}, {.2, "dog"}, {.3, "fox"}}, {{Yesterday, Today, Tomorrow}}, {"A", "B"}, ComponentKeys -> {"a", "b"}]Tabular[%]TimeSeries[{1, 2, 3}]%["Properties"]来自 MetaInformation 的键会添加在属性列表的末尾:
TimeSeries[{1, 2, 3}, MetaInformation -> <|"Animals" -> {"cat", "dog", "fox"}|>]%["Properties"]可能存在的问题 (3)
values = Range[4];
times = {1, 3, 4, 9};ts = TimeSeries[values, {times}]Accumulate 将重采样以创建规则采样的时间序列:
Accumulate[ts]//NormalTranspose[{times, Accumulate[values]}]TimeSeries 不允许将 None 作为 ResamplingMethod 的规范,并使用默认方法:
ts = TimeSeries[{1, 2, 3}, ResamplingMethod -> None];ts["ResamplingType"]ts[.5]若要在时间戳之间仍保留 Missing,请将其用作该值:
ts1 = TimeSeries[{1, 2, 3}, ResamplingMethod -> {"Constant", Missing[]}];ts1["ResamplingType"]ts1[.5]如果 ResamplingMethod 规范无效,将使用 Automatic 值:
ts = TimeSeries[{1, 2, 3}, ResamplingMethod -> foo];ts["ResamplingType"]巧妙范例 (2)
生成日行迹(太阳在上午 9 点的位置,以 10 天为增量):
sp = SunPosition[DateRange[DateObject[{2013, 1, 1, 9}], DateObject[{2013, 12, 31, 9}], 10]]Graphics[{Orange, PointSize[Medium], Point[QuantityMagnitude[sp["NormalValues"]]]}, Axes -> True, AxesOrigin -> {80, 0}]cp = Entity["GeologicalPeriod", "MesozoicEra"]["ContinentalPlates"];vals = GeoGraphics[{GeoStyling[GrayLevel[.7]], #}, GeoBackground -> LightBlue, GeoProjection -> "Mollweide", GeoCenter -> {0, 0}, GeoRange -> All]& /@ Values[cp];ts = TimeSeries[vals, {TabularColumn@Keys[cp]}, ResamplingMethod -> {"Interpolation", InterpolationOrder -> 0}]ListAnimate[ts, AnimationRunning -> False]相关指南
-
▪
- 时间序列处理 ▪
- 日期和时间 ▪
- 使用 Wolfram Data Drop ▪
- 时间与事件序列格式 ▪
- 气象数据 ▪
- 事件序列处理 ▪
- 社会经济和人口统计数据 ▪
- 时间和事件序列数据源 ▪
- WDF(Wolfram 数据框架) ▪
- 描述性统计分析 ▪
- 科学数据分析
相关链接
文本
Wolfram Research (2014),TimeSeries,Wolfram 语言函数,https://reference.wolfram.com/language/ref/TimeSeries.html (更新于 2026 年).
CMS
Wolfram 语言. 2014. "TimeSeries." Wolfram 语言与系统参考资料中心. Wolfram Research. 最新版本 2026. https://reference.wolfram.com/language/ref/TimeSeries.html.
APA
Wolfram 语言. (2014). TimeSeries. Wolfram 语言与系统参考资料中心. 追溯自 https://reference.wolfram.com/language/ref/TimeSeries.html 年
BibTeX
@misc{reference.wolfram_2026_timeseries, author="Wolfram Research", title="{TimeSeries}", year="2026", howpublished="\url{https://reference.wolfram.com/language/ref/TimeSeries.html}", note=[Accessed: 02-November-2026]}
BibLaTeX
@online{reference.wolfram_2026_timeseries, organization={Wolfram Research}, title={TimeSeries}, year={2026}, url={https://reference.wolfram.com/language/ref/TimeSeries.html}, note=[Accessed: 02-November-2026]}