Я хочу обнаруживать диапазоны с одинаковыми числовыми границами набора данных, используя matplotlib или pandas в python 3.7 - PullRequest
0 голосов
/ 05 августа 2020

У меня куча диапазонов. Все они состоят из чисел. Диапазон имеет максимум и минимум, которые не могут быть превышены, но, учитывая пример, у вас есть два диапазона, и одна точка max диапазона достигает выше min области другого . Это будет означать, что у вас есть небольшая область, которая покрывает их обоих. Вы можете написать один диапазон, который включает в себя другие.

Я хочу посмотреть, перекрываются ли некоторые диапазоны или могу ли я найти некоторые диапазоны, которые покрывают большую часть другого. Цель - посмотреть, смогу ли я упростить их, используя один меньший диапазон, который вписывается в другой. Например, 7,8 - 9,6 и 7,9 - 9,6 могут быть покрыты одним диапазоном.

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

Я знаю, что могу определять повторяющиеся диапазоны, используя python. Но я не хочу знать, как часто возникает диапазон. Я хочу знать, сколько диапазонов лежит в одних и тех же числовых границах. Я хочу посмотреть, смогу ли я иметь пару диапазонов, покрывающих их все. Наконец, моя цель - отсортировать мастер-классы по категориям. Это означает, что у меня есть диапазон 1, охватывающий 50 других диапазонов. затем диапазон 2, охватывающий 25 диапазонов и т. д.

Моя текущая программа показывает проникновение в диапазоны, но я также хочу, чтобы это было в печатном виде с точными цифрами.

Было бы неплохо, если бы вы поделитесь некоторыми идеями по решению этой программы или если у вас есть предложения по инструментам в пределах python 3,7

import matplotlib.pyplot as plt

intervals = [[3.6,4.5],
[3.6,4.5],
[7.8,9.6],
[7.9,9.6],
[7.8,9.6],
[3.4,4.1],
[2.8,3.4],

[8.25,9.83],
[3.62,3.96],
[8.25,9.83],
[0.62,0.68],
[2.15,2.49],

[0.8,1.0],
[0.8,1.0],
[3.1,3.9],
[6.7,8.3],

[1,1.5],
[1,1.2],
[1.5,1.8],
[1.8,2.5],
[3,4.0],
[6.5,8.0],

[1.129,1.35],
[2.82,3.38],
[1.69,3.38],
[3.38,6.21],
[2.25,2.82],
[5.649,6.214],
[1.920,6.214]
]

for int in intervals:
    plt.plot(int,[0,0], 'b', alpha = 0.2, linewidth = 100)

plt.show()

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

1 Ответ

0 голосов
/ 05 августа 2020

Вот идея, вы создаете фрейм данных pandas с массивом. Вы вычитаете значения в столбце 2 - столбец1 (столбец 1 - это x, а столбец 2 - это y). После этого вы создаете гистограмму, в которой берете диапазон и частоту.

import pandas as pd
import numpy as np

import matplotlib.pyplot as plt

intervals = [[3.6,4.5],
[3.6,4.5],
[7.8,9.6],
[7.9,9.6],
[7.8,9.6],
[3.4,4.1],
[2.8,3.4],

[8.25,9.83],
[3.62,3.96],
[8.25,9.83],
[0.62,0.68],
[2.15,2.49],

[0.8,1.0],
[0.8,1.0],
[3.1,3.9],
[6.7,8.3],

[1,1.5],
[1,1.2],
[1.5,1.8],
[1.8,2.5],
[3,4.0],
[6.5,8.0],

[1.129,1.35],
[2.82,3.38],
[1.69,3.38],
[3.38,6.21],
[2.25,2.82],
[5.649,6.214],
[1.920,6.214]]

intervals_ar = np.array(intervals)

df = pd.DataFrame({'Column1': intervals_ar[:, 0], 'Column2': intervals_ar[:, 1]})
df['Ranges'] = df['Column2'] - df ['Column1']
print(df)

frecuency_range = df['Ranges'].value_counts().sort_index()
print(frecuency_range)

df.Ranges.value_counts().sort_index().plot(kind = 'hist', bins = 5)
plt.title("Histogram Frecuency vs Range (column 2- column1)")
plt.show()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...