| { |
| "cells": [ |
| { |
| "cell_type": "code", |
| "execution_count": 1, |
| "metadata": {}, |
| "outputs": [], |
| "source": [ |
| "import numpy as np\n", |
| "import pandas as pd\n", |
| "from sklearn.linear_model import LinearRegression\n", |
| "import seaborn as sns\n", |
| "import matplotlib.pyplot as plt\n", |
| "%matplotlib inline\n", |
| "from sklearn.metrics import mean_squared_error, r2_score\n", |
| "from sklearn.model_selection import train_test_split\n", |
| "\n", |
| "\n", |
| "def irRemoval(xf):\n", |
| " xf['IR'] = 0.41*(xf['R']*0.61 + xf['G'] + xf['B']*1.6 - 0.98 * xf['C'])/2\n", |
| " #replace negative values in IR with 0\n", |
| " num = xf['IR']._get_numeric_data()\n", |
| " num[num < 0] = 0\n", |
| " xf['RC'] = xf['R']*0.61 - xf['IR']\n", |
| " xf['GC'] = xf['G'] - xf['IR']\n", |
| " xf['BC'] = xf['B']*1.6 - xf['IR']\n", |
| " xf['CC'] = xf['C']*0.98 - xf['IR']\n", |
| " xf = removeNegative(xf)\n", |
| " xf.loc[xf.RC == 0, 'BC'] = 0\n", |
| " \n", |
| " \n", |
| " return xf\n", |
| "\n", |
| "\n", |
| "def removeNegative(xn):\n", |
| " xn = pd.DataFrame(xn)\n", |
| " num = xn._get_numeric_data()\n", |
| " num[num < 0] = 0\n", |
| " return xn\n", |
| "\n", |
| "\n", |
| "def fit(xfit, meter): \n", |
| " reg = LinearRegression().fit(xfit[['RC', 'GC', 'BC','CC']], xfit[meter] )\n", |
| " score= reg.score(xfit[['RC','GC','BC','CC']], xfit[meter])\n", |
| " coeff = reg.coef_\n", |
| " off = reg.intercept_\n", |
| " return reg,score,coeff,off\n", |
| "\n", |
| "\n", |
| "def predict(reg, xpre, meter):\n", |
| " y = reg.predict(xpre[['RC', 'GC', 'BC','CC']])\n", |
| " MSE = mean_squared_error(xpre[meter], y)\n", |
| " Var = r2_score(xpre[meter], y)\n", |
| " y = [0 if x < 2 else x for x in y]\n", |
| " return y, MSE, Var\n", |
| "\n", |
| "\n", |
| "def errorfun(xe, xfitted, meter): \n", |
| " x3 = (xe[meter] - xfitted)/xfitted\n", |
| "# x3 = [0 if x != -1 else x for x in x3]\n", |
| " x3[x3 == -1 ] = 0\n", |
| " return x3\n", |
| "\n", |
| "\n", |
| "#here is the XYZ to Lux and CCT calculation\n", |
| "def CCT(xcct,offX,offY,offZ,coeffX,coeffY,coeffZ): \n", |
| " X = offX + xcct['RC'] * coeffX[0] + xcct['GC'] \\\n", |
| " * coeffX[1] + xcct['BC'] * coeffX[2] + xcct['CC'] * coeffX[3]\n", |
| " X =[0 if x < 2 else x for x in X]\n", |
| " X = np.array(X)\n", |
| "\n", |
| " Y = offY + xcct['RC'] * coeffY[0] + xcct['GC'] \\\n", |
| " * coeffY[1] + xcct['BC'] * coeffY[2] + xcct['CC'] * coeffY[3]\n", |
| " \n", |
| " Y = [0 if x < 2 else x for x in Y]\n", |
| " Y =np.array(Y)\n", |
| "\n", |
| " Z = offZ + xcct['RC'] * coeffZ[0] + xcct['GC'] \\\n", |
| " * coeffZ[1] + xcct['BC'] * coeffZ[2] + xcct['CC'] * coeffZ[3]\n", |
| " Z = [0 if x < 2 else x for x in Z]\n", |
| " Z = np.array(Z)\n", |
| " sum = X + Y + Z\n", |
| " x = X / sum\n", |
| " y = Y / sum\n", |
| " n = (x - 0.3320)/(0.1858 - y)\n", |
| " CCT = 449.0 * n**3 + 3525.0 * n**2 + 6823.3 * n + 5520.33\n", |
| "# CCT = 437 * n**3 + 3601 * n**2 + 6861 * n + 5517\n", |
| " error = (CCT - xcct['MeterCCT'])/xcct['MeterCCT']\n", |
| " \n", |
| " return CCT, error, X, Y, Z\n", |
| "\n", |
| "\n", |
| "\n", |
| "def CCTPredict(xcctpre, X, Y, Z):\n", |
| " X = np.array(X)\n", |
| " Y = np.array(Y)\n", |
| " Z = np.array(Z)\n", |
| " sum = X + Y + Z\n", |
| " x = X/sum\n", |
| " y = Y/sum\n", |
| " n = (x - 0.3320)/(0.1858 - y)\n", |
| " CCT = 449.0 * n**3 + 3525.0 * n**2 + 6823.3 * n + 5520.33\n", |
| "# CCT = 437 * n**3 + 3601 * n**2 + 6861 * n + 5517\n", |
| " error = (CCT - xcctpre['MeterCCT'])/xcctpre['MeterCCT']\n", |
| " \n", |
| " \n", |
| " return CCT, error\n", |
| "\n", |
| " \n", |
| "def traintestslipt(xf):\n", |
| " train, test = train_test_split(xf, test_size=0.1)\n", |
| " return train, test\n", |
| " \n", |
| "\n", |
| "\n", |
| "#by book method for CCT calculation\n", |
| "# def CCTBook(xcctbook):\n", |
| "# X = xcctbook['RC'] * -0.14282 + xcctbook['GC'] *1.54924 * xcctbook['BC']*-0.95641\n", |
| "# Y = xcctbook['RC'] * -0.32466 + xcctbook['GC'] *1.57837 * xcctbook['BC']*-0.73191\n", |
| "# Z = xcctbook['RC'] * -0.68202 + xcctbook['GC'] *0.77073 * xcctbook['BC']*0.56332\n", |
| "# x = X / (X + Y + Z)\n", |
| "# y = Y / (X + Y + Z)\n", |
| "# n = (x - 0.3320)/(0.1858 - y)\n", |
| "# CCT = 437.0 * n**3 + 3601.0 * n**2 + 6861.0 * n + 5517.0\n", |
| "# error = (CCT - xcctbook['MeterCCT'])/xcctbook['MeterCCT']\n", |
| "# return CCT, error\n" |
| ] |
| }, |
| { |
| "cell_type": "code", |
| "execution_count": 51, |
| "metadata": {}, |
| "outputs": [ |
| { |
| "name": "stderr", |
| "output_type": "stream", |
| "text": [ |
| "C:\\Users\\afliu\\anaconda3\\lib\\site-packages\\ipykernel_launcher.py:12: SettingWithCopyWarning: \n", |
| "A value is trying to be set on a copy of a slice from a DataFrame.\n", |
| "Try using .loc[row_indexer,col_indexer] = value instead\n", |
| "\n", |
| "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", |
| " if sys.path[0] == '':\n", |
| "C:\\Users\\afliu\\anaconda3\\lib\\site-packages\\ipykernel_launcher.py:16: SettingWithCopyWarning: \n", |
| "A value is trying to be set on a copy of a slice from a DataFrame.\n", |
| "Try using .loc[row_indexer,col_indexer] = value instead\n", |
| "\n", |
| "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", |
| " app.launch_new_instance()\n", |
| "C:\\Users\\afliu\\anaconda3\\lib\\site-packages\\ipykernel_launcher.py:17: SettingWithCopyWarning: \n", |
| "A value is trying to be set on a copy of a slice from a DataFrame.\n", |
| "Try using .loc[row_indexer,col_indexer] = value instead\n", |
| "\n", |
| "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", |
| "C:\\Users\\afliu\\anaconda3\\lib\\site-packages\\ipykernel_launcher.py:18: SettingWithCopyWarning: \n", |
| "A value is trying to be set on a copy of a slice from a DataFrame.\n", |
| "Try using .loc[row_indexer,col_indexer] = value instead\n", |
| "\n", |
| "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", |
| "C:\\Users\\afliu\\anaconda3\\lib\\site-packages\\ipykernel_launcher.py:19: SettingWithCopyWarning: \n", |
| "A value is trying to be set on a copy of a slice from a DataFrame.\n", |
| "Try using .loc[row_indexer,col_indexer] = value instead\n", |
| "\n", |
| "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n" |
| ] |
| } |
| ], |
| "source": [ |
| "############\n", |
| "if __name__ == \"__main__\":\n", |
| " dataRaw = pd.read_excel('redrixEVT.xlsx')\n", |
| " data, dataTest = traintestslipt(dataRaw)\n", |
| " datanoIR = irRemoval(data)\n", |
| " dataTestnoIR = irRemoval(dataTest) \n", |
| " \n", |
| " regX,scoreX,coeffX,offX = fit(datanoIR, 'MeterX')\n", |
| " regY,scoreY,coeffY,offY = fit(datanoIR, 'MeterY')\n", |
| " regZ,scoreZ,coeffZ,offZ = fit(datanoIR, 'MeterZ')\n", |
| "\n", |
| " Xpredict,MSEX,VarX = predict(regX,dataTestnoIR, 'MeterX')\n", |
| "\n", |
| " Ypredict,MSEY,VarY = predict(regY,dataTestnoIR, 'MeterY')\n", |
| "\n", |
| " Zpredict,MSEZ,VarZ = predict(regZ,dataTestnoIR, 'MeterZ') \n", |
| " \n", |
| " errorX = errorfun(dataTestnoIR, Xpredict, 'MeterX')\n", |
| " errorY = errorfun(dataTestnoIR, Ypredict, 'MeterY')\n", |
| " errorZ = errorfun(dataTestnoIR, Zpredict, 'MeterZ') \n", |
| " \n", |
| "# CCTfit, errorfit = CCT(dataTestnoIR, offX, offY, offZ, coeffX, coeffY, coeffZ)\n", |
| " \n", |
| " CCTpredict, errorpredict = CCTPredict(dataTestnoIR, Xpredict, \n", |
| " Ypredict, Zpredict)\n", |
| "# dataVal = pd.read_excel('C18TestDataALS95210JDBU0G02S.xlsx')\n", |
| "# dataValnoIR = irRemoval(dataVal)\n", |
| "# CCTfit, errorfit, Y = CCT(dataValnoIR, offX, offY, offZ, coeffX, coeffY, coeffZ)\n", |
| " \n", |
| " " |
| ] |
| }, |
| { |
| "cell_type": "code", |
| "execution_count": 52, |
| "metadata": {}, |
| "outputs": [ |
| { |
| "data": { |
| "text/html": [ |
| "<div>\n", |
| "<style scoped>\n", |
| " .dataframe tbody tr th:only-of-type {\n", |
| " vertical-align: middle;\n", |
| " }\n", |
| "\n", |
| " .dataframe tbody tr th {\n", |
| " vertical-align: top;\n", |
| " }\n", |
| "\n", |
| " .dataframe thead th {\n", |
| " text-align: right;\n", |
| " }\n", |
| "</style>\n", |
| "<table border=\"1\" class=\"dataframe\">\n", |
| " <thead>\n", |
| " <tr style=\"text-align: right;\">\n", |
| " <th></th>\n", |
| " <th>Computer</th>\n", |
| " <th>Lamp</th>\n", |
| " <th>LM_Lux</th>\n", |
| " <th>ATIME Cycle</th>\n", |
| " <th>ATIME</th>\n", |
| " <th>AGAIN</th>\n", |
| " <th>CR</th>\n", |
| " <th>RR</th>\n", |
| " <th>GR</th>\n", |
| " <th>BR</th>\n", |
| " <th>...</th>\n", |
| " <th>MeterX</th>\n", |
| " <th>MeterY</th>\n", |
| " <th>MeterZ</th>\n", |
| " <th>Meterlux</th>\n", |
| " <th>MeterCCT</th>\n", |
| " <th>IR</th>\n", |
| " <th>RC</th>\n", |
| " <th>GC</th>\n", |
| " <th>BC</th>\n", |
| " <th>CC</th>\n", |
| " </tr>\n", |
| " </thead>\n", |
| " <tbody>\n", |
| " <tr>\n", |
| " <th>1</th>\n", |
| " <td>TPK_#1</td>\n", |
| " <td>D40</td>\n", |
| " <td>761.9</td>\n", |
| " <td>107.805755</td>\n", |
| " <td>299.7</td>\n", |
| " <td>16</td>\n", |
| " <td>3327.836364</td>\n", |
| " <td>2004.036364</td>\n", |
| " <td>798.981818</td>\n", |
| " <td>655.000000</td>\n", |
| " <td>...</td>\n", |
| " <td>765.9</td>\n", |
| " <td>761.9</td>\n", |
| " <td>492.9</td>\n", |
| " <td>761.9</td>\n", |
| " <td>4041</td>\n", |
| " <td>0.0</td>\n", |
| " <td>2904.214459</td>\n", |
| " <td>1898.148330</td>\n", |
| " <td>2489.743076</td>\n", |
| " <td>7747.851522</td>\n", |
| " </tr>\n", |
| " <tr>\n", |
| " <th>3</th>\n", |
| " <td>TPK_#1</td>\n", |
| " <td>TL84</td>\n", |
| " <td>1362.0</td>\n", |
| " <td>107.805755</td>\n", |
| " <td>299.7</td>\n", |
| " <td>16</td>\n", |
| " <td>3159.914286</td>\n", |
| " <td>1664.885714</td>\n", |
| " <td>925.057143</td>\n", |
| " <td>536.171429</td>\n", |
| " <td>...</td>\n", |
| " <td>1372.0</td>\n", |
| " <td>1362.0</td>\n", |
| " <td>762.0</td>\n", |
| " <td>1362.0</td>\n", |
| " <td>3792</td>\n", |
| " <td>0.0</td>\n", |
| " <td>2412.723268</td>\n", |
| " <td>2197.666619</td>\n", |
| " <td>2038.059698</td>\n", |
| " <td>7356.896203</td>\n", |
| " </tr>\n", |
| " <tr>\n", |
| " <th>47</th>\n", |
| " <td>HH_#2</td>\n", |
| " <td>SP03</td>\n", |
| " <td>3464.0</td>\n", |
| " <td>107.805755</td>\n", |
| " <td>299.7</td>\n", |
| " <td>4</td>\n", |
| " <td>3022.520000</td>\n", |
| " <td>1709.740000</td>\n", |
| " <td>813.680000</td>\n", |
| " <td>522.400000</td>\n", |
| " <td>...</td>\n", |
| " <td>3456.0</td>\n", |
| " <td>3464.0</td>\n", |
| " <td>1849.0</td>\n", |
| " <td>3464.0</td>\n", |
| " <td>3789</td>\n", |
| " <td>0.0</td>\n", |
| " <td>9910.901259</td>\n", |
| " <td>7732.267734</td>\n", |
| " <td>7942.850584</td>\n", |
| " <td>28148.062131</td>\n", |
| " </tr>\n", |
| " <tr>\n", |
| " <th>19</th>\n", |
| " <td>HH_#1</td>\n", |
| " <td>TL84</td>\n", |
| " <td>1372.0</td>\n", |
| " <td>107.805755</td>\n", |
| " <td>299.7</td>\n", |
| " <td>4</td>\n", |
| " <td>1035.520000</td>\n", |
| " <td>545.040000</td>\n", |
| " <td>322.260000</td>\n", |
| " <td>194.000000</td>\n", |
| " <td>...</td>\n", |
| " <td>1380.0</td>\n", |
| " <td>1372.0</td>\n", |
| " <td>754.0</td>\n", |
| " <td>1372.0</td>\n", |
| " <td>3775</td>\n", |
| " <td>0.0</td>\n", |
| " <td>3159.449754</td>\n", |
| " <td>3062.383984</td>\n", |
| " <td>2949.680347</td>\n", |
| " <td>9643.569372</td>\n", |
| " </tr>\n", |
| " <tr>\n", |
| " <th>41</th>\n", |
| " <td>HH_#2</td>\n", |
| " <td>CWF</td>\n", |
| " <td>1176.0</td>\n", |
| " <td>107.805755</td>\n", |
| " <td>299.7</td>\n", |
| " <td>16</td>\n", |
| " <td>3933.320000</td>\n", |
| " <td>2347.220000</td>\n", |
| " <td>1032.880000</td>\n", |
| " <td>557.200000</td>\n", |
| " <td>...</td>\n", |
| " <td>1279.0</td>\n", |
| " <td>1176.0</td>\n", |
| " <td>420.0</td>\n", |
| " <td>1176.0</td>\n", |
| " <td>2912</td>\n", |
| " <td>0.0</td>\n", |
| " <td>3401.550185</td>\n", |
| " <td>2453.822356</td>\n", |
| " <td>2117.992125</td>\n", |
| " <td>9157.535413</td>\n", |
| " </tr>\n", |
| " </tbody>\n", |
| "</table>\n", |
| "<p>5 rows × 24 columns</p>\n", |
| "</div>" |
| ], |
| "text/plain": [ |
| " Computer Lamp LM_Lux ATIME Cycle ATIME AGAIN CR \\\n", |
| "1 TPK_#1 D40 761.9 107.805755 299.7 16 3327.836364 \n", |
| "3 TPK_#1 TL84 1362.0 107.805755 299.7 16 3159.914286 \n", |
| "47 HH_#2 SP03 3464.0 107.805755 299.7 4 3022.520000 \n", |
| "19 HH_#1 TL84 1372.0 107.805755 299.7 4 1035.520000 \n", |
| "41 HH_#2 CWF 1176.0 107.805755 299.7 16 3933.320000 \n", |
| "\n", |
| " RR GR BR ... MeterX MeterY MeterZ \\\n", |
| "1 2004.036364 798.981818 655.000000 ... 765.9 761.9 492.9 \n", |
| "3 1664.885714 925.057143 536.171429 ... 1372.0 1362.0 762.0 \n", |
| "47 1709.740000 813.680000 522.400000 ... 3456.0 3464.0 1849.0 \n", |
| "19 545.040000 322.260000 194.000000 ... 1380.0 1372.0 754.0 \n", |
| "41 2347.220000 1032.880000 557.200000 ... 1279.0 1176.0 420.0 \n", |
| "\n", |
| " Meterlux MeterCCT IR RC GC BC \\\n", |
| "1 761.9 4041 0.0 2904.214459 1898.148330 2489.743076 \n", |
| "3 1362.0 3792 0.0 2412.723268 2197.666619 2038.059698 \n", |
| "47 3464.0 3789 0.0 9910.901259 7732.267734 7942.850584 \n", |
| "19 1372.0 3775 0.0 3159.449754 3062.383984 2949.680347 \n", |
| "41 1176.0 2912 0.0 3401.550185 2453.822356 2117.992125 \n", |
| "\n", |
| " CC \n", |
| "1 7747.851522 \n", |
| "3 7356.896203 \n", |
| "47 28148.062131 \n", |
| "19 9643.569372 \n", |
| "41 9157.535413 \n", |
| "\n", |
| "[5 rows x 24 columns]" |
| ] |
| }, |
| "execution_count": 52, |
| "metadata": {}, |
| "output_type": "execute_result" |
| } |
| ], |
| "source": [ |
| "dataTestnoIR" |
| ] |
| }, |
| { |
| "cell_type": "code", |
| "execution_count": 53, |
| "metadata": {}, |
| "outputs": [ |
| { |
| "data": { |
| "text/plain": [ |
| "[799.7375670523379,\n", |
| " 1019.6266309271426,\n", |
| " 3423.0528449287563,\n", |
| " 1326.3456303951457,\n", |
| " 1191.9857800495433]" |
| ] |
| }, |
| "execution_count": 53, |
| "metadata": {}, |
| "output_type": "execute_result" |
| } |
| ], |
| "source": [ |
| "Ypredict" |
| ] |
| }, |
| { |
| "cell_type": "code", |
| "execution_count": 54, |
| "metadata": {}, |
| "outputs": [ |
| { |
| "data": { |
| "text/plain": [ |
| "array([3917.01579235, 3635.60950233, 3687.56230221, 3594.43070821,\n", |
| " 3021.72238322])" |
| ] |
| }, |
| "execution_count": 54, |
| "metadata": {}, |
| "output_type": "execute_result" |
| } |
| ], |
| "source": [ |
| "CCTpredict" |
| ] |
| }, |
| { |
| "cell_type": "code", |
| "execution_count": 55, |
| "metadata": {}, |
| "outputs": [], |
| "source": [ |
| "errorpredict =pd.DataFrame(errorpredict)\n", |
| "errorpredict = errorpredict.replace([np.inf, -np.inf], np.nan)\n", |
| "errorpredict = errorpredict.fillna(0)\n" |
| ] |
| }, |
| { |
| "cell_type": "code", |
| "execution_count": 56, |
| "metadata": {}, |
| "outputs": [], |
| "source": [ |
| "errorpredict = errorpredict.to_numpy()" |
| ] |
| }, |
| { |
| "cell_type": "code", |
| "execution_count": 57, |
| "metadata": {}, |
| "outputs": [ |
| { |
| "data": { |
| "text/plain": [ |
| "(-20.0, 20.0)" |
| ] |
| }, |
| "execution_count": 57, |
| "metadata": {}, |
| "output_type": "execute_result" |
| }, |
| { |
| "data": { |
| "image/png": "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\n", |
| "text/plain": [ |
| "<Figure size 432x288 with 1 Axes>" |
| ] |
| }, |
| "metadata": { |
| "needs_background": "light" |
| }, |
| "output_type": "display_data" |
| } |
| ], |
| "source": [ |
| "plt.plot(errorpredict*100)\n", |
| "plt.title('Percent error of CCT')\n", |
| "plt.xlabel(\"test samples\")\n", |
| "plt.ylabel(\"Pecent error\")\n", |
| "plt.ylim(-20, 20)" |
| ] |
| }, |
| { |
| "cell_type": "code", |
| "execution_count": 58, |
| "metadata": {}, |
| "outputs": [ |
| { |
| "data": { |
| "text/plain": [ |
| "(0.9910458200828061, 0.9950548283384971, 0.9949225494306511)" |
| ] |
| }, |
| "execution_count": 58, |
| "metadata": {}, |
| "output_type": "execute_result" |
| } |
| ], |
| "source": [ |
| "scoreX, scoreY, scoreZ" |
| ] |
| }, |
| { |
| "cell_type": "code", |
| "execution_count": 59, |
| "metadata": {}, |
| "outputs": [ |
| { |
| "data": { |
| "text/plain": [ |
| "(61.602194190310456, 39.373434138447124, 7.042372764329684)" |
| ] |
| }, |
| "execution_count": 59, |
| "metadata": {}, |
| "output_type": "execute_result" |
| } |
| ], |
| "source": [ |
| "offX, offY, offZ" |
| ] |
| }, |
| { |
| "cell_type": "code", |
| "execution_count": 126, |
| "metadata": {}, |
| "outputs": [], |
| "source": [ |
| "list = [offX, offY, offZ]" |
| ] |
| }, |
| { |
| "cell_type": "code", |
| "execution_count": 127, |
| "metadata": {}, |
| "outputs": [], |
| "source": [ |
| "list = np.array(list)" |
| ] |
| }, |
| { |
| "cell_type": "code", |
| "execution_count": 128, |
| "metadata": {}, |
| "outputs": [ |
| { |
| "data": { |
| "text/plain": [ |
| "array([[66.47729532],\n", |
| " [40.95355984],\n", |
| " [ 5.08596128]])" |
| ] |
| }, |
| "execution_count": 128, |
| "metadata": {}, |
| "output_type": "execute_result" |
| } |
| ], |
| "source": [ |
| "list.reshape(3,1)" |
| ] |
| }, |
| { |
| "cell_type": "code", |
| "execution_count": 129, |
| "metadata": {}, |
| "outputs": [ |
| { |
| "data": { |
| "text/plain": [ |
| "(array([ 0.00222243, 0.51877192, -0.28664117, 0.0586877 ]),\n", |
| " array([-0.15384715, 0.40454969, -0.237452 , 0.13102168]),\n", |
| " array([-0.79005309, -0.35553576, 0.13997097, 0.40223911]))" |
| ] |
| }, |
| "execution_count": 129, |
| "metadata": {}, |
| "output_type": "execute_result" |
| } |
| ], |
| "source": [ |
| "coeffX, coeffY, coeffZ" |
| ] |
| }, |
| { |
| "cell_type": "code", |
| "execution_count": 130, |
| "metadata": {}, |
| "outputs": [ |
| { |
| "data": { |
| "text/plain": [ |
| "[39.10165801939297,\n", |
| " 276.0875848668759,\n", |
| " 1155.5706452266984,\n", |
| " 897.0984228133925,\n", |
| " 1927.637004373839]" |
| ] |
| }, |
| "execution_count": 130, |
| "metadata": {}, |
| "output_type": "execute_result" |
| } |
| ], |
| "source": [ |
| "Zpredict" |
| ] |
| }, |
| { |
| "cell_type": "code", |
| "execution_count": 131, |
| "metadata": {}, |
| "outputs": [ |
| { |
| "data": { |
| "text/plain": [ |
| "5.085961281052107" |
| ] |
| }, |
| "execution_count": 131, |
| "metadata": {}, |
| "output_type": "execute_result" |
| } |
| ], |
| "source": [ |
| "offZ" |
| ] |
| }, |
| { |
| "cell_type": "code", |
| "execution_count": 132, |
| "metadata": {}, |
| "outputs": [ |
| { |
| "data": { |
| "text/plain": [ |
| "66.47729531891889" |
| ] |
| }, |
| "execution_count": 132, |
| "metadata": {}, |
| "output_type": "execute_result" |
| } |
| ], |
| "source": [ |
| "offX" |
| ] |
| }, |
| { |
| "cell_type": "code", |
| "execution_count": 134, |
| "metadata": {}, |
| "outputs": [ |
| { |
| "data": { |
| "text/plain": [ |
| "40.953559839080526" |
| ] |
| }, |
| "execution_count": 134, |
| "metadata": {}, |
| "output_type": "execute_result" |
| } |
| ], |
| "source": [ |
| "offY" |
| ] |
| }, |
| { |
| "cell_type": "code", |
| "execution_count": 135, |
| "metadata": {}, |
| "outputs": [ |
| { |
| "name": "stderr", |
| "output_type": "stream", |
| "text": [ |
| "C:\\Users\\afliu\\anaconda3\\lib\\site-packages\\ipykernel_launcher.py:91: RuntimeWarning: invalid value encountered in true_divide\n", |
| "C:\\Users\\afliu\\anaconda3\\lib\\site-packages\\ipykernel_launcher.py:92: RuntimeWarning: invalid value encountered in true_divide\n" |
| ] |
| } |
| ], |
| "source": [ |
| "CCT, error = CCTPredict(datanoIR, datanoIR['MeterX'], datanoIR['MeterY'], datanoIR['MeterZ'])" |
| ] |
| }, |
| { |
| "cell_type": "code", |
| "execution_count": 136, |
| "metadata": {}, |
| "outputs": [ |
| { |
| "data": { |
| "text/plain": [ |
| "25 0.000732\n", |
| "6 -0.001073\n", |
| "3 0.000740\n", |
| "19 0.001216\n", |
| "44 -0.001216\n", |
| "13 -0.012617\n", |
| "26 0.000812\n", |
| "27 0.000868\n", |
| "1 0.001972\n", |
| "24 -0.000563\n", |
| "16 NaN\n", |
| "42 0.000632\n", |
| "10 0.000716\n", |
| "11 0.000106\n", |
| "7 -0.001071\n", |
| "29 -0.013108\n", |
| "17 0.001914\n", |
| "34 -0.001512\n", |
| "22 -0.000236\n", |
| "40 -0.000668\n", |
| "33 0.002034\n", |
| "5 0.001571\n", |
| "43 0.000375\n", |
| "47 0.001205\n", |
| "2 -0.001855\n", |
| "37 0.001399\n", |
| "30 -0.001748\n", |
| "20 0.001490\n", |
| "45 -0.011534\n", |
| "21 0.001034\n", |
| "12 -0.001995\n", |
| "31 0.001216\n", |
| "46 -0.001829\n", |
| "9 -0.000404\n", |
| "36 0.001562\n", |
| "0 NaN\n", |
| "18 -0.001933\n", |
| "38 -0.000845\n", |
| "4 0.001894\n", |
| "41 0.000541\n", |
| "35 0.002165\n", |
| "39 -0.000460\n", |
| "8 -0.001024\n", |
| "Name: MeterCCT, dtype: float64" |
| ] |
| }, |
| "execution_count": 136, |
| "metadata": {}, |
| "output_type": "execute_result" |
| } |
| ], |
| "source": [ |
| "error" |
| ] |
| }, |
| { |
| "cell_type": "code", |
| "execution_count": 137, |
| "metadata": {}, |
| "outputs": [ |
| { |
| "data": { |
| "text/plain": [ |
| "[24.47292542974922,\n", |
| " 846.5714148315197,\n", |
| " 1277.2541218888157,\n", |
| " 2525.666277890724,\n", |
| " 3348.5782429752053]" |
| ] |
| }, |
| "execution_count": 137, |
| "metadata": {}, |
| "output_type": "execute_result" |
| } |
| ], |
| "source": [ |
| "Ypredict" |
| ] |
| }, |
| { |
| "cell_type": "code", |
| "execution_count": 138, |
| "metadata": {}, |
| "outputs": [ |
| { |
| "data": { |
| "text/plain": [ |
| "[39.10165801939297,\n", |
| " 276.0875848668759,\n", |
| " 1155.5706452266984,\n", |
| " 897.0984228133925,\n", |
| " 1927.637004373839]" |
| ] |
| }, |
| "execution_count": 138, |
| "metadata": {}, |
| "output_type": "execute_result" |
| } |
| ], |
| "source": [ |
| "Zpredict" |
| ] |
| }, |
| { |
| "cell_type": "code", |
| "execution_count": 139, |
| "metadata": {}, |
| "outputs": [ |
| { |
| "data": { |
| "text/html": [ |
| "<div>\n", |
| "<style scoped>\n", |
| " .dataframe tbody tr th:only-of-type {\n", |
| " vertical-align: middle;\n", |
| " }\n", |
| "\n", |
| " .dataframe tbody tr th {\n", |
| " vertical-align: top;\n", |
| " }\n", |
| "\n", |
| " .dataframe thead th {\n", |
| " text-align: right;\n", |
| " }\n", |
| "</style>\n", |
| "<table border=\"1\" class=\"dataframe\">\n", |
| " <thead>\n", |
| " <tr style=\"text-align: right;\">\n", |
| " <th></th>\n", |
| " <th>MeterX</th>\n", |
| " </tr>\n", |
| " </thead>\n", |
| " <tbody>\n", |
| " <tr>\n", |
| " <th>32</th>\n", |
| " <td>0.000000</td>\n", |
| " </tr>\n", |
| " <tr>\n", |
| " <th>23</th>\n", |
| " <td>0.018074</td>\n", |
| " </tr>\n", |
| " <tr>\n", |
| " <th>14</th>\n", |
| " <td>-0.018271</td>\n", |
| " </tr>\n", |
| " <tr>\n", |
| " <th>28</th>\n", |
| " <td>0.018169</td>\n", |
| " </tr>\n", |
| " <tr>\n", |
| " <th>15</th>\n", |
| " <td>-0.006494</td>\n", |
| " </tr>\n", |
| " </tbody>\n", |
| "</table>\n", |
| "</div>" |
| ], |
| "text/plain": [ |
| " MeterX\n", |
| "32 0.000000\n", |
| "23 0.018074\n", |
| "14 -0.018271\n", |
| "28 0.018169\n", |
| "15 -0.006494" |
| ] |
| }, |
| "execution_count": 139, |
| "metadata": {}, |
| "output_type": "execute_result" |
| } |
| ], |
| "source": [ |
| "errorX = pd.DataFrame(errorX)\n", |
| "errorX" |
| ] |
| }, |
| { |
| "cell_type": "code", |
| "execution_count": 140, |
| "metadata": {}, |
| "outputs": [ |
| { |
| "data": { |
| "text/html": [ |
| "<div>\n", |
| "<style scoped>\n", |
| " .dataframe tbody tr th:only-of-type {\n", |
| " vertical-align: middle;\n", |
| " }\n", |
| "\n", |
| " .dataframe tbody tr th {\n", |
| " vertical-align: top;\n", |
| " }\n", |
| "\n", |
| " .dataframe thead th {\n", |
| " text-align: right;\n", |
| " }\n", |
| "</style>\n", |
| "<table border=\"1\" class=\"dataframe\">\n", |
| " <thead>\n", |
| " <tr style=\"text-align: right;\">\n", |
| " <th></th>\n", |
| " <th>MeterY</th>\n", |
| " </tr>\n", |
| " </thead>\n", |
| " <tbody>\n", |
| " <tr>\n", |
| " <th>32</th>\n", |
| " <td>0.000000</td>\n", |
| " </tr>\n", |
| " <tr>\n", |
| " <th>23</th>\n", |
| " <td>-0.001856</td>\n", |
| " </tr>\n", |
| " <tr>\n", |
| " <th>14</th>\n", |
| " <td>-0.017423</td>\n", |
| " </tr>\n", |
| " <tr>\n", |
| " <th>28</th>\n", |
| " <td>0.005675</td>\n", |
| " </tr>\n", |
| " <tr>\n", |
| " <th>15</th>\n", |
| " <td>-0.005548</td>\n", |
| " </tr>\n", |
| " </tbody>\n", |
| "</table>\n", |
| "</div>" |
| ], |
| "text/plain": [ |
| " MeterY\n", |
| "32 0.000000\n", |
| "23 -0.001856\n", |
| "14 -0.017423\n", |
| "28 0.005675\n", |
| "15 -0.005548" |
| ] |
| }, |
| "execution_count": 140, |
| "metadata": {}, |
| "output_type": "execute_result" |
| } |
| ], |
| "source": [ |
| "errorY = pd.DataFrame(errorY)\n", |
| "errorY" |
| ] |
| }, |
| { |
| "cell_type": "code", |
| "execution_count": 141, |
| "metadata": {}, |
| "outputs": [ |
| { |
| "data": { |
| "text/plain": [ |
| "(-12.0, 12.0)" |
| ] |
| }, |
| "execution_count": 141, |
| "metadata": {}, |
| "output_type": "execute_result" |
| }, |
| { |
| "data": { |
| "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYcAAAEWCAYAAACNJFuYAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4yLjIsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+WH4yJAAAgAElEQVR4nO3deXhc9X3v8ffX8r7Ki7xKsrxhm82yMTa2chMwYU1YkkIDlM1pLyFNw6VNmyZNb0raJy1N0za9vU9uShNsAoEkJIVQEiCAnZDIxkbesA3ewLIlb5IXybJlWdv3/nGOlUFHssda5ow0n9fzzOOZc86c+c6xZj5zfr9zfsfcHRERkUR94i5ARETSj8JBREQiFA4iIhKhcBARkQiFg4iIRCgcREQkQuEgkoHMbJCZ/beZVZvZs3HXI+lH4SBpx8xKzeyUmZ0ws0NmtszMhsZd1xlm9oiZPRV3HZ10GzAOGO3ut7eeaWb/bGavtJr2LTN7MVUFSrwUDpKubnL3ocA84HLgr8/nyRboEX/fZta31ePzqr2D73UysMPdG9uZ/7+BaWa2NHyNRcB9wIPn+TrSQ/WID49kLnffB7wEXAxgZleY2SozqzKzTWZ25ZllzexXZvZ1MysGaoGpZnaRmb1qZkfDvZC/CpftY2ZfMrP3zOyImf3YzEaF8wrMzM3sPjPba2aHzewr4bzrgb8CPhXu2Wxqq24zm2hmPzWzSjPbbWYPJcx7xMx+YmZPmdlx4P52al9sZm+FTT9vmdnis73XNmqYHS5XZWZbzezmcPrXgK8mvIc/bGO71wJ/BHzTzAqAx4EvuXt5Mv9v0gu4u266pdUNKAU+Gt7PA7YCfwdMAo4ANxL8sLkmfJwTLvsrYC9wEdAXGAYcAL4ADAwfLwyXfRh4E8gFBgD/ATwTzisAHPhPYBAwBzgNzA7nPwI8dZb6+wDrCL6A+xN8cb8PXJfw/Abg1nDZQW3UPg44BtwTPr4zfDy6nffar1UN/YBdBEHWH1gC1AAzk3kPCev5D+Bw+HoW99+Gbqm7ac9B0tXzZlYF/Bb4NfD3wN3AL9z9F+7e7O6vAiUEYXHGcnff6kFzyceBg+7+z+5e5+417r4mXO4zwFfcvdzdTxN8Wd7Wqonna+5+yt03AZsIQiIZlxME1t+6e727v08QNHckLLPa3Z8P38epNmq/Ftjp7k+6e6O7PwNsA25q6726e0OrGq4AhgKPhjWsAF4kCJnz8RtgNPADd9dAbBmk77kXEYnFre7+WuIEM5sM3G5miV+Q/YCVCY/LEu7nAe+1s/7JwHNm1pwwrYngF/sZBxPu1xJ82SZjMjAxDLczsgi+aNuqs61pE4E9rebvIdh7Ots6Ep9f5u6J76/188/KzEYD3wS+BfytmT3r7lXneJr0EtpzkJ6kDHjS3bMTbkPc/dGEZbzV8tPOsq4bWq1roAd9HOdyrl/QZcDuVuse5u6JezhtrSNx2n6CkEmUDyTWd7Y69gN5rTqqWz//XL4FvOzufwq8QRAUkiEUDtKTPAXcZGbXmVmWmQ00syvNLLed5V8ExpvZw2Y2wMyGmdnCcN53gK+HeyOYWY6Z3ZJkHYeAgrMcIbQWOG5mfxmeT5BlZheb2eVJrh/gF8AFZnaXmfU1s08BF4bvKRlrgJPAF82sX9hxfxPww2SebGY3EvTp/Fk46fPArWZ21Xm8B+nBFA7SY7h7GXALQSdrJcEv9L+gnb9jd68h+IK7iaCJaCdw5svt34AXgF+aWQ1B5/TCttbThjMnjR0xs/VtvG5T+JqFwG6CDt3vAiOSXD/ufoSgz+QLBJ3uXwQ+7u6Hk3x+PXAzcEP4+t8G7nX3bed6rpkNIwjPh9z9aLi+irCW/zSzQcm+D+m5TH1MIiLSmvYcREQkQuEgIiIRCgcREYlQOIiISESvOAluzJgxXlBQEHcZIiI9yrp16w67e05b83pFOBQUFFBSUhJ3GSIiPYqZtT4Lv4WalUREJELhICIiEQoHERGJUDiIiEiEwkFERCIUDiIiEqFwEBGRCIWDiIhEKBxERCRC4SAiIhEKBxERiVA4iIhIhMJBREQiYg0HM3vczCrMbEvCtFFm9qqZ7Qz/HRlnjSIimSjuPYflwPWtpn0JeN3dZwCvh49FRCSFYg0Hd38DONpq8i3AE+H9J4BbU1qUiIjEvufQlnHufgAg/HdsWwuZ2QNmVmJmJZWVlSktUESkt0vHcEiKuz/m7vPdfX5OTptXuRMRkQ5Kx3A4ZGYTAMJ/K2KuR0Qk46RjOLwA3Bfevw/4WYy1iIhkpLgPZX0GWA3MNLNyM/tD4FHgGjPbCVwTPhYRkRTqG+eLu/ud7cy6OqWFiIjIB6Rjs5KIiMRM4SAiIhEKBxERiVA4iIhIhMJBREQiFA4iIhKhcBARkQiFg4iIRCgcREQkQuEgIiIRCgcREYlQOIiISITCQUREIhQOIiISoXAQEZEIhYOIiEQoHEREJELhICIiEQoHERGJUDiIiEiEwkFERCIUDiIiEqFwEBGRCIWDiIhEKBxERCRC4SAiIhEKBxERiVA4iIhIhMJBREQiFA4iIhKhcBARkQiFg4iIRCgcREQkQuEgIiIRCgcREYlQOIiISITCQUREIvrGXUB7zKwUqAGagEZ3nx9vRSIimSNtwyF0lbsfjrsIEZFMo2YlERGJSOdwcOCXZrbOzB5oPdPMHjCzEjMrqaysjKE8EZHeK53Docjd5wE3AJ8zsw8nznT3x9x9vrvPz8nJiadCEZFeKm3Dwd33h/9WAM8BC+KtSEQkc6RlOJjZEDMbduY+cC2wJd6qREQyR7oerTQOeM7MIKjxaXd/Od6SREQyR1qGg7u/D8yJuw4RkUyVls1KIiISL4WDiIhEKBxERCRC4SAiIhEKBxERiVA4iIhIhMJBREQiFA4iIhKhcBARkQiFg4iIRJw1HMwsy8xeS1UxIiKSHs4aDu7eBNSa2YgU1SMiImkgmYH36oDNZvYqcPLMRHd/qNuqEhGRWCUTDj8PbyIikiHOGQ7u/oSZ9QcuCCdtd/eG7i1LRETidM5wMLMrgSeAUsCAPDO7z93f6N7SREQkLsk0K/0zcK27bwcwswuAZ4DLurMwERGJTzLnOfQ7EwwA7r4D6Nd9JYmISNyS2XNYZ2bfA54MH/8BsK77ShIRkbglEw4PAp8DHiLoc3gD+HZ3FiUiIvE6aziYWR9gnbtfDPxLakoSEZG4nesM6WZgk5nlp6geSXPNzR53CdKLnTjdSH1jc9xlCMk1K00AtprZWj54hvTN3VaVpIWmZmdnRQ0b91axsSy47aw4wYKCUSwtKuDq2ePI6mNxlym9wObyapYV7+a/397PgL5Z/I8ZY7hq1liumjmWnGED4i4vIyUTDl/r9iokLRw6XseGliA4xubyak7WNwEwYlA/CvOyuWLqaH659SAPPLmOvFGDuG9RAb9/eR7DB+oANjk/jU3NvLL1EMuKd1Oy5xhD+mdx54J8GpqaWbGtgpe2HATg0twRLJk1liWzxnLxxBH00Q+SlDD39psJwj6Ht8M+h7Q1f/58LykpibuMHuVUfROb91WzsexYEAZ7q9hfXQdAvyxj9oThFOZlMzc/m8K8kRSMHoxZ8KFsbGrml+8EH+q3So8xuH8Wt12Wy32LC5iWMzTOtyU9QFVtPc+sLePJ1aXsr64jf9Rg7ltcwO3zc1t+ZLg77xw4zop3K1ixvYKNZVW4Q86wAVx5QQ5LZo3lQzPGMEw/SjrFzNa5+/w2550tHMIn/wD4srvv7Y7iuoLC4eyam533Kk+wIWwa2ri3iu2HamgK+w/yRg2iMG8khXnZFOZlc9HE4Qzsl5XUurfsq+bx4t28uOkA9U3NXDkzh/sXF/DhGTn6hScfsONQDcuKS3luQzl1Dc0smjqaT39oCktmjT1n8+SRE6f59Y5KVmyr4I0dlRyva6RflrFgyiiumhnsVUzVD5Pz1tlwWAFcDqRtn4PC4YMOnzjd0k+woewYb5dVU3O6EYBhA/oyp2WPIJs5edmMGdr5Nt3KmtM8vWYvT63ZQ2XNaablDOH+xQV8cl4uQwYk03opvVFzs7NyewXLikv57a7DDOjbh1sLJ3F/UQGzJwzv0Dobm5pZt+cYK7ZVsGJbBTsrTgBQMHowS2aNY8mssSyYMor+fXUts3PpbDh8pK3p7v7rLqitS2RyONQ1NLF1f3VCX0EV5cdOAZDVx5g1fljLHsHc/Gymjhnarb/o6xub+fnm/SwrLuXt8mqGDezLp+bncd/iAvJGDe6215X0cuJ0Iz8pKWP5qlJKj9QybvgA7l1UwJ0L8hk1pH+XvlbZ0VpWbq/g9XcrWP3+EeobmxnSP4sPzRjDkrBTe+zwgV36mr1Fp8IhXMFkYIa7v2Zmg4Esd6/p4jo7LFPCobnZ2X3k5AeOHnr3wHEaw+ahiSMGMjc/bB7Kz+biiSMY1D+55qGu5u6s31vFsuLdvLTlIO7OR2ePY2nRFK6YOqql/0J6l71Halm+qpRnS8qoOd3I3PxslhZN4YaLx9Mvq/t/ydfWN7Jq1xFWbK9g5bYKDoT9aJdMGsFVYaf2pZPUqX1GZ/cc/ifwADDK3aeZ2QzgO+5+ddeX2jG9NRyOnqxnU1lVQl/BMY7XBc1DQ/pncWluEAKFednMzctO219HB6pP8dSbe3h6zV6O1TYwa/wwlhYVcEvhpKT7NiR9uTur3zvC48WlvL7tEFlmfOzSCSwtmkJhXnasdW07WNPS/LRh7zGaHcYM7c9HLhjL1bODTu1MPtKus+GwEVgArHH3ueG0ze5+SZdX2kG9IRxONzbxzv7jLXsEG8uq2HOkFoA+BheMG9bST1CYN5LpY4f2uHMM6hqa+NnGfSwrLmXbwRpGDu7HXQvzueeKAsaPSM9gk/bVNTTx/IZ9LF8V/H+OGtKfP1iYz91XTGZcGv5QOXayvqVT+9c7Kqk+1UDfPsblBaOC5qdZY5mWMySj9mo7Gw5r3H2hmW1w97lm1hdY7+6XdkexHdHTwsHd2Xu0Nugw3hvsGby7/zj1TcGZoeOGD2gJgcK8bC7NHdGrOnXdndXvH2F5cSmvvhv80rzhkgncv7iAefnZGfXh7IkOVJ/iydV7eGbt7/YEP100hZsLJ/aYPcHGpmbW761ixbag+Wn7oaCVfPLowS1HPy2cOooBfXvG++mozobDN4Aq4F7g88AfA++4+1e6utCOSvdwqK5tYGN5VdhXcIxN5dUcPVkPwKB+WVySO4K5YadxYX42E0YMirni1Ck7WssTq0r5UUkZNXWNzMkdwdKiKdx4yQQdbZJm1u89xuO/3c3LWw7S5M41vagPqfxYLSu3V7JyWwXFuw5zurGZwf2zKJo+hqvDvYp03BvqrM6GQx/gD4FrCUZlfQX4rifTk50i6RQO9Y3NbDt4vOV8go1lVbx/ODgC2Aym5wxtCYHCvGxmjhtG3xR01KW7k6cb+en6cpYXl/L+4ZOMHTaAu6+YzF0L87vkUFvpmPrGZl7acoDHi0vZVFaVEUefnapvYvX7h8O9ikr2VQVH/100cXhL89Oc3Owe16zblk4frZTu4goHd6f82KkP9BNs2VfN6XDgsDFDByScZZzNJbkjMrrzKxnNzc4bOytZVlzKr3dU0j+rDzfNmcjSogIunjQi7vIyxpETwXkrT765h4qa00wdM4T7iwr4vQw7b8Xd2XHoBK9vO8TKbRWs2xN0ao8a0p8rZwZnav+PGTmMGNQzP9cKhy5yvK6Bt8sShpwoq+LwiaB5aEDfPlw8acQHwmBS9qAev7sdp10VJ3hiVSk/XV9ObX1Ty4B/11w4Tntb3eSd/cdZVrybn23aT31jMx++IIelRQV8RGe8A8HQH7/eETQ//WpHJVW1DWT1MeZPHsmSWcERUNNyhvaYz32PDAczux74NyCLoBnr0faW7Y5waGxqZvuhmpZO441lVbxXeYIzm2tqzpCWQ0gL80Yya8KwlBzHnYmqTzXwbHhCVfmxU0zKHsQ9iyZzx+V5ZA/u2hOqMlFTs/Pau8FYWW++f5RB/bL45LxJLC0qYPrYYXGXl7aamp0Ne393pva2g0Gndt6oQSyZGTQ/XTF1dFp30ne2z+F2d3/2XNO6kpllATuAa4By4C3gTnd/p63lOxsO7s6B6rrfNQ/trWLzvmpONQQjko4c3C/cIwiOHpqTm82IwT1zN7Ina/0lNrBfHz45L5eliwuYMU5fYufrTOg+sbqUsqNB6N67aDJ3XJ6vv+8O2F91ipXhyXe/3XWYuoZmBvXLomj6aJbMGsdVs3LS7mCTzobDenefd65pXcnMFgGPuPt14eMvA7j7P7S1fEfDYVdFDd94eTsby6qoqDkNQP+sPlw4cfgHmofyRw3uMbuJmeLdA8dZXlzK8xv3cbqxmQ9NH8PSogKumjlWzR/n8H7lCZavKuUn69Rc113qGppY/f4RVoZ7FWeGtJk9YThLZgV9FYV5I2Pv1O5QOJjZDcCNwO8DP0qYNRy40N0XdHWhCa99G3C9u/9R+PgeYKG7/0nCMg8QnLlNfn7+ZXv27Dnv19lz5CT3Pr424TDSkcyeMKzXH9vcmxw9Wc8za/fy5Oo9HDxeR8HoYPjn2y7L1XDOCdydN3YeZlnxbn61XR39qeTu7Ko4wethUKzbc4ymZmfk4H5cGTY/fWRGTix7ax0NhzlAIfC3wFcTZtUAK939WFcXmvDatwPXtQqHBe7++baWT6dDWSUeDU3NvLzlIMuKd7N+bxVDB/TltstyuX9xAQVjhsRdXmxq6xv56fp9LC/ezXuVJ8kZNoC7FwaHCOsKa/Gorm3gjZ2/69Q+erKerD7GZfkjWTI7OAFvxtjUdGp3tlmpn7s3dEtl7b9mSpqVpHfaVBYM+PfzzQdobHaWzBzL/UUFfGj6mIxpHiw/Vsv3V+/hh2v3cryukUtzR7C0qICPXTJRJxemkaZmZ2NZVUvz0zsHjgMwKXtQy9XvFk3rvk7tzoZDEfAIMJngsqIGuLtP7eI6E1+zL0GH9NXAPoIO6bvcfWtbyyscpC0Vx+t4as1enl6zh8Mn6pkxdij3FxXwybm5sY1W253cnbdKj7GseDevbD2ImXH9ReNZWlTAZZNHZkww9mQHq+tahh8v3nWYUw1NDOzXh6JpY1pGlZ2Y3XWd2p0Nh23AnwLrgKYz0939SJdV2Pbr3gh8i+BQ1sfd/evtLatwkLM53djEf286wLLi3Wzdf5wRg/pxx4I87l1UwKQu/KDFpa33d+eCfO5dNLlLv0gkteoamliz+2jLXsXeo8FAnLPGD2vZq5ib37lO7S4ZeK/Dr54CCgdJhrtTsif4Zf1yePH66y4az9KiKVxe0PN+WVfU1PHUmx/cM1paNIVPzJ3UK/eMMpm7817lSVZsO8SKbRWUlB6jsdnJHtyPuxdO5s+vm9mh9XY2HB4l+PX+X8DphGLXd6iabqBwkPO1r+oU319dyg/XllF9qoGLJg5nadEUbpozIe2PVnu7vIplxaW8+Pb+lj6VpUVTKJo+uscFnHTM8boGfrMjGP9p+tihfPbKaR1aT2fDYWUbk93dl3Somm6gcJCOqq1v5PkN+1lWvJudFScYM7Q/dy0IrkmQThdPamxq5uWtB1lWXMq6PccY0j+L2+fnZfzRWNI5PXL4jPOhcJDOcneKdx1h+ardvL6tgr59jI9dElzNbE6MVzOrqq3nmbVlPLm6lP3VdeSPGsz9iwu4fb7O45DO6+yewzjg74GJ7n6DmV0ILHL373V9qR2jcJCuVHr4JE+sLuXZknJOnG5kXn4296fwOsgAOw7VsKy4lOc2lFPX0MziaaNZWjSFJbPGxn5WrfQenQ2Hl4BlwFfcfU54mOkGXSZUeruaugZ+sq6cJ1aVUnqklvHDB3LPosncuSCfUUO6fsC/5mZn5fYKlhWX8ttdhxnQtw+fmDuJ+4sKmDV+eJe/nkhnw+Etd7/8zGVCw2kb3b2wG2rtEIWDdKfmZudXO4Iv7d/sPEz/vn24tXAiS4umMHtC57+0T5xuDAbAS1EIiZxxtnBI5qodJ81sNODhyq4AqruwPpG01qePsWTWOJbMGsfOQzUsW1XKf60v58cl5VwxdRRLi6bw0dnjzru5Z8+Rkyxf9cHmqy9cO5PrU9h8JdKeZPYc5gH/DlwMbAFygNvc/e3uLy852nOQVKuqredHb5Xx/dV72Fd1ityRg7hvUQG/f3neWa8K5u6sfu8IjxcHHd9ZZnz80vg7viUzdfpopbCfYSbB0BnbUz3W0rkoHCQujU3NvPrOIZYVl7K29CiD+2fxe/NyuW9xAdPHDm1Zrq6hiec37GNZcSnbD9Uwekh/7loYHDLbGy9cLz1DZ/scPgf8wN2rwscjCS688+0ur7SDFA6SDrbsq2b5qlJe2Lif+qbgEpt3Lcjn7fIqnlm7l2O1DcyeMJylRQXcPGdiWl8hTDJDZ8Mh0vmc2DmdDhQOkk4OnzjN02v28uSbe6isOU0fg2suHMeni6awYMooncUsaaOzHdJ9zMw8TJHwEp46hEKkHWOGDuChq2fw4Eemseq9w0zLGUreqMFxlyVyXpIJh1eAH5vZdwiOWHoQeLlbqxLpBfr37cOVM8fGXYZIhyQTDn8JfAb4LEGH9C+B73ZnUSIiEq9zhoO7N5vZcmCFu2/v/pJERCRu5zzTxsxuBjYSNiWZWaGZvdDdhYmISHySOQ3zb4AFQBWAu28ECrqxJhERiVky4dDo7houQ0QkgyTTIb3FzO4CssxsBvAQsKp7yxIRkTgls+fweeAigkuEPk0w6N7D3VmUiIjEq909BzMbSHBOw3RgM8EFfhpTVZiIiMTnbHsOTwDzCYLhBuCbKalIRERid7Y+hwvPXO3NzL4HrE1NSSIiErez7Tm0DMut5iQRkcxytj2HOWZ2PLxvwKDwsQHu7rqorYhIL9VuOLi7BpsXEclQulCtiIhEKBxERCRC4SAiIhEKBxERiVA4iIhIhMJBREQiFA4iIhKhcBARkQiFg4iIRCgcREQkIu3CwcweMbN9ZrYxvN0Yd00iIpkmmcuExuFf3V3XjxARiUna7TmIiEj80jUc/sTM3jazx81sZFsLmNkDZlZiZiWVlZWprk9EpFczd0/9i5q9BoxvY9ZXgDeBw4ADfwdMcPdPn2198+fP95KSki6vU0SkNzOzde4+v615sfQ5uPtHk1nOzP4TeLGbyxERkVbSrlnJzCYkPPwEsCWuWkREMlU6Hq30DTMrJGhWKgU+E285IiKZJ+3Cwd3vibsGEZFMl3bNSiIiEj+Fg4iIRCgcREQkQuEgIiIRCgcREYlQOIiISITCQUREIhQOIiISoXAQEZEIhYOIiEQoHEREJELhICIiEQoHERGJUDiIiEiEwkFERCIUDiIiEqFwEBGRCIWDiIhEKBxERCRC4SAiIhEKBxERiVA4iIhIhMJBREQiFA4iIhKhcBARkQiFg4iIRCgcREQkQuEgIiIRCgcREYlQOIiISITCQUREIhQOIiISoXAQEZEIhYOIiEQoHEREJELhICIiEQoHERGJiCUczOx2M9tqZs1mNr/VvC+b2S4z225m18VRn4hIpusb0+tuAT4J/EfiRDO7ELgDuAiYCLxmZhe4e1PqSxQRyVyx7Dm4+7vuvr2NWbcAP3T30+6+G9gFLEhtdSIikm59DpOAsoTH5eG0CDN7wMxKzKyksrIyJcWJiGSKbmtWMrPXgPFtzPqKu/+svae1Mc3bWtDdHwMeA5g/f36by4iISMd0Wzi4+0c78LRyIC/hcS6wv2sqEhGRZKVbs9ILwB1mNsDMpgAzgLUx1yQiknHiOpT1E2ZWDiwCfm5mrwC4+1bgx8A7wMvA53SkkohI6sVyKKu7Pwc81868rwNfT21FIiKSKN2alUREJA0oHEREJELhICIiEQoHERGJUDiIiEiEwkFERCIUDiIiEqFwEBGRCIWDiIhEKBxERCRC4SAiIhEKBxERiTD3nn+dHDOrBPZ0YhVjgMNdVE5XUl3nR3WdH9V1fnpjXZPdPaetGb0iHDrLzErcfX7cdbSmus6P6jo/quv8ZFpdalYSEZEIhYOIiEQoHAKPxV1AO1TX+VFd50d1nZ+Mqkt9DiIiEqE9BxERiVA4iIhIRMaEg5ldb2bbzWyXmX2pjflmZv8nnP+2mc1Lk7quNLNqM9sY3r6aoroeN7MKM9vSzvy4tte56kr59jKzPDNbaWbvmtlWM/tfbSwT1/ZKprY4ttlAM1trZpvCur7WxjIp32ZJ1hXXZzLLzDaY2YttzOv6beXuvf4GZAHvAVOB/sAm4MJWy9wIvAQYcAWwJk3quhJ4MYZt9mFgHrClnfkp315J1pXy7QVMAOaF94cBO9Lh7+s8aotjmxkwNLzfD1gDXBH3Nkuyrrg+k38GPN3Wa3fHtsqUPYcFwC53f9/d64EfAre0WuYW4PseeBPINrMJaVBXLNz9DeDoWRaJY3slU1fKufsBd18f3q8B3gUmtVosru2VTG0pF26HE+HDfuGt9dExKd9mSdaVcmaWC3wM+G47i3T5tsqUcJgElCU8Lif6AUlmmTjqAlgU7ua+ZGYXdXNNyYpjeyUrtu1lZgXAXIJfnIli315nqQ1i2GZhM8lGoAJ41d3TYpslURekfnt9C/gi0NzO/C7fVpkSDtbGtNa/BpJZpqsl85rrCcY/mQP8O/B8N9eUrDi2VzJi215mNhT4KfCwux9vPbuNp6Rse52jtli2mbs3uXshkAssMLOLWy0SyzZLoq6Ubi8z+zhQ4e7rzrZYG9M6ta0yJRzKgbyEx7nA/g4sk/K63P34md1cd/8F0M/MxnRzXcmIY3udU1zby8z6EXz5/sDd/6uNRWLbXueqLe6/MXevAn4FXN9qVqx/Y+3VFcP2KgJuNrNSgqbnJWb2VKtlunxbZUo4vAXMMLMpZtYfuAN4odUyLwD3hr3+VwDV7n4g7rrMbLyZWXh/AcH/2ZFurisZcWyvc4pje4Wv9z3gXXf/l3YWi2V7JVNbTNssx8yyw/uDgI8C21otlvJtlkxdqd5e7v5ld8919wKC74gV7n53q8W6fFv17cyTewp3bzSzPwFeIThC6HF332pmD4bzvwP8glgL688AAAOUSURBVKDHfxdQCyxNk7puAz5rZo3AKeAODw9P6E5m9gzBURljzKwc+BuCzrnYtleSdcWxvYqAe4DNYVs1wF8B+Ql1xbK9kqwtjm02AXjCzLIIvlx/7O4vxv2ZTLKuWD6TrXX3ttLwGSIiEpEpzUoiInIeFA4iIhKhcBARkQiFg4iIRCgcREQkQuEgvZ6ZZZvZH3fi+Q+b2eCurKmDdTxiZn8edx2SGRQOkgmygQ6HA/AwEHs4iKSSwkEywaPANAvG3v8nADP7CzN7Kxz7/mvhtCFm9vNwQLUtZvYpM3sImAisNLOVrVdsZo+a2Tvher4ZTrvJzNZYMPb+a2Y2Lpz+iJk9YWa/NLNSM/ukmX3DzDab2cvhMBeE8/7RgusKrDWz6W287rTwOevM7DdmNiucfntY+yYze6ObtqdkgIw4Q1oy3peAi8PB1DCza4EZBEOmG/CCmX0YyAH2u/vHwuVGuHu1mf0ZcJW7H05cqZmNAj4BzHJ3PzPsAvBbgmsAuJn9EcFoml8I500DrgIuBFYDv+fuXzSz5wiGZD4ziNtxd19gZvcSjMj58Vbv6THgQXffaWYLgW8DS4CvAte5+76EekTOm8JBMtG14W1D+HgoQVj8Bvimmf0jwQVVfnOO9RwH6oDvmtnPgTNX6MoFfmTBePr9gd0Jz3nJ3RvMbDPBkCkvh9M3AwUJyz2T8O+/Jr6oBSOsLgaeDYf4ARgQ/lsMLDezHwNtDQAokhQ1K0kmMuAf3L0wvE139++5+w7gMoIv6n+wc1z+0d0bCfY+fgrcyu++6P8d+L/ufgnwGWBgwtNOh89tBhoSxuRp5oM/1ryd+xB8bqsS6i9099nheh8E/ppghM6NZjb6nFtDpA0KB8kENQSXyDzjFeDT4S9wzGySmY01s4lArbs/BXyT4HKkbT2f8HlDgRHhsM0PA4XhrBHAvvD+fR2s+VMJ/65OnBFej2G3md0e1mFmNie8P83d17j7V4HDfHAYZ5GkqVlJej13P2JmxWa2haBZ5y/MbDawOmyWOQHcDUwH/snMmoEG4LPhKh4DXjKzA+5+VcKqhwE/M7OBBHsjfxpOf4SgyWcf8CYwpQNlDzCzNQQ/4O5sY/4fAP/PzP6aYFTaHxJcg/yfzGxGWM/r4TSR86ZRWUXSjAUXdZnfugNcJJXUrCQiIhHacxARkQjtOYiISITCQUREIhQOIiISoXAQEZEIhYOIiET8f1cR5j2DcqmZAAAAAElFTkSuQmCC\n", |
| "text/plain": [ |
| "<Figure size 432x288 with 1 Axes>" |
| ] |
| }, |
| "metadata": { |
| "needs_background": "light" |
| }, |
| "output_type": "display_data" |
| } |
| ], |
| "source": [ |
| "errorX = pd.DataFrame(errorX)\n", |
| "errorX = errorX.to_numpy()\n", |
| "plt.plot(errorX*100)\n", |
| "plt.title('Percent error of X')\n", |
| "plt.xlabel(\"test samples\")\n", |
| "plt.ylabel(\"Pecent error\")\n", |
| "plt.ylim(-12, 12)" |
| ] |
| }, |
| { |
| "cell_type": "code", |
| "execution_count": 142, |
| "metadata": {}, |
| "outputs": [ |
| { |
| "data": { |
| "text/plain": [ |
| "(-20.0, 20.0)" |
| ] |
| }, |
| "execution_count": 142, |
| "metadata": {}, |
| "output_type": "execute_result" |
| }, |
| { |
| "data": { |
| "image/png": "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\n", |
| "text/plain": [ |
| "<Figure size 432x288 with 1 Axes>" |
| ] |
| }, |
| "metadata": { |
| "needs_background": "light" |
| }, |
| "output_type": "display_data" |
| } |
| ], |
| "source": [ |
| "errorY = pd.DataFrame(errorY)\n", |
| "errorY = errorY.to_numpy()\n", |
| "plt.plot(errorY*100)\n", |
| "plt.title('Percent error of Y')\n", |
| "plt.xlabel(\"test samples\")\n", |
| "plt.ylabel(\"Pecent error\")\n", |
| "plt.ylim(-20, 20)" |
| ] |
| }, |
| { |
| "cell_type": "code", |
| "execution_count": 98, |
| "metadata": {}, |
| "outputs": [ |
| { |
| "data": { |
| "text/plain": [ |
| "(-12.0, 12.0)" |
| ] |
| }, |
| "execution_count": 98, |
| "metadata": {}, |
| "output_type": "execute_result" |
| }, |
| { |
| "data": { |
| "image/png": "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\n", |
| "text/plain": [ |
| "<Figure size 432x288 with 1 Axes>" |
| ] |
| }, |
| "metadata": { |
| "needs_background": "light" |
| }, |
| "output_type": "display_data" |
| } |
| ], |
| "source": [ |
| "errorZ = pd.DataFrame(errorZ)\n", |
| "errorZ = errorZ.to_numpy()\n", |
| "\n", |
| "plt.plot(errorZ*100)\n", |
| "plt.title('Percent error of Z')\n", |
| "plt.xlabel(\"test samples\")\n", |
| "plt.ylabel(\"Pecent error\")\n", |
| "plt.ylim(-12, 12)\n" |
| ] |
| }, |
| { |
| "cell_type": "code", |
| "execution_count": 99, |
| "metadata": {}, |
| "outputs": [], |
| "source": [ |
| "dataVal = pd.read_excel('testdata_DVT_Kohaku.xlsx')\n", |
| "dataValnoIR = irRemoval(dataVal)\n", |
| "XValpredict,MSEXVal,VarXVal = predict(regX,dataValnoIR, 'MeterX')\n", |
| "\n", |
| "YValpredict,MSEY,VarYVal = predict(regY,dataValnoIR, 'MeterY')\n", |
| "\n", |
| "ZValpredict,MSEZ,VarZVal = predict(regZ,dataValnoIR, 'MeterZ') \n", |
| "CCTValpredict, errorValpredict = CCTPredict(dataValnoIR, XValpredict, \n", |
| " YValpredict, ZValpredict)\n", |
| " " |
| ] |
| }, |
| { |
| "cell_type": "code", |
| "execution_count": 101, |
| "metadata": {}, |
| "outputs": [ |
| { |
| "data": { |
| "text/html": [ |
| "<div>\n", |
| "<style scoped>\n", |
| " .dataframe tbody tr th:only-of-type {\n", |
| " vertical-align: middle;\n", |
| " }\n", |
| "\n", |
| " .dataframe tbody tr th {\n", |
| " vertical-align: top;\n", |
| " }\n", |
| "\n", |
| " .dataframe thead th {\n", |
| " text-align: right;\n", |
| " }\n", |
| "</style>\n", |
| "<table border=\"1\" class=\"dataframe\">\n", |
| " <thead>\n", |
| " <tr style=\"text-align: right;\">\n", |
| " <th></th>\n", |
| " <th>light source</th>\n", |
| " <th>R</th>\n", |
| " <th>G</th>\n", |
| " <th>B</th>\n", |
| " <th>C</th>\n", |
| " <th>MeterX</th>\n", |
| " <th>MeterY</th>\n", |
| " <th>MeterZ</th>\n", |
| " <th>Meterlux</th>\n", |
| " <th>MeterCCT</th>\n", |
| " <th>IR</th>\n", |
| " <th>RC</th>\n", |
| " <th>GC</th>\n", |
| " <th>BC</th>\n", |
| " <th>CC</th>\n", |
| " </tr>\n", |
| " </thead>\n", |
| " <tbody>\n", |
| " <tr>\n", |
| " <th>0</th>\n", |
| " <td>LIFX7000</td>\n", |
| " <td>1941</td>\n", |
| " <td>1357</td>\n", |
| " <td>1232</td>\n", |
| " <td>4139</td>\n", |
| " <td>1102</td>\n", |
| " <td>1079</td>\n", |
| " <td>1597</td>\n", |
| " <td>1079</td>\n", |
| " <td>8922</td>\n", |
| " <td>93.47795</td>\n", |
| " <td>1090.53205</td>\n", |
| " <td>1263.52205</td>\n", |
| " <td>1877.72205</td>\n", |
| " <td>3962.74205</td>\n", |
| " </tr>\n", |
| " <tr>\n", |
| " <th>1</th>\n", |
| " <td>LIFX6500</td>\n", |
| " <td>2128</td>\n", |
| " <td>1444</td>\n", |
| " <td>1281</td>\n", |
| " <td>4434</td>\n", |
| " <td>1180</td>\n", |
| " <td>1158</td>\n", |
| " <td>1595</td>\n", |
| " <td>1159</td>\n", |
| " <td>7836</td>\n", |
| " <td>91.50380</td>\n", |
| " <td>1206.57620</td>\n", |
| " <td>1352.49620</td>\n", |
| " <td>1958.09620</td>\n", |
| " <td>4253.81620</td>\n", |
| " </tr>\n", |
| " <tr>\n", |
| " <th>2</th>\n", |
| " <td>LIFX6000</td>\n", |
| " <td>2154</td>\n", |
| " <td>1412</td>\n", |
| " <td>1222</td>\n", |
| " <td>4373</td>\n", |
| " <td>1163</td>\n", |
| " <td>1143</td>\n", |
| " <td>1442</td>\n", |
| " <td>1143</td>\n", |
| " <td>6867</td>\n", |
| " <td>81.09800</td>\n", |
| " <td>1232.84200</td>\n", |
| " <td>1330.90200</td>\n", |
| " <td>1874.10200</td>\n", |
| " <td>4204.44200</td>\n", |
| " </tr>\n", |
| " <tr>\n", |
| " <th>3</th>\n", |
| " <td>LIFX5500</td>\n", |
| " <td>2143</td>\n", |
| " <td>1349</td>\n", |
| " <td>1133</td>\n", |
| " <td>4221</td>\n", |
| " <td>1123</td>\n", |
| " <td>1104</td>\n", |
| " <td>1252</td>\n", |
| " <td>1104</td>\n", |
| " <td>5993</td>\n", |
| " <td>68.15225</td>\n", |
| " <td>1239.07775</td>\n", |
| " <td>1280.84775</td>\n", |
| " <td>1744.64775</td>\n", |
| " <td>4068.42775</td>\n", |
| " </tr>\n", |
| " <tr>\n", |
| " <th>4</th>\n", |
| " <td>LIFX4500</td>\n", |
| " <td>2137</td>\n", |
| " <td>1205</td>\n", |
| " <td>942</td>\n", |
| " <td>3902</td>\n", |
| " <td>1042</td>\n", |
| " <td>1016</td>\n", |
| " <td>845</td>\n", |
| " <td>1017</td>\n", |
| " <td>4476</td>\n", |
| " <td>39.32105</td>\n", |
| " <td>1264.24895</td>\n", |
| " <td>1165.67895</td>\n", |
| " <td>1467.87895</td>\n", |
| " <td>3784.63895</td>\n", |
| " </tr>\n", |
| " <tr>\n", |
| " <th>5</th>\n", |
| " <td>LIFX3500</td>\n", |
| " <td>2085</td>\n", |
| " <td>1008</td>\n", |
| " <td>716</td>\n", |
| " <td>3465</td>\n", |
| " <td>944</td>\n", |
| " <td>892</td>\n", |
| " <td>420</td>\n", |
| " <td>892</td>\n", |
| " <td>3261</td>\n", |
| " <td>6.09875</td>\n", |
| " <td>1265.75125</td>\n", |
| " <td>1001.90125</td>\n", |
| " <td>1139.50125</td>\n", |
| " <td>3389.60125</td>\n", |
| " </tr>\n", |
| " <tr>\n", |
| " <th>6</th>\n", |
| " <td>LIFX8000</td>\n", |
| " <td>1664</td>\n", |
| " <td>1221</td>\n", |
| " <td>1150</td>\n", |
| " <td>3692</td>\n", |
| " <td>1066</td>\n", |
| " <td>1040</td>\n", |
| " <td>1692</td>\n", |
| " <td>1040</td>\n", |
| " <td>11010</td>\n", |
| " <td>93.86540</td>\n", |
| " <td>921.17460</td>\n", |
| " <td>1127.13460</td>\n", |
| " <td>1746.13460</td>\n", |
| " <td>3524.29460</td>\n", |
| " </tr>\n", |
| " </tbody>\n", |
| "</table>\n", |
| "</div>" |
| ], |
| "text/plain": [ |
| " light source R G B C MeterX MeterY MeterZ Meterlux \\\n", |
| "0 LIFX7000 1941 1357 1232 4139 1102 1079 1597 1079 \n", |
| "1 LIFX6500 2128 1444 1281 4434 1180 1158 1595 1159 \n", |
| "2 LIFX6000 2154 1412 1222 4373 1163 1143 1442 1143 \n", |
| "3 LIFX5500 2143 1349 1133 4221 1123 1104 1252 1104 \n", |
| "4 LIFX4500 2137 1205 942 3902 1042 1016 845 1017 \n", |
| "5 LIFX3500 2085 1008 716 3465 944 892 420 892 \n", |
| "6 LIFX8000 1664 1221 1150 3692 1066 1040 1692 1040 \n", |
| "\n", |
| " MeterCCT IR RC GC BC CC \n", |
| "0 8922 93.47795 1090.53205 1263.52205 1877.72205 3962.74205 \n", |
| "1 7836 91.50380 1206.57620 1352.49620 1958.09620 4253.81620 \n", |
| "2 6867 81.09800 1232.84200 1330.90200 1874.10200 4204.44200 \n", |
| "3 5993 68.15225 1239.07775 1280.84775 1744.64775 4068.42775 \n", |
| "4 4476 39.32105 1264.24895 1165.67895 1467.87895 3784.63895 \n", |
| "5 3261 6.09875 1265.75125 1001.90125 1139.50125 3389.60125 \n", |
| "6 11010 93.86540 921.17460 1127.13460 1746.13460 3524.29460 " |
| ] |
| }, |
| "execution_count": 101, |
| "metadata": {}, |
| "output_type": "execute_result" |
| } |
| ], |
| "source": [ |
| "dataVal" |
| ] |
| }, |
| { |
| "cell_type": "code", |
| "execution_count": 55, |
| "metadata": {}, |
| "outputs": [ |
| { |
| "data": { |
| "text/plain": [ |
| "array([ 9167.37125486, 7769.68954376, 6683.90745517, 5761.58285646,\n", |
| " 4386.53215214, 3437.2390767 , 13004.90637317])" |
| ] |
| }, |
| "execution_count": 55, |
| "metadata": {}, |
| "output_type": "execute_result" |
| } |
| ], |
| "source": [ |
| "CCTValpredict" |
| ] |
| }, |
| { |
| "cell_type": "code", |
| "execution_count": 45, |
| "metadata": {}, |
| "outputs": [ |
| { |
| "data": { |
| "text/plain": [ |
| "[814.0027257328575,\n", |
| " 905.4478648949089,\n", |
| " 924.9888212853549,\n", |
| " 927.9616168498602,\n", |
| " 916.2427931613881,\n", |
| " 854.0093259283244]" |
| ] |
| }, |
| "execution_count": 45, |
| "metadata": {}, |
| "output_type": "execute_result" |
| } |
| ], |
| "source": [ |
| "YValpredict" |
| ] |
| }, |
| { |
| "cell_type": "code", |
| "execution_count": 46, |
| "metadata": {}, |
| "outputs": [], |
| "source": [ |
| "dataVal['LuxError']=(YValpredict - dataVal['Meterlux'])/dataVal['Meterlux']*100\n", |
| "dataVal['CCTError']=(CCTValpredict - dataVal['MeterCCT'])/dataVal['MeterCCT']*100" |
| ] |
| }, |
| { |
| "cell_type": "code", |
| "execution_count": 52, |
| "metadata": {}, |
| "outputs": [ |
| { |
| "data": { |
| "text/plain": [ |
| "<function matplotlib.pyplot.show(*args, **kw)>" |
| ] |
| }, |
| "execution_count": 52, |
| "metadata": {}, |
| "output_type": "execute_result" |
| }, |
| { |
| "data": { |
| "image/png": "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\n", |
| "text/plain": [ |
| "<Figure size 432x288 with 1 Axes>" |
| ] |
| }, |
| "metadata": { |
| "needs_background": "light" |
| }, |
| "output_type": "display_data" |
| } |
| ], |
| "source": [ |
| "dataVal.plot(y = 'CCTError',x = 'MeterCCT')\n", |
| "plt.ylabel('CCT error percentage')\n", |
| "plt.show" |
| ] |
| }, |
| { |
| "cell_type": "code", |
| "execution_count": 102, |
| "metadata": {}, |
| "outputs": [ |
| { |
| "ename": "ValueError", |
| "evalue": "Unrecognized character L in format string", |
| "output_type": "error", |
| "traceback": [ |
| "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m", |
| "\u001b[1;31mValueError\u001b[0m Traceback (most recent call last)", |
| "\u001b[1;32m<ipython-input-102-f1b8b5c9ba2a>\u001b[0m in \u001b[0;36m<module>\u001b[1;34m\u001b[0m\n\u001b[1;32m----> 1\u001b[1;33m \u001b[0mplt\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mplot\u001b[0m\u001b[1;33m(\u001b[0m \u001b[1;34m'percentage'\u001b[0m\u001b[1;33m,\u001b[0m \u001b[1;34m'LuxError'\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mdata\u001b[0m\u001b[1;33m=\u001b[0m\u001b[0mdataVal\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mmarker\u001b[0m\u001b[1;33m=\u001b[0m\u001b[1;34m''\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mmarkerfacecolor\u001b[0m\u001b[1;33m=\u001b[0m\u001b[1;34m'blue'\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mmarkersize\u001b[0m\u001b[1;33m=\u001b[0m\u001b[1;36m12\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mcolor\u001b[0m\u001b[1;33m=\u001b[0m\u001b[1;34m'skyblue'\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mlinewidth\u001b[0m\u001b[1;33m=\u001b[0m\u001b[1;36m4\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 2\u001b[0m \u001b[0mplt\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mplot\u001b[0m\u001b[1;33m(\u001b[0m \u001b[1;34m'percentage'\u001b[0m\u001b[1;33m,\u001b[0m \u001b[1;34m'CCTError'\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mdata\u001b[0m\u001b[1;33m=\u001b[0m\u001b[0mdataVal\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mmarker\u001b[0m\u001b[1;33m=\u001b[0m\u001b[1;34m''\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mcolor\u001b[0m\u001b[1;33m=\u001b[0m\u001b[1;34m'olive'\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mlinewidth\u001b[0m\u001b[1;33m=\u001b[0m\u001b[1;36m2\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 3\u001b[0m \u001b[0mplt\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mxlabel\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;34m'Ink transmittance variation in percentage'\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 4\u001b[0m \u001b[0mplt\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mylabel\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;34m'Lux and CCT error percentage'\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 5\u001b[0m \u001b[0mplt\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mlegend\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n", |
| "\u001b[1;32m~\\anaconda3\\lib\\site-packages\\matplotlib\\pyplot.py\u001b[0m in \u001b[0;36mplot\u001b[1;34m(scalex, scaley, data, *args, **kwargs)\u001b[0m\n\u001b[0;32m 2761\u001b[0m return gca().plot(\n\u001b[0;32m 2762\u001b[0m *args, scalex=scalex, scaley=scaley, **({\"data\": data} if data\n\u001b[1;32m-> 2763\u001b[1;33m is not None else {}), **kwargs)\n\u001b[0m\u001b[0;32m 2764\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 2765\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n", |
| "\u001b[1;32m~\\anaconda3\\lib\\site-packages\\matplotlib\\axes\\_axes.py\u001b[0m in \u001b[0;36mplot\u001b[1;34m(self, scalex, scaley, data, *args, **kwargs)\u001b[0m\n\u001b[0;32m 1645\u001b[0m \"\"\"\n\u001b[0;32m 1646\u001b[0m \u001b[0mkwargs\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mcbook\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mnormalize_kwargs\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mmlines\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mLine2D\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m-> 1647\u001b[1;33m \u001b[0mlines\u001b[0m \u001b[1;33m=\u001b[0m \u001b[1;33m[\u001b[0m\u001b[1;33m*\u001b[0m\u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0m_get_lines\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m*\u001b[0m\u001b[0margs\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mdata\u001b[0m\u001b[1;33m=\u001b[0m\u001b[0mdata\u001b[0m\u001b[1;33m,\u001b[0m \u001b[1;33m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 1648\u001b[0m \u001b[1;32mfor\u001b[0m \u001b[0mline\u001b[0m \u001b[1;32min\u001b[0m \u001b[0mlines\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 1649\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0madd_line\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mline\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n", |
| "\u001b[1;32m~\\anaconda3\\lib\\site-packages\\matplotlib\\axes\\_base.py\u001b[0m in \u001b[0;36m__call__\u001b[1;34m(self, *args, **kwargs)\u001b[0m\n\u001b[0;32m 214\u001b[0m \u001b[0mthis\u001b[0m \u001b[1;33m+=\u001b[0m \u001b[0margs\u001b[0m\u001b[1;33m[\u001b[0m\u001b[1;36m0\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m,\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 215\u001b[0m \u001b[0margs\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0margs\u001b[0m\u001b[1;33m[\u001b[0m\u001b[1;36m1\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m--> 216\u001b[1;33m \u001b[1;32myield\u001b[0m \u001b[1;32mfrom\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0m_plot_args\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mthis\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mkwargs\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 217\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 218\u001b[0m \u001b[1;32mdef\u001b[0m \u001b[0mget_next_color\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mself\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n", |
| "\u001b[1;32m~\\anaconda3\\lib\\site-packages\\matplotlib\\axes\\_base.py\u001b[0m in \u001b[0;36m_plot_args\u001b[1;34m(self, tup, kwargs)\u001b[0m\n\u001b[0;32m 310\u001b[0m \u001b[1;32mdef\u001b[0m \u001b[0m_plot_args\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mself\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mtup\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mkwargs\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 311\u001b[0m \u001b[1;32mif\u001b[0m \u001b[0mlen\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mtup\u001b[0m\u001b[1;33m)\u001b[0m \u001b[1;33m>\u001b[0m \u001b[1;36m1\u001b[0m \u001b[1;32mand\u001b[0m \u001b[0misinstance\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mtup\u001b[0m\u001b[1;33m[\u001b[0m\u001b[1;33m-\u001b[0m\u001b[1;36m1\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mstr\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m--> 312\u001b[1;33m \u001b[0mlinestyle\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mmarker\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mcolor\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0m_process_plot_format\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mtup\u001b[0m\u001b[1;33m[\u001b[0m\u001b[1;33m-\u001b[0m\u001b[1;36m1\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 313\u001b[0m \u001b[0mtup\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mtup\u001b[0m\u001b[1;33m[\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m-\u001b[0m\u001b[1;36m1\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 314\u001b[0m \u001b[1;32melif\u001b[0m \u001b[0mlen\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mtup\u001b[0m\u001b[1;33m)\u001b[0m \u001b[1;33m==\u001b[0m \u001b[1;36m3\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n", |
| "\u001b[1;32m~\\anaconda3\\lib\\site-packages\\matplotlib\\axes\\_base.py\u001b[0m in \u001b[0;36m_process_plot_format\u001b[1;34m(fmt)\u001b[0m\n\u001b[0;32m 103\u001b[0m \u001b[1;32melse\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 104\u001b[0m raise ValueError(\n\u001b[1;32m--> 105\u001b[1;33m 'Unrecognized character %c in format string' % c)\n\u001b[0m\u001b[0;32m 106\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 107\u001b[0m \u001b[1;32mif\u001b[0m \u001b[0mlinestyle\u001b[0m \u001b[1;32mis\u001b[0m \u001b[1;32mNone\u001b[0m \u001b[1;32mand\u001b[0m \u001b[0mmarker\u001b[0m \u001b[1;32mis\u001b[0m \u001b[1;32mNone\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n", |
| "\u001b[1;31mValueError\u001b[0m: Unrecognized character L in format string" |
| ] |
| }, |
| { |
| "data": { |
| "image/png": "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\n", |
| "text/plain": [ |
| "<Figure size 432x288 with 1 Axes>" |
| ] |
| }, |
| "metadata": { |
| "needs_background": "light" |
| }, |
| "output_type": "display_data" |
| } |
| ], |
| "source": [ |
| "plt.plot( 'percentage', 'LuxError', data=dataVal, marker='', markerfacecolor='blue', markersize=12, color='skyblue', linewidth=4)\n", |
| "plt.plot( 'percentage', 'CCTError', data=dataVal, marker='', color='olive', linewidth=2)\n", |
| "plt.xlabel('Ink transmittance variation in percentage')\n", |
| "plt.ylabel('Lux and CCT error percentage')\n", |
| "plt.legend()\n", |
| "plt.show()" |
| ] |
| } |
| ], |
| "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.7" |
| } |
| }, |
| "nbformat": 4, |
| "nbformat_minor": 2 |
| } |