Как сгладить упорядоченные одномерные данные в нерегулярные ячейки с помощью Python - PullRequest
0 голосов
/ 13 марта 2019

У меня есть высокочастотный набор упорядоченного набора данных 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 зон);

%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()

Original data with zonated (in red) data

Я пробовал стандартное K- означает кластеризацию, и она не подходит для этой упорядоченной проблемы 1D.Я думал о методах, возможно, используемых для цифровой обработки сигналов, но все, что я мог найти, можно дискретизировать на постоянные размеры бинов или даже для сжатия изображений, но это может быть излишним и, вероятно, ожидать 2D-данных

Может кто-нибудь предложить путь для исследованияв дальнейшем?(Я довольно новичок в Python, поэтому заранее извиняюсь)

...