Seaborn - THE DATA SCIENCE LIBRARY http://sigmaquality.pl/tag/seaborn/ Wojciech Moszczyński Wed, 05 Sep 2018 19:24:00 +0000 pl-PL hourly 1 https://wordpress.org/?v=6.8.3 https://sigmaquality.pl/wp-content/uploads/2019/02/cropped-ryba-32x32.png Seaborn - THE DATA SCIENCE LIBRARY http://sigmaquality.pl/tag/seaborn/ 32 32 Initial graphical analysis of dependency in analyzing of the incidence of diabetes – Seaborn library https://sigmaquality.pl/uncategorized/initial-graphical-analysis-of-dependency-in-analyzing-of-the-incidence-of-diabetes-seaborn-library/ Wed, 05 Sep 2018 19:24:00 +0000 http://sigmaquality.pl/?p=5611 Application of Machine Learning in clinical trials The aim is the initial graphical analysis of the diabetic research. We use Pandas library to prepare the [...]

Artykuł Initial graphical analysis of dependency in analyzing of the incidence of diabetes – Seaborn library pochodzi z serwisu THE DATA SCIENCE LIBRARY.

]]>

Application of Machine Learning in clinical trials

The aim is the initial graphical analysis of the diabetic research.

We use Pandas library to prepare the data. Next we will show preliminary conclusions using Seaborn library.

Our research have to show dependencies between selected features of the patients bodies and the incidence of the diabetes.

Data sample that we use in this research with the description you can find here: https://www.kaggle.com/kumargh/pimaindiansdiabetescsv

 

Let's take a look at our sample

First we are launching all needed Python libraries.

Next we display first ten rows of the data frame.

import pandas as pd
import seaborn as sns
import numpy as np
import matplotlib.pyplot as plt
from matplotlib import style

df = pd.read_csv('c:/1/diabetes.csv')
df.head(10)

For example value of the blood pressure for some patients shows zero. That's mean the patients were dead during the examination. Similarly, there is impossible lack of the skin thickness or zero value of insulin in the blood.

Contaminated sample is unsuitable to lead further of investigation.

Data table should be cleaned and supplemented by the proper data.

Python has many methods to supplement lack data with mean or dominant.

This is not good for result of our research. Dominant or mean value of sample applied to a particular patient have non sens.

Such solution could lead us to false conclusion. So, we ought to cut out contaminated or cull records.

Let's see something more about sample

df.dtypes

Now we check how many rows and columns are in the table.

df.shape

Now we cut-out contaminated and cull records. Probably we lost many records partly usable for our investigation. At the end we obtain only valuable samples.

Let’s see how many zero value are in columns: ['Glucose','BloodPressure','SkinThickness', 'Insulin','BMI']

(df[['Glucose','BloodPressure','SkinThickness', 'Insulin','BMI']]==0).sum()

To effectively throw out all zero values for selected columns, we have to exchange zero into np.NaN

df[['Glucose','BloodPressure','SkinThickness', 'Insulin','BMI']] = df[['Glucose','BloodPressure','SkinThickness', 'Insulin','BMI']].replace(0,np.nan)

Let's see what is the change in place of zero values we can see NaN.

We check how many is NaN in selected columns.

df.isnull().sum()

Now we can apply formula who cut out incomplete records. We remove records and display what is the result.

df = df.dropna(how='any')
df.isnull().sum()

Great, we have clean samples. Now let's check how many rows we have.

df.shape

The column 'Output' contain result of the trial. This column shows whether the patient is diabetic or not. Now we exchange 0, 1 into 'diabetes' in 'healthy'.

df['Outcome']=df['Outcome'].map({1:'diabetis', 0:'healthy'})

Now our data table looks that.

df.tail(3)

Now with Seaborn library we create big matrix plot. This plot display dependencies between exogenous variables.

sns.pairplot(data=df[['Pregnancies','Glucose' ,'BloodPressure','SkinThickness','Insulin','BMI','DiabetesPedigreeFunction','Age', 'Outcome']], hue='Outcome', dropna=True)

Experienced scientist easily detects anomaly and significant dependencies.

Now we reduce number of variables to better analyze process.

sns.pairplot(data=df[['Glucose' ,'BloodPressure','SkinThickness', 'Outcome']], hue='Outcome', dropna=True, height=3)

We can easily detect most effective variable is level of glucose in the blood. Blue points on the plot show, diabetes appear after exceeding a certain level of glucose.

Great, but just main symptom of diabetes is high level of glucose in the blood. This is obviously, conclusion that lead to nothing. Unfortunately medicine is not my profession.

Let's try again.

Our aim is to detect most significant medical parameters causes diabetes.

Now we check look down other exogenous variables. We change a little colors and form.

Now we check look down other exogenous variables. We a little change colors and markers form on the plot.

sns.pairplot(data=df[['Insulin' ,'Age','SkinThickness', 'Outcome']], hue='Outcome', dropna=True, height=2.5, palette=('husl'), markers='x')

We can display this plot in another form.

g = sns.PairGrid(data=df[['Insulin' ,'Age','SkinThickness', 'Outcome']], hue='Outcome', dropna=True, height=3)
g = g.map_upper(plt.scatter)
g = g.map_lower(sns.kdeplot)

We can observe that the incidence of diabetes is affected by age of patient and level of insulin in the blood. It is visible thanks to change of the dots colors.

g = sns.pairplot(data=df[['Insulin' ,'Age','SkinThickness', 'Outcome']], hue='Outcome', dropna=True, height=3, aspect=2, palette=('cubehelix'), markers='o')
g.axes[2,1].set_xlim((0,140))
g.axes[1,2].set_xlim((0,60))

 

 

 

Artykuł Initial graphical analysis of dependency in analyzing of the incidence of diabetes – Seaborn library pochodzi z serwisu THE DATA SCIENCE LIBRARY.

]]>
Wstępna analiza graficzna zależności za pomocą Seaborn https://sigmaquality.pl/data-plots/wstepna-analiza-graficzna-zaleznosci-wynikow-za-pomoca-seaborn/ Mon, 04 Sep 2017 19:32:00 +0000 http://sigmaquality.pl/?p=5445 za pomocą Seaborn

Artykuł Wstępna analiza graficzna zależności za pomocą Seaborn pochodzi z serwisu THE DATA SCIENCE LIBRARY.

]]>

Naszym celem jest wstępne analiza graficzne przeprowadzona za pomocą Seaborn, będącą biblioteką Python.

Analiza ma odpowiedzieć na pytanie, jak niektóre wyniki pomiarów parametrów organizmu pacjentów wpływają na zapadalność lub brak zapadalności na cukrzycę.

g = sns.pairplot(data=df[['Insulin' ,'Age','SkinThickness', 'Outcome']], hue='Outcome', dropna=True, height=3, aspect=2, palette=('cubehelix'), markers='o')
g.axes[2,1].set_xlim((0,140))
g.axes[1,2].set_xlim((0,60))

 

Przyjrzyjmy się bliżej pobranej próbce badań.

Uruchamiam najważniejsze biblioteki oraz wyświetlam 10 pierwszych wierszy bazy.

 

Widać, że próbki zawierają błędy. BloodPressure wykazujące wartość zero oznacza, że pacjent podczas badania już nie żył. Podobnymi błędami są brak grubości skóry czy zerowy poziom insuliny we krwi.

Próbka posiadająca tak wiele braków nie nadaje się do prowadzenia badań analitycznych. Należy więc oczyścić dane z oczywistych błędów i braków.

Python posiada wiele metod uzupełniania braku wartości, można uzupełniać braki danych średnią pomiarów lub też ostatnim dobrym pomiarem. Niestety nie będziemy stosować takich technik ponieważ tak poprawiona próbka mogłaby doprowadzić nas do nieprawdziwych wyników badań.

Na początku dowiedzmy się coś więcej o próbce.

df.dtypes

Teraz sprawdzimy ile mamy wierszy i kolumn w bazie.

df.shape

Teraz powinniśmy wykasować wiersze, które nie mają kompletu danych. Być może stracimy bardzo dużą część rekordów, jednak na końcu zyskamy czyste dane, bez braków i bez fałszywych wartości.

Sprawdzam ile jest wartości zerowych w kolumnach: ['Glucose','BloodPressure','SkinThickness', 'Insulin','BMI']

(df[['Glucose','BloodPressure','SkinThickness', 'Insulin','BMI']]==0).sum()

Teraz aby skutecznie wykasować niekompletne rekordy zamieniamy zera w tych kolumnach na wartości np.NaN

df[['Glucose','BloodPressure','SkinThickness', 'Insulin','BMI']] = df[['Glucose','BloodPressure','SkinThickness', 'Insulin','BMI']].replace(0,np.nan)

Zobaczmy jak teraz wyglądają nasze dane. W miejscu gdzie były zera mamy teraz NaN.

Sprawdźmy jak dużo jest pustych wartości w poszczególnych kolumnach.

df.isnull().sum()

Teraz możemy zastosować formułę kasującą niekompletne rekordy. Kasujemy i od razu sprawdzamy czy nie ma już braków.

df = df.dropna(how='any')
df.isnull().sum()

Doskonale, mamy już czystą próbkę, sprawdźmy ile teraz mamy wierszy.

df.shape

Kolumną wynikową w naszym badaniu jest kolumna Output, która informuje czy ktoś wykazuje symptomy choroby czy nie. Zmienimy teraz wartości 1 i 0  w tej kolumnie na wartości: 'diabetis' i 'healthy'.

df['Outcome']=df['Outcome'].map({1:'diabetis', 0:'healthy'})

Sprawdzamy jak wygląda teraz nasza tabela.

df.tail(3)

Teraz, za pomocą Seaborn stworzymy duży wykres macierzowy, który przedstawi zależności pomiędzy zmiennymi egzogenicznymi.

sns.pairplot(data=df[['Pregnancies','Glucose' ,'BloodPressure','SkinThickness','Insulin','BMI','DiabetesPedigreeFunction','Age', 'Outcome']], hue='Outcome', dropna=True)

Wprawione oko badacza szybko znajdzie, które zmienne egzogeniczne mają duży wpływ na powstanie choroby.

Teraz zmniejszymy ilość parametrów aby lepiej się im przyjrzeć.

sns.pairplot(data=df[['Glucose' ,'BloodPressure','SkinThickness', 'Outcome']], hue='Outcome', dropna=True, height=3)

Wyraźnie widać, że najbardziej wpływowy parametrem określającym zachorowalność jest poziom glukozy we krwi. Widać to ponieważ niebieskie punkty wskazujące na zapadanie na cukrzycę pojawiają się wyraźnie przy przekroczeniu pewnej granicznej wartości poziomu glukozy we krwi. Super, ale chyba właśnie główny symptom tej choroby jest podwyższony poziomu glukozy we krwi. Niestety nie znam się za bardzo na medycynie. Dochodzimy do oczywistych wniosków, a przecież chodziło nam na zbadaniu jakie parametry przepowiadają zapadalność na cukrzyce.

Zbadajmy za pomocą Seaborn więc zależność innych parametrów, przy okazji zmienimy troszkę kolory i kształt znaczników na wykresie.

 sns.pairplot(data=df[['Insulin' ,'Age','SkinThickness', 'Outcome']], hue='Outcome', dropna=True, height=2.5, palette=('husl'), markers='x')

Możemy ten sam wykres przedstawić w trochę innej formie.

g = sns.PairGrid(data=df[['Insulin' ,'Age','SkinThickness', 'Outcome']], hue='Outcome', dropna=True, height=3)
g = g.map_upper(plt.scatter)
g = g.map_lower(sns.kdeplot)

Widzimy wyraźnie, że na zapadalność na cukrzycę istotny wpływ ma poziom insuliny oraz wiek badanych osób. Widać to na wykresie po wyraźnych zmianach kolorów.

g = sns.pairplot(data=df[['Insulin' ,'Age','SkinThickness', 'Outcome']], hue='Outcome', dropna=True, height=3, aspect=2, palette=('cubehelix'), markers='o')
g.axes[2,1].set_xlim((0,140))
g.axes[1,2].set_xlim((0,60))

 

Artykuł Wstępna analiza graficzna zależności za pomocą Seaborn pochodzi z serwisu THE DATA SCIENCE LIBRARY.

]]>