python - 日期时间格式 X 值的 2D 插值
问题描述
我有一个这样的数据框:
import pandas as pd
import numpy as np
time = pd.date_range('2018-05-14 00:00:00','2018-05-14 01:00:00',freq='5T')
mile = np.linspace(0,100,10)
x = list(time)*len(mile)
y = np.repeat(mile,len(time))
z = []
for i in range(0,10,1):
z.extend(np.random.normal(loc=i*5, scale=5, size=13))
origin_data = pd.DataFrame({'x':x, 'y':y ,'z':z})
origin_data
包含原始点的位置(x 和 y)及其值(z)。我想z
在这些新位置插入值:仅x = pd.date_range('2018-05-14 00:00:00','2018-05-14 01:00:00',freq='1T')
使用y = np.linspace(0,91,1)
双线性插值。
我了解了有关scipy.interpolate.interp2d
. 但它的 x 类型是数字,我的是日期时间。另外,教程的z
值是在我的值已经给出的时候计算的,所以我不知道如何处理输入z
值的顺序。谁能给我一个示例,其中包含基于我上面提供的数据框的插值结果图?感谢您的关注!
解决方案
这是我发现这个问题的方式:
import pandas as pd
import numpy as np
from scipy import interpolate
import itertools
time = pd.date_range('2018-05-14 00:00:00','2018-05-14 01:00:00',freq='5T')
mile = np.arange(0,100,10)
x = list(time)*len(mile)
y = np.repeat(mile,len(time))
z = []
for i in range(0,10,1):
z.extend(np.random.normal(loc=i*5, scale=5, size=13))
origin_data = pd.DataFrame({'x':x, 'y':y ,'z':z})
from ggplot import *
ggplot(aes(x = 'x', y = 'y', colour = 'z'), data = origin_data) +\
geom_point(size = 100) +\
scale_x_date(labels = date_format("%Y-%m-%d %H:%M:S"))
x_numeric = [x.timestamp() for x in origin_data['x']]
x_cors = pd.unique(x_numeric)
y_cors = pd.unique(origin_data['y'])
cors = list(itertools.product(x_cors,y_cors))
interp_func = interpolate.LinearNDInterpolator(cors, z)
interp_func = interpolate.CloughTocher2DInterpolator(cors, z)
new_x = [x.timestamp() for x in pd.date_range('2018-05-14 00:00:00','2018-05-14 01:00:00',freq='1T')]
new_y = np.arange(0,91,1)
new_cors = list(itertools.product(new_x,new_y))
new_z = interp_func(new_cors)
new_data = pd.DataFrame({'x':[x[0] for x in new_cors],
'y':[x[1] for x in new_cors],
'z':new_z})
import datetime
new_data['x'] = [pd.Timestamp(x,unit = 's') for x in new_data['x']]
ggplot(aes(x='x',y='y',colour='z'),data=new_data) +\
geom_point(size=100) +\
scale_x_date(labels = date_format("%Y-%m-%d %H:%M:S"))
推荐阅读
- php - 在没有 GROUP BY 的聚合查询中,SELECT 列表的表达式 #2 包含非聚合列“abid”;
- redis - Redis 原子弹出并添加到排序集,相当于 BRPOPLPUSH
- java - java - 如何从控制台获取下一行的输入?我已经编写了一个代码,但它没有提供所需的输出
- c# - .Net Core Async Await - 未按预期运行
- python-3.x - Pandas 数据透视表中的计算字段
- android - Unity启动画面android build 2018.2.5f1后灰屏10秒
- mirth-connect - 无法在 Windows 服务器公共 IP 上启动 mirth connect
- sql-server - 在 XPath 到 SQL Server XML 列中从 sum 中消除 xml 节点
- r - 如何在 R 中执行断线回归分析?
- javafx - 从另一个线程写入应用程序 jfx 画布