Add Medical Data Visualizer
This commit is contained in:
parent
f2b3ac3368
commit
81158e44a8
11 changed files with 70280 additions and 0 deletions
|
@ -0,0 +1,3 @@
|
||||||
|
# Medical Data Visualizer
|
||||||
|
|
||||||
|
This is the boilerplate for the Medical Data Visualizer project. Instructions for building your project can be found at https://www.freecodecamp.org/learn/data-analysis-with-python/data-analysis-with-python-projects/medical-data-visualizer
|
BIN
9-data-analysis-python/3-medical-data-visualizer/catplot.png
Normal file
BIN
9-data-analysis-python/3-medical-data-visualizer/catplot.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 21 KiB |
Binary file not shown.
After Width: | Height: | Size: 20 KiB |
Binary file not shown.
After Width: | Height: | Size: 72 KiB |
BIN
9-data-analysis-python/3-medical-data-visualizer/heatmap.png
Normal file
BIN
9-data-analysis-python/3-medical-data-visualizer/heatmap.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 81 KiB |
10
9-data-analysis-python/3-medical-data-visualizer/main.py
Normal file
10
9-data-analysis-python/3-medical-data-visualizer/main.py
Normal file
|
@ -0,0 +1,10 @@
|
||||||
|
# This entrypoint file to be used in development. Start by reading README.md
|
||||||
|
import medical_data_visualizer
|
||||||
|
from unittest import main
|
||||||
|
|
||||||
|
# Test your function by calling it here
|
||||||
|
medical_data_visualizer.draw_cat_plot()
|
||||||
|
medical_data_visualizer.draw_heat_map()
|
||||||
|
|
||||||
|
# Run unit tests automatically
|
||||||
|
main(module='test_module', exit=False)
|
|
@ -0,0 +1,71 @@
|
||||||
|
import pandas as pd
|
||||||
|
import seaborn as sns
|
||||||
|
import matplotlib.pyplot as plt
|
||||||
|
import numpy as np
|
||||||
|
|
||||||
|
# Import data
|
||||||
|
df = pd.read_csv('medical_examination.csv')
|
||||||
|
|
||||||
|
# Add 'overweight' column
|
||||||
|
df['BMI'] = df['weight'] / (df['height'] / 100)** 2
|
||||||
|
df.loc[df['BMI'] <= 25, 'overweight'] = 0
|
||||||
|
df.loc[df['BMI'] > 25, 'overweight'] = 1
|
||||||
|
df = df.drop(['BMI'], axis=1)
|
||||||
|
|
||||||
|
# Normalize data by making 0 always good and 1 always bad. If the value of 'cholesterol' or 'gluc' is 1, make the value 0. If the value is more than 1, make the value 1.
|
||||||
|
df.loc[df['cholesterol'] == 1, 'cholesterol'] = 0
|
||||||
|
df.loc[df['cholesterol'] > 1, 'cholesterol'] = 1
|
||||||
|
df.loc[df['gluc'] == 1, 'gluc'] = 0
|
||||||
|
df.loc[df['gluc'] > 1, 'gluc'] = 1
|
||||||
|
|
||||||
|
# Draw Categorical Plot
|
||||||
|
def draw_cat_plot():
|
||||||
|
# Create DataFrame for cat plot using `pd.melt` using just the values from 'cholesterol', 'gluc', 'smoke', 'alco', 'active', and 'overweight'.
|
||||||
|
df_cat = pd.melt(df, id_vars='cardio', value_vars=['cholesterol', 'gluc', 'smoke', 'alco', 'active', 'overweight'])
|
||||||
|
|
||||||
|
|
||||||
|
# Group and reformat the data to split it by 'cardio'. Show the counts of each feature. You will have to rename one of the columns for the catplot to work correctly.
|
||||||
|
df_cat['total'] = 0
|
||||||
|
df_cat = df_cat.groupby(['cardio', 'variable', 'value'], as_index=False).count()
|
||||||
|
|
||||||
|
|
||||||
|
# Draw the catplot with 'sns.catplot()'
|
||||||
|
plot = sns.catplot(x='variable',y='total',data=df_cat,hue='value',kind='bar',col='cardio')
|
||||||
|
|
||||||
|
|
||||||
|
# Get the figure for the output
|
||||||
|
fig = plot.fig
|
||||||
|
|
||||||
|
|
||||||
|
# Do not modify the next two lines
|
||||||
|
fig.savefig('catplot.png')
|
||||||
|
return fig
|
||||||
|
|
||||||
|
|
||||||
|
# Draw Heat Map
|
||||||
|
def draw_heat_map():
|
||||||
|
# Clean the data
|
||||||
|
df_heat = df[df['ap_lo'] <= df['ap_hi']]
|
||||||
|
df_heat = df_heat[(df['height'] >= df['height'].quantile(0.025))]
|
||||||
|
df_heat = df_heat[(df['height'] <= df['height'].quantile(0.975))]
|
||||||
|
df_heat = df_heat[(df['weight'] >= df['weight'].quantile(0.025))]
|
||||||
|
df_heat = df_heat[(df['weight'] <= df['weight'].quantile(0.975))]
|
||||||
|
|
||||||
|
# Calculate the correlation matrix
|
||||||
|
corr = df_heat.corr()
|
||||||
|
|
||||||
|
# Generate a mask for the upper triangle
|
||||||
|
mask = np.triu(corr)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# Set up the matplotlib figure
|
||||||
|
fig, ax = plt.subplots(figsize=(16, 16))
|
||||||
|
|
||||||
|
# Draw the heatmap with 'sns.heatmap()'
|
||||||
|
sns.heatmap(corr, mask=mask, annot=True, fmt='.1f')
|
||||||
|
|
||||||
|
|
||||||
|
# Do not modify the next two lines
|
||||||
|
fig.savefig('heatmap.png')
|
||||||
|
return fig
|
70001
9-data-analysis-python/3-medical-data-visualizer/medical_examination.csv
Normal file
70001
9-data-analysis-python/3-medical-data-visualizer/medical_examination.csv
Normal file
File diff suppressed because it is too large
Load diff
134
9-data-analysis-python/3-medical-data-visualizer/poetry.lock
generated
Normal file
134
9-data-analysis-python/3-medical-data-visualizer/poetry.lock
generated
Normal file
|
@ -0,0 +1,134 @@
|
||||||
|
[[package]]
|
||||||
|
category = "main"
|
||||||
|
description = "Composable style cycles"
|
||||||
|
name = "cycler"
|
||||||
|
optional = false
|
||||||
|
python-versions = "*"
|
||||||
|
version = "0.10.0"
|
||||||
|
|
||||||
|
[package.dependencies]
|
||||||
|
six = "*"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
category = "main"
|
||||||
|
description = "A fast implementation of the Cassowary constraint solver"
|
||||||
|
name = "kiwisolver"
|
||||||
|
optional = false
|
||||||
|
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
|
||||||
|
version = "1.1.0"
|
||||||
|
|
||||||
|
[package.dependencies]
|
||||||
|
setuptools = "*"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
category = "main"
|
||||||
|
description = "Python plotting package"
|
||||||
|
name = "matplotlib"
|
||||||
|
optional = false
|
||||||
|
python-versions = ">=3.6"
|
||||||
|
version = "3.1.2"
|
||||||
|
|
||||||
|
[package.dependencies]
|
||||||
|
cycler = ">=0.10"
|
||||||
|
kiwisolver = ">=1.0.1"
|
||||||
|
numpy = ">=1.11"
|
||||||
|
pyparsing = ">=2.0.1,<2.0.4 || >2.0.4,<2.1.2 || >2.1.2,<2.1.6 || >2.1.6"
|
||||||
|
python-dateutil = ">=2.1"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
category = "main"
|
||||||
|
description = "NumPy is the fundamental package for array computing with Python."
|
||||||
|
name = "numpy"
|
||||||
|
optional = false
|
||||||
|
python-versions = ">=3.5"
|
||||||
|
version = "1.17.4"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
category = "main"
|
||||||
|
description = "Powerful data structures for data analysis, time series, and statistics"
|
||||||
|
name = "pandas"
|
||||||
|
optional = false
|
||||||
|
python-versions = ">=3.5.3"
|
||||||
|
version = "0.25.3"
|
||||||
|
|
||||||
|
[package.dependencies]
|
||||||
|
numpy = ">=1.13.3"
|
||||||
|
python-dateutil = ">=2.6.1"
|
||||||
|
pytz = ">=2017.2"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
category = "main"
|
||||||
|
description = "Python parsing module"
|
||||||
|
name = "pyparsing"
|
||||||
|
optional = false
|
||||||
|
python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*"
|
||||||
|
version = "2.4.5"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
category = "main"
|
||||||
|
description = "Extensions to the standard Python datetime module"
|
||||||
|
name = "python-dateutil"
|
||||||
|
optional = false
|
||||||
|
python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,>=2.7"
|
||||||
|
version = "2.8.1"
|
||||||
|
|
||||||
|
[package.dependencies]
|
||||||
|
six = ">=1.5"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
category = "main"
|
||||||
|
description = "World timezone definitions, modern and historical"
|
||||||
|
name = "pytz"
|
||||||
|
optional = false
|
||||||
|
python-versions = "*"
|
||||||
|
version = "2019.3"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
category = "main"
|
||||||
|
description = "SciPy: Scientific Library for Python"
|
||||||
|
name = "scipy"
|
||||||
|
optional = false
|
||||||
|
python-versions = ">=3.5"
|
||||||
|
version = "1.3.3"
|
||||||
|
|
||||||
|
[package.dependencies]
|
||||||
|
numpy = ">=1.13.3"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
category = "main"
|
||||||
|
description = "seaborn: statistical data visualization"
|
||||||
|
name = "seaborn"
|
||||||
|
optional = false
|
||||||
|
python-versions = "*"
|
||||||
|
version = "0.9.0"
|
||||||
|
|
||||||
|
[package.dependencies]
|
||||||
|
matplotlib = ">=1.4.3"
|
||||||
|
numpy = ">=1.9.3"
|
||||||
|
pandas = ">=0.15.2"
|
||||||
|
scipy = ">=0.14.0"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
category = "main"
|
||||||
|
description = "Python 2 and 3 compatibility utilities"
|
||||||
|
name = "six"
|
||||||
|
optional = false
|
||||||
|
python-versions = ">=2.6, !=3.0.*, !=3.1.*"
|
||||||
|
version = "1.13.0"
|
||||||
|
|
||||||
|
[metadata]
|
||||||
|
content-hash = "4e8082311e9378f77d7a1accb8cd080faf04d14d5f7beba06a8e2f950698f9f3"
|
||||||
|
python-versions = "^3.7"
|
||||||
|
|
||||||
|
[metadata.hashes]
|
||||||
|
cycler = ["1d8a5ae1ff6c5cf9b93e8811e581232ad8920aeec647c37316ceac982b08cb2d", "cd7b2d1018258d7247a71425e9f26463dfb444d411c39569972f4ce586b0c9d8"]
|
||||||
|
kiwisolver = ["05b5b061e09f60f56244adc885c4a7867da25ca387376b02c1efc29cc16bcd0f", "26f4fbd6f5e1dabff70a9ba0d2c4bd30761086454aa30dddc5b52764ee4852b7", "3b2378ad387f49cbb328205bda569b9f87288d6bc1bf4cd683c34523a2341efe", "400599c0fe58d21522cae0e8b22318e09d9729451b17ee61ba8e1e7c0346565c", "47b8cb81a7d18dbaf4fed6a61c3cecdb5adec7b4ac292bddb0d016d57e8507d5", "53eaed412477c836e1b9522c19858a8557d6e595077830146182225613b11a75", "58e626e1f7dfbb620d08d457325a4cdac65d1809680009f46bf41eaf74ad0187", "5a52e1b006bfa5be04fe4debbcdd2688432a9af4b207a3f429c74ad625022641", "5c7ca4e449ac9f99b3b9d4693debb1d6d237d1542dd6a56b3305fe8a9620f883", "682e54f0ce8f45981878756d7203fd01e188cc6c8b2c5e2cf03675390b4534d5", "79bfb2f0bd7cbf9ea256612c9523367e5ec51d7cd616ae20ca2c90f575d839a2", "7f4dd50874177d2bb060d74769210f3bce1af87a8c7cf5b37d032ebf94f0aca3", "8944a16020c07b682df861207b7e0efcd2f46c7488619cb55f65882279119389", "8aa7009437640beb2768bfd06da049bad0df85f47ff18426261acecd1cf00897", "939f36f21a8c571686eb491acfffa9c7f1ac345087281b412d63ea39ca14ec4a", "9733b7f64bd9f807832d673355f79703f81f0b3e52bfce420fc00d8cb28c6a6c", "a02f6c3e229d0b7220bd74600e9351e18bc0c361b05f29adae0d10599ae0e326", "a0c0a9f06872330d0dd31b45607197caab3c22777600e88031bfe66799e70bb0", "acc4df99308111585121db217681f1ce0eecb48d3a828a2f9bbf9773f4937e9e", "b64916959e4ae0ac78af7c3e8cef4becee0c0e9694ad477b4c6b3a536de6a544", "d3fcf0819dc3fea58be1fd1ca390851bdb719a549850e708ed858503ff25d995", "d52e3b1868a4e8fd18b5cb15055c76820df514e26aa84cc02f593d99fef6707f", "db1a5d3cc4ae943d674718d6c47d2d82488ddd94b93b9e12d24aabdbfe48caee", "e3a21a720791712ed721c7b95d433e036134de6f18c77dbe96119eaf7aa08004", "e8bf074363ce2babeb4764d94f8e65efd22e6a7c74860a4f05a6947afc020ff2", "f16814a4a96dc04bf1da7d53ee8d5b1d6decfc1a92a63349bb15d37b6a263dd9", "f2b22153870ca5cf2ab9c940d7bc38e8e9089fa0f7e5856ea195e1cf4ff43d5a", "f790f8b3dff3d53453de6a7b7ddd173d2e020fb160baff578d578065b108a05f"]
|
||||||
|
matplotlib = ["08ccc8922eb4792b91c652d3e6d46b1c99073f1284d1b6705155643e8046463a", "161dcd807c0c3232f4dcd4a12a382d52004a498174cbfafd40646106c5bcdcc8", "1f9e885bfa1b148d16f82a6672d043ecf11197f6c71ae222d0546db706e52eb2", "2d6ab54015a7c0d727c33e36f85f5c5e4172059efdd067f7527f6e5d16ad01aa", "5d2e408a2813abf664bd79431107543ecb449136912eb55bb312317edecf597e", "61c8b740a008218eb604de518eb411c4953db0cb725dd0b32adf8a81771cab9e", "80f10af8378fccc136da40ea6aa4a920767476cdfb3241acb93ef4f0465dbf57", "819d4860315468b482f38f1afe45a5437f60f03eaede495d5ff89f2eeac89500", "8cc0e44905c2c8fda5637cad6f311eb9517017515a034247ab93d0cf99f8bb7a", "8e8e2c2fe3d873108735c6ee9884e6f36f467df4a143136209cff303b183bada", "98c2ffeab8b79a4e3a0af5dd9939f92980eb6e3fec10f7f313df5f35a84dacab", "d59bb0e82002ac49f4152963f8a1079e66794a4f454457fd2f0dcc7bf0797d30", "ee59b7bb9eb75932fe3787e54e61c99b628155b0cedc907864f24723ba55b309"]
|
||||||
|
numpy = ["0a7a1dd123aecc9f0076934288ceed7fd9a81ba3919f11a855a7887cbe82a02f", "0c0763787133dfeec19904c22c7e358b231c87ba3206b211652f8cbe1241deb6", "3d52298d0be333583739f1aec9026f3b09fdfe3ddf7c7028cb16d9d2af1cca7e", "43bb4b70585f1c2d153e45323a886839f98af8bfa810f7014b20be714c37c447", "475963c5b9e116c38ad7347e154e5651d05a2286d86455671f5b1eebba5feb76", "64874913367f18eb3013b16123c9fed113962e75d809fca5b78ebfbb73ed93ba", "683828e50c339fc9e68720396f2de14253992c495fdddef77a1e17de55f1decc", "6ca4000c4a6f95a78c33c7dadbb9495c10880be9c89316aa536eac359ab820ae", "75fd817b7061f6378e4659dd792c84c0b60533e867f83e0d1e52d5d8e53df88c", "7d81d784bdbed30137aca242ab307f3e65c8d93f4c7b7d8f322110b2e90177f9", "8d0af8d3664f142414fd5b15cabfd3b6cc3ef242a3c7a7493257025be5a6955f", "9679831005fb16c6df3dd35d17aa31dc0d4d7573d84f0b44cc481490a65c7725", "a8f67ebfae9f575d85fa859b54d3bdecaeece74e3274b0b5c5f804d7ca789fe1", "acbf5c52db4adb366c064d0b7c7899e3e778d89db585feadd23b06b587d64761", "ada4805ed51f5bcaa3a06d3dd94939351869c095e30a2b54264f5a5004b52170", "c7354e8f0eca5c110b7e978034cd86ed98a7a5ffcf69ca97535445a595e07b8e", "e2e9d8c87120ba2c591f60e32736b82b67f72c37ba88a4c23c81b5b8fa49c018", "e467c57121fe1b78a8f68dd9255fbb3bb3f4f7547c6b9e109f31d14569f490c3", "ede47b98de79565fcd7f2decb475e2dcc85ee4097743e551fe26cfc7eb3ff143", "f58913e9227400f1395c7b800503ebfdb0772f1c33ff8cb4d6451c06cabdf316", "fe39f5fd4103ec4ca3cb8600b19216cd1ff316b4990f4c0b6057ad982c0a34d5"]
|
||||||
|
pandas = ["00dff3a8e337f5ed7ad295d98a31821d3d0fe7792da82d78d7fd79b89c03ea9d", "22361b1597c8c2ffd697aa9bf85423afa9e1fcfa6b1ea821054a244d5f24d75e", "255920e63850dc512ce356233081098554d641ba99c3767dde9e9f35630f994b", "26382aab9c119735908d94d2c5c08020a4a0a82969b7e5eefb92f902b3b30ad7", "33970f4cacdd9a0ddb8f21e151bfb9f178afb7c36eb7c25b9094c02876f385c2", "4545467a637e0e1393f7d05d61dace89689ad6d6f66f267f86fff737b702cce9", "52da74df8a9c9a103af0a72c9d5fdc8e0183a90884278db7f386b5692a2220a4", "61741f5aeb252f39c3031d11405305b6d10ce663c53bc3112705d7ad66c013d0", "6a3ac2c87e4e32a969921d1428525f09462770c349147aa8e9ab95f88c71ec71", "7458c48e3d15b8aaa7d575be60e1e4dd70348efcd9376656b72fecd55c59a4c3", "78bf638993219311377ce9836b3dc05f627a666d0dbc8cec37c0ff3c9ada673b", "8153705d6545fd9eb6dd2bc79301bff08825d2e2f716d5dced48daafc2d0b81f", "975c461accd14e89d71772e89108a050fa824c0b87a67d34cedf245f6681fc17", "9962957a27bfb70ab64103d0a7b42fa59c642fb4ed4cb75d0227b7bb9228535d", "adc3d3a3f9e59a38d923e90e20c4922fc62d1e5a03d083440468c6d8f3f1ae0a", "bbe3eb765a0b1e578833d243e2814b60c825b7fdbf4cdfe8e8aae8a08ed56ecf", "df8864824b1fe488cf778c3650ee59c3a0d8f42e53707de167ba6b4f7d35f133", "e45055c30a608076e31a9fcd780a956ed3b1fa20db61561b8d88b79259f526f7", "ee50c2142cdcf41995655d499a157d0a812fce55c97d9aad13bc1eef837ed36c"]
|
||||||
|
pyparsing = ["20f995ecd72f2a1f4bf6b072b63b22e2eb457836601e76d6e5dfcd75436acc1f", "4ca62001be367f01bd3e92ecbb79070272a9d4964dce6a48a82ff0b8bc7e683a"]
|
||||||
|
python-dateutil = ["73ebfe9dbf22e832286dafa60473e4cd239f8592f699aa5adaf10050e6e1823c", "75bb3f31ea686f1197762692a9ee6a7550b59fc6ca3a1f4b5d7e32fb98e2da2a"]
|
||||||
|
pytz = ["1c557d7d0e871de1f5ccd5833f60fb2550652da6be2693c1e02300743d21500d", "b02c06db6cf09c12dd25137e563b31700d3b80fcc4ad23abb7a315f2789819be"]
|
||||||
|
scipy = ["0b8c9dc042b9a47912b18b036b4844029384a5b8d89b64a4901ac3e06876e5f6", "18ad034be955df046b5a27924cdb3db0e8e1d76aaa22c635403fe7aee17f1482", "225d0b5e140bb66df23d438c7b535303ce8e533f94454f4e5bde5f8d109103ea", "2f690ba68ed7caa7c30b6dc48c1deed22c78f3840fa4736083ef4f2bd8baa19e", "4b8746f4a755bdb2eeb39d6e253a60481e165cfd74fdfb54d27394bd2c9ec8ac", "4ba2ce1a58fe117e993cf316a149cf9926c7c5000c0cdc4bc7c56ae8325612f6", "546f0dc020b155b8711159d53c87b36591d31f3327c47974a4fb6b50d91589c2", "583f2ccd6a112656c9feb2345761d2b19e9213a094cfced4e7d2c1cae4173272", "64bf4e8ae0db2d42b58477817f648d81e77f0b381d0ea4427385bba3f959380a", "7be424ee09bed7ced36c9457f99c826ce199fd0c0f5b272cf3d098ff7b29e3ae", "869465c7ff89fc0a1e2ea1642b0c65f1b3c05030f3a4c0d53d6a57b2dba7c242", "884e619821f47eccd42979488d10fa1e15dbe9f3b7660b1c8c928d203bd3c1a3", "a42b0d02150ef4747e225c31c976a304de5dc8202ec35a27111b7bb8176e5f13", "a70308bb065562afb936c963780deab359966d71ab4f230368b154dde3136ea4", "b01ea5e4cf95a93dc335089f8fbe97852f56fdb74afff238cbdf09793103b6b7", "b7b8cf45f9a48f23084f19deb9384a1cccb5e92fbc879b12f97dc4d56fb2eb92", "bb0899d3f8b9fe8ef95b79210cf0deb6709542889fadaa438eeb3a28001e09e7", "c008f1b58f99f1d1cc546957b3effe448365e0a217df1f1894e358906e91edad", "cfee99d085d562a7e3c4afe51ac1fe9b434363489e565a130459307f30077973", "dfcb0f0a2d8e958611e0b56536285bb435f03746b6feac0e29f045f7c6caf164", "f5d47351aeb1cb6bda14a8908e56648926a6b2d714f89717c71f7ada41282141"]
|
||||||
|
seaborn = ["42e627b24e849c2d3bbfd059e00005f6afbc4a76e4895baf44ae23fe8a4b09a5", "76c83f794ca320fb6b23a7c6192d5e185a5fcf4758966a0c0a54baee46d41e2f"]
|
||||||
|
six = ["1f1b7d42e254082a9db6279deae68afb421ceba6158efa6131de7b3003ee93fd", "30f610279e8b2578cab6db20741130331735c781b56053c59c4076da27f06b66"]
|
|
@ -0,0 +1,11 @@
|
||||||
|
[tool]
|
||||||
|
[tool.poetry]
|
||||||
|
authors = ["Your Name <you@example.com>"]
|
||||||
|
name = "root"
|
||||||
|
version = "0.0.0"
|
||||||
|
description = ""
|
||||||
|
|
||||||
|
[tool.poetry.dependencies]
|
||||||
|
pandas = "*"
|
||||||
|
python = "^3.7"
|
||||||
|
seaborn = "*"
|
|
@ -0,0 +1,50 @@
|
||||||
|
import unittest
|
||||||
|
import medical_data_visualizer
|
||||||
|
import matplotlib as mpl
|
||||||
|
|
||||||
|
|
||||||
|
# the test case
|
||||||
|
class CatPlotTestCase(unittest.TestCase):
|
||||||
|
def setUp(self):
|
||||||
|
self.fig = medical_data_visualizer.draw_cat_plot()
|
||||||
|
self.ax = self.fig.axes[0]
|
||||||
|
|
||||||
|
def test_line_plot_labels(self):
|
||||||
|
actual = self.ax.get_xlabel()
|
||||||
|
expected = "variable"
|
||||||
|
self.assertEqual(actual, expected, "Expected line plot xlabel to be 'variable'")
|
||||||
|
actual = self.ax.get_ylabel()
|
||||||
|
expected = "total"
|
||||||
|
self.assertEqual(actual, expected, "Expected line plot ylabel to be 'total'")
|
||||||
|
actual = []
|
||||||
|
for label in self.ax.get_xaxis().get_majorticklabels():
|
||||||
|
actual.append(label.get_text())
|
||||||
|
expected = ['active', 'alco', 'cholesterol', 'gluc', 'overweight', 'smoke']
|
||||||
|
self.assertEqual(actual, expected, "Expected bar plot secondary x labels to be 'active', 'alco', 'cholesterol', 'gluc', 'overweight', 'smoke'")
|
||||||
|
|
||||||
|
def test_bar_plot_number_of_bars(self):
|
||||||
|
actual = len([rect for rect in self.ax.get_children() if isinstance(rect, mpl.patches.Rectangle)])
|
||||||
|
expected = 13
|
||||||
|
self.assertEqual(actual, expected, "Expected a different number of bars chart.")
|
||||||
|
|
||||||
|
|
||||||
|
class HeatMapTestCase(unittest.TestCase):
|
||||||
|
def setUp(self):
|
||||||
|
self.fig = medical_data_visualizer.draw_heat_map()
|
||||||
|
self.ax = self.fig.axes[0]
|
||||||
|
|
||||||
|
def test_heat_map_labels(self):
|
||||||
|
actual = []
|
||||||
|
for label in self.ax.get_xticklabels():
|
||||||
|
actual.append(label.get_text())
|
||||||
|
expected = ['id', 'age', 'sex', 'height', 'weight', 'ap_hi', 'ap_lo', 'cholesterol', 'gluc', 'smoke', 'alco', 'active', 'cardio', 'overweight']
|
||||||
|
self.assertEqual(actual, expected, "Expected heat map labels to be 'id', 'age', 'sex', 'height', 'weight', 'ap_hi', 'ap_lo', 'cholesterol', 'gluc', 'smoke', 'alco', 'active', 'cardio', 'overweight'.")
|
||||||
|
|
||||||
|
def test_heat_map_values(self):
|
||||||
|
actual = [text.get_text() for text in self.ax.get_default_bbox_extra_artists() if isinstance(text, mpl.text.Text)]
|
||||||
|
print(actual)
|
||||||
|
expected = ['0.0', '0.0', '-0.0', '0.0', '-0.1', '0.5', '0.0', '0.1', '0.1', '0.3', '0.0', '0.0', '0.0', '0.0', '0.0', '0.0', '0.2', '0.1', '0.0', '0.2', '0.1', '0.0', '0.1', '-0.0', '-0.1', '0.1', '0.0', '0.2', '0.0', '0.1', '-0.0', '-0.0', '0.1', '0.0', '0.1', '0.4', '-0.0', '-0.0', '0.3', '0.2', '0.1', '-0.0', '0.0', '0.0', '-0.0', '-0.0', '-0.0', '0.2', '0.1', '0.1', '0.0', '0.0', '0.0', '0.0', '0.3', '0.0', '-0.0', '0.0', '-0.0', '-0.0', '-0.0', '0.0', '0.0', '-0.0', '0.0', '0.0', '0.0', '0.2', '0.0', '-0.0', '0.2', '0.1', '0.3', '0.2', '0.1', '-0.0', '-0.0', '-0.0', '-0.0', '0.1', '-0.1', '-0.1', '0.7', '0.0', '0.2', '0.1', '0.1', '-0.0', '0.0', '-0.0', '0.1']
|
||||||
|
self.assertEqual(actual, expected, "Expected different values in heat map.")
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
unittest.main()
|
Reference in a new issue