import pandas as pd
import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt
df= pd.read_csv('c:/1/Stroke_Prediction_CLEAR.csv')
df.head(5)
Out[1]:
1. Podział danych na ciągłe i dyskretne¶
In [2]:
del df['Unnamed: 0']
df.dtypes
Out[2]:
In [3]:
categorical_vars = df.describe(include=["object"]).columns
continuous_vars = df.describe().columns
In [4]:
# zmienne dyskretne
categorical_vars
Out[4]:
In [5]:
# zmienne ciągłe
continuous_vars
Out[5]:
2. Przegląd struktury danych ciągłych i danych dyskretnych¶
In [6]:
sns.set(style="white")
_ = df.hist(column=continuous_vars, figsize = (16,16))
In [7]:
fig, axes = plt.subplots(3, 2, figsize=(16, 16))
# robię przestrzeń między wykresami
plt.subplots_adjust(left=None, bottom=None, right=None, top=None, wspace=0.8, hspace=0.3)
# pętla: mamy 9 zmiennych dyskretnych
for i, ax in enumerate(axes.ravel()):
if i > 9:
ax.set_visible(False)
continue
sns.countplot(y = categorical_vars[i], data=df, ax=ax)
2. Cyfryzacja wartości dyskretnych¶
In [8]:
df['Gender_C'] = pd.Categorical(df['Gender']).codes
df[['Gender','Gender_C']].head(5)
Out[8]:
In [9]:
df['Ever_Married_C'] = pd.Categorical(df['Ever_Married']).codes
df[['Ever_Married','Ever_Married_C']].sample(5)
Out[9]:
In [10]:
df['Type_Of_Work_C'] = pd.Categorical(df['Type_Of_Work']).codes
df[['Type_Of_Work','Type_Of_Work_C']].sample(3)
Out[10]:
In [11]:
df['Residence_C'] = pd.Categorical(df['Residence']).codes
df[['Residence','Residence_C']].sample(3)
Out[11]:
In [12]:
df['Smoking_Status_C'] = pd.Categorical(df['Smoking_Status']).codes
df[['Smoking_Status','Smoking_Status_C']].sample(3)
Out[12]:
In [13]:
df['Age_years_10_C'] = pd.Categorical(df['Age_years_10']).codes
df[['Age_years_10','Age_years_10_C']].sample(5)
Out[13]:
3. Analiza korelacji zmiennych¶
W procesie klasyfikacji pojawienie się zjawiska multicollinearity jest bardzo niekorzystne dla stabilności modelu.
Sprawdzam, jaki jest poziom wzajemnej korelacji zmiennych.
In [14]:
categorical_vars = df.describe(include=["object"]).columns
continuous_vars = df.describe().columns
In [15]:
continuous_vars
Out[15]:
In [16]:
plt.figure(figsize=(10,6))
CORREL =df.corr()
sns.heatmap(CORREL, annot=True, cbar=False, cmap="coolwarm")
plt.title('Macierz korelacji ze zmienną wynikową: Stroke', fontsize=20)
Out[16]:
In [17]:
CORREL = df.corr().sort_values('Stroke')
CORREL['Stroke'].to_frame().sort_values('Stroke')
plt.figure(figsize=(10,6))
CORREL['Stroke'].plot(kind='barh', color='red')
plt.title('Korelacja ze zmienną wynikową', fontsize=20)
plt.xlabel('Poziom korelacji')
plt.ylabel('Zmienne niezależne ciągłe')
Out[17]:
Wnioski: Zmienne niezależne słabo się korelują ze zmienną wynikową. Nie występuje też istotna korelacja między zmiennymi zależnymi. Gdyby występowała wysoka korelacja pomiędzy zmiennymi, powstałaby groźba zjawiska: multicollinearity.
W takiej sytuacji należałoby skorzystać z VIF (variance inflation factor) w celu eliminacji części zmiennych niezależnych.
W takiej sytuacji należałoby skorzystać z VIF (variance inflation factor) w celu eliminacji części zmiennych niezależnych.
Zapisuję przygotowane dane
In [18]:
df.to_csv('c:/1/Stroke_Prediction_NUM.csv')
The end of Part_2: Stroke_Prediction – Preparation of data for the classification process
Part_3 Stroke_Prediction – Czy palenie przyczynia się do udaru mózgu
