<jupyter_start><jupyter_text>1. Zaimportowanie danych i bibliotek<jupyter_code>import pandas as pd
import numpy as np
import sklearn
from sklearn.datasets import load_boston
import seaborn as sns
import matplotlib.pyplot as plt
import warnings
warnings.filterwarnings('ignore')
data = pd.read_csv('heart_disease_dataset.csv')<jupyter_output><empty_output><jupyter_text>2. Missing valuesNa początek zajmijmy się "Missing values". Sprawdźmy czy jakieś są i zastanówmy się jak sobie z nimi poradzić<jupyter_code>data.describe()<jupyter_output><empty_output><jupyter_text>Widzimy, że zarówno w zmiennej ca, jak i thal mamy bardzo odstające wartości, co możę sugerować, ze mamy do czynienai z specyficznym oznaczeniem ich. Spróbujmy je wyeliminować w sposób, który najmniej zaburzy nam dataset. Jako, że są to zmienne, które nei są ciągłe i samych braków nie jest dużo, zdecydowałem się na usunięcie wierszy z brakujacymi danymi.<jupyter_code>data_removed = data[(data.ca != -100000) & (data.thal != -100000)]
data_removed.describe()<jupyter_output><empty_output><jupyter_text>Sprawdźmy, jak różnią się w zależnosći w data frame'ach z usuniętymi i pozostawionymi rekordami.<jupyter_code>corr = data.corr()
ax = sns.heatmap(corr, 
            xticklabels=corr.columns,
            yticklabels=corr.columns, annot=True)
bottom, top = ax.get_ylim()
ax.set_ylim(bottom + 0.5, top - 0.5)
ax.set_title('Korelacja zmiennych bez usuwania')
plt.rcParams["figure.figsize"] = 20,20
plt.show()
corr = data_removed.corr()
ax = sns.heatmap(corr, 
            xticklabels=corr.columns,
            yticklabels=corr.columns, annot=True)
bottom, top = ax.get_ylim()
ax.set_ylim(bottom + 0.5, top - 0.5)
ax.set_title('Korelacja zmiennych bez usuwania')
plt.rcParams["figure.figsize"] = 20,20
plt.show()<jupyter_output><empty_output><jupyter_text>Widzimy, że heatmapa korealcji zasadniczo różni się dla 2 podejść. Wydaje mi się, że podejście z usunieciem rekordów jest dużo bardziej poprawne, ponieważ brakujące dane były przedstawione za pomocą liczb, które nie miały zupełnei sensu i zaburzały macierz korelacji. Dlatego w dalszej części bedziemy operować na danych z usuniętymi wierszami.  3. Zależność slope - oldpeakZajmijmy się zależnoscią o największym współczynniku korelacji slope - oldpeak<jupyter_code>sns.pairplot(data_removed.loc[:,["oldpeak","slope"]], size=5)
plt.tight_layout()

# zmienna oldpeak ma rozkład ekspotencjalny
# jako, ze ma rozkład ekspotencjalny, na pewno znajdą się jakeiś outliery<jupyter_output><empty_output><jupyter_text>3.1. Outliery dla zmiennej oldpeak<jupyter_code>plt.boxplot(data_removed.oldpeak)
plt.title("Boxplot zmiennej oldpeak")
# widzimy, ze jest kilka outlierów
oldpeak_slope = data_removed.iloc[:,[9,10]]
sns.violinplot(oldpeak_slope.slope,oldpeak_slope.oldpeak)
plt.title("Rozrzut zmiennej slope w zależności od zmiennej oldpeak")
# po wyrkesach skrzypcowych również widać zależnosć pomiiędzy tymi oab zmiennymi, bo widzimy,
# ze w zaleznosci od kategorii zmiennej slope, zmienna oldpeak ma różną gestosc<jupyter_output><empty_output><jupyter_text>4. Rozkład zmiennych ciągłychZ danych z datasetu widać, że rozkłady ciągłe mają zmienne: age, trestbps, chol, thalach, oldpeak.Przedstawmy graficznie ich histogramy oraz linię gęstosci<jupyter_code>fig, axs = plt.subplots(ncols=2, nrows=3)
variables = ["age",'trestbps','chol','thalach','oldpeak']
plot_number = 0
# Rysowanie wykresów w pętli 
for i in variables:
    plot_dens = sns.distplot(data_removed[i], hist = True, kde = True,
                 kde_kws = {'shade': True, 'linewidth': 3},
                         ax = axs[ plot_number//2, plot_number%2]).set_title("Rozkład zmiennej " + i)
    plot_number += 1 
    
# Widzimy, ze 4 z otrzymanych wykresów przypominają rozkład normalny
# aby poszukać ręcznie, wizualnie zależnosci mozemy stworzyć wykres zawierający wszystkie zmienne z rozkłądem ciągłym
sns.pairplot(data.loc[:,variables], diag_kind="kde")
# widać, ze ciężko recznie w czyms takim znalezc jakas korelacje<jupyter_output><empty_output><jupyter_text>5. Zmienna thalach - mocno ujemny współczynnik korelacjiZajmijmy się interesującą zmienną thalach, która wg macierzy korealcji ma ujemny współczynnik korelacji z wieloma zmiennymi. Sprawdźmy czy to samo wynika z wykresów wiolinowych. Zmienne te to: exang, slope, ca, thal, num<jupyter_code>fig, axs = plt.subplots(ncols=2, nrows=2)
variables = ["exang",'ca','thal','num']
plot_number = 0
# Rysowanie wykresów w pętli 
for i in variables:
    plot_dens = sns.violinplot(data_removed[i],data_removed.thalach, hist = True, kde = True,
                 kde_kws = {'shade': True, 'linewidth': 3},
                         ax = axs[ plot_number//2, plot_number%2]).set_title("Rozkład zmiennej " + i)
    plot_number += 1<jupyter_output><empty_output><jupyter_text>Analizując kolejno wykresy możemy dojść do następujacych wniosków:- Wykres 1.1 - osoby, u których angina była spowodowana ćiczeniami miały mniejsze maksymalne tętno niż te bez związku z ćw.- Wykres 1.2 - im większa wartość ca, tym mniejsze maksymalne tętno- Wykres 2.1 - gęstość faktycznie jest różna, ale ciężko wskazać jednoznaczną korelację- Wykres 2.2 - ludzie o wyższym maksymalnym tętnie byli częściej osobami z chorym sercem  6. Automatyczna eksploracja danych<jupyter_code>from pandas_profiling import ProfileReport
profile = ProfileReport(data, title='Pandas Profiling Report', html={'style':{'full_width':True}})
profile<jupyter_output><empty_output>
{'fraction_non_alphanumeric': 0.09021043000914913, 'fraction_numerical': 0.01171088746569076, 'mean_word_length': 5.483985765124555, 'pattern_counts': {'":': 0, '<': 37, '<?xml version=': 0, '>': 37, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'chain_length': '9', 'dir': 'jupyter-structured-clean-dedup', 'id': '433683', 'license': 'Apache-2.0', 'n_tokens_mistral': 2274, 'n_tokens_neox': 2266, 'n_words': 528, 'path': 'Prace_domowe/Praca_domowa1/Grupa1/SzczypekWojciech/WojciechSzczypek_lab1.ipynb', 'repo_name': 'niladrem/2020L-WUM', 'size': '5465'}