Assignment 1

Use the data from heights_weights_genders.csv to create a simple predictor that takes in a person's height and guesses their weight based on a model using all the data, regardless of gender. To do this, find the parameters (lm.params) and use those in your function (i.e. don't generate a model each time)


In [1]:
import pandas as pd

In [2]:
import statsmodels.formula.api as smf

In [4]:
df = pd.read_csv("heights_weights_genders.csv")

In [5]:
df


Out[5]:
Gender Height Weight
0 Male 73.847017 241.893563
1 Male 68.781904 162.310473
2 Male 74.110105 212.740856
3 Male 71.730978 220.042470
4 Male 69.881796 206.349801
5 Male 67.253016 152.212156
6 Male 68.785081 183.927889
7 Male 68.348516 167.971110
8 Male 67.018950 175.929440
9 Male 63.456494 156.399676
10 Male 71.195382 186.604926
11 Male 71.640805 213.741169
12 Male 64.766329 167.127461
13 Male 69.283070 189.446181
14 Male 69.243732 186.434168
15 Male 67.645620 172.186930
16 Male 72.418317 196.028506
17 Male 63.974326 172.883470
18 Male 69.640060 185.983958
19 Male 67.936005 182.426648
20 Male 67.915050 174.115929
21 Male 69.439440 197.731422
22 Male 66.149132 149.173566
23 Male 75.205974 228.761781
24 Male 67.893196 162.006652
25 Male 68.144033 192.343977
26 Male 69.089631 184.435174
27 Male 72.800844 206.828189
28 Male 67.421242 175.213922
29 Male 68.496415 154.342639
... ... ... ...
9970 Female 65.618737 151.500389
9971 Female 64.640247 155.318297
9972 Female 60.653733 123.084293
9973 Female 60.737031 120.926500
9974 Female 65.393947 143.017835
9975 Female 66.251923 124.019917
9976 Female 61.475904 121.387236
9977 Female 64.494838 149.402547
9978 Female 57.375759 114.192209
9979 Female 62.056012 125.135897
9980 Female 60.472262 110.768229
9981 Female 60.443264 135.559390
9982 Female 69.868511 177.992066
9983 Female 65.830726 132.827889
9984 Female 59.047029 111.707369
9985 Female 68.041065 170.514213
9986 Female 63.352698 141.906510
9987 Female 65.610243 151.169475
9988 Female 59.538729 121.244876
9989 Female 60.955084 95.686674
9990 Female 63.179498 141.266100
9991 Female 62.636675 102.853563
9992 Female 62.077832 138.691680
9993 Female 60.030434 97.687432
9994 Female 59.098250 110.529686
9995 Female 66.172652 136.777454
9996 Female 67.067155 170.867906
9997 Female 63.867992 128.475319
9998 Female 69.034243 163.852461
9999 Female 61.944246 113.649103

10000 rows × 3 columns


In [18]:
df.head()


Out[18]:
Gender Height Weight weight_prediction
0 Male 73.847017 241.893563 219.161506
1 Male 68.781904 162.310473 180.072571
2 Male 74.110105 212.740856 221.191835
3 Male 71.730978 220.042470 202.831427
4 Male 69.881796 206.349801 188.560753

In [19]:
lm = smf.ols(formula="Weight~Height",data=df).fit()

In [20]:
lm.params


Out[20]:
Intercept   -350.737192
Height         7.717288
dtype: float64

In [21]:
height_input = input("What is your height in inches?")


What is your height in inches?73.847017

In [22]:
height_input


Out[22]:
'73.847017'

In [23]:
weight_prediction = -350.737192 + (7.717288 * float(height_input))
weight_prediction


Out[23]:
219.16150612989594

In [26]:
def weight_estimation(individual_height): 
    return (-350.737192 + (7.717288 * float(individual_height)))

In [27]:
df['weight_prediction '] = df['Height'].apply(weight_estimation)

In [28]:
df


Out[28]:
Gender Height Weight weight_prediction
0 Male 73.847017 241.893563 219.161506
1 Male 68.781904 162.310473 180.072571
2 Male 74.110105 212.740856 221.191835
3 Male 71.730978 220.042470 202.831427
4 Male 69.881796 206.349801 188.560753
5 Male 67.253016 152.212156 168.273699
6 Male 68.785081 183.927889 180.097090
7 Male 68.348516 167.971110 176.727987
8 Male 67.018950 175.929440 166.467344
9 Male 63.456494 156.399676 138.974848
10 Male 71.195382 186.604926 198.698077
11 Male 71.640805 213.741169 202.135534
12 Male 64.766329 167.127461 149.083223
13 Male 69.283070 189.446181 183.940213
14 Male 69.243732 186.434168 183.636632
15 Male 67.645620 172.186930 171.303537
16 Male 72.418317 196.028506 208.135814
17 Male 63.974326 172.883470 142.971104
18 Male 69.640060 185.983958 186.695207
19 Male 67.936005 182.426648 173.544523
20 Male 67.915050 174.115929 173.382810
21 Male 69.439440 197.731422 185.146964
22 Male 66.149132 149.173566 159.754710
23 Male 75.205974 228.761781 229.648966
24 Male 67.893196 162.006652 173.214157
25 Male 68.144033 192.343977 175.149935
26 Male 69.089631 184.435174 182.447392
27 Male 72.800844 206.828189 211.087884
28 Male 67.421242 175.213922 169.571952
29 Male 68.496415 154.342639 177.869372
... ... ... ... ...
9970 Female 65.618737 151.500389 155.661499
9971 Female 64.640247 155.318297 148.110213
9972 Female 60.653733 123.084293 117.345135
9973 Female 60.737031 120.926500 117.987966
9974 Female 65.393947 143.017835 153.926727
9975 Female 66.251923 124.019917 160.547979
9976 Female 61.475904 121.387236 123.690067
9977 Female 64.494838 149.402547 146.988044
9978 Female 57.375759 114.192209 92.048061
9979 Female 62.056012 125.135897 128.166924
9980 Female 60.472262 110.768229 115.944670
9981 Female 60.443264 135.559390 115.720883
9982 Female 69.868511 177.992066 188.458233
9983 Female 65.830726 132.827889 157.297478
9984 Female 59.047029 111.707369 104.945733
9985 Female 68.041065 170.514213 174.355303
9986 Female 63.352698 141.906510 138.173821
9987 Female 65.610243 151.169475 155.595951
9988 Female 59.538729 121.244876 108.740323
9989 Female 60.955084 95.686674 119.670748
9990 Female 63.179498 141.266100 136.837192
9991 Female 62.636675 102.853563 132.648068
9992 Female 62.077832 138.691680 128.335314
9993 Female 60.030434 97.687432 112.534954
9994 Female 59.098250 110.529686 105.341024
9995 Female 66.172652 136.777454 159.936222
9996 Female 67.067155 170.867906 166.839356
9997 Female 63.867992 128.475319 142.150498
9998 Female 69.034243 163.852461 182.019944
9999 Female 61.944246 113.649103 127.304393

10000 rows × 4 columns


In [29]:
df.head()


Out[29]:
Gender Height Weight weight_prediction
0 Male 73.847017 241.893563 219.161506
1 Male 68.781904 162.310473 180.072571
2 Male 74.110105 212.740856 221.191835
3 Male 71.730978 220.042470 202.831427
4 Male 69.881796 206.349801 188.560753

In [ ]: