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)
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)
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)
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)
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)