我必须使用从某些CSV导入的时间序列数据,如下所示:
import pandas as pd
csv_a = [["Sensor_1", '2019-05-25 10:00', 25, 60],
["Sensor_2", '2019-05-25 10:00', 30, 45],
["Sensor_1", '2019-05-25 10:05', 26, None],
["Sensor_2", '2019-05-25 10:05', 30, 46],
["Sensor_1", '2019-05-25 10:10', 27, 63],
["Sensor_1", '2019-05-25 10:20', 28, 62]]
df_a = pd.DataFrame(csv_a, columns=["Sensor", "Timestamp", "Temperature", "Humidity"])
df_a["Timestamp"] = (pd.to_datetime(df_a["Timestamp"]))
csv_b = [["Sensor_1", '2019-05-25 10:05', 1020],
["Sensor_2", '2019-05-25 10:05', 956],
["Sensor_3", '2019-05-25 10:05', 990],
["Sensor_1", '2019-05-25 10:10', 1021],
["Sensor_2", '2019-05-25 10:10', 957],
["Sensor_3", '2019-05-25 10:10', 992],
["Sensor_1", '2019-05-25 10:15', 1019]]
df_b = pd.DataFrame(csv_b, …Run Code Online (Sandbox Code Playgroud) 我正在准备一些代码来用样条插入一系列点。
样条有很多种:二次的,三次的,很多边界条件……
到目前为止,我已经尝试了最流行的:三次样条,边界条件:
我还尝试了具有“夹紧”初始条件的二次样条。
我发现当我们像这样定义跟踪时,Plotly 也有一个内置的插值函数:
fig.add_trace(go.Scatter(
x=df['timestamp'],
y=df['values'],
mode='lines',
line_shape='spline',
))
Run Code Online (Sandbox Code Playgroud)
这个情节的样条线看起来很合我的口味。例如,它比自然三次样条更柔软且振荡更小:
红线是自然三次样条。灰线是 plotly 的样条。
所以我的问题是:这是什么类型的样条?
我试图将它与我上面提到的曲线进行比较。它们都不像 Plotly 的样条。
我检查了 Plotly 的文档,它没有告诉你他们使用的是哪种曲线。但是它说您可以添加参数“平滑”以控制曲率。
有谁知道 Plotly 的人是怎么做的?
假设我有一个正在循环的算法。它将返回未知数量的结果,我想将它们全部存储在 DataFrame 中。例如:
df_results = pd.DataFrame(columns=['x', 'x_squared'])
x = 0
x_squared = 1
while x_squared < 100:
x_squared = x ** 2
df_iteration = pd.DataFrame(data=[[x,x_squared]], columns=['x', 'x_squared'])
df_results = df_results.append(df_iteration, ignore_index=True)
x += 1
print(df_results)
Run Code Online (Sandbox Code Playgroud)
输出:
x x_squared
0 0 0
1 1 1
2 2 4
3 3 9
4 4 16
5 5 25
6 6 36
7 7 49
8 8 64
9 9 81
10 10 100
Run Code Online (Sandbox Code Playgroud)
问题是当我想要进行大量迭代时。数学运算本身非常快。然而,当我们进行大循环时,数据帧的创建和附加变得非常慢。
我知道这个特定的例子可以很容易地解决,而无需在每次迭代中使用数据帧。但是想象一个复杂的算法,它还对数据帧等执行操作。对我来说,有时一步一步构建结果数据帧会更容易。哪种方法是最好的?