Выбросы интенсивности на двумерном графике (максимальные или минимальные локальные пики высокой интенсивности)Python

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Выбросы интенсивности на двумерном графике (максимальные или минимальные локальные пики высокой интенсивности)

Сообщение Anonymous »

Интересно, какой метод лучше использовать, чтобы увидеть выбросы значения z на 2D-графике. Например, у меня есть измерения значений x и y в диапазоне от 1 до 16 с шагом 1. Затем я вычисляю, сколько наблюдений имеет каждая пара x и y (x_n, y_n). Это дает мне сетку 16 на 16 с количеством наблюдений на пару (z). Поскольку x и y коррелируют (~0,5), мы ожидаем, что некоторые группы точек будут встречаться чаще, чем другие. Бывает, что там, где ожидается мало наблюдений, их представлено много. Какая-то ошибка оборудования. Как лучше всего найти их в больших данных, где сетка имеет размер не 16 на 16, а 9000 x 9000.
Вот пример жестко запрограммированной песочницы:

Код: Выделить всё

import pandas as pd
import matplotlib.pyplot as plt
# Let's make data x, y, z.
x = [i for i in range(1, 17) for j in range(16)]
y = list(range(1, 17)) * 16
z = []
z = (z + [2000]*16 + [2000]*16 +
([2000]*2 + [5000]*12 + [2000]*2) +
([2000]*2 + [5000]*12 + [2000]*2) +
([2000]*2 + [5000]*2 + [7000]*8 + [5000]*2 + [2000]*2) +
([2000]*2 + [5000]*2 + [7000] + [9000]*6 + [7000] + [5000]*2 + [2000]*2) +
([2000]*2 + [5000]*2 + [7000] + [9000] + [10000]*4 + [9000] + [7000] + [5000]*2 + [2000]*2) +
([2000]*2 + [5000]*2 + [7000] + [9000] + [10000] + [16000]*2 + [10000] + [9000] + [7000] + [5000]*2 + [2000]*2))
z1 = z.copy()
z1.reverse()
z = z + z1

df = pd.DataFrame({'x': x, 'y': y, 'z': z})

import matplotlib.pyplot as plt
# Create scatter plot with color mapping
plt.scatter(df.x, df.y, c=df.z, cmap='viridis', s=100, alpha=0.7)

# Add color bar
plt.colorbar(label='Intensity')

# Set labels and title
plt.xlabel('X Label')
plt.ylabel('Y Label')
plt.show()

df.loc[(df['x'] == 2) & (df['y'] == 6), 'z'] = 15000
df.loc[(df['x'] == 15) & (df['y'] == 2), 'z'] = 15000

plt.scatter(df.x, df.y, c=df.z, cmap='viridis', s=100, alpha=0.7)

# Add color bar
plt.colorbar(label='Intensity')

# Set labels and title
plt.xlabel('X Label')
plt.ylabel('Y Label')
plt.show()
Изображение

Таким образом, соседние x и y имеют значение z намного ниже, чем выбросы.
Я изучал KDE, контур и локальный выброс Фактор (LOF), но успеха не имел. На самом деле KDE работает нормально, но пропускная способность существенно влияет на обнаружение выбросов. Мне нужно найти точки, в которых значение z значительно отличается от значений z соседей на большой диаграмме рассеяния.

Подробнее здесь: https://stackoverflow.com/questions/784 ... -intensity
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»