diff --git a/Advanced/regex/regex_tutorial_exercise_answer.ipynb b/Advanced/regex/regex_tutorial_exercise_answer.ipynb
new file mode 100644
index 00000000..0e2c9951
--- /dev/null
+++ b/Advanced/regex/regex_tutorial_exercise_answer.ipynb
@@ -0,0 +1,154 @@
+{
+ "cells": [
+ {
+ "cell_type": "code",
+ "execution_count": 1,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "import re"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "**1. Extract all twitter handles from following text. Twitter handle is the text that appears after https://twitter.com/ and is a single word. Also it contains only alpha numeric characters i.e. A-Z a-z , o to 9 and underscore _**"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 5,
+ "metadata": {
+ "scrolled": true
+ },
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "['elonmusk', 'teslarati', 'dummy_tesla', 'dummy_2_tesla']"
+ ]
+ },
+ "execution_count": 5,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "text = '''\n",
+ "Follow our leader Elon musk on twitter here: https://twitter.com/elonmusk, more information \n",
+ "on Tesla's products can be found at https://www.tesla.com/. Also here are leading influencers \n",
+ "for tesla related news,\n",
+ "https://twitter.com/teslarati\n",
+ "https://twitter.com/dummy_tesla\n",
+ "https://twitter.com/dummy_2_tesla\n",
+ "'''\n",
+ "pattern = 'https://twitter\\.com/([a-zA-Z0-9_]+)'\n",
+ "\n",
+ "re.findall(pattern, text)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "**2. Extract Concentration Risk Types. It will be a text that appears after \"Concentration Risk:\", In below example, your regex should extract these two strings**\n",
+ "\n",
+ "(1) Credit Risk\n",
+ "\n",
+ "(2) Supply Rish"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 6,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "['Credit Risk', 'Credit Risk']"
+ ]
+ },
+ "execution_count": 6,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "text = '''\n",
+ "Concentration of Risk: Credit Risk\n",
+ "Financial instruments that potentially subject us to a concentration of credit risk consist of cash, cash equivalents, marketable securities,\n",
+ "restricted cash, accounts receivable, convertible note hedges, and interest rate swaps. Our cash balances are primarily invested in money market funds\n",
+ "or on deposit at high credit quality financial institutions in the U.S. These deposits are typically in excess of insured limits. As of September 30, 2021\n",
+ "and December 31, 2020, no entity represented 10% or more of our total accounts receivable balance. The risk of concentration for our convertible note\n",
+ "hedges and interest rate swaps is mitigated by transacting with several highly-rated multinational banks.\n",
+ "Concentration of Risk: Supply Risk\n",
+ "We are dependent on our suppliers, including single source suppliers, and the inability of these suppliers to deliver necessary components of our\n",
+ "products in a timely manner at prices, quality levels and volumes acceptable to us, or our inability to efficiently manage these components from these\n",
+ "suppliers, could have a material adverse effect on our business, prospects, financial condition and operating results.\n",
+ "'''\n",
+ "pattern = 'Concentration of Risk: ([^\\n]*)'\n",
+ "\n",
+ "re.findall(pattern, text)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "**3. Companies in europe reports their financial numbers of semi annual basis and you can have a document like this. To exatract quarterly and semin annual period you can use a regex as shown below**\n",
+ "\n",
+ "Hint: you need to use (?:) here to match everything enclosed"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 2,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "['2021 Q1', '2021 S1']"
+ ]
+ },
+ "execution_count": 2,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "text = '''\n",
+ "Tesla's gross cost of operating lease vehicles in FY2021 Q1 was $4.85 billion.\n",
+ "BMW's gross cost of operating vehicles in FY2021 S1 was $8 billion.\n",
+ "'''\n",
+ "\n",
+ "pattern = 'FY(\\d{4} (?:Q[1-4]|S[1-2]))'\n",
+ "matches = re.findall(pattern, text)\n",
+ "matches"
+ ]
+ }
+ ],
+ "metadata": {
+ "kernelspec": {
+ "display_name": "Python 3",
+ "language": "python",
+ "name": "python3"
+ },
+ "language_info": {
+ "codemirror_mode": {
+ "name": "ipython",
+ "version": 3
+ },
+ "file_extension": ".py",
+ "mimetype": "text/x-python",
+ "name": "python",
+ "nbconvert_exporter": "python",
+ "pygments_lexer": "ipython3",
+ "version": "3.8.5"
+ }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 4
+}
diff --git a/Advanced/regex/regex_tutorial_exercise_questions.ipynb b/Advanced/regex/regex_tutorial_exercise_questions.ipynb
new file mode 100644
index 00000000..273de7fb
--- /dev/null
+++ b/Advanced/regex/regex_tutorial_exercise_questions.ipynb
@@ -0,0 +1,135 @@
+{
+ "cells": [
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "
Python Regular Expression Tutorial Exericse
"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 3,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "import re"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "**1. Extract all twitter handles from following text. Twitter handle is the text that appears after https://twitter.com/ and is a single word. Also it contains only alpha numeric characters i.e. A-Z a-z , o to 9 and underscore _**"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "scrolled": true
+ },
+ "outputs": [],
+ "source": [
+ "text = '''\n",
+ "Follow our leader Elon musk on twitter here: https://twitter.com/elonmusk, more information \n",
+ "on Tesla's products can be found at https://www.tesla.com/. Also here are leading influencers \n",
+ "for tesla related news,\n",
+ "https://twitter.com/teslarati\n",
+ "https://twitter.com/dummy_tesla\n",
+ "https://twitter.com/dummy_2_tesla\n",
+ "'''\n",
+ "pattern = '' # todo: type your regex here\n",
+ "\n",
+ "re.findall(pattern, text)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "**2. Extract Concentration Risk Types. It will be a text that appears after \"Concentration Risk:\", In below example, your regex should extract these two strings**\n",
+ "\n",
+ "(1) Credit Risk\n",
+ "\n",
+ "(2) Supply Rish"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "text = '''\n",
+ "Concentration of Risk: Credit Risk\n",
+ "Financial instruments that potentially subject us to a concentration of credit risk consist of cash, cash equivalents, marketable securities,\n",
+ "restricted cash, accounts receivable, convertible note hedges, and interest rate swaps. Our cash balances are primarily invested in money market funds\n",
+ "or on deposit at high credit quality financial institutions in the U.S. These deposits are typically in excess of insured limits. As of September 30, 2021\n",
+ "and December 31, 2020, no entity represented 10% or more of our total accounts receivable balance. The risk of concentration for our convertible note\n",
+ "hedges and interest rate swaps is mitigated by transacting with several highly-rated multinational banks.\n",
+ "Concentration of Risk: Supply Risk\n",
+ "We are dependent on our suppliers, including single source suppliers, and the inability of these suppliers to deliver necessary components of our\n",
+ "products in a timely manner at prices, quality levels and volumes acceptable to us, or our inability to efficiently manage these components from these\n",
+ "suppliers, could have a material adverse effect on our business, prospects, financial condition and operating results.\n",
+ "'''\n",
+ "pattern = '' # todo: type your regex here\n",
+ "\n",
+ "re.findall(pattern, text)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "**3. Companies in europe reports their financial numbers of semi annual basis and you can have a document like this. To exatract quarterly and semin annual period you can use a regex as shown below**\n",
+ "\n",
+ "Hint: you need to use (?:) here to match everything enclosed"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "text = '''\n",
+ "Tesla's gross cost of operating lease vehicles in FY2021 Q1 was $4.85 billion.\n",
+ "BMW's gross cost of operating vehicles in FY2021 S1 was $8 billion.\n",
+ "'''\n",
+ "\n",
+ "pattern = '' # todo: type your regex here\n",
+ "matches = re.findall(pattern, text)\n",
+ "matches"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "__[Solution](https://github.com/codebasics/py/blob/master/Advanced/regex/regex_tutorial_exercise_answer.ipynb)__"
+ ]
+ }
+ ],
+ "metadata": {
+ "kernelspec": {
+ "display_name": "Python 3",
+ "language": "python",
+ "name": "python3"
+ },
+ "language_info": {
+ "codemirror_mode": {
+ "name": "ipython",
+ "version": 3
+ },
+ "file_extension": ".py",
+ "mimetype": "text/x-python",
+ "name": "python",
+ "nbconvert_exporter": "python",
+ "pygments_lexer": "ipython3",
+ "version": "3.8.5"
+ }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 4
+}
diff --git a/Advanced/regex/regex_tutorial_python.ipynb b/Advanced/regex/regex_tutorial_python.ipynb
new file mode 100644
index 00000000..df1cdbb0
--- /dev/null
+++ b/Advanced/regex/regex_tutorial_python.ipynb
@@ -0,0 +1,329 @@
+{
+ "cells": [
+ {
+ "cell_type": "code",
+ "execution_count": 1,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "import re"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "Extract phone numbers
"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 46,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "['9991116666', '(999)-333-7777']"
+ ]
+ },
+ "execution_count": 46,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "text='''\n",
+ "Elon musk's phone number is 9991116666, call him if you have any questions on dodgecoin. Tesla's revenue is 40 billion\n",
+ "Tesla's CFO number (999)-333-7777\n",
+ "'''\n",
+ "pattern = '\\(\\d{3}\\)-\\d{3}-\\d{4}|\\d{10}'\n",
+ "\n",
+ "matches = re.findall(pattern, text)\n",
+ "matches"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "Extract Note Titles
"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "
"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 38,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "text = '''\n",
+ "Note 1 - Overview\n",
+ "Tesla, Inc. (“Tesla”, the “Company”, “we”, “us” or “our”) was incorporated in the State of Delaware on July 1, 2003. We design, develop, manufacture and sell high-performance fully electric vehicles and design, manufacture, install and sell solar energy generation and energy storage\n",
+ "products. Our Chief Executive Officer, as the chief operating decision maker (“CODM”), organizes our company, manages resource allocations and measures performance among two operating and reportable segments: (i) automotive and (ii) energy generation and storage.\n",
+ "Beginning in the first quarter of 2021, there has been a trend in many parts of the world of increasing availability and administration of vaccines\n",
+ "against COVID-19, as well as an easing of restrictions on social, business, travel and government activities and functions. On the other hand, infection\n",
+ "rates and regulations continue to fluctuate in various regions and there are ongoing global impacts resulting from the pandemic, including challenges\n",
+ "and increases in costs for logistics and supply chains, such as increased port congestion, intermittent supplier delays and a shortfall of semiconductor\n",
+ "supply. We have also previously been affected by temporary manufacturing closures, employment and compensation adjustments and impediments to\n",
+ "administrative activities supporting our product deliveries and deployments.\n",
+ "Note 2 - Summary of Significant Accounting Policies\n",
+ "Unaudited Interim Financial Statements\n",
+ "The consolidated balance sheet as of September 30, 2021, the consolidated statements of operations, the consolidated statements of\n",
+ "comprehensive income, the consolidated statements of redeemable noncontrolling interests and equity for the three and nine months ended September\n",
+ "30, 2021 and 2020 and the consolidated statements of cash flows for the nine months ended September 30, 2021 and 2020, as well as other information\n",
+ "disclosed in the accompanying notes, are unaudited. The consolidated balance sheet as of December 31, 2020 was derived from the audited\n",
+ "consolidated financial statements as of that date. The interim consolidated financial statements and the accompanying notes should be read in\n",
+ "conjunction with the annual consolidated financial statements and the accompanying notes contained in our Annual Report on Form 10-K for the year\n",
+ "ended December 31, 2020.\n",
+ "'''"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 45,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "['Overview', 'Summary of Significant Accounting Policies']"
+ ]
+ },
+ "execution_count": 45,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "pattern = 'Note \\d - ([^\\n]*)'\n",
+ "matches = re.findall(pattern, text)\n",
+ "matches"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "Extract financial periods from a company's financial reporting
"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 28,
+ "metadata": {
+ "scrolled": true
+ },
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "['FY2021 Q1', 'FY2020 Q4']"
+ ]
+ },
+ "execution_count": 28,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "text = '''\n",
+ "The gross cost of operating lease vehicles in FY2021 Q1 was $4.85 billion.\n",
+ "In previous quarter i.e. FY2020 Q4 it was $3 billion. \n",
+ "'''\n",
+ "\n",
+ "pattern = 'FY\\d{4} Q[1-4]'\n",
+ "\n",
+ "matches = re.findall(pattern, text)\n",
+ "matches"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "**Case insensitive pattern match using flags**"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 29,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "['FY2021 Q1', 'fy2020 Q4']"
+ ]
+ },
+ "execution_count": 29,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "text = '''\n",
+ "The gross cost of operating lease vehicles in FY2021 Q1 was $4.85 billion.\n",
+ "In previous quarter i.e. fy2020 Q4 it was $3 billion. \n",
+ "'''\n",
+ "\n",
+ "pattern = 'FY\\d{4} Q[1-4]'\n",
+ "\n",
+ "matches = re.findall(pattern, text, flags=re.IGNORECASE)\n",
+ "matches"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "Extract only financial numbers
"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 36,
+ "metadata": {
+ "scrolled": true
+ },
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "['4.85', '3']"
+ ]
+ },
+ "execution_count": 36,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "text = '''\n",
+ "Tesla's gross cost of operating lease vehicles in FY2021 Q1 was $4.85 billion. \n",
+ "In previous quarter i.e. FY2020 Q4 it was $3 billion.\n",
+ "'''\n",
+ "\n",
+ "pattern = '\\$([0-9\\.]+)'\n",
+ "matches = re.findall(pattern, text)\n",
+ "matches"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "Extract periods and financial numbers both
"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 35,
+ "metadata": {
+ "scrolled": true
+ },
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "[('2021 Q1', '4.85'), ('2020 Q4', '3')]"
+ ]
+ },
+ "execution_count": 35,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "text = '''\n",
+ "Tesla's gross cost of operating lease vehicles in FY2021 Q1 was $4.85 billion. \n",
+ "In previous quarter i.e. FY2020 Q4 it was $3 billion.\n",
+ "'''\n",
+ "pattern = 'FY(\\d{4} Q[1-4])[^\\$]+\\$([0-9\\.]+)'\n",
+ "\n",
+ "matches = re.findall(pattern, text)\n",
+ "matches"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "re.search
"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 25,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ ""
+ ]
+ },
+ "execution_count": 25,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "text = '''\n",
+ "Tesla's gross cost of operating lease vehicles in FY2021 Q1 ljh lsj a 123 was $4.85 billion. Same number for FY2020 Q4 was $8 billion\n",
+ "'''\n",
+ "pattern = 'FY(\\d{4} Q[1-4])[^\\$]+\\$([0-9\\.]+)'\n",
+ "\n",
+ "matches = re.search(pattern, text)\n",
+ "matches"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 26,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "('2021 Q1', '4.85')"
+ ]
+ },
+ "execution_count": 26,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "matches.groups()"
+ ]
+ }
+ ],
+ "metadata": {
+ "kernelspec": {
+ "display_name": "Python 3",
+ "language": "python",
+ "name": "python3"
+ },
+ "language_info": {
+ "codemirror_mode": {
+ "name": "ipython",
+ "version": 3
+ },
+ "file_extension": ".py",
+ "mimetype": "text/x-python",
+ "name": "python",
+ "nbconvert_exporter": "python",
+ "pygments_lexer": "ipython3",
+ "version": "3.8.5"
+ }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 4
+}
diff --git a/Advanced/regex/tesla_report_notes.jpg b/Advanced/regex/tesla_report_notes.jpg
new file mode 100644
index 00000000..3d22a02b
Binary files /dev/null and b/Advanced/regex/tesla_report_notes.jpg differ
diff --git a/ML/19_Bagging/Exercise/bagging_heart_disease_prediction.ipynb b/ML/19_Bagging/Exercise/bagging_heart_disease_prediction.ipynb
new file mode 100644
index 00000000..c597be72
--- /dev/null
+++ b/ML/19_Bagging/Exercise/bagging_heart_disease_prediction.ipynb
@@ -0,0 +1,1890 @@
+{
+ "cells": [
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "Ensemble Learning: Bagging Tutorial Exercise Solution
"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "dataset credits: https://www.kaggle.com/fedesoriano/heart-failure-prediction"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "Data Loading
"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 33,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " Age | \n",
+ " Sex | \n",
+ " ChestPainType | \n",
+ " RestingBP | \n",
+ " Cholesterol | \n",
+ " FastingBS | \n",
+ " RestingECG | \n",
+ " MaxHR | \n",
+ " ExerciseAngina | \n",
+ " Oldpeak | \n",
+ " ST_Slope | \n",
+ " HeartDisease | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " 0 | \n",
+ " 40 | \n",
+ " M | \n",
+ " ATA | \n",
+ " 140 | \n",
+ " 289 | \n",
+ " 0 | \n",
+ " Normal | \n",
+ " 172 | \n",
+ " N | \n",
+ " 0.0 | \n",
+ " Up | \n",
+ " 0 | \n",
+ "
\n",
+ " \n",
+ " 1 | \n",
+ " 49 | \n",
+ " F | \n",
+ " NAP | \n",
+ " 160 | \n",
+ " 180 | \n",
+ " 0 | \n",
+ " Normal | \n",
+ " 156 | \n",
+ " N | \n",
+ " 1.0 | \n",
+ " Flat | \n",
+ " 1 | \n",
+ "
\n",
+ " \n",
+ " 2 | \n",
+ " 37 | \n",
+ " M | \n",
+ " ATA | \n",
+ " 130 | \n",
+ " 283 | \n",
+ " 0 | \n",
+ " ST | \n",
+ " 98 | \n",
+ " N | \n",
+ " 0.0 | \n",
+ " Up | \n",
+ " 0 | \n",
+ "
\n",
+ " \n",
+ " 3 | \n",
+ " 48 | \n",
+ " F | \n",
+ " ASY | \n",
+ " 138 | \n",
+ " 214 | \n",
+ " 0 | \n",
+ " Normal | \n",
+ " 108 | \n",
+ " Y | \n",
+ " 1.5 | \n",
+ " Flat | \n",
+ " 1 | \n",
+ "
\n",
+ " \n",
+ " 4 | \n",
+ " 54 | \n",
+ " M | \n",
+ " NAP | \n",
+ " 150 | \n",
+ " 195 | \n",
+ " 0 | \n",
+ " Normal | \n",
+ " 122 | \n",
+ " N | \n",
+ " 0.0 | \n",
+ " Up | \n",
+ " 0 | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " Age Sex ChestPainType RestingBP Cholesterol FastingBS RestingECG MaxHR \\\n",
+ "0 40 M ATA 140 289 0 Normal 172 \n",
+ "1 49 F NAP 160 180 0 Normal 156 \n",
+ "2 37 M ATA 130 283 0 ST 98 \n",
+ "3 48 F ASY 138 214 0 Normal 108 \n",
+ "4 54 M NAP 150 195 0 Normal 122 \n",
+ "\n",
+ " ExerciseAngina Oldpeak ST_Slope HeartDisease \n",
+ "0 N 0.0 Up 0 \n",
+ "1 N 1.0 Flat 1 \n",
+ "2 N 0.0 Up 0 \n",
+ "3 Y 1.5 Flat 1 \n",
+ "4 N 0.0 Up 0 "
+ ]
+ },
+ "execution_count": 33,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "import pandas as pd\n",
+ "\n",
+ "df = pd.read_csv(\"heart.csv\")\n",
+ "df.head()"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 34,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "(918, 12)"
+ ]
+ },
+ "execution_count": 34,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "df.shape"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 35,
+ "metadata": {
+ "scrolled": false
+ },
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " Age | \n",
+ " RestingBP | \n",
+ " Cholesterol | \n",
+ " FastingBS | \n",
+ " MaxHR | \n",
+ " Oldpeak | \n",
+ " HeartDisease | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " count | \n",
+ " 918.000000 | \n",
+ " 918.000000 | \n",
+ " 918.000000 | \n",
+ " 918.000000 | \n",
+ " 918.000000 | \n",
+ " 918.000000 | \n",
+ " 918.000000 | \n",
+ "
\n",
+ " \n",
+ " mean | \n",
+ " 53.510893 | \n",
+ " 132.396514 | \n",
+ " 198.799564 | \n",
+ " 0.233115 | \n",
+ " 136.809368 | \n",
+ " 0.887364 | \n",
+ " 0.553377 | \n",
+ "
\n",
+ " \n",
+ " std | \n",
+ " 9.432617 | \n",
+ " 18.514154 | \n",
+ " 109.384145 | \n",
+ " 0.423046 | \n",
+ " 25.460334 | \n",
+ " 1.066570 | \n",
+ " 0.497414 | \n",
+ "
\n",
+ " \n",
+ " min | \n",
+ " 28.000000 | \n",
+ " 0.000000 | \n",
+ " 0.000000 | \n",
+ " 0.000000 | \n",
+ " 60.000000 | \n",
+ " -2.600000 | \n",
+ " 0.000000 | \n",
+ "
\n",
+ " \n",
+ " 25% | \n",
+ " 47.000000 | \n",
+ " 120.000000 | \n",
+ " 173.250000 | \n",
+ " 0.000000 | \n",
+ " 120.000000 | \n",
+ " 0.000000 | \n",
+ " 0.000000 | \n",
+ "
\n",
+ " \n",
+ " 50% | \n",
+ " 54.000000 | \n",
+ " 130.000000 | \n",
+ " 223.000000 | \n",
+ " 0.000000 | \n",
+ " 138.000000 | \n",
+ " 0.600000 | \n",
+ " 1.000000 | \n",
+ "
\n",
+ " \n",
+ " 75% | \n",
+ " 60.000000 | \n",
+ " 140.000000 | \n",
+ " 267.000000 | \n",
+ " 0.000000 | \n",
+ " 156.000000 | \n",
+ " 1.500000 | \n",
+ " 1.000000 | \n",
+ "
\n",
+ " \n",
+ " max | \n",
+ " 77.000000 | \n",
+ " 200.000000 | \n",
+ " 603.000000 | \n",
+ " 1.000000 | \n",
+ " 202.000000 | \n",
+ " 6.200000 | \n",
+ " 1.000000 | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " Age RestingBP Cholesterol FastingBS MaxHR \\\n",
+ "count 918.000000 918.000000 918.000000 918.000000 918.000000 \n",
+ "mean 53.510893 132.396514 198.799564 0.233115 136.809368 \n",
+ "std 9.432617 18.514154 109.384145 0.423046 25.460334 \n",
+ "min 28.000000 0.000000 0.000000 0.000000 60.000000 \n",
+ "25% 47.000000 120.000000 173.250000 0.000000 120.000000 \n",
+ "50% 54.000000 130.000000 223.000000 0.000000 138.000000 \n",
+ "75% 60.000000 140.000000 267.000000 0.000000 156.000000 \n",
+ "max 77.000000 200.000000 603.000000 1.000000 202.000000 \n",
+ "\n",
+ " Oldpeak HeartDisease \n",
+ "count 918.000000 918.000000 \n",
+ "mean 0.887364 0.553377 \n",
+ "std 1.066570 0.497414 \n",
+ "min -2.600000 0.000000 \n",
+ "25% 0.000000 0.000000 \n",
+ "50% 0.600000 1.000000 \n",
+ "75% 1.500000 1.000000 \n",
+ "max 6.200000 1.000000 "
+ ]
+ },
+ "execution_count": 35,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "df.describe()"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "Treat Outliers
"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 36,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " Age | \n",
+ " Sex | \n",
+ " ChestPainType | \n",
+ " RestingBP | \n",
+ " Cholesterol | \n",
+ " FastingBS | \n",
+ " RestingECG | \n",
+ " MaxHR | \n",
+ " ExerciseAngina | \n",
+ " Oldpeak | \n",
+ " ST_Slope | \n",
+ " HeartDisease | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " 76 | \n",
+ " 32 | \n",
+ " M | \n",
+ " ASY | \n",
+ " 118 | \n",
+ " 529 | \n",
+ " 0 | \n",
+ " Normal | \n",
+ " 130 | \n",
+ " N | \n",
+ " 0.0 | \n",
+ " Flat | \n",
+ " 1 | \n",
+ "
\n",
+ " \n",
+ " 149 | \n",
+ " 54 | \n",
+ " M | \n",
+ " ASY | \n",
+ " 130 | \n",
+ " 603 | \n",
+ " 1 | \n",
+ " Normal | \n",
+ " 125 | \n",
+ " Y | \n",
+ " 1.0 | \n",
+ " Flat | \n",
+ " 1 | \n",
+ "
\n",
+ " \n",
+ " 616 | \n",
+ " 67 | \n",
+ " F | \n",
+ " NAP | \n",
+ " 115 | \n",
+ " 564 | \n",
+ " 0 | \n",
+ " LVH | \n",
+ " 160 | \n",
+ " N | \n",
+ " 1.6 | \n",
+ " Flat | \n",
+ " 0 | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " Age Sex ChestPainType RestingBP Cholesterol FastingBS RestingECG \\\n",
+ "76 32 M ASY 118 529 0 Normal \n",
+ "149 54 M ASY 130 603 1 Normal \n",
+ "616 67 F NAP 115 564 0 LVH \n",
+ "\n",
+ " MaxHR ExerciseAngina Oldpeak ST_Slope HeartDisease \n",
+ "76 130 N 0.0 Flat 1 \n",
+ "149 125 Y 1.0 Flat 1 \n",
+ "616 160 N 1.6 Flat 0 "
+ ]
+ },
+ "execution_count": 36,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "df[df.Cholesterol>(df.Cholesterol.mean()+3*df.Cholesterol.std())]"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 37,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "(918, 12)"
+ ]
+ },
+ "execution_count": 37,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "df.shape"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 38,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "(915, 12)"
+ ]
+ },
+ "execution_count": 38,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "df1 = df[df.Cholesterol<=(df.Cholesterol.mean()+3*df.Cholesterol.std())]\n",
+ "df1.shape"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 39,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " Age | \n",
+ " Sex | \n",
+ " ChestPainType | \n",
+ " RestingBP | \n",
+ " Cholesterol | \n",
+ " FastingBS | \n",
+ " RestingECG | \n",
+ " MaxHR | \n",
+ " ExerciseAngina | \n",
+ " Oldpeak | \n",
+ " ST_Slope | \n",
+ " HeartDisease | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ "Empty DataFrame\n",
+ "Columns: [Age, Sex, ChestPainType, RestingBP, Cholesterol, FastingBS, RestingECG, MaxHR, ExerciseAngina, Oldpeak, ST_Slope, HeartDisease]\n",
+ "Index: []"
+ ]
+ },
+ "execution_count": 39,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "df[df.MaxHR>(df.MaxHR.mean()+3*df.MaxHR.std())]"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 40,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " Age | \n",
+ " Sex | \n",
+ " ChestPainType | \n",
+ " RestingBP | \n",
+ " Cholesterol | \n",
+ " FastingBS | \n",
+ " RestingECG | \n",
+ " MaxHR | \n",
+ " ExerciseAngina | \n",
+ " Oldpeak | \n",
+ " ST_Slope | \n",
+ " HeartDisease | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ "Empty DataFrame\n",
+ "Columns: [Age, Sex, ChestPainType, RestingBP, Cholesterol, FastingBS, RestingECG, MaxHR, ExerciseAngina, Oldpeak, ST_Slope, HeartDisease]\n",
+ "Index: []"
+ ]
+ },
+ "execution_count": 40,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "df[df.FastingBS>(df.FastingBS.mean()+3*df.FastingBS.std())]"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 41,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " Age | \n",
+ " Sex | \n",
+ " ChestPainType | \n",
+ " RestingBP | \n",
+ " Cholesterol | \n",
+ " FastingBS | \n",
+ " RestingECG | \n",
+ " MaxHR | \n",
+ " ExerciseAngina | \n",
+ " Oldpeak | \n",
+ " ST_Slope | \n",
+ " HeartDisease | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " 166 | \n",
+ " 50 | \n",
+ " M | \n",
+ " ASY | \n",
+ " 140 | \n",
+ " 231 | \n",
+ " 0 | \n",
+ " ST | \n",
+ " 140 | \n",
+ " Y | \n",
+ " 5.0 | \n",
+ " Flat | \n",
+ " 1 | \n",
+ "
\n",
+ " \n",
+ " 702 | \n",
+ " 59 | \n",
+ " M | \n",
+ " TA | \n",
+ " 178 | \n",
+ " 270 | \n",
+ " 0 | \n",
+ " LVH | \n",
+ " 145 | \n",
+ " N | \n",
+ " 4.2 | \n",
+ " Down | \n",
+ " 0 | \n",
+ "
\n",
+ " \n",
+ " 771 | \n",
+ " 55 | \n",
+ " M | \n",
+ " ASY | \n",
+ " 140 | \n",
+ " 217 | \n",
+ " 0 | \n",
+ " Normal | \n",
+ " 111 | \n",
+ " Y | \n",
+ " 5.6 | \n",
+ " Down | \n",
+ " 1 | \n",
+ "
\n",
+ " \n",
+ " 791 | \n",
+ " 51 | \n",
+ " M | \n",
+ " ASY | \n",
+ " 140 | \n",
+ " 298 | \n",
+ " 0 | \n",
+ " Normal | \n",
+ " 122 | \n",
+ " Y | \n",
+ " 4.2 | \n",
+ " Flat | \n",
+ " 1 | \n",
+ "
\n",
+ " \n",
+ " 850 | \n",
+ " 62 | \n",
+ " F | \n",
+ " ASY | \n",
+ " 160 | \n",
+ " 164 | \n",
+ " 0 | \n",
+ " LVH | \n",
+ " 145 | \n",
+ " N | \n",
+ " 6.2 | \n",
+ " Down | \n",
+ " 1 | \n",
+ "
\n",
+ " \n",
+ " 900 | \n",
+ " 58 | \n",
+ " M | \n",
+ " ASY | \n",
+ " 114 | \n",
+ " 318 | \n",
+ " 0 | \n",
+ " ST | \n",
+ " 140 | \n",
+ " N | \n",
+ " 4.4 | \n",
+ " Down | \n",
+ " 1 | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " Age Sex ChestPainType RestingBP Cholesterol FastingBS RestingECG \\\n",
+ "166 50 M ASY 140 231 0 ST \n",
+ "702 59 M TA 178 270 0 LVH \n",
+ "771 55 M ASY 140 217 0 Normal \n",
+ "791 51 M ASY 140 298 0 Normal \n",
+ "850 62 F ASY 160 164 0 LVH \n",
+ "900 58 M ASY 114 318 0 ST \n",
+ "\n",
+ " MaxHR ExerciseAngina Oldpeak ST_Slope HeartDisease \n",
+ "166 140 Y 5.0 Flat 1 \n",
+ "702 145 N 4.2 Down 0 \n",
+ "771 111 Y 5.6 Down 1 \n",
+ "791 122 Y 4.2 Flat 1 \n",
+ "850 145 N 6.2 Down 1 \n",
+ "900 140 N 4.4 Down 1 "
+ ]
+ },
+ "execution_count": 41,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "df[df.Oldpeak>(df.Oldpeak.mean()+3*df.Oldpeak.std())]"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 42,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "(909, 12)"
+ ]
+ },
+ "execution_count": 42,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "df2 = df1[df1.Oldpeak<=(df1.Oldpeak.mean()+3*df1.Oldpeak.std())]\n",
+ "df2.shape"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 43,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " Age | \n",
+ " Sex | \n",
+ " ChestPainType | \n",
+ " RestingBP | \n",
+ " Cholesterol | \n",
+ " FastingBS | \n",
+ " RestingECG | \n",
+ " MaxHR | \n",
+ " ExerciseAngina | \n",
+ " Oldpeak | \n",
+ " ST_Slope | \n",
+ " HeartDisease | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " 109 | \n",
+ " 39 | \n",
+ " M | \n",
+ " ATA | \n",
+ " 190 | \n",
+ " 241 | \n",
+ " 0 | \n",
+ " Normal | \n",
+ " 106 | \n",
+ " N | \n",
+ " 0.0 | \n",
+ " Up | \n",
+ " 0 | \n",
+ "
\n",
+ " \n",
+ " 241 | \n",
+ " 54 | \n",
+ " M | \n",
+ " ASY | \n",
+ " 200 | \n",
+ " 198 | \n",
+ " 0 | \n",
+ " Normal | \n",
+ " 142 | \n",
+ " Y | \n",
+ " 2.0 | \n",
+ " Flat | \n",
+ " 1 | \n",
+ "
\n",
+ " \n",
+ " 365 | \n",
+ " 64 | \n",
+ " F | \n",
+ " ASY | \n",
+ " 200 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " Normal | \n",
+ " 140 | \n",
+ " Y | \n",
+ " 1.0 | \n",
+ " Flat | \n",
+ " 1 | \n",
+ "
\n",
+ " \n",
+ " 399 | \n",
+ " 61 | \n",
+ " M | \n",
+ " NAP | \n",
+ " 200 | \n",
+ " 0 | \n",
+ " 1 | \n",
+ " ST | \n",
+ " 70 | \n",
+ " N | \n",
+ " 0.0 | \n",
+ " Flat | \n",
+ " 1 | \n",
+ "
\n",
+ " \n",
+ " 592 | \n",
+ " 61 | \n",
+ " M | \n",
+ " ASY | \n",
+ " 190 | \n",
+ " 287 | \n",
+ " 1 | \n",
+ " LVH | \n",
+ " 150 | \n",
+ " Y | \n",
+ " 2.0 | \n",
+ " Down | \n",
+ " 1 | \n",
+ "
\n",
+ " \n",
+ " 732 | \n",
+ " 56 | \n",
+ " F | \n",
+ " ASY | \n",
+ " 200 | \n",
+ " 288 | \n",
+ " 1 | \n",
+ " LVH | \n",
+ " 133 | \n",
+ " Y | \n",
+ " 4.0 | \n",
+ " Down | \n",
+ " 1 | \n",
+ "
\n",
+ " \n",
+ " 759 | \n",
+ " 54 | \n",
+ " M | \n",
+ " ATA | \n",
+ " 192 | \n",
+ " 283 | \n",
+ " 0 | \n",
+ " LVH | \n",
+ " 195 | \n",
+ " N | \n",
+ " 0.0 | \n",
+ " Up | \n",
+ " 1 | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " Age Sex ChestPainType RestingBP Cholesterol FastingBS RestingECG \\\n",
+ "109 39 M ATA 190 241 0 Normal \n",
+ "241 54 M ASY 200 198 0 Normal \n",
+ "365 64 F ASY 200 0 0 Normal \n",
+ "399 61 M NAP 200 0 1 ST \n",
+ "592 61 M ASY 190 287 1 LVH \n",
+ "732 56 F ASY 200 288 1 LVH \n",
+ "759 54 M ATA 192 283 0 LVH \n",
+ "\n",
+ " MaxHR ExerciseAngina Oldpeak ST_Slope HeartDisease \n",
+ "109 106 N 0.0 Up 0 \n",
+ "241 142 Y 2.0 Flat 1 \n",
+ "365 140 Y 1.0 Flat 1 \n",
+ "399 70 N 0.0 Flat 1 \n",
+ "592 150 Y 2.0 Down 1 \n",
+ "732 133 Y 4.0 Down 1 \n",
+ "759 195 N 0.0 Up 1 "
+ ]
+ },
+ "execution_count": 43,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "df[df.RestingBP>(df.RestingBP.mean()+3*df.RestingBP.std())]"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 44,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "(902, 12)"
+ ]
+ },
+ "execution_count": 44,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "df3 = df2[df2.RestingBP<=(df2.RestingBP.mean()+3*df2.RestingBP.std())]\n",
+ "df3.shape"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 45,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "array(['ATA', 'NAP', 'ASY', 'TA'], dtype=object)"
+ ]
+ },
+ "execution_count": 45,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "df.ChestPainType.unique()"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 46,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "array(['Normal', 'ST', 'LVH'], dtype=object)"
+ ]
+ },
+ "execution_count": 46,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "df.RestingECG.unique()"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 47,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "array(['N', 'Y'], dtype=object)"
+ ]
+ },
+ "execution_count": 47,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "df.ExerciseAngina.unique()"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 48,
+ "metadata": {
+ "scrolled": true
+ },
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "array(['Up', 'Flat', 'Down'], dtype=object)"
+ ]
+ },
+ "execution_count": 48,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "df.ST_Slope.unique()"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "Handle text columns using label encoding and one hot encoding
"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 49,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " Age | \n",
+ " Sex | \n",
+ " ChestPainType | \n",
+ " RestingBP | \n",
+ " Cholesterol | \n",
+ " FastingBS | \n",
+ " RestingECG | \n",
+ " MaxHR | \n",
+ " ExerciseAngina | \n",
+ " Oldpeak | \n",
+ " ST_Slope | \n",
+ " HeartDisease | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " 0 | \n",
+ " 40 | \n",
+ " M | \n",
+ " ATA | \n",
+ " 140 | \n",
+ " 289 | \n",
+ " 0 | \n",
+ " 1 | \n",
+ " 172 | \n",
+ " 0 | \n",
+ " 0.0 | \n",
+ " 3 | \n",
+ " 0 | \n",
+ "
\n",
+ " \n",
+ " 1 | \n",
+ " 49 | \n",
+ " F | \n",
+ " NAP | \n",
+ " 160 | \n",
+ " 180 | \n",
+ " 0 | \n",
+ " 1 | \n",
+ " 156 | \n",
+ " 0 | \n",
+ " 1.0 | \n",
+ " 2 | \n",
+ " 1 | \n",
+ "
\n",
+ " \n",
+ " 2 | \n",
+ " 37 | \n",
+ " M | \n",
+ " ATA | \n",
+ " 130 | \n",
+ " 283 | \n",
+ " 0 | \n",
+ " 2 | \n",
+ " 98 | \n",
+ " 0 | \n",
+ " 0.0 | \n",
+ " 3 | \n",
+ " 0 | \n",
+ "
\n",
+ " \n",
+ " 3 | \n",
+ " 48 | \n",
+ " F | \n",
+ " ASY | \n",
+ " 138 | \n",
+ " 214 | \n",
+ " 0 | \n",
+ " 1 | \n",
+ " 108 | \n",
+ " 1 | \n",
+ " 1.5 | \n",
+ " 2 | \n",
+ " 1 | \n",
+ "
\n",
+ " \n",
+ " 4 | \n",
+ " 54 | \n",
+ " M | \n",
+ " NAP | \n",
+ " 150 | \n",
+ " 195 | \n",
+ " 0 | \n",
+ " 1 | \n",
+ " 122 | \n",
+ " 0 | \n",
+ " 0.0 | \n",
+ " 3 | \n",
+ " 0 | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " Age Sex ChestPainType RestingBP Cholesterol FastingBS RestingECG \\\n",
+ "0 40 M ATA 140 289 0 1 \n",
+ "1 49 F NAP 160 180 0 1 \n",
+ "2 37 M ATA 130 283 0 2 \n",
+ "3 48 F ASY 138 214 0 1 \n",
+ "4 54 M NAP 150 195 0 1 \n",
+ "\n",
+ " MaxHR ExerciseAngina Oldpeak ST_Slope HeartDisease \n",
+ "0 172 0 0.0 3 0 \n",
+ "1 156 0 1.0 2 1 \n",
+ "2 98 0 0.0 3 0 \n",
+ "3 108 1 1.5 2 1 \n",
+ "4 122 0 0.0 3 0 "
+ ]
+ },
+ "execution_count": 49,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "df4 = df3.copy()\n",
+ "df4.ExerciseAngina.replace(\n",
+ " {\n",
+ " 'N': 0,\n",
+ " 'Y': 1\n",
+ " },\n",
+ " inplace=True)\n",
+ "\n",
+ "df4.ST_Slope.replace(\n",
+ " {\n",
+ " 'Down': 1,\n",
+ " 'Flat': 2,\n",
+ " 'Up': 3\n",
+ " },\n",
+ " inplace=True\n",
+ ")\n",
+ "\n",
+ "df4.RestingECG.replace(\n",
+ " {\n",
+ " 'Normal': 1,\n",
+ " 'ST': 2,\n",
+ " 'LVH': 3\n",
+ " },\n",
+ " inplace=True)\n",
+ "\n",
+ "df4.head()"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 50,
+ "metadata": {
+ "scrolled": true
+ },
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " Age | \n",
+ " RestingBP | \n",
+ " Cholesterol | \n",
+ " FastingBS | \n",
+ " RestingECG | \n",
+ " MaxHR | \n",
+ " ExerciseAngina | \n",
+ " Oldpeak | \n",
+ " ST_Slope | \n",
+ " HeartDisease | \n",
+ " Sex_M | \n",
+ " ChestPainType_ATA | \n",
+ " ChestPainType_NAP | \n",
+ " ChestPainType_TA | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " 0 | \n",
+ " 40 | \n",
+ " 140 | \n",
+ " 289 | \n",
+ " 0 | \n",
+ " 1 | \n",
+ " 172 | \n",
+ " 0 | \n",
+ " 0.0 | \n",
+ " 3 | \n",
+ " 0 | \n",
+ " 1 | \n",
+ " 1 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ "
\n",
+ " \n",
+ " 1 | \n",
+ " 49 | \n",
+ " 160 | \n",
+ " 180 | \n",
+ " 0 | \n",
+ " 1 | \n",
+ " 156 | \n",
+ " 0 | \n",
+ " 1.0 | \n",
+ " 2 | \n",
+ " 1 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 1 | \n",
+ " 0 | \n",
+ "
\n",
+ " \n",
+ " 2 | \n",
+ " 37 | \n",
+ " 130 | \n",
+ " 283 | \n",
+ " 0 | \n",
+ " 2 | \n",
+ " 98 | \n",
+ " 0 | \n",
+ " 0.0 | \n",
+ " 3 | \n",
+ " 0 | \n",
+ " 1 | \n",
+ " 1 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ "
\n",
+ " \n",
+ " 3 | \n",
+ " 48 | \n",
+ " 138 | \n",
+ " 214 | \n",
+ " 0 | \n",
+ " 1 | \n",
+ " 108 | \n",
+ " 1 | \n",
+ " 1.5 | \n",
+ " 2 | \n",
+ " 1 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ "
\n",
+ " \n",
+ " 4 | \n",
+ " 54 | \n",
+ " 150 | \n",
+ " 195 | \n",
+ " 0 | \n",
+ " 1 | \n",
+ " 122 | \n",
+ " 0 | \n",
+ " 0.0 | \n",
+ " 3 | \n",
+ " 0 | \n",
+ " 1 | \n",
+ " 0 | \n",
+ " 1 | \n",
+ " 0 | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " Age RestingBP Cholesterol FastingBS RestingECG MaxHR ExerciseAngina \\\n",
+ "0 40 140 289 0 1 172 0 \n",
+ "1 49 160 180 0 1 156 0 \n",
+ "2 37 130 283 0 2 98 0 \n",
+ "3 48 138 214 0 1 108 1 \n",
+ "4 54 150 195 0 1 122 0 \n",
+ "\n",
+ " Oldpeak ST_Slope HeartDisease Sex_M ChestPainType_ATA \\\n",
+ "0 0.0 3 0 1 1 \n",
+ "1 1.0 2 1 0 0 \n",
+ "2 0.0 3 0 1 1 \n",
+ "3 1.5 2 1 0 0 \n",
+ "4 0.0 3 0 1 0 \n",
+ "\n",
+ " ChestPainType_NAP ChestPainType_TA \n",
+ "0 0 0 \n",
+ "1 1 0 \n",
+ "2 0 0 \n",
+ "3 0 0 \n",
+ "4 1 0 "
+ ]
+ },
+ "execution_count": 50,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "df5 = pd.get_dummies(df4, drop_first=True)\n",
+ "df5.head()"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 51,
+ "metadata": {
+ "scrolled": true
+ },
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " Age | \n",
+ " RestingBP | \n",
+ " Cholesterol | \n",
+ " FastingBS | \n",
+ " RestingECG | \n",
+ " MaxHR | \n",
+ " ExerciseAngina | \n",
+ " Oldpeak | \n",
+ " ST_Slope | \n",
+ " Sex_M | \n",
+ " ChestPainType_ATA | \n",
+ " ChestPainType_NAP | \n",
+ " ChestPainType_TA | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " 0 | \n",
+ " 40 | \n",
+ " 140 | \n",
+ " 289 | \n",
+ " 0 | \n",
+ " 1 | \n",
+ " 172 | \n",
+ " 0 | \n",
+ " 0.0 | \n",
+ " 3 | \n",
+ " 1 | \n",
+ " 1 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ "
\n",
+ " \n",
+ " 1 | \n",
+ " 49 | \n",
+ " 160 | \n",
+ " 180 | \n",
+ " 0 | \n",
+ " 1 | \n",
+ " 156 | \n",
+ " 0 | \n",
+ " 1.0 | \n",
+ " 2 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 1 | \n",
+ " 0 | \n",
+ "
\n",
+ " \n",
+ " 2 | \n",
+ " 37 | \n",
+ " 130 | \n",
+ " 283 | \n",
+ " 0 | \n",
+ " 2 | \n",
+ " 98 | \n",
+ " 0 | \n",
+ " 0.0 | \n",
+ " 3 | \n",
+ " 1 | \n",
+ " 1 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ "
\n",
+ " \n",
+ " 3 | \n",
+ " 48 | \n",
+ " 138 | \n",
+ " 214 | \n",
+ " 0 | \n",
+ " 1 | \n",
+ " 108 | \n",
+ " 1 | \n",
+ " 1.5 | \n",
+ " 2 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ "
\n",
+ " \n",
+ " 4 | \n",
+ " 54 | \n",
+ " 150 | \n",
+ " 195 | \n",
+ " 0 | \n",
+ " 1 | \n",
+ " 122 | \n",
+ " 0 | \n",
+ " 0.0 | \n",
+ " 3 | \n",
+ " 1 | \n",
+ " 0 | \n",
+ " 1 | \n",
+ " 0 | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " Age RestingBP Cholesterol FastingBS RestingECG MaxHR ExerciseAngina \\\n",
+ "0 40 140 289 0 1 172 0 \n",
+ "1 49 160 180 0 1 156 0 \n",
+ "2 37 130 283 0 2 98 0 \n",
+ "3 48 138 214 0 1 108 1 \n",
+ "4 54 150 195 0 1 122 0 \n",
+ "\n",
+ " Oldpeak ST_Slope Sex_M ChestPainType_ATA ChestPainType_NAP \\\n",
+ "0 0.0 3 1 1 0 \n",
+ "1 1.0 2 0 0 1 \n",
+ "2 0.0 3 1 1 0 \n",
+ "3 1.5 2 0 0 0 \n",
+ "4 0.0 3 1 0 1 \n",
+ "\n",
+ " ChestPainType_TA \n",
+ "0 0 \n",
+ "1 0 \n",
+ "2 0 \n",
+ "3 0 \n",
+ "4 0 "
+ ]
+ },
+ "execution_count": 51,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "X = df5.drop(\"HeartDisease\",axis='columns')\n",
+ "y = df5.HeartDisease\n",
+ "\n",
+ "X.head()"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 52,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "array([[-1.42896269, 0.46089071, 0.85238015, ..., 2.06757196,\n",
+ " -0.53547478, -0.22914788],\n",
+ " [-0.47545956, 1.5925728 , -0.16132855, ..., -0.4836591 ,\n",
+ " 1.86750159, -0.22914788],\n",
+ " [-1.74679706, -0.10495034, 0.79657967, ..., 2.06757196,\n",
+ " -0.53547478, -0.22914788],\n",
+ " ...,\n",
+ " [ 0.37209878, -0.10495034, -0.61703246, ..., -0.4836591 ,\n",
+ " -0.53547478, -0.22914788],\n",
+ " [ 0.37209878, -0.10495034, 0.35947592, ..., 2.06757196,\n",
+ " -0.53547478, -0.22914788],\n",
+ " [-1.64085227, 0.3477225 , -0.20782894, ..., -0.4836591 ,\n",
+ " 1.86750159, -0.22914788]])"
+ ]
+ },
+ "execution_count": 52,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "from sklearn.preprocessing import StandardScaler\n",
+ "\n",
+ "scaler = StandardScaler()\n",
+ "X_scaled = scaler.fit_transform(X)\n",
+ "X_scaled"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 53,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "from sklearn.model_selection import train_test_split\n",
+ "\n",
+ "X_train, X_test, y_train, y_test = train_test_split(X_scaled, y, test_size=0.2, random_state=20)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 54,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "(721, 13)"
+ ]
+ },
+ "execution_count": 54,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "X_train.shape"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 55,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "(181, 13)"
+ ]
+ },
+ "execution_count": 55,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "X_test.shape"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "Train a model using standalone support vector machine and then using bagging
"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 56,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "0.6906445672191528"
+ ]
+ },
+ "execution_count": 56,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "from sklearn.svm import SVC\n",
+ "from sklearn.model_selection import cross_val_score\n",
+ "\n",
+ "scores = cross_val_score(SVC(), X, y, cv=5)\n",
+ "scores.mean()"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "**Use bagging now with svm**"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 59,
+ "metadata": {
+ "scrolled": true
+ },
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "0.6839656230816453"
+ ]
+ },
+ "execution_count": 59,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "from sklearn.ensemble import BaggingClassifier\n",
+ "\n",
+ "bag_model = BaggingClassifier(base_estimator=SVC(), n_estimators=100, max_samples=0.8, random_state=0)\n",
+ "scores = cross_val_score(bag_model, X, y, cv=5)\n",
+ "scores.mean()"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "As you can see above, using bagging in case of SVM doesn't make much difference in terms of model accuracy. Bagging is effective when we have high variance and instable model such as decision tree. Let's explore how bagging changes the performance for a decision tree classifier."
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "Train a model using decision tree and then using bagging
"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 61,
+ "metadata": {
+ "scrolled": true
+ },
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "0.7193984039287907"
+ ]
+ },
+ "execution_count": 61,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "from sklearn.tree import DecisionTreeClassifier\n",
+ "\n",
+ "scores = cross_val_score(DecisionTreeClassifier(random_state=0), X, y, cv=5)\n",
+ "scores.mean()"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "**Use bagging now with decision tree**"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 68,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "0.8037016574585636"
+ ]
+ },
+ "execution_count": 68,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "bag_model = BaggingClassifier(\n",
+ " base_estimator=DecisionTreeClassifier(random_state=0), \n",
+ " n_estimators=100, \n",
+ " max_samples=0.9, \n",
+ " oob_score=True,\n",
+ " random_state=0\n",
+ ")\n",
+ "\n",
+ "scores = cross_val_score(bag_model, X, y, cv=5)\n",
+ "scores.mean()"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "**You can see that with bagging the score improved from 71.93% to 80.37%**"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "Train a model using Random Forest which itself uses bagging underneath
"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 69,
+ "metadata": {
+ "scrolled": true
+ },
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "0.8170288520564764"
+ ]
+ },
+ "execution_count": 69,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "from sklearn.ensemble import RandomForestClassifier\n",
+ "\n",
+ "scores = cross_val_score(RandomForestClassifier(), X, y, cv=5)\n",
+ "scores.mean()"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "**Random forest gave even a better performance with 81.7% as score. Underneath it used bagging where it sampled not only data rows but also the columns (or features)**"
+ ]
+ }
+ ],
+ "metadata": {
+ "kernelspec": {
+ "display_name": "Python 3",
+ "language": "python",
+ "name": "python3"
+ },
+ "language_info": {
+ "codemirror_mode": {
+ "name": "ipython",
+ "version": 3
+ },
+ "file_extension": ".py",
+ "mimetype": "text/x-python",
+ "name": "python",
+ "nbconvert_exporter": "python",
+ "pygments_lexer": "ipython3",
+ "version": "3.8.5"
+ }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 4
+}
diff --git a/ML/19_Bagging/Exercise/heart.csv b/ML/19_Bagging/Exercise/heart.csv
new file mode 100644
index 00000000..5d9bce69
--- /dev/null
+++ b/ML/19_Bagging/Exercise/heart.csv
@@ -0,0 +1,919 @@
+Age,Sex,ChestPainType,RestingBP,Cholesterol,FastingBS,RestingECG,MaxHR,ExerciseAngina,Oldpeak,ST_Slope,HeartDisease
+40,M,ATA,140,289,0,Normal,172,N,0,Up,0
+49,F,NAP,160,180,0,Normal,156,N,1,Flat,1
+37,M,ATA,130,283,0,ST,98,N,0,Up,0
+48,F,ASY,138,214,0,Normal,108,Y,1.5,Flat,1
+54,M,NAP,150,195,0,Normal,122,N,0,Up,0
+39,M,NAP,120,339,0,Normal,170,N,0,Up,0
+45,F,ATA,130,237,0,Normal,170,N,0,Up,0
+54,M,ATA,110,208,0,Normal,142,N,0,Up,0
+37,M,ASY,140,207,0,Normal,130,Y,1.5,Flat,1
+48,F,ATA,120,284,0,Normal,120,N,0,Up,0
+37,F,NAP,130,211,0,Normal,142,N,0,Up,0
+58,M,ATA,136,164,0,ST,99,Y,2,Flat,1
+39,M,ATA,120,204,0,Normal,145,N,0,Up,0
+49,M,ASY,140,234,0,Normal,140,Y,1,Flat,1
+42,F,NAP,115,211,0,ST,137,N,0,Up,0
+54,F,ATA,120,273,0,Normal,150,N,1.5,Flat,0
+38,M,ASY,110,196,0,Normal,166,N,0,Flat,1
+43,F,ATA,120,201,0,Normal,165,N,0,Up,0
+60,M,ASY,100,248,0,Normal,125,N,1,Flat,1
+36,M,ATA,120,267,0,Normal,160,N,3,Flat,1
+43,F,TA,100,223,0,Normal,142,N,0,Up,0
+44,M,ATA,120,184,0,Normal,142,N,1,Flat,0
+49,F,ATA,124,201,0,Normal,164,N,0,Up,0
+44,M,ATA,150,288,0,Normal,150,Y,3,Flat,1
+40,M,NAP,130,215,0,Normal,138,N,0,Up,0
+36,M,NAP,130,209,0,Normal,178,N,0,Up,0
+53,M,ASY,124,260,0,ST,112,Y,3,Flat,0
+52,M,ATA,120,284,0,Normal,118,N,0,Up,0
+53,F,ATA,113,468,0,Normal,127,N,0,Up,0
+51,M,ATA,125,188,0,Normal,145,N,0,Up,0
+53,M,NAP,145,518,0,Normal,130,N,0,Flat,1
+56,M,NAP,130,167,0,Normal,114,N,0,Up,0
+54,M,ASY,125,224,0,Normal,122,N,2,Flat,1
+41,M,ASY,130,172,0,ST,130,N,2,Flat,1
+43,F,ATA,150,186,0,Normal,154,N,0,Up,0
+32,M,ATA,125,254,0,Normal,155,N,0,Up,0
+65,M,ASY,140,306,1,Normal,87,Y,1.5,Flat,1
+41,F,ATA,110,250,0,ST,142,N,0,Up,0
+48,F,ATA,120,177,1,ST,148,N,0,Up,0
+48,F,ASY,150,227,0,Normal,130,Y,1,Flat,0
+54,F,ATA,150,230,0,Normal,130,N,0,Up,0
+54,F,NAP,130,294,0,ST,100,Y,0,Flat,1
+35,M,ATA,150,264,0,Normal,168,N,0,Up,0
+52,M,NAP,140,259,0,ST,170,N,0,Up,0
+43,M,ASY,120,175,0,Normal,120,Y,1,Flat,1
+59,M,NAP,130,318,0,Normal,120,Y,1,Flat,0
+37,M,ASY,120,223,0,Normal,168,N,0,Up,0
+50,M,ATA,140,216,0,Normal,170,N,0,Up,0
+36,M,NAP,112,340,0,Normal,184,N,1,Flat,0
+41,M,ASY,110,289,0,Normal,170,N,0,Flat,1
+50,M,ASY,130,233,0,Normal,121,Y,2,Flat,1
+47,F,ASY,120,205,0,Normal,98,Y,2,Flat,1
+45,M,ATA,140,224,1,Normal,122,N,0,Up,0
+41,F,ATA,130,245,0,Normal,150,N,0,Up,0
+52,F,ASY,130,180,0,Normal,140,Y,1.5,Flat,0
+51,F,ATA,160,194,0,Normal,170,N,0,Up,0
+31,M,ASY,120,270,0,Normal,153,Y,1.5,Flat,1
+58,M,NAP,130,213,0,ST,140,N,0,Flat,1
+54,M,ASY,150,365,0,ST,134,N,1,Up,0
+52,M,ASY,112,342,0,ST,96,Y,1,Flat,1
+49,M,ATA,100,253,0,Normal,174,N,0,Up,0
+43,F,NAP,150,254,0,Normal,175,N,0,Up,0
+45,M,ASY,140,224,0,Normal,144,N,0,Up,0
+46,M,ASY,120,277,0,Normal,125,Y,1,Flat,1
+50,F,ATA,110,202,0,Normal,145,N,0,Up,0
+37,F,ATA,120,260,0,Normal,130,N,0,Up,0
+45,F,ASY,132,297,0,Normal,144,N,0,Up,0
+32,M,ATA,110,225,0,Normal,184,N,0,Up,0
+52,M,ASY,160,246,0,ST,82,Y,4,Flat,1
+44,M,ASY,150,412,0,Normal,170,N,0,Up,0
+57,M,ATA,140,265,0,ST,145,Y,1,Flat,1
+44,M,ATA,130,215,0,Normal,135,N,0,Up,0
+52,M,ASY,120,182,0,Normal,150,N,0,Flat,1
+44,F,ASY,120,218,0,ST,115,N,0,Up,0
+55,M,ASY,140,268,0,Normal,128,Y,1.5,Flat,1
+46,M,NAP,150,163,0,Normal,116,N,0,Up,0
+32,M,ASY,118,529,0,Normal,130,N,0,Flat,1
+35,F,ASY,140,167,0,Normal,150,N,0,Up,0
+52,M,ATA,140,100,0,Normal,138,Y,0,Up,0
+49,M,ASY,130,206,0,Normal,170,N,0,Flat,1
+55,M,NAP,110,277,0,Normal,160,N,0,Up,0
+54,M,ATA,120,238,0,Normal,154,N,0,Up,0
+63,M,ASY,150,223,0,Normal,115,N,0,Flat,1
+52,M,ATA,160,196,0,Normal,165,N,0,Up,0
+56,M,ASY,150,213,1,Normal,125,Y,1,Flat,1
+66,M,ASY,140,139,0,Normal,94,Y,1,Flat,1
+65,M,ASY,170,263,1,Normal,112,Y,2,Flat,1
+53,F,ATA,140,216,0,Normal,142,Y,2,Flat,0
+43,M,TA,120,291,0,ST,155,N,0,Flat,1
+55,M,ASY,140,229,0,Normal,110,Y,0.5,Flat,0
+49,F,ATA,110,208,0,Normal,160,N,0,Up,0
+39,M,ASY,130,307,0,Normal,140,N,0,Up,0
+52,F,ATA,120,210,0,Normal,148,N,0,Up,0
+48,M,ASY,160,329,0,Normal,92,Y,1.5,Flat,1
+39,F,NAP,110,182,0,ST,180,N,0,Up,0
+58,M,ASY,130,263,0,Normal,140,Y,2,Flat,1
+43,M,ATA,142,207,0,Normal,138,N,0,Up,0
+39,M,NAP,160,147,1,Normal,160,N,0,Up,0
+56,M,ASY,120,85,0,Normal,140,N,0,Up,0
+41,M,ATA,125,269,0,Normal,144,N,0,Up,0
+65,M,ASY,130,275,0,ST,115,Y,1,Flat,1
+51,M,ASY,130,179,0,Normal,100,N,0,Up,0
+40,F,ASY,150,392,0,Normal,130,N,2,Flat,1
+40,M,ASY,120,466,1,Normal,152,Y,1,Flat,1
+46,M,ASY,118,186,0,Normal,124,N,0,Flat,1
+57,M,ATA,140,260,1,Normal,140,N,0,Up,0
+48,F,ASY,120,254,0,ST,110,N,0,Up,0
+34,M,ATA,150,214,0,ST,168,N,0,Up,0
+50,M,ASY,140,129,0,Normal,135,N,0,Up,0
+39,M,ATA,190,241,0,Normal,106,N,0,Up,0
+59,F,ATA,130,188,0,Normal,124,N,1,Flat,0
+57,M,ASY,150,255,0,Normal,92,Y,3,Flat,1
+47,M,ASY,140,276,1,Normal,125,Y,0,Up,0
+38,M,ATA,140,297,0,Normal,150,N,0,Up,0
+49,F,NAP,130,207,0,ST,135,N,0,Up,0
+33,F,ASY,100,246,0,Normal,150,Y,1,Flat,1
+38,M,ASY,120,282,0,Normal,170,N,0,Flat,1
+59,F,ASY,130,338,1,ST,130,Y,1.5,Flat,1
+35,F,TA,120,160,0,ST,185,N,0,Up,0
+34,M,TA,140,156,0,Normal,180,N,0,Flat,1
+47,F,NAP,135,248,1,Normal,170,N,0,Flat,1
+52,F,NAP,125,272,0,Normal,139,N,0,Up,0
+46,M,ASY,110,240,0,ST,140,N,0,Up,0
+58,F,ATA,180,393,0,Normal,110,Y,1,Flat,1
+58,M,ATA,130,230,0,Normal,150,N,0,Up,0
+54,M,ATA,120,246,0,Normal,110,N,0,Up,0
+34,F,ATA,130,161,0,Normal,190,N,0,Up,0
+48,F,ASY,108,163,0,Normal,175,N,2,Up,0
+54,F,ATA,120,230,1,Normal,140,N,0,Up,0
+42,M,NAP,120,228,0,Normal,152,Y,1.5,Flat,0
+38,M,NAP,145,292,0,Normal,130,N,0,Up,0
+46,M,ASY,110,202,0,Normal,150,Y,0,Flat,1
+56,M,ASY,170,388,0,ST,122,Y,2,Flat,1
+56,M,ASY,150,230,0,ST,124,Y,1.5,Flat,1
+61,F,ASY,130,294,0,ST,120,Y,1,Flat,0
+49,M,NAP,115,265,0,Normal,175,N,0,Flat,1
+43,F,ATA,120,215,0,ST,175,N,0,Up,0
+39,M,ATA,120,241,0,ST,146,N,2,Up,0
+54,M,ASY,140,166,0,Normal,118,Y,0,Flat,1
+43,M,ASY,150,247,0,Normal,130,Y,2,Flat,1
+52,M,ASY,160,331,0,Normal,94,Y,2.5,Flat,1
+50,M,ASY,140,341,0,ST,125,Y,2.5,Flat,1
+47,M,ASY,160,291,0,ST,158,Y,3,Flat,1
+53,M,ASY,140,243,0,Normal,155,N,0,Up,0
+56,F,ATA,120,279,0,Normal,150,N,1,Flat,1
+39,M,ASY,110,273,0,Normal,132,N,0,Up,0
+42,M,ATA,120,198,0,Normal,155,N,0,Up,0
+43,F,ATA,120,249,0,ST,176,N,0,Up,0
+50,M,ATA,120,168,0,Normal,160,N,0,Up,0
+54,M,ASY,130,603,1,Normal,125,Y,1,Flat,1
+39,M,ATA,130,215,0,Normal,120,N,0,Up,0
+48,M,ATA,100,159,0,Normal,100,N,0,Up,0
+40,M,ATA,130,275,0,Normal,150,N,0,Up,0
+55,M,ASY,120,270,0,Normal,140,N,0,Up,0
+41,M,ATA,120,291,0,ST,160,N,0,Up,0
+56,M,ASY,155,342,1,Normal,150,Y,3,Flat,1
+38,M,ASY,110,190,0,Normal,150,Y,1,Flat,1
+49,M,ASY,140,185,0,Normal,130,N,0,Up,0
+44,M,ASY,130,290,0,Normal,100,Y,2,Flat,1
+54,M,ATA,160,195,0,ST,130,N,1,Up,0
+59,M,ASY,140,264,1,LVH,119,Y,0,Flat,1
+49,M,ASY,128,212,0,Normal,96,Y,0,Flat,1
+47,M,ATA,160,263,0,Normal,174,N,0,Up,0
+42,M,ATA,120,196,0,Normal,150,N,0,Up,0
+52,F,ATA,140,225,0,Normal,140,N,0,Up,0
+46,M,TA,140,272,1,Normal,175,N,2,Flat,1
+50,M,ASY,140,231,0,ST,140,Y,5,Flat,1
+48,M,ATA,140,238,0,Normal,118,N,0,Up,0
+58,M,ASY,135,222,0,Normal,100,N,0,Up,0
+58,M,NAP,140,179,0,Normal,160,N,0,Up,0
+29,M,ATA,120,243,0,Normal,160,N,0,Up,0
+40,M,NAP,140,235,0,Normal,188,N,0,Up,0
+53,M,ATA,140,320,0,Normal,162,N,0,Up,0
+49,M,NAP,140,187,0,Normal,172,N,0,Up,0
+52,M,ASY,140,266,0,Normal,134,Y,2,Flat,1
+43,M,ASY,140,288,0,Normal,135,Y,2,Flat,1
+54,M,ASY,140,216,0,Normal,105,N,1.5,Flat,1
+59,M,ATA,140,287,0,Normal,150,N,0,Up,0
+37,M,NAP,130,194,0,Normal,150,N,0,Up,0
+46,F,ASY,130,238,0,Normal,90,N,0,Up,0
+52,M,ASY,130,225,0,Normal,120,Y,2,Flat,1
+51,M,ATA,130,224,0,Normal,150,N,0,Up,0
+52,M,ASY,140,404,0,Normal,124,Y,2,Flat,1
+46,M,ASY,110,238,0,ST,140,Y,1,Flat,0
+54,F,ATA,160,312,0,Normal,130,N,0,Up,0
+58,M,NAP,160,211,1,ST,92,N,0,Flat,1
+58,M,ATA,130,251,0,Normal,110,N,0,Up,0
+41,M,ASY,120,237,1,Normal,138,Y,1,Flat,1
+50,F,ASY,120,328,0,Normal,110,Y,1,Flat,0
+53,M,ASY,180,285,0,ST,120,Y,1.5,Flat,1
+46,M,ASY,180,280,0,ST,120,N,0,Up,0
+50,M,ATA,170,209,0,ST,116,N,0,Up,0
+48,M,ATA,130,245,0,Normal,160,N,0,Up,0
+45,M,NAP,135,192,0,Normal,110,N,0,Up,0
+41,F,ATA,125,184,0,Normal,180,N,0,Up,0
+62,F,TA,160,193,0,Normal,116,N,0,Up,0
+49,M,ASY,120,297,0,Normal,132,N,1,Flat,0
+42,M,ATA,150,268,0,Normal,136,N,0,Up,0
+53,M,ASY,120,246,0,Normal,116,Y,0,Flat,1
+57,F,TA,130,308,0,Normal,98,N,1,Flat,0
+47,M,TA,110,249,0,Normal,150,N,0,Up,0
+46,M,NAP,120,230,0,Normal,150,N,0,Up,0
+42,M,NAP,160,147,0,Normal,146,N,0,Up,0
+31,F,ATA,100,219,0,ST,150,N,0,Up,0
+56,M,ATA,130,184,0,Normal,100,N,0,Up,0
+50,M,ASY,150,215,0,Normal,140,Y,0,Up,0
+35,M,ATA,120,308,0,LVH,180,N,0,Up,0
+35,M,ATA,110,257,0,Normal,140,N,0,Flat,1
+28,M,ATA,130,132,0,LVH,185,N,0,Up,0
+54,M,ASY,125,216,0,Normal,140,N,0,Flat,1
+48,M,ASY,106,263,1,Normal,110,N,0,Flat,1
+50,F,NAP,140,288,0,Normal,140,Y,0,Flat,1
+56,M,NAP,130,276,0,Normal,128,Y,1,Up,0
+56,F,NAP,130,219,0,ST,164,N,0,Up,0
+47,M,ASY,150,226,0,Normal,98,Y,1.5,Flat,1
+30,F,TA,170,237,0,ST,170,N,0,Up,0
+39,M,ASY,110,280,0,Normal,150,N,0,Flat,1
+54,M,NAP,120,217,0,Normal,137,N,0,Up,0
+55,M,ATA,140,196,0,Normal,150,N,0,Up,0
+29,M,ATA,140,263,0,Normal,170,N,0,Up,0
+46,M,ASY,130,222,0,Normal,112,N,0,Flat,1
+51,F,ASY,160,303,0,Normal,150,Y,1,Flat,1
+48,F,NAP,120,195,0,Normal,125,N,0,Up,0
+33,M,NAP,120,298,0,Normal,185,N,0,Up,0
+55,M,ATA,120,256,1,Normal,137,N,0,Up,0
+50,M,ASY,145,264,0,Normal,150,N,0,Flat,1
+53,M,NAP,120,195,0,Normal,140,N,0,Up,0
+38,M,ASY,92,117,0,Normal,134,Y,2.5,Flat,1
+41,M,ATA,120,295,0,Normal,170,N,0,Up,0
+37,F,ASY,130,173,0,ST,184,N,0,Up,0
+37,M,ASY,130,315,0,Normal,158,N,0,Up,0
+40,M,NAP,130,281,0,Normal,167,N,0,Up,0
+38,F,ATA,120,275,0,Normal,129,N,0,Up,0
+41,M,ASY,112,250,0,Normal,142,N,0,Up,0
+54,F,ATA,140,309,0,ST,140,N,0,Up,0
+39,M,ATA,120,200,0,Normal,160,Y,1,Flat,0
+41,M,ASY,120,336,0,Normal,118,Y,3,Flat,1
+55,M,TA,140,295,0,Normal,136,N,0,Flat,1
+48,M,ASY,160,355,0,Normal,99,Y,2,Flat,1
+48,M,ASY,160,193,0,Normal,102,Y,3,Flat,1
+55,M,ATA,145,326,0,Normal,155,N,0,Up,0
+54,M,ASY,200,198,0,Normal,142,Y,2,Flat,1
+55,M,ATA,160,292,1,Normal,143,Y,2,Flat,1
+43,F,ATA,120,266,0,Normal,118,N,0,Up,0
+48,M,ASY,160,268,0,Normal,103,Y,1,Flat,1
+54,M,TA,120,171,0,Normal,137,N,2,Up,0
+54,M,NAP,120,237,0,Normal,150,Y,1.5,Flat,1
+48,M,ASY,122,275,1,ST,150,Y,2,Down,1
+45,M,ASY,130,219,0,ST,130,Y,1,Flat,1
+49,M,ASY,130,341,0,Normal,120,Y,1,Flat,1
+44,M,ASY,135,491,0,Normal,135,N,0,Flat,1
+48,M,ASY,120,260,0,Normal,115,N,2,Flat,1
+61,M,ASY,125,292,0,ST,115,Y,0,Up,0
+62,M,ATA,140,271,0,Normal,152,N,1,Up,0
+55,M,ASY,145,248,0,Normal,96,Y,2,Flat,1
+53,F,NAP,120,274,0,Normal,130,N,0,Up,0
+55,F,ATA,130,394,0,LVH,150,N,0,Up,0
+36,M,NAP,150,160,0,Normal,172,N,0,Up,0
+51,F,NAP,150,200,0,Normal,120,N,0.5,Up,0
+55,F,ATA,122,320,0,Normal,155,N,0,Up,0
+46,M,ATA,140,275,0,Normal,165,Y,0,Up,0
+54,F,ATA,120,221,0,Normal,138,N,1,Up,0
+46,M,ASY,120,231,0,Normal,115,Y,0,Flat,1
+59,M,ASY,130,126,0,Normal,125,N,0,Flat,1
+47,M,NAP,140,193,0,Normal,145,Y,1,Flat,1
+54,M,ATA,160,305,0,Normal,175,N,0,Up,0
+52,M,ASY,130,298,0,Normal,110,Y,1,Flat,1
+34,M,ATA,98,220,0,Normal,150,N,0,Up,0
+54,M,ASY,130,242,0,Normal,91,Y,1,Flat,1
+47,F,NAP,130,235,0,Normal,145,N,2,Flat,0
+45,M,ASY,120,225,0,Normal,140,N,0,Up,0
+32,F,ATA,105,198,0,Normal,165,N,0,Up,0
+55,M,ASY,140,201,0,Normal,130,Y,3,Flat,1
+55,M,NAP,120,220,0,LVH,134,N,0,Up,0
+45,F,ATA,180,295,0,Normal,180,N,0,Up,0
+59,M,NAP,180,213,0,Normal,100,N,0,Up,0
+51,M,NAP,135,160,0,Normal,150,N,2,Flat,1
+52,M,ASY,170,223,0,Normal,126,Y,1.5,Flat,1
+57,F,ASY,180,347,0,ST,126,Y,0.8,Flat,0
+54,F,ATA,130,253,0,ST,155,N,0,Up,0
+60,M,NAP,120,246,0,LVH,135,N,0,Up,0
+49,M,ASY,150,222,0,Normal,122,N,2,Flat,1
+51,F,NAP,130,220,0,Normal,160,Y,2,Up,0
+55,F,ATA,110,344,0,ST,160,N,0,Up,0
+42,M,ASY,140,358,0,Normal,170,N,0,Up,0
+51,F,NAP,110,190,0,Normal,120,N,0,Up,0
+59,M,ASY,140,169,0,Normal,140,N,0,Up,0
+53,M,ATA,120,181,0,Normal,132,N,0,Up,0
+48,F,ATA,133,308,0,ST,156,N,2,Up,0
+36,M,ATA,120,166,0,Normal,180,N,0,Up,0
+48,M,NAP,110,211,0,Normal,138,N,0,Up,0
+47,F,ATA,140,257,0,Normal,135,N,1,Up,0
+53,M,ASY,130,182,0,Normal,148,N,0,Up,0
+65,M,ASY,115,0,0,Normal,93,Y,0,Flat,1
+32,M,TA,95,0,1,Normal,127,N,0.7,Up,1
+61,M,ASY,105,0,1,Normal,110,Y,1.5,Up,1
+50,M,ASY,145,0,1,Normal,139,Y,0.7,Flat,1
+57,M,ASY,110,0,1,ST,131,Y,1.4,Up,1
+51,M,ASY,110,0,1,Normal,92,N,0,Flat,1
+47,M,ASY,110,0,1,ST,149,N,2.1,Up,1
+60,M,ASY,160,0,1,Normal,149,N,0.4,Flat,1
+55,M,ATA,140,0,0,ST,150,N,0.2,Up,0
+53,M,ASY,125,0,1,Normal,120,N,1.5,Up,1
+62,F,ASY,120,0,1,ST,123,Y,1.7,Down,1
+51,M,ASY,95,0,1,Normal,126,N,2.2,Flat,1
+51,F,ASY,120,0,1,Normal,127,Y,1.5,Up,1
+55,M,ASY,115,0,1,Normal,155,N,0.1,Flat,1
+53,M,ATA,130,0,0,ST,120,N,0.7,Down,0
+58,M,ASY,115,0,1,Normal,138,N,0.5,Up,1
+57,M,ASY,95,0,1,Normal,182,N,0.7,Down,1
+65,M,ASY,155,0,0,Normal,154,N,1,Up,0
+60,M,ASY,125,0,1,Normal,110,N,0.1,Up,1
+41,M,ASY,125,0,1,Normal,176,N,1.6,Up,1
+34,M,ASY,115,0,1,Normal,154,N,0.2,Up,1
+53,M,ASY,80,0,0,Normal,141,Y,2,Down,0
+74,M,ATA,145,0,1,ST,123,N,1.3,Up,1
+57,M,NAP,105,0,1,Normal,148,N,0.3,Flat,1
+56,M,ASY,140,0,1,Normal,121,Y,1.8,Up,1
+61,M,ASY,130,0,1,Normal,77,N,2.5,Flat,1
+68,M,ASY,145,0,1,Normal,136,N,1.8,Up,1
+59,M,NAP,125,0,1,Normal,175,N,2.6,Flat,1
+63,M,ASY,100,0,1,Normal,109,N,-0.9,Flat,1
+38,F,ASY,105,0,1,Normal,166,N,2.8,Up,1
+62,M,ASY,115,0,1,Normal,128,Y,2.5,Down,1
+46,M,ASY,100,0,1,ST,133,N,-2.6,Flat,1
+42,M,ASY,105,0,1,Normal,128,Y,-1.5,Down,1
+45,M,NAP,110,0,0,Normal,138,N,-0.1,Up,0
+59,M,ASY,125,0,1,Normal,119,Y,0.9,Up,1
+52,M,ASY,95,0,1,Normal,82,Y,0.8,Flat,1
+60,M,ASY,130,0,1,ST,130,Y,1.1,Down,1
+60,M,NAP,115,0,1,Normal,143,N,2.4,Up,1
+56,M,ASY,115,0,1,ST,82,N,-1,Up,1
+38,M,NAP,100,0,0,Normal,179,N,-1.1,Up,0
+40,M,ASY,95,0,1,ST,144,N,0,Up,1
+51,M,ASY,130,0,1,Normal,170,N,-0.7,Up,1
+62,M,TA,120,0,1,LVH,134,N,-0.8,Flat,1
+72,M,NAP,160,0,0,LVH,114,N,1.6,Flat,0
+63,M,ASY,150,0,1,ST,154,N,3.7,Up,1
+63,M,ASY,140,0,1,LVH,149,N,2,Up,1
+64,F,ASY,95,0,1,Normal,145,N,1.1,Down,1
+43,M,ASY,100,0,1,Normal,122,N,1.5,Down,1
+64,M,ASY,110,0,1,Normal,114,Y,1.3,Down,1
+61,M,ASY,110,0,1,Normal,113,N,1.4,Flat,1
+52,M,ASY,130,0,1,Normal,120,N,0,Flat,1
+51,M,ASY,120,0,1,Normal,104,N,0,Flat,1
+69,M,ASY,135,0,0,Normal,130,N,0,Flat,1
+59,M,ASY,120,0,0,Normal,115,N,0,Flat,1
+48,M,ASY,115,0,1,Normal,128,N,0,Flat,1
+69,M,ASY,137,0,0,ST,104,Y,1.6,Flat,1
+36,M,ASY,110,0,1,Normal,125,Y,1,Flat,1
+53,M,ASY,120,0,1,Normal,120,N,0,Flat,1
+43,M,ASY,140,0,0,ST,140,Y,0.5,Up,1
+56,M,ASY,120,0,0,ST,100,Y,-1,Down,1
+58,M,ASY,130,0,0,ST,100,Y,1,Flat,1
+55,M,ASY,120,0,0,ST,92,N,0.3,Up,1
+67,M,TA,145,0,0,LVH,125,N,0,Flat,1
+46,M,ASY,115,0,0,Normal,113,Y,1.5,Flat,1
+53,M,ATA,120,0,0,Normal,95,N,0,Flat,1
+38,M,NAP,115,0,0,Normal,128,Y,0,Flat,1
+53,M,NAP,105,0,0,Normal,115,N,0,Flat,1
+62,M,NAP,160,0,0,Normal,72,Y,0,Flat,1
+47,M,ASY,160,0,0,Normal,124,Y,0,Flat,1
+56,M,NAP,155,0,0,ST,99,N,0,Flat,1
+56,M,ASY,120,0,0,ST,148,N,0,Flat,1
+56,M,NAP,120,0,0,Normal,97,N,0,Flat,0
+64,F,ASY,200,0,0,Normal,140,Y,1,Flat,1
+61,M,ASY,150,0,0,Normal,117,Y,2,Flat,1
+68,M,ASY,135,0,0,ST,120,Y,0,Up,1
+57,M,ASY,140,0,0,Normal,120,Y,2,Flat,1
+63,M,ASY,150,0,0,Normal,86,Y,2,Flat,1
+60,M,ASY,135,0,0,Normal,63,Y,0.5,Up,1
+66,M,ASY,150,0,0,Normal,108,Y,2,Flat,1
+63,M,ASY,185,0,0,Normal,98,Y,0,Up,1
+59,M,ASY,135,0,0,Normal,115,Y,1,Flat,1
+61,M,ASY,125,0,0,Normal,105,Y,0,Down,1
+73,F,NAP,160,0,0,ST,121,N,0,Up,1
+47,M,NAP,155,0,0,Normal,118,Y,1,Flat,1
+65,M,ASY,160,0,1,ST,122,N,1.2,Flat,1
+70,M,ASY,140,0,1,Normal,157,Y,2,Flat,1
+50,M,ASY,120,0,0,ST,156,Y,0,Up,1
+60,M,ASY,160,0,0,ST,99,Y,0.5,Flat,1
+50,M,ASY,115,0,0,Normal,120,Y,0.5,Flat,1
+43,M,ASY,115,0,0,Normal,145,Y,2,Flat,1
+38,F,ASY,110,0,0,Normal,156,N,0,Flat,1
+54,M,ASY,120,0,0,Normal,155,N,0,Flat,1
+61,M,ASY,150,0,0,Normal,105,Y,0,Flat,1
+42,M,ASY,145,0,0,Normal,99,Y,0,Flat,1
+53,M,ASY,130,0,0,LVH,135,Y,1,Flat,1
+55,M,ASY,140,0,0,Normal,83,N,0,Flat,1
+61,M,ASY,160,0,1,ST,145,N,1,Flat,1
+51,M,ASY,140,0,0,Normal,60,N,0,Flat,1
+70,M,ASY,115,0,0,ST,92,Y,0,Flat,1
+61,M,ASY,130,0,0,LVH,115,N,0,Flat,1
+38,M,ASY,150,0,1,Normal,120,Y,0.7,Flat,1
+57,M,ASY,160,0,1,Normal,98,Y,2,Flat,1
+38,M,ASY,135,0,1,Normal,150,N,0,Flat,1
+62,F,TA,140,0,1,Normal,143,N,0,Flat,1
+58,M,ASY,170,0,1,ST,105,Y,0,Flat,1
+52,M,ASY,165,0,1,Normal,122,Y,1,Up,1
+61,M,NAP,200,0,1,ST,70,N,0,Flat,1
+50,F,ASY,160,0,1,Normal,110,N,0,Flat,1
+51,M,ASY,130,0,1,ST,163,N,0,Flat,1
+65,M,ASY,145,0,1,ST,67,N,0.7,Flat,1
+52,M,ASY,135,0,1,Normal,128,Y,2,Flat,1
+47,M,NAP,110,0,1,Normal,120,Y,0,Flat,1
+35,M,ASY,120,0,1,Normal,130,Y,1.2,Flat,1
+57,M,ASY,140,0,1,Normal,100,Y,0,Flat,1
+62,M,ASY,115,0,1,Normal,72,Y,-0.5,Flat,1
+59,M,ASY,110,0,1,Normal,94,N,0,Flat,1
+53,M,NAP,160,0,1,LVH,122,Y,0,Flat,1
+62,M,ASY,150,0,1,ST,78,N,2,Flat,1
+54,M,ASY,180,0,1,Normal,150,N,1.5,Flat,1
+56,M,ASY,125,0,1,Normal,103,Y,1,Flat,1
+56,M,NAP,125,0,1,Normal,98,N,-2,Flat,1
+54,M,ASY,130,0,1,Normal,110,Y,3,Flat,1
+66,F,ASY,155,0,1,Normal,90,N,0,Flat,1
+63,M,ASY,140,260,0,ST,112,Y,3,Flat,1
+44,M,ASY,130,209,0,ST,127,N,0,Up,0
+60,M,ASY,132,218,0,ST,140,Y,1.5,Down,1
+55,M,ASY,142,228,0,ST,149,Y,2.5,Up,1
+66,M,NAP,110,213,1,LVH,99,Y,1.3,Flat,0
+66,M,NAP,120,0,0,ST,120,N,-0.5,Up,0
+65,M,ASY,150,236,1,ST,105,Y,0,Flat,1
+60,M,NAP,180,0,0,ST,140,Y,1.5,Flat,0
+60,M,NAP,120,0,1,Normal,141,Y,2,Up,1
+60,M,ATA,160,267,1,ST,157,N,0.5,Flat,1
+56,M,ATA,126,166,0,ST,140,N,0,Up,0
+59,M,ASY,140,0,0,ST,117,Y,1,Flat,1
+62,M,ASY,110,0,0,Normal,120,Y,0.5,Flat,1
+63,M,NAP,133,0,0,LVH,120,Y,1,Flat,1
+57,M,ASY,128,0,1,ST,148,Y,1,Flat,1
+62,M,ASY,120,220,0,ST,86,N,0,Up,0
+63,M,ASY,170,177,0,Normal,84,Y,2.5,Down,1
+46,M,ASY,110,236,0,Normal,125,Y,2,Flat,1
+63,M,ASY,126,0,0,ST,120,N,1.5,Down,0
+60,M,ASY,152,0,0,ST,118,Y,0,Up,0
+58,M,ASY,116,0,0,Normal,124,N,1,Up,1
+64,M,ASY,120,0,1,ST,106,N,2,Flat,1
+63,M,NAP,130,0,0,ST,111,Y,0,Flat,1
+74,M,NAP,138,0,0,Normal,116,N,0.2,Up,0
+52,M,NAP,128,0,0,ST,180,N,3,Up,1
+69,M,ASY,130,0,1,ST,129,N,1,Flat,1
+51,M,ASY,128,0,1,ST,125,Y,1.2,Flat,1
+60,M,ASY,130,186,1,ST,140,Y,0.5,Flat,1
+56,M,ASY,120,100,0,Normal,120,Y,1.5,Flat,1
+55,M,NAP,136,228,0,ST,124,Y,1.6,Flat,1
+54,M,ASY,130,0,0,ST,117,Y,1.4,Flat,1
+77,M,ASY,124,171,0,ST,110,Y,2,Up,1
+63,M,ASY,160,230,1,Normal,105,Y,1,Flat,1
+55,M,NAP,0,0,0,Normal,155,N,1.5,Flat,1
+52,M,NAP,122,0,0,Normal,110,Y,2,Down,1
+64,M,ASY,144,0,0,ST,122,Y,1,Flat,1
+60,M,ASY,140,281,0,ST,118,Y,1.5,Flat,1
+60,M,ASY,120,0,0,Normal,133,Y,2,Up,0
+58,M,ASY,136,203,1,Normal,123,Y,1.2,Flat,1
+59,M,ASY,154,0,0,ST,131,Y,1.5,Up,0
+61,M,NAP,120,0,0,Normal,80,Y,0,Flat,1
+40,M,ASY,125,0,1,Normal,165,N,0,Flat,1
+61,M,ASY,134,0,1,ST,86,N,1.5,Flat,1
+41,M,ASY,104,0,0,ST,111,N,0,Up,0
+57,M,ASY,139,277,1,ST,118,Y,1.9,Flat,1
+63,M,ASY,136,0,0,Normal,84,Y,0,Flat,1
+59,M,ASY,122,233,0,Normal,117,Y,1.3,Down,1
+51,M,ASY,128,0,0,Normal,107,N,0,Up,0
+59,M,NAP,131,0,0,Normal,128,Y,2,Down,1
+42,M,NAP,134,240,0,Normal,160,N,0,Up,0
+55,M,NAP,120,0,0,ST,125,Y,2.5,Flat,1
+63,F,ATA,132,0,0,Normal,130,N,0.1,Up,0
+62,M,ASY,152,153,0,ST,97,Y,1.6,Up,1
+56,M,ATA,124,224,1,Normal,161,N,2,Flat,0
+53,M,ASY,126,0,0,Normal,106,N,0,Flat,1
+68,M,ASY,138,0,0,Normal,130,Y,3,Flat,1
+53,M,ASY,154,0,1,ST,140,Y,1.5,Flat,1
+60,M,NAP,141,316,1,ST,122,Y,1.7,Flat,1
+62,M,ATA,131,0,0,Normal,130,N,0.1,Up,0
+59,M,ASY,178,0,1,LVH,120,Y,0,Flat,1
+51,M,ASY,132,218,1,LVH,139,N,0.1,Up,0
+61,M,ASY,110,0,1,Normal,108,Y,2,Down,1
+57,M,ASY,130,311,1,ST,148,Y,2,Flat,1
+56,M,NAP,170,0,0,LVH,123,Y,2.5,Flat,1
+58,M,ATA,126,0,1,Normal,110,Y,2,Flat,1
+69,M,NAP,140,0,1,ST,118,N,2.5,Down,1
+67,M,TA,142,270,1,Normal,125,N,2.5,Up,1
+58,M,ASY,120,0,0,LVH,106,Y,1.5,Down,1
+65,M,ASY,134,0,0,Normal,112,Y,1.1,Flat,1
+63,M,ATA,139,217,1,ST,128,Y,1.2,Flat,1
+55,M,ATA,110,214,1,ST,180,N,0.4,Up,0
+57,M,ASY,140,214,0,ST,144,Y,2,Flat,1
+65,M,TA,140,252,0,Normal,135,N,0.3,Up,0
+54,M,ASY,136,220,0,Normal,140,Y,3,Flat,1
+72,M,NAP,120,214,0,Normal,102,Y,1,Flat,1
+75,M,ASY,170,203,1,ST,108,N,0,Flat,1
+49,M,TA,130,0,0,ST,145,N,3,Flat,1
+51,M,NAP,137,339,0,Normal,127,Y,1.7,Flat,1
+60,M,ASY,142,216,0,Normal,110,Y,2.5,Flat,1
+64,F,ASY,142,276,0,Normal,140,Y,1,Flat,1
+58,M,ASY,132,458,1,Normal,69,N,1,Down,0
+61,M,ASY,146,241,0,Normal,148,Y,3,Down,1
+67,M,ASY,160,384,1,ST,130,Y,0,Flat,1
+62,M,ASY,135,297,0,Normal,130,Y,1,Flat,1
+65,M,ASY,136,248,0,Normal,140,Y,4,Down,1
+63,M,ASY,130,308,0,Normal,138,Y,2,Flat,1
+69,M,ASY,140,208,0,ST,140,Y,2,Flat,1
+51,M,ASY,132,227,1,ST,138,N,0.2,Up,0
+62,M,ASY,158,210,1,Normal,112,Y,3,Down,1
+55,M,NAP,136,245,1,ST,131,Y,1.2,Flat,1
+75,M,ASY,136,225,0,Normal,112,Y,3,Flat,1
+40,M,NAP,106,240,0,Normal,80,Y,0,Up,0
+67,M,ASY,120,0,1,Normal,150,N,1.5,Down,1
+58,M,ASY,110,198,0,Normal,110,N,0,Flat,1
+60,M,ASY,136,195,0,Normal,126,N,0.3,Up,0
+63,M,ASY,160,267,1,ST,88,Y,2,Flat,1
+35,M,NAP,123,161,0,ST,153,N,-0.1,Up,0
+62,M,TA,112,258,0,ST,150,Y,1.3,Flat,1
+43,M,ASY,122,0,0,Normal,120,N,0.5,Up,1
+63,M,NAP,130,0,1,ST,160,N,3,Flat,0
+68,M,NAP,150,195,1,Normal,132,N,0,Flat,1
+65,M,ASY,150,235,0,Normal,120,Y,1.5,Flat,1
+48,M,NAP,102,0,1,ST,110,Y,1,Down,1
+63,M,ASY,96,305,0,ST,121,Y,1,Up,1
+64,M,ASY,130,223,0,ST,128,N,0.5,Flat,0
+61,M,ASY,120,282,0,ST,135,Y,4,Down,1
+50,M,ASY,144,349,0,LVH,120,Y,1,Up,1
+59,M,ASY,124,160,0,Normal,117,Y,1,Flat,1
+55,M,ASY,150,160,0,ST,150,N,0,Up,0
+45,M,NAP,130,236,0,Normal,144,N,0.1,Up,0
+65,M,ASY,144,312,0,LVH,113,Y,1.7,Flat,1
+61,M,ATA,139,283,0,Normal,135,N,0.3,Up,0
+49,M,NAP,131,142,0,Normal,127,Y,1.5,Flat,1
+72,M,ASY,143,211,0,Normal,109,Y,1.4,Flat,1
+50,M,ASY,133,218,0,Normal,128,Y,1.1,Flat,1
+64,M,ASY,143,306,1,ST,115,Y,1.8,Flat,1
+55,M,ASY,116,186,1,ST,102,N,0,Flat,1
+63,M,ASY,110,252,0,ST,140,Y,2,Flat,1
+59,M,ASY,125,222,0,Normal,135,Y,2.5,Down,1
+56,M,ASY,130,0,0,LVH,122,Y,1,Flat,1
+62,M,NAP,133,0,1,ST,119,Y,1.2,Flat,1
+74,M,ASY,150,258,1,ST,130,Y,4,Down,1
+54,M,ASY,130,202,1,Normal,112,Y,2,Flat,1
+57,M,ASY,110,197,0,LVH,100,N,0,Up,0
+62,M,NAP,138,204,0,ST,122,Y,1.2,Flat,1
+76,M,NAP,104,113,0,LVH,120,N,3.5,Down,1
+54,F,ASY,138,274,0,Normal,105,Y,1.5,Flat,1
+70,M,ASY,170,192,0,ST,129,Y,3,Down,1
+61,F,ATA,140,298,1,Normal,120,Y,0,Up,0
+48,M,ASY,132,272,0,ST,139,N,0.2,Up,0
+48,M,NAP,132,220,1,ST,162,N,0,Flat,1
+61,M,TA,142,200,1,ST,100,N,1.5,Down,1
+66,M,ASY,112,261,0,Normal,140,N,1.5,Up,1
+68,M,TA,139,181,1,ST,135,N,0.2,Up,0
+55,M,ASY,172,260,0,Normal,73,N,2,Flat,1
+62,M,NAP,120,220,0,LVH,86,N,0,Up,0
+71,M,NAP,144,221,0,Normal,108,Y,1.8,Flat,1
+74,M,TA,145,216,1,Normal,116,Y,1.8,Flat,1
+53,M,NAP,155,175,1,ST,160,N,0.3,Up,0
+58,M,NAP,150,219,0,ST,118,Y,0,Flat,1
+75,M,ASY,160,310,1,Normal,112,Y,2,Down,0
+56,M,NAP,137,208,1,ST,122,Y,1.8,Flat,1
+58,M,NAP,137,232,0,ST,124,Y,1.4,Flat,1
+64,M,ASY,134,273,0,Normal,102,Y,4,Down,1
+54,M,NAP,133,203,0,ST,137,N,0.2,Up,0
+54,M,ATA,132,182,0,ST,141,N,0.1,Up,0
+59,M,ASY,140,274,0,Normal,154,Y,2,Flat,0
+55,M,ASY,135,204,1,ST,126,Y,1.1,Flat,1
+57,M,ASY,144,270,1,ST,160,Y,2,Flat,1
+61,M,ASY,141,292,0,ST,115,Y,1.7,Flat,1
+41,M,ASY,150,171,0,Normal,128,Y,1.5,Flat,0
+71,M,ASY,130,221,0,ST,115,Y,0,Flat,1
+38,M,ASY,110,289,0,Normal,105,Y,1.5,Down,1
+55,M,ASY,158,217,0,Normal,110,Y,2.5,Flat,1
+56,M,ASY,128,223,0,ST,119,Y,2,Down,1
+69,M,ASY,140,110,1,Normal,109,Y,1.5,Flat,1
+64,M,ASY,150,193,0,ST,135,Y,0.5,Flat,1
+72,M,ASY,160,123,1,LVH,130,N,1.5,Flat,1
+69,M,ASY,142,210,1,ST,112,Y,1.5,Flat,1
+56,M,ASY,137,282,1,Normal,126,Y,1.2,Flat,1
+62,M,ASY,139,170,0,ST,120,Y,3,Flat,1
+67,M,ASY,146,369,0,Normal,110,Y,1.9,Flat,1
+57,M,ASY,156,173,0,LVH,119,Y,3,Down,1
+69,M,ASY,145,289,1,ST,110,Y,1.8,Flat,1
+51,M,ASY,131,152,1,LVH,130,Y,1,Flat,1
+48,M,ASY,140,208,0,Normal,159,Y,1.5,Up,1
+69,M,ASY,122,216,1,LVH,84,Y,0,Flat,1
+69,M,NAP,142,271,0,LVH,126,N,0.3,Up,0
+64,M,ASY,141,244,1,ST,116,Y,1.5,Flat,1
+57,M,ATA,180,285,1,ST,120,N,0.8,Flat,1
+53,M,ASY,124,243,0,Normal,122,Y,2,Flat,1
+37,M,NAP,118,240,0,LVH,165,N,1,Flat,0
+67,M,ASY,140,219,0,ST,122,Y,2,Flat,1
+74,M,NAP,140,237,1,Normal,94,N,0,Flat,1
+63,M,ATA,136,165,0,ST,133,N,0.2,Up,0
+58,M,ASY,100,213,0,ST,110,N,0,Up,0
+61,M,ASY,190,287,1,LVH,150,Y,2,Down,1
+64,M,ASY,130,258,1,LVH,130,N,0,Flat,1
+58,M,ASY,160,256,1,LVH,113,Y,1,Up,1
+60,M,ASY,130,186,1,LVH,140,Y,0.5,Flat,1
+57,M,ASY,122,264,0,LVH,100,N,0,Flat,1
+55,M,NAP,133,185,0,ST,136,N,0.2,Up,0
+55,M,ASY,120,226,0,LVH,127,Y,1.7,Down,1
+56,M,ASY,130,203,1,Normal,98,N,1.5,Flat,1
+57,M,ASY,130,207,0,ST,96,Y,1,Flat,0
+61,M,NAP,140,284,0,Normal,123,Y,1.3,Flat,1
+61,M,NAP,120,337,0,Normal,98,Y,0,Flat,1
+74,M,ASY,155,310,0,Normal,112,Y,1.5,Down,1
+68,M,NAP,134,254,1,Normal,151,Y,0,Up,0
+51,F,ASY,114,258,1,LVH,96,N,1,Up,0
+62,M,ASY,160,254,1,ST,108,Y,3,Flat,1
+53,M,ASY,144,300,1,ST,128,Y,1.5,Flat,1
+62,M,ASY,158,170,0,ST,138,Y,0,Flat,1
+46,M,ASY,134,310,0,Normal,126,N,0,Flat,1
+54,F,ASY,127,333,1,ST,154,N,0,Flat,1
+62,M,TA,135,139,0,ST,137,N,0.2,Up,0
+55,M,ASY,122,223,1,ST,100,N,0,Flat,1
+58,M,ASY,140,385,1,LVH,135,N,0.3,Up,0
+62,M,ATA,120,254,0,LVH,93,Y,0,Flat,1
+70,M,ASY,130,322,0,LVH,109,N,2.4,Flat,1
+67,F,NAP,115,564,0,LVH,160,N,1.6,Flat,0
+57,M,ATA,124,261,0,Normal,141,N,0.3,Up,1
+64,M,ASY,128,263,0,Normal,105,Y,0.2,Flat,0
+74,F,ATA,120,269,0,LVH,121,Y,0.2,Up,0
+65,M,ASY,120,177,0,Normal,140,N,0.4,Up,0
+56,M,NAP,130,256,1,LVH,142,Y,0.6,Flat,1
+59,M,ASY,110,239,0,LVH,142,Y,1.2,Flat,1
+60,M,ASY,140,293,0,LVH,170,N,1.2,Flat,1
+63,F,ASY,150,407,0,LVH,154,N,4,Flat,1
+59,M,ASY,135,234,0,Normal,161,N,0.5,Flat,0
+53,M,ASY,142,226,0,LVH,111,Y,0,Up,0
+44,M,NAP,140,235,0,LVH,180,N,0,Up,0
+61,M,TA,134,234,0,Normal,145,N,2.6,Flat,1
+57,F,ASY,128,303,0,LVH,159,N,0,Up,0
+71,F,ASY,112,149,0,Normal,125,N,1.6,Flat,0
+46,M,ASY,140,311,0,Normal,120,Y,1.8,Flat,1
+53,M,ASY,140,203,1,LVH,155,Y,3.1,Down,1
+64,M,TA,110,211,0,LVH,144,Y,1.8,Flat,0
+40,M,TA,140,199,0,Normal,178,Y,1.4,Up,0
+67,M,ASY,120,229,0,LVH,129,Y,2.6,Flat,1
+48,M,ATA,130,245,0,LVH,180,N,0.2,Flat,0
+43,M,ASY,115,303,0,Normal,181,N,1.2,Flat,0
+47,M,ASY,112,204,0,Normal,143,N,0.1,Up,0
+54,F,ATA,132,288,1,LVH,159,Y,0,Up,0
+48,F,NAP,130,275,0,Normal,139,N,0.2,Up,0
+46,F,ASY,138,243,0,LVH,152,Y,0,Flat,0
+51,F,NAP,120,295,0,LVH,157,N,0.6,Up,0
+58,M,NAP,112,230,0,LVH,165,N,2.5,Flat,1
+71,F,NAP,110,265,1,LVH,130,N,0,Up,0
+57,M,NAP,128,229,0,LVH,150,N,0.4,Flat,1
+66,M,ASY,160,228,0,LVH,138,N,2.3,Up,0
+37,F,NAP,120,215,0,Normal,170,N,0,Up,0
+59,M,ASY,170,326,0,LVH,140,Y,3.4,Down,1
+50,M,ASY,144,200,0,LVH,126,Y,0.9,Flat,1
+48,M,ASY,130,256,1,LVH,150,Y,0,Up,1
+61,M,ASY,140,207,0,LVH,138,Y,1.9,Up,1
+59,M,TA,160,273,0,LVH,125,N,0,Up,1
+42,M,NAP,130,180,0,Normal,150,N,0,Up,0
+48,M,ASY,122,222,0,LVH,186,N,0,Up,0
+40,M,ASY,152,223,0,Normal,181,N,0,Up,1
+62,F,ASY,124,209,0,Normal,163,N,0,Up,0
+44,M,NAP,130,233,0,Normal,179,Y,0.4,Up,0
+46,M,ATA,101,197,1,Normal,156,N,0,Up,0
+59,M,NAP,126,218,1,Normal,134,N,2.2,Flat,1
+58,M,NAP,140,211,1,LVH,165,N,0,Up,0
+49,M,NAP,118,149,0,LVH,126,N,0.8,Up,1
+44,M,ASY,110,197,0,LVH,177,N,0,Up,1
+66,M,ATA,160,246,0,Normal,120,Y,0,Flat,1
+65,F,ASY,150,225,0,LVH,114,N,1,Flat,1
+42,M,ASY,136,315,0,Normal,125,Y,1.8,Flat,1
+52,M,ATA,128,205,1,Normal,184,N,0,Up,0
+65,F,NAP,140,417,1,LVH,157,N,0.8,Up,0
+63,F,ATA,140,195,0,Normal,179,N,0,Up,0
+45,F,ATA,130,234,0,LVH,175,N,0.6,Flat,0
+41,F,ATA,105,198,0,Normal,168,N,0,Up,0
+61,M,ASY,138,166,0,LVH,125,Y,3.6,Flat,1
+60,F,NAP,120,178,1,Normal,96,N,0,Up,0
+59,F,ASY,174,249,0,Normal,143,Y,0,Flat,1
+62,M,ATA,120,281,0,LVH,103,N,1.4,Flat,1
+57,M,NAP,150,126,1,Normal,173,N,0.2,Up,0
+51,F,ASY,130,305,0,Normal,142,Y,1.2,Flat,1
+44,M,NAP,120,226,0,Normal,169,N,0,Up,0
+60,F,TA,150,240,0,Normal,171,N,0.9,Up,0
+63,M,TA,145,233,1,LVH,150,N,2.3,Down,0
+57,M,ASY,150,276,0,LVH,112,Y,0.6,Flat,1
+51,M,ASY,140,261,0,LVH,186,Y,0,Up,0
+58,F,ATA,136,319,1,LVH,152,N,0,Up,1
+44,F,NAP,118,242,0,Normal,149,N,0.3,Flat,0
+47,M,NAP,108,243,0,Normal,152,N,0,Up,1
+61,M,ASY,120,260,0,Normal,140,Y,3.6,Flat,1
+57,F,ASY,120,354,0,Normal,163,Y,0.6,Up,0
+70,M,ATA,156,245,0,LVH,143,N,0,Up,0
+76,F,NAP,140,197,0,ST,116,N,1.1,Flat,0
+67,F,ASY,106,223,0,Normal,142,N,0.3,Up,0
+45,M,ASY,142,309,0,LVH,147,Y,0,Flat,1
+45,M,ASY,104,208,0,LVH,148,Y,3,Flat,0
+39,F,NAP,94,199,0,Normal,179,N,0,Up,0
+42,F,NAP,120,209,0,Normal,173,N,0,Flat,0
+56,M,ATA,120,236,0,Normal,178,N,0.8,Up,0
+58,M,ASY,146,218,0,Normal,105,N,2,Flat,1
+35,M,ASY,120,198,0,Normal,130,Y,1.6,Flat,1
+58,M,ASY,150,270,0,LVH,111,Y,0.8,Up,1
+41,M,NAP,130,214,0,LVH,168,N,2,Flat,0
+57,M,ASY,110,201,0,Normal,126,Y,1.5,Flat,0
+42,M,TA,148,244,0,LVH,178,N,0.8,Up,0
+62,M,ATA,128,208,1,LVH,140,N,0,Up,0
+59,M,TA,178,270,0,LVH,145,N,4.2,Down,0
+41,F,ATA,126,306,0,Normal,163,N,0,Up,0
+50,M,ASY,150,243,0,LVH,128,N,2.6,Flat,1
+59,M,ATA,140,221,0,Normal,164,Y,0,Up,0
+61,F,ASY,130,330,0,LVH,169,N,0,Up,1
+54,M,ASY,124,266,0,LVH,109,Y,2.2,Flat,1
+54,M,ASY,110,206,0,LVH,108,Y,0,Flat,1
+52,M,ASY,125,212,0,Normal,168,N,1,Up,1
+47,M,ASY,110,275,0,LVH,118,Y,1,Flat,1
+66,M,ASY,120,302,0,LVH,151,N,0.4,Flat,0
+58,M,ASY,100,234,0,Normal,156,N,0.1,Up,1
+64,F,NAP,140,313,0,Normal,133,N,0.2,Up,0
+50,F,ATA,120,244,0,Normal,162,N,1.1,Up,0
+44,F,NAP,108,141,0,Normal,175,N,0.6,Flat,0
+67,M,ASY,120,237,0,Normal,71,N,1,Flat,1
+49,F,ASY,130,269,0,Normal,163,N,0,Up,0
+57,M,ASY,165,289,1,LVH,124,N,1,Flat,1
+63,M,ASY,130,254,0,LVH,147,N,1.4,Flat,1
+48,M,ASY,124,274,0,LVH,166,N,0.5,Flat,1
+51,M,NAP,100,222,0,Normal,143,Y,1.2,Flat,0
+60,F,ASY,150,258,0,LVH,157,N,2.6,Flat,1
+59,M,ASY,140,177,0,Normal,162,Y,0,Up,1
+45,F,ATA,112,160,0,Normal,138,N,0,Flat,0
+55,F,ASY,180,327,0,ST,117,Y,3.4,Flat,1
+41,M,ATA,110,235,0,Normal,153,N,0,Up,0
+60,F,ASY,158,305,0,LVH,161,N,0,Up,1
+54,F,NAP,135,304,1,Normal,170,N,0,Up,0
+42,M,ATA,120,295,0,Normal,162,N,0,Up,0
+49,F,ATA,134,271,0,Normal,162,N,0,Flat,0
+46,M,ASY,120,249,0,LVH,144,N,0.8,Up,1
+56,F,ASY,200,288,1,LVH,133,Y,4,Down,1
+66,F,TA,150,226,0,Normal,114,N,2.6,Down,0
+56,M,ASY,130,283,1,LVH,103,Y,1.6,Down,1
+49,M,NAP,120,188,0,Normal,139,N,2,Flat,1
+54,M,ASY,122,286,0,LVH,116,Y,3.2,Flat,1
+57,M,ASY,152,274,0,Normal,88,Y,1.2,Flat,1
+65,F,NAP,160,360,0,LVH,151,N,0.8,Up,0
+54,M,NAP,125,273,0,LVH,152,N,0.5,Down,0
+54,F,NAP,160,201,0,Normal,163,N,0,Up,0
+62,M,ASY,120,267,0,Normal,99,Y,1.8,Flat,1
+52,F,NAP,136,196,0,LVH,169,N,0.1,Flat,0
+52,M,ATA,134,201,0,Normal,158,N,0.8,Up,0
+60,M,ASY,117,230,1,Normal,160,Y,1.4,Up,1
+63,F,ASY,108,269,0,Normal,169,Y,1.8,Flat,1
+66,M,ASY,112,212,0,LVH,132,Y,0.1,Up,1
+42,M,ASY,140,226,0,Normal,178,N,0,Up,0
+64,M,ASY,120,246,0,LVH,96,Y,2.2,Down,1
+54,M,NAP,150,232,0,LVH,165,N,1.6,Up,0
+46,F,NAP,142,177,0,LVH,160,Y,1.4,Down,0
+67,F,NAP,152,277,0,Normal,172,N,0,Up,0
+56,M,ASY,125,249,1,LVH,144,Y,1.2,Flat,1
+34,F,ATA,118,210,0,Normal,192,N,0.7,Up,0
+57,M,ASY,132,207,0,Normal,168,Y,0,Up,0
+64,M,ASY,145,212,0,LVH,132,N,2,Flat,1
+59,M,ASY,138,271,0,LVH,182,N,0,Up,0
+50,M,NAP,140,233,0,Normal,163,N,0.6,Flat,1
+51,M,TA,125,213,0,LVH,125,Y,1.4,Up,0
+54,M,ATA,192,283,0,LVH,195,N,0,Up,1
+53,M,ASY,123,282,0,Normal,95,Y,2,Flat,1
+52,M,ASY,112,230,0,Normal,160,N,0,Up,1
+40,M,ASY,110,167,0,LVH,114,Y,2,Flat,1
+58,M,NAP,132,224,0,LVH,173,N,3.2,Up,1
+41,F,NAP,112,268,0,LVH,172,Y,0,Up,0
+41,M,NAP,112,250,0,Normal,179,N,0,Up,0
+50,F,NAP,120,219,0,Normal,158,N,1.6,Flat,0
+54,F,NAP,108,267,0,LVH,167,N,0,Up,0
+64,F,ASY,130,303,0,Normal,122,N,2,Flat,0
+51,F,NAP,130,256,0,LVH,149,N,0.5,Up,0
+46,F,ATA,105,204,0,Normal,172,N,0,Up,0
+55,M,ASY,140,217,0,Normal,111,Y,5.6,Down,1
+45,M,ATA,128,308,0,LVH,170,N,0,Up,0
+56,M,TA,120,193,0,LVH,162,N,1.9,Flat,0
+66,F,ASY,178,228,1,Normal,165,Y,1,Flat,1
+38,M,TA,120,231,0,Normal,182,Y,3.8,Flat,1
+62,F,ASY,150,244,0,Normal,154,Y,1.4,Flat,1
+55,M,ATA,130,262,0,Normal,155,N,0,Up,0
+58,M,ASY,128,259,0,LVH,130,Y,3,Flat,1
+43,M,ASY,110,211,0,Normal,161,N,0,Up,0
+64,F,ASY,180,325,0,Normal,154,Y,0,Up,0
+50,F,ASY,110,254,0,LVH,159,N,0,Up,0
+53,M,NAP,130,197,1,LVH,152,N,1.2,Down,0
+45,F,ASY,138,236,0,LVH,152,Y,0.2,Flat,0
+65,M,TA,138,282,1,LVH,174,N,1.4,Flat,1
+69,M,TA,160,234,1,LVH,131,N,0.1,Flat,0
+69,M,NAP,140,254,0,LVH,146,N,2,Flat,1
+67,M,ASY,100,299,0,LVH,125,Y,0.9,Flat,1
+68,F,NAP,120,211,0,LVH,115,N,1.5,Flat,0
+34,M,TA,118,182,0,LVH,174,N,0,Up,0
+62,F,ASY,138,294,1,Normal,106,N,1.9,Flat,1
+51,M,ASY,140,298,0,Normal,122,Y,4.2,Flat,1
+46,M,NAP,150,231,0,Normal,147,N,3.6,Flat,1
+67,M,ASY,125,254,1,Normal,163,N,0.2,Flat,1
+50,M,NAP,129,196,0,Normal,163,N,0,Up,0
+42,M,NAP,120,240,1,Normal,194,N,0.8,Down,0
+56,F,ASY,134,409,0,LVH,150,Y,1.9,Flat,1
+41,M,ASY,110,172,0,LVH,158,N,0,Up,1
+42,F,ASY,102,265,0,LVH,122,N,0.6,Flat,0
+53,M,NAP,130,246,1,LVH,173,N,0,Up,0
+43,M,NAP,130,315,0,Normal,162,N,1.9,Up,0
+56,M,ASY,132,184,0,LVH,105,Y,2.1,Flat,1
+52,M,ASY,108,233,1,Normal,147,N,0.1,Up,0
+62,F,ASY,140,394,0,LVH,157,N,1.2,Flat,0
+70,M,NAP,160,269,0,Normal,112,Y,2.9,Flat,1
+54,M,ASY,140,239,0,Normal,160,N,1.2,Up,0
+70,M,ASY,145,174,0,Normal,125,Y,2.6,Down,1
+54,M,ATA,108,309,0,Normal,156,N,0,Up,0
+35,M,ASY,126,282,0,LVH,156,Y,0,Up,1
+48,M,NAP,124,255,1,Normal,175,N,0,Up,0
+55,F,ATA,135,250,0,LVH,161,N,1.4,Flat,0
+58,F,ASY,100,248,0,LVH,122,N,1,Flat,0
+54,F,NAP,110,214,0,Normal,158,N,1.6,Flat,0
+69,F,TA,140,239,0,Normal,151,N,1.8,Up,0
+77,M,ASY,125,304,0,LVH,162,Y,0,Up,1
+68,M,NAP,118,277,0,Normal,151,N,1,Up,0
+58,M,ASY,125,300,0,LVH,171,N,0,Up,1
+60,M,ASY,125,258,0,LVH,141,Y,2.8,Flat,1
+51,M,ASY,140,299,0,Normal,173,Y,1.6,Up,1
+55,M,ASY,160,289,0,LVH,145,Y,0.8,Flat,1
+52,M,TA,152,298,1,Normal,178,N,1.2,Flat,0
+60,F,NAP,102,318,0,Normal,160,N,0,Up,0
+58,M,NAP,105,240,0,LVH,154,Y,0.6,Flat,0
+64,M,NAP,125,309,0,Normal,131,Y,1.8,Flat,1
+37,M,NAP,130,250,0,Normal,187,N,3.5,Down,0
+59,M,TA,170,288,0,LVH,159,N,0.2,Flat,1
+51,M,NAP,125,245,1,LVH,166,N,2.4,Flat,0
+43,F,NAP,122,213,0,Normal,165,N,0.2,Flat,0
+58,M,ASY,128,216,0,LVH,131,Y,2.2,Flat,1
+29,M,ATA,130,204,0,LVH,202,N,0,Up,0
+41,F,ATA,130,204,0,LVH,172,N,1.4,Up,0
+63,F,NAP,135,252,0,LVH,172,N,0,Up,0
+51,M,NAP,94,227,0,Normal,154,Y,0,Up,0
+54,M,NAP,120,258,0,LVH,147,N,0.4,Flat,0
+44,M,ATA,120,220,0,Normal,170,N,0,Up,0
+54,M,ASY,110,239,0,Normal,126,Y,2.8,Flat,1
+65,M,ASY,135,254,0,LVH,127,N,2.8,Flat,1
+57,M,NAP,150,168,0,Normal,174,N,1.6,Up,0
+63,M,ASY,130,330,1,LVH,132,Y,1.8,Up,1
+35,F,ASY,138,183,0,Normal,182,N,1.4,Up,0
+41,M,ATA,135,203,0,Normal,132,N,0,Flat,0
+62,F,NAP,130,263,0,Normal,97,N,1.2,Flat,1
+43,F,ASY,132,341,1,LVH,136,Y,3,Flat,1
+58,F,TA,150,283,1,LVH,162,N,1,Up,0
+52,M,TA,118,186,0,LVH,190,N,0,Flat,0
+61,F,ASY,145,307,0,LVH,146,Y,1,Flat,1
+39,M,ASY,118,219,0,Normal,140,N,1.2,Flat,1
+45,M,ASY,115,260,0,LVH,185,N,0,Up,0
+52,M,ASY,128,255,0,Normal,161,Y,0,Up,1
+62,M,NAP,130,231,0,Normal,146,N,1.8,Flat,0
+62,F,ASY,160,164,0,LVH,145,N,6.2,Down,1
+53,F,ASY,138,234,0,LVH,160,N,0,Up,0
+43,M,ASY,120,177,0,LVH,120,Y,2.5,Flat,1
+47,M,NAP,138,257,0,LVH,156,N,0,Up,0
+52,M,ATA,120,325,0,Normal,172,N,0.2,Up,0
+68,M,NAP,180,274,1,LVH,150,Y,1.6,Flat,1
+39,M,NAP,140,321,0,LVH,182,N,0,Up,0
+53,F,ASY,130,264,0,LVH,143,N,0.4,Flat,0
+62,F,ASY,140,268,0,LVH,160,N,3.6,Down,1
+51,F,NAP,140,308,0,LVH,142,N,1.5,Up,0
+60,M,ASY,130,253,0,Normal,144,Y,1.4,Up,1
+65,M,ASY,110,248,0,LVH,158,N,0.6,Up,1
+65,F,NAP,155,269,0,Normal,148,N,0.8,Up,0
+60,M,NAP,140,185,0,LVH,155,N,3,Flat,1
+60,M,ASY,145,282,0,LVH,142,Y,2.8,Flat,1
+54,M,ASY,120,188,0,Normal,113,N,1.4,Flat,1
+44,M,ATA,130,219,0,LVH,188,N,0,Up,0
+44,M,ASY,112,290,0,LVH,153,N,0,Up,1
+51,M,NAP,110,175,0,Normal,123,N,0.6,Up,0
+59,M,NAP,150,212,1,Normal,157,N,1.6,Up,0
+71,F,ATA,160,302,0,Normal,162,N,0.4,Up,0
+61,M,NAP,150,243,1,Normal,137,Y,1,Flat,0
+55,M,ASY,132,353,0,Normal,132,Y,1.2,Flat,1
+64,M,NAP,140,335,0,Normal,158,N,0,Up,1
+43,M,ASY,150,247,0,Normal,171,N,1.5,Up,0
+58,F,NAP,120,340,0,Normal,172,N,0,Up,0
+60,M,ASY,130,206,0,LVH,132,Y,2.4,Flat,1
+58,M,ATA,120,284,0,LVH,160,N,1.8,Flat,1
+49,M,ATA,130,266,0,Normal,171,N,0.6,Up,0
+48,M,ATA,110,229,0,Normal,168,N,1,Down,1
+52,M,NAP,172,199,1,Normal,162,N,0.5,Up,0
+44,M,ATA,120,263,0,Normal,173,N,0,Up,0
+56,F,ATA,140,294,0,LVH,153,N,1.3,Flat,0
+57,M,ASY,140,192,0,Normal,148,N,0.4,Flat,0
+67,M,ASY,160,286,0,LVH,108,Y,1.5,Flat,1
+53,F,NAP,128,216,0,LVH,115,N,0,Up,0
+52,M,NAP,138,223,0,Normal,169,N,0,Up,0
+43,M,ASY,132,247,1,LVH,143,Y,0.1,Flat,1
+52,M,ASY,128,204,1,Normal,156,Y,1,Flat,1
+59,M,TA,134,204,0,Normal,162,N,0.8,Up,1
+64,M,TA,170,227,0,LVH,155,N,0.6,Flat,0
+66,F,NAP,146,278,0,LVH,152,N,0,Flat,0
+39,F,NAP,138,220,0,Normal,152,N,0,Flat,0
+57,M,ATA,154,232,0,LVH,164,N,0,Up,1
+58,F,ASY,130,197,0,Normal,131,N,0.6,Flat,0
+57,M,ASY,110,335,0,Normal,143,Y,3,Flat,1
+47,M,NAP,130,253,0,Normal,179,N,0,Up,0
+55,F,ASY,128,205,0,ST,130,Y,2,Flat,1
+35,M,ATA,122,192,0,Normal,174,N,0,Up,0
+61,M,ASY,148,203,0,Normal,161,N,0,Up,1
+58,M,ASY,114,318,0,ST,140,N,4.4,Down,1
+58,F,ASY,170,225,1,LVH,146,Y,2.8,Flat,1
+58,M,ATA,125,220,0,Normal,144,N,0.4,Flat,0
+56,M,ATA,130,221,0,LVH,163,N,0,Up,0
+56,M,ATA,120,240,0,Normal,169,N,0,Down,0
+67,M,NAP,152,212,0,LVH,150,N,0.8,Flat,1
+55,F,ATA,132,342,0,Normal,166,N,1.2,Up,0
+44,M,ASY,120,169,0,Normal,144,Y,2.8,Down,1
+63,M,ASY,140,187,0,LVH,144,Y,4,Up,1
+63,F,ASY,124,197,0,Normal,136,Y,0,Flat,1
+41,M,ATA,120,157,0,Normal,182,N,0,Up,0
+59,M,ASY,164,176,1,LVH,90,N,1,Flat,1
+57,F,ASY,140,241,0,Normal,123,Y,0.2,Flat,1
+45,M,TA,110,264,0,Normal,132,N,1.2,Flat,1
+68,M,ASY,144,193,1,Normal,141,N,3.4,Flat,1
+57,M,ASY,130,131,0,Normal,115,Y,1.2,Flat,1
+57,F,ATA,130,236,0,LVH,174,N,0,Flat,1
+38,M,NAP,138,175,0,Normal,173,N,0,Up,0
diff --git a/ML/19_Bagging/bagging_diabetes_prediction.ipynb b/ML/19_Bagging/bagging_diabetes_prediction.ipynb
new file mode 100644
index 00000000..5312eddd
--- /dev/null
+++ b/ML/19_Bagging/bagging_diabetes_prediction.ipynb
@@ -0,0 +1,778 @@
+{
+ "cells": [
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "Ensemble Learning: Bagging Tutorial
"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "**We will use pima indian diabetes dataset to predict if a person has a diabetes or not based on certain features such as blood pressure, skin thickness, age etc. We will train a standalone model first and then use bagging ensemble technique to check how it can improve the performance of the model**\n",
+ "\n",
+ "dataset credit: https://www.kaggle.com/gargmanas/pima-indians-diabetes"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 76,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " Pregnancies | \n",
+ " Glucose | \n",
+ " BloodPressure | \n",
+ " SkinThickness | \n",
+ " Insulin | \n",
+ " BMI | \n",
+ " DiabetesPedigreeFunction | \n",
+ " Age | \n",
+ " Outcome | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " 0 | \n",
+ " 6 | \n",
+ " 148 | \n",
+ " 72 | \n",
+ " 35 | \n",
+ " 0 | \n",
+ " 33.6 | \n",
+ " 0.627 | \n",
+ " 50 | \n",
+ " 1 | \n",
+ "
\n",
+ " \n",
+ " 1 | \n",
+ " 1 | \n",
+ " 85 | \n",
+ " 66 | \n",
+ " 29 | \n",
+ " 0 | \n",
+ " 26.6 | \n",
+ " 0.351 | \n",
+ " 31 | \n",
+ " 0 | \n",
+ "
\n",
+ " \n",
+ " 2 | \n",
+ " 8 | \n",
+ " 183 | \n",
+ " 64 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 23.3 | \n",
+ " 0.672 | \n",
+ " 32 | \n",
+ " 1 | \n",
+ "
\n",
+ " \n",
+ " 3 | \n",
+ " 1 | \n",
+ " 89 | \n",
+ " 66 | \n",
+ " 23 | \n",
+ " 94 | \n",
+ " 28.1 | \n",
+ " 0.167 | \n",
+ " 21 | \n",
+ " 0 | \n",
+ "
\n",
+ " \n",
+ " 4 | \n",
+ " 0 | \n",
+ " 137 | \n",
+ " 40 | \n",
+ " 35 | \n",
+ " 168 | \n",
+ " 43.1 | \n",
+ " 2.288 | \n",
+ " 33 | \n",
+ " 1 | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " Pregnancies Glucose BloodPressure SkinThickness Insulin BMI \\\n",
+ "0 6 148 72 35 0 33.6 \n",
+ "1 1 85 66 29 0 26.6 \n",
+ "2 8 183 64 0 0 23.3 \n",
+ "3 1 89 66 23 94 28.1 \n",
+ "4 0 137 40 35 168 43.1 \n",
+ "\n",
+ " DiabetesPedigreeFunction Age Outcome \n",
+ "0 0.627 50 1 \n",
+ "1 0.351 31 0 \n",
+ "2 0.672 32 1 \n",
+ "3 0.167 21 0 \n",
+ "4 2.288 33 1 "
+ ]
+ },
+ "execution_count": 76,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "import pandas as pd\n",
+ "\n",
+ "df = pd.read_csv(\"diabetes.csv\")\n",
+ "df.head()"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 2,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "Pregnancies 0\n",
+ "Glucose 0\n",
+ "BloodPressure 0\n",
+ "SkinThickness 0\n",
+ "Insulin 0\n",
+ "BMI 0\n",
+ "DiabetesPedigreeFunction 0\n",
+ "Age 0\n",
+ "Outcome 0\n",
+ "dtype: int64"
+ ]
+ },
+ "execution_count": 2,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "df.isnull().sum()"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 3,
+ "metadata": {
+ "scrolled": true
+ },
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " Pregnancies | \n",
+ " Glucose | \n",
+ " BloodPressure | \n",
+ " SkinThickness | \n",
+ " Insulin | \n",
+ " BMI | \n",
+ " DiabetesPedigreeFunction | \n",
+ " Age | \n",
+ " Outcome | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " count | \n",
+ " 768.000000 | \n",
+ " 768.000000 | \n",
+ " 768.000000 | \n",
+ " 768.000000 | \n",
+ " 768.000000 | \n",
+ " 768.000000 | \n",
+ " 768.000000 | \n",
+ " 768.000000 | \n",
+ " 768.000000 | \n",
+ "
\n",
+ " \n",
+ " mean | \n",
+ " 3.845052 | \n",
+ " 120.894531 | \n",
+ " 69.105469 | \n",
+ " 20.536458 | \n",
+ " 79.799479 | \n",
+ " 31.992578 | \n",
+ " 0.471876 | \n",
+ " 33.240885 | \n",
+ " 0.348958 | \n",
+ "
\n",
+ " \n",
+ " std | \n",
+ " 3.369578 | \n",
+ " 31.972618 | \n",
+ " 19.355807 | \n",
+ " 15.952218 | \n",
+ " 115.244002 | \n",
+ " 7.884160 | \n",
+ " 0.331329 | \n",
+ " 11.760232 | \n",
+ " 0.476951 | \n",
+ "
\n",
+ " \n",
+ " min | \n",
+ " 0.000000 | \n",
+ " 0.000000 | \n",
+ " 0.000000 | \n",
+ " 0.000000 | \n",
+ " 0.000000 | \n",
+ " 0.000000 | \n",
+ " 0.078000 | \n",
+ " 21.000000 | \n",
+ " 0.000000 | \n",
+ "
\n",
+ " \n",
+ " 25% | \n",
+ " 1.000000 | \n",
+ " 99.000000 | \n",
+ " 62.000000 | \n",
+ " 0.000000 | \n",
+ " 0.000000 | \n",
+ " 27.300000 | \n",
+ " 0.243750 | \n",
+ " 24.000000 | \n",
+ " 0.000000 | \n",
+ "
\n",
+ " \n",
+ " 50% | \n",
+ " 3.000000 | \n",
+ " 117.000000 | \n",
+ " 72.000000 | \n",
+ " 23.000000 | \n",
+ " 30.500000 | \n",
+ " 32.000000 | \n",
+ " 0.372500 | \n",
+ " 29.000000 | \n",
+ " 0.000000 | \n",
+ "
\n",
+ " \n",
+ " 75% | \n",
+ " 6.000000 | \n",
+ " 140.250000 | \n",
+ " 80.000000 | \n",
+ " 32.000000 | \n",
+ " 127.250000 | \n",
+ " 36.600000 | \n",
+ " 0.626250 | \n",
+ " 41.000000 | \n",
+ " 1.000000 | \n",
+ "
\n",
+ " \n",
+ " max | \n",
+ " 17.000000 | \n",
+ " 199.000000 | \n",
+ " 122.000000 | \n",
+ " 99.000000 | \n",
+ " 846.000000 | \n",
+ " 67.100000 | \n",
+ " 2.420000 | \n",
+ " 81.000000 | \n",
+ " 1.000000 | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " Pregnancies Glucose BloodPressure SkinThickness Insulin \\\n",
+ "count 768.000000 768.000000 768.000000 768.000000 768.000000 \n",
+ "mean 3.845052 120.894531 69.105469 20.536458 79.799479 \n",
+ "std 3.369578 31.972618 19.355807 15.952218 115.244002 \n",
+ "min 0.000000 0.000000 0.000000 0.000000 0.000000 \n",
+ "25% 1.000000 99.000000 62.000000 0.000000 0.000000 \n",
+ "50% 3.000000 117.000000 72.000000 23.000000 30.500000 \n",
+ "75% 6.000000 140.250000 80.000000 32.000000 127.250000 \n",
+ "max 17.000000 199.000000 122.000000 99.000000 846.000000 \n",
+ "\n",
+ " BMI DiabetesPedigreeFunction Age Outcome \n",
+ "count 768.000000 768.000000 768.000000 768.000000 \n",
+ "mean 31.992578 0.471876 33.240885 0.348958 \n",
+ "std 7.884160 0.331329 11.760232 0.476951 \n",
+ "min 0.000000 0.078000 21.000000 0.000000 \n",
+ "25% 27.300000 0.243750 24.000000 0.000000 \n",
+ "50% 32.000000 0.372500 29.000000 0.000000 \n",
+ "75% 36.600000 0.626250 41.000000 1.000000 \n",
+ "max 67.100000 2.420000 81.000000 1.000000 "
+ ]
+ },
+ "execution_count": 3,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "df.describe()"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 4,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "0 500\n",
+ "1 268\n",
+ "Name: Outcome, dtype: int64"
+ ]
+ },
+ "execution_count": 4,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "df.Outcome.value_counts()"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "There is slight imbalance in our dataset but since it is not major we will not worry about it!"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "Train test split
"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 5,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "X = df.drop(\"Outcome\",axis=\"columns\")\n",
+ "y = df.Outcome"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 88,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "array([[ 0.63994726, 0.84832379, 0.14964075, 0.90726993, -0.69289057,\n",
+ " 0.20401277, 0.46849198, 1.4259954 ],\n",
+ " [-0.84488505, -1.12339636, -0.16054575, 0.53090156, -0.69289057,\n",
+ " -0.68442195, -0.36506078, -0.19067191],\n",
+ " [ 1.23388019, 1.94372388, -0.26394125, -1.28821221, -0.69289057,\n",
+ " -1.10325546, 0.60439732, -0.10558415]])"
+ ]
+ },
+ "execution_count": 88,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "from sklearn.preprocessing import StandardScaler\n",
+ "\n",
+ "scaler = StandardScaler()\n",
+ "X_scaled = scaler.fit_transform(X)\n",
+ "X_scaled[:3]"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 89,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "from sklearn.model_selection import train_test_split\n",
+ "\n",
+ "X_train, X_test, y_train, y_test = train_test_split(X_scaled, y, stratify=y, random_state=10)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 90,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "(576, 8)"
+ ]
+ },
+ "execution_count": 90,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "X_train.shape"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 91,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "(192, 8)"
+ ]
+ },
+ "execution_count": 91,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "X_test.shape"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 92,
+ "metadata": {
+ "scrolled": true
+ },
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "0 375\n",
+ "1 201\n",
+ "Name: Outcome, dtype: int64"
+ ]
+ },
+ "execution_count": 92,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "y_train.value_counts()"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 93,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "0.536"
+ ]
+ },
+ "execution_count": 93,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "201/375"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 94,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "0 125\n",
+ "1 67\n",
+ "Name: Outcome, dtype: int64"
+ ]
+ },
+ "execution_count": 94,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "y_test.value_counts()"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 95,
+ "metadata": {
+ "scrolled": true
+ },
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "0.536"
+ ]
+ },
+ "execution_count": 95,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "67/125"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "Train using stand alone model
"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 96,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "array([0.68831169, 0.68181818, 0.69480519, 0.77777778, 0.71895425])"
+ ]
+ },
+ "execution_count": 96,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "from sklearn.model_selection import cross_val_score\n",
+ "from sklearn.tree import DecisionTreeClassifier\n",
+ "\n",
+ "scores = cross_val_score(DecisionTreeClassifier(), X, y, cv=5)\n",
+ "scores"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 97,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "0.7123334182157711"
+ ]
+ },
+ "execution_count": 97,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "scores.mean()"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "Train using Bagging
"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 98,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "0.7534722222222222"
+ ]
+ },
+ "execution_count": 98,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "from sklearn.ensemble import BaggingClassifier\n",
+ "\n",
+ "bag_model = BaggingClassifier(\n",
+ " base_estimator=DecisionTreeClassifier(), \n",
+ " n_estimators=100, \n",
+ " max_samples=0.8, \n",
+ " oob_score=True,\n",
+ " random_state=0\n",
+ ")\n",
+ "bag_model.fit(X_train, y_train)\n",
+ "bag_model.oob_score_"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 99,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "0.7760416666666666"
+ ]
+ },
+ "execution_count": 99,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "bag_model.score(X_test, y_test)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 100,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "array([0.75324675, 0.72727273, 0.74675325, 0.82352941, 0.73856209])"
+ ]
+ },
+ "execution_count": 100,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "bag_model = BaggingClassifier(\n",
+ " base_estimator=DecisionTreeClassifier(), \n",
+ " n_estimators=100, \n",
+ " max_samples=0.8, \n",
+ " oob_score=True,\n",
+ " random_state=0\n",
+ ")\n",
+ "scores = cross_val_score(bag_model, X, y, cv=5)\n",
+ "scores"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 101,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "0.7578728461081402"
+ ]
+ },
+ "execution_count": 101,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "scores.mean()"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "We can see some improvement in test score with bagging classifier as compared to a standalone classifier"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "Train using Random Forest
"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 102,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "0.7617689500042442"
+ ]
+ },
+ "execution_count": 102,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "from sklearn.ensemble import RandomForestClassifier\n",
+ "\n",
+ "scores = cross_val_score(RandomForestClassifier(n_estimators=50), X, y, cv=5)\n",
+ "scores.mean()"
+ ]
+ }
+ ],
+ "metadata": {
+ "kernelspec": {
+ "display_name": "Python 3",
+ "language": "python",
+ "name": "python3"
+ },
+ "language_info": {
+ "codemirror_mode": {
+ "name": "ipython",
+ "version": 3
+ },
+ "file_extension": ".py",
+ "mimetype": "text/x-python",
+ "name": "python",
+ "nbconvert_exporter": "python",
+ "pygments_lexer": "ipython3",
+ "version": "3.8.5"
+ }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 4
+}
diff --git a/ML/19_Bagging/bagging_exercise.md b/ML/19_Bagging/bagging_exercise.md
new file mode 100644
index 00000000..378156fe
--- /dev/null
+++ b/ML/19_Bagging/bagging_exercise.md
@@ -0,0 +1,16 @@
+Download heart disease dataset heart.csv in [Exercise](https://github.com/codebasics/py/tree/master/ML/19_Bagging/Exercise) folder and do following, (credits of dataset: https://www.kaggle.com/fedesoriano/heart-failure-prediction)
+
+1. Load heart disease dataset in pandas dataframe
+1. Remove outliers using Z score. Usual guideline is to remove anything that has Z score > 3 formula or Z score < -3
+1. Convert text columns to numbers using label encoding and one hot encoding
+1. Apply scaling
+1. Build a classification model using support vector machine. Use standalone model as well as Bagging model and check if you see any difference in the performance.
+1. Now use decision tree classifier. Use standalone model as well as Bagging and check if you notice any difference in performance
+1. Comparing performance of svm and decision tree classifier figure out where it makes most sense to use bagging and why. Use internet to figure out in what conditions bagging works the best.
+
+
+[Solution Link](https://github.com/codebasics/py/blob/master/ML/19_Bagging/Exercise/bagging_heart_disease_prediction.ipynb)
+
+
+
+
\ No newline at end of file
diff --git a/ML/19_Bagging/diabetes.csv b/ML/19_Bagging/diabetes.csv
new file mode 100644
index 00000000..dcaf5fe8
--- /dev/null
+++ b/ML/19_Bagging/diabetes.csv
@@ -0,0 +1,769 @@
+Pregnancies,Glucose,BloodPressure,SkinThickness,Insulin,BMI,DiabetesPedigreeFunction,Age,Outcome
+6,148,72,35,0,33.6,0.627,50,1
+1,85,66,29,0,26.6,0.351,31,0
+8,183,64,0,0,23.3,0.672,32,1
+1,89,66,23,94,28.1,0.167,21,0
+0,137,40,35,168,43.1,2.288,33,1
+5,116,74,0,0,25.6,0.201,30,0
+3,78,50,32,88,31,0.248,26,1
+10,115,0,0,0,35.3,0.134,29,0
+2,197,70,45,543,30.5,0.158,53,1
+8,125,96,0,0,0,0.232,54,1
+4,110,92,0,0,37.6,0.191,30,0
+10,168,74,0,0,38,0.537,34,1
+10,139,80,0,0,27.1,1.441,57,0
+1,189,60,23,846,30.1,0.398,59,1
+5,166,72,19,175,25.8,0.587,51,1
+7,100,0,0,0,30,0.484,32,1
+0,118,84,47,230,45.8,0.551,31,1
+7,107,74,0,0,29.6,0.254,31,1
+1,103,30,38,83,43.3,0.183,33,0
+1,115,70,30,96,34.6,0.529,32,1
+3,126,88,41,235,39.3,0.704,27,0
+8,99,84,0,0,35.4,0.388,50,0
+7,196,90,0,0,39.8,0.451,41,1
+9,119,80,35,0,29,0.263,29,1
+11,143,94,33,146,36.6,0.254,51,1
+10,125,70,26,115,31.1,0.205,41,1
+7,147,76,0,0,39.4,0.257,43,1
+1,97,66,15,140,23.2,0.487,22,0
+13,145,82,19,110,22.2,0.245,57,0
+5,117,92,0,0,34.1,0.337,38,0
+5,109,75,26,0,36,0.546,60,0
+3,158,76,36,245,31.6,0.851,28,1
+3,88,58,11,54,24.8,0.267,22,0
+6,92,92,0,0,19.9,0.188,28,0
+10,122,78,31,0,27.6,0.512,45,0
+4,103,60,33,192,24,0.966,33,0
+11,138,76,0,0,33.2,0.42,35,0
+9,102,76,37,0,32.9,0.665,46,1
+2,90,68,42,0,38.2,0.503,27,1
+4,111,72,47,207,37.1,1.39,56,1
+3,180,64,25,70,34,0.271,26,0
+7,133,84,0,0,40.2,0.696,37,0
+7,106,92,18,0,22.7,0.235,48,0
+9,171,110,24,240,45.4,0.721,54,1
+7,159,64,0,0,27.4,0.294,40,0
+0,180,66,39,0,42,1.893,25,1
+1,146,56,0,0,29.7,0.564,29,0
+2,71,70,27,0,28,0.586,22,0
+7,103,66,32,0,39.1,0.344,31,1
+7,105,0,0,0,0,0.305,24,0
+1,103,80,11,82,19.4,0.491,22,0
+1,101,50,15,36,24.2,0.526,26,0
+5,88,66,21,23,24.4,0.342,30,0
+8,176,90,34,300,33.7,0.467,58,1
+7,150,66,42,342,34.7,0.718,42,0
+1,73,50,10,0,23,0.248,21,0
+7,187,68,39,304,37.7,0.254,41,1
+0,100,88,60,110,46.8,0.962,31,0
+0,146,82,0,0,40.5,1.781,44,0
+0,105,64,41,142,41.5,0.173,22,0
+2,84,0,0,0,0,0.304,21,0
+8,133,72,0,0,32.9,0.27,39,1
+5,44,62,0,0,25,0.587,36,0
+2,141,58,34,128,25.4,0.699,24,0
+7,114,66,0,0,32.8,0.258,42,1
+5,99,74,27,0,29,0.203,32,0
+0,109,88,30,0,32.5,0.855,38,1
+2,109,92,0,0,42.7,0.845,54,0
+1,95,66,13,38,19.6,0.334,25,0
+4,146,85,27,100,28.9,0.189,27,0
+2,100,66,20,90,32.9,0.867,28,1
+5,139,64,35,140,28.6,0.411,26,0
+13,126,90,0,0,43.4,0.583,42,1
+4,129,86,20,270,35.1,0.231,23,0
+1,79,75,30,0,32,0.396,22,0
+1,0,48,20,0,24.7,0.14,22,0
+7,62,78,0,0,32.6,0.391,41,0
+5,95,72,33,0,37.7,0.37,27,0
+0,131,0,0,0,43.2,0.27,26,1
+2,112,66,22,0,25,0.307,24,0
+3,113,44,13,0,22.4,0.14,22,0
+2,74,0,0,0,0,0.102,22,0
+7,83,78,26,71,29.3,0.767,36,0
+0,101,65,28,0,24.6,0.237,22,0
+5,137,108,0,0,48.8,0.227,37,1
+2,110,74,29,125,32.4,0.698,27,0
+13,106,72,54,0,36.6,0.178,45,0
+2,100,68,25,71,38.5,0.324,26,0
+15,136,70,32,110,37.1,0.153,43,1
+1,107,68,19,0,26.5,0.165,24,0
+1,80,55,0,0,19.1,0.258,21,0
+4,123,80,15,176,32,0.443,34,0
+7,81,78,40,48,46.7,0.261,42,0
+4,134,72,0,0,23.8,0.277,60,1
+2,142,82,18,64,24.7,0.761,21,0
+6,144,72,27,228,33.9,0.255,40,0
+2,92,62,28,0,31.6,0.13,24,0
+1,71,48,18,76,20.4,0.323,22,0
+6,93,50,30,64,28.7,0.356,23,0
+1,122,90,51,220,49.7,0.325,31,1
+1,163,72,0,0,39,1.222,33,1
+1,151,60,0,0,26.1,0.179,22,0
+0,125,96,0,0,22.5,0.262,21,0
+1,81,72,18,40,26.6,0.283,24,0
+2,85,65,0,0,39.6,0.93,27,0
+1,126,56,29,152,28.7,0.801,21,0
+1,96,122,0,0,22.4,0.207,27,0
+4,144,58,28,140,29.5,0.287,37,0
+3,83,58,31,18,34.3,0.336,25,0
+0,95,85,25,36,37.4,0.247,24,1
+3,171,72,33,135,33.3,0.199,24,1
+8,155,62,26,495,34,0.543,46,1
+1,89,76,34,37,31.2,0.192,23,0
+4,76,62,0,0,34,0.391,25,0
+7,160,54,32,175,30.5,0.588,39,1
+4,146,92,0,0,31.2,0.539,61,1
+5,124,74,0,0,34,0.22,38,1
+5,78,48,0,0,33.7,0.654,25,0
+4,97,60,23,0,28.2,0.443,22,0
+4,99,76,15,51,23.2,0.223,21,0
+0,162,76,56,100,53.2,0.759,25,1
+6,111,64,39,0,34.2,0.26,24,0
+2,107,74,30,100,33.6,0.404,23,0
+5,132,80,0,0,26.8,0.186,69,0
+0,113,76,0,0,33.3,0.278,23,1
+1,88,30,42,99,55,0.496,26,1
+3,120,70,30,135,42.9,0.452,30,0
+1,118,58,36,94,33.3,0.261,23,0
+1,117,88,24,145,34.5,0.403,40,1
+0,105,84,0,0,27.9,0.741,62,1
+4,173,70,14,168,29.7,0.361,33,1
+9,122,56,0,0,33.3,1.114,33,1
+3,170,64,37,225,34.5,0.356,30,1
+8,84,74,31,0,38.3,0.457,39,0
+2,96,68,13,49,21.1,0.647,26,0
+2,125,60,20,140,33.8,0.088,31,0
+0,100,70,26,50,30.8,0.597,21,0
+0,93,60,25,92,28.7,0.532,22,0
+0,129,80,0,0,31.2,0.703,29,0
+5,105,72,29,325,36.9,0.159,28,0
+3,128,78,0,0,21.1,0.268,55,0
+5,106,82,30,0,39.5,0.286,38,0
+2,108,52,26,63,32.5,0.318,22,0
+10,108,66,0,0,32.4,0.272,42,1
+4,154,62,31,284,32.8,0.237,23,0
+0,102,75,23,0,0,0.572,21,0
+9,57,80,37,0,32.8,0.096,41,0
+2,106,64,35,119,30.5,1.4,34,0
+5,147,78,0,0,33.7,0.218,65,0
+2,90,70,17,0,27.3,0.085,22,0
+1,136,74,50,204,37.4,0.399,24,0
+4,114,65,0,0,21.9,0.432,37,0
+9,156,86,28,155,34.3,1.189,42,1
+1,153,82,42,485,40.6,0.687,23,0
+8,188,78,0,0,47.9,0.137,43,1
+7,152,88,44,0,50,0.337,36,1
+2,99,52,15,94,24.6,0.637,21,0
+1,109,56,21,135,25.2,0.833,23,0
+2,88,74,19,53,29,0.229,22,0
+17,163,72,41,114,40.9,0.817,47,1
+4,151,90,38,0,29.7,0.294,36,0
+7,102,74,40,105,37.2,0.204,45,0
+0,114,80,34,285,44.2,0.167,27,0
+2,100,64,23,0,29.7,0.368,21,0
+0,131,88,0,0,31.6,0.743,32,1
+6,104,74,18,156,29.9,0.722,41,1
+3,148,66,25,0,32.5,0.256,22,0
+4,120,68,0,0,29.6,0.709,34,0
+4,110,66,0,0,31.9,0.471,29,0
+3,111,90,12,78,28.4,0.495,29,0
+6,102,82,0,0,30.8,0.18,36,1
+6,134,70,23,130,35.4,0.542,29,1
+2,87,0,23,0,28.9,0.773,25,0
+1,79,60,42,48,43.5,0.678,23,0
+2,75,64,24,55,29.7,0.37,33,0
+8,179,72,42,130,32.7,0.719,36,1
+6,85,78,0,0,31.2,0.382,42,0
+0,129,110,46,130,67.1,0.319,26,1
+5,143,78,0,0,45,0.19,47,0
+5,130,82,0,0,39.1,0.956,37,1
+6,87,80,0,0,23.2,0.084,32,0
+0,119,64,18,92,34.9,0.725,23,0
+1,0,74,20,23,27.7,0.299,21,0
+5,73,60,0,0,26.8,0.268,27,0
+4,141,74,0,0,27.6,0.244,40,0
+7,194,68,28,0,35.9,0.745,41,1
+8,181,68,36,495,30.1,0.615,60,1
+1,128,98,41,58,32,1.321,33,1
+8,109,76,39,114,27.9,0.64,31,1
+5,139,80,35,160,31.6,0.361,25,1
+3,111,62,0,0,22.6,0.142,21,0
+9,123,70,44,94,33.1,0.374,40,0
+7,159,66,0,0,30.4,0.383,36,1
+11,135,0,0,0,52.3,0.578,40,1
+8,85,55,20,0,24.4,0.136,42,0
+5,158,84,41,210,39.4,0.395,29,1
+1,105,58,0,0,24.3,0.187,21,0
+3,107,62,13,48,22.9,0.678,23,1
+4,109,64,44,99,34.8,0.905,26,1
+4,148,60,27,318,30.9,0.15,29,1
+0,113,80,16,0,31,0.874,21,0
+1,138,82,0,0,40.1,0.236,28,0
+0,108,68,20,0,27.3,0.787,32,0
+2,99,70,16,44,20.4,0.235,27,0
+6,103,72,32,190,37.7,0.324,55,0
+5,111,72,28,0,23.9,0.407,27,0
+8,196,76,29,280,37.5,0.605,57,1
+5,162,104,0,0,37.7,0.151,52,1
+1,96,64,27,87,33.2,0.289,21,0
+7,184,84,33,0,35.5,0.355,41,1
+2,81,60,22,0,27.7,0.29,25,0
+0,147,85,54,0,42.8,0.375,24,0
+7,179,95,31,0,34.2,0.164,60,0
+0,140,65,26,130,42.6,0.431,24,1
+9,112,82,32,175,34.2,0.26,36,1
+12,151,70,40,271,41.8,0.742,38,1
+5,109,62,41,129,35.8,0.514,25,1
+6,125,68,30,120,30,0.464,32,0
+5,85,74,22,0,29,1.224,32,1
+5,112,66,0,0,37.8,0.261,41,1
+0,177,60,29,478,34.6,1.072,21,1
+2,158,90,0,0,31.6,0.805,66,1
+7,119,0,0,0,25.2,0.209,37,0
+7,142,60,33,190,28.8,0.687,61,0
+1,100,66,15,56,23.6,0.666,26,0
+1,87,78,27,32,34.6,0.101,22,0
+0,101,76,0,0,35.7,0.198,26,0
+3,162,52,38,0,37.2,0.652,24,1
+4,197,70,39,744,36.7,2.329,31,0
+0,117,80,31,53,45.2,0.089,24,0
+4,142,86,0,0,44,0.645,22,1
+6,134,80,37,370,46.2,0.238,46,1
+1,79,80,25,37,25.4,0.583,22,0
+4,122,68,0,0,35,0.394,29,0
+3,74,68,28,45,29.7,0.293,23,0
+4,171,72,0,0,43.6,0.479,26,1
+7,181,84,21,192,35.9,0.586,51,1
+0,179,90,27,0,44.1,0.686,23,1
+9,164,84,21,0,30.8,0.831,32,1
+0,104,76,0,0,18.4,0.582,27,0
+1,91,64,24,0,29.2,0.192,21,0
+4,91,70,32,88,33.1,0.446,22,0
+3,139,54,0,0,25.6,0.402,22,1
+6,119,50,22,176,27.1,1.318,33,1
+2,146,76,35,194,38.2,0.329,29,0
+9,184,85,15,0,30,1.213,49,1
+10,122,68,0,0,31.2,0.258,41,0
+0,165,90,33,680,52.3,0.427,23,0
+9,124,70,33,402,35.4,0.282,34,0
+1,111,86,19,0,30.1,0.143,23,0
+9,106,52,0,0,31.2,0.38,42,0
+2,129,84,0,0,28,0.284,27,0
+2,90,80,14,55,24.4,0.249,24,0
+0,86,68,32,0,35.8,0.238,25,0
+12,92,62,7,258,27.6,0.926,44,1
+1,113,64,35,0,33.6,0.543,21,1
+3,111,56,39,0,30.1,0.557,30,0
+2,114,68,22,0,28.7,0.092,25,0
+1,193,50,16,375,25.9,0.655,24,0
+11,155,76,28,150,33.3,1.353,51,1
+3,191,68,15,130,30.9,0.299,34,0
+3,141,0,0,0,30,0.761,27,1
+4,95,70,32,0,32.1,0.612,24,0
+3,142,80,15,0,32.4,0.2,63,0
+4,123,62,0,0,32,0.226,35,1
+5,96,74,18,67,33.6,0.997,43,0
+0,138,0,0,0,36.3,0.933,25,1
+2,128,64,42,0,40,1.101,24,0
+0,102,52,0,0,25.1,0.078,21,0
+2,146,0,0,0,27.5,0.24,28,1
+10,101,86,37,0,45.6,1.136,38,1
+2,108,62,32,56,25.2,0.128,21,0
+3,122,78,0,0,23,0.254,40,0
+1,71,78,50,45,33.2,0.422,21,0
+13,106,70,0,0,34.2,0.251,52,0
+2,100,70,52,57,40.5,0.677,25,0
+7,106,60,24,0,26.5,0.296,29,1
+0,104,64,23,116,27.8,0.454,23,0
+5,114,74,0,0,24.9,0.744,57,0
+2,108,62,10,278,25.3,0.881,22,0
+0,146,70,0,0,37.9,0.334,28,1
+10,129,76,28,122,35.9,0.28,39,0
+7,133,88,15,155,32.4,0.262,37,0
+7,161,86,0,0,30.4,0.165,47,1
+2,108,80,0,0,27,0.259,52,1
+7,136,74,26,135,26,0.647,51,0
+5,155,84,44,545,38.7,0.619,34,0
+1,119,86,39,220,45.6,0.808,29,1
+4,96,56,17,49,20.8,0.34,26,0
+5,108,72,43,75,36.1,0.263,33,0
+0,78,88,29,40,36.9,0.434,21,0
+0,107,62,30,74,36.6,0.757,25,1
+2,128,78,37,182,43.3,1.224,31,1
+1,128,48,45,194,40.5,0.613,24,1
+0,161,50,0,0,21.9,0.254,65,0
+6,151,62,31,120,35.5,0.692,28,0
+2,146,70,38,360,28,0.337,29,1
+0,126,84,29,215,30.7,0.52,24,0
+14,100,78,25,184,36.6,0.412,46,1
+8,112,72,0,0,23.6,0.84,58,0
+0,167,0,0,0,32.3,0.839,30,1
+2,144,58,33,135,31.6,0.422,25,1
+5,77,82,41,42,35.8,0.156,35,0
+5,115,98,0,0,52.9,0.209,28,1
+3,150,76,0,0,21,0.207,37,0
+2,120,76,37,105,39.7,0.215,29,0
+10,161,68,23,132,25.5,0.326,47,1
+0,137,68,14,148,24.8,0.143,21,0
+0,128,68,19,180,30.5,1.391,25,1
+2,124,68,28,205,32.9,0.875,30,1
+6,80,66,30,0,26.2,0.313,41,0
+0,106,70,37,148,39.4,0.605,22,0
+2,155,74,17,96,26.6,0.433,27,1
+3,113,50,10,85,29.5,0.626,25,0
+7,109,80,31,0,35.9,1.127,43,1
+2,112,68,22,94,34.1,0.315,26,0
+3,99,80,11,64,19.3,0.284,30,0
+3,182,74,0,0,30.5,0.345,29,1
+3,115,66,39,140,38.1,0.15,28,0
+6,194,78,0,0,23.5,0.129,59,1
+4,129,60,12,231,27.5,0.527,31,0
+3,112,74,30,0,31.6,0.197,25,1
+0,124,70,20,0,27.4,0.254,36,1
+13,152,90,33,29,26.8,0.731,43,1
+2,112,75,32,0,35.7,0.148,21,0
+1,157,72,21,168,25.6,0.123,24,0
+1,122,64,32,156,35.1,0.692,30,1
+10,179,70,0,0,35.1,0.2,37,0
+2,102,86,36,120,45.5,0.127,23,1
+6,105,70,32,68,30.8,0.122,37,0
+8,118,72,19,0,23.1,1.476,46,0
+2,87,58,16,52,32.7,0.166,25,0
+1,180,0,0,0,43.3,0.282,41,1
+12,106,80,0,0,23.6,0.137,44,0
+1,95,60,18,58,23.9,0.26,22,0
+0,165,76,43,255,47.9,0.259,26,0
+0,117,0,0,0,33.8,0.932,44,0
+5,115,76,0,0,31.2,0.343,44,1
+9,152,78,34,171,34.2,0.893,33,1
+7,178,84,0,0,39.9,0.331,41,1
+1,130,70,13,105,25.9,0.472,22,0
+1,95,74,21,73,25.9,0.673,36,0
+1,0,68,35,0,32,0.389,22,0
+5,122,86,0,0,34.7,0.29,33,0
+8,95,72,0,0,36.8,0.485,57,0
+8,126,88,36,108,38.5,0.349,49,0
+1,139,46,19,83,28.7,0.654,22,0
+3,116,0,0,0,23.5,0.187,23,0
+3,99,62,19,74,21.8,0.279,26,0
+5,0,80,32,0,41,0.346,37,1
+4,92,80,0,0,42.2,0.237,29,0
+4,137,84,0,0,31.2,0.252,30,0
+3,61,82,28,0,34.4,0.243,46,0
+1,90,62,12,43,27.2,0.58,24,0
+3,90,78,0,0,42.7,0.559,21,0
+9,165,88,0,0,30.4,0.302,49,1
+1,125,50,40,167,33.3,0.962,28,1
+13,129,0,30,0,39.9,0.569,44,1
+12,88,74,40,54,35.3,0.378,48,0
+1,196,76,36,249,36.5,0.875,29,1
+5,189,64,33,325,31.2,0.583,29,1
+5,158,70,0,0,29.8,0.207,63,0
+5,103,108,37,0,39.2,0.305,65,0
+4,146,78,0,0,38.5,0.52,67,1
+4,147,74,25,293,34.9,0.385,30,0
+5,99,54,28,83,34,0.499,30,0
+6,124,72,0,0,27.6,0.368,29,1
+0,101,64,17,0,21,0.252,21,0
+3,81,86,16,66,27.5,0.306,22,0
+1,133,102,28,140,32.8,0.234,45,1
+3,173,82,48,465,38.4,2.137,25,1
+0,118,64,23,89,0,1.731,21,0
+0,84,64,22,66,35.8,0.545,21,0
+2,105,58,40,94,34.9,0.225,25,0
+2,122,52,43,158,36.2,0.816,28,0
+12,140,82,43,325,39.2,0.528,58,1
+0,98,82,15,84,25.2,0.299,22,0
+1,87,60,37,75,37.2,0.509,22,0
+4,156,75,0,0,48.3,0.238,32,1
+0,93,100,39,72,43.4,1.021,35,0
+1,107,72,30,82,30.8,0.821,24,0
+0,105,68,22,0,20,0.236,22,0
+1,109,60,8,182,25.4,0.947,21,0
+1,90,62,18,59,25.1,1.268,25,0
+1,125,70,24,110,24.3,0.221,25,0
+1,119,54,13,50,22.3,0.205,24,0
+5,116,74,29,0,32.3,0.66,35,1
+8,105,100,36,0,43.3,0.239,45,1
+5,144,82,26,285,32,0.452,58,1
+3,100,68,23,81,31.6,0.949,28,0
+1,100,66,29,196,32,0.444,42,0
+5,166,76,0,0,45.7,0.34,27,1
+1,131,64,14,415,23.7,0.389,21,0
+4,116,72,12,87,22.1,0.463,37,0
+4,158,78,0,0,32.9,0.803,31,1
+2,127,58,24,275,27.7,1.6,25,0
+3,96,56,34,115,24.7,0.944,39,0
+0,131,66,40,0,34.3,0.196,22,1
+3,82,70,0,0,21.1,0.389,25,0
+3,193,70,31,0,34.9,0.241,25,1
+4,95,64,0,0,32,0.161,31,1
+6,137,61,0,0,24.2,0.151,55,0
+5,136,84,41,88,35,0.286,35,1
+9,72,78,25,0,31.6,0.28,38,0
+5,168,64,0,0,32.9,0.135,41,1
+2,123,48,32,165,42.1,0.52,26,0
+4,115,72,0,0,28.9,0.376,46,1
+0,101,62,0,0,21.9,0.336,25,0
+8,197,74,0,0,25.9,1.191,39,1
+1,172,68,49,579,42.4,0.702,28,1
+6,102,90,39,0,35.7,0.674,28,0
+1,112,72,30,176,34.4,0.528,25,0
+1,143,84,23,310,42.4,1.076,22,0
+1,143,74,22,61,26.2,0.256,21,0
+0,138,60,35,167,34.6,0.534,21,1
+3,173,84,33,474,35.7,0.258,22,1
+1,97,68,21,0,27.2,1.095,22,0
+4,144,82,32,0,38.5,0.554,37,1
+1,83,68,0,0,18.2,0.624,27,0
+3,129,64,29,115,26.4,0.219,28,1
+1,119,88,41,170,45.3,0.507,26,0
+2,94,68,18,76,26,0.561,21,0
+0,102,64,46,78,40.6,0.496,21,0
+2,115,64,22,0,30.8,0.421,21,0
+8,151,78,32,210,42.9,0.516,36,1
+4,184,78,39,277,37,0.264,31,1
+0,94,0,0,0,0,0.256,25,0
+1,181,64,30,180,34.1,0.328,38,1
+0,135,94,46,145,40.6,0.284,26,0
+1,95,82,25,180,35,0.233,43,1
+2,99,0,0,0,22.2,0.108,23,0
+3,89,74,16,85,30.4,0.551,38,0
+1,80,74,11,60,30,0.527,22,0
+2,139,75,0,0,25.6,0.167,29,0
+1,90,68,8,0,24.5,1.138,36,0
+0,141,0,0,0,42.4,0.205,29,1
+12,140,85,33,0,37.4,0.244,41,0
+5,147,75,0,0,29.9,0.434,28,0
+1,97,70,15,0,18.2,0.147,21,0
+6,107,88,0,0,36.8,0.727,31,0
+0,189,104,25,0,34.3,0.435,41,1
+2,83,66,23,50,32.2,0.497,22,0
+4,117,64,27,120,33.2,0.23,24,0
+8,108,70,0,0,30.5,0.955,33,1
+4,117,62,12,0,29.7,0.38,30,1
+0,180,78,63,14,59.4,2.42,25,1
+1,100,72,12,70,25.3,0.658,28,0
+0,95,80,45,92,36.5,0.33,26,0
+0,104,64,37,64,33.6,0.51,22,1
+0,120,74,18,63,30.5,0.285,26,0
+1,82,64,13,95,21.2,0.415,23,0
+2,134,70,0,0,28.9,0.542,23,1
+0,91,68,32,210,39.9,0.381,25,0
+2,119,0,0,0,19.6,0.832,72,0
+2,100,54,28,105,37.8,0.498,24,0
+14,175,62,30,0,33.6,0.212,38,1
+1,135,54,0,0,26.7,0.687,62,0
+5,86,68,28,71,30.2,0.364,24,0
+10,148,84,48,237,37.6,1.001,51,1
+9,134,74,33,60,25.9,0.46,81,0
+9,120,72,22,56,20.8,0.733,48,0
+1,71,62,0,0,21.8,0.416,26,0
+8,74,70,40,49,35.3,0.705,39,0
+5,88,78,30,0,27.6,0.258,37,0
+10,115,98,0,0,24,1.022,34,0
+0,124,56,13,105,21.8,0.452,21,0
+0,74,52,10,36,27.8,0.269,22,0
+0,97,64,36,100,36.8,0.6,25,0
+8,120,0,0,0,30,0.183,38,1
+6,154,78,41,140,46.1,0.571,27,0
+1,144,82,40,0,41.3,0.607,28,0
+0,137,70,38,0,33.2,0.17,22,0
+0,119,66,27,0,38.8,0.259,22,0
+7,136,90,0,0,29.9,0.21,50,0
+4,114,64,0,0,28.9,0.126,24,0
+0,137,84,27,0,27.3,0.231,59,0
+2,105,80,45,191,33.7,0.711,29,1
+7,114,76,17,110,23.8,0.466,31,0
+8,126,74,38,75,25.9,0.162,39,0
+4,132,86,31,0,28,0.419,63,0
+3,158,70,30,328,35.5,0.344,35,1
+0,123,88,37,0,35.2,0.197,29,0
+4,85,58,22,49,27.8,0.306,28,0
+0,84,82,31,125,38.2,0.233,23,0
+0,145,0,0,0,44.2,0.63,31,1
+0,135,68,42,250,42.3,0.365,24,1
+1,139,62,41,480,40.7,0.536,21,0
+0,173,78,32,265,46.5,1.159,58,0
+4,99,72,17,0,25.6,0.294,28,0
+8,194,80,0,0,26.1,0.551,67,0
+2,83,65,28,66,36.8,0.629,24,0
+2,89,90,30,0,33.5,0.292,42,0
+4,99,68,38,0,32.8,0.145,33,0
+4,125,70,18,122,28.9,1.144,45,1
+3,80,0,0,0,0,0.174,22,0
+6,166,74,0,0,26.6,0.304,66,0
+5,110,68,0,0,26,0.292,30,0
+2,81,72,15,76,30.1,0.547,25,0
+7,195,70,33,145,25.1,0.163,55,1
+6,154,74,32,193,29.3,0.839,39,0
+2,117,90,19,71,25.2,0.313,21,0
+3,84,72,32,0,37.2,0.267,28,0
+6,0,68,41,0,39,0.727,41,1
+7,94,64,25,79,33.3,0.738,41,0
+3,96,78,39,0,37.3,0.238,40,0
+10,75,82,0,0,33.3,0.263,38,0
+0,180,90,26,90,36.5,0.314,35,1
+1,130,60,23,170,28.6,0.692,21,0
+2,84,50,23,76,30.4,0.968,21,0
+8,120,78,0,0,25,0.409,64,0
+12,84,72,31,0,29.7,0.297,46,1
+0,139,62,17,210,22.1,0.207,21,0
+9,91,68,0,0,24.2,0.2,58,0
+2,91,62,0,0,27.3,0.525,22,0
+3,99,54,19,86,25.6,0.154,24,0
+3,163,70,18,105,31.6,0.268,28,1
+9,145,88,34,165,30.3,0.771,53,1
+7,125,86,0,0,37.6,0.304,51,0
+13,76,60,0,0,32.8,0.18,41,0
+6,129,90,7,326,19.6,0.582,60,0
+2,68,70,32,66,25,0.187,25,0
+3,124,80,33,130,33.2,0.305,26,0
+6,114,0,0,0,0,0.189,26,0
+9,130,70,0,0,34.2,0.652,45,1
+3,125,58,0,0,31.6,0.151,24,0
+3,87,60,18,0,21.8,0.444,21,0
+1,97,64,19,82,18.2,0.299,21,0
+3,116,74,15,105,26.3,0.107,24,0
+0,117,66,31,188,30.8,0.493,22,0
+0,111,65,0,0,24.6,0.66,31,0
+2,122,60,18,106,29.8,0.717,22,0
+0,107,76,0,0,45.3,0.686,24,0
+1,86,66,52,65,41.3,0.917,29,0
+6,91,0,0,0,29.8,0.501,31,0
+1,77,56,30,56,33.3,1.251,24,0
+4,132,0,0,0,32.9,0.302,23,1
+0,105,90,0,0,29.6,0.197,46,0
+0,57,60,0,0,21.7,0.735,67,0
+0,127,80,37,210,36.3,0.804,23,0
+3,129,92,49,155,36.4,0.968,32,1
+8,100,74,40,215,39.4,0.661,43,1
+3,128,72,25,190,32.4,0.549,27,1
+10,90,85,32,0,34.9,0.825,56,1
+4,84,90,23,56,39.5,0.159,25,0
+1,88,78,29,76,32,0.365,29,0
+8,186,90,35,225,34.5,0.423,37,1
+5,187,76,27,207,43.6,1.034,53,1
+4,131,68,21,166,33.1,0.16,28,0
+1,164,82,43,67,32.8,0.341,50,0
+4,189,110,31,0,28.5,0.68,37,0
+1,116,70,28,0,27.4,0.204,21,0
+3,84,68,30,106,31.9,0.591,25,0
+6,114,88,0,0,27.8,0.247,66,0
+1,88,62,24,44,29.9,0.422,23,0
+1,84,64,23,115,36.9,0.471,28,0
+7,124,70,33,215,25.5,0.161,37,0
+1,97,70,40,0,38.1,0.218,30,0
+8,110,76,0,0,27.8,0.237,58,0
+11,103,68,40,0,46.2,0.126,42,0
+11,85,74,0,0,30.1,0.3,35,0
+6,125,76,0,0,33.8,0.121,54,1
+0,198,66,32,274,41.3,0.502,28,1
+1,87,68,34,77,37.6,0.401,24,0
+6,99,60,19,54,26.9,0.497,32,0
+0,91,80,0,0,32.4,0.601,27,0
+2,95,54,14,88,26.1,0.748,22,0
+1,99,72,30,18,38.6,0.412,21,0
+6,92,62,32,126,32,0.085,46,0
+4,154,72,29,126,31.3,0.338,37,0
+0,121,66,30,165,34.3,0.203,33,1
+3,78,70,0,0,32.5,0.27,39,0
+2,130,96,0,0,22.6,0.268,21,0
+3,111,58,31,44,29.5,0.43,22,0
+2,98,60,17,120,34.7,0.198,22,0
+1,143,86,30,330,30.1,0.892,23,0
+1,119,44,47,63,35.5,0.28,25,0
+6,108,44,20,130,24,0.813,35,0
+2,118,80,0,0,42.9,0.693,21,1
+10,133,68,0,0,27,0.245,36,0
+2,197,70,99,0,34.7,0.575,62,1
+0,151,90,46,0,42.1,0.371,21,1
+6,109,60,27,0,25,0.206,27,0
+12,121,78,17,0,26.5,0.259,62,0
+8,100,76,0,0,38.7,0.19,42,0
+8,124,76,24,600,28.7,0.687,52,1
+1,93,56,11,0,22.5,0.417,22,0
+8,143,66,0,0,34.9,0.129,41,1
+6,103,66,0,0,24.3,0.249,29,0
+3,176,86,27,156,33.3,1.154,52,1
+0,73,0,0,0,21.1,0.342,25,0
+11,111,84,40,0,46.8,0.925,45,1
+2,112,78,50,140,39.4,0.175,24,0
+3,132,80,0,0,34.4,0.402,44,1
+2,82,52,22,115,28.5,1.699,25,0
+6,123,72,45,230,33.6,0.733,34,0
+0,188,82,14,185,32,0.682,22,1
+0,67,76,0,0,45.3,0.194,46,0
+1,89,24,19,25,27.8,0.559,21,0
+1,173,74,0,0,36.8,0.088,38,1
+1,109,38,18,120,23.1,0.407,26,0
+1,108,88,19,0,27.1,0.4,24,0
+6,96,0,0,0,23.7,0.19,28,0
+1,124,74,36,0,27.8,0.1,30,0
+7,150,78,29,126,35.2,0.692,54,1
+4,183,0,0,0,28.4,0.212,36,1
+1,124,60,32,0,35.8,0.514,21,0
+1,181,78,42,293,40,1.258,22,1
+1,92,62,25,41,19.5,0.482,25,0
+0,152,82,39,272,41.5,0.27,27,0
+1,111,62,13,182,24,0.138,23,0
+3,106,54,21,158,30.9,0.292,24,0
+3,174,58,22,194,32.9,0.593,36,1
+7,168,88,42,321,38.2,0.787,40,1
+6,105,80,28,0,32.5,0.878,26,0
+11,138,74,26,144,36.1,0.557,50,1
+3,106,72,0,0,25.8,0.207,27,0
+6,117,96,0,0,28.7,0.157,30,0
+2,68,62,13,15,20.1,0.257,23,0
+9,112,82,24,0,28.2,1.282,50,1
+0,119,0,0,0,32.4,0.141,24,1
+2,112,86,42,160,38.4,0.246,28,0
+2,92,76,20,0,24.2,1.698,28,0
+6,183,94,0,0,40.8,1.461,45,0
+0,94,70,27,115,43.5,0.347,21,0
+2,108,64,0,0,30.8,0.158,21,0
+4,90,88,47,54,37.7,0.362,29,0
+0,125,68,0,0,24.7,0.206,21,0
+0,132,78,0,0,32.4,0.393,21,0
+5,128,80,0,0,34.6,0.144,45,0
+4,94,65,22,0,24.7,0.148,21,0
+7,114,64,0,0,27.4,0.732,34,1
+0,102,78,40,90,34.5,0.238,24,0
+2,111,60,0,0,26.2,0.343,23,0
+1,128,82,17,183,27.5,0.115,22,0
+10,92,62,0,0,25.9,0.167,31,0
+13,104,72,0,0,31.2,0.465,38,1
+5,104,74,0,0,28.8,0.153,48,0
+2,94,76,18,66,31.6,0.649,23,0
+7,97,76,32,91,40.9,0.871,32,1
+1,100,74,12,46,19.5,0.149,28,0
+0,102,86,17,105,29.3,0.695,27,0
+4,128,70,0,0,34.3,0.303,24,0
+6,147,80,0,0,29.5,0.178,50,1
+4,90,0,0,0,28,0.61,31,0
+3,103,72,30,152,27.6,0.73,27,0
+2,157,74,35,440,39.4,0.134,30,0
+1,167,74,17,144,23.4,0.447,33,1
+0,179,50,36,159,37.8,0.455,22,1
+11,136,84,35,130,28.3,0.26,42,1
+0,107,60,25,0,26.4,0.133,23,0
+1,91,54,25,100,25.2,0.234,23,0
+1,117,60,23,106,33.8,0.466,27,0
+5,123,74,40,77,34.1,0.269,28,0
+2,120,54,0,0,26.8,0.455,27,0
+1,106,70,28,135,34.2,0.142,22,0
+2,155,52,27,540,38.7,0.24,25,1
+2,101,58,35,90,21.8,0.155,22,0
+1,120,80,48,200,38.9,1.162,41,0
+11,127,106,0,0,39,0.19,51,0
+3,80,82,31,70,34.2,1.292,27,1
+10,162,84,0,0,27.7,0.182,54,0
+1,199,76,43,0,42.9,1.394,22,1
+8,167,106,46,231,37.6,0.165,43,1
+9,145,80,46,130,37.9,0.637,40,1
+6,115,60,39,0,33.7,0.245,40,1
+1,112,80,45,132,34.8,0.217,24,0
+4,145,82,18,0,32.5,0.235,70,1
+10,111,70,27,0,27.5,0.141,40,1
+6,98,58,33,190,34,0.43,43,0
+9,154,78,30,100,30.9,0.164,45,0
+6,165,68,26,168,33.6,0.631,49,0
+1,99,58,10,0,25.4,0.551,21,0
+10,68,106,23,49,35.5,0.285,47,0
+3,123,100,35,240,57.3,0.88,22,0
+8,91,82,0,0,35.6,0.587,68,0
+6,195,70,0,0,30.9,0.328,31,1
+9,156,86,0,0,24.8,0.23,53,1
+0,93,60,0,0,35.3,0.263,25,0
+3,121,52,0,0,36,0.127,25,1
+2,101,58,17,265,24.2,0.614,23,0
+2,56,56,28,45,24.2,0.332,22,0
+0,162,76,36,0,49.6,0.364,26,1
+0,95,64,39,105,44.6,0.366,22,0
+4,125,80,0,0,32.3,0.536,27,1
+5,136,82,0,0,0,0.64,69,0
+2,129,74,26,205,33.2,0.591,25,0
+3,130,64,0,0,23.1,0.314,22,0
+1,107,50,19,0,28.3,0.181,29,0
+1,140,74,26,180,24.1,0.828,23,0
+1,144,82,46,180,46.1,0.335,46,1
+8,107,80,0,0,24.6,0.856,34,0
+13,158,114,0,0,42.3,0.257,44,1
+2,121,70,32,95,39.1,0.886,23,0
+7,129,68,49,125,38.5,0.439,43,1
+2,90,60,0,0,23.5,0.191,25,0
+7,142,90,24,480,30.4,0.128,43,1
+3,169,74,19,125,29.9,0.268,31,1
+0,99,0,0,0,25,0.253,22,0
+4,127,88,11,155,34.5,0.598,28,0
+4,118,70,0,0,44.5,0.904,26,0
+2,122,76,27,200,35.9,0.483,26,0
+6,125,78,31,0,27.6,0.565,49,1
+1,168,88,29,0,35,0.905,52,1
+2,129,0,0,0,38.5,0.304,41,0
+4,110,76,20,100,28.4,0.118,27,0
+6,80,80,36,0,39.8,0.177,28,0
+10,115,0,0,0,0,0.261,30,1
+2,127,46,21,335,34.4,0.176,22,0
+9,164,78,0,0,32.8,0.148,45,1
+2,93,64,32,160,38,0.674,23,1
+3,158,64,13,387,31.2,0.295,24,0
+5,126,78,27,22,29.6,0.439,40,0
+10,129,62,36,0,41.2,0.441,38,1
+0,134,58,20,291,26.4,0.352,21,0
+3,102,74,0,0,29.5,0.121,32,0
+7,187,50,33,392,33.9,0.826,34,1
+3,173,78,39,185,33.8,0.97,31,1
+10,94,72,18,0,23.1,0.595,56,0
+1,108,60,46,178,35.5,0.415,24,0
+5,97,76,27,0,35.6,0.378,52,1
+4,83,86,19,0,29.3,0.317,34,0
+1,114,66,36,200,38.1,0.289,21,0
+1,149,68,29,127,29.3,0.349,42,1
+5,117,86,30,105,39.1,0.251,42,0
+1,111,94,0,0,32.8,0.265,45,0
+4,112,78,40,0,39.4,0.236,38,0
+1,116,78,29,180,36.1,0.496,25,0
+0,141,84,26,0,32.4,0.433,22,0
+2,175,88,0,0,22.9,0.326,22,0
+2,92,52,0,0,30.1,0.141,22,0
+3,130,78,23,79,28.4,0.323,34,1
+8,120,86,0,0,28.4,0.259,22,1
+2,174,88,37,120,44.5,0.646,24,1
+2,106,56,27,165,29,0.426,22,0
+2,105,75,0,0,23.3,0.56,53,0
+4,95,60,32,0,35.4,0.284,28,0
+0,126,86,27,120,27.4,0.515,21,0
+8,65,72,23,0,32,0.6,42,0
+2,99,60,17,160,36.6,0.453,21,0
+1,102,74,0,0,39.5,0.293,42,1
+11,120,80,37,150,42.3,0.785,48,1
+3,102,44,20,94,30.8,0.4,26,0
+1,109,58,18,116,28.5,0.219,22,0
+9,140,94,0,0,32.7,0.734,45,1
+13,153,88,37,140,40.6,1.174,39,0
+12,100,84,33,105,30,0.488,46,0
+1,147,94,41,0,49.3,0.358,27,1
+1,81,74,41,57,46.3,1.096,32,0
+3,187,70,22,200,36.4,0.408,36,1
+6,162,62,0,0,24.3,0.178,50,1
+4,136,70,0,0,31.2,1.182,22,1
+1,121,78,39,74,39,0.261,28,0
+3,108,62,24,0,26,0.223,25,0
+0,181,88,44,510,43.3,0.222,26,1
+8,154,78,32,0,32.4,0.443,45,1
+1,128,88,39,110,36.5,1.057,37,1
+7,137,90,41,0,32,0.391,39,0
+0,123,72,0,0,36.3,0.258,52,1
+1,106,76,0,0,37.5,0.197,26,0
+6,190,92,0,0,35.5,0.278,66,1
+2,88,58,26,16,28.4,0.766,22,0
+9,170,74,31,0,44,0.403,43,1
+9,89,62,0,0,22.5,0.142,33,0
+10,101,76,48,180,32.9,0.171,63,0
+2,122,70,27,0,36.8,0.34,27,0
+5,121,72,23,112,26.2,0.245,30,0
+1,126,60,0,0,30.1,0.349,47,1
+1,93,70,31,0,30.4,0.315,23,0
diff --git a/TechTopics/DataAnalystRoadMap2020/data_analyst_learning_path_2020.md b/TechTopics/DataAnalystRoadMap2020/data_analyst_learning_path_2020.md
index 8296e232..9373cb63 100644
--- a/TechTopics/DataAnalystRoadMap2020/data_analyst_learning_path_2020.md
+++ b/TechTopics/DataAnalystRoadMap2020/data_analyst_learning_path_2020.md
@@ -19,19 +19,25 @@ Following is a schedule to learn data science step by step considering **4 hours
### Week 3, 4, 5: BI tools
+Power BI is becoming quite popular and I would suggest learning Power BI over Tableau unless you have a strong reason to pick the later.
+
+* Power BI (project)
+ - My Power BI course that can make you job ready: https://codebasics.io/courses/power-bi-data-analysis-with-end-to-end-project
+ - codebasics sales insights project: https://www.youtube.com/playlist?list=PLeo1K3hjS3uva8pk1FI3iK9kCOKQdz1I9
+ - personal finance project: https://www.youtube.com/watch?v=pqSoCa2NGj4
+
* Tableau
- Codebasics sales insights project: https://www.youtube.com/playlist?list=PLeo1K3hjS3usDI9XeUgjNZs6VnE0meBrL
- HINDI codebasics sales insights project: https://www.youtube.com/playlist?list=PLPbgcxheSpE2B7YFfOualUTlRhgnQR7Kn
- Abhishek Agarwal: https://www.youtube.com/playlist?list=PL6_D9USWkG1C4raCOTlTf_oq4XnNNNtm9
- Bharti consultancy: https://www.youtube.com/playlist?list=PLyD1XCIRA3gQmN73dHwQWr4R08ABZFMtZ
-* Power BI (project)
- - codebasics sales insights project: https://www.youtube.com/playlist?list=PLeo1K3hjS3uva8pk1FI3iK9kCOKQdz1I9
- - personal finance project: https://www.youtube.com/watch?v=pqSoCa2NGj4
-
+
### Week 6 and 7: Python
* Python
+ - My Python course that is 5X better than the free playlists: https://codebasics.io/courses/python-for-beginner-and-intermediate-learners
+ - If you do above course you do not need to follow the youtube playlists
- Codebasics python tutorials (first 16) - https://www.youtube.com/playlist?list=PLeo1K3hjS3uv5U-Lmlnucd7gqF-3ehIh0
- Codebasics python HINDI tutorials - https://www.youtube.com/playlist?list=PLPbgcxheSpE1DJKfdko58_AIZRIT0TjpO
- Make sure to work on exercises in these folders: https://github.com/codebasics/py/tree/master/Basics/Hindi
@@ -53,6 +59,7 @@ Following is a schedule to learn data science step by step considering **4 hours
### Week 10, 11, 12: SQL & MongoDB
* SQL
+ - Check my affordable and latest SQL course: https://codebasics.io/courses/sql-beginner-to-advanced-for-data-professionals
- kudavenkat playlist (first 16): https://www.youtube.com/playlist?list=PL08903FB7ACA1C2FB
- khanacademy SQL course: https://www.khanacademy.org/computing/computer-programming/sql
diff --git a/TechTopics/DataScienceRoadMap2020/data_science_roadmap_2020.md b/TechTopics/DataScienceRoadMap2020/data_science_roadmap_2020.md
index 718ae7ec..8df94aba 100644
--- a/TechTopics/DataScienceRoadMap2020/data_science_roadmap_2020.md
+++ b/TechTopics/DataScienceRoadMap2020/data_science_roadmap_2020.md
@@ -20,6 +20,7 @@ Following is a schedule to learn data science step by step considering **4 hours
### Week 3 and 4: Python
* Python
+ - My Python course that is 5X better than the free playlists: https://codebasics.io/courses/python-for-beginner-and-intermediate-learners
- Codebasics python tutorials (first 16) - https://www.youtube.com/playlist?list=PLeo1K3hjS3uv5U-Lmlnucd7gqF-3ehIh0
- Codebasics python HINDI tutorials (first 16)- https://www.youtube.com/playlist?list=PLPbgcxheSpE1DJKfdko58_AIZRIT0TjpO
- Make sure to work on exercises
@@ -55,6 +56,7 @@ Following is a schedule to learn data science step by step considering **4 hours
### Week 17, 18, 19, 20: SQL & MongoDB
* SQL
+ - My SQL course for data professionals, if you do this you don't have to look at any other resources: https://codebasics.io/courses/sql-beginner-to-advanced-for-data-professionals
- kudavenkat playlist (first 16): https://www.youtube.com/playlist?list=PL08903FB7ACA1C2FB
- khanacademy SQL course: https://www.khanacademy.org/computing/computer-programming/sql
@@ -63,14 +65,19 @@ Following is a schedule to learn data science step by step considering **4 hours
### Week 21, 22, 23, 24: BI tools
+If you don't have a strong reason to choose between Power BI and Tableau, I would suggest choosing Power BI as it is increasing becoming popular. Microsoft is investing a lot in this tool and accordingly to Gartner's magic quadrant, Power BI is leading the data analytics market as of 2022.
+
+* Power BI (project)
+ - My Power BI course that can make you job ready: https://codebasics.io/courses/power-bi-data-analysis-with-end-to-end-project
+ - codebasics sales insights project: https://www.youtube.com/playlist?list=PLeo1K3hjS3uva8pk1FI3iK9kCOKQdz1I9
+ - personal finance management project: https://www.youtube.com/watch?v=pqSoCa2NGj4
+
* Tableau
- Codebasics sales insights project: https://www.youtube.com/playlist?list=PLeo1K3hjS3usDI9XeUgjNZs6VnE0meBrL
- HINDI codebasics sales insights project: https://www.youtube.com/playlist?list=PLPbgcxheSpE2B7YFfOualUTlRhgnQR7Kn
- Abhishek Agarwal: https://www.youtube.com/playlist?list=PL6_D9USWkG1C4raCOTlTf_oq4XnNNNtm9
- Bharti consultancy: https://www.youtube.com/playlist?list=PLyD1XCIRA3gQmN73dHwQWr4R08ABZFMtZ
-* Power BI (project)
- - codebasics sales insights project: https://www.youtube.com/playlist?list=PLeo1K3hjS3uva8pk1FI3iK9kCOKQdz1I9
- - personal finance management project: https://www.youtube.com/watch?v=pqSoCa2NGj4
+
## Soft skills
---------------