202130_ITEC102_Assessment3 ASSESSMENT GUIDE Unit: ITEC102 Python fundamentals for data science, Semester 1, 2021 Assessment number (3) Assessment Artefact: Report and Python Code Weighting [40%] Why...

1 answer below »
Please do this in Jupyter Notebook



202130_ITEC102_Assessment3 ASSESSMENT GUIDE Unit: ITEC102 Python fundamentals for data science, Semester 1, 2021 Assessment number (3) Assessment Artefact: Report and Python Code Weighting [40%] Why this assessment? What are the types of employability skills that I will acquire upon completion of this assessment? Assessment Overview: Purpose, as written in the EUO Due date: 12pm on Friday of Week 14, 11 June 2021 Weighting: 40% Length and/or format: Individual Runnable code, detailed comments and discussion in jupyter notebook Learning outcomes assessed LO3, LO4 Graduate attributes assessed GA3, GA4, GA5 How to submit: via LEO Return of assignment: via LEO within 2 weeks of submission Assessment criteria: Rubric: see end of document • The purpose is to assess students’ comprehensive Python data science skills and understanding from data processing to data visualisation on real-world datasets with consideration of data ethics. Skill Type Developed critical and analytical thinking ☒ Developed ability to solve complex problems ☒ Developed ability to work effectively with others ☐ Developed confidence to learn independently ☒ Developed written communication skills ☒ Developed spoken communication skills ☐ Developed knowledge in the field study ☐ Developed work-related knowledge and skills ☒ 2 Context Data processing, analysis and visualisation assignment In this assignment you will be analyzing the BRFSS weight vs height data (brfss.csv), which can be download from unit LEO website and use pandas to load it. The five columns in the data represent: age, current_weight (kg), weight_a_year_ago (kg), height (cm), and gender, where gender == 1 represents male and 2 represents female. In this assignment you will have the chance to do initial exploratory and visualization about the data with learned skills from this unit. Instructions Attempt below tasks with the given dataset, at the same time, reflect on the development and applications of data science while ensuring the respect of human rights and of the values shaping open, pluralistic and tolerant information societies. Task 1 (15 marks): Produce a summary statistics graph on current_weight, weight_a_year_ago, and height. [Hint: similar to figure 1 below] Figure 1: An example of summary statistics graph Task 2 (15 marks): Calculate correlation: Define weight_change = (current_weight – weight_a_year_ago). Calculate correlation between weight_change and the following variables, and determine which one is most correlated (regardless of sign of correlation) with weight_change. Use scatter plots to support your conclusion. i. current_weight ii. weight_a_year_ago iii. age [Hint: One scatter plot for each variable.] height weight Current_ weight Weight_a_ year_ago Height 3 Task 3 (10 marks): Use t-test to check significant difference 3.1 Use t-test to test whether there is a significant difference between the weight_change of male and female. 3.2 Randomly split the subjects into two groups of roughly equal sizes, and use t-test to test whether there is a significant difference between the weight_change of the two groups. [Hint: use t-test here https://docs.scipy.org/doc/scipy/reference/generated/scipy.stats.ttest_ind.html ] Task 4 (5 bonus marks): Propose and perform your own analysis that utilizes different skills taught in class (or reveal additional interesting insight from this dataset). Structure Prepare a Jupyter Notebook for this project. The structure of the Jupyter Notebook should alternate texts and python codes and cover topics listed the in specific tasks above. One template could be found in any week’s workshop resources in LEO. Naming the submission: start with your student ID, name and followed by unit name and code, i.e., studentID_studentNames_ITEC102_AT3.ipynb, e.g., S00258769_Alice_Zuk_ITEC102_AT3.ipynb How do I submit? Submit Jupyter Notebook (.ipynb) to Assessment 3 via LEO assessment tile Note that: The code will be compared to other students’ submission in Turnitin to make sure the submission satisfies academic integrity. Submission checklist I have formatted my jupyter notebook as per the specifications ☐ I have checked my Turnitin report and taken appropriate actions to ensure that the submission satisfies academic integrity ☐ I have actioned feedback advice provided to me from labs and assessment 2 (if applicable) ☐ I have submitted my work before the due date/time ☐ I have submitted feed forward template along with my assignment submission ☐ Feed Forward Template (example) A template for students to use and act on feedback and provide recommendations for improvement. Note This is a task for any instance of follow-on assignment (assessment 2 and 3). This must be submitted as the first page of the follow-on assignment (assessment 2 and 3) to ensure you acted on the feedback provided to you in the previous assignment (this is not counted as part of the assessment word count). How did you act on the feedback? Feedback is an important component of learning. Please consider the feedback you received in your last assignment and provide a response on how you acted on, or intend to act upon, that feedback, and how it has informed the current assignment task. Submit this sheet along with your assignment. Questions Your learning from the previous assignment feedback https://docs.scipy.org/doc/scipy/reference/generated/scipy.stats.ttest_ind.html 4 How have you acted on the feedback from previous assignment to improve your work in this assignment? (e.g. based on my previous feedback, I made sure that I supported my discussion, position, ideas, concepts with peer reviewed journal references in this assignment) What is your expectation around the type of feedback that enhances your learning? (e.g. I want to know where I made a mistake and how I can correct them and not make the same mistake again i.e. I want specific feedback that will help me to improve my learning and performance in the next assignment) Did you have any difficulty understanding or acting on previous feedback? Please be as specific as possible so that you can gain further feedback/clarify anything you do not understand in the feedback (e.g. feedback provided in my previous assignment was very generic I did not know how to improve my work. So, I would like the teacher to explain more on xxxx aspects of the feedback or I would like an opportunity to have a dialogue to understand the feedback) Some Helpful Websites and Resources LEO listed contents Anaconda environment https://docs.anaconda.com/anaconda/ Python official website https://www.python.org/ Useful python packages: https://numpy.org/ https://pandas.pydata.org/ https://matplotlib.org/ Who can help me? Academic skills Unit (ASU) Places Lecturer Maoying Qiao (via LEO messages) I’m having problems Application for Extension (EX) of Time for submission of an Assessment Task: The EX form should be completed by ACU students applying for an extension of time for submission of an assessment task. The completed and signed form must be submitted to the relevant National Lecturer-in-Charge prior to the due date of the assessment task. It must be accompanied by supporting documentary evidence such as EIP, doctor’s certificate or equivalent, death certificate, or a statutory declaration. Special Consideration: This form is used by students to apply for Special Consideration for assessable work in studies at Australian Catholic University. Approval of such applications will only be granted to students who are legitimately disadvantaged in their assessment due to exceptional and unforeseen circumstances beyond their control. https://www.acu.edu.au/-/media/feature/pagecontent/richtext/study-at-acu/_forms/form---ex-application-for-extension-of-time-for-submission-of-an-assessment-task.pdf?la=en&hash=F0B8D12030C4F16ED06803E255FFAB0A https://units.acu.edu.au/__data/assets/word_doc/0006/620655/SC_Application_for_Special_Consideration_20180214.docx 5 Referencing All referencing should be in ACU Harvard style; however if you are coming from another faculty, you may choose to use your usual referencing style. If this is the case you must indicate at the top of your reference list what referencing style you are using (e.g. APA, MLA, Chicago, etc). Please ensure your assignment makes use of in-text citations and a reference list. Missing citations or references is equivalent to plagiarism. Criteria The full criteria is compiled in a rubric, which can be found on the following page/s. https://libguides.acu.edu.au/referencing/harvard 6 Rubric for Assessment 3 Relevant LO/GAs Criterion (related to a single GA from the related LO – one GA per criterion Does not meet expectations Meets expectations Exceeds expectations NN (0-49%) PA (50-64%) CR (65-74%) DI (75-84%) HD (85-100%) GA5 LO3 and LO4 Weight=25 marks TL=3 Learning stage = I and D Demonstrate correct understanding of the concepts of data processing, analysis and visualisation Fail to adequately demonstrate correct understanding of the concepts of data processing, analysis and visualisation, i.e., None of the above tasks are addressed and no figures are produced. (0 – 12.25) Adequately demonstrate correct understanding of the concepts of data processing, analysis and visualisation, i.e., at least one task is addressed and one figure is produced with reasonable quality (12.5 –16.0) Credibly demonstrate correct understanding of the concepts of data processing, analysis and visualisation, i.e., at least two tasks are addressed and one figure is produced with desired quality. (16.25 – 18.5) Distinctively demonstrate correct correct understanding of the concepts of data processing, analysis and visualisation, i.e., most of the tasks are addressed and the figures are produced with desired quality. (18.75 – 21.0) Highly distinctively demonstrate correct understanding of the concepts of data processing, analysis and visualisation, i.e., all tasks are addressed with figures of desired quality. (21.25 – 25) GA4 LO3 Weight=10 marks TL=3 Learning stage = I and D Demonstrate critical and reflective thinking skills by observing and summarizing output of codes and figures Fail to adequately demonstrate critical and reflective thinking skills by observing and summarizing output of codes and figures, i.e., no summary and conclusion are drawn around the output (0 – 0.49) Adequately demonstrate critical and reflective thinking skills by observing
Answered 5 days AfterMay 27, 2021ITEC102

Answer To: 202130_ITEC102_Assessment3 ASSESSMENT GUIDE Unit: ITEC102 Python fundamentals for data science,...

Saravana answered on Jun 01 2021
144 Votes
{
"cells": [
{
"cell_type": "markdown",
"id": "38a80830",
"metadata": {},
"source": [
"## Task 1 (15 marks): Produce a summary statistics graph on current_weight, weight_a_year_ago, and height.\n"
]
},
{
"cell_type": "code",
"execution_count": 1,
"id": "853fd218",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
" Unnamed: 0 age weight2 wtyrago wtkg2 htm3 sex\n",
"0 0 39.0 88.636364 88.636364 88.64 180.0 1\n",
"1 1 64.0 75.000000 84.545455 75.00 155.0 2\n",
"2 2 87.0 61.818182 63.636364 61.82 NaN 2\n",
"3 3 51.0 100.000000 100.000000 100.00 183.0 1\n",
"4 4 35.0 63.636364 61.363636 63.64 170.0 2\n",
"(414509, 7)\n",
"count 398484.000000\n",
"mean 78.992337\n",
"std 19.546212\n",
"min 20.000000\n",
"25% 64.545455\n",
"50% 77.272727\n",
"75% 90.909091\n",
"max 309.090909\n",
"Name: weight2, dtype: float64\n",
"count 390399.000000\n",
"mean 79.721319\n",
"std 20.565164\n",
"min 22.727273\n",
"25% 64.545455\n",
"50% 77.272727\n",
"75% 90.909091\n",
"max 342.272727\n",
"Name: wtyrago, dtype: float64\n",
"count 409129.000000\n",
"mean 168.825190\n",
"std 10.352653\n",
"min 61.000000\n",
"25% 160.000000\n",
"50% 168.000000\n",
"75% 175.000000\n",
"max 236.000000\n",
"Name: htm3, dtype: float64\n"
]
}
],
"source": [
"import os\n",
"# set workin gdirectory to the folder containing BRFSS.csv file\n",
"os.chdir(\"/media/priyan/Files/GreyNodes/Assignment20\")\n",
"\n",
"# Use pandas to read CSV file\n",
"import pandas as pd\n",
"dat = pd.read_csv('brfss.csv') \n",
"\n",
"# print 5 rows of the dataset to get a peek in to the data\n",
"print(dat.head(n= 5))\n",
"\n",
"# verify the number of rows and column of the dataset\n",
"print(dat.shape)\n",
"\n",
"# Generate and print the summary statistics of variable 'weight' in the dataset\n",
"wgt_ss = dat['weight2'].describe(include='all')\n",
"print(wgt_ss)\n",
"\n",
"# Generate and print the summary statistics of variable 'last year weight' in the dataset\n",
"wgt_yr_ss = dat['wtyrago'].describe(include='all')\n",
"print(wgt_yr_ss)\n",
"\n",
"# Generate and print the summary statistics of variable 'height' in the dataset\n",
"hgt_ss = dat['htm3'].describe(include = 'all')\n",
"print(hgt_ss)"
]
},
{
"cell_type": "markdown",
"id": "939a48ef",
"metadata": {},
"source": [
"### Creating plot for Task 1"
]
},
{
"cell_type": "code",
"execution_count": 30,
"id": "318ca64f",
"metadata": {
"scrolled": true
},
"outputs": [
{
"data": {
"image/png": "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qJmiqGPiORBozG+iIhkiod3iUh20s6kIfCjQKSdSbN3KUREDYahj4hkRRRFLNqxCHlX8rBoxyKIvHiDiGSCoe+2yspKlJSUSK/S0lJ7l0RENrD99HZkXzQ+hi37Yja2n+atWohIHhj6bktMTISbm5v06t+/v71LIiIrE0URsemxUArGGzQrBSVi02PZ7SMiWWDou23hwoW4fv269Dpw4IC9SyIiKzN1+fSi8QbNelHPbh8RyQZD320qlQqurq7Sy9nZ2d4lEZEV3d3lM2G3j4jkgqGPiGTh7i6fCbt9RCQXDH1E1OyZunwKC//kKaBgt4+Imj2GPiJq9nR6Hc5fPw8Dan4MmwEGFJQUQKfnY9iIqPniEzmIqNlTtVAhe0Y2im9afgyburUaqhZ8DBsRNV8MfUQkCxo3DTRufAwbEckXD+8SERERyQBDHxEREZEMMPQRERERyQBDHxEREZEMMPQRERERyQBDHxEREZEMMPQRERERyQBDHxEREZEMMPQRERERyQBDHxEREZEMMPQRERERyQBDHxEREZEMMPQRERERyQBDHxEREZEMMPQRERERyQBDHxEREZEMMPQRERERyQBDHxEREZEMMPQRERERyQBDHxEREZEMMPQRERERyQBDHxEREZEMMPQRERERyQBDHxEREZEMMPQRERERyQBDHxEREZEMMPQRERERyQBDHxEREZEMMPQRERERyQBDHxEREZEMMPQRERERyQBDHxEREZEMMPQRERERyQBDHxEREZEMMPQRERERyQBDHxEREZEMMPQRERERyUALexdARLUruF6A4pvFFqerW6vh7erdgBUREVFTxNBHNsGgYh2VVZUIXheMy2WXLc7j6eyJ/Ln5ULVQNWBlRETU1DD0kdUxqFiPg9IBWjctisuKYYCh2nQFFNC4auCgdLBDdURE1JTwnD6yOlNQUVj448WgUneCICA+LL7GwAcABhgQHxYPQRAauDIiImpqGPrI6hhUrCvcLxzBHYOhFJRm45WCEsEdgxHuF26nyoiIqClh6CObYFCxHlOI1ot6s/F6Uc/wTEREdcbQRzbBoGJdd4dohmciIqovhj6yGQYV67k7RDM8ExFRffHqXbKNggIIxcVYqX4esw5m3x6px8rez0M4fBhQqwFv3rKlTgoKgOJihIsemHwrEMeKc9GzfSDCr3sAOTncl0REVCcMf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\n",
"text/plain": [
"
"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"import matplotlib.pyplot as plt\n",
"from textwrap import wrap\n",
"import numpy as np\n",
"plt.rcParams.update(plt.rcParamsDefault)\n",
"\n",
"fig, ax1 = plt.subplots()\n",
"\n",
"# wrap the x-axis label in the format as given in example\n",
"label1 = [ '\\n'.join(wrap(\"Current_weight\", 8)) ]\n",
"label2 = [ '\\n'.join(wrap(\"Weight_a_year_ago\", 9)) ]\n",
"\n",
"# plot the summary statistics of variable height\n",
"# the individual datapoints are provided with custom markers- colors and shape as in the example figure.\n",
"ax1.plot(label1, wgt_ss['mean'], 'b+') # Plot mean of variable weight with blue + marker\n",
"ax1.plot(label1, wgt_ss['std'], 'yo') # Plot standard deviation of variable weight with yellow circle\n",
"ax1.plot(label1, wgt_ss['mean'] + wgt_ss['std'], 'gv') # Plot mean + sd of variable weight with green lower triangle marker\n",
"ax1.plot(label1, wgt_ss['mean'] - wgt_ss['std'], 'g^') # Plot mean - sd of variable weight with green upper triangle marker\n",
"ax1.plot(label1, wgt_ss['50%'], 'bx') # Plot median of variable weight with blue x marker\n",
"ax1.plot(label1, wgt_ss['75%'], 'rv') # Plot 75% value of variable weight with red lower trianlge marker\n",
"ax1.plot(label1, wgt_ss['25%'], 'r^') # Plot 75% value of variable weight with red lower trianlge marker# Plot 75% value of variable height with red lower trianlge marker\n",
"ax1.plot(label1, wgt_ss['max'], 'kv') # Plot max value of variable weight with black lower triangle marker\n",
"ax1.plot(label1, wgt_ss['min'], 'k^') # Plot min of variable weight with black upper triangle marker\n",
"\n",
"ax1.plot(label2, wgt_yr_ss['mean'], 'b+') # Plot mean of variable last year weight with blue + marker\n",
"ax1.plot(label2, wgt_yr_ss['std'], 'yo') # Plot standard deviation of variable last year weight with yellow circle\n",
"ax1.plot(label2, wgt_yr_ss['mean'] + wgt_ss['std'], 'gv') # Plot mean + sd of variable last year weight with green lower triangle marker\n",
"ax1.plot(label2, wgt_yr_ss['mean'] - wgt_ss['std'], 'g^') # Plot mean - sd of variable last year weight with green upper triangle marker\n",
"ax1.plot(label2, wgt_yr_ss['50%'], 'bx') # Plot median of variable last year weight with blue x marker\n",
"ax1.plot(label2, wgt_yr_ss['75%'], 'rv') # Plot 75% value of variable last year weight with red lower trianlge marker\n",
"ax1.plot(label2, wgt_yr_ss['25%'], 'r^') # Plot 25% value of variable last year weight with red upper triangle marker\n",
"ax1.plot(label2, wgt_yr_ss['max'], 'kv') # Plot max value of variable last year weight with black lower triangle marker\n",
"ax1.plot(label2, wgt_yr_ss['min'], 'k^') # Plot min of variable last year weight with black upper triangle marker\n",
"\n",
"\n",
"ax1.set_ylabel('weight', fontweight='bold',rotation=0,labelpad=25) # X axis label is bolded and made horizontal\n",
"\n",
"ax2 = ax1.twiny() # create a twin Y axis\n",
" \n",
"ax2.plot(\"Height\", hgt_ss['mean'], 'b+', label = 'Mean') # Plot mean of variable height with blue + marker\n",
"ax2.plot(\"Height\", hgt_ss['std'], 'yo', label = 'STD') # Plot standard deviation of variable height with yellow circle\n",
"ax2.plot(\"Height\", hgt_ss['mean'] + wgt_ss['std'], 'gv', label = 'Mean+SD') # Plot mean + sd of variable height with green lower triangle marker\n",
"ax2.plot(\"Height\", hgt_ss['mean'] - wgt_ss['std'], 'g^', label = 'Mean-SD') # Plot mean - sd of variable height with green upper triangle marker\n",
"ax2.plot(\"Height\", hgt_ss['50%'], 'bx', label = 'Median' ) # Plot median of variable height with blue x marker\n",
"ax2.plot(\"Height\", hgt_ss['75%'], 'rv', label = '75%') # Plot 75% value of variable height with red lower trianlge marker\n",
"ax2.plot(\"Height\", hgt_ss['25%'], 'r^', label = '25%') # Plot 25% value of variable height with red lower trianlge marker\n",
"ax2.plot(\"Height\", hgt_ss['max'], 'kv', label = 'Max') # Plot max value of variable height with black lower triangle marker\n",
"ax2.plot(\"Height\", hgt_ss['min'], 'k^', label = 'Min') # Plot min of variable height with black upper triangle marker\n",
"# necessary labels are added for legend\n",
"\n",
"ax2.xaxis.tick_bottom() #X axis label of second y axis is formaated\n",
"ax2.legend() # legend information added \n",
"\n",
"\n",
"ax1.axis([-1, 5, 0, 375]) # X axis location and Y axis limits are defined for weight axis plot\n",
"ax2.axis([-5, 5, 0, 375]) # X axis location and Y axis limits are defined for second 'height' axis plot\n",
"\n",
"rng = np.arange(0, 375, 75) # y ticks range defined\n",
"ax1.set_yticks(rng) # Y ticks set for weight axis plots\n",
"\n",
"\n",
"\n",
"ax2 = ax1.twinx() # second Y axis ticks and values generated\n",
"ax2.set_ylabel('height', fontweight='bold',rotation=0,labelpad=25) # second Y axis label generated and rotated\n",
"ax2.set_yticks(rng)\n",
"\n",
"plt.setp( ax1.get_yticklabels(), visible=False) # Y axis tick values removed only ticks are visible\n",
"plt.setp( ax2.get_yticklabels(), visible=False) # Y axis tick values removed only ticks are visible for second y axis\n",
"\n",
"\n",
"plt.savefig(\"test.svg\") # plot is saved as 'test.svg' in the working directory set above\n",
"\n",
"plt.show() # generated plot is displayed\n"
]
},
{
"cell_type": "markdown",
"id": "7743956b",
"metadata": {},
"source": [
"## Task 2 (15 marks): Calculate correlation"
]
},
{
"cell_type": "code",
"execution_count": 31,
"id": "ee789df2",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
" Unnamed: 0 age weight2 wtyrago wtkg2 htm3 sex weight_change\n",
"0 0 39.0 88.636364 88.636364 88.64 180.0 1 0.000000\n",
"1 1 64.0 75.000000 84.545455 75.00 155.0 2 -9.545455\n",
"3 3 51.0 100.000000 100.000000 100.00 183.0 1 0.000000\n",
"4 4 35.0 63.636364 61.363636 63.64 170.0 2 2.272727\n",
"5 5 62.0 70.454545 70.454545 70.45 173.0 2 0.000000\n",
"Correlation between weight change and current weight: 0.03413217522408281\n",
"Correlation between weight change and weight a year ago: -0.31911696303346493\n",
"Correlation between weight change and age: -0.06867582903526576\n",
"Correlation between weight change and weight a year ago: -0.31911696303346493 is the most correlated\n"
]
}
],
"source": [
"# weight change variable is calculated\n",
"\n",
"dat['weight_change'] = dat['weight2'] - dat['wtyrago'] # new weight change variable column is computed\n",
"\n",
"print(dat.head(n= 5)) # new dataframe with added column for 'weight change'\n",
"\n",
"dat = dat.dropna()\n",
"\n",
"# correlation between weight_change and current weight\n",
"corr1 = dat['weight2'].corr(dat['weight_change'])\n",
"print('Correlation between weight change and current weight: ' + str(corr1))\n",
"\n",
"# correlation between weight_change and weight_a_year_ago\n",
"corr2 = dat['wtyrago'].corr(dat['weight_change'])\n",
"print('Correlation between weight change and weight a year ago: ' + str(corr2))\n",
"\n",
"# correlation between weight_change and age\n",
"corr3 = dat['age'].corr(dat['weight_change'])\n",
"print('Correlation between weight change and age: ' + str(corr3))\n",
"\n",
"print('Correlation between weight change and weight a year ago: ' + str(corr2) + ' is the most correlated')\n"
]
},
{
"cell_type": "markdown",
"id": "0f2e1075",
"metadata": {},
"source": [
"#### Plot the correlation relation using scatterplot"
]
},
{
"cell_type": "code",
"execution_count": 32,
"id": "c4ca4fc1",
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"The PostScript backend does not support transparency; partially transparent artists will be rendered opaque.\n",
"The PostScript backend does not support transparency; partially transparent artists will be rendered opaque.\n"
]
},
{
"data": {
"image/png":...
SOLUTION.PDF

Answer To This Question Is Available To Download

Related Questions & Answers

More Questions »

Submit New Assignment

Copy and Paste Your Assignment Here