InĀ [9]:
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
import numpy as np
import scipy as sp
InĀ [10]:
# 1
df = pd.read_csv('epa-sea-level.csv')
df
Out[10]:
Year CSIRO Adjusted Sea Level Lower Error Bound Upper Error Bound NOAA Adjusted Sea Level
0 1880 0.000000 -0.952756 0.952756 NaN
1 1881 0.220472 -0.732283 1.173228 NaN
2 1882 -0.440945 -1.346457 0.464567 NaN
3 1883 -0.232283 -1.129921 0.665354 NaN
4 1884 0.590551 -0.283465 1.464567 NaN
... ... ... ... ... ...
129 2009 8.586614 8.311024 8.862205 8.046354
130 2010 8.901575 8.618110 9.185039 8.122973
131 2011 8.964567 8.661417 9.267717 8.053065
132 2012 9.326772 8.992126 9.661417 8.457058
133 2013 8.980315 8.622047 9.338583 8.546648

134 rows Ɨ 5 columns

InĀ [11]:
# 2
def draw_sea_level_data(df: pd.DataFrame = df):
    fig, ax = plt.subplots(figsize = (8, 5))
    sns.scatterplot(data=df, x = 'Year', y = 'CSIRO Adjusted Sea Level', ax=ax)
    ax.set_xlabel('Year')
    ax.set_ylabel('Sea Level (inches)')
    ax.set_title('Rise in Sea Level')
    ax.grid(True, ls = ':')

    plt.tight_layout()
    plt.savefig('SIRO_Adjusted_Sea_Level_scatter_plot.png')

draw_sea_level_data(df=df)
No description has been provided for this image
InĀ [12]:
def reg(df: pd.DataFrame = df):
    pred_df = df.copy()
        
    slope, intercept, r, p, se = sp.stats.linregress(pred_df['Year'], pred_df['CSIRO Adjusted Sea Level'])
    return slope, intercept
InĀ [13]:
# 3.1
def sea_level_reg(df: pd.DataFrame = df):
    df = df.copy()
    
    slope, intercept = reg(df=df)
    
    fig, ax = plt.subplots(figsize = (8, 5))
    sns.scatterplot(data=df, x = 'Year', y = 'CSIRO Adjusted Sea Level', ax=ax, label = 'original data')
    ax.plot(df['Year'], intercept + slope*df['Year'], c = 'r', label = 'fitted line')
    ax.set_xlabel('Year')
    ax.set_ylabel('Sea Level (inches)')
    ax.set_title('Rise in Sea Level')
    ax.grid(True, ls = ':')
    ax.legend()

    plt.tight_layout()
    plt.savefig('SIRO_Adjusted_Sea_Level_regression_curve.png')

sea_level_reg(df=df)
No description has been provided for this image
InĀ [14]:
# 3.2
def sea_level_pred_overall(df: pd.DataFrame = df, pred_to_date: int = None):
    df = df.copy()
    extended_time = np.arange(df['Year'].min(), pred_to_date)
    
    slope, intercept = reg(df=df)
    
    fig, ax = plt.subplots(figsize = (8, 5))
    sns.scatterplot(data=df, x = 'Year', y = 'CSIRO Adjusted Sea Level', ax=ax, label = 'original data')
    ax.plot(extended_time, intercept + slope*extended_time, c = 'r', label = 'fitted line')
    ax.set_xlabel('Year')
    ax.set_ylabel('Sea Level (inches)')
    ax.set_title('Rise in Sea Level')
    ax.grid(True, ls = ':')
    ax.legend()

    plt.tight_layout()
    plt.savefig('SIRO_Adjusted_Sea_Level_regression_curve_with_prediction_overall.png')

sea_level_pred_overall(df=df, pred_to_date=2050)
No description has been provided for this image
InĀ [15]:
# 4.1
def sea_level_reg_from_current_year(df: pd.DataFrame = df, current_year: int = None):
    df = df.copy()
    df = df[df['Year'] >= current_year]
    
    slope, intercept = reg(df=df)
    
    fig, ax = plt.subplots(figsize = (8, 5))
    sns.scatterplot(data=df, x = 'Year', y = 'CSIRO Adjusted Sea Level', ax=ax, label = 'original data')
    ax.plot(df['Year'], intercept + slope*df['Year'], c = 'r', label = 'fitted line')
    ax.set_xlabel('Year')
    ax.set_ylabel('Sea Level (inches)')
    ax.set_title('Rise in Sea Level')
    ax.grid(True, ls = ':')
    ax.legend()

    plt.tight_layout()
    plt.savefig('SIRO_Adjusted_Sea_Level_regression_curve_from_current_year.png')
sea_level_reg_from_current_year(df=df, current_year=2000)
No description has been provided for this image
InĀ [16]:
# 4.2
def sea_level_pred_from_current_year_to_date(df: pd.DataFrame = df, current_year: int = None, pred_to_date: int = None):
    df = df.copy()
    df = df[df['Year'] >= current_year]
    extended_time = np.arange(df['Year'].min(), pred_to_date)
    
    slope, intercept = reg(df=df)
    
    fig, ax = plt.subplots(figsize = (8, 5))
    sns.scatterplot(data=df, x = 'Year', y = 'CSIRO Adjusted Sea Level', ax=ax, label = 'original data')
    ax.plot(extended_time, intercept + slope*extended_time, c = 'r', label = 'fitted line')
    ax.set_xlabel('Year')
    ax.set_ylabel('Sea Level (inches)')
    ax.set_title('Rise in Sea Level')
    ax.grid(True, ls = ':')
    ax.legend()

    plt.tight_layout()
    plt.savefig('SIRO_Adjusted_Sea_Level_regression_curve_from_current_year_to_date.png')
    
sea_level_pred_from_current_year_to_date(df=df, current_year=2000, pred_to_date=2050)
No description has been provided for this image