Assignment 2

  1. Create two models for the relationship between height and weight based on gender
  2. Modify the code in Assignment 1 to ask for a person's gender as well as their height to produce an estimate of a person's weight using the models you created

  3. Find the weights and use those in your function (i.e. don't generate a model each time)


In [1]:
import pandas as pd
%matplotlib inline
import matplotlib.pyplot as plt # package for doing plotting (necessary for adding the line)
import statsmodels.formula.api as smf # package we'll be using for linear regression

In [40]:
df = pd.read_csv("data/heights_weights_genders.csv")
df.tail()
df.head()


Out[40]:
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

In [29]:
def female_lm(your_file):
    df = pd.read_csv(your_file)
    female = df[df['Gender'] == 'Female']
    female_lm = smf.ols(formula="Weight~Height",data=female).fit()
    return female_lm.params

In [30]:
female_lm("data/heights_weights_genders.csv").Intercept


Out[30]:
-246.01326574667272

In [26]:
def male_lm(your_file):
    df = pd.read_csv(your_file)
    male = df[df['Gender'] == 'Male']
    male_lm = smf.ols(formula="Weight~Height",data=male).fit()
    return male_lm.params

In [27]:
male_lm("data/heights_weights_genders.csv").Intercept


Out[27]:
-224.49884070545866

In [6]:
male_lm = smf.ols(formula="Weight~Height",data=male).fit()
male_lm.params


Out[6]:
Intercept   -224.498841
Height         5.961774
dtype: float64

In [28]:
female_lm = smf.ols(formula="Weight~Height",data=female).fit()
female_lm.params


Out[28]:
Intercept   -246.013266
Height         5.994047
dtype: float64

In [36]:
def weight_predictor(gender,your_height):
    if gender == "Male":
        m_weight = your_height * male_lm("data/heights_weights_genders.csv").Height + male_lm("data/heights_weights_genders.csv").Intercept
        return m_weight
    else:
        f_weight = your_height * female_lm("data/heights_weights_genders.csv").Height + female_lm("data/heights_weights_genders.csv").Intercept
        return f_weight

In [41]:
weight_predictor("Male",73.847017)


Out[41]:
215.76037134150502

In [42]:
weight_predictor("Female",73.847017)


Out[42]:
196.62919651927902

In [ ]: