commit d71bfac9e2f36936e4fc1b96e61a08bb533bff49 Author: louiscklaw Date: Sat Feb 1 01:59:53 2025 +0800 update, diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..d54c38a --- /dev/null +++ b/.gitattributes @@ -0,0 +1,31 @@ +*.mp4 filter=lfs diff=lfs merge=lfs +*.zip filter=lfs diff=lfs merge=lfs +*.7z filter=lfs diff=lfs merge=lfs +*.tar.gz filter=lfs diff=lfs merge=lfs +*.jpg filter=lfs diff=lfs merge=lfs +*.png filter=lfs diff=lfs merge=lfs +*.avif filter=lfs diff=lfs merge=lfs +*.webm filter=lfs diff=lfs merge=lfs +*.mkv filter=lfs diff=lfs merge=lfs + +# Documents +*.doc diff=astextplain +*.DOC diff=astextplain +*.docx diff=astextplain +*.DOCX diff=astextplain +*.dot diff=astextplain +*.DOT diff=astextplain +*.pdf diff=astextplain +*.PDF diff=astextplain +*.rtf diff=astextplain +*.RTF diff=astextplain + +*.gif filter=lfs diff=lfs merge=lfs +*.GIF filter=lfs diff=lfs merge=lfs +*.bmp filter=lfs diff=lfs merge=lfs +*.BMP filter=lfs diff=lfs merge=lfs +*.tiff filter=lfs diff=lfs merge=lfs +*.TIFF filter=lfs diff=lfs merge=lfs +*.wav filter=lfs diff=lfs merge=lfs +*.WAV filter=lfs diff=lfs merge=lfs +*.log filter=lfs diff=lfs merge=lfs diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..67a5a14 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +**/~*.* \ No newline at end of file diff --git a/gitUpdate.bat b/gitUpdate.bat new file mode 100644 index 0000000..a6629e2 --- /dev/null +++ b/gitUpdate.bat @@ -0,0 +1,7 @@ +git status . + +@pause + +git add . +git commit -m"update anit961," +start git push \ No newline at end of file diff --git a/gitUpdate.sh b/gitUpdate.sh new file mode 100755 index 0000000..c96734f --- /dev/null +++ b/gitUpdate.sh @@ -0,0 +1,16 @@ +#!/usr/bin/env bash + +set -ex + +git config --global http.version HTTP/1.1 +git config --global lfs.allowincompletepush true +git config --global lfs.locksverify true +git config --global http.postBuffer 5368709120 + +git add . + +git commit -m 'update,' + +git push + +echo "done" diff --git a/meta.md b/meta.md new file mode 100644 index 0000000..e69de29 diff --git a/task1/Assignment2-1.docx b/task1/Assignment2-1.docx new file mode 100644 index 0000000..a9e8122 Binary files /dev/null and b/task1/Assignment2-1.docx differ diff --git a/task1/Assignment2_template.ipynb b/task1/Assignment2_template.ipynb new file mode 100644 index 0000000..5afb6f5 --- /dev/null +++ b/task1/Assignment2_template.ipynb @@ -0,0 +1,467 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "c9eac7d0-4f4c-49e7-a335-b8ca8de34f20", + "metadata": {}, + "source": [ + "# Assignment 2:\n", + "In this assignment, you are given a dataset about bodyfat measure collected from a clinic. As a nutritionist, you want to use regression model to check whether your patients are in danger of high bodyfat.\n", + "The data contains physical measurements of patients:\n", + "- explantory variables: Age (in year), Weight (in pounds), Height (in inches), and BMI (Body Mass Index).\n", + "- response variable: bodyfat (in %)\n", + "\n", + "Complete the given tasks below. (Notice each of the missing code to be filled is a single line command, more than one command line will be downgraded)" + ] + }, + { + "cell_type": "markdown", + "id": "0f79e7b9-1fff-4bef-9fe8-8e3eb54c68cb", + "metadata": { + "tags": [] + }, + "source": [ + "

