Алгоритм вычленения и сортировки данных

введите сюда описание изображенияЕсть большой объем данных по которым впоследствии строятся графики, условно вид следующий:

При построении по этим данным получается каша из линий, на которых еле-еле можно различить отдельные прямые или синусоиды.

Необходимо вычленить данные и построить графики "Один График на рисунке". Мои идеи это:

  • брать начальные значени и следующие выбирать путем нахождения меньшей дельты (может есть какое-либо название у такого алгоритма)
  • Либо воспользоваться одним из методов классификации из scikit-learn

Пните, пожалуйста, в нужном направлении.


Ответы (1 шт):

Автор решения: CrazyElf

Если у вас линии настолько хорошо разделимы, как это выглядит на картинке с частью данных, и в них нет разрывов (значение 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)

График данных "как есть":

введите сюда описание изображения

График данных после сортировки и разметки:

введите сюда описание изображения

→ Ссылка