<jupyter_start><jupyter_text>Case 1. Heart Disease ClassificationCognitive Systems for Health Technology Applications, Spring 20182.2.2018<NAME> Metropolia University of Applied Sciences  1. Objectives<jupyter_code># Tehtävän tavoitteena oli luoda ohjelma, jonka avulla pystytään sanomaan onko henkilöllä sydänsairaus vai ei.
# Mikäli ohjelma antoi output arvoksi 0 oli henkilö terve, jos arvoksi suuremman kuin 0 oli hänellä sydänsairaus. 
# Tehtävässä vaadittiin useamman tiedoston tarkastelua, jotka yhdistettiin yhdeksi datajoukoksi.
# Datajoukon käsittelyn ja tyhjien arvojen korjauksen jälkeen normalisoitiin data ja valittiin tutkittavat sarakkeet.
# Tämän jälkeen luotiin ja määriteltiin verkko. Datajoukosta 80% valittiin trainingiin ja 20% testaukseen.
# Lopulta verkon tarkkuutta piti myös arvioida, ja tarkkuudeksi saatiin ~70 prosenttia.<jupyter_output><empty_output><jupyter_text>2. Required libraries<jupyter_code># Import libraries
import numpy  as np
import pandas as pd
import matplotlib.pyplot as plt
%matplotlib inline<jupyter_output><empty_output><jupyter_text>3. Data description and preprocessing<jupyter_code># Location of the dataset
filename = 'http://archive.ics.uci.edu/ml/machine-learning-databases/heart-disease/processed.cleveland.data'
filename1 = 'http://archive.ics.uci.edu/ml/machine-learning-databases/heart-disease/processed.hungarian.data'
filename2 = 'http://archive.ics.uci.edu/ml/machine-learning-databases/heart-disease/processed.switzerland.data'
filename3 = 'http://archive.ics.uci.edu/ml/machine-learning-databases/heart-disease/processed.va.data'
# column names for the data
colnames = 'age', 'sex', 'cp', 'tresbps', 'chol', 'fbs', 'restecg', 'thalach', 'exang', 'oldpeak', 'slope', 'ca', 'thal', 'num'
# Read data to data frame (4 files)
df1 = pd.read_csv(filename,
                 names = colnames,
                 na_values = '?')

df2 = pd.read_csv(filename1,
                 names = colnames,
                 na_values = '?')

df3 = pd.read_csv(filename2,
                 names = colnames,
                 na_values = '?')

df4 = pd.read_csv(filename3,
                 names = colnames,
                 na_values = '?')

# Read the data into the same data frame
frames = [df1, df2, df3, df4]
df = pd.concat(frames)
df.index = range(920)
df.head()
# Descriptive statistics; Mean, min and max values
df.describe()
# Making the age histogram
df['age'].hist(bins = np.arange(20, 100, 10))
plt.xlabel('Age (Years)')
plt.ylabel('Count')
plt.show()
# Replace missing values with mode
df = df.where(~np.isnan(df), df.mode(), axis = 'columns')
#df # Shows all values
df.head()
# Output value: 0 = normal, 0 or more = heart disease
# False = healthy
# True = heart disease

label = df['num'] > 0
label.head()
# Data normalization
df = (df - df.min())/(df.max() - df.min())
# df #df shows all values
df.head()
# Selecting the columns
columns = ['age', 'sex', 'cp', 'tresbps', 
           'chol', 'fbs', 'restecg', 'thalach', 
           'exang', 'oldpeak', 'slope', 'ca', 'thal']
data = df[columns].values
ndata = 920 # Total number of samples
# Dividing the data for training and testing
ntrain = int(0.8*ndata) # 80% for training, 20% for testing
train_data = data[:ntrain]
train_label = label[:ntrain]
test_data = data[ntrain:]
test_label = label[ntrain:]<jupyter_output><empty_output><jupyter_text>4. Modeling and compilation<jupyter_code># Define the architecture of the network
from keras import models, layers
from keras import Sequential

network = models.Sequential()
network.add(layers.Dense(15, activation ='relu', input_shape=(13, )))
network.add(layers.Dense(15, activation ='relu'))
network.add(layers.Dense(1, activation ='sigmoid')) # Ensures output is in
# Compile the network
network.compile(optimizer = 'rmsprop',
               loss = 'binary_crossentropy',
               metrics = ['accuracy'])<jupyter_output><empty_output><jupyter_text>5. Training and Testing<jupyter_code># Train the network
network.fit(train_data, train_label, epochs = 100, batch_size = 100, verbose = 0)<jupyter_output><empty_output><jupyter_text>6. Evaluation, Results and Discussion<jupyter_code># Testing the trained network
test_loss, test_acc = network.evaluate(test_data, test_label)
print('test_acc', test_acc)
# Tarkkuudeksi (test_acc) saatiin ~70 prosenttia, johon olen melko tyytyväinen näillä taidoilla.
# Tarkkuus on parempi kuin heitettäessä kolikkoa, josta tulee joko kruuna tai klaava ("50%/50%").
# Tarkkuudessa vielä parantamisen varaa.<jupyter_output><empty_output><jupyter_text>7. Conclusions<jupyter_code># Verkko toimii ja pystyy määrittämään sydänsairauden n.70 prosentin tarkkuudella. 
# Näillä taidoilla en pysty tällä hetkellä parempaan. Olen kuitenkin tyytyväinen tulokseen.
# Kurssin lopussa olisi mukavaa pystyä toteuttamaan verkko, jolla pystyttäisiin saavuttamaan vieläkin tarkempia tuloksia.<jupyter_output><empty_output>
{'fraction_non_alphanumeric': 0.11378958120531155, 'fraction_numerical': 0.017364657814096015, 'mean_word_length': 4.814726840855107, 'pattern_counts': {'":': 0, '<': 30, '<?xml version=': 0, '>': 31, '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': '7', 'dir': 'jupyter-structured-clean-dedup', 'id': '651091', 'license': 'MIT', 'n_tokens_mistral': 1840, 'n_tokens_neox': 1718, 'n_words': 441, 'path': 'Case 1. Heart Disease Classification.ipynb', 'repo_name': 'kosteaviljami/cognitive-systems-for-healthtechnology-applications', 'size': '4909'}