In [1]:
import pandas as pd
df_raw = pd.read_excel('./sensitivity_table.xlsx', engine='openpyxl')
df = df_raw.copy()
df = df.set_index('Sensor')
df.head()
Out[1]:
| NH3 | Hydrazine | H2S | H2 | C3H6O | CH4 | DMMP | C3H8 | NO2 | PH3 | |
|---|---|---|---|---|---|---|---|---|---|---|
| Sensor | ||||||||||
| MQ6 | 20 | 113 | 195 | 251 | 290 | 210 | 15 | 480 | 8 | 7 |
| MQ7 | 76 | 48 | 134 | 4480 | 500 | 448 | 15 | 1200 | 0 | 800 |
| MQ8 | 82 | 103 | 412 | 2350 | 482 | 953 | 47 | 1750 | 12 | 80 |
| MQ9 | 88 | 75 | 716 | 4678 | 2211 | 65 | 6 | 575 | 0 | 170 |
| SS2178 | 0 | 7 | 1 | 476 | 0 | 0 | 0 | 0 | 13 | 0 |
In [2]:
import numpy as np
from sklearn.preprocessing import StandardScaler
data = df.to_numpy()
scaler = StandardScaler()
scaler.fit(data)
df_scale = pd.DataFrame(scaler.transform(data), columns=df.columns, index=df.index)
data_scale = df_scale.to_numpy()
df_scale.head()
Out[2]:
| NH3 | Hydrazine | H2S | H2 | C3H6O | CH4 | DMMP | C3H8 | NO2 | PH3 | |
|---|---|---|---|---|---|---|---|---|---|---|
| Sensor | ||||||||||
| MQ6 | -0.533818 | -0.323422 | -0.333941 | -0.641921 | -0.413071 | 0.074128 | 0.358153 | 0.012277 | -0.466125 | -0.558901 |
| MQ7 | -0.336427 | -0.506757 | -0.398609 | 1.678763 | -0.212685 | 0.852474 | 0.358153 | 1.236244 | -0.530051 | 2.713354 |
| MQ8 | -0.315278 | -0.351627 | -0.103893 | 0.509915 | -0.229861 | 2.504007 | 2.600502 | 2.171219 | -0.434162 | -0.257672 |
| MQ9 | -0.294129 | -0.430602 | 0.218387 | 1.787416 | 1.419984 | -0.400074 | -0.272508 | 0.173773 | -0.530051 | 0.113706 |
| SS2178 | -0.604315 | -0.622399 | -0.539606 | -0.518451 | -0.689794 | -0.612648 | -0.692948 | -0.803700 | -0.426171 | -0.587786 |
In [3]:
import matplotlib.pyplot as plt
import numpy as np
plt.figure(figsize=(12,3))
plt.pcolor(df_scale)
plt.xticks(np.arange(0.5, len(df.columns), 1), df.columns)
plt.yticks(np.arange(0.5, len(df.index), 1), df.index)
plt.title('Standardized Sensitivity of Sensors', fontsize=20)
plt.xlabel('Gas', fontsize=16)
plt.ylabel('Sensor', fontsize=16)
plt.colorbar()
plt.show()
plt.figure(figsize=(12,3))
plt.pcolor(df)
plt.xticks(np.arange(0.5, len(df.columns), 1), df.columns)
plt.yticks(np.arange(0.5, len(df.index), 1), df.index)
plt.title('Sensitivity of Sensors', fontsize=20)
plt.xlabel('Gas', fontsize=16)
plt.ylabel('Sensor', fontsize=16)
plt.colorbar()
plt.show()
In [6]:
from itertools import combinations
sensors_choice_num = 4
gases_choice_num = 2
sensors = data_scale
sensors_pairs = list(combinations(range(len(sensors)), sensors_choice_num))
gases_pairs = list(combinations(range(len(sensors[0])), gases_choice_num))
sensor_combination_list = []
for sensor_pairs in sensors_pairs:
sensor_pair = list(combinations(sensor_pairs, 2))
sum_combination = 0.0
for sen_pair in sensor_pair:
for sen in sen_pair:
for gas_pair in gases_pairs:
sum_combination += (sensors[sen][gas_pair[0]] - sensors[sen][gas_pair[1]]) ** 2
sensor_combination_list.append({'sensors': [df.index[s] for s in sensor_pairs], 'contrast': sum_combination})
sorted(sensor_combination_list, key=lambda x: x['contrast'], reverse=True)
Out[6]:
[{'sensors': ['MQ7', 'MQ8', 'SS21N8', 'PID'], 'contrast': 1651.746512170418},
{'sensors': ['MQ8', 'SS2148', 'SS21N8', 'PID'],
'contrast': 1620.3302996160087},
{'sensors': ['MQ7', 'MQ8', 'SS2148', 'SS21N8'],
'contrast': 1546.2500862667187},
{'sensors': ['MQ7', 'SS2148', 'SS21N8', 'PID'],
'contrast': 1507.1260655991803},
{'sensors': ['MQ8', 'MQ9', 'SS21N8', 'PID'], 'contrast': 1492.9860104215638},
{'sensors': ['MQ7', 'MQ8', 'SS2148', 'PID'], 'contrast': 1483.3448284628041},
{'sensors': ['MQ7', 'MQ8', 'MQ9', 'SS21N8'], 'contrast': 1418.9057970722745},
{'sensors': ['MQ8', 'MQ9', 'SS2148', 'SS21N8'],
'contrast': 1387.489584517865},
{'sensors': ['MQ7', 'MQ9', 'SS21N8', 'PID'], 'contrast': 1379.7817764047354},
{'sensors': ['MQ7', 'MQ8', 'MQ9', 'PID'], 'contrast': 1356.0005392683597},
{'sensors': ['MQ9', 'SS2148', 'SS21N8', 'PID'],
'contrast': 1348.3655638503267},
{'sensors': ['MQ6', 'MQ8', 'SS21N8', 'PID'], 'contrast': 1348.3276518724983},
{'sensors': ['MQ8', 'MQ9', 'SS2148', 'PID'], 'contrast': 1324.58432671395},
{'sensors': ['MQ8', 'SS2118', 'SS21N8', 'PID'],
'contrast': 1323.5348586302994},
{'sensors': ['MQ8', 'SS2178', 'SS21N8', 'PID'],
'contrast': 1322.8348467611816},
{'sensors': ['MQ7', 'MQ9', 'SS2148', 'SS21N8'],
'contrast': 1274.2853505010362},
{'sensors': ['MQ6', 'MQ7', 'MQ8', 'SS21N8'], 'contrast': 1274.247438523208},
{'sensors': ['MQ7', 'MQ8', 'MQ9', 'SS2148'], 'contrast': 1250.5041133646607},
{'sensors': ['MQ7', 'MQ8', 'SS2118', 'SS21N8'],
'contrast': 1249.4546452810096},
{'sensors': ['MQ7', 'MQ8', 'SS2178', 'SS21N8'],
'contrast': 1248.7546334118915},
{'sensors': ['MQ6', 'MQ8', 'SS2148', 'SS21N8'],
'contrast': 1242.831225968799},
{'sensors': ['MQ6', 'MQ7', 'SS21N8', 'PID'], 'contrast': 1235.1234178556692},
{'sensors': ['MQ8', 'SS2118', 'SS2148', 'SS21N8'],
'contrast': 1218.0384327265997},
{'sensors': ['MQ8', 'SS2178', 'SS2148', 'SS21N8'],
'contrast': 1217.3384208574819},
{'sensors': ['MQ7', 'MQ9', 'SS2148', 'PID'], 'contrast': 1211.3800926971223},
{'sensors': ['MQ6', 'MQ7', 'MQ8', 'PID'], 'contrast': 1211.3421807192938},
{'sensors': ['MQ7', 'SS2118', 'SS21N8', 'PID'],
'contrast': 1210.3306246134712},
{'sensors': ['MQ7', 'SS2178', 'SS21N8', 'PID'],
'contrast': 1209.6306127443534},
{'sensors': ['MQ6', 'SS2148', 'SS21N8', 'PID'],
'contrast': 1203.7072053012603},
{'sensors': ['MQ7', 'MQ8', 'SS2118', 'PID'], 'contrast': 1186.549387477095},
{'sensors': ['MQ7', 'MQ8', 'SS2178', 'PID'], 'contrast': 1185.8493756079768},
{'sensors': ['MQ6', 'MQ8', 'SS2148', 'PID'], 'contrast': 1179.9259681648844},
{'sensors': ['SS2118', 'SS2148', 'SS21N8', 'PID'],
'contrast': 1178.9144120590618},
{'sensors': ['SS2178', 'SS2148', 'SS21N8', 'PID'],
'contrast': 1178.2144001899437},
{'sensors': ['MQ8', 'SS2118', 'SS2148', 'PID'],
'contrast': 1155.1331749226856},
{'sensors': ['MQ8', 'SS2178', 'SS2148', 'PID'],
'contrast': 1154.4331630535678},
{'sensors': ['MQ6', 'MQ7', 'SS2148', 'SS21N8'], 'contrast': 1129.62699195197},
{'sensors': ['MQ6', 'MQ8', 'MQ9', 'SS21N8'], 'contrast': 1115.4869367743538},
{'sensors': ['MQ6', 'MQ7', 'MQ8', 'SS2148'], 'contrast': 1105.8457548155943},
{'sensors': ['MQ7', 'SS2118', 'SS2148', 'SS21N8'],
'contrast': 1104.8341987097717},
{'sensors': ['MQ7', 'SS2178', 'SS2148', 'SS21N8'],
'contrast': 1104.134186840654},
{'sensors': ['MQ8', 'MQ9', 'SS2118', 'SS21N8'],
'contrast': 1090.694143532155},
{'sensors': ['MQ8', 'MQ9', 'SS2178', 'SS21N8'],
'contrast': 1089.9941316630368},
{'sensors': ['MQ7', 'MQ8', 'SS2118', 'SS2148'],
'contrast': 1081.0529615733958},
{'sensors': ['MQ7', 'MQ8', 'SS2178', 'SS2148'],
'contrast': 1080.3529497042778},
{'sensors': ['MQ6', 'MQ9', 'SS21N8', 'PID'], 'contrast': 1076.362916106815},
{'sensors': ['MQ6', 'MQ7', 'SS2148', 'PID'], 'contrast': 1066.721734148055},
{'sensors': ['MQ6', 'MQ8', 'MQ9', 'PID'], 'contrast': 1052.5816789704393},
{'sensors': ['MQ9', 'SS2118', 'SS21N8', 'PID'],
'contrast': 1051.570122864617},
{'sensors': ['MQ9', 'SS2178', 'SS21N8', 'PID'],
'contrast': 1050.870110995499},
{'sensors': ['MQ7', 'SS2118', 'SS2148', 'PID'],
'contrast': 1041.9289409058576},
{'sensors': ['MQ7', 'SS2178', 'SS2148', 'PID'],
'contrast': 1041.2289290367398},
{'sensors': ['MQ8', 'MQ9', 'SS2118', 'PID'], 'contrast': 1027.7888857282408},
{'sensors': ['MQ8', 'MQ9', 'SS2178', 'PID'], 'contrast': 1027.0888738591225},
{'sensors': ['MQ6', 'MQ7', 'MQ9', 'SS21N8'], 'contrast': 1002.2827027575252},
{'sensors': ['MQ6', 'MQ7', 'MQ8', 'MQ9'], 'contrast': 978.5014656211496},
{'sensors': ['MQ7', 'MQ9', 'SS2118', 'SS21N8'],
'contrast': 977.4899095153265},
{'sensors': ['MQ7', 'MQ9', 'SS2178', 'SS21N8'],
'contrast': 976.7898976462084},
{'sensors': ['MQ6', 'MQ9', 'SS2148', 'SS21N8'],
'contrast': 970.8664902031157},
{'sensors': ['MQ7', 'MQ8', 'MQ9', 'SS2118'], 'contrast': 953.7086723789515},
{'sensors': ['MQ7', 'MQ8', 'MQ9', 'SS2178'], 'contrast': 953.0086605098335},
{'sensors': ['MQ6', 'MQ8', 'MQ9', 'SS2148'], 'contrast': 947.0852530667399},
{'sensors': ['MQ9', 'SS2118', 'SS2148', 'SS21N8'],
'contrast': 946.0736969609173},
{'sensors': ['MQ6', 'MQ8', 'SS2118', 'SS21N8'],
'contrast': 946.0357849830887},
{'sensors': ['MQ9', 'SS2178', 'SS2148', 'SS21N8'],
'contrast': 945.3736850917993},
{'sensors': ['MQ6', 'MQ8', 'SS2178', 'SS21N8'],
'contrast': 945.3357731139706},
{'sensors': ['MQ6', 'MQ7', 'MQ9', 'PID'], 'contrast': 939.3774449536102},
{'sensors': ['MQ8', 'MQ9', 'SS2118', 'SS2148'],
'contrast': 922.2924598245415},
{'sensors': ['MQ8', 'MQ9', 'SS2178', 'SS2148'],
'contrast': 921.5924479554234},
{'sensors': ['MQ8', 'SS2178', 'SS2118', 'SS21N8'],
'contrast': 920.542979871772},
{'sensors': ['MQ7', 'MQ9', 'SS2118', 'PID'], 'contrast': 914.5846517114124},
{'sensors': ['MQ7', 'MQ9', 'SS2178', 'PID'], 'contrast': 913.8846398422943},
{'sensors': ['MQ6', 'MQ9', 'SS2148', 'PID'], 'contrast': 907.9612323992012},
{'sensors': ['MQ6', 'SS2118', 'SS21N8', 'PID'],
'contrast': 906.9117643155508},
{'sensors': ['MQ6', 'SS2178', 'SS21N8', 'PID'],
'contrast': 906.2117524464327},
{'sensors': ['MQ9', 'SS2118', 'SS2148', 'PID'],
'contrast': 883.1684391570027},
{'sensors': ['MQ6', 'MQ8', 'SS2118', 'PID'], 'contrast': 883.1305271791739},
{'sensors': ['MQ9', 'SS2178', 'SS2148', 'PID'],
'contrast': 882.4684272878847},
{'sensors': ['MQ6', 'MQ8', 'SS2178', 'PID'], 'contrast': 882.4305153100559},
{'sensors': ['SS2178', 'SS2118', 'SS21N8', 'PID'],
'contrast': 881.4189592042353},
{'sensors': ['MQ8', 'SS2178', 'SS2118', 'PID'], 'contrast': 857.637722067858},
{'sensors': ['MQ6', 'MQ7', 'MQ9', 'SS2148'], 'contrast': 833.8810190499106},
{'sensors': ['MQ6', 'MQ7', 'SS2118', 'SS21N8'],
'contrast': 832.8315509662598},
{'sensors': ['MQ6', 'MQ7', 'SS2178', 'SS21N8'],
'contrast': 832.1315390971419},
{'sensors': ['MQ7', 'MQ9', 'SS2118', 'SS2148'], 'contrast': 809.088225807713},
{'sensors': ['MQ6', 'MQ7', 'MQ8', 'SS2118'], 'contrast': 809.0503138298841},
{'sensors': ['MQ7', 'MQ9', 'SS2178', 'SS2148'],
'contrast': 808.3882139385948},
{'sensors': ['MQ6', 'MQ7', 'MQ8', 'SS2178'], 'contrast': 808.3503019607658},
{'sensors': ['MQ7', 'SS2178', 'SS2118', 'SS21N8'],
'contrast': 807.3387458549436},
{'sensors': ['MQ6', 'SS2118', 'SS2148', 'SS21N8'],
'contrast': 801.4153384118508},
{'sensors': ['MQ6', 'SS2178', 'SS2148', 'SS21N8'],
'contrast': 800.7153265427328},
{'sensors': ['MQ7', 'MQ8', 'SS2178', 'SS2118'],
'contrast': 783.5575087185678},
{'sensors': ['MQ6', 'MQ8', 'SS2118', 'SS2148'],
'contrast': 777.6341012754743},
{'sensors': ['MQ6', 'MQ8', 'SS2178', 'SS2148'],
'contrast': 776.9340894063564},
{'sensors': ['SS2178', 'SS2118', 'SS2148', 'SS21N8'],
'contrast': 775.9225333005352},
{'sensors': ['MQ6', 'MQ7', 'SS2118', 'PID'], 'contrast': 769.9262931623454},
{'sensors': ['MQ6', 'MQ7', 'SS2178', 'PID'], 'contrast': 769.2262812932274},
{'sensors': ['MQ8', 'SS2178', 'SS2118', 'SS2148'],
'contrast': 752.1412961641583},
{'sensors': ['MQ7', 'SS2178', 'SS2118', 'PID'],
'contrast': 744.4334880510294},
{'sensors': ['MQ6', 'SS2118', 'SS2148', 'PID'],
'contrast': 738.5100806079363},
{'sensors': ['MQ6', 'SS2178', 'SS2148', 'PID'],
'contrast': 737.8100687388181},
{'sensors': ['SS2178', 'SS2118', 'SS2148', 'PID'],
'contrast': 713.0172754966203},
{'sensors': ['MQ6', 'MQ9', 'SS2118', 'SS21N8'],
'contrast': 674.0710492174054},
{'sensors': ['MQ6', 'MQ9', 'SS2178', 'SS21N8'],
'contrast': 673.3710373482874},
{'sensors': ['MQ6', 'MQ7', 'SS2118', 'SS2148'],
'contrast': 664.4298672586457},
{'sensors': ['MQ6', 'MQ7', 'SS2178', 'SS2148'],
'contrast': 663.7298553895278},
{'sensors': ['MQ6', 'MQ8', 'MQ9', 'SS2118'], 'contrast': 650.2898120810289},
{'sensors': ['MQ6', 'MQ8', 'MQ9', 'SS2178'], 'contrast': 649.5898002119111},
{'sensors': ['MQ9', 'SS2178', 'SS2118', 'SS21N8'],
'contrast': 648.5782441060895},
{'sensors': ['MQ7', 'SS2178', 'SS2118', 'SS2148'],
'contrast': 638.9370621473296},
{'sensors': ['MQ8', 'MQ9', 'SS2178', 'SS2118'],
'contrast': 624.7970069697127},
{'sensors': ['MQ6', 'MQ9', 'SS2118', 'PID'], 'contrast': 611.165791413491},
{'sensors': ['MQ6', 'MQ9', 'SS2178', 'PID'], 'contrast': 610.4657795443728},
{'sensors': ['MQ9', 'SS2178', 'SS2118', 'PID'], 'contrast': 585.672986302175},
{'sensors': ['MQ6', 'MQ7', 'MQ9', 'SS2118'], 'contrast': 537.0855780642004},
{'sensors': ['MQ6', 'MQ7', 'MQ9', 'SS2178'], 'contrast': 536.3855661950824},
{'sensors': ['MQ7', 'MQ9', 'SS2178', 'SS2118'],
'contrast': 511.59277295288376},
{'sensors': ['MQ6', 'MQ9', 'SS2118', 'SS2148'],
'contrast': 505.66936550979085},
{'sensors': ['MQ6', 'MQ9', 'SS2178', 'SS2148'],
'contrast': 504.96935364067303},
{'sensors': ['MQ6', 'SS2178', 'SS2118', 'SS21N8'],
'contrast': 503.9198855570237},
{'sensors': ['MQ9', 'SS2178', 'SS2118', 'SS2148'],
'contrast': 480.17656039847475},
{'sensors': ['MQ6', 'MQ8', 'SS2178', 'SS2118'],
'contrast': 480.1386484206458},
{'sensors': ['MQ6', 'SS2178', 'SS2118', 'PID'],
'contrast': 441.0146277531085},
{'sensors': ['MQ6', 'MQ7', 'SS2178', 'SS2118'],
'contrast': 366.9344144038176},
{'sensors': ['MQ6', 'SS2178', 'SS2118', 'SS2148'],
'contrast': 335.51820184940857},
{'sensors': ['MQ6', 'MQ9', 'SS2178', 'SS2118'],
'contrast': 208.17391265496335}]
In [ ]: