{
"cells": [
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Requirement already satisfied: pandas in c:\\programdata\\anaconda3\\lib\\site-packages (0.24.2)\n",
"Requirement already satisfied: numpy>=1.12.0 in c:\\programdata\\anaconda3\\lib\\site-packages (from pandas) (1.16.2)\n",
"Requirement already satisfied: pytz>=2011k in c:\\programdata\\anaconda3\\lib\\site-packages (from pandas) (2018.9)\n",
"Requirement already satisfied: python-dateutil>=2.5.0 in c:\\programdata\\anaconda3\\lib\\site-packages (from pandas) (2.8.0)\n",
"Requirement already satisfied: six>=1.5 in c:\\programdata\\anaconda3\\lib\\site-packages (from python-dateutil>=2.5.0->pandas) (1.12.0)\n",
"Requirement already satisfied: xlrd in c:\\programdata\\anaconda3\\lib\\site-packages (1.2.0)\n",
"Requirement already satisfied: sklearn in c:\\programdata\\anaconda3\\lib\\site-packages (0.0)\n",
"Requirement already satisfied: scikit-learn in c:\\programdata\\anaconda3\\lib\\site-packages (from sklearn) (0.20.3)\n",
"Requirement already satisfied: scipy>=0.13.3 in c:\\programdata\\anaconda3\\lib\\site-packages (from scikit-learn->sklearn) (1.2.1)\n",
"Requirement already satisfied: numpy>=1.8.2 in c:\\programdata\\anaconda3\\lib\\site-packages (from scikit-learn->sklearn) (1.16.2)\n",
"Collecting imblearn\n",
" Using cached https://files.pythonhosted.org/packages/81/a7/4179e6ebfd654bd0eac0b9c06125b8b4c96a9d0a8ff9e9507eb2a26d2d7e/imblearn-0.0-py2.py3-none-any.whl\n",
"Collecting imbalanced-learn (from imblearn)\n",
" Using cached https://files.pythonhosted.org/packages/e6/62/08c14224a7e242df2cef7b312d2ef821c3931ec9b015ff93bb52ec8a10a3/imbalanced_learn-0.5.0-py3-none-any.whl\n",
"Requirement already satisfied: joblib>=0.11 in c:\\programdata\\anaconda3\\lib\\site-packages (from imbalanced-learn->imblearn) (0.13.2)\n",
"Requirement already satisfied: numpy>=1.11 in c:\\programdata\\anaconda3\\lib\\site-packages (from imbalanced-learn->imblearn) (1.16.2)\n",
"Collecting scikit-learn>=0.21 (from imbalanced-learn->imblearn)\n",
" Using cached https://files.pythonhosted.org/packages/75/14/fde90de4fc6722303ddbc183ec253c288dae8c7e4eb5a069ac49f14c9a0f/scikit_learn-0.21.2-cp37-cp37m-win_amd64.whl\n",
"Requirement already satisfied: scipy>=0.17 in c:\\programdata\\anaconda3\\lib\\site-packages (from imbalanced-learn->imblearn) (1.2.1)\n",
"Installing collected packages: scikit-learn, imbalanced-learn, imblearn\n",
" Found existing installation: scikit-learn 0.20.3\n",
" Uninstalling scikit-learn-0.20.3:\n",
" Successfully uninstalled scikit-learn-0.20.3\n",
"Successfully installed imbalanced-learn-0.5.0 imblearn-0.0 scikit-learn-0.21.2\n"
]
}
],
"source": [
"!pip install pandas\n",
"!pip install xlrd\n",
"!pip install sklearn\n",
"!pip install imblearn"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [],
"source": [
"import xlrd\n",
"book = xlrd.open_workbook(\"Datasheets info.xlsx\")\n",
"sheetMQ2 = book.sheet_by_name(\"MQ2 - Pololulu\")\n",
"sheetMQ3 = book.sheet_by_name(\"MQ3 - Sparkfun\")\n",
"sheetMQ4 = book.sheet_by_name(\"MQ4 - Sparkfun\")\n",
"sheetMQ5 = book.sheet_by_name(\"MQ5 - Sparkfun\")\n",
"sheetMQ6 = book.sheet_by_name(\"MQ6 - Sparkfun\")\n",
"sheetMQ7 = book.sheet_by_name(\"MQ7 - Sparkfun\")\n",
"sheetMQ8 = book.sheet_by_name(\"MQ8 - Sparkfun\")\n",
"sheetMQ9 = book.sheet_by_name(\"MQ9 - Haoyuelectronics\")\n",
"sheetMQ131 = book.sheet_by_name(\"MQ131- Sensorsportal\")\n",
"sheetMQ135 = book.sheet_by_name(\"MQ135 - HANWEI\")\n",
"sheetMQ303A = book.sheet_by_name(\"MQ303A - HANWEI\")\n",
"sheetMQ309A = book.sheet_by_name(\"MQ309A - HANWEI\")"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"RS/R0 \t H2 \t LPG \t CH4 \t CO \t Alcohol \t Propane\n",
"0.1 \t \t \t \t \t \t \n",
"0.2 \t \t \t \t \t \t \n",
"0.3 \t \t \t \t \t \t \n",
"0.4 \t \t \t \t \t \t \n",
"0.5 \t \t \t \t \t \t \n",
"0.6 \t \t 2000.0 \t \t \t \t 2000.0\n",
"0.7 \t 2100.0 \t \t \t \t \t \n",
"0.8 \t \t 1000.0 \t \t \t \t 1000.0\n",
"0.9 \t \t 800.0 \t 5000.0 \t \t 5000.0 \t 800.0\n",
"1.0 \t 1000.0 \t \t \t \t \t \n",
"2.0 \t 201.0 \t \t 800.0 \t \t 500.0 \t \n",
"3.0 \t \t \t 200.0 \t 1000.0 \t 200.0 \t \n",
"4.0 \t \t \t \t 500.0 \t \t \n",
"5.0 \t \t \t \t 200.0 \t \t \n",
"6.0 \t \t \t \t \t \t \n",
"7.0 \t \t \t \t \t \t \n",
"8.0 \t \t \t \t \t \t \n",
"9.0 \t \t \t \t \t \t \n"
]
}
],
"source": [
"for row_index in range(1,20): #reading first columns\n",
" RsR0, H2, LPG, CH4, CO, Alcohol, propane = sheetMQ2.row_values(row_index, start_colx=0, end_colx=7)\n",
" print(RsR0, \"\t\", H2, \"\t\", LPG, \"\t\", CH4, \"\t\", CO, \"\t\", Alcohol, \"\t\", propane)\n",
" "
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [],
"source": [
"x_MQ2 = sheetMQ2.col_values(0)[2:]\n",
"MQ2_H2 = sheetMQ2.col_values(1)[2:]\n",
"MQ2_LPG = sheetMQ2.col_values(2)[2:]\n",
"MQ2_CH4 = sheetMQ2.col_values(3)[2:]\n",
"MQ2_CO = sheetMQ2.col_values(4)[2:]\n",
"MQ2_Alcohol = sheetMQ2.col_values(5)[2:]\n",
"MQ2_propane = sheetMQ2.col_values(6)[2:]"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [],
"source": [
"def zero_to_nan(values):\n",
" \"\"\"Replace every 0 with 'nan' and return a copy.\"\"\"\n",
" return [float('nan') if x==0 else x for x in values]"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [],
"source": [
"MQ2_H2 =zero_to_nan(MQ2_H2)\n",
"MQ2_LPG =zero_to_nan(MQ2_LPG)\n",
"MQ2_CH4 =zero_to_nan(MQ2_CH4)\n",
"MQ2_CO =zero_to_nan(MQ2_CO)\n",
"MQ2_Alcohol =zero_to_nan(MQ2_Alcohol)\n",
"MQ2_propane =zero_to_nan(MQ2_propane)"
]
},
{
"cell_type": "code",
"execution_count": 31,
"metadata": {
"scrolled": false
},
"outputs": [],
"source": [
"import pandas as pd\n",
"import numpy as np\n",
"from sklearn.datasets import load_iris\n",
"#from sklearn.cross_validation import train_test_split\n",
"from sklearn.tree import DecisionTreeClassifier\n",
"from sklearn import datasets\n",
"from sklearn import linear_model\n",
"\n",
"dataH2 = {'RsRo': x_MQ2, 'H2': MQ2_H2}\n",
"dataLPG = {'RsRo': x_MQ2, 'LPG': MQ2_LPG}\n",
"dataCH4 = {'RsRo': x_MQ2, 'CH4': MQ2_CH4}\n",
"dataCO = {'RsRo': x_MQ2, 'CO': MQ2_CO}\n",
"dataAlcohol = {'RsRo': x_MQ2, 'Alcohol': MQ2_Alcohol}\n",
"dataPropane = {'RsRo': x_MQ2, 'Propane': MQ2_propane}\n",
"\n",
"dfMQ2_H2 = pd.DataFrame(dataH2)\n",
"dfMQ2_LPG = pd.DataFrame(dataLPG)\n",
"dfMQ2_CH4 = pd.DataFrame(dataCH4)\n",
"dfMQ2_CO = pd.DataFrame(dataCO)\n",
"dfMQ2_Alcohol = pd.DataFrame(dataAlcohol)\n",
"dfMQ2_Propane = pd.DataFrame(dataPropane)\n",
"\n",
"dfMQ2_H2['H2'] = pd.to_numeric(dfMQ2_H2['H2'])\n",
"dfMQ2_LPG['LPG'] = pd.to_numeric(dfMQ2_LPG['LPG'])\n",
"dfMQ2_CH4['CH4'] = pd.to_numeric(dfMQ2_CH4['CH4'])\n",
"dfMQ2_CO['CO'] = pd.to_numeric(dfMQ2_CO['CO'])\n",
"dfMQ2_Alcohol['Alcohol'] = pd.to_numeric(dfMQ2_Alcohol['Alcohol'])\n",
"dfMQ2_Propane['Propane'] = pd.to_numeric(dfMQ2_Propane['Propane'])\n",
"\n",
"dfMQ2_H2['H2'] = dfMQ2_H2['H2'].replace('',None, regex=True)\n",
"dfMQ2_LPG['LPG'] = dfMQ2_LPG['LPG'].replace('',None, regex=True)\n",
"dfMQ2_CH4['CH4'] = dfMQ2_CH4['CH4'].replace('',None, regex=True)\n",
"dfMQ2_CO['CO'] = dfMQ2_CO['CO'].replace('',None, regex=True)\n",
"dfMQ2_Alcohol['Alcohol'] = dfMQ2_Alcohol['Alcohol'].replace('',None, regex=True)\n",
"dfMQ2_Propane['Propane'] = dfMQ2_Propane['Propane'].replace('',None, regex=True)\n",
"\n",
"#Global X_Predict variable\n",
"X_Predict = dfMQ2_H2.RsRo.apply(lambda x: [x]).tolist()"
]
},
{
"cell_type": "code",
"execution_count": 41,
"metadata": {},
"outputs": [],
"source": [
"#Model and train\n",
"dataset2TrainH2 = dfMQ2_H2.copy()\n",
"dataset2TrainH2.dropna(inplace=True)\n",
"X_trainH2 = dataset2TrainH2.RsRo.apply(lambda x: [x]).tolist()\n",
"y_trainH2 = dataset2TrainH2['H2'].tolist()\n",
"model = linear_model.Lasso(alpha=0.1)\n",
"model.fit(X_trainH2, y_trainH2)\n",
"#Predict\n",
"H2_Predicted = model.predict(X_Predict)\n",
"#save into MQ2\n",
"MQ2_H2 = H2_Predicted"
]
},
{
"cell_type": "code",
"execution_count": 42,
"metadata": {},
"outputs": [],
"source": [
"#Model and train\n",
"dataset2TrainLPG = dfMQ2_LPG.copy()\n",
"dataset2TrainLPG.dropna(inplace=True)\n",
"X_trainLPG = dataset2TrainLPG.RsRo.apply(lambda x: [x]).tolist()\n",
"y_trainLPG = dataset2TrainLPG['LPG'].tolist()\n",
"model = linear_model.Lasso(alpha=0.1)\n",
"model.fit(X_trainLPG, y_trainLPG)\n",
"#Predict\n",
"LPG_Predicted = model.predict(X_Predict)\n",
"#save into MQ2\n",
"MQ2_LPG = LPG_Predicted"
]
},
{
"cell_type": "code",
"execution_count": 43,
"metadata": {},
"outputs": [],
"source": [
"#Model and train\n",
"dataset2TrainCH4 = dfMQ2_CH4.copy()\n",
"dataset2TrainCH4.dropna(inplace=True)\n",
"X_trainCH4 = dataset2TrainCH4.RsRo.apply(lambda x: [x]).tolist()\n",
"y_trainCH4 = dataset2TrainCH4['CH4'].tolist()\n",
"model = linear_model.Lasso(alpha=0.1)\n",
"model.fit(X_trainCH4, y_trainCH4)\n",
"#Predict\n",
"CH4_Predicted = model.predict(X_Predict)\n",
"#save into MQ2\n",
"MQ2_CH4 = CH4_Predicted"
]
},