{"nbformat":4,"nbformat_minor":0,"metadata":{"colab":{"name":"Prognoosimine.ipynb","provenance":[],"collapsed_sections":[],"authorship_tag":"ABX9TyNEFqUurjiIF4DNhLf+1ASR"},"kernelspec":{"name":"python3","display_name":"Python 3"},"language_info":{"name":"python"}},"cells":[{"cell_type":"markdown","metadata":{"id":"tNYjrdWTExHd"},"source":["# Seame eesmärgi ja tulemusmõõdiku\n","Iga tehisintellekti esimene samm peaks olema eesmärgi seadmine.\n","\n","Meie eesmärgiks on luua **mudel, mis prognoosib ettevõtte müügitulu töötajate arvu ja tegevusala põhjal**.\n","\n","Tulemusmõõdikuna kasutame keskmist absoluutviga ehk mitu eurot meie mudel keskmiselt prognoosi tegemisel eksib. "]},{"cell_type":"markdown","metadata":{"id":"6JKdQQWvVpP6"},"source":["# Impordime tööriistad\n","Prognoosimiseks kasutame Scikit learn teeki, mis sisaldab suurt hulka erinevaid masinõppe algoritme ja tööriistu andmete haldamiseks.\n","https://scikit-learn.org/stable/ "]},{"cell_type":"code","metadata":{"id":"aEofWhfoXRn9"},"source":["# Impordime vajalikud teegid\n","import pandas as pd\n","import sklearn as sk"],"execution_count":null,"outputs":[]},{"cell_type":"markdown","metadata":{"id":"-zbrup7lh38h"},"source":["# Andmete importimine\n","Impordime allolevas näites .csv faili Avaandmete portaalist saadud andmetega ettevõtete müügitulu ja tasutud maksude kohta. Andmed on eelnevalt salvestatud Github'i."]},{"cell_type":"code","metadata":{"id":"Jk9MfsgBh13q","colab":{"base_uri":"https://localhost:8080/","height":825},"executionInfo":{"status":"ok","timestamp":1639408147748,"user_tz":-120,"elapsed":1229,"user":{"displayName":"Kristjan Eljand","photoUrl":"https://lh3.googleusercontent.com/a-/AOh14Gip4UgEVFXL2Q-oKuIBr2JP5268uFbs3Bf7aNhj=s64","userId":"12801037868987527469"}},"outputId":"0b7c965a-ef66-487c-ab10-8035ee653b17"},"source":["raw_data_url = 'https://raw.githubusercontent.com/kristjan-eljand/andmeteadus_on_popp/main/maksud_2021_iii_kvartal.csv'\n","raw_data = pd.read_csv(raw_data_url)\n","raw_data"],"execution_count":3,"outputs":[{"output_type":"execute_result","data":{"text/html":["
\n","\n","\n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n","
reg_codenametypevat_registryemtakcountynational_taxemployee_taxrevenueemployees
010000018AMSERV AUTO AKTSIASELTSÄriühingjahHULGI- JA JAEKAUBANDUS; MOOTORSÕIDUKITE JA MOO...Harju ( Tallinn )1375329.0801558.021587224.0191.0
110000024EESTI RAAMAT, OÜÄriühingjahINFO JA SIDEHarju ( Tallinn )26769.021439.0144389.012.0
210000062ALDO KOPPELFIEjahPÕLLUMAJANDUS, METSAMAJANDUS JA KALAPÜÜKIda-Viru ( Lüganuse vald )3982.00.027514.0NaN
310000127ARAVETE APTEEK, TÜÄriühingjahHULGI- JA JAEKAUBANDUS; MOOTORSÕIDUKITE JA MOO...Järva ( Järva vald )7138.05784.0158317.02.0
410000165KIVIÕLI KAUBAHOOV, ASÄriühingjahHULGI- JA JAEKAUBANDUS; MOOTORSÕIDUKITE JA MOO...Ida-Viru ( Lüganuse vald )216776.094754.01582858.039.0
.................................
147252BB000770AMAZON EU SARLMitteresidentjahHULGI- JA JAEKAUBANDUS; MOOTORSÕIDUKITE JA MOO...NaN235295.00.01230805.0NaN
147253KK106568SEGERS FABRIKER ABMitteresidentjahTÖÖTLEV TÖÖSTUSNaN0.00.01251075.0NaN
147254MM000001KONSULTTITOIMISTO SEPPO HOFFREN OY CONSULTANCYMitteresidenteiNaNNaN2614.02834.0NaN1.0
147255MM000047WHITE BEACH GOLF OYMitteresidenteiNaNNaNNaNNaNNaN1.0
147256QQ000003RAUMASTER OYMitteresidentjahHULGI- JA JAEKAUBANDUS; MOOTORSÕIDUKITE JA MOO...NaN15695.016580.064996.03.0
\n","

147257 rows × 10 columns

\n","
"],"text/plain":[" reg_code ... employees\n","0 10000018 ... 191.0\n","1 10000024 ... 12.0\n","2 10000062 ... NaN\n","3 10000127 ... 2.0\n","4 10000165 ... 39.0\n","... ... ... ...\n","147252 BB000770 ... NaN\n","147253 KK106568 ... NaN\n","147254 MM000001 ... 1.0\n","147255 MM000047 ... 1.0\n","147256 QQ000003 ... 3.0\n","\n","[147257 rows x 10 columns]"]},"metadata":{},"execution_count":3}]},{"cell_type":"markdown","metadata":{"id":"4W5PaZgeIOXe"},"source":["# Andmete eeltöötlus\n","## Valime vajalikud muutujad\n","Antud näites on meil vaja alles jätta kolm muutujat: tegevusala, müügitulu ja töötajate arv."]},{"cell_type":"code","metadata":{"colab":{"base_uri":"https://localhost:8080/","height":423},"id":"u9ccimjSIlGj","executionInfo":{"status":"ok","timestamp":1639408168874,"user_tz":-120,"elapsed":283,"user":{"displayName":"Kristjan Eljand","photoUrl":"https://lh3.googleusercontent.com/a-/AOh14Gip4UgEVFXL2Q-oKuIBr2JP5268uFbs3Bf7aNhj=s64","userId":"12801037868987527469"}},"outputId":"4b097ab3-49d5-431f-da17-d2a93fc139f0"},"source":["selected_data = raw_data[['emtak', 'employees', 'revenue']]\n","selected_data"],"execution_count":4,"outputs":[{"output_type":"execute_result","data":{"text/html":["
\n","\n","\n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n","
emtakemployeesrevenue
0HULGI- JA JAEKAUBANDUS; MOOTORSÕIDUKITE JA MOO...191.021587224.0
1INFO JA SIDE12.0144389.0
2PÕLLUMAJANDUS, METSAMAJANDUS JA KALAPÜÜKNaN27514.0
3HULGI- JA JAEKAUBANDUS; MOOTORSÕIDUKITE JA MOO...2.0158317.0
4HULGI- JA JAEKAUBANDUS; MOOTORSÕIDUKITE JA MOO...39.01582858.0
............
147252HULGI- JA JAEKAUBANDUS; MOOTORSÕIDUKITE JA MOO...NaN1230805.0
147253TÖÖTLEV TÖÖSTUSNaN1251075.0
147254NaN1.0NaN
147255NaN1.0NaN
147256HULGI- JA JAEKAUBANDUS; MOOTORSÕIDUKITE JA MOO...3.064996.0
\n","

147257 rows × 3 columns

\n","
"],"text/plain":[" emtak ... revenue\n","0 HULGI- JA JAEKAUBANDUS; MOOTORSÕIDUKITE JA MOO... ... 21587224.0\n","1 INFO JA SIDE ... 144389.0\n","2 PÕLLUMAJANDUS, METSAMAJANDUS JA KALAPÜÜK ... 27514.0\n","3 HULGI- JA JAEKAUBANDUS; MOOTORSÕIDUKITE JA MOO... ... 158317.0\n","4 HULGI- JA JAEKAUBANDUS; MOOTORSÕIDUKITE JA MOO... ... 1582858.0\n","... ... ... ...\n","147252 HULGI- JA JAEKAUBANDUS; MOOTORSÕIDUKITE JA MOO... ... 1230805.0\n","147253 TÖÖTLEV TÖÖSTUS ... 1251075.0\n","147254 NaN ... NaN\n","147255 NaN ... NaN\n","147256 HULGI- JA JAEKAUBANDUS; MOOTORSÕIDUKITE JA MOO... ... 64996.0\n","\n","[147257 rows x 3 columns]"]},"metadata":{},"execution_count":4}]},{"cell_type":"markdown","metadata":{"id":"jzT2D3KKI3_r"},"source":["## Jätame lihtsuse huvides alles vaid kolm tegevusala \"INFO JA SIDE\", \"TÖÖTLEV TÖÖSTUS\" ja \"EHITUS\""]},{"cell_type":"code","metadata":{"colab":{"base_uri":"https://localhost:8080/","height":423},"id":"oCHTUbV4JD9B","executionInfo":{"status":"ok","timestamp":1639408213245,"user_tz":-120,"elapsed":284,"user":{"displayName":"Kristjan Eljand","photoUrl":"https://lh3.googleusercontent.com/a-/AOh14Gip4UgEVFXL2Q-oKuIBr2JP5268uFbs3Bf7aNhj=s64","userId":"12801037868987527469"}},"outputId":"0f97a816-e83c-474f-877a-ddf7185a9d23"},"source":["emtak_to_keep = ['INFO JA SIDE', 'TÖÖTLEV TÖÖSTUS', 'EHITUS']\n","rows_to_keep = selected_data.emtak.isin(emtak_to_keep)\n","filtered_data = selected_data.loc[rows_to_keep,:]\n","filtered_data"],"execution_count":5,"outputs":[{"output_type":"execute_result","data":{"text/html":["
\n","\n","\n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n","
emtakemployeesrevenue
1INFO JA SIDE12.0144389.0
5TÖÖTLEV TÖÖSTUS9.033043.0
8TÖÖTLEV TÖÖSTUS128.05924007.0
9TÖÖTLEV TÖÖSTUS6.025659.0
10EHITUS8.0141853.0
............
147242TÖÖTLEV TÖÖSTUSNaN31950.0
147244TÖÖTLEV TÖÖSTUSNaN66935.0
147246INFO JA SIDE2.028218.0
147250TÖÖTLEV TÖÖSTUSNaN0.0
147253TÖÖTLEV TÖÖSTUSNaN1251075.0
\n","

35735 rows × 3 columns

\n","
"],"text/plain":[" emtak employees revenue\n","1 INFO JA SIDE 12.0 144389.0\n","5 TÖÖTLEV TÖÖSTUS 9.0 33043.0\n","8 TÖÖTLEV TÖÖSTUS 128.0 5924007.0\n","9 TÖÖTLEV TÖÖSTUS 6.0 25659.0\n","10 EHITUS 8.0 141853.0\n","... ... ... ...\n","147242 TÖÖTLEV TÖÖSTUS NaN 31950.0\n","147244 TÖÖTLEV TÖÖSTUS NaN 66935.0\n","147246 INFO JA SIDE 2.0 28218.0\n","147250 TÖÖTLEV TÖÖSTUS NaN 0.0\n","147253 TÖÖTLEV TÖÖSTUS NaN 1251075.0\n","\n","[35735 rows x 3 columns]"]},"metadata":{},"execution_count":5}]},{"cell_type":"markdown","metadata":{"id":"76YkoqYTJqcy"},"source":["## Eemaldame puuduvad andmed\n","Juba ülalolevast tabelist näeme, et meie andmestikus on puuduvaid väärtusi (NaN) väärtusi.\n","Eemaldame need read andmestikust (NB: kui andmeid on vähe, peaks eemaldamise asemel need väärtused millegagi asendama - meil hetkel seda probleemi pole)."]},{"cell_type":"code","metadata":{"colab":{"base_uri":"https://localhost:8080/","height":423},"id":"rNLR8kBGKF8C","executionInfo":{"status":"ok","timestamp":1639408244266,"user_tz":-120,"elapsed":320,"user":{"displayName":"Kristjan Eljand","photoUrl":"https://lh3.googleusercontent.com/a-/AOh14Gip4UgEVFXL2Q-oKuIBr2JP5268uFbs3Bf7aNhj=s64","userId":"12801037868987527469"}},"outputId":"7ac6c6b2-8eba-45fd-a8cf-8ea23f4dcf2d"},"source":["clean_data = filtered_data.dropna()\n","clean_data"],"execution_count":6,"outputs":[{"output_type":"execute_result","data":{"text/html":["
\n","\n","\n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n","
emtakemployeesrevenue
1INFO JA SIDE12.0144389.0
5TÖÖTLEV TÖÖSTUS9.033043.0
8TÖÖTLEV TÖÖSTUS128.05924007.0
9TÖÖTLEV TÖÖSTUS6.025659.0
10EHITUS8.0141853.0
............
147076INFO JA SIDE3.0143609.0
147079INFO JA SIDE6.022225.0
147121INFO JA SIDE2.00.0
147220TÖÖTLEV TÖÖSTUS3.04059.0
147246INFO JA SIDE2.028218.0
\n","

17450 rows × 3 columns

\n","
"],"text/plain":[" emtak employees revenue\n","1 INFO JA SIDE 12.0 144389.0\n","5 TÖÖTLEV TÖÖSTUS 9.0 33043.0\n","8 TÖÖTLEV TÖÖSTUS 128.0 5924007.0\n","9 TÖÖTLEV TÖÖSTUS 6.0 25659.0\n","10 EHITUS 8.0 141853.0\n","... ... ... ...\n","147076 INFO JA SIDE 3.0 143609.0\n","147079 INFO JA SIDE 6.0 22225.0\n","147121 INFO JA SIDE 2.0 0.0\n","147220 TÖÖTLEV TÖÖSTUS 3.0 4059.0\n","147246 INFO JA SIDE 2.0 28218.0\n","\n","[17450 rows x 3 columns]"]},"metadata":{},"execution_count":6}]},{"cell_type":"markdown","metadata":{"id":"n5Wp_k3dLSb-"},"source":["## Vaatame andmed üle"]},{"cell_type":"markdown","metadata":{"id":"KP8ZGyaELZhP"},"source":["### Uurime andmete üldist jaotust"]},{"cell_type":"code","metadata":{"colab":{"base_uri":"https://localhost:8080/","height":394},"id":"iWp4HGBPKvZl","executionInfo":{"status":"ok","timestamp":1639408270530,"user_tz":-120,"elapsed":286,"user":{"displayName":"Kristjan Eljand","photoUrl":"https://lh3.googleusercontent.com/a-/AOh14Gip4UgEVFXL2Q-oKuIBr2JP5268uFbs3Bf7aNhj=s64","userId":"12801037868987527469"}},"outputId":"d8b6f822-471a-457e-d909-72b0ae1d79b5"},"source":["clean_data.describe(include='all')"],"execution_count":7,"outputs":[{"output_type":"execute_result","data":{"text/html":["
\n","\n","\n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n","
emtakemployeesrevenue
count1745017450.0000001.745000e+04
unique3NaNNaN
topEHITUSNaNNaN
freq9012NaNNaN
meanNaN10.2625214.121827e+05
stdNaN40.6491602.764708e+06
minNaN1.000000-1.331100e+04
25%NaN1.0000001.120875e+04
50%NaN3.0000003.466550e+04
75%NaN7.0000001.281268e+05
maxNaN1809.0000002.020712e+08
\n","
"],"text/plain":[" emtak employees revenue\n","count 17450 17450.000000 1.745000e+04\n","unique 3 NaN NaN\n","top EHITUS NaN NaN\n","freq 9012 NaN NaN\n","mean NaN 10.262521 4.121827e+05\n","std NaN 40.649160 2.764708e+06\n","min NaN 1.000000 -1.331100e+04\n","25% NaN 1.000000 1.120875e+04\n","50% NaN 3.000000 3.466550e+04\n","75% NaN 7.000000 1.281268e+05\n","max NaN 1809.000000 2.020712e+08"]},"metadata":{},"execution_count":7}]},{"cell_type":"markdown","metadata":{"id":"oAORx6UkLc27"},"source":["### Vaatame jaotust tegevusalade järgi"]},{"cell_type":"code","metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"rt3uSVquLgaE","executionInfo":{"status":"ok","timestamp":1639408290843,"user_tz":-120,"elapsed":298,"user":{"displayName":"Kristjan Eljand","photoUrl":"https://lh3.googleusercontent.com/a-/AOh14Gip4UgEVFXL2Q-oKuIBr2JP5268uFbs3Bf7aNhj=s64","userId":"12801037868987527469"}},"outputId":"33076c21-d041-400a-9a07-bf30ffc69e3f"},"source":["clean_data.emtak.value_counts()"],"execution_count":8,"outputs":[{"output_type":"execute_result","data":{"text/plain":["EHITUS 9012\n","TÖÖTLEV TÖÖSTUS 5566\n","INFO JA SIDE 2872\n","Name: emtak, dtype: int64"]},"metadata":{},"execution_count":8}]},{"cell_type":"markdown","metadata":{"id":"ObbIoocPMZ2v"},"source":["### Vaatame töötajate arvu ja müügitulu korrelatsiooni"]},{"cell_type":"code","metadata":{"colab":{"base_uri":"https://localhost:8080/","height":112},"id":"fsy_yMoSNEfm","executionInfo":{"status":"ok","timestamp":1639408328348,"user_tz":-120,"elapsed":279,"user":{"displayName":"Kristjan Eljand","photoUrl":"https://lh3.googleusercontent.com/a-/AOh14Gip4UgEVFXL2Q-oKuIBr2JP5268uFbs3Bf7aNhj=s64","userId":"12801037868987527469"}},"outputId":"9b0ee746-9925-42ef-8e20-0a3cc37ab501"},"source":["clean_data.corr()"],"execution_count":9,"outputs":[{"output_type":"execute_result","data":{"text/html":["
\n","\n","\n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n","
employeesrevenue
employees1.0000000.793414
revenue0.7934141.000000
\n","
"],"text/plain":[" employees revenue\n","employees 1.000000 0.793414\n","revenue 0.793414 1.000000"]},"metadata":{},"execution_count":9}]},{"cell_type":"markdown","metadata":{"id":"HR21FF8gL85W"},"source":["# Andmete ettevalmistamine masinõppeks"]},{"cell_type":"markdown","metadata":{"id":"u672gTPMNc0X"},"source":["## Muudame kõik muutujad numbrilisteks\n","Sageli soovime mudelites kasutada muutujaid, mis ei ole numbrilised (N: tegevusala). Masinõppemudelid seevastu tahavad, et kõik muutujad oleksid numbrilised.\n","\n","Lahendus on luua andmestikku uued binaarsed (0 või 1) muutujad -> üks muutuja iga mittenumbrilise muutuja väärtuse kohta (vt. alljärgnev näide, et paremini mõista).\n","\n","Lahendada saab seda mitmel eri viisil, kuid kuna meie kasutame oma näites Pandas andmetabelit, siis saame need 0/1 muutujad luua üherealise käsuga `pd.get_dummies`."]},{"cell_type":"code","metadata":{"colab":{"base_uri":"https://localhost:8080/","height":423},"id":"S80UC6eUQPRE","executionInfo":{"status":"ok","timestamp":1639408415004,"user_tz":-120,"elapsed":342,"user":{"displayName":"Kristjan Eljand","photoUrl":"https://lh3.googleusercontent.com/a-/AOh14Gip4UgEVFXL2Q-oKuIBr2JP5268uFbs3Bf7aNhj=s64","userId":"12801037868987527469"}},"outputId":"a812e8b2-6757-4563-8751-fde2fbf6af51"},"source":["# Muudame tekstilise veeru 'emtak' numbrilisteks veergudeks.\n","numeric_data = pd.get_dummies(data=clean_data, columns=['emtak'])\n","numeric_data"],"execution_count":10,"outputs":[{"output_type":"execute_result","data":{"text/html":["
\n","\n","\n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n","
employeesrevenueemtak_EHITUSemtak_INFO JA SIDEemtak_TÖÖTLEV TÖÖSTUS
112.0144389.0010
59.033043.0001
8128.05924007.0001
96.025659.0001
108.0141853.0100
..................
1470763.0143609.0010
1470796.022225.0010
1471212.00.0010
1472203.04059.0001
1472462.028218.0010
\n","

17450 rows × 5 columns

\n","
"],"text/plain":[" employees revenue ... emtak_INFO JA SIDE emtak_TÖÖTLEV TÖÖSTUS\n","1 12.0 144389.0 ... 1 0\n","5 9.0 33043.0 ... 0 1\n","8 128.0 5924007.0 ... 0 1\n","9 6.0 25659.0 ... 0 1\n","10 8.0 141853.0 ... 0 0\n","... ... ... ... ... ...\n","147076 3.0 143609.0 ... 1 0\n","147079 6.0 22225.0 ... 1 0\n","147121 2.0 0.0 ... 1 0\n","147220 3.0 4059.0 ... 0 1\n","147246 2.0 28218.0 ... 1 0\n","\n","[17450 rows x 5 columns]"]},"metadata":{},"execution_count":10}]},{"cell_type":"markdown","metadata":{"id":"WXNowcK0RbhH"},"source":["### Vaatame uuesti korrelatsiooni andmete vahel"]},{"cell_type":"code","metadata":{"colab":{"base_uri":"https://localhost:8080/","height":206},"id":"srK1V3WSOBic","executionInfo":{"status":"ok","timestamp":1639408459770,"user_tz":-120,"elapsed":285,"user":{"displayName":"Kristjan Eljand","photoUrl":"https://lh3.googleusercontent.com/a-/AOh14Gip4UgEVFXL2Q-oKuIBr2JP5268uFbs3Bf7aNhj=s64","userId":"12801037868987527469"}},"outputId":"e59a53da-470e-490a-96de-edd53555077f"},"source":["# Leiame korrelatsiooni ja ümardame tulemuse kahe komakohani\n","correlation_matrix = numeric_data.corr().round(2)\n","correlation_matrix"],"execution_count":11,"outputs":[{"output_type":"execute_result","data":{"text/html":["
\n","\n","\n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n","
employeesrevenueemtak_EHITUSemtak_INFO JA SIDEemtak_TÖÖTLEV TÖÖSTUS
employees1.000.79-0.13-0.010.14
revenue0.791.00-0.09-0.020.11
emtak_EHITUS-0.13-0.091.00-0.46-0.71
emtak_INFO JA SIDE-0.01-0.02-0.461.00-0.30
emtak_TÖÖTLEV TÖÖSTUS0.140.11-0.71-0.301.00
\n","
"],"text/plain":[" employees ... emtak_TÖÖTLEV TÖÖSTUS\n","employees 1.00 ... 0.14\n","revenue 0.79 ... 0.11\n","emtak_EHITUS -0.13 ... -0.71\n","emtak_INFO JA SIDE -0.01 ... -0.30\n","emtak_TÖÖTLEV TÖÖSTUS 0.14 ... 1.00\n","\n","[5 rows x 5 columns]"]},"metadata":{},"execution_count":11}]},{"cell_type":"markdown","metadata":{"id":"f-APegEfSHRE"},"source":["### Visualiseerime korrelatsioonimaatriksi"]},{"cell_type":"code","metadata":{"colab":{"base_uri":"https://localhost:8080/","height":540},"id":"YGhsJcp1SKTy","executionInfo":{"status":"ok","timestamp":1639408502583,"user_tz":-120,"elapsed":1029,"user":{"displayName":"Kristjan Eljand","photoUrl":"https://lh3.googleusercontent.com/a-/AOh14Gip4UgEVFXL2Q-oKuIBr2JP5268uFbs3Bf7aNhj=s64","userId":"12801037868987527469"}},"outputId":"1d31c965-fbb0-423b-a42e-ae7b83c7d41a"},"source":["import seaborn as sn\n","import matplotlib.pyplot as plt\n","\n","plt.figure(dpi=100)\n","sn.heatmap(correlation_matrix, annot=True)\n","plt.show()"],"execution_count":12,"outputs":[{"output_type":"display_data","data":{"image/png":"iVBORw0KGgoAAAANSUhEUgAAAp4AAAILCAYAAABB3ZxjAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAPYQAAD2EBqD+naQAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4yLjIsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+WH4yJAAAgAElEQVR4nOzdd3hUVf7H8fc3IQkJEEIJAZQmCAqIClbQVRARRAXLKooFsSsqa0NsqLsrP1lFXbGsIogiirpr3ZWigmJDadJ7CTUhQEhII5Dz+2OGZCZMICS5E4Kf1/PcR+6Zc+8950jId0675pxDRERERMRrEZVdABERERH5Y1DgKSIiIiJhocBTRERERMJCgaeIiIiIhIUCTxEREREJCwWeIiIiIhIWCjxFREREJCwUeIqIiIhIWCjwFBEREZGwUOApIiIiImGhwFNERESkijOzP5nZF2a2ycycmfUtxTXnmtkcM8szs5VmNsDrcirwFBEREan6agC/A3eVJrOZtQD+C0wDTgJeBEab2QWelRAw55yX9xcRERGRMDIzB1zqnPv0AHmeBXo759oHpH0AJDjnenpVNvV4ioiIiByGzCzGzOKLHTEVdPszga+LpU32p3ummpc3FzlS5aet1lBBKez5vfi/aVKSFwd+X9lFqBKa5ld2CaqO1pZV2UWoEk7d+Il5ef9y/r54ChgWIu3Jctxzn4ZASrG0FCDezGKdczkV8Iz9KPAUERER8UrB3vJcPRwYWSwtrzw3rGwKPEVERES84grKfqlzeXgXaG4BkoqlJQEZXvV2guZ4ioiIiPwR/QycVyztfH+6Z9TjKSIiIuKVgrL3eB4KM6sJtApIamFmJwHbnXPJZjYcOMo5d73/89eBQWY2AhgDdAOuBHp7WU4FniIiIiIeceUYaj9Ep+Dbk3OffXNDxwEDgEZA06JyuTVm1ht4AbgX2ADc7Jyb7GUhFXiKiIiIeCVMPZ7OuelAiSv0nXMDSrjmZM8KFYICTxERERGvhK/Hs0pQ4CkiIiLilfJtp3TEUeApIiIi4hX1eAbRdkoiIiIiEhbq8RQRERHxSpgWF1UVCjxFREREPBLG7ZSqBAWeIiIiIl5Rj2cQBZ4iIiIiXlGPZxAFniIiIiJe0XZKQbSqXURERETCQj2eIiIiIl7RUHsQBZ4iIiIiXtHioiAKPEVERES8oh7PIAo8RURERLyiHs8gCjxFREREPOKcVrUHUuApIiIi4hUNtQfRdkoiIiIiEhYKPMVzZrbWzAZXdjlERETCrqCg7McRSEPtIlXcrHkLGDvhYxYvXcnWbdt5afjjnPenzpVdrLD64Lu5jJs6i20ZWbQ+OpEhV3bjhOaNQua96YWJzF6xYb/0s9q1YNRdlwGwLSOLFz+dwS9L1pKZnUfHY49myJXdaNagjqf1CIez77uck67uSkx8HBtmLWfyo2PZsTalxPxNTmvD6bf1puEJLaiVVIePb3mBFVNmB+U5a/BltL34DGo1rsve/L1sWbCG7//xEZvmrfK6Op7q8ODltLqmK1HxcWydtZzfHh5L5pqS2wqg9YDuHH9Hb2ITa7NjcTKzHnuHbfNWF37eqn9Xml/ambonNCeqViwfHncr+RnZXlfFMw1u6EXDO/oSlZhA9uK1JD8+mqx5K0Lmrd66CUc9cDU1OrQkpkkDkoe9RcroL0u8d8O7LqPJI9exZfQXrB82xqsqeE9D7UHU4ylSxeXk5NKm1TE8ev+dlV2USjF51lKe//d33Nb7TN4feh2tj0rkzpf/zfbM0L/MR956CV8Pv73w+PixG4iMMM7v2BoA5xx/+ddnbExL54Xb+vLBI9fRqG48t//zI3Ly8sNZtQp3xu0XccqAHkx6ZAzj+gwjPzuPq94dQmRMVInXRMXFkLokmSmPjysxz/Y1m5nyxDje6jGU8Zc/zc4NaVz17hBi69byohph0faui2gzsAe/PjyGyRcNY092Hl0nDCHiAG3V7JLT6TisPwtGfsL/LniMHYuT6TphCDH14gvzRMZGs2n6fBa+/Hk4quGpupd0ocmwG9k0ciKLet5P9uK1tH7vCarVqx0yf2RsDHnJKWx45l12p2w/4L1rnNiKBtf2IHvxGi+KHl4Fe8t+HIEUeP6BmFmEmQ01szVmlmNmv5vZFf7PzjUzZ2YXmNlc/+ffmlkDM+tlZkvMLMPMJphZXMA9p5vZKP+x08zSzOyvZmYHKEdTM/vMzHb57/mhmSX5P2tuZgVmdkqxawab2Tozi/Cftzezr/z3SDGzd82sfmnq6v+8jpm9Z2Zb/Z+vMLMbK661w+fsM0/lnltvoPs5XSq7KJXi3W9nc1mXE+h7ZntaNqrHY1efT/XoKD79aUHI/LVrxFK/do3C45el66geHUWPjm0ASE7dwfw1m3mkX3faN29I86S6PNqvO7m79/DVrCXhrFqFO/Wmnvw46jNWTJ3D1qXr+fK+16nVIIHWPTqVeM3q6fP5/rmPWT55Vol5Fn/2M2t/XET6+q2krdjIN399j+rxcTQ4vqkX1QiL427uycKXPmPD5DmkL1nPz/e8TlxSAk16ltxWx93ai5UTprF64vdkrNjEr0PGsjcnj5ZXn1OYZ9noySwe9QVps1eGoxqeSrrlErZOmErah9+Su2ID6x5+nYKcPOr3Oy9k/qzfV7Lhb+PY/vkPuN17SrxvRFx1jhn1F9Y+9Cp70rO8Kn74uIKyH0cgBZ5/LEOB64HbgXbAC8B4MzsnIM+TwCCgM9AE+BAYDFwD9AZ6AHcXu+8NwB7gNOBe4D7g5lAF8AeOnwF1gXOA84FjgIkAzrm1wNdA8SDwRuBt51yBmSUA3wJzgVOAnkCSv6ylretfgbZAL+B44A4gLVSZ5fCVv2cvS5JTOL1NUYATEWGcflxT5q/ZXKp7fPrTQi7o1IZYf0/W7j2+XoaYqKKZSBERRnS1SOau2lSBpQ+vhCaJ1GyQwNofFham5WXmsGneKo7qeGyFPSciKpKTrulK7s4sUhevq7D7hlPNponEJiWwZUZRW+Vn5pA2dxX1O4Vuq4ioSOp2aMGWGYuKEp1jy4xF1O/Uyusih51FVaNGh5ZkzPi9KNE5Mn6YT81Obcp172bP3Er6N7PImDG/nKU8TGiOZxDN8fyDMLMY4BGgu3PuZ3/yajM7C7gNeMOf9phz7kf/NW8Bw4GWzrnV/rSPga7AswG3Xw/8xTnngGVmdgLwF+DNEEU5DzgBaOGcW++/5/XAIjM71Tn3GzAaeN3M7nPO5ZlZR/81ffz3GATMdc49ElC/gcB6M2sNrDtIXb8Dmvrvsa8bZ+1B2i4mMC1zw2JiYmJKuELCZceuHPYWOOrF1whKr1crjrUHGcoDWLB2Mys3pTHs2h6Fac0b1qVR3Vr887MZPH7N+cRGRzH+29mkpO8ibeeuCq9DuNRokABAVlpGUHpWWgY1EkMPjR6KVt1Oos+oQUTFRrMrNZ0Prn2WnB1Vs72q+9sqZ2twW+VuzSC2Qei2iqlbi4hqkeRu3Rl8TdpO4luFnm9clVWrWwurFkl+WnB987emU73lUWW+b91LziKu/TEs7v1geYsohyn1eP5xtALigKn+4eldZrYLX69gy4B8gV8xU4DsfUFnQFqDYvf+xR907vMzcKyZRYYox/HA+n1BJ4BzbjGQ7v8M4FNgL3Cp/3wAMM3fGwpwItC1WD2W+j9rWcq6vgb0M7N5ZjbCzA60GmcosDPwePal1w+QXaqKT39ayLGN6wctRIqKjOT5W/uwLnUHf3rgFc4Y/BK/LV9Pl3YtiCh5Bslhp13fzty/eHThEVEt1I9jxVn38xLG9HqUdy57itXfzafvq4OIC5jbeDhrfmlnrlwxuvDwuq0ktOjG9Wj69E2svvsFXBWfTx1EQ+1B1OP5x1HT/9/ewMZin+VRFJAF/rS7Yuf70jz9wuKc221m7wA3mtl/8A3z3xuQpSbwBTAkxOWbgfb+P5dUV5xzX5lZM+BCfMP935jZK865B0LcczgwMjBhyL237wyRT8KsTs1YIiOMbRnB88C2ZWZTv1gvaHE5eflMnrWUOy7af25s26ZJfPjI9WTm5JG/Zy91a8Vx7Yj3aNs0qULL76UVU+ewaW7RqvLIaN8/9zXqx5OVml6YXqN+PCmLk8v9vPycPHasS2HHuhQ2zV3FbdOf48SrzuHnV78o9729tmHKHNJCtFVsYjy5AW1VPTGeHYtCt1Xe9kwK9uylerHe4+r1a5Oz9cj752LP9kzcnr1E1Q+ub1RiAvlb00u46sDiTmhJVGIC7SY9X5hm1SKpdUZbkgZcyKwWV1bN4ecwltnM7gIeBBoCvwN3O+d+PUD+wfimmjXFN93sY2Cocy7XqzIq8PzjWIwv6GrqnPuu+Idm1nL/S0rt9GLnZwArXOj3hC0BmphZk4Ch9rZAgr+M+4wGFgJ34vt7+p+Az+YAlwNrnXP7zVA3swPWdR/n3FZgHDDOzGYA/wD2Czydc3n++xXKT1tdPJtUgqhqkRzfNIlflyXT7STf3LuCAsevy5Lpd85JB7x2ypxl7N6zl96nHV9inlqxvukU61J3sHhdCneGCFIPV7uzctmdFfy7Y1dqOs27tCPVH2hG14yl8UktmTP+mwp/vkUYkdElrwA/nOzJymVXsbbKSUkn6ax2hYFmtZqx1D+5JSveCd1WBfl72T5/DQ3PaseGSf7tpsxoeFY7lr091dPyVwaXv4es+auIP6sD6ZP9cY0Z8WedQMrYr8p0z4wf5rOw271BaS1GDiJn1Ua2vPJJ1Qw6IWzlNrOr8HWS3A7MxLc+Y7KZtXHOpYbIfw3wf8BA4CegNfA2vg6m+7wqpwLPPwjnXKaZPQe84F/g8wNQG+gCZOCbF1lWTc1sJPAvoCO+xUf3l5D3a2AB8J7/m1Y14FXgu4D5ljjnlpjZL/jmko5xzuUE3OMV4BbgfTMbAWzHN7zeD7j5YHV1zo0zs6eB2cAifPM3L8IXFFc52dk5JG8oWvSycVMKS5evonZ8LRo1LD4r4shzXbdOPP7OJNo2a0j7Zg15b9occvLy6XOmr+P7sbe/okFCTe7pe3bQdZ/+tJCuJ7YioWbsfvecMmcZdWrG0ahuLVZsTGPER9PoemIrOrdtHo4qeea3tybR+e6+bF+Tws71qfzp/ivITE1necC+nFdPGMryybOYPc4XLEXFxVCneVFPb0KTRBq0bUpuehYZm7YRFRtD50F9WPH1bHalphNXpxYdbzifWkl1WPrfmWGvY0VZOnoS7e/tS+aaFLKSU+nw0BVkp6SzflJRW503cSjrJ81i+VhfWy194yvOfPE2tv2+hm1zV3HcLT2JjIth9QdF33+rJ9YmtkFtarXwtWnCcU3Yk5VD1sZt7K5iK7hT3vycFi/cQ9b8VWTNXUHSLRcREVudtIm+4LzFS/eQv3k7G/5vPOBbkFS99dGFf45qWI/Yds0pyMolb+0WCrJyyVkW3KO8NzuPPTsy90uvSsL4rvb7gDedc2MBzOx2fCN/A/EFmMV1Bn50zk3wn681s/fZvzOpQinw/GN5HNiKb87iMfjmVc4BnqF8w+fvALHAr/jmZr5E0WKlIM45Z2Z9gJeB74ECYBL7r5QHeAvfD0bQzsHOuU1m1gVfUDoFX+C4zn+ffV8tD1RXgN34htCbAznADHyBa5WzcOkKBt5dNOtgxMu+pu/Tqzt/f6yk+P/IccEpx7FjVw6vffkjaRnZtDk6kVcHXV644GjzjgwsInhu5tqU7cxdtZHX7r485D3Tdmbx/MfT2ZaZTWLtGlx0ejtu7XWG53Xx2i+vf0lUXAy9hg+kenwc62ct58PrR7A3YD5dQtMGxNYp2n+zUYdj6D/x0cLz7k9cC8D8j77nvw+8QUFBAfVaNeKEK+4ltk4tctJ3sfn31Yz/899IW1F8pkvVsfiVL6kWF8PpIwYSHR9H6m/LmdZ/BAUBbVWzeQNiAvYqXff5TGLqxXPig5dTPbE2OxatY1r/EeQGLOg69vrz6HD/ZYXnPT59HICfB/+L1R/OCEPNKs72z3+kWt14jnqgH1GJdchetIbl1z7NHv+Co+jGiVBQNP0/KqkO7ae8UHje6I6+NLqjLxk/LWTZnx8Pe/nDphw9nqEWtwJ5/pG4wHzRQCd8v9cA8O8C8zVwZgm3/wm41sxOc879ambH4Jt+9m6ZC1wKFrwmROTQmNl0YJ5zrsJfiWlmjwN/ds51qOh7l1d+2mr94JTCnt+/ruwiVBkvDvy+sotQJTQ9gtaceK21Va0e1Mpy6sZPPF01mDNtdJl/X8R1u+UpYFix5Kecc08GJphZY3xrGjoH7OaCf1TwHOdcyF5MM7sHeA4wfJ2Rrzvn7ihreUtDq9rlsGNmNc2sPb5tk16u7PKIiIhUkuH4pooFHsMPeEUpmdm5+LYevBPfNLnLgN7+Th/PaKhdDkejgKvxbatUhV/QKyIif3jlGGoPtbi1BGn4proV33ojCdhSwjV/Bd51zo32ny8wsxrAG2b2d+e82c9JgaeUi3PuXA/uOQDf3p0iIiJVWxj24/RvQzgb30taPoXCNwWeh68zJ5Q4itZF7LNvJZRn0w8UeIqIiIh4JXzbQI3Etz3gLHyLfQcDNYB9q9zfATY654b6838B3Gdmc/Ftv9QKXy/oFyVsh1ghFHiKiIiIeCVMbyByzk00s0TgaXwbyM8DejrnUvxZmhLcw/k3fHt2/g04Ct9OMF8Aj+IhBZ4iIiIiXgnjxvfOuVGUMLRefGqc/wUsT/mPsFHgKSIiIuKVqvrGJY9oOyURERERCQv1eIqIiIh4JUxzPKsKBZ4iIiIiXtFQexAFniIiIiJeUY9nEAWeIiIiIl5Rj2cQBZ4iIiIiXlGPZxCtahcRERGRsFCPp4iIiIhXNNQeRIGniIiIiFcUeAZR4CkiIiLiFecquwSHFQWeIiIiIl5Rj2cQBZ4iIiIiXlHgGUSBp4iIiIhXtJ1SEG2nJCIiIiJhoR5PEREREa9oqD2IAk8RERERr2hVexAFniJlsOf3ryu7CFVCtRO7V3YRqow4931lF6FK0K/w0svdG1nZRRBQj2cxCjxFREREvKLAM4gCTxERERGvaFV7EK1qFxEREZGwUI+niIiIiEdcgWYmB1LgKSIiIuIVzfEMosBTRERExCua4xlEgaeIiIiIVzTUHkSLi0RERES8UlBQ9uMQmdldZrbWzHLNbKaZnXaQ/Alm9oqZbTazPDNbbmYXlrmupaAeTxERERGvhGmOp5ldBYwEbgdmAoOByWbWxjmXGiJ/NDAVSAWuADYCzYB0L8upwFNERETkMGRmMUBMseQ851xeiOz3AW8658b6r70d6A0MBP4vRP6BQF2gs3Mu35+2tiLKfSAaahcRERHxinNlP2AosLPYMbT4I/y9l52Ar4se6wr852eWULJLgJ+BV8wsxcwWmtkjZubpu1bV4ykiIiLilfINtQ/HN3weKFRvZ30gEkgplp4CHFfCvY8BugHvARcCrYBXgSjgqTKW96AUeIqIiIh4pRyr2v1D6qECzYoQgW9+563Oub3AbDM7CngQBZ4iIiIiVVB49vFMA/YCScXSk4AtJVyzGcj3B537LAEamlm0c253xRdTczxFREREvFPgyn6Ukj9InA2cty/NzCL85z+XcNmPQCt/vn1aA5u9CjpBgaeIiIjIkWAkcIuZ3WBmxwOvATWAfavc3zGz4QH5X8O3qv0lM2ttZr2BR4BXvCykhtpFREREPOLCtI+nc26imSUCTwMNgXlAT+fcvgVHTYGCgPzrzewC4AVgPr59PF8CnvWynAo8RURERLwSxldmOudGAaNK+OzcEGk/A2d4XKwgCjxFREREvBKexUVVhgJPEREREa+EscezKlDgKSIiIuKVMM3xrCoUeIqIiIh4RT2eQbSdkoiIiIiEhXo8RURERLyixUVBFHiKiIiIeEVD7UEUeIocpj74bi7jps5iW0YWrY9OZMiV3TiheaOQeW96YSKzV2zYL/2sdi0YdddlAGzLyOLFT2fwy5K1ZGbn0fHYoxlyZTeaNajjaT0OF7PmLWDshI9ZvHQlW7dt56Xhj3PenzpXdrHC7oz7Lqf9NV2JiY9j06zlTHtkLOlrUw54TYfru9Pptt7EJdYmbUky0594h5TfVxd+XrtZA8569Boan9qayOgo1n03n++eGEd2WobX1fFUhwcv59hruhIVH8fWWcv59eGxZK45cFu1HtCdtnf0JjaxNjsWJ/PbY++wbZ6vraITatDhgctpfM4JxDWuR972DNZPms3vIz4mPzMnHFWqcI1u7MnRd15CdGICuxavY9Wjb7Fr7sqQeePaHE2zB/tR88RjqN6kAaseH8umN/8blCf+jOM5+s4+1OxwDDEN67J4wLNsm/RbOKrimXBtIF9VaI6nlJuZRVd2GY40k2ct5fl/f8dtvc/k/aHX0fqoRO58+d9sz8wOmX/krZfw9fDbC4+PH7uByAjj/I6tAXDO8Zd/fcbGtHReuK0vHzxyHY3qxnP7Pz8iJy8/nFWrNDk5ubRpdQyP3n9nZRel0nS64yJOurEH3w4dw8RLhpGfnUff8UOIjIkq8ZpjLz6dsx/vz8wXP+H93o+xdUkyfccPIbZePADVYmPoO34IOMd/+j3DR5c9RWRUJBePuR/MwlW1Ctf2ros4bmAPZj48hkkXDWNPdh7dJgwh4gBt1eyS0+k0rD/zR37C/y54jB2Lk+k2YQgx/raKTapDXFICs5+ewJfdHuanwW/Q+NwOnPH8LeGqVoWq36czxzx5A8nPf8TcHg+RtWgt7d9/jKj68SHzR8TGkJucwtq/vcfulB0h80TGVSdr0VpWDR3tZdHDKwzvaq9KFHjKITOz6WY2ysxeNLM0YLKZtTezr8xsl5mlmNm7Zlbfn/9WM9tkZhHF7vOZmY0JOO9jZnPMLNfMVpvZMDOrFvC5M7ObzewTM8s2sxVmdknA5wPMLL3YM/qamSuWdsDnHA7e/XY2l3U5gb5ntqdlo3o8dvX5VI+O4tOfFoTMX7tGLPVr1yg8flm6jurRUfTo2AaA5NQdzF+zmUf6dad984Y0T6rLo/26k7t7D1/NWhLOqlWas888lXtuvYHu53Sp7KJUmpNv6smvL3/G6qlzSFu6nil/eZ0aDRJo2aNTidd0vLkXi96fxuKPvmf7ik18O3Qse3LyaHfVOQA0PuVY4o9OZOr9b7Bt2Qa2LdvAlPv+RVKHFjTp0jZcVatwx9/ckwUvfcaGyXNIX7Ken+55nbikBJr0LLmtjr+1FysnTGP1xO/ZuWITM4eMZW9OHq2u9rXVzmUb+P6Wf7Jx6lx2rUsl5cfFzHv2I44+/2Qssur9Oj7qtovZ8t7XpHwwjezlG1j50BsU5OSR1K9byPy75q1izdPvsvWzHynYHfoL745v57Lu2Q/Y9tWvXhY9vBR4Bql6f9PlcHEDsBvoAjwMfAvMBU4BegJJwIf+vB8B9YCu+y42s7r+fO/5z88G3sH3nti2wG3AAODRYs8d5r9vB+B/wHv+e5XKITyn0uTv2cuS5BROb9O0MC0iwjj9uKbMX7O5VPf49KeFXNCpDbH+3pnde/YCEBNVFF9HRBjR1SKZu2pTBZZeDlfxTROp0SCB5B8WFqbtzsxhy7xVNOx0bMhrIqIiaXBCC5J/WFSU6BzJPyyiYcdWAL7eUufYGxBI7M3LxxU4Gp/axpvKeKxm00RikxLYMqOorfIzc0ibu4rEA7RV3Q4t2DwjuK02z1hE/U6tSnxWdHwc+btycHur1nCsRVWjVodjSP9+flGic6TPWED8KVXz/7uEhwJPKasVzrmHnHPLgPOBuc65R5xzS51zc4GBQFcza+2c2wF8BVwTcP0VQBowzX8+DPg/59w459xq59xU4HF8gWGgt51z7zvnVgKPADWB0w6h3KV9TiEzizGz+MAjr4Rv6xVhx64c9hY46sXXCEqvVyuOtIysg16/YO1mVm5K49IuJxSmNW9Yl0Z1a/HPz2aQkZ1L/p69jJ3yKynpu0jbuavC6yCHnxqJCQD7zbvMTsugRmLtkNfE1q1FRLVIstN2FrtmZ+E1W+asJD87jy5D+1GtejTVYmM469FriKgWSY0GCR7UxHvV/eXO3RrcVrlbM6jeIHRbxfjbKndrcFvlpu0ktoT2jalbk/aD+7Ji/LSQnx/OourWwqpFsrtYfXdvTSeqiv5/94wrKPtxBDqshhelSpkd8OcT8QWZoSKYlsByfD2bb5rZnc65PKA/8IFzhT9ZJwJdzCyw5zESqG5mcc65fZMbC79eO+eyzCwDaHAI5S7tcwINxRewFvrH+5N47IaLD+Gx4fPpTws5tnH9oIVIUZGRPH9rH54cP5k/PfAKkRHG6cc1o0u7FuCOzOGcP7o2fTvTbfjAwvPPBzznyXNytmfyvzv+SddnbuSkG3vgChzLPv+ZlAVrqsyiiuaXdub0EUVtNe06b9oqUFTNWLq+8wA7l29k/vP/8fx5UomO0CHzslLgKWUV2PVWE/gCGBIi376x4S8AA3qb2W/A2cBfit1jGBDqX+DcgD8X72p0FPXcF/ifEaj4SoDSPifQcGBkYMKDV/fcWULecqtTM5bICGNbsd7NbZnZ1C/WC1pcTl4+k2ct5Y6L9p/H2LZpEh8+cj2ZOXnk79lL3VpxXDviPdo2TarQ8svhYfXUOWyZu6rwPDLG9899XP14slOLpkLH1Y9n6+LkkPfI2Z5JwZ69xNUP7rGLq1+brICeruQZCxl39v1Ur1OTgr0F7M7I5uZZo1ievLUiq+SZDVPmkBbYVtG+tqqeGE9OQFtVT4xnx6LQbZXnb6vqxXo3q9evTU6xXsFqNarTbcKD5Gfl8t1NL+L8U2Gqkvztmbg9e4kuVt/oxATyU9NLuOqPySnwDKKhdqkIc4B2wFrn3MpiRxaAcy4XX7DXH7gaWOacm1PsHm1CXL8yoFf0YLYCtcwsMDo7KURZD+k5zrk851xG4BETXfLK1vKKqhbJ8U2T+HVZ0S+4ggLHr8uS6dAi9HZK+0yZs4zde/bS+7TjS8xTKzaGurXiWJe6g8XrUji3Q8nzz6Tqys/KZee6lMJj+/KNZKWm06RLu8I80TVjaXhSS7bMXhHyHgX5e4opSOQAACAASURBVEldsCboGsxo0qUdW+bsv2VO7o5d7M7I5ujObYmrH8/qqXP2y3M42pOVy661KYXHzuUbyUlJp+FZRfWOqhlL/ZNbsvUAbbV9/pqgazCj4VntSJtd1FZRNWM57/0hFOzey/QBIymoortKuPw9ZM5fTcLZRVN6MCPhrBPImLWs8gp2ONLioiDq8ZSK8ApwC/C+mY0AtgOtgH7Azc65fV/n3wO+xBekji92j6eBL80sGfgYX+/liUB759xjpSzHTCAbeMbM/gmcjm/hUEU/x3PXdevE4+9Mom2zhrRv1pD3ps0hJy+fPme2B+Cxt7+iQUJN7ul7dtB1n/60kK4ntiKhZux+95wyZxl1asbRqG4tVmxMY8RH0+h6Yis6t20ejipVuuzsHJI3FC2k2rgphaXLV1E7vhaNGh7KbI2qa+5bkzjtnr6kr00hIzmVMx+4gqzUdFZNKZo5c9n7Q1k5aRbzx00FYM7or+jx/G2kLljDlnmrOPmmnkTFxbD4w+8Kr2n75z+xfeVGcrZn0rDjsZzz5LXMHT2J9NWlWwx3OFoyehLt7+1L5poUdiWncuJDV5Cdks76SUVtdd7EoayfNIvlY31tteSNr+j84m1s/30NaXNXcfwtPakWF8OqD3xtFVUzlm7vD6FabDTf3f0aUTVjifL/rOZty6hyPWMb//UFbV4aRObvq8icu5KjbulNRFwMKR/45qy2fvludm/extpnJgC+BUlxrY8u/HNMo7rUaNecvVm55K7dAkBEXHViWzQsfEZM0yRqtGvOnvRd5G1MC3MNK0gVmXISLgo8pdycc5vMrAvwLDAFiAHWAZPwBXb7fIsvKG0DTCh2j8lmdhHwBL4h+3xgKVDqzdycc9vN7FrgH/gC4W+AJ4E3KvI54XDBKcexY1cOr335I2kZ2bQ5OpFXB11euOBo844MLCJ4VsHalO3MXbWR1+6+POQ903Zm8fzH09mWmU1i7RpcdHo7bu11hud1OVwsXLqCgXcXzQYZ8bLvr0WfXt35+2P3V1axwmr2a18SFRvDecMHFm4g/+l1I9gb0OtWu2kDYuvWKjxf8cVMYuvGc8Z9l/s2kF+8jk+vGxG0SKlOy0Z0HnIl1RNqkrFhK7+9/DlzR38V1rpVtMWvfEm1uBhOHzGQ6Pg4Un9bzrf9RwT1UNZq3oDqAW217vOZxNSLp8ODl/s2kF+0jm/7jyDX31Z1T2hOon+Fe9+fg2bv8Mlpg8naULUCq7TPfiKqXjzNHurn20B+0VoWXf138v2L0WKOqh8UdEU3rEPHb4rmzx59Zx+OvrMP6T8tYsFlvmn0tU5qSYf/PFWYp+XTAwBImTiN5fe+EoZaeaCKfaHwmjktLBA5ZDnfvKEfnFKodmL3yi5ClfFqxycquwhVQr09lV2CqqNZQUnT1iXQ2Vs+9vRNB5l39irz74tar35Vdd/CUAL1eIqIiIh4RT2eQRR4ioiIiHhEI8vBFHiKiIiIeEU9nkEUeIqIiIh4RYFnEAWeIiIiIh6pattkeU2Bp4iIiIhXFHgG0ZuLRERERI4AZnaXma01s1wzm2lmp5Xyun5m5szsU6/LqMBTRERExCsF5TgOgZldBYwEngI6Ar8Dk83sgK9mM7PmwHPAjEN7Ytko8BQRERHxiCtwZT7MLMbM4osdMSU86j7gTefcWOfcYuB2fK+RHlhS2cwsEt/rrIcBqyu67qEo8BQRERHxSoEr+wFDgZ3FjqHFH2Fm0UAn4Ot9ac65Av/5mQco3RNAqnPurQqr70FocZGIiIiIVw5xyLyY4fiGzwPlhchXH4gEUoqlpwDHhbqxmZ0F3AScVK4SHiIFniIiIiIeKc92Ss65PEIHmuViZrWAd4FbnHNpFX3/A1HgKSIiIlK1pQF7gaRi6UnAlhD5WwLNgS/MbF9aBICZ7QHaOOdWeVFQzfEUERER8UoYVrU753YDs4Hz9qWZWYT//OcQlywFTsA3zL7v+ByY5v/z+tI//dCox1NERETEI2F8c9FIYJyZzQJ+BQYDNYCxAGb2DrDROTfUOZcLLAy82MzSAZxzQekVTYGniIiIiFfKt7io1JxzE80sEXgaaAjMA3o65/YtOGoavtKUTIGniIiIiEdcGEM959woYFQJn517kGsHeFCk/SjwFBEREfFKpfcxHl4UeIqIiIh4JJw9nlWBVrWLiIiISFiox1NERETEK+rxDKLAU0RERMQjGmoPpsBTRERExCMKPIMp8BQRERHxiALPYAo8RcrgxYHfV3YRqoQ4p3YqrTvnPF3ZRagSzu4wsLKLUGXM2r6isotQJezx+gHODp7nD0Sr2kVEREQkLNTjKSIiIuIRDbUHU+ApIiIi4hFXoKH2QAo8RURERDyiHs9gCjxFREREPOK0uCiIAk8RERERj6jHM5gCTxERERGPaI5nMG2nJCIiIiJhoR5PEREREY84V9klOLwo8BQRERHxiIbagynwFBEREfGIAs9gCjxFREREPKKh9mAKPEVEREQ8oh7PYFrVLiIiIiJhoR5PEREREY/ozUXBFHiKiIiIeERvLgqmoXYRERERjxQ4K/NxqMzsLjNba2a5ZjbTzE47QN5bzGyGme3wH18fKH9FUeApIiIi4hHnrMzHoTCzq4CRwFNAR+B3YLKZNSjhknOB94GuwJnAemCKmR1VxqqWigJPEREREY+4AivzcYjuA950zo11zi0GbgeygYEhy+Vcf+fcq865ec65pcDN+OLC88pR3YPSHE8RERERj5RnH08ziwFiiiXnOefyiuWLBjoBw4ue6wrM7Gt8vZmlEQdEAdvLXuKDU4+niIiIyOFpKLCz2DE0RL76QCSQUiw9BWhYymc9C2wCvi5TSUtJPZ4iIiIiHinnBvLD8c3bDJQXKmN5mNnDQD/gXOdcbkXfP5ACTxERERGPlGV1+j7+IfXSBJppwF4gqVh6ErDlQBea2QPAw0B359z8spTzUGioXURERMQj4VjV7pzbDcwmYGGQme1bKPRzSdeZ2UPA40BP59ysMlfyEKjHU4KY2dtAgnOub2WXRUREpKorz+KiQzQSGGdms4BfgcFADWAsgJm9A2x0zg31nw8BngauAdaa2b65oLucc7u8KqR6PI9QZjbdzF4M8zMHmJkLceQG5HnbzD4Nce25/rwJxc/914S6775jrf+atWY2OMS9nzSzeQHniWb2mpklm1memW0xs8lm1sWThimHs++7nLt/G8UDy8bQ772HqdO8+ChKsCanteGKt+5j0K8vM3TdeI7t0Wm/PGcNvoxbvxnB/UtGM3j+v+j33sM0PqmlV1UImzPuu5ybZ43iruVjuHTCwyQcpK0AOlzfnRt/fIG7lo/hqs+eJOnEY4I+r92sAb3fGMwtc1/l9kVv0uvVu4mrH+9VFQ4bs+Yt4K6HhtH1kv6079KLb77/qbKLVCluefBGvpz7b6avmszLE5+nSYvSb2943aBr+GXTdAY/NWi/z9p3asuoD0cybeVXfLPsv7z2n5eIqR5dgSUPryeHPcD6dXPI3LmSyV99QKtWLQ6Yf+XyX9ize+N+xz9f+nthnptv6s83Uz9ie9pS9uzeSO3aVffnLlwbyDvnJgIP4Asm5wEn4evJ3LfgqCnQKOCSO4Bo4GNgc8DxQLkqfBAKPKWiZeD7ix14NCvnPe8tdj+AGwPOTz3E+/0bOBm4AWgNXAJMB+qVs5wV6ozbL+KUAT2Y9MgYxvUZRn52Hle9O4TImKgSr4mKiyF1STJTHh9XYp7tazYz5YlxvNVjKOMvf5qdG9K46t0hxNat5UU1wqLTHRdx0o09+HboGCZe4murvuMP3FbHXnw6Zz/en5kvfsL7vR9j65Jk+o4fQmw93y+4arEx9B0/BJzjP/2e4aPLniIyKpKLx9wPdmS/ezknJ5c2rY7h0fvvrOyiVJrr7rqaKwdezrMPj+Tmi+4gJzuHFyf8g+iYgweIx5/YhkuvvZgVi1bu91n7Tm158b0RzPx+FgMvvIMbL7ydj8d+QkFB+LrFKtKDD9zJoLsGcuegh+l81sVkZWfzvy/fIyam+A5ARc7ofCFHNTmp8LigZz8A/v3vLwvzxMXFMnnKdP7v2Zc9r4PXwrWBvO9ZbpRzrplzLsY5d7pzbmbAZ+c65wYEnDd3zlmI48kKqXgJFHgeBswswsyGmtkaM8sxs9/N7Ar/Z/t6/i4ws7n+z781swZm1svMlphZhplNMLM4/zVvA+cA9wb0CjY3s0gzeyvgOcvM7N6DlO1UM9vq75IvDeec21LsKL69wyFxzu0MvJ8/OT0gbWtp7+XvUT0bGOKcm+acW+ec+9U5N9w593l5ylnRTr2pJz+O+owVU+ewdel6vrzvdWo1SKB1iF7MfVZPn8/3z33M8sklT9VZ/NnPrP1xEenrt5K2YiPf/PU9qsfH0eD4pl5UIyxOvqknv778GaunziFt6Xqm/OV1ajRIoOUB2qrjzb1Y9P40Fn/0PdtXbOLboWPZk5NHu6vOAaDxKccSf3QiU+9/g23LNrBt2Qam3Pcvkjq0oEmXtuGqWqU4+8xTuefWG+h+zmE3CBA2V918BWNfepcZk39k5ZLVPHXPcOon1edPPc864HWxcbE8Neoxhj/4HJk79x+tHPzkID586z+8O2oCa5avJXnVer75Yjr5u/O9qoqn7rn7Zp4Z/hJffDGFBQuWMODGe2ncOIk+fS4o8Zq0tO2kpGwtPC68sDsrV67hu++LpiL+8+XRjPjHK8ycOScc1ZAwUuB5eBgKXI/vLQPtgBeA8WZ2TkCeJ4FBQGegCfAhvvkb1wC9gR7A3f689+KbTPwmRb2C6/H9/94A/Bloi687/hkzuzJUocysGzAVeNQ592zFVLXS7fIfff0b8x6WEpokUrNBAmt/WFiYlpeZw6Z5qziq47EV9pyIqEhOuqYruTuzSF28rsLuG07xTROp0SCB5IC22p2Zw5Z5q2jYKXRbRURF0uCEFiT/sKgo0TmSf1hEw46tAHy9pc6xNyAg2JuXjytwND61jTeVkcNC46aNqJ9Uj99mzC5My8rMYtHcxZzQ6cBfOh545l5+/OaXoGv3qVMvgfad2rJj2w7e+HwU//v9P7z67xc58bQTKrwO4dCiRVMaNUrim29/KEzLyMjk11/ncsbpJX/pCxQVFUX/ay7j7XETvSpmpXOu7MeRSIuLKpk/+HkE3zYG+77urTazs4DbgDf8aY855370X/MWvr29WjrnVvvTPsb3vtVnnXM7zWw3kB3QQwi+rRaGBZyvMbMzgSvxBbKB5boUeAe42T9vpLRqm1nxr/kznHO9As4vCpEn8hCeUWbOuT1mNgBfUH67mc0BvgM+KGkbiVBvjni6ST+qmXdFrtEgAYCstIyg9Ky0DGok1i73/Vt1O4k+owYRFRvNrtR0Prj2WXJ2eDaX3FM1En1tlV2srbIP0FaxdWsRUS2S7LSdxa7ZSd2WvtkcW+asJD87jy5D+/HTsx+CGV0evoqIapGF/3/kyFSvQV0Atm8NfoHL9q07Cj8LpXufbrQ5oTUDL7w95OeNmzUG4Ob7BvDPv77GikUr6XXFBbw88Xn6d7uR9Ws2VlANwqNhku8V4CkpwYNOKalpNGxY0uvBg/Xp05OEhHjGvfPhwTNXUeXZTulIpB7PytcK32uqpprZrn0Hvh7QwBUfgUFRCr6gcnWxtIP+pJvZXWY22z98vgu4Fd+E40CnAx8B1x1i0AmQiW9Cc+Bxc7E800qRxzPOuX8DjfHN7ZwEnAvM8Qekoez35ojpOxeVkLVs2vXtzP2LRxceEdW8jcPX/byEMb0e5Z3LnmL1d/Pp++og4upVjcn7bfp25o4lowsPr9oqZ3sm/7vjn7TofjJ3Lh3NHYveIKZ2HCkL1uAKCjx5plSOCy7tzrcrvio8qlU79D6ZBo0Tue/pQTw56G/sztsdMk9EhC8A+WT8F/x34iSWL1zJS0++QvKq9VzU78Jy1SEcrr76UtK3Ly88oqLK33c1cEA/Jk2exubN5ZqRdVgL5xzPqkA9npWvpv+/vYHiX3fzKAo+AycAuWLn+9IO+EXCzPoBzwH34xuKzwQexBdoBloFbAMGmtl/nXOHMvmowDm3/4z6YFnF85jZ0YfwjJJkAKG6uBLwBYyF/G9mmOo//mpmo4GngLdDXL/fmyPOrd1uZ4h8ZbZi6hw2zV1VeB4Z7fvRrFE/nqzU9ML0GvXjSVmcXO7n5efksWNdCjvWpbBp7ipum/4cJ151Dj+/+kW57+211VPnsCWwrWJ8bRVXP57sgLaKqx/P1hLaKmd7JgV79hJXP/ivS1z92mRtLfpfmzxjIePOvp/qdWpSsLeA3RnZ3DxrFMuTSz2tWKqAGVN+ZNHcJYXnUdG+RWl1E+uyLbWo17NuYp2QC4YAjuvQhrqJdXl78puFadWqRXLSGR244sZL+VPz80lL2QbA2uXB01rWrlxHw6NK10NYmb74Ygq//jq38DzGv9AqKSmRLVtSC9OTGtRn3u8H/3LetOlRnHfe2VxxZdj6HSqFejyDKfCsfIvxBZhNnXPfFf/QzMq6z81u9h++7gL85Jx79SD3TwMuw7fS+0Mzu/IQg8/KsgwINbGoo/+zA1kMhNy7NNSbI4Y3u7Ys5SvR7qxcdmcFv6VsV2o6zbu0I9UfPEXXjKXxSS2ZM/6bCn02gEUYkdElrwA/nORn5bKzWFtlpabTpEs70gLaquFJLVnwbui2KsjfS+qCNTTp0o7VU/xz8cxo0qUd88dN3S9/rn8awtGd2xJXP57VU7Xg4UiSnZVDdlbw9/60lG2celbHwkAzrmYc7U5uy3/eCb0GcdaM2VzT9cagtMdeGMK6lcm8+8r7FBQUsHn9FlI3b6VpyyZB+Zoc04Sfv53J4W7Xrix27coKStu8OYVuXc/id3+gWatWTU477WRef+Odg95vwA1XkZqaxv/+V/H/ph1OjtCpmmWmwLOSOecyzew54AX/WwZ+wNdr1wVfD15ZV3ysBU43s+b4FtNsB1YA15vZBcAa4Dp8WxGtCVGuVP/iomnA+2bWzzm3pxTPtYBNaAOlOue8Hp98AZhhZo8C/8EXeF8NnAnc6S9cPXzTCMbgm76QCZwCPAR85nH5Dslvb02i89192b4mhZ3rU/nT/VeQmZrO8ilFixaunjCU5ZNnMdsfLEXFxQTt9ZnQJJEGbZuSm55FxqZtRMXG0HlQH1Z8PZtdqenE1alFxxvOp1ZSHZb+9/D/xVeSuW9N4rR7+pK+NoWM5FTOfOAKslLTWRXQVpe9P5SVk2YVBpZzRn9Fj+dvI3XBGrbMW8XJN/UkKi6GxR8Wff9r++c/sX3lRnK2Z9Kw47Gc8+S1zB09ifTVm8Nex3DKzs4hecOmwvONm1JYunwVteNr0aiUc/equomjP2bAvdexfs0GNiVv5taHbiItJY3vJxUtpHl54vN8N+kHPh77CdlZOaxeFvxPaW52Ljt3ZASlv/faRG55YAArFq9ixaKVXPjnC2jWsimP3DKMquifL4/mkaH3sGLlatauXc9TTz7Ipk0pfPbZ5MI8UyZN5NPPvuLV194uTDMzbrj+Kt4d/xF79+7d775JSYk0bNiAli2bA3BC++PI3JVFcvJGduxI3y+/VB0KPA8PjwNb8c0lPAZIB+YAz1D2ebjPAePw9eTFAi2Af+Hbv3Iivi9h7wOvAr1C3cA5t8UffE4H3jOza5xz+/8LESwe3wa0xTXiIO+LLS/n3E9m1gt4At90ggJgAXCec27fkuddwEzgL/imMUThW/H/Jr72Pmz88vqXRMXF0Gv4QKrHx7F+1nI+vH4Ee/OKOp8TmjYgtk7R/puNOhxD/4mPFp53f8LXMzv/o+/57wNvUFBQQL1WjTjhinuJrVOLnPRdbP59NeP//DfSVlSthQ2BZr/2JVGxMZw3fCAx8XFsmrWcT68LbqvaTRsE7VW64ouZxNaN54z7LicusTZpi9fx6XUjghYp1WnZiM5DrqR6Qk0yNmzlt5c/Z+7or8Jat8qwcOkKBt5dtIPaiJd9axz79OrO3x+7v7KKFVbvvvI+1eOq8/CIB6gZX5P5vy1gcP+HguZvHt38KBLqHtpiv4mjPya6ejSDn7qL+IRarFi8inuvfoCN6zYd/OLD0D+ee5UaNeJ4/dURJCTE8+OPv9H74mvJyysaJDrmmGbUrx+8KKv7eWfTrNnRjH079DKC2269jiceL/q7Nn3aJwAMvOkvvPNu1VqIpKH2YOaO1PX6Ih4a3uxa/eCUQpxaqdTunPN0ZRehSji7w8DKLkKVMSttRWUXoUrYs3ujp5Hhjw2vKPO/hF22fHzERa3q8RQRERHxiPbACKbtlKTUzGxR4JZPxY7+lV0+ERGRw43DynwcidTjKYfiQnxzIkM5cjdhExERKaMCTTkKosBTSs05VzXfqSgiIlJJCo7Qnsuy0lC7iIiIiISFejxFREREPHKkztUsKwWeIiIiIh7RqvZgCjxFREREPKIez2AKPEVEREQ8oh7PYAo8RURERDyiwDOYVrWLiIiISFiox1NERETEI5rjGUyBp4iIiIhHChR3BlHgKSIiIuIRvbkomAJPEREREY/oVe3BFHiKiIiIeESr2oNpVbuIiIiIRwrMynwcKjO7y8zWmlmumc00s9MOkv/PZrbUn3+BmV1Y5oqWkgJPERERkSrOzK4CRgJPAR2B34HJZtaghPydgfeBt4CTgU+BT82svZflVOApIiIi4hFXjsPMYswsvtgRU8Kj7gPedM6Ndc4tBm4HsoGBJeS/F5jknPuHc26Jc+5xYA4wqPy1LpkCTxERERGPFJTjAIYCO4sdQ4s/w8yigU7A1/vSnHMF/vMzSyjamYH5/SYfIH+F0OIiEREREY+Ucx/P4fiGzwPlhchXH4gEUoqlpwDHlXDvhiXkb3iIZTwkCjxFREREPFKefTydc3mEDjSrLAWeIiIiIh4J0z6eacBeIKlYehKwpYRrthxi/gqhwFOkDJrmV3YJqgZtnFx6Z3coaf6/BJoxf0xlF6HKGNjpgcougoSJc263mc0GzsO3Oh0zi/Cfjyrhsp/9n78YkHa+P90zCjxFREREPBLGd7WPBMaZ2SzgV2AwUAMYC2Bm7wAbnXP7Fie9BHxnZvcD/wX6AacAt3pZSAWeIiIiIh4J15uLnHMTzSwReBrfAqF5QE/n3L4FRE0Di+Oc+8nMrgH+BjwDrAD6OucWellOBZ4iIiIiHgnnlCPn3ChKGFp3zp0bIu0j4COPixVEgaeIiIiIR8I41F4lKPAUERER8Ui4htqrCgWeIiIiIh5R4BlMr8wUERERkbBQj6eIiIiIR5zmeAZR4CkiIiLiEQ21B1PgKSIiIuIRBZ7BFHiKiIiIeESvDg6mwFNERETEI9rHM5gCTxERERGPaKg9mLZTEhEREZGwUI+niIiIiEfU4xlMgaeIiIiIR7S4KJgCTxERERGPaHFRMAWeIiIiIh7RUHswBZ4iIiIiHtFQezCtahcRERGRsFCPp4iIiIhHCtTnGUSBp4iIiIhHNMczmAJPEREREY+ovzOYAk8RERERj6jHM5gCz0pkZm8DCc65vpVdFhEREal42sczmFa1VwAzm25mL4b5mQPMLL3YuTOzScXyJfjTzw1IcyGOH4pdd5GZfWdmmWaWbWa/mdmAUpQrZFuY2b/MbK+Z/bmU9bvUzH4xs53+MiwKvO8B6u/8z9lhZjPN7Akzq13s3m+X0AZBbXc46PDg5Vw2dxRXrRpDt4kPU6tF0kGvaT2gO31mvkC/1WO44MsnqXfSMUGft+rfle4fP8qVy96k/6bxRMXHeVX8sOrw4OVcPncU/VaN4bxDaKu+M1/g6tVj6FmsraITanDK367nkhn/oN+qMVz624uc8tfriKoV62U1PHfLgzfy5dx/M33VZF6e+DxNWhxV6muvG3QNv2yazuCnBu33WftObRn14UimrfyKb5b9l9f+8xIx1aMrsOSHn1nzFnDXQ8Poekl/2nfpxTff/1TZRTpsXHZfP17+7S3eWvY+Q94bRlLzRgfMf961F/D3SSN5Y+F43lg4nic+GU6Hc08OU2m9VYAr83EkUuB5ZNkDdDezrqXIeyPQKOC4ZN8HZnY38BnwI3A60AH4AHjdzJ471EKZWRzQDxgBDCxF/vOAicC/gdOATsCjQNRBLs3w1+VooDPwBnA9MM/MGhfLO4ng+jcCri5djcKj7V0X0WZgD359eAyTLxrGnuw8uk4YQkRMyc3Q7JLT6TisPwtGfsL/LniMHYuT6TphCDH14gvzRMZGs2n6fBa+/Hk4qhEWbe+6iOMG9mDmw2OY5G+rbqVoq07D+jM/oK26BbRVbFId4pISmP30BL7s9jA/DX6Dxud24IznbwlXtSrcdXddzZUDL+fZh0dy80V3kJOdw4sT/kF0zMEDxONPbMOl117MikUr9/usfae2vPjeCGZ+P4uBF97BjRfezsdjP6Gg4Mj8xblPTk4ubVodw6P331nZRTms9L79UnoM6M3YR17nyT4Pk5edx0PvPk7UAX4et2/exofPjufxix7kiYsfZPFPC/jLmw9z1LFNwlhyCYc/VOBpZhFmNtTM1phZjpn9bmZXBHx+rr/n6wIzm+vP862ZNTCzXma2xMwyzGyCP5jaN1x+DnBvQM9ZczOLNLO3Ap61zMzuPUj5TjWzrWY2pIxVzALGAP9XirzpzrktAcd2fxmaAM8DLzrnHnHOLXbOrXTOPQ88CNxvZqcfYrn+DCz2l+tP/mccyMXAj865fzjnljnnljvnPnXO3XWQ65y/Lpudc0ucc2/hC0Br/j979x0mVXn2cfx7A0uTJlItqIAVC+prbxGNXVFjjCU2rImCHVvssfcSY8eGikExmiiKWGNHEBVUepGO9KXD/f7xnN2dHWZ3Z1lmzszO7+N1LvY855mZe45b7nkqIelNtCzp/U9397nVfF8ZtfXZmkoe2gAAIABJREFUh/Ljg//m13eHMu+nyXzR6zEat23BJofuUvFjzj2MMS99yLh+n7Bg9FS+vrIPq5Yso9NJ+5fW+eWpdxn5yFvM/nbNBCJfbXP2ofyQcK8+T+NebZNwr+aPnspX0b3qHN2r+b/8yifnPMSUQcNYNHEmMz4byXd3/ouNf78TVjc/f3X+6ezj6fPgC3z67meM+WkcN/W6nVZtW7HfoftU+rhGjRtx0yN/4/Yr7mHh/EVrXL/4xgt59enXeeGRlxg/agKTxk5m8FsfsWL5iky9lZyw75670uvc0zlo/73jDiWnHHrWkbz5SH+GDvqGyT9P5PFLH6JFm5bscvBuFT5m2OAhDP9wKDMmTGP6+Gn0v/slli5eSuedt8xi5JnhNTgyxcxamlnfKKeZF+UrTaqo/3CUyywxs0lm9lByj2I68vO359q7mtACdj7QBbgfeNHM9k+qdyNwISFp2QR4FbgYOBk4AjgY6BnVvQj4AniSspazyYR7+ysh6doWuBm4zcxOSBWYmXUDBgHXuvudNXiPNwLbJybU1XQ8oWUxVcvm48Aiqt8yeBbworvPB94Bzqii/nSgi5ltV83XWYO7zwT6AkebWd2aPl+2NOnQmkZtWzD90x9Ly1YsXMLsYWNptcsWKR9Tp6guLXfYnOmfjigrdGf6pyNotUvnTIccm8ruVesq7tW0pHs1rYp7Vb9ZY1YsWoKvyr/pAht2aE+rthvwzafflpYVLyxmxLCRbL/LtpU+9vLbLuKzwV+We2yJ9TdowXa7bMvc3+byxJuP8Pbw13n0tQfYcbft1/l7kNzXepO2tGizPj/+b3hp2ZKFixn33Wg677xVWs9hdeqwx1F706BRQ0YP/SVToWbN6hocGdSXkAf9HjgS2I/QS1iRDaPjcmA7wt/xQ4Gnq/vCBTO5yMwaANcAB7n7F1HxODPbBzgP+Dih+t/c/bPocU8DtwOd3H1cVNYfOAC4093nm9lyYLG7T094jlXADQnn481sT+AEQiKbGNuxwPPA2e7erybv092nmtmDwK1m9kYlVV82s1UJ53929zeALYH57j4txXMvN7NxUZ20mNkWwB7AcVHRi8B9ZvZ3d6/oA93DwL7AD2Y2EfgSeA/o6+7L0n3tBD8DTYENgJlR2ZFmltx0c5u735biPTQAGiSW9Wl3IkUZzGMbtmkBwJJZC8qVL521gEZtUn/AbNCyKXXq1WXprPnlHzN7Ps06Vz6+Kp+V3KulKe5Vw7W4V80ruFcNWjZhu4uPYfSLH66DqLNvgzYtAZgza0658jmz5pZeS+Wg7t3Yavst6XH4+Smvb7hpGMVy9qVn8NAt/2T0iDEcdvwhPNzvXk7pdiaTx09ZR+9A8kGL6Odx/uzyP1vzZ8+jeev1K33sxlt14IYBt1PUoD5Li5fy4Hl3MnX0rxmLNVtqMlYz1d8fQo/d2vwtLHnObQhJ467uPiQq6wm8bWaXu/vU5Me4+4/AHxKKxprZtYTGu3ruvjLd1y+kFs/OQGNgkJktKjkILaCdkup+n/D1DEJSOS6prE1VL2hmF5jZt1H3+SLgXKBDUrXdgX8Bp9Y06UxwJ9CaysdTXgJ0TTgGraPXTtYDeNfdZ0fnbwPNgW4VPcDdi939CML/s78TWlnvBb4uGeJQTSVzChN/+j+k/PvvCjxWweOvBuYnHm8uGlFB1bWz2bF7ccLop0qPOvXypnE26zY7di/+NPqp0iMb96qoSSMOeP5y5o+awvf3vp7x11sXDjn2ID4Y/U7pUa9e9dsZ2mzYmktvvpAbL/w7y5ctT1mnTp3w4zXgxbf4b7+BjPpxDA/e+A8mjZ3MkSceXqP3ILlvr2P248mRfUuPujX4eZw2birXHnYZN3a/kg9eHMi59/Zkwy02XofRxqOGXe1r/P2JympiT8JwuyEJZe8TGlmrM5SuObCgOkknFFCLJ2GcH4Su8uSP4MmfHBIHJnnSeUlZpUm7mZ1I6K6+jNAVv5AwRjL5f+pY4Degh5n9191rPCjK3eeZ2e2EFtf/VFBturunGuQ3CmhuZhsmf+oxs/qEJD2tJp+oa/t0oJ2ZJX5j1iUkpIOreB9jCffnKTO7NYrtT0CfdF4/wTaEiUe/JZQVV/D+U7kduC+x4OgmXeZXUHet/PreUGYPG1t6Xrd++NFs1LoZS2eWTt6nYetmzB0xKeVzLJuzkNUrV9GwdflWvoatmrNk1joNN1YV3auGrZuxJAP3qt56Den20hWsKF7Kx2c9gK9cRT749L3PGDHsp9LzovphYkfL1i35bWZZq2fL1uunnDAEsPUOW9GydUuefffJ0rJ69erSdY8dOP7MY9lvs98ze0b4sZowamK5x04YM5F2G1X5+Vzy3NBBXzNm2KjS85Lvs+atmjN/Ztmw+eatWjBx5PhKn2vVipXMnBg6Dif8OI7Nd+zMIWceSZ9rKmoTyA817DJf4+8Pa+Ys1dWOst4/ANx9pZnNia5VycxaAddRefd8SoWUeI4k/M/q4O4fV1W5mpYTkqlEewOfu/ujJQVmltyyCjCb0A39EfCqmZ2wLpJPQnd1L8IY1Op4jdBiell0JDofWA94Oc3nOpzQxb0TYehBie2APmbWwt3npXzkmiYAi6PXT5uZtSGMzX3D3dfq5z/q0ij3g953wz+vzVNVaGXxUhYVLy1XtmTGPNru06U0earXpBGtdurE6OdT5+urV6xizvfjabdPF34dGI3FM6PdPl345dlMNWhnX0X3ql3CvSqK7tWotbhXoxLuVVGTRnR7qTerl6/kozPuY/Wy/Jkss7h4CYuLy3/Gnj3jN3bdZ+fSRLNxk8Z02WlbXn8+9QoHQz79lpMPOLNc2d/uv5KJYybxwj9eZvXq1UybPJ2Z02bRoVP5OYObdNyELz74ah2+I8lFS4uXsrR4ermyeTPn0mXvHZg0cgIADZs0omPXLRj8YvVWrKtTpw5F9QspTVlTqr8/FTGzO4CqJidvU9OYzKwZ8F9CXnVjdR9fMP9H3X1htBTQ/WZWB/gfoZl4b0JT8XM1ePoJwO5mthmhW3gOMBo4zcwOAcYDpwK7Rl8nxzYzmlz0IWHs5YnVbbpO8ZxLzewG4B/VfNwkM+sN3GtmS4EXCC2+3YHbgHvdPd2/JmcB/3X34YmFZjaSMLHrlFTxmdmNhGERbwMTgRaEJLqIyocEmJm1I3SttyB0J1xD6Jq4Kqlug6huopUJQwJi9/NTA9nuomNYOH4GxZNmskPv41k8Yx6TB5ZN8Diw39VMHjiEUX3Cbfn5iXfY84Hz+G34eH4bNpatzzmUuo0bMO6Vss9aDVs3p1Gb5qXrXLbYehNWFi+heMpvLJ9XnN03uY78lHCvFk2ayY5p3KufnniHvR44jznDxzN72Fi2OedQ6jVuwNjoXhU1aUS3l6+kXqP6fNzznxQ1aURRk7CG57LfFuB5uFRQv6f6c8ZFpzJ5/K9MnTSNc3ufxewZs/lkYNkyvg/3u5ePB/6P/n0GsLh4CeN+Kf8ra+nipcyfu6Bced9/9uOcy89g9MixjB4xhsP/eAibdurANefcQG22ePESJv1a1jE0ZeoMfh41lubNmtK+XeG29g58+j9073k808dPY9bkGRx/2UnMmzmHb9/7urTOVS/dyJB3v+L9594B4ITepzD8o2H8NnUWDddrxF7d92XrPbpw96m3xPU21pksrsd5L/BsFXXGESbwlvsGNbN6QMvoWoXMrClhOcKFwLFr01BWMIln5DpgFmF8REdgHjCUkFDVxD3Ac4TsvxGwOWEG+E6E9Sid0Er4KHBYqidw9+lR8vkR0NfMTnb3mvbpPUdotax8yuqasTwQTSK6nNBiWhcYAfzF3avq5q4DrDSztoRhDSeneP7VZjaAkJimSow/Bi4gTLhqC8wFhgEHu3tlUxybAdMI93sB8AvhHjzo7guS6h4a1U30C7B1pe8ui0b+4z/Ua9yA3e/qQf1mjZn5zSg+POWucq1uTTZrQ4OWTUvPJ775FQ02aMaOV/yBhq2bM3fERD485S6Wzi57+1ucdiA7XHZc6fnBb1wHwBcXP864Vz/Nwjtb91Ldqw+S7lXTzdrQMMW92uGKP9AoulcfJNyrlttvRutohvsxX5Tv6Rqw28UU/5ozn1HS9sI/XqZh44ZcddflNGnWhO+/+YGLT+ldbvzmxpttRIuW1Vshpd9T/anfsD4X33QBzVo0ZfTIsVx00uVMmbjGHIVa5cefR9OjZ1kD010Ph17H7ocdxK1/S+4wKhz/fWwADRo3oMft59O42XqMGvITd592CysSfh7bdGhH0/XL1hdu1qo5593XixZt1mfJwsVM+nkCd596S7nZ8fkqW2mnu88i5DiVMrMvgBZmtou7l3w670b4+11hw1LU0vkuoQX2aHdfWlHdSl+/4onFItVnZj8DT7l7tReazyd9N/yzfnDSoJuUvkfI/9m72fDp98/EHULe6LHL5XGHkBdemPh6Rje1vGizE9f6V+GDE17JSGxm9g6hYed8Qm9iH2CIu58cXd+IMA/jNHf/Oko63yP0Rh5LWDe8xKzqNJQVWounZEg0lvIwYCuqmDQkIiJSKDw3P4KfAjxC+Hu9mjC/o1fC9SLC3/OSlWR2pmxydPJsxM0JQw7TosQzR5nZCGDTCi6f5+59sxlPGgYC6wO93H1Y3MGIiIjkglzcbiLarXCNoXAJ1ydQthQh7v5R4nlNKPHMXYdT8d7kM7IZSDrcfee4YxAREck1WZxclBeUeOYod59YdS0RERGR/KHEU0RERCRD1N5ZnhJPERERkQxRV3t5SjxFREREMiQXJxfFSYmniIiISIbk6HJKsVHiKSIiIpIhavEsr07cAYiIiIhIYVCLp4iIiEiGqKu9PCWeIiIiIhmirvbylHiKiIiIZMhqV4tnIiWeIiIiIhmitLM8JZ4iIiIiGaIF5MtT4ikiIiKSIZpcVJ6WUxIRERGRrFCLp4iIiEiGaFZ7eUo8RURERDJEYzzLU+IpIiIikiEa41meEk8RERGRDFFXe3lKPEVEREQyxLWAfDma1S4iIiIiWaEWTxEREZEM0eSi8pR4iqyFLa047hDywtJVdeMOIW8MmTM67hDyQo9dLo87hLzxzLf3xB2CoDGeyZR4ioiIiGSIZrWXpzGeIiIiIhmyGl/rI1PMrKWZ9TWzBWY2z8yeNrMmaT7WzOwdM3MzO6a6r60WTxEREZEMydFZ7X2B9sDvgSKgD/AEcHIaj70Y1j4rVuIpIiIikiG5NsbTzLYBDgV2dfchUVlP4G0zu9zdp1by2K7AZcD/AdPW5vXV1S4iIiKSg8ysgZk1Szoa1PBp9wTmlSSdkfcJOfLulcTSGHgJuMDdp6/tiyvxFBEREckQr8F/wNXA/KTj6hqG1A6YWS5G95XAnOhaRe4HPnf3f9fkxdXVLiIiIpIhNZwkdDtwX1LZslQVzewO4Moqnm+btQnCzI4GugE7rc3jEynxFBEREcmQmkwucvdlVJBopnAv8GwVdcYB04E2iYVmVg9oGV1LpRvQCZhnZonlr5nZp+7+uzRjVOIpIiIikinZ2rnI3WcBs6qqZ2ZfAC3MbBd3/zYq7kYYfvlVBQ+7A3gqqewH4BLgrerEqcRTREREJENybQF5d//JzAYCT5rZ+YTllB4BXimZ0W5mGwGDgdPc/etoMlG51tCo5XOSu4+vzusr8RQRERHJkNW5uY7nKYRkczBhNvtrQK+E60XAVkDjdf3CSjxFRERECoi7z6GSxeLdfQJgFV2P6lR6vSJKPEVEREQyJCfbO2OkxFNEREQkQ7I1uShfKPEUERERyRAlnuUp8RQRERHJkJqs41kbKfEUERERyRC1eJanvdpFREREJCvU4ikiIiKSIbm2gHzclHiKiIiIZIjGeJanxFNEREQkQzTGszyN8UyDmX1uZteYWQczW2Rm21dS91czO8XM9o3qNs9mrNliZi+b2WPR14vM7MhK6qZ9/0RERGoTd1/rozZSi2d6/gQUAwuArsCkSuruC8wGVkZ1F2Y8unhcQtjfFcL7nFZJ3ercPxERkVpDLZ7l5XXiaWbPAi3c/ZhMvo67T044HVNF3fHp1s1n7j494euq7kna909ERKQ20eSi8nKiq93MPjKzB7L8el7J8VFC3b3M7G0zm2tmS83sBzO71MzqpnjeI83sYzNbaGaLzewbMzsj4fqNVbyuR/WeNbM3Kol/QgWPv8rMdom+3qOCxw42s9dTlD9bRWwTEup2MbNXzWyWmS0zs1FmdrOZNU7xvGndPzPb38w+MLM50b0bbWbPmVn9dGOL7svFKWK40cy+SzhvbWb/NLNJUfzTzexdM9u7onsehzanH8YOXz7OLmP7sc1bd7Je1y0qrNtwy03o9ERvdvjycXadMoC2Z1c48gGAdhccx65TBrDJTT3WddixaH/moez6zaPsPeEldnz7dprs1LnCuo232phtnrqcXb95lH2n92fDc45Yo06zPbZh2+evYrfvnmDf6f3Z4NBdMxl+Vt14w+VMnjiUhfPH8O47r9C58+aV1h8z6ktWLp+yxvHQg7eW1jn7rFMYPOhfzJn9MyuXT6F582aZfhuxOO7SE3n4m6d5+peXubLvDbTdrH2l9Q/88yHcOvA+nvjxRZ748UWuH3A7O/xupyxFmzuGfPcDF/S+gQOOPoXt9j6MwZ98HndIEqOcSDxjcBzQPjp2i8oOSig7DsDMjgU+Bn4FDgC2Bh4E/ga8YmZW8oRm1hP4N/AZsDuwA/AK8JiZ3RNVuyfhNdpHz3t9Ulm6kh/XHnjY3b8FhgNrZBRmtln0Pp5O8XwXpYjjzITzXaPn2AP4CqgPHAFsCVwLnAEMMrP6Ca+X1v0zs22BgcAQYD9ge6AnsByom25s1fAasBNwehT/0cBHwAbVfJ6MaXn03mxyw5lMva8fIw69jMUjJ7Bl3+upt0HqIcN1GzVg2aQZ/HrbCyyfMafS515vx860+fPBLB45vtJ6+aJV973oeOPpTLr3Xww7uDfFIyaw3ct/o6hV6uSnTqMGLJ00gwl/78vyGXNT1qnbuCHFIyYw9uqnMhl61l1x+V+58IIe/PXCq9hrn6MoXryYt//TlwYNGlT4mD32OpyNNulaehxy6IkAvPbaf0rrNG7ciHff+4g77nw44+8hLkecfywHn3EEfa55jBu7X8Wyxcvo/cJ1FDUoqvAxc6b9xqt3vsh1R17B9UddwcjPf+CSJ69ioy02yWLk8VuyZClbde7ItZf9Ne5QYrHafa2P2qhaXe1mVge4EjgXaAeMAm5x9/7R9d8BHwKHAncQEo0vgBOBXYD7gI2A/wBnu/viqLt8f2B/M7soeqnNgcnAE0C36LUmAY+6+4OVxLcr8DZwj7vfWVE9d5+T8JiG0Ze/JXYfm9l6wJPAm+5+bsLDnzKzGcCbwAlAPzPbBLgXeMDdr0moe6+ZLQceMrN/uftXwKKE11gFLEx83Wqo7HFPA383s4vdfXFC+RmEsZgDkx/g7vOB+QmxAcxLuicWPfdPwHHuXjLGc6KZjQKGEcZ+3lmd+wccDEx3994J9cYmxLmkqtjSZWYtCONwf+fuH5fED3xd3efKpLbnHM2slwYx+9UPAJh41WO0OHAXWp14INP/sUaDNcXDx1A8PIxi2PiaUyt83jqNG9LxkUuY0PtR2vf6Y2aCz7KNzjuK6X3fZ8YrHwIwpvcTtDxoZ9qe2I1fH1mz42DRd2NZ9N1YADb72ykpn3PuB8OY+8GwzAUdk149z+a22x/krbfeA+CMMy9i6q/f0b37Ibz66pspHzN7dvkPMr2vuJAxY8bz8SdflJY99HBI0Pffb88MRR6/Q886kjcf6c/QQd8A8PilD/HIkGfY5eDd+PKtz1I+ZtjgIeXO+9/9Egf++RA677wlU0ZPTvmY2mjfPXdl3z1rT69BdamrvbzqtnheDZwGnA90Ae4HXjSz/ZPq3QhcCOwFbAK8ClwMnExoJTuY0KIFoTXrC0KSUtKCNTmK7Vfgj8C2wM3AbWZ2QqrAzKwbMAi4trKksxoOJrSA3ZN8wd3fIiTdJ0VFxwNFqeoCjxOSzZNSXMuUvkCDKC6gNGk8HXjW3Vet5fN2Jfy/uC8h6QTA3YcD71P2Pqtz/6YD7c1sv7WMqzoWRccxZlZxM0+MrKge6+3QiQWfDi8rdGfB/76nyS5b1ei5N73tXOYNHsKCT7+vYZS5wYrq0XSHjsz7JOH9uDPv0x9o9n81u1e1zeabd6B9+7YM/uB/pWULFizk66+Hscfuu6T1HEVFRZxy8nE8+1y/TIWZk1pv0pYWbdbnx/+V/UwuWbiYcd+NpvPO6X2fWZ067HHU3jRo1JDRQ3/JVKiSg9TiWV7aLZ7RH+lrgIPcveSj7jgz2wc4j9ClWuJv7v5Z9LingduBTu4+LirrT+h6vdPd50etgouTWrBWATcknI83sz0JrWSvJsV2LPA8oRV1Xf1G3DL696cKrv+cUGdLYL67rzGz292Xm9m4hLrryp1m9vekssPc/VN3n2NmAwjd7c9H1w4ANgP61OA1q7onPwH7pFk38f79CzgE+NjMpgNfAoOB5919QQ3iXYO7r4zG3T4JnG9mQwnfu6+4e8psLPreL5ek/q/9UdRfc5jvOlGvZVOsXl1WzJ5frnzFrHk07LTRWj9vy6P3ofF2HRl5xBU1DTFnFEX3avms8vdq+ax5NOq89veqNmrXtg0AM2bMKlc+Y+Zs2rVrk9ZzdO9+KC1aNOO551+tunIt0qJNCwDmJ/1Mzp89j+at16/0sRtv1YEbBtxOUYP6LC1eyoPn3cnU0b9mLFbJPWrxLK86LZ6dgcaEcXyLSg5CC2inpLqJf8BnEJLKcUllVf6mM7MLzOzbaBLLIkIXf4ekarsTEpdT12HSWS6MDDznunA3oQUy8Ujs13kG2M/MSv7f9AA+rmoGepqqc0+qrOvuq9z9TGBjoDcwhfAhZ4SZVWfca1rc/TVgQ8LYzoHA74ChljARLMnVhK7+0uPZhaPWdVgZVX/DDehw81mM63k/vmxF3OFIFpx00rHMmzOq9CgqqvkiJj3OOJGB737ItGkz1kGEuWuvY/bjyZF9S4+69db+Q+a0cVO59rDLuLH7lXzw4kDOvbcnG26x8TqMVnKdWjzLq85voibRv0cQEoNEy5LOE/+yedJ5SVmlSa+ZnUjopr2M0BW/ELiCkGgmGgv8BvQws/+6+7r6q1qSWWwDpJqCtw0wMqFuczPb0N2nJlaKJtt0Iox9XZdmV5FEDiaMiz3DzO4mTJg6r4avmXhPUg2A2yahTnXuHwDuPgV4AXjBzK6LnuN8yrd8V2YBkGr2TQsSxohGr7WUMDRjEHCLmT0F3AQ8m+LxtxPGJ5c6o+mW81PUWydWzlmIr1xFUavyb6WodQtWzJq3Vs/ZePtOFLVuQZeB95aWWb26NN1jW9qecThDNj8BVq+u5Bly04roXtVvXf5e1W/dghUz1+5e1RZvvfUeX39d9mPaoEGY99e2bWumT59ZWt62TSu+Gz6iyufr0GEjDjxwX44/4ex1H2yOGTroa8YMK/twWVQ/TCBq3qo582eWTUhr3qoFE6uYpLdqxUpmTgydeRN+HMfmO3bmkDOPpM81j2UgcpHcV50Wz5GEBLODu49JOmo6Srpk9nKivYHP3f1Rdx8WJVnJLasQFmvvRmiRfdXMKp5iWD3vAXMIiW85ZnY0sAXwclT0GiG5XqMuIXFaL6FuVkRjMPsQxnWeTLjH/Wv4tN8RusgviSaalTKzHQkrA5S8z+rcv1TxzyVMhFqvGvH9QpjElmxnyhLhioys6LXcfZm7L0g8MtXNDuArVlL8/Via7bNDWaEZzfbZnkXfrt3YsAX/+54fu13EiIMvLT2KvxvNbwM+YcTBl+Zl0gnhXi38fhwt9k3YDMuMFvtsz4IhhT2ObtGiYsaOnVB6jBw5imnTZtDtgH1K6zRt2oTddtuJL7/6tsrnO+P0PzFz5mzefntwJsPOCUuLlzJz4vTSY8roycybOZcue5f9TDZs0oiOXbdgTDXHa9apU4ei+nm9hLZUk9fgv9oo7e9+d18YLQt0f5R0/I/QurQ3sMDdn6tBHBOA3aPlfhYREpbRwGlmdggwHjiVsGzOGh8v3X1mNLnoQ+BlMzvR3VfWIB7cvdjMziMs+/ME8AihRe1AQjd3f6Kxpu4+ycx6E2axLyW02q0AugO3AfdGM9qro7mZdU0q+y0hyW9qZu2Sri9OGhPZh7Ds0m3Ay+6+pJoxlOPubmZnEVoJXzOz2wkTg3YnzOr/Anggqpv2/YvqdQUGEFqwGxKGcHShbBJaOu4HPjWza4HXCR9mTgL2BP4avdYGhKEZzxCGhCwE/o/Qxf/vat+UDJnx5Jtsfn8vir8fS/Gw0bQ950jqNGrI7H7hj/7mD/ZixbQ5/HrHi0CYZNNwy41Lvy5qtwGNumzG6uKlLJswndXFS1nyS/kNo1YtXsbKuQvXKM83Ux5/i60evJCFw8eycNgYNjrnCOo0blA6y33Lh3uyfNpvTLjtJSDcn8YJ96pB+5as12UzVhUvZemE0DJVp3FDGm1e9uPVoENb1uuyGSvnLWLZlNlZfofrzkMPP8U1V/di9JhxTJgwmZtuvIKpU2fw73+/W1rnvYH9eOPf7/DoP58tLTMzTj/tT7zw4r9YtWrNuYlt27amXbs2dOq0GQDbb7c1CxcVM2nSFObOrR0tzwOf/g/dex7P9PHTmDV5BsdfdhLzZs7h2/fKFsS46qUbGfLuV7z/3DsAnND7FIZ/NIzfps6i4XqN2Kv7vmy9RxfuPvWWuN5GLBYvXsKkX8s6A6dMncHPo8bSvFlT2qc5vjif1dYu87VV3Y9d1wGzCGPeOgLzgKGExKYm7gGeI7Q6NSIsp/Q4Ya3FfoSu+ZeBR4HDUj2Bu0+Pks+PgL5mdnINZm+XPGd/MzuAsE7lp4S/wO3/AAAgAElEQVSEaDRwK2HpJE+o+0A0iehywkz9usAI4C/uvjYTen7Hmt3ZTwMl/Vw3R0eixwktrCUxTTKz9wkzzJ9ZixjW4O6fR2t53gC8AzQldOk/B9zu7ssS6qZ7/74mTEp6jDD2chHh3h2TsORRurEdRki2LyNs6fkDcKC7/xhVW0RYh/QSQgt6EWEVhSep+ffxOjPnzc+o17IZG11+IkWt12fxiPGM+vPNrIwmN9TfsDWsLvtlVtR2fbZ77/7S8/Z/OYb2fzmGBZ//yC9/vC7r8WfT7H9/TtEGzdi094nUb92CRSMmMOKkW0snZzXYqFW5Ft367dZn58Fliy1s/NfubPzX7sz7fAQ/HBdGdTTt2okdXr+ptE6nm88AYEa/Dxl10T+y8K4y4+57HmW99Rrz2KN30aJFMz777BuOOOrPLFtWNlqqY8dNadWqZbnHHXTgvmy66cb0eTb1MPrzzj2V668r69z46MMBAPQ46xKef6F2TET672MDaNC4AT1uP5/GzdZj1JCfuPu0W1iRMGa6TYd2NF2/bP3YZq2ac959vWjRZn2WLFzMpJ8ncPept5SbHV8Ifvx5ND16Xll6ftfDTwDQ/bCDuPVvqToKa5fa2nK5tqy2bkIvkknfbHSsfnDSsHRV5oYk1DYHzPmi6krCSe2Th/lLRZ75NtUKf5KsqFXHjE4i3nyDHdf678X434bn6gTntaaBJiIiIiIZslotnuXU2i0zzWxE4rJPSUfq7UpERERE1iF3X+ujNqrNLZ6HE8bvpVK7F6ETERERqYCZtQQeBo4izId4DbjI3RdV8bg9CfM0dids9PMdcEh1Ji/X2sTT3SfGHYOIiIgUthztau9L2KL894RGuj7AE4TlF1OKks6BhLWtewIrgR0JiWvaam3iKSIiIhK3mnSZp9qyGViWuILMWjznNsChwK7uPiQq6wm8bWaXJ2+Ek+B+4CF3vyOhrNoLJtfaMZ4iIiIicavhlplrbNkcldXEnsC8kqQz8j6h5TLlshFm1ia6NtPMPjezGWb2sZntk6p+ZdTiKSIiIpIhNVzHc40tm1lzm/LqagfMTCxw95VmNie6lkrH6N8bCeuVf0fY6GWwmW3n7qPTfXG1eIqIiIhkSE1mtafasrmibnYzu8PMvIpj67V8GyX54uPu3ifayvwSQld7j+o8kVo8RURERPLfvcCzVdQZR9jqutxepWZWD2gZXUtlWvTvyKTyn4AO1QlSiaeIiIhIhmRrVru7zyJsa14pM/sCaGFmu7j7t1FxN0Kr5lcVPGwCMBXYKql8S8L22WlTV7uIiIhIhuTaAvLu/hNhWaQnzWw3M9sbeAR4pWRGu5ltZGY/m9lu0WMcuBvoZWbHm1lnM7sF2Bp4ujqvrxZPERERkQxZnZs7EJ1CSDYHU7aAfK+E60WE1s3GJQXu/oCZNSQsq9QSGA783t3HVueFlXiKiIiIZEgubn3p7nOoZLF4d58AWIryO4A71nhANSjxFBEREcmQHN25KDZKPEVEREQyJBdbPOOkyUUiIiIikhVq8RQRERHJkBydXBQbJZ4iIiIiGVLDLTNrHSWeIiIiIhmiFs/ylHiKiIiIZIgmF5WnxFNEREQkQ9TVXp4STxEREZEMUYtneVpOSURERESyQi2eIiIiIhmiFs/ylHiKiIiIZIjSzvJMmbhI7WBmDYCrgdvdfVnc8eQq3af06D6lT/cqPbpPAko8RWoNM2sGzAeau/uCuOPJVbpP6dF9Sp/uVXp0nwQ0uUhEREREskSJp4iIiIhkhRJPEREREckKJZ4itccy4KboX6mY7lN6dJ/Sp3uVHt0n0eQiEREREckOtXiKiIiISFYo8RQRERGRrFDiKSIiIiJZocRTRERERLJCiaeIiIiIZIUSTxERkTSY2dtm1jzh/Coza5FwvoGZjYwnutxhZnua2ZFJZaeZ2Xgzm2lmT0T7tksBUuIpkqfM7HQzOyLh/C4zm2dmn5vZpnHGlsvMrGHcMeQaJQppOwRIvA/XAC0TzusBW2U1otx0PdCl5MTMtgeeBt4H7gCOAq6OJzSJmxJPkfx1DbAEQuIAXAD0BmYD98cYV84xszpmdp2ZTQEWmVnHqPwWMzsr5vBygRKF9FgV5xJ0BQYnnJ8IfOXu57j7fUAv4IRYIpPYKfEUyV+bAGOir48BXnP3JwgJwr6xRZWb/gacQUjMlyeU/wicHUdAOUaJgqxL6wMzEs73B95JOP+G8PtLCpAST5H8tQjYIPr6YGBQ9PVSoFEsEeWu04Bz3b0vsCqhfDiwdTwh5RQlCunx6Eguk/JmAJsDmFl9YGfgy4TrTYEVMcQlOaBe3AGIyFobBDxlZsOALYG3o/IuwIS4gspRG1HWOpyoDlCU5VhyUUmiMDkhUbgh4boShcCAZ82sZK/xhsBjZlYcnWscbPA2cIeZXUnojVkMfJpwfQdgbByBSfyUeIrkrwuAvxNaov7g7r9F5bsAL8cWVW4aSRh+MDGp/HhgWPbDyTlKFNLzXNL5iynqPJ+NQHLcdcDrwMeEnpnT3T1xiEsP4L04ApP4mbt6CUSkdjOz7oSk4XbCRJobCLOPTwOOdPdBlTy81jOzVoREYR/KEoUBCdcHA1+6+7UxhSh5KFp6apG7r0oqbxmVL0/9SKnNlHiK5DEz2xc4D+gI/NHdp5jZqcB4d/9fvNHlluheXQ/sCDQBhgI3u7taXiJKFNJnZkYYY+0JvQ0iUgUlniJ5ysz+ALwA9AVOBbZ193FmdiFwuLsfHmuAIrWQmbUD7gKOJox9BVgADACudvcZFT22UETjzlMlF/OBUcAD7v5TdqOSXKHEUyRPRb/c73f3581sIbBjlHjuBLzj7u1iDlHyhBKF9JhZM+A7Qot5X+BnwoSjbYGTgLnAzu6+KLYgc4CZ3VDBpRaEiWt7AN3c/bPsRSW5QpOLRPLXVsAnKcrnE37BS8TMVlPJsjfuXjeL4eSiNyooL0kUvjMzJQpwEWE5ri7uPivxgpn9HfiMsObpbTHEljPc/abKrpvZrcDNwIHZiUhyiRJPkfw1HejMmksn7QOMy3o0ue3YpPMiYCfgdMovG1SQlCik7QjgtuSkE8DdZ5rZ7cA5FHjimYaXCPdJCpAST5H89STwoJn1ILTmbRhtnXkPcEuskeUYd/93iuL+ZjYC+BNhe0ipmBKFYEvg80quf074+ZPKrUIb2BQsJZ4i+esOwi/vwUBjQrf7MuAed384zsDyyJfAE3EHkQeUKATNgHmVXJ8X1ZHKHUdYW1cKkBJPkTzlYWbgrWZ2N6HLvQkwstAnNqTLzBoRxuNNiTuWPKBEITBgdSXXPapT0MysVwWXmhM2uDgCOCx7EUkuUeIpkv86EHYv+sTdl5iZuZarKMfM5lJ+cpERlsJZDPw5lqByiBKFtBkwyswq+vkq+KQzckkF5QuAX4D93P2LLMYjOUSJp0ieMrMNgFeBAwhJ1RaESUVPm9lcd78szvhyzMVJ56uBWcBX7j43hnhyjRKF9JwZdwD5wN03jzsGyV1ax1MkT5nZ80Ab4GzgJ8rW8TwEuM/du8QaoIgUJDMbB+yqHZ0kFbV4iuSvg4FD3P3XsHtfqdHApvGElLvMrAWwGyFZLzdRxt2fjyWoHKFEQdaxzYBCXxtXKqDEUyR/rUcYo5isJWF2u0TM7CjCTjNNCN3HiV09DhR04okShbSkGCuckru3zEI4InlJiadI/voUOA24Ljp3M6sD9AY+jC2q3HQv8AxwjbunStZF0pE8VlgqdoiZza+sgru/ma1gJHdojKdInjKz7QhreA4FugFvAl0ILZ57u/vYGMPLKWZWDGzv7trRKYVoS9HTCdutVkiJgqQj+n6qimur2sKkxFMkj5lZc+BCYEdCN/JQ4B/uPi3WwHKMmb0OvOLur8YdSy5SorD2zKwhYfer9YBB7j465pBiF30/tXP3mXHHIrlHiaeI1HpmdhZwPdAH+AFYkXi90FvylCikx8zuA4rcvWd0Xh/4itDTsJgwfO33hb70lJmtAtrr+0lSUeIpkqfMbAJh3GIfd58cczg5rYoWvYJvyVOikB4z+5EwTvjN6PxMwvjhnYBJhJ/HNu5+RHxRxk8fZKQy2ntXJH89QNjKcLyZDTKzE82sQdxB5SJ3r1PJUdBJZ0Q77qSnA+W3Dj0Y6O/uE6Pdwh4kJKGF7jlgSdxBSG5S4imSp9z9AXfvSlib8ifgYWCamT1iZjvHG13uisbkSXlKFNKzmvJJ+h7Alwnn84D1sxpRbjoXWJ5YYGZtzewGM7vLzPaJKS7JAUo8RfKcuw91917AhsBNhJ2MvjGz78yshyWtLl+IzKyumV1nZlOARWbWMSq/JRr/WeguAszMmlV2xB1kDvgJOArAzLoQWkATly7bFJgRQ1y55gngoZITM2sKfANcABwCfGhmh8cUm8RMiadInjOzIjM7gbCc0r3AEELy+RpwG2Hh9EJ3LXAGYY3TxJaYHwn3qtDNA+ZWcpRcL3R3Abeb2WDCUmZvu/v4hOuHA1/HEllu2Zvw+6fEaYQNCrZw9x2B+4Ar4ghM4qcF5EXyVNSdfiZwEqEL8HngEnf/OaHOAEJLQ6E7DTjX3Qeb2WMJ5cOBrWOKKZccEHcA+cDdB0QtdUcC7xGGtyRaDDya9cByz0aErXtLHAi85u4l68Q+R/jdJQVIiadI/voGGAT8BXjD3VekqDMeeCWrUeWmjYAxKcrrAEVZjiXnuPvHcceQL9y9pLUz1bWbshxOrloKNEo434PyLZxLCesOSwFS4imSvzq6+8TKKrh7MWpZgDATeV8g+X4dDwzLfji5Jd3xm+6+INOxSK3wHXAqcLWZ7Qu0BT5IuN4JmBpHYBI/JZ4ieaok6TSzXYBtouKR7j40vqhy1s3Ac2a2EaGV8zgz24rQBX9krJHlhnlAZYs6W3RdS09JOm4G3onGnrcHnk3aTe1Y4LNYIpPYaQF5kTxlZm2AfsD+hMQBoAVhlu2J7j4rrthyUdTycj3ltxe92d3fizWwHGBm+yeeAm8TJl1NSaynLnlJl5ltQ1jndDrwL3dfnXDtXOBrd/8urvgkPko8RfKUmfUDOgKnuftPUdm2hIH7Y9z9pDjjk/xlZguBHd19XNyxiEjtouWURPLXocBfS5JOAHcfSVgr77DYospBZvaUmf0u7jik9orWOv2LmQ2JO5ZcYWZ/NLPXzezH6HjdzI6POy6JlxJPkfxVB0g1k30F+tlO1hoYaGaTzexuM+sad0BSO5jZAWb2AjANuA74KuaQYmdmdaIemX7AtoQVJcYAXYB+ZvaKNrYoXPrjJJK/PgAeNLMNSwqiyTP3U8FyL4XK3bsTJjncAuwKfGtmI8zsGjPbLM7YcpjGYVXAzDYys2vNbAzwL+BkoAewkbtfEG908TCzLmZWMmH5IuAg4Gh339rdj4mOrQgTi34f1ZECpDGeInnKzDYh7FbUBZgcFW9C2I3naHf/Na7Ycp2ZbUxYeL8HYTeVgl7hw8xeTyo6ivDBpjix0N2Py1pQOcjM/gCcBewHvAO8GP1bTBgTOzLG8GKVOC7YzL4HHnD3ZyqoexZwkbvvkNUgJScU9C9bkXzm7pOj3YsOomz3nZ/c/f0Yw8p5ZlYE/B+wO7AZ2lsbYH7S+YuxRJH7+gF3An9y94Ulheo1BkKXeskqCFsAlf0eeh94JOMRSU5S4imSxzx0WQyKDqmEmR1A6BL9A2GY0euENTw/qOxxhcDdtclAep4mTN77XTSus5+7aw/74BTgMcLSbksIS7tNqqBuM8LuRVKA1NUukkfMrFe6dd39oUzGkk/MbArQEhgI9AXecvdl8UaVX8ysjbvPjDuOuJlZI+AEwjCN3YF3gSOAru7+Y5yxxcnMPgNOcPcpZvZfYJK7/6WCuo8BHdz98KwGKTlBiadIHjGz8WlWdXfvmNFg8oiZnUNYxHpelZULkJktBjYt2XQgShzOLtltxszaAlPdXTsXJTCzLQhb0p5O2JTgv0B/d08eM1tQzGwv4CPgDeAe4GfCxgTbAJcB3YED3F27FxUgJZ4iUjDMrDNhn+hP3H2JmZnrlyBmthpoV9KimbyAfJR4TnN3rYSSgpnVIbR6ngUc5u4NYg4pdmZ2LPAEoach0VzgPHd/LftRSS5Q4ilSC5SsiackKjUz2wB4FTiAsEzQFtHs22eAue5+WawBxizNxFMtnmnQkIQyZtYYOIQw2QhgFPCeuy+OLyqJmyYXieSxaFmSS4h+sZvZaMIyJk/FGljuuZ+wsH4H4KeE8n7AfYTuP5FKmdl9aVRbaWbTgcHuPjzTMeWyKMEcEHcckluUeIrkKTO7GbgUeBj4IireE7jfzDq4+/WxBZd7DgYOcfdfk5a+GQ1sGk9IOcUpv2B88rkEO6VRpw7QBrjbzHq6+6MZjiknRYvJX0JYL3fLqHgU8BLwoLun2nVNCoC62kXylJnNAnq5+8tJ5ScBD7t7q3giyz1R1/HO7j46aaHr/wPedfcNYg4xVlFX+3zKks0WwAJgdUkVoJm62tNnZqcD17t7p7hjybZo5v8gwgfh9ynrZdiGsO7wZ8DB7q4llQqQWjxF8lcRMCRF+bfoZzvZp8BphL20ATyaENIb+DC2qHKH1vFc994G0l7+LN+Z2eHAh+6+BLiKsIvaTu7+fVK9HQk7rl0F3JjtOCV+avEUyVNm9jCwwt0vTSq/B2hUqHtGp2JmXQgLxQ8FulG21WhLYG93HxtjeHknalV/092Lq6wsBSGpJ+EX4JqKZq6b2R+BW919y1TXpXZT4imSp6LE8zTCPu1fRsW7EybQPE+YTANAcnJaSKItMgcCVwO/B3YkrLk4FPhHyVqVkj4zW0BYMH1c3LFI7jGzpYSVIyZXcH0TYLS7N8xuZJIL1B0nkr+2IyRPENamBJgdHdsl1CvoT5fuvsLMdiAsm3Rr3PHUEtqcXMoxs0cJY1pnE8YHtyF8KE6lHbCwgmtSyynxFMlT7n5A3DHkkRcJi3tfFXcgIrVUC8KMfgjjpq8B/lBB3avQ2OqCpcRTRApBPaCHmR1EmHxVbmxiIQ9FkOozs11JsUyQu6ea7FcQ3P3khNObgK/M7EvCOrmJW2ZeAmwL7JH1ICUnaIynSJ4ys4ZAT8JuPG0oa20AwN13jiOuXGRmlbWuuLt3y1owtUDyzkaFxMzuAi4HFgEl778T0Bi4x92vjCu2XGJmewBPE5LNkkTDCEnoWe7+RUWPldpNLZ4i+etpwsLo/YGvKfCxnJXRsARZF6K1OXsSlkl6vGQR9GgC21+AO81shLs/H2OYOcHdvwS6mFlXElqG3f27GMOSHKAWT5E8ZWbzgcPd/bO4Y5Haz8zMoz8YZvYjcFhFs5ZrKzP7GnjZ3e+v4PqlwInuvlt2I8stZjYO2NXdf4s7Fsk9daquIiI5agqaGSrrkJldUUF5XcJWhwC4+3aFlnRGugD/ruT6G1GdQrcZoF2uJCUlniL56zJC1572Gpd15QozOyuxIEo6XwG6xhNSTlkF1K/kelFUR0QqoDGeIvlrCNAQGGdmi0lYMB7A3VvGEpXksyOA98xsvrv3N7N6wKvA1oRJbIVuKHAKZVuvJjuVsrV1C90h0XCgCrn7m9kKRnKHEk+R/PUysBFhvbwZaHKR1JC7f2NmfwDeMLPlhLVPOwMHuPuMeKPLCfcQ7k0D4N6Se2Jm7Qg9EBcDx8YYXy55rorrjrrjC5ImF4nkqaiVc093Hx53LFK7mNkxwL+An4Bu0W40AphZT0ICWg8oadFrDqwEerv7g3HFlivMbDXQzt1nxh2L5B61eIrkr5+BRnEHIfnNzF6v4NIsYB7whFnYIdPdj8tWXLnK3R82swHAH4EtouJRwGsFOuEqFbVoSYXU4imSp8zsYOAG4FrgB9Yc47kgjrgkv5hZn3TruvuZmYxFage1eEpllHiK5Knol3uJxB9kI+zGo/FTIuuQmX0CHO3u86Lzo4FB7r4k3shyS/Rhppe7a7k3WYMST5E8ZWb7V3bd3T/OViwihSC5Jc/MFgBdC3HrUJG1pTGeInnK3T82s32B8wh7RR/v7lPM7FRgfLzRSb4ys+OBE4AOJK1Z6e47xxJU7rK4AxDJN1pAXiRPRcvevAssAXYCGkSXmhOWWBKpFjPrBfQhLM+1E/A18BvQEXgnxtBEpJZQV7tInjKzYcD97v68mS0EdnT3cWa2E/COu7eLOUTJM2b2M3CTu7+c9D11M9DS3S+MOcRYRV3tp1O2jNLLhLU7y61xqoXRRSqmxFMkT0XreG7r7hOSkoSOwEh3bxhziJJnou+pbdx9opnNBH7v7sPNbAvgS3ffIOYQY5U0oa8iBT+xz8z6A08B77qSDEmirnaR/DWdsKtMsn0ATXaQtTEdKNlqdRKwR/T15mg8I+5eJ42joJPOyPrAf4FJZnZz9GFYBFDiKZLPngQeNLPdCcspbWhmpxB2VflnrJFJvvoAODr6ug9wv5kNAvoBA2KLSvKKux9IGBf8NPBnYLSZfWBmJ0fbjUoBU1e7SJ6ysJ3MNcDVQOOoeBlwj7tfF1tgkrfMrA5Qx91XRucnAnsBo4HH3X15nPHFzcz2S6eeu3+S6VjyiZl1A3oQ9rFfRhgb+4y7fxtrYBILJZ4iec7M6hO63JsQxnYuijkkyVNm1gGYnDwuL/qQs4m7T4onstxQxRjPknvm7q6lClMws6bAycBtQHPdp8Kk/+kieS5qhRoZdxxSK4wH2gPJWx22jK4V+vjF9SsobwxcBPRC46tTMrPNgTOioznwfpzxSHyUeIqISAmj/ParJZoAS7McS85x9/mJ59HQhB7ADcBq4ALguRhCy0lm1hA4nnCP9gMmE8Z99nH3yXHGJvFR4ikiUuDM7L7oSwduiZZVKlEX2B34LuuB5TAzO47QZdwauB142N2XxRtVbjCz3QjJ5p+AhoSJaYcCg7W8kijxFBGRnaJ/DdgeSJxEtBwYTlgtoeCZ2f7AnYT79CBwZ3JLqPAl4XvmOqCvu8+NOR7JIZpcJCIiAJhZH+Aid18Qdyy5yMzeBg4CngFudPfpMYeUk8xsZ3cfGncckpuUeIqIiKQhmtW+Eigm9VhYANy9ZUXXCoGZ9SYMPVgSne8NDCkZihDNbr/T3f8aY5gSEyWeIiIClE4G6QkcALQhaZMRd985jrhyhZmdnk49dy/oCUZmtgpo7+4zo/MFQFd3HxedtwWmapenwqQxniIiUuJp4GCgP/A1lbTqFaJCTyirIXl71YLfblXKKPEUEZESRwKHu/tncQciIrWTEk8RESkxBVgYdxC5yszmkkYrcKGP8RSpjBJPEREpcRlwp5md7+4T4w4mB10cdwB55GwzK9m+tx5whpnNjs6bxhST5ABNLhIREQDMrDXwKmGXmcXAisTrasmrHjM7CXjT3YvjjiWbzGwC6bUMb575aCTXKPEUEREAzOx9oANhktEMkpIHTa6pnuTZ3CKirnYRESmzF7Cnuw+PO5BaQrO5UzCzjYHr3f3cuGOR7KtTdRURESkQPwON4g5Car0NgLPiDkLiocRTRERKXAXca2a/M7MNzKxZ4hF3cCKS/9TVLiIiJQZG/35A+fGdFp1rpxkRqRElniIiUuKAuAMQkdpNiaeIiADg7h+b2b7AeUAn4Hh3n2JmpwLj440uP5iZedlyMRNJWpKqEJjZ61VUaZGVQCQnaYyniIgAYGZ/AN4FlgA7AQ2iS82Ba+KKK9eY2RUVlNcFXio5d/ft3H1y1gLLHQuA+ZUcE4HnY4tOYqV1PEVEBAAzGwbc7+7Pm9lCYEd3H2dmOwHvuHu7mEPMCWY2E7ja3Z9OKKsLvAJs5+7bxBacSI5TV7uIiJTYCvgkRfl81D2a6AjgPTOb7+79zaweYcenrdE4WcxsFdDe3WfGHYvkHiWeIiJSYjrQGZiQVL4PoN13Iu7+TTQs4Q0zW05Yk7IzcIC7z4g3upyghfOlQhrjKSIiJZ4EHjSz3QnLJ21oZqcA9wD/jDWyHOPuHwCnAa8BmwP7K+kUqZpaPEVEpMQdhAaJwUBjQrf7MuAed384zsDiVslM7VnAPOAJs9DQ5+7HZSuuHHa2mS2qrIK7P5StYCR3aHKRiIiUY2b1CV3HTYCR7l5pAlEIzKxPunXd/cxMxpLrzGw18CuwqpJq7u4dsxSS5BAlniIiIrLORIlnO00uklQ0xlNERETWJbVoSYU0xlNERKSazOx44ASgA1A/8Zq77xxLULlDs9qlQmrxFBERqQYz6wX0AWYQdnj6GvgN6Ai8E2NoueImoODHBUtqGuMpIiJSDWb2M3CTu7+ctMPTzUBLd78w5hBzgpntCpwEbBkVjQJecvch8UUlcVOLp4iISPV0AD6Pvl4CNI2+foGQaBU8M7sL+Ao4G9g4Os4BvjKzO+OMTeKlxFNERKR6pgMto68nAXtEX29OgY5vNLOmCV+fDvQEegEbuHtXd+9KuGeXAL3M7LR4IpW4KfEUERGpng+Ao6Ov+wD3m9kgoB8wILao4jXFzErW5bwAuMbdH3H3FSUV3H1FtGj8tYCGIxQojfEUERGpBjOrA9Rx95XR+YnAXsBo4HF3Xx5nfHEws32Ab9x9mZkVA9u7+7gK6nYEfnD39bIapOQELackIiJSPRsDk0tO3P0V4BULe2ZuQuh+LzSbAMMIW6yuImmJqSRFVL6rkdRi6moXERGpnvFA6xTlLaNrheguoFX09VDglErqnhrVkQKkFk8REZHqMVLvztMEWJrlWHKCu2+ScHoP8IaZNQDudfcZAGbWDrgMuBg4NvtRSi7QGE8Rkf9v7+5CNavqOI5/f47o+JLKSCZaSmKYvZlzM1lKjYSBkZVmJOKVhEXZXIgRFkRFoDD5ghdiYgNZTeWYXQQyplaSCiaUBjZpjKUITu/HkTFH89/Fs63j4czkI8/ea8883w8Ms87a+8CPuZk/a+3/WtIrkOTKbrgOuJ8mx+gAAAc/SURBVAHYsejxCmAN8O+qes/Q2cYmycVMCtB9gYVu+lDgBeDzVXVNq2xqy8JTkqRXIMnPuuF7gfuAxU1EO4E/Auur6tGBo41SktcD5wJv6qYeAW6pqid2/Vva21l4SpI0hSQbgHVV9XTrLNKexsJTkiTNXJJzWf7KzE3tUqk1C09JkqaQZCWTm3nWAkew5ISYqlrdItdYdOecbmSyzf4IsKV7dCJwPHAzcF5ZgMwlu9olSZrOjcAZwCbgfpbvcJ8rSd4K/L47VH8d8H7grKr6yZL3zmJy29M64OrBg6o5VzwlSZpCkgXgzKq6p3WWsUiyHTipqrYmeQi4uqq+tYt3L2Tyjew7Bg2pUfAAeUmSpvMksL11iJF5C5Oufph0sd+xm3fv4H+d7pozFp6SJE3nEuCKJMe2DjIi5wOHdONngcN28+4hzOlB+7LwlCRpWg8AK4GtSbYn+fviP63DNfIh4KBufB/w6d28+5nuHc0hm4skSZrORuBo4DJgGzYXseS2pq8DP09yOJPbi7YwuWb0RCarxR9mciKA5pDNRZIkTSHJDuCUqnqwdZaxSvJR4JvAqiWP/gFcVFW3DJ9KY+CKpyRJ09kCHNA6xJhV1a1JNgMf4OVXZt5eVTt2/Zva27niKUnSFJKcAXwZ+CLwW+D5xc/n/SrNJHcBZ1fVP1tn0fhYeEqSNIUkL3bDpf+BBqiqWjFwpFHp/n2OrKo/t86i8XGrXZKk6dgYI71KrnhKkqSZ6VY8Twd2e7RUVT00TCKNiYWnJElTSnIacBFwHHBuVT2Z5ALgsar6Zdt0bXWFZzH59GCpl+bn/pOEeeVWuyRJU0hyDnAT8F1gNbB/9+hQJmd7ntko2pisAf7SOoTGxxVPSZKmkOTXwFVV9e0k24GTqmprkpOB26rqyMYRm7K5SLvjlZmSJE3nBODuZeYX2P0d5dLcs/CUJGk6TwHHLzN/KrB14Cxj9Atg5yt9Ocl5SQ76/29qb2DhKUnSdG4ArkmyhkmzzFFJzmdyL/l1TZONQFWtnfLw+OuB1/WVR+Nic5EkSdO5nMnCzZ3AgUy23Z8D1lfVtS2D7aGW637XXsrmIkmSXoUk+zHZcj8YeLiqnmkcaY+0uEGrdRb1zxVPSZJeharaCTzcOoe0J/EbT0mSJA3CwlOSJEmDsPCUJEmDSrK4oehPwPOtsmhYFp6SJGnmkly6i/kVwPde+rmq3lZVTwwWTE1ZeEqSpD5cmuTCxRNd0fl94J1tIqk1u9olSVIfPgjcnmShqjYl2Rf4IfBmYG3baGrFwlOSJM1cVf0qyTnAj5PsBC5kcu7p2qra1jadWvEAeUmS1JskHwFuBn4HnF5Vf20cSQ1ZeEqSpJlI8qNdPHoX8Afgv0VnVZ09SCiNilvtkiRpVhZ2Mb950BQaLVc8JUmSNAiPU5IkSdIg3GqXJEm9SPIx4OPAMcB+i59V1eomodSUK56SJGnmknwO2ABsA04G7gf+BhwH3NYwmhryG09JkjRzSbYAX6mqjUm2AydV1dYkXwVWVdVnG0dUA654SpKkPhwD3NuNnwVe041vAs5rkkjNWXhKkqQ+PAWs6saPMznLE+CNQJokUnMWnpIkqQ93AWd14w3AVUl+CvwAuLVZKjXlN56SJGnmkuwD7FNVL3Q/fwJ4N/AocH1V7WyZT21YeEqSpJlLcgzwRC0pNJIEeENVPd4mmVpyq12SJPXhMeC1y8yv6p5pDll4SpKkPgRYblv1YOBfA2fRSHhzkSRJmpkkV3bDAr6WZMeixyuANcBvBg+mUbDwlCRJs3Ry93eAtwOLm4h2Ag8C64cOpXGwuUiSJM1ckg3Auqp6unUWjYeFpyRJkgbhVrskSZq5JCuBi4G1wBEsaWiuqtUtcqktC09JktSHG4EzgE3A/Szf4a4541a7JEmauSQLwJlVdU/rLBoPz/GUJEl9eBLY3jqExsXCU5Ik9eES4Iokx7YOovHwG09JktSHB4CVwNbuEPnnFz+sqlVNUqkpC09JktSHjcDRwGXANmwuEjYXSZKkHnSrnKdU1YOts2g8/MZTkiT1YQtwQOsQGhcLT0mS1IcvAN9I8r4khyc5ZPGf1uHUhlvtkiRp5pK82A2XFhoBqqpWDBxJI2BzkSRJ6sPa1gE0Pq54SpIkaRB+4ylJknqR5LQk30lyb5Kju7kLkpzaOpvasPCUJEkzl+QcYDPwLLAa2L97dCiTsz01hyw8JUlSH74EfKqqPsnLby26h0khqjlk4SlJkvpwAnD3MvMLwGEDZ9FIWHhKkqQ+PAUcv8z8qcDWgbNoJCw8JUlSH24ArkmyhslZnkclOR9YD1zXNJma8RxPSZLUh8uZLHDdCRzIZNv9OWB9VV3bMpja8RxPSZLUmyT7MdlyPxh4uKqeaRxJDVl4SpIkaRB+4ylJkqRBWHhKkiRpEBaekiRJGoSFpyRJkgZh4SlJkqRBWHhKkiRpEBaekiRJGsR/ADS0ThHdDlSTAAAAAElFTkSuQmCC\n","text/plain":["
"]},"metadata":{"needs_background":"light"}}]},{"cell_type":"markdown","metadata":{"id":"Eh3Pt-TEVEpk"},"source":["## Jaotame andmed treening- ja testandmeteks\n","Treening- ja testandmeid on võimalik moodustada väga erinval moel. Sisuliselt tahame me jaotada oma andmestiku kaheks: 80% jätame treenimiseks ja 20% jätame testimiseks.\n","\n","Allolevas näites kasutame selle tegemiseks sklearn teegi funktsiooni `train_test_split`, mis loob meile 4 andmestiku ühe käiguga."]},{"cell_type":"code","metadata":{"id":"2PwJgT90VJy2","executionInfo":{"status":"ok","timestamp":1639408644857,"user_tz":-120,"elapsed":424,"user":{"displayName":"Kristjan Eljand","photoUrl":"https://lh3.googleusercontent.com/a-/AOh14Gip4UgEVFXL2Q-oKuIBr2JP5268uFbs3Bf7aNhj=s64","userId":"12801037868987527469"}}},"source":["from sklearn.model_selection import train_test_split\n","\n","# Teeme koopia oma andmestikust\n","ml_data = numeric_data.copy()\n","\n","# eemaldame müügitulu 'var' ehk prognoositava muutuja prognoosis kasutavatest muutujatest 'vars'\n","result = ml_data.pop('revenue')\n","variables = ml_data\n","\n","# Loome treening ja testandmestikud\n","train_variables, test_variables, train_result, test_result = train_test_split(variables, result, test_size=0.2, random_state=123)"],"execution_count":13,"outputs":[]},{"cell_type":"markdown","metadata":{"id":"GBfOgbVae9o4"},"source":["## Standardiseerime andmed\n","Hetkel on meie andmestikus nii, et andmete \"skaalad\" on erinevad. Paljud masinõppealgoritmid tahavad aga, et skaalad oleksid sarnased (N: et kõik muutujad oleks 0 ja 1 vahel)."]},{"cell_type":"code","metadata":{"id":"OtnaT7l4KLus","executionInfo":{"status":"ok","timestamp":1639408701352,"user_tz":-120,"elapsed":297,"user":{"displayName":"Kristjan Eljand","photoUrl":"https://lh3.googleusercontent.com/a-/AOh14Gip4UgEVFXL2Q-oKuIBr2JP5268uFbs3Bf7aNhj=s64","userId":"12801037868987527469"}}},"source":["from sklearn.preprocessing import MinMaxScaler\n","# Loome ka skaleeritud muutujad\n","train_variables_minmax = MinMaxScaler().fit_transform(train_variables)\n","test_variables_minmax = MinMaxScaler().fit_transform(test_variables)"],"execution_count":14,"outputs":[]},{"cell_type":"markdown","metadata":{"id":"KTPtFRmEUc5x"},"source":["# Prognoosimine"]},{"cell_type":"markdown","metadata":{"id":"dqsM5l_N3m1y"},"source":["## Prognoosimine lineaarse mudeliga\n","Lineaarne regressioonmudel on kõige lihtsam võimalik mudel ja annab meile lõpptulemuse kujul y = nx + my + ..., kus y on väärtus, mida ennustame (antud juhul müügitulu), x, y on muutujad (meie mudeli töötajate arv ja tegevusala) ning m,n on muutujate parameetrid.\n","\n","sklearn teegi hea omadus on, et valikus on küll palju erinevaid mudeleid, kuid nende treenimine käib alati *peaaegu* samamoodi: \n","1. impordime mudeli,\n","2. kasutame `fit(train_variables, train_result)` meetodit treenimiseks,\n","3. kasutame `predict(test_variables)` meetodit prognoosimiseks."]},{"cell_type":"code","metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"x4Bab_2vgsSs","executionInfo":{"status":"ok","timestamp":1639408803158,"user_tz":-120,"elapsed":275,"user":{"displayName":"Kristjan Eljand","photoUrl":"https://lh3.googleusercontent.com/a-/AOh14Gip4UgEVFXL2Q-oKuIBr2JP5268uFbs3Bf7aNhj=s64","userId":"12801037868987527469"}},"outputId":"9d58c997-285f-4145-e556-e82e455c3e24"},"source":["# Impordime lineaarse regressiooni mudeli\n","from sklearn.linear_model import LinearRegression\n","\n","# Treenime mudeli, kasutades treenimise ettenähtud andmeid\n","model = LinearRegression()\n","model.fit(X=train_variables, y=train_result)\n","\n","# Teeme prognoosi testandmete peal\n","linear_prediction = model.predict(X=test_variables)\n","linear_prediction"],"execution_count":15,"outputs":[{"output_type":"execute_result","data":{"text/plain":["array([ -25931.88302618, 15150399.35135626, -101267.14605191, ...,\n"," 411571.11630774, 73302.92730663, 266599.03530726])"]},"metadata":{},"execution_count":15}]},{"cell_type":"markdown","metadata":{"id":"lG8TYHBM87Ni"},"source":["### Meie mudel on lihtsalt üks matemaatiline valem\n","Kasutame mudeli meetodit `coef_` et printida välja muutujate parameetrite väärtused."]},{"cell_type":"code","metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"YXOBJ_TU9Lzl","executionInfo":{"status":"ok","timestamp":1639408827738,"user_tz":-120,"elapsed":285,"user":{"displayName":"Kristjan Eljand","photoUrl":"https://lh3.googleusercontent.com/a-/AOh14Gip4UgEVFXL2Q-oKuIBr2JP5268uFbs3Bf7aNhj=s64","userId":"12801037868987527469"}},"outputId":"5efb2d71-3d54-4308-c4e9-b94242aef6ea"},"source":["# Muutujate parameetrid\n","print(\"Muutujate parameetrid:\", [int(x) for x in model.coef_])\n","\n","# Vabaliige, mis ütleb, milline on müügitulu eeldatav väärtus, \n","# kui muutujate väärtused on nullid\n","print(\"Vabaliige:\", int(model.intercept_))"],"execution_count":16,"outputs":[{"output_type":"stream","name":"stdout","text":["Muutujate parameetrid: [48324, 24249, -51085, 26836]\n","Vabaliige: -98505\n"]}]},{"cell_type":"markdown","metadata":{"id":"hX7hmg8Z5rW4"},"source":["### Lisame prognoositud väärtused tegelikele väärtustele"]},{"cell_type":"code","metadata":{"colab":{"base_uri":"https://localhost:8080/","height":476},"id":"jbqdSS1_5yze","executionInfo":{"status":"ok","timestamp":1639408882760,"user_tz":-120,"elapsed":318,"user":{"displayName":"Kristjan Eljand","photoUrl":"https://lh3.googleusercontent.com/a-/AOh14Gip4UgEVFXL2Q-oKuIBr2JP5268uFbs3Bf7aNhj=s64","userId":"12801037868987527469"}},"outputId":"188b1c2c-0222-4813-eda2-34d3aa6949d6"},"source":["def make_evaluation_table(predictions):\n"," # Paneme ennustused Pandas formaati\n"," prediction_series = pd.Series(data=predictions, index=test_result.index, name=\"prediction\")\n","\n"," # Lisame prognoosiveeru\n"," evaluate_results = pd.concat([test_variables, test_result, prediction_series], axis=1)\n","\n"," # Lisame nimeveeru algsest andmestikust\n"," evaluate_results = pd.merge(raw_data['name'], evaluate_results, left_index=True, right_index=True)\n"," return evaluate_results\n","\n","linear_eval_table = make_evaluation_table(linear_prediction)\n","linear_eval_table"],"execution_count":17,"outputs":[{"output_type":"execute_result","data":{"text/html":["
\n","\n","\n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n","
nameemployeesemtak_EHITUSemtak_INFO JA SIDEemtak_TÖÖTLEV TÖÖSTUSrevenueprediction
36ESTIKO-PLASTAR, AS167.000115609277.07.998443e+06
45CE TEHNIKA OÜ2.00018647.02.497890e+04
86SAVEKATE, OÜ50.01003189996.02.341945e+06
91SKILINE, OÜ1.01005200.0-2.593188e+04
102ANNINET-V, OÜ7.000151856.02.665990e+05
........................
144394MITTETULUNDUSÜHING HIIUMAA KINO1.00108550.0-1.012671e+05
145438MTÜ NORDIC INSTITUTE FOR INTEROPERABILITY SOLU...4.0010286342.04.370493e+04
146740IURIDICUM, SIHTASUTUS6.001031961.01.403530e+05
146826KULTUURILEHT, SIHTASUTUS104.0010114214.04.876108e+06
147079EMAKEELE SIHTASUTUS6.001022225.01.403530e+05
\n","

3490 rows × 7 columns

\n","
"],"text/plain":[" name ... prediction\n","36 ESTIKO-PLASTAR, AS ... 7.998443e+06\n","45 CE TEHNIKA OÜ ... 2.497890e+04\n","86 SAVEKATE, OÜ ... 2.341945e+06\n","91 SKILINE, OÜ ... -2.593188e+04\n","102 ANNINET-V, OÜ ... 2.665990e+05\n","... ... ... ...\n","144394 MITTETULUNDUSÜHING HIIUMAA KINO ... -1.012671e+05\n","145438 MTÜ NORDIC INSTITUTE FOR INTEROPERABILITY SOLU... ... 4.370493e+04\n","146740 IURIDICUM, SIHTASUTUS ... 1.403530e+05\n","146826 KULTUURILEHT, SIHTASUTUS ... 4.876108e+06\n","147079 EMAKEELE SIHTASUTUS ... 1.403530e+05\n","\n","[3490 rows x 7 columns]"]},"metadata":{},"execution_count":17}]},{"cell_type":"markdown","metadata":{"id":"qUYAwasT-OGW"},"source":["### Visualiseerime prognoosi ja tegelikud andmed graafikul"]},{"cell_type":"code","metadata":{"id":"OSJ6xcqqjkyg","executionInfo":{"status":"ok","timestamp":1639408937220,"user_tz":-120,"elapsed":5986,"user":{"displayName":"Kristjan Eljand","photoUrl":"https://lh3.googleusercontent.com/a-/AOh14Gip4UgEVFXL2Q-oKuIBr2JP5268uFbs3Bf7aNhj=s64","userId":"12801037868987527469"}}},"source":["!pip install -q plotly\n","import plotly.express as px"],"execution_count":18,"outputs":[]},{"cell_type":"code","metadata":{"colab":{"base_uri":"https://localhost:8080/","height":542},"id":"YzUnzqf4jok_","executionInfo":{"status":"ok","timestamp":1639409007626,"user_tz":-120,"elapsed":1444,"user":{"displayName":"Kristjan Eljand","photoUrl":"https://lh3.googleusercontent.com/a-/AOh14Gip4UgEVFXL2Q-oKuIBr2JP5268uFbs3Bf7aNhj=s64","userId":"12801037868987527469"}},"outputId":"c2052bce-194c-4b7f-8815-646d4a954b95"},"source":["def plot_pred_and_actual(evaluation_table, model_name):\n"," plot_data = evaluation_table.sort_values(by=\"revenue\", ascending=False).iloc[1:120,]\n"," plot_data = plot_data[['name','revenue', 'prediction']]\n"," plot_data = plot_data.melt(id_vars='name', value_vars=['revenue', 'prediction'], var_name='type')\n","\n","\n"," fig = px.line(plot_data, \n"," y='value',\n"," color='type',\n"," title=f\"Prognoositud vs Tegelik müügitulu ({model_name})\")\n"," fig.show()\n","\n","plot_pred_and_actual(linear_eval_table, \"Lineaarne mudel\")"],"execution_count":19,"outputs":[{"output_type":"display_data","data":{"text/html":["\n","\n","\n","
\n"," \n"," \n"," \n","
\n"," \n","
\n","\n",""]},"metadata":{}}]},{"cell_type":"markdown","metadata":{"id":"i6buZJnr4Ubl"},"source":["### Tulemuste statistiline hindamine\n","Tulemuste statistiliseks hindamiseks kasutame kaht mõõdikut: \n","* keskmine absoluutviga\n","* R2 skoor, mis näitab, kui suure osa ennustatavast muutujast suudab meie prognoos ära kirjeldada."]},{"cell_type":"code","metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"hRZRe9qx4ZNn","executionInfo":{"status":"ok","timestamp":1639409096231,"user_tz":-120,"elapsed":308,"user":{"displayName":"Kristjan Eljand","photoUrl":"https://lh3.googleusercontent.com/a-/AOh14Gip4UgEVFXL2Q-oKuIBr2JP5268uFbs3Bf7aNhj=s64","userId":"12801037868987527469"}},"outputId":"d62890c0-359d-4f49-a025-37b1556a9d02"},"source":["from sklearn.metrics import mean_absolute_error, r2_score\n","\n","def result_stats_printer(test_result, prediction):\n"," # Arvutame keskmise absoluutvea\n"," mae = mean_absolute_error(test_result, prediction)\n"," print(f\"Mudeli keskmine absoluutviga on {mae:.0f} €\")\n","\n"," # Arvutame R2 statistiku\n"," r2 = r2_score(test_result, prediction)\n"," print(f\"Meie muutujad suudavad kirjeldada {r2*100:.0f}% müügitulu muutusest.\")\n","\n","result_stats_printer(test_result, linear_prediction)"],"execution_count":20,"outputs":[{"output_type":"stream","name":"stdout","text":["Mudeli keskmine absoluutviga on 359035 €\n","Meie muutujad suudavad kirjeldada 62% müügitulu muutusest.\n"]}]},{"cell_type":"markdown","metadata":{"id":"AXjHrtzj_u3W"},"source":["## Proovime ka otsustuspuu mudelit"]},{"cell_type":"code","metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"HhdMOHNIm8P9","executionInfo":{"status":"ok","timestamp":1639409148301,"user_tz":-120,"elapsed":311,"user":{"displayName":"Kristjan Eljand","photoUrl":"https://lh3.googleusercontent.com/a-/AOh14Gip4UgEVFXL2Q-oKuIBr2JP5268uFbs3Bf7aNhj=s64","userId":"12801037868987527469"}},"outputId":"38f0e653-c471-4517-cbb4-89bc3aa8e304"},"source":["from sklearn.tree import DecisionTreeRegressor\n","\n","# Treenime mudeli, kasutades treenimise ettenähtud andmeid\n","model = DecisionTreeRegressor(max_depth=5)\n","model.fit(X=train_variables, y=train_result)\n","\n","# Teeme prognoosi testandmete peal\n","tree_prediction = model.predict(X=test_variables)\n","\n","# Prindime tulemused, kasutades eelnevalt defineeritud funktsiooni\n","result_stats_printer(test_result, tree_prediction)\n"],"execution_count":21,"outputs":[{"output_type":"stream","name":"stdout","text":["Mudeli keskmine absoluutviga on 318467 €\n","Meie muutujad suudavad kirjeldada 73% müügitulu muutusest.\n"]}]},{"cell_type":"markdown","metadata":{"id":"eNifj6rO-05S"},"source":["### Visualiseerime tulemused\n"]},{"cell_type":"code","metadata":{"colab":{"base_uri":"https://localhost:8080/","height":542},"id":"cCWMpc7W_JGj","executionInfo":{"status":"ok","timestamp":1639409169144,"user_tz":-120,"elapsed":753,"user":{"displayName":"Kristjan Eljand","photoUrl":"https://lh3.googleusercontent.com/a-/AOh14Gip4UgEVFXL2Q-oKuIBr2JP5268uFbs3Bf7aNhj=s64","userId":"12801037868987527469"}},"outputId":"8044c414-db4b-4460-827f-316a2b734b9a"},"source":["tree_eval_table = make_evaluation_table(tree_prediction)\n","plot_pred_and_actual(tree_eval_table, \"Otsustuspuu\")"],"execution_count":22,"outputs":[{"output_type":"display_data","data":{"text/html":["\n","\n","\n","
\n"," \n"," \n"," \n","
\n"," \n","
\n","\n",""]},"metadata":{}}]},{"cell_type":"markdown","metadata":{"id":"wPfVgCMZDcmM"},"source":["### Vaatame otsustuspuu loogikat\n","Otsustuspuu on sisuliselt what-if loogika kogum. Me saame selle loogika välja printida."]},{"cell_type":"code","metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"ydAzAM-2s6Zv","executionInfo":{"status":"ok","timestamp":1639409220585,"user_tz":-120,"elapsed":382,"user":{"displayName":"Kristjan Eljand","photoUrl":"https://lh3.googleusercontent.com/a-/AOh14Gip4UgEVFXL2Q-oKuIBr2JP5268uFbs3Bf7aNhj=s64","userId":"12801037868987527469"}},"outputId":"b62c4e27-7008-4f9a-fb16-f729bbf76a80"},"source":["# Impordime otsustuspuud teksti eraldamise tööriista\n","from sklearn.tree import export_text\n","# Muutujate nimed\n","variables = train_variables.columns.to_list()\n","# Prindime välja mudeli loogika, koos muutujate nimedega\n","tree_logic = export_text(model, feature_names=variables)\n","print(tree_logic)"],"execution_count":23,"outputs":[{"output_type":"stream","name":"stdout","text":["|--- employees <= 114.50\n","| |--- employees <= 40.50\n","| | |--- employees <= 15.50\n","| | | |--- employees <= 6.50\n","| | | | |--- employees <= 3.50\n","| | | | | |--- value: [47483.82]\n","| | | | |--- employees > 3.50\n","| | | | | |--- value: [119406.45]\n","| | | |--- employees > 6.50\n","| | | | |--- employees <= 10.50\n","| | | | | |--- value: [251351.19]\n","| | | | |--- employees > 10.50\n","| | | | | |--- value: [355896.04]\n","| | |--- employees > 15.50\n","| | | |--- employees <= 30.50\n","| | | | |--- employees <= 18.50\n","| | | | | |--- value: [485332.95]\n","| | | | |--- employees > 18.50\n","| | | | | |--- value: [770014.84]\n","| | | |--- employees > 30.50\n","| | | | |--- employees <= 35.50\n","| | | | | |--- value: [1105638.14]\n","| | | | |--- employees > 35.50\n","| | | | | |--- value: [1366717.54]\n","| |--- employees > 40.50\n","| | |--- employees <= 73.50\n","| | | |--- emtak_INFO JA SIDE <= 0.50\n","| | | | |--- employees <= 53.50\n","| | | | | |--- value: [2106462.32]\n","| | | | |--- employees > 53.50\n","| | | | | |--- value: [3110085.47]\n","| | | |--- emtak_INFO JA SIDE > 0.50\n","| | | | |--- employees <= 46.50\n","| | | | | |--- value: [472340.86]\n","| | | | |--- employees > 46.50\n","| | | | | |--- value: [1536297.26]\n","| | |--- employees > 73.50\n","| | | |--- emtak_INFO JA SIDE <= 0.50\n","| | | | |--- employees <= 111.50\n","| | | | | |--- value: [3896643.11]\n","| | | | |--- employees > 111.50\n","| | | | | |--- value: [8113731.00]\n","| | | |--- emtak_INFO JA SIDE > 0.50\n","| | | | |--- employees <= 87.50\n","| | | | | |--- value: [1685322.57]\n","| | | | |--- employees > 87.50\n","| | | | | |--- value: [3295573.44]\n","|--- employees > 114.50\n","| |--- employees <= 710.00\n","| | |--- employees <= 344.00\n","| | | |--- emtak_INFO JA SIDE <= 0.50\n","| | | | |--- employees <= 247.00\n","| | | | | |--- value: [10022983.97]\n","| | | | |--- employees > 247.00\n","| | | | | |--- value: [16932539.92]\n","| | | |--- emtak_INFO JA SIDE > 0.50\n","| | | | |--- employees <= 195.50\n","| | | | | |--- value: [2491083.73]\n","| | | | |--- employees > 195.50\n","| | | | | |--- value: [6870889.71]\n","| | |--- employees > 344.00\n","| | | |--- emtak_TÖÖTLEV TÖÖSTUS <= 0.50\n","| | | | |--- employees <= 613.50\n","| | | | | |--- value: [12991447.38]\n","| | | | |--- employees > 613.50\n","| | | | | |--- value: [44102714.00]\n","| | | |--- emtak_TÖÖTLEV TÖÖSTUS > 0.50\n","| | | | |--- employees <= 362.50\n","| | | | | |--- value: [31875983.50]\n","| | | | |--- employees > 362.50\n","| | | | | |--- value: [23681809.73]\n","| |--- employees > 710.00\n","| | |--- employees <= 1412.00\n","| | | |--- employees <= 1188.50\n","| | | | |--- employees <= 763.00\n","| | | | | |--- value: [73607428.00]\n","| | | | |--- employees > 763.00\n","| | | | | |--- value: [48086013.67]\n","| | | |--- employees > 1188.50\n","| | | | |--- value: [2953290.00]\n","| | |--- employees > 1412.00\n","| | | |--- value: [114027434.00]\n","\n"]}]},{"cell_type":"markdown","metadata":{"id":"UU8cQx5wDUBZ"},"source":["### Joonistame otsustuspuu välja"]},{"cell_type":"code","metadata":{"colab":{"base_uri":"https://localhost:8080/","height":587},"id":"axRi9FI1rkfQ","executionInfo":{"status":"ok","timestamp":1639409258247,"user_tz":-120,"elapsed":357,"user":{"displayName":"Kristjan Eljand","photoUrl":"https://lh3.googleusercontent.com/a-/AOh14Gip4UgEVFXL2Q-oKuIBr2JP5268uFbs3Bf7aNhj=s64","userId":"12801037868987527469"}},"outputId":"43b28223-778d-4d15-9349-5c7dbebd201b"},"source":["# Impordime tööriistad puu visualiseerimiseks\n","from sklearn import tree\n","import graphviz\n","\n","# Loome puu\n","dot_data = tree.export_graphviz(model, \n"," feature_names=train_variables.columns,\n"," max_depth=3, \n"," filled=True, \n"," rounded=True,\n"," impurity=False,\n"," leaves_parallel=True, \n"," special_characters=True) \n","# Prindime puu välja\n","graph = graphviz.Source(dot_data) \n","graph "],"execution_count":24,"outputs":[{"output_type":"execute_result","data":{"text/plain":[""],"image/svg+xml":"\n\n\n\n\n\nTree\n\n\n\n0\n\nemployees ≤ 114.5\nsamples = 13960\nvalue = 405036.538\n\n\n\n1\n\nemployees ≤ 40.5\nsamples = 13779\nvalue = 232100.449\n\n\n\n0->1\n\n\nTrue\n\n\n\n32\n\nemployees ≤ 710.0\nsamples = 181\nvalue = 13570154.646\n\n\n\n0->32\n\n\nFalse\n\n\n\n2\n\nemployees ≤ 15.5\nsamples = 13361\nvalue = 150573.982\n\n\n\n1->2\n\n\n\n\n\n17\n\nemployees ≤ 73.5\nsamples = 418\nvalue = 2838021.778\n\n\n\n1->17\n\n\n\n\n\n3\n\nemployees ≤ 6.5\nsamples = 12347\nvalue = 98033.169\n\n\n\n2->3\n\n\n\n\n\n10\n\nemployees ≤ 30.5\nsamples = 1014\nvalue = 790338.694\n\n\n\n2->10\n\n\n\n\n\n4\n\n(...)\n\n\n\n3->4\n\n\n\n\n\n7\n\n(...)\n\n\n\n3->7\n\n\n\n\n\n11\n\n(...)\n\n\n\n10->11\n\n\n\n\n\n14\n\n(...)\n\n\n\n10->14\n\n\n\n\n\n18\n\nemtak_INFO JA SIDE ≤ 0.5\nsamples = 281\nvalue = 2366185.381\n\n\n\n17->18\n\n\n\n\n\n25\n\nemtak_INFO JA SIDE ≤ 0.5\nsamples = 137\nvalue = 3805803.0\n\n\n\n17->25\n\n\n\n\n\n19\n\n(...)\n\n\n\n18->19\n\n\n\n\n\n22\n\n(...)\n\n\n\n18->22\n\n\n\n\n\n26\n\n(...)\n\n\n\n25->26\n\n\n\n\n\n29\n\n(...)\n\n\n\n25->29\n\n\n\n\n\n33\n\nemployees ≤ 344.0\nsamples = 175\nvalue = 12122010.274\n\n\n\n32->33\n\n\n\n\n\n48\n\nemployees ≤ 1412.0\nsamples = 6\nvalue = 55807698.833\n\n\n\n32->48\n\n\n\n\n\n34\n\nemtak_INFO JA SIDE ≤ 0.5\nsamples = 149\nvalue = 10431801.289\n\n\n\n33->34\n\n\n\n\n\n41\n\nemtak_TÖÖTLEV TÖÖSTUS ≤ 0.5\nsamples = 26\nvalue = 21808207.923\n\n\n\n33->41\n\n\n\n\n\n35\n\n(...)\n\n\n\n34->35\n\n\n\n\n\n38\n\n(...)\n\n\n\n34->38\n\n\n\n\n\n42\n\n(...)\n\n\n\n41->42\n\n\n\n\n\n45\n\n(...)\n\n\n\n41->45\n\n\n\n\n\n49\n\nemployees ≤ 1188.5\nsamples = 5\nvalue = 44163751.8\n\n\n\n48->49\n\n\n\n\n\n54\n\nsamples = 1\nvalue = 114027434.0\n\n\n\n48->54\n\n\n\n\n\n50\n\n(...)\n\n\n\n49->50\n\n\n\n\n\n53\n\n(...)\n\n\n\n49->53\n\n\n\n\n\n"},"metadata":{},"execution_count":24}]},{"cell_type":"markdown","metadata":{"id":"pXrw6HSGRTZc"},"source":["### Hindame muutujate olulisust"]},{"cell_type":"code","metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"QwD1IGmiRfiw","executionInfo":{"status":"ok","timestamp":1639409325484,"user_tz":-120,"elapsed":315,"user":{"displayName":"Kristjan Eljand","photoUrl":"https://lh3.googleusercontent.com/a-/AOh14Gip4UgEVFXL2Q-oKuIBr2JP5268uFbs3Bf7aNhj=s64","userId":"12801037868987527469"}},"outputId":"fe0876ca-3181-43b6-de6f-abf341f1cbd5"},"source":["# Muutujate olulisust näeme:\n","model.feature_importances_"],"execution_count":25,"outputs":[{"output_type":"execute_result","data":{"text/plain":["array([0.97866991, 0. , 0.01468701, 0.00664308])"]},"metadata":{},"execution_count":25}]},{"cell_type":"code","metadata":{"colab":{"base_uri":"https://localhost:8080/","height":175},"id":"PFUB7HbWSPSZ","executionInfo":{"status":"ok","timestamp":1639409333353,"user_tz":-120,"elapsed":308,"user":{"displayName":"Kristjan Eljand","photoUrl":"https://lh3.googleusercontent.com/a-/AOh14Gip4UgEVFXL2Q-oKuIBr2JP5268uFbs3Bf7aNhj=s64","userId":"12801037868987527469"}},"outputId":"aaa39b10-72e2-4680-d661-8ca53697872d"},"source":["# Esitame muutujate olulisuse loetavamal kujul\n","pd.DataFrame({\n"," \"Muutuja\": test_variables.columns,\n"," \"Olulisus\": model.feature_importances_\n"," }).round(2)"],"execution_count":26,"outputs":[{"output_type":"execute_result","data":{"text/html":["
\n","\n","\n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n","
MuutujaOlulisus
0employees0.98
1emtak_EHITUS0.00
2emtak_INFO JA SIDE0.01
3emtak_TÖÖTLEV TÖÖSTUS0.01
\n","
"],"text/plain":[" Muutuja Olulisus\n","0 employees 0.98\n","1 emtak_EHITUS 0.00\n","2 emtak_INFO JA SIDE 0.01\n","3 emtak_TÖÖTLEV TÖÖSTUS 0.01"]},"metadata":{},"execution_count":26}]},{"cell_type":"markdown","metadata":{"id":"G9q0ZGphWcmw"},"source":["# Anomaaliate tuvastamine\n","Kasutades `LocalOutlierFactor` mudelit, leiame read, mis tunduvad teistest oluliselt erinevat.\n","\n","[Link allikale](https://scikit-learn.org/stable/auto_examples/neighbors/plot_lof_outlier_detection.html?highlight=anomaly%20detection)\n"," "]},{"cell_type":"code","metadata":{"colab":{"base_uri":"https://localhost:8080/","height":423},"id":"8flYVYpczMXd","executionInfo":{"status":"ok","timestamp":1639410238739,"user_tz":-120,"elapsed":274,"user":{"displayName":"Kristjan Eljand","photoUrl":"https://lh3.googleusercontent.com/a-/AOh14Gip4UgEVFXL2Q-oKuIBr2JP5268uFbs3Bf7aNhj=s64","userId":"12801037868987527469"}},"outputId":"4d306288-5aab-4807-8dac-cf6b79415781"},"source":["numeric_data"],"execution_count":27,"outputs":[{"output_type":"execute_result","data":{"text/html":["
\n","\n","\n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n","
employeesrevenueemtak_EHITUSemtak_INFO JA SIDEemtak_TÖÖTLEV TÖÖSTUS
112.0144389.0010
59.033043.0001
8128.05924007.0001
96.025659.0001
108.0141853.0100
..................
1470763.0143609.0010
1470796.022225.0010
1471212.00.0010
1472203.04059.0001
1472462.028218.0010
\n","

17450 rows × 5 columns

\n","
"],"text/plain":[" employees revenue ... emtak_INFO JA SIDE emtak_TÖÖTLEV TÖÖSTUS\n","1 12.0 144389.0 ... 1 0\n","5 9.0 33043.0 ... 0 1\n","8 128.0 5924007.0 ... 0 1\n","9 6.0 25659.0 ... 0 1\n","10 8.0 141853.0 ... 0 0\n","... ... ... ... ... ...\n","147076 3.0 143609.0 ... 1 0\n","147079 6.0 22225.0 ... 1 0\n","147121 2.0 0.0 ... 1 0\n","147220 3.0 4059.0 ... 0 1\n","147246 2.0 28218.0 ... 1 0\n","\n","[17450 rows x 5 columns]"]},"metadata":{},"execution_count":27}]},{"cell_type":"code","metadata":{"id":"g6YpzLrSWea3","colab":{"base_uri":"https://localhost:8080/"},"executionInfo":{"status":"ok","timestamp":1639410258727,"user_tz":-120,"elapsed":305,"user":{"displayName":"Kristjan Eljand","photoUrl":"https://lh3.googleusercontent.com/a-/AOh14Gip4UgEVFXL2Q-oKuIBr2JP5268uFbs3Bf7aNhj=s64","userId":"12801037868987527469"}},"outputId":"47059f5f-9c1b-41e9-8aef-da94ea6aee82"},"source":["from sklearn.neighbors import LocalOutlierFactor\n","\n","model = LocalOutlierFactor()\n","prediction = model.fit_predict(numeric_data)\n","prediction"],"execution_count":28,"outputs":[{"output_type":"execute_result","data":{"text/plain":["array([1, 1, 1, ..., 1, 1, 1])"]},"metadata":{},"execution_count":28}]},{"cell_type":"code","metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"xQG2UpI_zchy","executionInfo":{"status":"ok","timestamp":1639410304530,"user_tz":-120,"elapsed":313,"user":{"displayName":"Kristjan Eljand","photoUrl":"https://lh3.googleusercontent.com/a-/AOh14Gip4UgEVFXL2Q-oKuIBr2JP5268uFbs3Bf7aNhj=s64","userId":"12801037868987527469"}},"outputId":"84a43de6-60b8-41f5-8723-dd0d59d7d275"},"source":["# Loome andmestiku, kuhu on lisatud märk anomaalsuse kohta\n","# -1 tähendab, et tegemist on anomaaliaga\n","# 1 tähendab, et tegemist on mitte-anomaaliaga\n","outlier_data = numeric_data.copy()\n","outlier_data['outlier'] = prediction\n","\n","# Loeme anomaaliad ja normaalsed read kokku\n","outlier_data.value_counts(subset='outlier')"],"execution_count":29,"outputs":[{"output_type":"execute_result","data":{"text/plain":["outlier\n"," 1 17345\n","-1 105\n","dtype: int64"]},"metadata":{},"execution_count":29}]}]}