Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/306.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/ant/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何用Python将有序的一维数据粗化为不规则的容器_Python_Scipy_Binning - Fatal编程技术网

如何用Python将有序的一维数据粗化为不规则的容器

如何用Python将有序的一维数据粗化为不规则的容器,python,scipy,binning,Python,Scipy,Binning,我有一个有序1D数据集的高频集,该数据集与深度相关属性的观测值有关,由连续浮点值观测值与单调增加的深度组成 我想找到一种方法,将这些数据集粗化为用户定义数量的连续箱(或区域),每个箱(或区域)由单个平均值和较低的深度限制(顶部深度限制由其上方区域的末端定义)来描述。分割区域的标准应为k-均值,即(在规定区域数量的范围内),每个区域内的财产差异最小,相邻区域之间的差异最大 例如,如果我有一个小的高频数据集,如下所示 depth = [2920.530612, 2920.653061, 2920.7

我有一个有序1D数据集的高频集,该数据集与深度相关属性的观测值有关,由连续浮点值观测值与单调增加的深度组成

我想找到一种方法,将这些数据集粗化为用户定义数量的连续箱(或区域),每个箱(或区域)由单个平均值和较低的深度限制(顶部深度限制由其上方区域的末端定义)来描述。分割区域的标准应为k-均值,即(在规定区域数量的范围内),每个区域内的财产差异最小,相邻区域之间的差异最大

例如,如果我有一个小的高频数据集,如下所示

depth = [2920.530612, 2920.653061, 2920.734694, 2920.857143, 2920.938776, 2921.102041, 2921.22449, 2921.346939, 2921.469388, 2921.510204, 2921.55, 2921.632653, 2921.795918, 2922, 2922.081633, 2922.122449, 2922.244898, 2922.326531, 2922.489796, 2922.612245, 2922.857143, 2922.979592, 2923.020408, 2923.142857, 2923.265306]
value = [0.0098299, 0.009827939, 0.009826632, 1004.042327, 3696.000306, 3943.831644, 3038.254723, 3693.543377, 3692.806616, 50.04989348, 15.0127, 2665.2111, 3690.842641, 3238.749497, 429.4979635, 18.81228993, 1800.889643, 2662.199897, 3454.082382, 3934.140146, 3030.184014, 0.556587319, 8.593768956, 11.90163067, 26.01012696]
我要求将其分成7个区域,它将返回如下内容:

depth_7zone =[2920.530612, 2920.857143, 2920.857143, 2921.510204, 2921.510204, 2921.632653, 2921.632653, 2922.081633, 2922.081633, 2922.244898, 2922.244898, 2922.979592, 2922.979592, 2923.265306]
value_7zone = [0.009828157, 0.009828157, 3178.079832, 3178.079832, 32.53129674, 32.53129674, 3198.267746, 3198.267746, 224.1551267, 224.1551267, 2976.299216, 2976.299216, 11.76552848, 11.76552848]
可可视化为(蓝色=原始数据,红色=分为7个区域的数据)

我尝试过标准的k-means聚类,但它似乎不适合这个有序的1D问题。我在考虑可能用于数字信号处理的方法,但我能找到的所有方法都是离散化为恒定的存储单元大小,甚至用于图像压缩,但这可能有些过分,可能需要2D数据

有人能提出进一步探索的途径吗?(我是Python的新手,因此提前道歉)

%matplotlib inline
import matplotlib.pyplot as plt
import seaborn as sns; sns.set()

plt.plot(value, depth, '-o')
plt.plot(value_7zone, depth_7zone, '-', color='red')
plt.gca().invert_yaxis()
plt.xlabel('Values')
plt.ylabel('Depth')
plt.show()