Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save analyticsindiamagazine/d07038c1e42c2269ddaaf868eb8cd58a to your computer and use it in GitHub Desktop.
Save analyticsindiamagazine/d07038c1e42c2269ddaaf868eb8cd58a to your computer and use it in GitHub Desktop.
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [],
"source": [
"#1 Importing necessary libraries\n",
"import numpy as np\n",
"import pandas as pd"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"\n",
" ---------------------------------------- \n",
" ABV Ratings Cellar Temperature Score\n",
"0 7.5 1 40-45 4.08\n",
"1 5.3 22 40-45 3.82\n",
"2 9.0 1 45-50 4.03\n",
"3 4.6 1 35-40 4.00\n",
"4 6.9 1 45-50 3.75\n",
"5 7.9 32 40-45 4.26\n",
"6 4.7 141 35-40 3.47\n",
"7 5.6 1 40-45 3.70\n",
"8 5.0 1 40-45 3.90\n",
"9 5.4 12 40-45 3.79\n"
]
}
],
"source": [
"#2 Importing the data set\n",
"dataset = pd.read_csv('beer_data.csv')\n",
"\n",
"#Printing first 10 rows of the dataset\n",
"print(\"\\n\",'-'*40,\"\\n\",dataset.head(10))"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"\n",
"----------------------------\n",
" ABV Ratings Minimum_Cellar_Temp Maximum_Cellar_Temp Score\n",
"0 7.5 1 40 45 4.08\n",
"1 5.3 22 40 45 3.82\n",
"2 9.0 1 45 50 4.03\n",
"3 4.6 1 35 40 4.00\n",
"4 6.9 1 45 50 3.75\n",
"5 7.9 32 40 45 4.26\n",
"6 4.7 141 35 40 3.47\n",
"7 5.6 1 40 45 3.70\n",
"8 5.0 1 40 45 3.90\n",
"9 5.4 12 40 45 3.79\n",
"\n",
"----------------------------\n",
"\n",
"<class 'pandas.core.frame.DataFrame'>\n",
"RangeIndex: 1631 entries, 0 to 1630\n",
"Data columns (total 5 columns):\n",
"ABV 1631 non-null float64\n",
"Ratings 1631 non-null int64\n",
"Minimum_Cellar_Temp 1631 non-null int64\n",
"Maximum_Cellar_Temp 1631 non-null int64\n",
"Score 1631 non-null float64\n",
"dtypes: float64(2), int64(3)\n",
"memory usage: 63.8 KB\n",
"None\n"
]
}
],
"source": [
"#3 Dealing with the categorical data\n",
"\n",
"#spliting Cellar Temperature into Maximum and Minimum based on the given data and converting the type from str to int\n",
"dataset['Minimum_Cellar_Temp'] = dataset['Cellar Temperature'].apply(lambda x : int(x.split('-')[0].strip()))\n",
"dataset['Maximum_Cellar_Temp'] = dataset['Cellar Temperature'].apply(lambda x : int(x.split('-')[1].strip()))\n",
"\n",
"#New dataset with selected features\n",
"dataset = dataset[['ABV', 'Ratings','Minimum_Cellar_Temp','Maximum_Cellar_Temp', 'Score']]\n",
"\n",
"#Printing first 10 rows of the dataset\n",
"print(\"\\n----------------------------\\n\",dataset.head(10))\n",
"\n",
"#Printing the summary of the dataset\n",
"print(\"\\n----------------------------\\n\")\n",
"print(dataset.info())"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"[Text(0.5, 0, 'ABV'),\n",
" Text(1.5, 0, 'Ratings'),\n",
" Text(2.5, 0, 'Minimum_Cellar_Temp'),\n",
" Text(3.5, 0, 'Maximum_Cellar_Temp'),\n",
" Text(4.5, 0, 'Score')]"
]
},
"execution_count": 4,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 720x720 with 2 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"#A simple correlation plot usong seaborn. The below plot shows how the different variables correlate with each other\n",
"import seaborn as sns\n",
"import matplotlib.pyplot as plt\n",
"corr = dataset.corr()\n",
"fig, ax = plt.subplots(figsize=(10,10))\n",
"ax = sns.heatmap(\n",
" corr, \n",
" vmin=-1, vmax=1, center=0,\n",
" square=True,\n",
" annot=True,\n",
" linewidths=.5,\n",
" cmap=\"YlGnBu\" )\n",
"\n",
"#Rotating labels on x axis\n",
"ax.set_xticklabels(\n",
" ax.get_xticklabels(),\n",
" rotation=35,\n",
" horizontalalignment='right'\n",
")"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [],
"source": [
"#4 Classifying dependent and independent variables\n",
"\n",
"#All columns except the last column are independent features- (Selecting every column except Score)\n",
"X = dataset.iloc[:,:-1].values\n",
"\n",
"#Only the last column is the dependent feature or the target variable(Score)\n",
"y = dataset.iloc[:,-1].values"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [],
"source": [
"#5 Creating training and test sets\n",
"from sklearn.model_selection import train_test_split\n",
"X_train, X_test, y_train, y_test = train_test_split(X,y,test_size = 0.2,random_state = 0)\n",
"\n",
"#################Data Preprocessing Ends #################################"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"\n",
"\n",
"Training Set :\n",
"----------------\n",
"\n",
"X = \n",
" [[ 5.2 5. 40. 45. ]\n",
" [ 5.6 1. 35. 40. ]\n",
" [ 4.8 2. 40. 45. ]\n",
" ...\n",
" [ 6. 1. 40. 45. ]\n",
" [ 4.5 2. 40. 45. ]\n",
" [ 7.4 4. 40. 45. ]]\n",
"y = \n",
" [3.79 3.9 3.44 ... 4.35 3.29 3.74]\n",
"\n",
"\n",
"Test Set :\n",
"----------------\n",
"\n",
"X = \n",
" [[ 4.8 2. 35. 40. ]\n",
" [ 5.1 0. 35. 40. ]\n",
" [ 4. 3. 40. 45. ]\n",
" ...\n",
" [ 5.1 0. 35. 40. ]\n",
" [ 5. 17. 35. 40. ]\n",
" [ 8. 24. 45. 50. ]]\n",
"y = \n",
" [3.13 0. 2.82 3.91 4.38 4.25 3.82 0. 3.49 2. 3.4 3.53 3.89 3.64\n",
" 3.84 4.17 3.71 4.31 3.9 3. 3.83 3.43 0. 3.98 3.81 0. 3.84 3.72\n",
" 2.97 4.12 3.22 0. 3.77 0. 4.27 4.07 3.8 4. 3.1 3.46 3.75 3.86\n",
" 3.72 3.55 4.16 4.29 4.18 3.86 4.23 4.11 3.72 1.95 3.87 1.99 3.84 3.75\n",
" 0. 3.77 3.25 3.87 4.25 3.73 3.84 0. 3.5 3.59 4.29 3.17 3.37 4.29\n",
" 3.67 3.4 3.9 4.21 4.09 3.56 3.25 3.73 3.79 3.98 3.63 4.04 4.31 3.96\n",
" 4.24 3.71 2.73 0. 3.65 3.8 3.58 4.5 0. 4. 0. 3.71 3.61 3.63\n",
" 3.06 3.58 4.09 3.12 3.59 3.73 4.06 3.5 3.81 3.43 3.7 3.97 3.58 3.99\n",
" 4.14 3.5 0. 4.25 3.41 4.26 4.4 3.89 3.75 0. 3.8 3.89 3.92 2.72\n",
" 4.72 4.08 3.9 3.8 3.88 0. 3.27 3.59 3.98 3.79 3.75 4.03 2. 3.94\n",
" 3.37 3.98 3.32 0. 3.11 3.15 4.33 3. 4.02 2.92 3.73 0. 0. 3.91\n",
" 0. 4.43 0. 0. 4.28 3.8 3.58 4.01 3.56 4. 2.79 3.88 4.16 4.25\n",
" 3.69 4.29 4.14 4.24 3.86 3.65 3.92 4.34 3.76 3.13 3.26 4.05 3.86 3.75\n",
" 3.76 3.87 0. 4.02 3.5 3.12 3.83 3.43 0. 3.88 3.75 3.96 0. 4.06\n",
" 4.25 2.75 3.65 3.3 3.88 3.78 4.03 3.75 4.08 4.08 4.04 0. 3.25 0.\n",
" 4. 3.38 3.63 0. 3.72 3.79 0. 0. 4.09 3.65 4.13 3.63 4. 0.\n",
" 5. 0. 3.76 3.72 3.85 3.5 0. 2.1 3. 0. 0. 3.66 3.76 3.46\n",
" 3.82 4.04 3.72 1.95 3.89 3.91 3.73 4.85 0. 3.79 4.49 4.14 3.87 3.68\n",
" 3.49 0. 3.65 4.35 4.59 4.25 3.86 4.07 3.73 0. 4.3 3.87 3.51 3.79\n",
" 3.62 3.68 3.63 3.42 0. 4.05 3.61 4.18 3.84 3.73 4.05 3.66 3.69 3.6\n",
" 3.56 4.25 4.38 3.89 3.69 3.79 0. 3.56 3.96 3.29 3.69 0. 0. 4.14\n",
" 3.13 1.31 3.72 3.79 4.1 0. 4.28 3.67 0. 3.94 4.35 3.94 3.43 4.08\n",
" 3.61 4.47 3.83 3.15 3.96 3.71 4.25 3.5 4.04 4. 3.52 4.39 3.77 4.15\n",
" 2.96 4.13 0. 4.05 4.14]\n"
]
}
],
"source": [
"print(\"\\n\\nTraining Set :\\n----------------\\n\")\n",
"print(\"X = \\n\", X_train)\n",
"print(\"y = \\n\", y_train)\n",
"\n",
"print(\"\\n\\nTest Set :\\n----------------\\n\")\n",
"print(\"X = \\n\",X_test)\n",
"print(\"y = \\n\", y_test)"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {},
"outputs": [],
"source": [
"\"\"\" Multiple Linear regression \"\"\"\n",
"\n",
"#6 Creating the Regressor and training it with the training set\n",
"\n",
"from sklearn.linear_model import LinearRegression\n",
"regressor = LinearRegression(normalize = True)"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"LinearRegression(copy_X=True, fit_intercept=True, n_jobs=None, normalize=True)"
]
},
"execution_count": 10,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"#7 Feeding the data and training the model\n",
"regressor.fit(X_train,y_train)"
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {},
"outputs": [],
"source": [
"#8 Predicting the Score for test set observations\n",
"y_pred = regressor.predict(X_test)"
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"\n",
"----------------------------\n",
"Predictions = \n",
" [2.89362768 2.90755783 3.07058711 3.48413975 3.65433446 2.9310254\n",
" 3.12667115 2.90202462 3.11905124 3.1177165 3.13259288 3.13790974\n",
" 2.84802728 2.95505068 3.58824928 3.15091575 2.85489522 3.2262689\n",
" 3.13565087 3.184115 3.23524861 3.64880125 3.11084856 5.82687381\n",
" 3.37539607 3.53546761 3.54748025 3.08718673 3.12458445 3.27929496\n",
" 3.23944708 3.54100082 3.16387461 3.19384668 3.56883606 3.08031878\n",
" 3.38869332 3.2505135 2.98405145 3.05685121 3.14538254 3.14972514\n",
" 3.13259288 3.26844786 3.23391387 3.2241822 4.24094226 3.7083318\n",
" 3.08451725 3.67646729 3.57475778 3.1177165 3.21864899 2.91576051\n",
" 3.23381064 3.14538254 3.15511422 3.17858179 3.20071463 3.12189289\n",
" 3.30031237 3.25031924 3.25604671 3.16618064 2.88675973 3.4108733\n",
" 3.61980047 3.15758944 2.9666748 6.49031035 3.39274468 2.96822886\n",
" 3.06791763 3.54080656 2.96002618 3.16331691 3.1121833 3.01936247\n",
" 3.22799215 3.13984934 3.10186884 3.26364155 3.44832413 3.73313411\n",
" 3.41640651 2.91097927 3.23391387 3.07764931 3.22092995 3.49154033\n",
" 3.22284746 3.05685121 3.53546761 3.2241822 3.17171385 3.02884976\n",
" 2.93216588 2.95082714 3.32225095 3.10665009 2.9046941 3.14652302\n",
" 3.14727499 3.38740573 3.21178104 3.10133918 3.1299234 2.93545196\n",
" 3.31652348 3.17858179 3.05675409 3.23391387 2.91442577 3.28924596\n",
" 3.11084856 3.51180579 2.91231401 3.32508962 3.12324971 3.14671728\n",
" 3.23828154 2.99055595 3.21311578 3.21178104 3.05248653 2.85069675\n",
" 3.79113567 3.53583106 3.20624783 3.45513897 3.17438332 3.23257914\n",
" 2.9502945 3.29931602 3.10931956 3.16006466 3.20758257 3.04122585\n",
" 3.19518142 3.21711999 3.53813709 3.39293894 3.1562547 2.90202462\n",
" 3.28596864 2.85889943 8.46101308 3.40953856 3.32906876 2.88122652\n",
" 3.15902741 3.13298139 3.22151272 3.01402352 3.09978214 3.28074578\n",
" 3.14404781 3.19937989 3.29303085 3.56713787 3.0029571 3.12458445\n",
" 3.87218465 3.27264633 2.9680346 3.25738145 3.1177165 3.15225049\n",
" 3.16189115 3.28885744 3.23658335 3.1035921 3.46809344 2.92566138\n",
" 2.92549219 3.22073569 4.22552699 3.56446839 2.90850405 3.6228334\n",
" 2.92262846 2.9310254 3.18659022 2.90889257 3.17724706 2.9974239\n",
" 3.13431613 2.91136778 2.98577471 3.55194489 3.39713741 3.61275708\n",
" 3.18525548 3.51581 2.90202462 3.29058069 3.13431613 2.9102273\n",
" 3.56446839 3.14805202 3.34314007 3.37080611 3.52020273 3.44827102\n",
" 3.86996336 3.49234243 3.18659022 3.12191497 3.26157992 3.15511422\n",
" 3.07309036 3.28591852 2.9310254 3.23811235 3.56560887 3.04158633\n",
" 3.23811235 3.14404781 3.15091575 3.13210284 3.21178104 2.94417852\n",
" 3.28924596 3.53546761 3.08595523 3.15511422 3.31947824 3.53527336\n",
" 3.76919709 3.70413333 3.26024518 2.88809447 3.19518142 3.12191497\n",
" 3.60186611 3.1476635 2.89362768 3.33816457 3.34942822 3.16198217\n",
" 3.15491997 3.09558367 3.23658335 3.14193604 3.37080611 3.53469058\n",
" 2.99055595 2.87569332 3.18792496 3.51180579 3.57626171 2.89229294\n",
" 3.07345084 3.36947137 3.05682615 3.57514629 3.28924596 3.78127867\n",
" 2.96555938 3.67646729 2.93655861 2.90202462 4.98814472 3.26900557\n",
" 3.16445739 3.75813068 3.17991653 3.55893518 3.10092262 3.22245894\n",
" 3.2049131 3.48154844 2.92376894 3.12324971 3.11198904 3.54748025\n",
" 3.10665009 3.26424939 3.34591278 2.91986185 3.71663772 3.41507177\n",
" 3.33484636 3.73046464 2.90335936 3.57876199 3.12191497 3.16634983\n",
" 3.26473191 3.16288124 3.43194382 2.90755783 3.26024518 3.62113521\n",
" 3.05952069 2.82036124 2.91270252 3.23658335 3.01258555 2.85775895\n",
" 3.51847947 3.17991653 3.13298139 3.59194018 3.28235295 3.56980734\n",
" 3.12189289 3.26711312 2.93636435 3.22952115 3.66406614 2.90335936\n",
" 3.7027986 3.16487974 3.23391387 3.17991653 3.39788938 3.02508994\n",
" 2.9046941 3.65853293 3.26558413 3.18964821 3.15644896 3.215591\n",
" 2.90755783 2.92471516 3.53983528]\n"
]
}
],
"source": [
"#printing the predictions\n",
"print(\"\\n----------------------------\\nPredictions = \\n\",y_pred)"
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"\n",
" ----------------------------------------\n",
"RMLSE : 0.23371046561588427\n",
"Score : 0.7662895343841157\n"
]
}
],
"source": [
"#9 Calculating score from Root Mean Log Squared Error\n",
"\n",
"def rmlse(y_test, y_pred):\n",
" error = np.square(np.log10(y_pred +1) - np.log10(y_test +1)).mean() ** 0.5\n",
" score = 1 - error\n",
" return error, score\n",
"\n",
"error, score = rmlse(y_test, y_pred)\n",
"\n",
"print(\"\\n\",'-'*40)\n",
"print(\"RMLSE : \", error)\n",
"print(\"Score : \", score)"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"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.8.0"
}
},
"nbformat": 4,
"nbformat_minor": 2
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment