Алгоритм вычленения и сортировки данных
Есть большой объем данных по которым впоследствии строятся графики, условно вид следующий:
При построении по этим данным получается каша из линий, на которых еле-еле можно различить отдельные прямые или синусоиды.
Необходимо вычленить данные и построить графики "Один График на рисунке". Мои идеи это:
- брать начальные значени и следующие выбирать путем нахождения меньшей дельты (может есть какое-либо название у такого алгоритма)
- Либо воспользоваться одним из методов классификации из scikit-learn
Пните, пожалуйста, в нужном направлении.
Ответы (1 шт):
Если у вас линии настолько хорошо разделимы, как это выглядит на картинке с частью данных, и в них нет разрывов (значение y по каждому из графиков есть для каждого значения x), то ваши данные можно просто отсортировать и перенумеровать с использованием библиотеки Pandas. Пример с генерацией подобных данных (поскольку вы не предоставили свои данные в воспроизводимом виде):
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
# Генерация искусственных данных
n = 20
k = 10
x = np.arange(0, n, 1/k).astype(np.int32)
y = np.array(list(range(k))*n) * 10 + np.random.rand(n*k)
df = pd.DataFrame({'x': x, 'y': y})
# Простое рисование
plt.figure()
sns.lineplot(x='x', y='y', data=df, estimator=None)
# Нумеруем графики
df = df.sort_values(['x','y'])
df['num'] = df.groupby(['x']).cumcount()
# Отрисовка отдельными линиями
plt.figure()
sns.lineplot(x='x', y='y', hue='num', data=df)
График данных "как есть":
График данных после сортировки и разметки:

