Как применить метки порогов к значениям R (сила корреляции) в Anaconda Python? - PullRequest
1 голос
/ 16 мая 2019

Я развернул матрицу корреляции, чтобы я мог создать список коррелирующих пар и их корреляционную силу (R).Теперь я хочу добавить столбец, который применяет метки категорий к каждому значению на основе порога.

Thresholds:
1.'None':               x = 0
2.'Very Weak':      0 > x <= 0.3
3.'Weak':         0.3 > x <= 0.5
4.'Moderate':     0.5 > x <= 0.7
5.'Strong':       0.7 > x <= 0.9        
6.'Very Strong':  0.9 > x < 1
7.'Perfect':            x = 1

Я уже близко.Как мне сделать это без написания этого длинного пути с «если» и «еще»?

Я использую Jupyter notebook v5.0.0 через Ananconda Navigator

Я использую anaconda v pandas .cut () функционировать и становиться действительно близким, но я обнаруживаю, что мне приходится выдумывать мусорные ведра, чтобы приблизиться, но это не идеально.путь.

import pandas as pd  

df = pd.DataFrame({
'R Pairs' : ['A:B', 'A:C', 'A:D', 'A:E', 'A:F', 'B:C', 'B:D', 'B:E', 'B:F', 'C:D', 'C:E', 'C:F', 'D:E', 'D:F'],
'R' : [1, 0, -1, 0.1, 0, 0.8, -0.3, 0.99, 0.001, 0.51, 1, -0.68, 0.7, -0.9999]})  

bins = [0, 0.3, 0.5, 0.7, 0.9, 0.999, 1]  
labels = ['Very Weak', 'Weak', 'Moderate', 'Strong', 'Very Strong', 'Perfect']  

df['R Strength'] = pd.cut(df['R'].abs(), bins=bins, labels=labels)  
print(df)  

Output: 
   R Pairs       R   R Strength
0      A:B  1.0000      Perfect
1      A:C  0.0000          NaN
2      A:D -1.0000      Perfect
3      A:E  0.1000    Very Weak
4      A:F  0.0000          NaN
5      B:C  0.8000       Strong
6      B:D -0.3000    Very Weak
7      B:E  0.9900  Very Strong
8      B:F  0.0010    Very Weak
9      C:D  0.5100     Moderate
10     C:E  1.0000      Perfect
11     C:F -0.6800     Moderate
12     D:E  0.7000     Moderate
13     D:F -0.9999      Perfect

Я ожидал / надеялся, что «R Strengths» будет соответствовать порогам, которых нет на границах порогов.Я надеюсь, что упускаю что-то очевидное из параметров .cut ().

1 Ответ

0 голосов
/ 16 мая 2019

Попробуйте добавить еще одну корзину:

bins = [-1,0, 0.3, 0.5, 0.7, 0.9, 0.999, 1]  
labels = ['None','Very Weak', 'Weak', 'Moderate', 'Strong', 'Very Strong', 'Perfect']  

df['R Strength'] = pd.cut(df['R'].abs(), bins=bins, labels=labels)  

Вывод:

+----+---------+---------+-------------+
|    | R Pairs |    R    | R Strength  |
+----+---------+---------+-------------+
|  0 | A:B     | 1.0000  | Perfect     |
|  1 | A:C     | 0.0000  | None        |
|  2 | A:D     | -1.0000 | Perfect     |
|  3 | A:E     | 0.1000  | Very Weak   |
|  4 | A:F     | 0.0000  | None        |
|  5 | B:C     | 0.8000  | Strong      |
|  6 | B:D     | -0.3000 | Very Weak   |
|  7 | B:E     | 0.9900  | Very Strong |
|  8 | B:F     | 0.0010  | Very Weak   |
|  9 | C:D     | 0.5100  | Moderate    |
| 10 | C:E     | 1.0000  | Perfect     |
| 11 | C:F     | -0.6800 | Moderate    |
| 12 | D:E     | 0.7000  | Moderate    |
| 13 | D:F     | -0.9999 | Perfect     |
+----+---------+---------+-------------+
...