Разделение данных с использованием таймфрейма на группы в пандах Python - PullRequest
0 голосов
/ 04 октября 2018

У меня есть фрейм данных с именем df, который нравится, но на самом деле это [9147 строк x 3 столбца]

indexID  RngUni[m]  PowUni[dB]
157203   1.292283      132
157201   1.271878      132
157016   1.285481      134
157404   1.305886      136
157500   1.353496      136
157524   1.251474      136
157227   1.292283      132
157543   1.339893      136
157903   1.353496      138
156928   1.299084      134
157373   1.299084      136
156937   1.414709      134
157461   1.353496      136
157718   1.360297      138
157815   1.326290      138
157806   1.271878      134
156899   1.360298      134
157486   1.414709      138
157628   1.271878      136
157405   1.299084      134
157244   1.299084      134
157522   1.258275      136
157515   1.367099      138
157086   1.305886      136
157602   1.251474      134
157131   1.265077      132
157170   1.380702      138
156904   1.360297      134
157209   1.401106      138
157018   1.265077      134

Я пытаюсь выбрать определенные значения данных в таблице.

df.plot(x = 'RngUni[m]', y = 'PowUni[dB]', kind = 'scatter') дает: enter image description here

Предполагая, что основная группа - это область, где сосредоточено большинство точек данных, мне нужно выбрать80% точек в основной группе и 20% точек вне основной группы.

Мне нужен indexID всех точек, выведенных в виде списка.Как я могу это сделать?

Пример требуемой кластеризации.То, что я хотел бы сделать, это выбрать 80% точек в круге и 20% точек за пределами круга.enter image description here

1 Ответ

0 голосов
/ 04 октября 2018

Вот как я выполню эту задачу:

from io import StringIO
import pandas as pd
from sklearn.cluster import KMeans

s = '''indexID  RngUni[m]  PowUni[dB]
157203   1.292283      132
157201   1.271878      132
157016   1.285481      134
157404   1.305886      136
157500   1.353496      136
157524   1.251474      136
157227   1.292283      132
157543   1.339893      136
157903   1.353496      138
156928   1.299084      134
157373   1.299084      136
156937   1.414709      134
157461   1.353496      136
157718   1.360297      138
157815   1.326290      138
157806   1.271878      134
156899   1.360298      134
157486   1.414709      138
157628   1.271878      136
157405   1.299084      134
157244   1.299084      134
157522   1.258275      136
157515   1.367099      138
157086   1.305886      136
157602   1.251474      134
157131   1.265077      132
157170   1.380702      138
156904   1.360297      134
157209   1.401106      138
157018   1.265077      134'''

ss = StringIO(s)
df = pd.read_csv(ss, sep=r"\s+")
kmeans = KMeans(n_clusters=2, random_state=0).fit(df.values[:,[1,2]])
df['labels']=kmeans.labels_
df['labels']=kmeans.labels_
df.labels.apply(lambda x: 'red' if x==1 else 'blue')

plt.scatter(x=df['RngUni[m]'], y=df['PowUni[dB]'], c=df['labels'])

Вывод: enter image description here

Просто измените алгоритм кластеризации и поиграйтесь с параметрамичтобы получить нужные кластеры и цвета.

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...