
{
"cell_type": "code",
"execution_count": 45,
"metadata": {},
"outputs": [],
"source": [
"#Model and train\n",
"dataset2TrainCO = dfMQ2_CO.copy()\n",
"dataset2TrainCO.dropna(inplace=True)\n",
"X_trainCO = dataset2TrainCO.RsRo.apply(lambda x: [x]).tolist()\n",
"y_trainCO = dataset2TrainCO['CO'].tolist()\n",
"model = linear_model.Lasso(alpha=0.1)\n",
"model.fit(X_trainCO, y_trainCO)\n",
"#Predict\n",
"CO_Predicted = model.predict(X_Predict)\n",
"#save into MQ2\n",
"MQ2_CO = CO_Predicted"
]
},
{
"cell_type": "code",
"execution_count": 46,
"metadata": {},
"outputs": [],
"source": [
"#Model and train\n",
"dataset2TrainAlcohol = dfMQ2_Alcohol.copy()\n",
"dataset2TrainAlcohol.dropna(inplace=True)\n",
"X_trainAlcohol = dataset2TrainAlcohol.RsRo.apply(lambda x: [x]).tolist()\n",
"y_trainAlcohol = dataset2TrainAlcohol['Alcohol'].tolist()\n",
"model = linear_model.Lasso(alpha=0.1)\n",
"model.fit(X_trainAlcohol, y_trainAlcohol)\n",
"#Predict\n",
"Alcohol_Predicted = model.predict(X_Predict)\n",
"#save into MQ2\n",
"MQ2_Alcohol = Alcohol_Predicted"
]
},
{
"cell_type": "code",
"execution_count": 59,
"metadata": {},
"outputs": [],
"source": [
"#Model and train\n",
"dataset2TrainPropane = dfMQ2_Propane.copy()\n",
"dataset2TrainPropane.dropna(inplace=True)\n",
"X_trainPropane = dataset2TrainPropane.RsRo.apply(lambda x: [x]).tolist()\n",
"y_trainPropane = dataset2TrainPropane['Propane'].tolist()\n",
"model = linear_model.Lasso(alpha=0.1)\n",
"model.fit(X_trainPropane, y_trainPropane)\n",
"#Predict\n",
"Propane_Predicted = model.predict(X_Predict)\n",
"#save into MQ2\n",
"MQ2_propane = Propane_Predicted"
]
},
{
"cell_type": "code",
"execution_count": 62,
"metadata": {},
"outputs": [
{
"data": {
"image/svg+xml": [
"\r\n",
"\r\n",
"\r\n",
"\r\n"
],
"text/plain": [
""
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"%config InlineBackend.figure_formats = ['svg']\n",
"%matplotlib inline\n",
"import matplotlib.pyplot as plt\n",
"import matplotlib.lines as mlines\n",
"import matplotlib.transforms as mtransforms\n",
"\n",
"fig, ax = plt.subplots()\n",
"\n",
"fig.set_size_inches(9, 5.5, forward=True)\n",
"fig.set_dpi(200)\n",
"\n",
"# only these two lines are calibration curves\n",
"plt.plot(MQ2_H2, x_MQ2, marker='o', linewidth=1, label='H2')\n",
"plt.plot(MQ2_LPG, x_MQ2, marker='o', linewidth=1, label='LPG')\n",
"plt.plot(MQ2_CH4, x_MQ2, marker='o', linewidth=1, label='CH4')\n",
"plt.plot(MQ2_CO, x_MQ2, marker='o', linewidth=1, label='CO')\n",
"plt.plot(MQ2_Alcohol, x_MQ2, marker='o', linewidth=1, label='Alcohol')\n",
"plt.plot(MQ2_propane, x_MQ2, marker='o', linewidth=1, label='Propane')\n",
"\n",
"# reference line, legends, and axis labels\n",
"#line = mlines.Line2D([0, 1], [0, 1], color='black')\n",
"#transform = ax.transAxes\n",
"#line.set_transform(transform)\n",
"#ax.add_line(line)\n",
"plt.yscale('log')\n",
"plt.xscale('log')\n",
"\n",
"fig.suptitle('Calibration plot for MQ-2 data')\n",
"ax.set_xlabel('PPM Concentration')\n",
"ax.set_ylabel('Rs/Ro')\n",
"\n",
"\n",
"#Save image\n",
"plt.savefig('MQ2.svg', format = 'svg', dpi = 1200)\n",
"plt.savefig('MQ2.png')\n",
"plt.savefig('MQ2.eps', format = 'eps', dpi = 1200)"
]
}
],
"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.7.3"
}
},
"nbformat": 4,
"nbformat_minor": 2
}