Author

\n", + "\n", + " \n", + "- Name: \n", + "- Student ID: " + ] + }, + { + "cell_type": "markdown", + "id": "d4725f61-cb83-4e3c-bc31-1a3992dadd28", + "metadata": {}, + "source": [ + "## Pre-loaded packages and functions" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "d7e90f45", + "metadata": {}, + "outputs": [], + "source": [ + "#### Pandas is for using data structures\n", + "import pandas as pd\n", + "# statsmodels contain modules for regression and time series analysis\n", + "import statsmodels.api as sm\n", + "# numpy is for numerical computing of array and matrix\n", + "import numpy as np\n", + "# Matplotlib, Seaborn: plotting package\n", + "import matplotlib.pyplot as plt\n", + "import seaborn as sns \n", + "# matplotlib Showing the plot right after the current code \n", + "%matplotlib inline\n", + "import warnings\n", + "warnings.filterwarnings('ignore')\n", + "# basic statistics package\n", + "import scipy.stats as stats\n", + "from statsmodels.stats.outliers_influence import variance_inflation_factor\n", + "import datetime" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "d8983cbf-0937-443f-ba43-d18956ad4a3e", + "metadata": {}, + "outputs": [], + "source": [ + "def outlier(dataframe,model,Type='all'):\n", + " A = dataframe.copy()\n", + " A = A.dropna()\n", + " A.index = range(1,A.shape[0]+1)\n", + " #A.index = range(0,A.shape[0])\n", + " studentized_residuals = model.get_influence().resid_studentized_internal\n", + " if Type == 'neg':\n", + " return(A[studentized_residuals<-2])\n", + " elif Type == 'posi':\n", + " return(A[studentized_residuals>2])\n", + " else:\n", + " return(A[np.abs(studentized_residuals)>2])" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "b47cb1ec-efe7-4124-a653-a9e942ae5e54", + "metadata": { + "id": "7NIZKrveWDbd" + }, + "outputs": [], + "source": [ + "from statsmodels.stats.outliers_influence import variance_inflation_factor\n", + "def getvif(X):\n", + " X = sm.add_constant(X)\n", + " vif = pd.DataFrame()\n", + " vif[\"VIF\"] = [variance_inflation_factor(X.values, i) for i in range(X.shape[1])]\n", + " vif[\"Predictors\"] = X.columns\n", + " return(vif.drop(index = 0).round(2)) " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "5bd86624-4cc8-4790-85d5-826a91ef02aa", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "id": "760c8202-fcaa-4e5f-bbb1-35f972fb4fd6", + "metadata": {}, + "source": [ + "## Getting the data" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "16326102", + "metadata": {}, + "outputs": [], + "source": [ + "data = pd.read_csv(\"https://drive.google.com/uc?export=download&id=1r6Za0azxHvJpjUA6lgMJyBqYIWRljmz8\")\n", + "data.head()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "7fd1d118", + "metadata": {}, + "outputs": [], + "source": [ + "data.shape" + ] + }, + { + "cell_type": "markdown", + "id": "9496e740-2f7c-45cc-9409-a029d242a732", + "metadata": {}, + "source": [ + "## Preliminary study" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "52d51f09-1993-47c5-83c8-4d874d0ddaf1", + "metadata": {}, + "outputs": [], + "source": [ + "# scatter plot matrix of the whole data\n", + "sns_plot = sns.pairplot(data)" + ] + }, + { + "cell_type": "markdown", + "id": "931e81f6-e2f6-4f07-ab1c-485f598f8a93", + "metadata": {}, + "source": [ + "### Task 1: Compute the correlation matrix; which variable has the strongest correlation with bodyfat? [5pts]" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "6fe53540-95ce-4286-a0b4-0c35437dbe0c", + "metadata": {}, + "outputs": [], + "source": [ + "$$$Code_Here$$$" + ] + }, + { + "cell_type": "markdown", + "id": "7d5d3504-6a3c-486f-afa2-639a4f85e015", + "metadata": {}, + "source": [ + "\n" + ] + }, + { + "cell_type": "markdown", + "id": "5a155616-4e5b-4992-8a04-467c85ae2977", + "metadata": {}, + "source": [ + "### Answer:" + ] + }, + { + "cell_type": "markdown", + "id": "7688f2a9-8c5e-4fae-83f3-8b4b1ef7a799", + "metadata": {}, + "source": [ + "### Task 2: Split the data into train and test set by random (use 25 as the random seed/state) [5pts]" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "4ae78c9d-deaa-4998-8928-5437c437e285", + "metadata": {}, + "outputs": [], + "source": [ + "train = $$$Code_Here$$$\n", + "test = $$$Code_Here$$$\n", + "train.shape, test.shape" + ] + }, + { + "cell_type": "markdown", + "id": "1d82fae0-ce3c-4e4b-92f8-69657b421f74", + "metadata": {}, + "source": [ + "## Model Building" + ] + }, + { + "cell_type": "markdown", + "id": "e5d20382-fd4c-4030-9d43-677f267b447b", + "metadata": {}, + "source": [ + "### Task 3: Using the train set, fit a simple regression model for bodyfat by the variable from Task1 (with max correlation) [5pts]" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "4994daf5-b40b-41b3-93fd-ab3f90568c91", + "metadata": {}, + "outputs": [], + "source": [ + "Y = train[\"bodyfat\"]\n", + "X = $$$Code_Here$$$\n", + "SLR = $$$Code_Here$$$\n", + "print(SLR.summary())" + ] + }, + { + "cell_type": "markdown", + "id": "8ba21618-7c3a-4baf-861f-cbdbb7cc7f05", + "metadata": {}, + "source": [ + "### Task 4: Using the trian set, fit a multiple regression model for bodyfat by all of the explanatory variables (i.e. age, weight, height and bmi) [5pts]" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "500ee96e-c8db-4053-ad0b-4097ae291696", + "metadata": {}, + "outputs": [], + "source": [ + "Y = train[\"bodyfat\"]\n", + "X = $$$Code_Here$$$\n", + "MLR_all = $$$Code_Here$$$\n", + "print(MLR_all.summary())" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "af58180f-45a0-4cc9-b042-3845996d683e", + "metadata": {}, + "outputs": [], + "source": [ + "# VIF of all predictors\n", + "getvif(X)" + ] + }, + { + "cell_type": "markdown", + "id": "c2cebb64-f6e0-41b6-96be-09f218ba05a3", + "metadata": {}, + "source": [ + "### Task 5: Multicollinearity is reflected from above. Does bmi cause the problem? Briefly explain using your understanding about bmi.[5pts]" + ] + }, + { + "cell_type": "markdown", + "id": "87def1eb-ba5c-49a9-bfdf-48b3af5e1a81", + "metadata": {}, + "source": [ + "### Answer: " + ] + }, + { + "cell_type": "markdown", + "id": "dc60e40f-72b8-43a5-8b70-40fec8cc4f4d", + "metadata": {}, + "source": [ + "### Task 6: Using the train set, fit a multiple regression model for bodyfat by all of the explanatory variables except bmi [5pts]" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "73499ab4-b937-4b30-a647-aeedc20d929e", + "metadata": {}, + "outputs": [], + "source": [ + "Y = train[\"bodyfat\"]\n", + "X = $$$Code_Here$$$\n", + "MLR = $$$Code_Here$$$\n", + "print(MLR.summary())" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "883671ff-79ce-4c80-941c-957b0c8bcde2", + "metadata": {}, + "outputs": [], + "source": [ + "getvif(X)" + ] + }, + { + "cell_type": "markdown", + "id": "742ef24b-3b03-439d-9d18-47c1626efe05", + "metadata": {}, + "source": [ + "## Compare the predictive power between SLR and MLR using the test set. " + ] + }, + { + "cell_type": "markdown", + "id": "708e9eed-0b88-49d1-93a1-fba94254b597", + "metadata": {}, + "source": [ + "### Task 7: Compute the RMSE for MLR [5pts]" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "469672cd-2db3-49eb-b137-c6d63033a55f", + "metadata": {}, + "outputs": [], + "source": [ + "Test_X_SLR = test['bmi']\n", + "Test_X_MLR = $$$Code_Here$$$\n", + "\n", + "Test_Y_SLR = SLR.predict(sm.add_constant(Test_X_SLR))\n", + "Test_Y_MLR = $$$Code_Here$$$" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "f077e2cf-4cad-4578-90bb-a63c32ddda18", + "metadata": {}, + "outputs": [], + "source": [ + "Test_Y = test[\"bodyfat\"]\n", + "\n", + "from sklearn.metrics import mean_squared_error\n", + "rmse_SLR = np.sqrt(mean_squared_error(Test_Y, Test_Y_SLR))\n", + "rmse_MLR = $$$Code_Here$$$\n", + "print(\"RMSE for test set (SLR): \", rmse_SLR)\n", + "print(\"RMSE for test set (MLR): \", rmse_MLR)" + ] + }, + { + "cell_type": "markdown", + "id": "1659a34e-8080-4e92-be34-717acf81c82c", + "metadata": {}, + "source": [ + "## Final Model and application" + ] + }, + { + "cell_type": "markdown", + "id": "89256526-a134-4e7d-9a84-1f7dc331bfc2", + "metadata": {}, + "source": [ + "### Task 8: Refit the better model from Task7 using the full dataset. [5pts]" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "84da494e-36bf-4f96-9376-3fb43e8df704", + "metadata": {}, + "outputs": [], + "source": [ + "Y = data[\"bodyfat\"]\n", + "X = $$$Code_Here$$$\n", + "Final = $$$Code_Here$$$\n", + "print(Final.summary())" + ] + }, + { + "cell_type": "markdown", + "id": "539487cb-0e72-4a2b-85cd-6dbac1d2e321", + "metadata": { + "tags": [] + }, + "source": [ + "### Task 9: Predict the body fat for a new patient using the final model from Task 8: age=35, weight=170 pounds. Height=72 inches, BMI=23 [5pts]" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "71aacafa-0cf1-40ed-8ee9-d5d09ebf26ab", + "metadata": {}, + "outputs": [], + "source": [ + "$$$Code_Here$$$" + ] + }, + { + "cell_type": "markdown", + "id": "37f640ce-dfd6-42c9-90d5-13b05769448f", + "metadata": { + "tags": [] + }, + "source": [ + "### Task 10: by using residuals (from final model) outlier analysis, report those patients are in danger (i.e. % of fat is much higher than what we expected from the final model) [5pts]" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "f06aa2bd-9836-46c2-8e8d-4a876c9ae253", + "metadata": {}, + "outputs": [], + "source": [ + "$$$Code_Here$$$" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "149424ee-f928-479b-8b07-19c3ae88f751", + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "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.10.9" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/task1/google_drive.csv b/task1/google_drive.csv new file mode 100644 index 0000000..2031e5f --- /dev/null +++ b/task1/google_drive.csv @@ -0,0 +1,250 @@ +bodyfat,age,weight,height,bmi +11.8,27,168,71.25,23.2645614 +22.2,69,177.75,68.5,26.63077415 +10.6,57,147.75,65.75,24.02654368 +47.5,51,219,64,37.58715821 +24.2,40,202.25,70,29.01668367 +23.3,52,167,67.75,25.57721164 +26,54,230,72.25,30.97472492 +9,47,184.25,74.5,23.3372821 +4,47,127.5,66.75,20.1169886 +22.1,43,150,69.25,21.98907845 +9.4,26,152.25,69,22.48093888 +16.7,40,158,69.25,23.1618293 +29.9,65,189.75,65.75,30.85642412 +11.7,23,198.25,73.5,25.79846361 +25.8,61,178,67,27.87569615 +21.5,81,161.25,70.25,22.97007384 +15.1,34,140,70.5,19.80182083 +25.2,26,223,70.25,31.76636567 +18.7,50,194.75,70.75,27.35142154 +17.5,46,167,67,26.15304076 +23.6,41,232.75,74.25,29.67919373 +8.8,55,146.75,68.75,21.82669752 +9.4,23,159.75,72.25,21.51396655 +21,27,200.25,73.5,26.05872553 +15.9,42,193.5,70.5,27.36894523 +8.6,40,167.5,71.5,23.03340017 +26.7,58,161.75,67.25,25.14288084 +15.6,31,140.25,68.25,21.16668679 +13.1,37,151,67,23.64736021 +34.3,35,228.25,69.5,33.21976088 +30.2,69,215.5,70.5,30.48065993 +18,43,165.5,68.5,24.7954606 +5.7,29,160.25,71.25,22.19134503 +26.6,67,167,67.5,25.76702332 +3.9,42,136.25,67.5,21.02249657 +22.9,32,209.25,71,29.18126364 +19.7,43,170.75,68.5,25.58202355 +6.3,54,155.25,69.25,22.75869619 +29.9,37,241.25,71.5,33.17497188 +21.4,40,168.5,69.25,24.70106479 +9.4,31,151.25,72.25,20.36924846 +25.2,55,198.5,74.25,25.31179358 +16,28,183.75,67.75,28.14259065 +31.5,54,202.5,70.75,28.43986066 +29.8,56,178.75,68.5,26.78059566 +10,28,182.5,72.25,24.57777086 +12.5,55,126.5,66.75,19.9592083 +3.7,27,133.25,64.75,22.34307777 +18.2,44,179.75,69.5,26.16101651 +38.1,42,244.25,76,29.72779605 +11.3,50,162.5,66.5,25.83243824 +5.3,25,143.75,72.5,19.22592152 +28.7,43,200.5,71.5,27.57132378 +11.8,61,143,65.75,23.25411673 +20.5,35,177.25,71,24.71865701 +24.9,40,176.75,71,24.64892878 +21.2,30,205.25,71.25,28.42292398 +20.5,41,202.25,72.5,27.05003567 +27.9,52,206.5,74.5,26.15548849 +24.9,46,192.5,71.75,26.28707402 +12.3,23,154.25,67.75,23.62446045 +26.1,50,157,66.75,24.77150753 +13.6,45,135.75,68.5,20.33827055 +27.2,49,216.25,74.5,27.39043286 +17.5,40,170.5,74.25,21.74136426 +32.3,57,205.5,70,29.48295918 +20.8,32,180.5,69.5,26.27017235 +22.1,35,187.75,69.5,27.32534548 +6,44,184,74,23.62162162 +21.8,35,166.25,68,25.27546496 +33.6,72,201,69.75,29.04443674 +12.5,30,136.5,68.75,20.3021752 +20.4,41,210.5,72,28.54581405 +27,70,170.75,70,24.49739796 +18.4,64,190.25,72.75,25.27050933 +14.1,48,176,73,23.21786451 +3.7,27,159.25,71.5,21.89891926 +18.5,61,148.25,67.5,22.87401921 +19.2,35,217,73.75,28.04729675 +34.5,45,262.75,68.75,39.0798281 +6.1,22,173.25,72.25,23.33204823 +20.9,24,210.25,74.75,26.45263476 +13.9,43,164.25,73.25,21.52015749 +20.4,49,212.75,75,26.58902222 +22.3,49,196.75,73.75,25.42997989 +21.5,54,151.5,70.75,21.27722908 +13.5,55,125,64,21.45385743 +14.6,33,196,73,25.85625821 +5.2,55,142.25,67.25,22.11174528 +32.8,47,195,72.5,26.0803805 +11.9,32,182,73.75,23.52353921 +9.6,38,188.75,73.25,24.73016575 +10.2,47,158.25,72.25,21.31195747 +22.2,47,197,72,26.71508488 +17.3,28,171.5,75.25,21.29150893 +19.5,49,168.25,71.75,22.97558548 +12.4,54,153.25,70.5,21.67592173 +16.9,39,234.75,74.5,29.73366065 +28,43,183.25,70,26.2907653 +29.4,43,187.75,74,24.10304054 +15.2,68,155.5,69.25,22.79534465 +25.8,40,191,74,24.52027027 +22.5,38,187.25,69.25,27.4496996 +10.9,55,179.75,68.75,26.73491571 +27.3,34,218.75,72,29.66459298 +25.3,44,185.25,71.5,25.47425302 +31.6,48,217,70,31.13285715 +25.3,22,154,66.25,24.66631541 +9.6,47,160.5,70.25,22.86323628 +24.7,42,224.75,74.75,28.2769544 +15,53,154.5,69.25,22.6487508 +25.3,36,226.75,71.75,30.96412485 +17.4,43,152.25,67.75,23.31814654 +18.3,52,203.25,74.25,25.91749141 +35,65,224.5,68.25,33.88179098 +17.4,53,224.5,77.75,26.10783594 +8.5,56,160.75,73.75,20.77697213 +24.6,61,179.75,65.75,29.23026211 +8.3,46,176.75,72.5,23.63952438 +27.2,42,177.5,68.75,26.40026446 +22.6,54,198,72,26.85069444 +20.3,35,224.75,72.25,30.26769316 +8.8,29,160.75,69,23.73603234 +16.5,35,172.75,69.5,25.14222866 +14.8,55,169.5,68.25,25.5811295 +26.1,62,216,73.25,28.30048108 +13.9,51,179,72,24.27411266 +29.6,25,206.5,69.75,29.839185 +21.3,42,163,70.25,23.21936146 +30,55,183.5,67.5,28.31286694 +22.5,31,177.25,71.5,24.37415032 +7.9,34,131.5,67.5,20.2896022 +22.4,40,168.25,71.25,23.29918129 +32,41,212,71.5,29.1527214 +21.3,41,218.5,71,30.47123587 +23.1,64,160,65.75,26.01859215 +18.6,62,168.75,67.5,26.03703704 +40.1,49,191.75,65,31.90538461 +11,70,134.25,67,21.02422589 +19.2,26,181,69.75,26.15444303 +30.7,54,193.25,70.25,27.52847608 +32.3,41,247.25,73.5,32.17488084 +22,42,156.25,69,23.0715711 +26.8,64,150.25,67.25,23.35528807 +10.8,40,133.5,67.5,20.5981893 +13.6,51,149.25,69.75,21.56657803 +7.5,51,154.5,70,22.1660204 +0.7,35,125.75,65.5,20.6053843 +29.3,72,186.75,66,30.13894628 +17.3,43,194,75.5,23.9256173 +22.9,31,148,67.5,22.83544581 +8.5,47,165.25,70.5,23.37322067 +32.6,50,203,67,31.79082201 +30.4,66,234.25,72,31.76654128 +13.8,55,154.75,71.5,21.2801115 +18.3,40,173.25,69.5,25.21499922 +19.5,50,172.75,73,22.78912554 +12.4,64,155.25,69.5,22.59525904 +19.3,43,200.25,73.5,26.05872553 +12.1,40,159.25,69.75,23.01157488 +20.4,58,181.5,68,27.59396626 +25.4,43,177,69.25,25.94711256 +21.2,49,198.5,73.5,25.83099634 +12.2,43,178.25,70.25,25.39172503 +28.7,24,184.25,71.25,25.5148538 +14.9,56,174.5,69.5,25.39692563 +6.6,40,139.25,69,20.56138416 +28.4,50,196.75,68.25,29.69372996 +6.3,49,152.75,73.5,19.87750474 +18.1,44,187.5,72.25,25.25113444 +16.5,33,211.75,73.5,27.55523161 +7.7,39,125.25,68,19.04211722 +14.9,72,157.75,67.25,24.52110944 +22.7,40,171.25,70.5,24.22187012 +16.6,44,208.75,73,27.53823419 +29,67,199.5,68.5,29.88939208 +7.8,27,216,76,26.28947368 +14.7,40,160.25,68.75,23.83460496 +16.5,27,156.75,67.25,24.36566659 +28,62,201.25,69.5,29.29015061 +24.5,52,199.25,71.75,27.20882856 +10.8,47,159.75,70.75,22.43589007 +27,72,168,69.25,24.62776786 +26.6,39,219.25,74.25,27.95773674 +32.6,67,227.75,72.75,30.25155584 +34.8,44,223,69.75,32.22342981 +12.9,55,156.75,71.5,21.55513717 +5.6,39,148.5,71.25,20.56421052 +20.1,41,172.75,71.25,23.92233918 +22.8,42,162.75,72.75,21.61774188 +20.5,46,177,70,25.39408163 +13,33,184.25,68.75,27.40421818 +4.1,25,191,74,24.52027027 +22.1,47,178.25,70,25.57341837 +21.8,39,166.75,70.75,23.41899636 +11.5,54,161.75,67.5,24.95698217 +16.1,57,182.25,71.75,24.88737267 +11.5,40,145.75,67.25,22.65579525 +14.9,42,165.25,69.75,23.87857299 +16,47,151.5,66.75,23.90371586 +11.4,41,153,69.25,22.42886001 +7.1,26,186.25,74.5,23.59060403 +18.1,49,171.75,71.5,23.61782972 +24.4,41,185,68.25,27.92040682 +17.7,32,148.75,70,21.34107143 +8,51,137.25,67.75,21.0207922 +9.9,37,145.25,69.25,21.29275763 +24.4,41,168.25,69.5,24.48729362 +20.4,48,173.75,72,23.56216243 +27.3,63,219.15,69.5,31.89533668 +24.8,62,191.5,72.25,25.78982531 +15.4,58,175.5,71.5,24.13350286 +13.8,50,161,66.5,25.59398496 +31.4,67,163.75,67.75,25.07945153 +27.1,44,186,69.75,26.87694146 +14.2,24,156,70.75,21.90922598 +10.4,26,184.75,72.25,24.88078447 +20.1,48,177.25,72.75,23.54374653 +29,34,195.75,71,27.29860147 +16.9,36,176.25,71.5,24.23663749 +19.1,28,179,68,27.21388408 +26,72,190.75,70.5,26.97998089 +32.9,44,166,65.5,27.20074587 +7.1,49,140.5,68,21.36061851 +3,35,152.25,67.75,23.31814654 +17,65,127.5,65.75,20.73356561 +19.2,24,208.5,72.75,27.69461863 +10.1,27,146,72.25,19.66221669 +15.2,28,200.5,69.75,28.97218689 +25.5,42,180,68.25,27.16580124 +23.6,47,197,73.25,25.81108691 +31.2,28,205.75,69,30.38064483 +6.6,42,167.25,72.75,22.21546746 +25.8,60,157.75,67.5,24.33980796 +24.3,62,167.5,71.5,23.03340017 +10.3,23,188.15,77.5,22.02196878 +26.7,48,175.25,71.75,23.93147907 +19.6,26,241.75,74.5,30.62028737 +12.4,25,176,72.5,23.53921522 +17.8,46,156.5,68.25,23.61915496 +14,28,151.25,67.75,23.16498958 +20.8,40,192.25,73.25,25.18873836 +18.8,66,171.25,69.25,25.10419789 +8.8,57,162.5,69.5,23.65043217 +31.9,74,207.5,70,29.76989796 +23.6,43,170.75,67.5,26.34562414 +20.9,35,162.75,66,26.26566804 +17,56,167.75,68.5,25.132559 +17.7,42,168,71.5,23.10215658