Почему corr () дает мне результаты только с типом int, uint или float, а не с типом объекта? - PullRequest
0 голосов
/ 05 апреля 2019

Просто чтобы прояснить, я использую Python в Jupyter Notebook

Я хочу улучшить свои навыки в области Data Science, поэтому я взял на себя проект, который был завершен на прошлой неделе.

В этом проекте моей целью было построение логистической регрессии.Я сделал свою подготовку данных и так далее, и я сделал выбор функций, и после всего этого, чтобы уточнить свою модель, я сделал corr () и получил последние функции, которые были коррелированы.

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

Давайте посмотрим, как я это сделал в первый раз (это было после всей моей подготовки данных и так далее):

  • Я сделал пустышку со своими категориальными столбцами
df1=pd.get_dummies(df[[cat_cols]])

  • Я согласился со своими количественными столбцами
df2=df[[cols]]

df_c=pd.concat([df1,df2],axis=1)

Я попыталсялогистическая регрессия, auc и т. д., и я сделал выбор объектов с низкой дисперсией


Features = np.array(T)
Labels = np.array(z)

#T and z are my X and y

sel = fs.VarianceThreshold(threshold=(.8 * (1 - .8)))
Features_reduced = sel.fit_transform(Features)

. А с остальными функциями я наблюдал корреляцию, чтобы сделать окончательный выбор

T.corr()


corr = T.corr()
fig = plt.figure(figsize=(12, 12))
ax = fig.add_subplot(111)
cax = ax.matshow(corr,cmap='coolwarm', vmin=-1, vmax=1)
fig.colorbar(cax)
ticks = np.arange(0,len(T.columns),1)
ax.set_xticks(ticks)
plt.xticks(rotation=90)
ax.set_yticks(ticks)
ax.set_xticklabels(T.columns)
ax.set_yticklabels(T.columns)
plt.show()

Iполучилось что-то вроде этого:

https://image.noelshack.com/fichiers/2019/14/5/1554459054-stack.png

Пока все хорошо, моя переменная была в типе "uint" или "int" или float ", так что все во всем мире отлично.

Но я думаю, что лучше увидеть корреляцию до моей моделизации. Чтобы вскоре отклонить переменную.

Поэтому я попытался выполнить этот фрагмент кода после подготовки данных, но до выбора функций:

T.corr()


corr = T.corr()
fig = plt.figure(figsize=(12, 12))
ax = fig.add_subplot(111)
cax = ax.matshow(corr,cmap='coolwarm', vmin=-1, vmax=1)
fig.colorbar(cax)
ticks = np.arange(0,len(T.columns),1)
ax.set_xticks(ticks)
plt.xticks(rotation=90)
ax.set_yticks(ticks)
ax.set_xticklabels(T.columns)
ax.set_yticklabels(T.columns)
plt.show()

Но некоторые из моих вариbles (категориальные) находятся в 'str', а не в int 'uint' больше, потому что я не сделал с ними пустышку.Таким образом, corr () не работает для них, он работает только для типов "int" и "float".

Я пытался преобразовать свою категориальную переменную в "category", но corr () не сделалЯ тоже не смог их использовать.

Я пытался преобразовать их в "int" или "float", но не было никакого способа, чтобы это работало, потому что мои категориальные столбцы были сделаны из строки, такой как "Front_Website" и т.1043 *

Так что я превращаю их в фиктивную, но теперь у меня есть так много функций в моем corr (), потому что это до выбора моей функции.

Итак, мой вопрос: как увидеть корреляцию моей базы данных?без преобразования их в пустышку раньше?

Я просто хочу увидеть корреляцию между моей переменной с самого начала.И не только тип int или float.

Надеюсь, мой пост понятен.

Спасибо.

РЕДАКТИРОВАТЬ:

Я пыталсячто

table = pd.crosstab(df['Club Member'], df['Profil Price Club'])

from scipy.stats import chi2_contingency

chi2, p, dof, expected = chi2_contingency(table.values)

print(chi2, p)

Но очень утомительно получить это для всех моих категорических столбцов.

Нет способа получить это для всех моих категориальных столбцов одновременно?

1 Ответ

0 голосов
/ 05 апреля 2019

Попытка преобразовать категориальные переменные либо в фиктивные переменные, либо сразу в int или float, тщетна и выдает ошибку.Также нет смысла искать корреляцию между категориальными переменными.

Вы можете использовать анализ хи-квадрат, чтобы найти связь между категориальными переменными, используя этот модуль:

from scipy.stats import chisquare
...