{
"cells": [
{
"cell_type": "code",
"execution_count": 3,
"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: 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: numpy>=1.12.0 in c:\\programdata\\anaconda3\\lib\\site-packages (from pandas) (1.16.2)\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.21.2)\n",
"Requirement already satisfied: scipy>=0.17.0 in c:\\programdata\\anaconda3\\lib\\site-packages (from scikit-learn->sklearn) (1.2.1)\n",
"Requirement already satisfied: joblib>=0.11 in c:\\programdata\\anaconda3\\lib\\site-packages (from scikit-learn->sklearn) (0.13.2)\n",
"Requirement already satisfied: numpy>=1.11.0 in c:\\programdata\\anaconda3\\lib\\site-packages (from scikit-learn->sklearn) (1.16.2)\n",
"Requirement already satisfied: imblearn in c:\\programdata\\anaconda3\\lib\\site-packages (0.0)\n",
"Requirement already satisfied: imbalanced-learn in c:\\programdata\\anaconda3\\lib\\site-packages (from imblearn) (0.5.0)\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: scipy>=0.17 in c:\\programdata\\anaconda3\\lib\\site-packages (from imbalanced-learn->imblearn) (1.2.1)\n",
"Requirement already satisfied: numpy>=1.11 in c:\\programdata\\anaconda3\\lib\\site-packages (from imbalanced-learn->imblearn) (1.16.2)\n",
"Requirement already satisfied: scikit-learn>=0.21 in c:\\programdata\\anaconda3\\lib\\site-packages (from imbalanced-learn->imblearn) (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": 1,
"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": 5,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"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 \t \t \t 200.0 \t 200.0\n",
"0.7 \t \t \t 200.0 \t \t \t 100.0\n",
"0.8 \t 200.0 \t \t \t 200.0 \t 100.0 \t \n",
"0.9 \t \t \t 100.0 \t \t \t \n",
"1.0 \t 100.0 \t 200.0 \t \t 100.0 \t 10.0 \t 10.0\n",
"2.0 \t 10.0 \t \t 10.0 \t \t \t \n",
"3.0 \t \t 10.0 \t \t 10.0 \t \t \n",
"4.0 \t \t \t \t \t \t \n",
"5.0 \t \t \t \t \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",
"10.0 \t \t \t \t \t \t \n"
]
}
],
"source": [
"for row_index in range(1,20): #reading first columns\n",
" RsR0, CO2, CO, Alcohol, NH4, Tolueno, Acetona = sheetMQ135.row_values(row_index, start_colx=0, end_colx=7)\n",
" print(RsR0, \"\t\", CO2, \"\t\", CO, \"\t\", Alcohol, \"\t\", NH4, \"\t\", Tolueno, \"\t\", Acetona)\n",
" "
]
},
{
"cell_type": "code",
"execution_count": 32,
"metadata": {},
"outputs": [],
"source": [
"x_MQ135 = sheetMQ135.col_values(0)[2:]\n",
"MQ135_CO2 = sheetMQ135.col_values(1)[2:]\n",
"MQ135_CO = sheetMQ135.col_values(2)[2:]\n",
"MQ135_Alcohol = sheetMQ135.col_values(3)[2:]\n",
"MQ135_NH4 = sheetMQ135.col_values(4)[2:]\n",
"MQ135_Tolueno = sheetMQ135.col_values(5)[2:]\n",
"MQ135_Acetona = sheetMQ135.col_values(6)[2:]"
]
},
{
"cell_type": "code",
"execution_count": 33,
"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": 34,
"metadata": {},
"outputs": [],
"source": [
"MQ135_CO2 =zero_to_nan(MQ135_CO2)\n",
"MQ135_CO =zero_to_nan(MQ135_CO)\n",
"MQ135_Alcohol =zero_to_nan(MQ135_Alcohol)\n",
"MQ135_NH4 =zero_to_nan(MQ135_NH4)\n",
"MQ135_Tolueno =zero_to_nan(MQ135_Tolueno)\n",
"MQ135_Acetona =zero_to_nan(MQ135_Acetona)"
]
},
{
"cell_type": "code",
"execution_count": 35,
"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",
"dataCO2 = {'RsRo': x_MQ135, 'CO2': MQ135_CO2}\n",
"dataCO = {'RsRo': x_MQ135, 'CO': MQ135_CO}\n",
"dataAlcohol = {'RsRo': x_MQ135, 'Alcohol': MQ135_Alcohol}\n",
"dataNH4 = {'RsRo': x_MQ135, 'NH4': MQ135_NH4}\n",
"dataTolueno = {'RsRo': x_MQ135, 'Tolueno': MQ135_Tolueno}\n",
"dataAcetona = {'RsRo': x_MQ135, 'Acetona': MQ135_Acetona}\n",
"\n",
"dfMQ135_CO2 = pd.DataFrame(dataCO2)\n",
"dfMQ135_CO = pd.DataFrame(dataCO)\n",
"dfMQ135_Alcohol = pd.DataFrame(dataAlcohol)\n",
"dfMQ135_NH4 = pd.DataFrame(dataNH4)\n",
"dfMQ135_Tolueno = pd.DataFrame(dataTolueno)\n",
"dfMQ135_Acetona = pd.DataFrame(dataAcetona)\n",
"\n",
"dfMQ135_CO2['CO2'] = pd.to_numeric(dfMQ135_CO2['CO2'])\n",
"dfMQ135_CO['CO'] = pd.to_numeric(dfMQ135_CO['CO'])\n",
"dfMQ135_Alcohol['Alcohol'] = pd.to_numeric(dfMQ135_Alcohol['Alcohol'])\n",
"dfMQ135_NH4['NH4'] = pd.to_numeric(dfMQ135_NH4['NH4'])\n",
"dfMQ135_Tolueno['Tolueno'] = pd.to_numeric(dfMQ135_Tolueno['Tolueno'])\n",
"dfMQ135_Acetona['Acetona'] = pd.to_numeric(dfMQ135_Acetona['Acetona'])\n",
"\n",
"dfMQ135_CO2['CO2'] = dfMQ135_CO2['CO2'].replace('',None, regex=True)\n",
"dfMQ135_CO['CO'] = dfMQ135_CO['CO'].replace('',None, regex=True)\n",
"dfMQ135_Alcohol['Alcohol'] = dfMQ135_Alcohol['Alcohol'].replace('',None, regex=True)\n",
"dfMQ135_NH4['NH4'] = dfMQ135_NH4['NH4'].replace('',None, regex=True)\n",
"dfMQ135_Tolueno['Tolueno'] = dfMQ135_Tolueno['Tolueno'].replace('',None, regex=True)\n",
"dfMQ135_Acetona['Acetona'] = dfMQ135_Acetona['Acetona'].replace('',None, regex=True)\n",
"\n",
"#Global X_Predict variable\n",
"X_Predict = dfMQ135_CO2.RsRo.apply(lambda x: [x]).tolist()"
]
},
{
"cell_type": "code",
"execution_count": 36,
"metadata": {},
"outputs": [],
"source": [
"#Model and train CO2\n",
"dataset2TrainCO2 = dfMQ135_CO2.copy()\n",
"dataset2TrainCO2.dropna(inplace=True)\n",
"X_trainCO2 = dataset2TrainCO2.RsRo.apply(lambda x: [x]).tolist()\n",
"y_trainCO2 = dataset2TrainCO2['CO2'].tolist()\n",
"model = linear_model.Lasso(alpha=0.1)\n",
"model.fit(X_trainCO2, y_trainCO2)\n",
"#Predict\n",
"CO2_Predicted = model.predict(X_Predict)\n",
"#save into MQ2\n",
"MQ135_CO2 = CO2_Predicted"
]
},
{
"cell_type": "code",
"execution_count": 37,
"metadata": {},
"outputs": [],
"source": [
"#Model and train CO\n",
"dataset2TrainCO = dfMQ135_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",
"MQ135_CO = CO_Predicted"
]
},
{
"cell_type": "code",
"execution_count": 38,
"metadata": {},
"outputs": [],
"source": [
"#Model and train Alcohol\n",
"dataset2TrainAlcohol = dfMQ135_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",
"MQ135_Alcohol = Alcohol_Predicted"
]
},
{
"cell_type": "code",
"execution_count": 39,
"metadata": {},
"outputs": [],
"source": [
"#Model and train NH4\n",
"dataset2TrainNH4 = dfMQ135_NH4.copy()\n",
"dataset2TrainNH4.dropna(inplace=True)\n",
"X_trainNH4 = dataset2TrainNH4.RsRo.apply(lambda x: [x]).tolist()\n",
"y_trainNH4 = dataset2TrainNH4['NH4'].tolist()\n",
"model = linear_model.Lasso(alpha=0.1)\n",
"model.fit(X_trainNH4, y_trainNH4)\n",
"#Predict\n",
"NH4_Predicted = model.predict(X_Predict)\n",
"#save into MQ2\n",
"MQ135_NH4 = NH4_Predicted"
]
},
{
"cell_type": "code",
"execution_count": 41,
"metadata": {},
"outputs": [],
"source": [
"#Model and train Tolueno\n",
"dataset2TrainTolueno = dfMQ135_Tolueno.copy()\n",
"dataset2TrainTolueno.dropna(inplace=True)\n",
"X_trainTolueno = dataset2TrainTolueno.RsRo.apply(lambda x: [x]).tolist()\n",
"y_trainTolueno = dataset2TrainTolueno['Tolueno'].tolist()\n",
"model = linear_model.Lasso(alpha=0.1)\n",
"model.fit(X_trainTolueno, y_trainTolueno)\n",
"#Predict\n",
"Tolueno_Predicted = model.predict(X_Predict)\n",
"#save into MQ2\n",
"MQ135_Tolueno = Tolueno_Predicted"
]
},
{
"cell_type": "code",
"execution_count": 44,
"metadata": {},
"outputs": [],
"source": [
"#Model and train Acetona\n",
"dataset2TrainAcetona = dfMQ135_Acetona.copy()\n",
"dataset2TrainAcetona.dropna(inplace=True)\n",
"X_trainAcetona = dataset2TrainAcetona.RsRo.apply(lambda x: [x]).tolist()\n",
"y_trainAcetona = dataset2TrainAcetona['Acetona'].tolist()\n",
"model = linear_model.Lasso(alpha=0.1)\n",
"model.fit(X_trainAcetona, y_trainAcetona)\n",
"#Predict\n",
"Acetona_Predicted = model.predict(X_Predict)\n",
"#save into MQ2\n",
"MQ135_Acetona = Acetona_Predicted"
]
},
{
"cell_type": "code",
"execution_count": 45,
"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(MQ135_CO2, x_MQ135, marker='o', linewidth=1, label='CO2')\n",
"plt.plot(MQ135_CO, x_MQ135, marker='o', linewidth=1, label='CO')\n",
"plt.plot(MQ135_Alcohol, x_MQ135, marker='o', linewidth=1, label='Alcohol')\n",
"plt.plot(MQ135_NH4, x_MQ135, marker='o', linewidth=1, label='NH4')\n",
"plt.plot(MQ135_Tolueno, x_MQ135, marker='o', linewidth=1, label='Tolueno')\n",
"plt.plot(MQ135_Acetona, x_MQ135, marker='o', linewidth=1, label='Acetona')\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",
"plt.legend()\n",
"\n",
"plt.grid(b=True, which='minor', color='lightgrey', linestyle='--')\n",
"\n",
"fig.suptitle('Calibration plot for MQ-135 data')\n",
"ax.set_xlabel('PPM Concentration')\n",
"ax.set_ylabel('Rs/Ro')\n",
"\n",
"\n",
"#Save image\n",
"plt.savefig('MQ135.svg', format = 'svg', dpi = 1200)\n",
"plt.savefig('MQ135.png')\n",
"plt.savefig('MQ135.eps', format = 'eps', dpi = 1200)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
}
],
"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
}