Как построить график коэффициента корреляции между каждым атрибутом набора данных и целевым атрибутом с помощью Python

Я новичок в Python, и мне нужно построить график между коэффициентом корреляции каждого атрибута с целевым значением. У меня есть входной набор данных с огромным количеством значений. Я предоставил образец значения набора данных, как показано ниже. Нам нужно предсказать, уйдет ли конкретный потребитель из компании, и, следовательно, столбец Result является целевой переменной.

SALARY  DUE RENT    CALLSPERDAY CALL DURATION   RESULT
238790  7   109354  0                     6     YES
56004   0   204611  28                    15    NO
671672  27  371953  0                      4    NO
786035  1   421999  19                    11    YES
89684   2   503335  25                     8    NO
904285  3   522554  0                     13    YES
12072   4   307649  4                     11    NO
23621   19  389157  0                      4    YES
34769   11  291214  1                      13   YES
945835  23  515777  0                      5    NO

Здесь, если вы видите, столбец результата - это строка, а остальные столбцы - целые числа. Подобно результату, у меня также есть несколько других столбцов (не упомянутых в образце), которые имеют строковое значение. Здесь мне нужно вычислить значения столбца, который имеет как строковые, так и целочисленные значения. Используя словарь, я присвоил значение каждому столбцу, который имеет строковое значение. Пример: в столбце результатов указано «Да» или «Нет». Следовательно, ему присвоено значение, как показано ниже:

D = {'NO': 0, 'YES': 1}

и используя лямбда-функцию, перебрал каждый столбец набора данных и заменил NO на 0 и YES на 1. Я попытался вычислить коэффициент корреляции по формуле:

pearsonr(S.SALARY,targetVarible)

Где S - фрейм данных, содержащий все значения. Точно так же я пройдусь по всем столбцам набора данных и вычислю коэффициент корреляции каждого столбца относительно целевой переменной.

Это эффективный способ расчета коэффициента корреляции? Потому что я получаю значение, показанное ниже (0,088327739664096655, 1,1787456108540725e-25), e ^ -25 кажется слишком маленьким.

Есть ли другой способ рассчитать это? Не могли бы вы предложить какой-либо другой способ ввода значений String, чтобы его можно было рассматривать как целое число по сравнению с другими столбцами, имеющими целочисленные значения (кроме словарей и лямбда-выражений, которые я использовал?)

Также мне нужно построить гистограмму, используя тот же код. Я планирую использовать pyplot из matplotlib import в качестве библиотеки plt.

Не могли бы вы предложить какую-либо другую функцию для построения гистограммы? В основном я использую библиотеки sklearn, numpy и pandas, чтобы использовать существующие из них функции. Было бы здорово, если бы мне кто-то помог. Спасибо.


person Sriram Chandramouli    schedule 15.02.2016    source источник
comment
pandas.pydata.org/pandas-docs/stable/ сгенерировано /   -  person attitude_stool    schedule 16.02.2016
comment
Приведенная выше формула вычисляет коэффициент корреляции только для одного столбца. Но мне нужно вычислить, сравнив 2 столбца. Например, если у меня есть 10 столбцов с целевым атрибутом в 10-м столбце, мне нужно вычислить коэффициент корреляции для каждого столбца с 10-м столбцом. (Пример, 1-й столбец и 10-й столбец, 2-й столбец и 10-й столбец, 3-й столбец и 4-й столбец и т. Д.). Мне нужно перебрать каждый столбец, используя цикл for, а затем вычислить результат. Таким образом, мой результат должен быть примером: (0,02,0.2) (1-й и 10-й столбцы) (0,1,0.003) (2-й и 10-й столбцы), и это продолжается ..   -  person Sriram Chandramouli    schedule 16.02.2016
comment
Я использую формулу df = pd.DataFrame (S) для i в диапазоне (0,10): coeff = pearsonr (df [i:], targetVarible), но получаю ошибку ниже: ValueError: операнды не могут транслироваться вместе с фигурами ( 14000,12) (14000,)   -  person Sriram Chandramouli    schedule 16.02.2016
comment
df.corr() вычислит коэффициенты корреляции для каждой комбинации столбцов в df. Он должен быть достаточно эффективным. Ваша ошибка вызвана неправильным разрезанием фрейма данных. df[i:] означает переход к i-й строке вперед. Вам необходимо использовать нарезку столбцов, например df.iloc[:,i].   -  person attitude_stool    schedule 16.02.2016
comment
Большое спасибо, df.iloc [:, i] решил проблему с нарезкой. Теперь у меня есть коэффициент корреляции, а переменная coeff содержит все значение, как показано ниже. (0,015276990957300297, 0,070677809213518031) (0,088327739664096655, 1.1787456108540725e-25) (0,23333357248460856, 1.9664988076419354e-172) (+0,063525554286212399, 5.3380874135192959e-14) (-0,21236759430891403, 1.6844874116837465e-142) (+0,088098200193423654, 1.5724998265739893e-25) Теперь нужно построить гистограмму для обоих значений в коэфф. В соответствии с моим первоначальным вопросом, порекомендуете ли вы какую-либо другую функцию для построения графика?   -  person Sriram Chandramouli    schedule 16.02.2016
comment
Что касается гистограмм, см. Matplotlib.pyplot.hist. Что касается других функций, матрицы корреляции (созданные df.corr ()) часто визуализируются с помощью тепловых карт. Реализация Seaborn очень проста: stanford.edu/~mwaskom/software / seaborn / created /.   -  person attitude_stool    schedule 16.02.2016
comment
Большое спасибо. Я проверил matplotlib и смог получить оттуда диаграмму.   -  person Sriram Chandramouli    schedule 18.02.2016


Ответы (1)


Как упоминалось в комментариях, вы можете использовать df.corr () для получения корреляционной матрицы ваших данных. Предполагая, что имя вашего DataFrame - df, вы можете построить корреляцию с помощью:

df_corr = df.corr()
df_corr[['RESULT']].plot(kind='hist')

Pandas DataFrames имеет функцию построения графика, которая использует matplotlib. Подробнее об этом можно узнать здесь: http://pandas.pydata.org/pandas-docs/stable/visualization.html

person Dimosthenis    schedule 01.05.2016