Skip to content

Instantly share code, notes, and snippets.

@annaleighsmith
Last active October 22, 2021 17:08
Show Gist options
  • Save annaleighsmith/a4e5f8cfeccf8812536f795eb444a0a6 to your computer and use it in GitHub Desktop.
Save annaleighsmith/a4e5f8cfeccf8812536f795eb444a0a6 to your computer and use it in GitHub Desktop.
linear_regression_helper
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "markdown",
"id": "5faf7d98",
"metadata": {},
"source": [
"## linear regression helper\n",
"\n",
"\n",
"A simple function that helps format the aesthetics and pick the serialized columns from __pandas DataFrames__, convert those __numpy ndarray__ while fitting a linear model with __sklearn__\n",
"\n",
"Source and the income.data.csv file are here:\n",
"> https://www.scribbr.com/statistics/simple-linear-regression/"
]
},
{
"cell_type": "code",
"execution_count": 3,
"id": "e7d4f4a8",
"metadata": {},
"outputs": [],
"source": [
"# imports\n",
"import numpy as np\n",
"import matplotlib.pyplot as plt\n",
"import pandas as pd\n",
"from sklearn.linear_model import LinearRegression"
]
},
{
"cell_type": "code",
"execution_count": 4,
"id": "de9020f7",
"metadata": {},
"outputs": [],
"source": [
"size_dict = {\n",
" 'square_xs': (4, 4),\n",
" 'square_sm': (6, 6),\n",
" 'square_md': (8, 8),\n",
" 'square_lg': (12, 12),\n",
" 'square_xl': (16, 16),\n",
" 'rect_xs': (4, 2.5),\n",
" 'rect_sm': (6, 3.75),\n",
" 'rect_md': (8, 5),\n",
" 'rect_lg': (12, 7.5),\n",
" 'rect_xl': (16, 10),\n",
"}\n",
"\n",
"\n",
"def calcLinearReg(df_X: pd.DataFrame, df_Y: pd.DataFrame, col_num_X: int, col_num_Y: int):\n",
" X = df_X.iloc[:, col_num_X].values.reshape(-1, 1)\n",
" Y = df_Y.iloc[:, col_num_Y].values.reshape(-1, 1)\n",
" linear_regressor = LinearRegression() # create object for the class\n",
" linear_regressor.fit(X, Y) # perform linear regression\n",
" Y_pred = linear_regressor.predict(X) # make predictions\n",
" return [X, Y, Y_pred]\n",
"\n",
"\n",
"def displayLinearReg(X: np.ndarray, Y: np.ndarray, Y_pred: np.ndarray,\n",
" colorA: str = 'blue', colorB: str = 'black', title: str = '', xlabel: str = '', ylabel: str = '',\n",
" size='square_md', font_sizes: tuple = (14, 12, 12)):\n",
" \n",
" \"\"\"displays matplotlib plot with inputs of numpy arrays\"\"\"\n",
"\n",
" plt.rcParams[\"figure.figsize\"] = size_dict[size]\n",
" fig = plt.figure()\n",
" plt.scatter(X, Y, color=colorA)\n",
" plt.plot(X, Y_pred, color=colorB)\n",
" plt.title(title, fontsize=font_sizes[0])\n",
" plt.xlabel(xlabel, fontsize=font_sizes[1])\n",
" plt.ylabel(ylabel, fontsize=font_sizes[2])\n",
" return plt.show()"
]
},
{
"cell_type": "code",
"execution_count": 5,
"id": "110f2162",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Index(['income', 'happiness'], dtype='object')\n"
]
}
],
"source": [
"df = pd.read_csv('income.data.csv')\n",
"df = df.iloc[:, 1:]\n",
"\n",
"# just to double check we want it indexed at 0 and 1 for income and happiness respectivly\n",
"print(df.columns)"
]
},
{
"cell_type": "code",
"execution_count": 6,
"id": "ca1a2be8",
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x432 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"results = calcLinearReg(\n",
" df_X=df, # independent var\n",
" df_Y=df, # dependent var\n",
" col_num_X=0,\n",
" col_num_Y=1\n",
")\n",
"\n",
"displayLinearReg(\n",
" X=results[0],\n",
" Y=results[1],\n",
" Y_pred=results[2],\n",
" colorA='pink',\n",
" colorB='green',\n",
" title='Income and Happiness Linear Regression',\n",
" xlabel='Income',\n",
" ylabel='Happiness',\n",
" size='square_sm',\n",
" font_sizes=(18, 14, 14)\n",
")"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3 (ipykernel)",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.9.7"
}
},
"nbformat": 4,
"nbformat_minor": 5
}
@annaleighsmith
Copy link
Author

a function that uses sklearn.linear_model and pandas DataFrame to standardize and simplify the production of linear regressions

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment