Записать вывод функции в датафрейм
Я рассчитываю корреляции между несколькими переменными:
import pandas as pd
from scipy import stats
data = {'первый' : [12, 17, 56, 87, 35],
'второй' : [33, 34, 23, 61, 38],
'третий' : [11, 42, 47, 12, 14],
'четвертый' : [10, 3, 76, 87, 23],
'пятый' : [24, 51, 43, 32, 55]}
frame = pd.DataFrame(data)
stats.spearmanr(frame)
И хочу все это сохранить в табличном виде в экселе, т.к. в консоли немного нечитаемо. Но методом pd.DataFrame() почему-то не получается, либо я что-то не так делаю. Помогите, пожалуйста.
П.С. А еще большая благодарность тому, кто подскажет, как соединить correlation и pvalue в одну ячейку, чтоб рядом со значениями корреляций в квадратах выводился уровень значимости (например, если pvalue<=0.05, то рядом с числом выводится одна звездочка "*", а если pvalue<=0.01, то две звездочки "**"). Ну или хотя бы чтоб просто выводились только значимые значения, у которых уровень значимости pvalue<=0.05.
Ответы (1 шт):
Ну я довольно тупо "влоб" вот набросал. Наверняка можно как-то более красиво:
s = stats.spearmanr(frame)
sx, sy = s.correlation.shape
m = []
for y in range(sy):
row = []
for x in range(sx):
z = f'{s.correlation[y,x]:.2f}'
if s.pvalue[y,x] < 0.01:
z += '**'
elif s.pvalue[y,x] < 0.05:
z += '*'
row.append(z)
m.append(row)
df_corr = pd.DataFrame(m)
df_corr.columns = frame.columns
df_corr.index = frame.columns
df_corr
Вывод:
первый второй третий четвертый пятый
первый 1.00** 0.40 0.30 0.90* 0.10
второй 0.40 1.00** -0.40 0.30 0.20
третий 0.30 -0.40 1.00** 0.00 0.60
четвертый 0.90* 0.30 0.00 1.00** -0.20
пятый 0.10 0.20 0.60 -0.20 1.00**