diff --git a/translated_images/pt-PT/ml-realworld.26ee274671615577.webp b/translated_images/pt-PT/ml-realworld.26ee274671615577.webp new file mode 100644 index 000000000..607a417aa Binary files /dev/null and b/translated_images/pt-PT/ml-realworld.26ee274671615577.webp differ diff --git a/translated_images/pt-PT/ml-regression.4e4f70e3b3ed446e.webp b/translated_images/pt-PT/ml-regression.4e4f70e3b3ed446e.webp new file mode 100644 index 000000000..88aaf6a15 Binary files /dev/null and b/translated_images/pt-PT/ml-regression.4e4f70e3b3ed446e.webp differ diff --git a/translated_images/pt-PT/ml-reinforcement.94024374d63348db.webp b/translated_images/pt-PT/ml-reinforcement.94024374d63348db.webp new file mode 100644 index 000000000..ec0ab5c97 Binary files /dev/null and b/translated_images/pt-PT/ml-reinforcement.94024374d63348db.webp differ diff --git a/translated_images/pt-PT/ml-timeseries.fb98d25f1013fc0c.webp b/translated_images/pt-PT/ml-timeseries.fb98d25f1013fc0c.webp new file mode 100644 index 000000000..49cb2b29e Binary files /dev/null and b/translated_images/pt-PT/ml-timeseries.fb98d25f1013fc0c.webp differ diff --git a/translated_images/pt-PT/model-overview-dataset-cohorts.dfa463fb527a35a0.webp b/translated_images/pt-PT/model-overview-dataset-cohorts.dfa463fb527a35a0.webp new file mode 100644 index 000000000..0e422785b Binary files /dev/null and b/translated_images/pt-PT/model-overview-dataset-cohorts.dfa463fb527a35a0.webp differ diff --git a/translated_images/pt-PT/model-overview-feature-cohorts.c5104d575ffd0c80.webp b/translated_images/pt-PT/model-overview-feature-cohorts.c5104d575ffd0c80.webp new file mode 100644 index 000000000..ede36383f Binary files /dev/null and b/translated_images/pt-PT/model-overview-feature-cohorts.c5104d575ffd0c80.webp differ diff --git a/translated_images/pt-PT/monnaie.606c5fa8369d5c3b.webp b/translated_images/pt-PT/monnaie.606c5fa8369d5c3b.webp new file mode 100644 index 000000000..72a343b60 Binary files /dev/null and b/translated_images/pt-PT/monnaie.606c5fa8369d5c3b.webp differ diff --git a/translated_images/pt-PT/mountaincar.43d56e588ce581c2.webp b/translated_images/pt-PT/mountaincar.43d56e588ce581c2.webp new file mode 100644 index 000000000..8fc8cec1d Binary files /dev/null and b/translated_images/pt-PT/mountaincar.43d56e588ce581c2.webp differ diff --git a/translated_images/pt-PT/multinomial-ordinal.944fe02295fd6cdf.webp b/translated_images/pt-PT/multinomial-ordinal.944fe02295fd6cdf.webp new file mode 100644 index 000000000..8eee5e53a Binary files /dev/null and b/translated_images/pt-PT/multinomial-ordinal.944fe02295fd6cdf.webp differ diff --git a/translated_images/pt-PT/multinomial-vs-ordinal.36701b4850e37d86.webp b/translated_images/pt-PT/multinomial-vs-ordinal.36701b4850e37d86.webp new file mode 100644 index 000000000..5cc4db537 Binary files /dev/null and b/translated_images/pt-PT/multinomial-vs-ordinal.36701b4850e37d86.webp differ diff --git a/translated_images/pt-PT/netron.a05f39410211915e.webp b/translated_images/pt-PT/netron.a05f39410211915e.webp new file mode 100644 index 000000000..d8d4e6237 Binary files /dev/null and b/translated_images/pt-PT/netron.a05f39410211915e.webp differ diff --git a/translated_images/pt-PT/notebook.4a3ee31f396b8832.webp b/translated_images/pt-PT/notebook.4a3ee31f396b8832.webp new file mode 100644 index 000000000..8f5a3c4f7 Binary files /dev/null and b/translated_images/pt-PT/notebook.4a3ee31f396b8832.webp differ diff --git a/translated_images/pt-PT/original.b2b15efe0ce92b87.webp b/translated_images/pt-PT/original.b2b15efe0ce92b87.webp new file mode 100644 index 000000000..df7a5a11a Binary files /dev/null and b/translated_images/pt-PT/original.b2b15efe0ce92b87.webp differ diff --git a/translated_images/pt-PT/overfitting.1c132d92bfd93cb6.webp b/translated_images/pt-PT/overfitting.1c132d92bfd93cb6.webp new file mode 100644 index 000000000..615aac897 Binary files /dev/null and b/translated_images/pt-PT/overfitting.1c132d92bfd93cb6.webp differ diff --git a/translated_images/pt-PT/p&p.279f1c49ecd88941.webp b/translated_images/pt-PT/p&p.279f1c49ecd88941.webp new file mode 100644 index 000000000..93be23802 Binary files /dev/null and b/translated_images/pt-PT/p&p.279f1c49ecd88941.webp differ diff --git a/translated_images/pt-PT/parse.d0c5bbe1106eae8f.webp b/translated_images/pt-PT/parse.d0c5bbe1106eae8f.webp new file mode 100644 index 000000000..7428889c1 Binary files /dev/null and b/translated_images/pt-PT/parse.d0c5bbe1106eae8f.webp differ diff --git a/translated_images/pt-PT/parsnip.cd2ce92622976502.webp b/translated_images/pt-PT/parsnip.cd2ce92622976502.webp new file mode 100644 index 000000000..67fc0145c Binary files /dev/null and b/translated_images/pt-PT/parsnip.cd2ce92622976502.webp differ diff --git a/translated_images/pt-PT/peter.779730f9ba3a8a8d.webp b/translated_images/pt-PT/peter.779730f9ba3a8a8d.webp new file mode 100644 index 000000000..a6a517271 Binary files /dev/null and b/translated_images/pt-PT/peter.779730f9ba3a8a8d.webp differ diff --git a/translated_images/pt-PT/pie-pumpkins-scatter.d14f9804a53f927e.webp b/translated_images/pt-PT/pie-pumpkins-scatter.d14f9804a53f927e.webp new file mode 100644 index 000000000..c606bc6ee Binary files /dev/null and b/translated_images/pt-PT/pie-pumpkins-scatter.d14f9804a53f927e.webp differ diff --git a/translated_images/pt-PT/pinch.1b035ec9ba7e0d40.webp b/translated_images/pt-PT/pinch.1b035ec9ba7e0d40.webp new file mode 100644 index 000000000..61c6f4f80 Binary files /dev/null and b/translated_images/pt-PT/pinch.1b035ec9ba7e0d40.webp differ diff --git a/translated_images/pt-PT/poly-results.ee587348f0f1f60b.webp b/translated_images/pt-PT/poly-results.ee587348f0f1f60b.webp new file mode 100644 index 000000000..6743c245c Binary files /dev/null and b/translated_images/pt-PT/poly-results.ee587348f0f1f60b.webp differ diff --git a/translated_images/pt-PT/polynomial.8fce4663e7283dfb.webp b/translated_images/pt-PT/polynomial.8fce4663e7283dfb.webp new file mode 100644 index 000000000..f91e147b9 Binary files /dev/null and b/translated_images/pt-PT/polynomial.8fce4663e7283dfb.webp differ diff --git a/translated_images/pt-PT/popular.9c48d84b3386705f.webp b/translated_images/pt-PT/popular.9c48d84b3386705f.webp new file mode 100644 index 000000000..2476933f2 Binary files /dev/null and b/translated_images/pt-PT/popular.9c48d84b3386705f.webp differ diff --git a/translated_images/pt-PT/price-by-variety.744a2f9925d9bcb4.webp b/translated_images/pt-PT/price-by-variety.744a2f9925d9bcb4.webp new file mode 100644 index 000000000..d001a164a Binary files /dev/null and b/translated_images/pt-PT/price-by-variety.744a2f9925d9bcb4.webp differ diff --git a/translated_images/pt-PT/problems.f7fb539ccd80608e.webp b/translated_images/pt-PT/problems.f7fb539ccd80608e.webp new file mode 100644 index 000000000..6085c6e8a Binary files /dev/null and b/translated_images/pt-PT/problems.f7fb539ccd80608e.webp differ diff --git a/translated_images/pt-PT/pumpkin-classifier.562771f104ad5436.webp b/translated_images/pt-PT/pumpkin-classifier.562771f104ad5436.webp new file mode 100644 index 000000000..0c741f7fb Binary files /dev/null and b/translated_images/pt-PT/pumpkin-classifier.562771f104ad5436.webp differ diff --git a/translated_images/pt-PT/pumpkins_catplot_1.c55c409b71fea2ec.webp b/translated_images/pt-PT/pumpkins_catplot_1.c55c409b71fea2ec.webp new file mode 100644 index 000000000..c4244ac82 Binary files /dev/null and b/translated_images/pt-PT/pumpkins_catplot_1.c55c409b71fea2ec.webp differ diff --git a/translated_images/pt-PT/pumpkins_catplot_2.87a354447880b388.webp b/translated_images/pt-PT/pumpkins_catplot_2.87a354447880b388.webp new file mode 100644 index 000000000..a318bd27d Binary files /dev/null and b/translated_images/pt-PT/pumpkins_catplot_2.87a354447880b388.webp differ diff --git a/translated_images/pt-PT/r_learners_sm.cd14eb3581a9f28d.webp b/translated_images/pt-PT/r_learners_sm.cd14eb3581a9f28d.webp new file mode 100644 index 000000000..516f71d47 Binary files /dev/null and b/translated_images/pt-PT/r_learners_sm.cd14eb3581a9f28d.webp differ diff --git a/translated_images/pt-PT/r_learners_sm.e25fa9c205b3a3f9.webp b/translated_images/pt-PT/r_learners_sm.e25fa9c205b3a3f9.webp new file mode 100644 index 000000000..b6e73d3da Binary files /dev/null and b/translated_images/pt-PT/r_learners_sm.e25fa9c205b3a3f9.webp differ diff --git a/translated_images/pt-PT/r_learners_sm.e4a71b113ffbedfe.webp b/translated_images/pt-PT/r_learners_sm.e4a71b113ffbedfe.webp new file mode 100644 index 000000000..8e18aa306 Binary files /dev/null and b/translated_images/pt-PT/r_learners_sm.e4a71b113ffbedfe.webp differ diff --git a/translated_images/pt-PT/r_learners_sm.f9199f76f1e2e493.webp b/translated_images/pt-PT/r_learners_sm.f9199f76f1e2e493.webp new file mode 100644 index 000000000..e12c56478 Binary files /dev/null and b/translated_images/pt-PT/r_learners_sm.f9199f76f1e2e493.webp differ diff --git a/translated_images/pt-PT/recipes.186acfa8ed2e8f00.webp b/translated_images/pt-PT/recipes.186acfa8ed2e8f00.webp new file mode 100644 index 000000000..54537364e Binary files /dev/null and b/translated_images/pt-PT/recipes.186acfa8ed2e8f00.webp differ diff --git a/translated_images/pt-PT/recipes.9ad10d8a4056bf89.webp b/translated_images/pt-PT/recipes.9ad10d8a4056bf89.webp new file mode 100644 index 000000000..cad988266 Binary files /dev/null and b/translated_images/pt-PT/recipes.9ad10d8a4056bf89.webp differ diff --git a/translated_images/pt-PT/scaled.91897dfbaa26ca4a.webp b/translated_images/pt-PT/scaled.91897dfbaa26ca4a.webp new file mode 100644 index 000000000..d63f2b0f7 Binary files /dev/null and b/translated_images/pt-PT/scaled.91897dfbaa26ca4a.webp differ diff --git a/translated_images/pt-PT/scaled.e35258ca5cd3d43f.webp b/translated_images/pt-PT/scaled.e35258ca5cd3d43f.webp new file mode 100644 index 000000000..d63f2b0f7 Binary files /dev/null and b/translated_images/pt-PT/scaled.e35258ca5cd3d43f.webp differ diff --git a/translated_images/pt-PT/scatter-dayofyear-color.65790faefbb9d54f.webp b/translated_images/pt-PT/scatter-dayofyear-color.65790faefbb9d54f.webp new file mode 100644 index 000000000..eeb8a9f10 Binary files /dev/null and b/translated_images/pt-PT/scatter-dayofyear-color.65790faefbb9d54f.webp differ diff --git a/translated_images/pt-PT/scatter-dayofyear.bc171c189c9fd553.webp b/translated_images/pt-PT/scatter-dayofyear.bc171c189c9fd553.webp new file mode 100644 index 000000000..aec045037 Binary files /dev/null and b/translated_images/pt-PT/scatter-dayofyear.bc171c189c9fd553.webp differ diff --git a/translated_images/pt-PT/scatterplot.ad8b356bcbb33be6.webp b/translated_images/pt-PT/scatterplot.ad8b356bcbb33be6.webp new file mode 100644 index 000000000..885789a2b Binary files /dev/null and b/translated_images/pt-PT/scatterplot.ad8b356bcbb33be6.webp differ diff --git a/translated_images/pt-PT/scatterplot.b6868f44cbd2051c.webp b/translated_images/pt-PT/scatterplot.b6868f44cbd2051c.webp new file mode 100644 index 000000000..bf0ce25bc Binary files /dev/null and b/translated_images/pt-PT/scatterplot.b6868f44cbd2051c.webp differ diff --git a/translated_images/pt-PT/shakey.4dc17819c447c05b.webp b/translated_images/pt-PT/shakey.4dc17819c447c05b.webp new file mode 100644 index 000000000..441676011 Binary files /dev/null and b/translated_images/pt-PT/shakey.4dc17819c447c05b.webp differ diff --git a/translated_images/pt-PT/sigmoid.8b7ba9d095c789cf.webp b/translated_images/pt-PT/sigmoid.8b7ba9d095c789cf.webp new file mode 100644 index 000000000..f513a38cc Binary files /dev/null and b/translated_images/pt-PT/sigmoid.8b7ba9d095c789cf.webp differ diff --git a/translated_images/pt-PT/slope.f3c9d5910ddbfcf9.webp b/translated_images/pt-PT/slope.f3c9d5910ddbfcf9.webp new file mode 100644 index 000000000..a65bed28c Binary files /dev/null and b/translated_images/pt-PT/slope.f3c9d5910ddbfcf9.webp differ diff --git a/translated_images/pt-PT/solvers.5fc648618529e627.webp b/translated_images/pt-PT/solvers.5fc648618529e627.webp new file mode 100644 index 000000000..7c0e0f24b Binary files /dev/null and b/translated_images/pt-PT/solvers.5fc648618529e627.webp differ diff --git a/translated_images/pt-PT/svm.621ae7b516d678e0.webp b/translated_images/pt-PT/svm.621ae7b516d678e0.webp new file mode 100644 index 000000000..02d774a2a Binary files /dev/null and b/translated_images/pt-PT/svm.621ae7b516d678e0.webp differ diff --git a/translated_images/pt-PT/swarm.56d253ae80a2c0f5.webp b/translated_images/pt-PT/swarm.56d253ae80a2c0f5.webp new file mode 100644 index 000000000..752d00904 Binary files /dev/null and b/translated_images/pt-PT/swarm.56d253ae80a2c0f5.webp differ diff --git a/translated_images/pt-PT/swarm_2.efeacfca536c2b57.webp b/translated_images/pt-PT/swarm_2.efeacfca536c2b57.webp new file mode 100644 index 000000000..c536e6e73 Binary files /dev/null and b/translated_images/pt-PT/swarm_2.efeacfca536c2b57.webp differ diff --git a/translated_images/pt-PT/test-data-predict.8afc47ee7e52874f.webp b/translated_images/pt-PT/test-data-predict.8afc47ee7e52874f.webp new file mode 100644 index 000000000..4fe86dd49 Binary files /dev/null and b/translated_images/pt-PT/test-data-predict.8afc47ee7e52874f.webp differ diff --git a/translated_images/pt-PT/thai-food.c47a7a7f9f05c218.webp b/translated_images/pt-PT/thai-food.c47a7a7f9f05c218.webp new file mode 100644 index 000000000..1eda3cea3 Binary files /dev/null and b/translated_images/pt-PT/thai-food.c47a7a7f9f05c218.webp differ diff --git a/translated_images/pt-PT/thai.0269dbab2e78bd38.webp b/translated_images/pt-PT/thai.0269dbab2e78bd38.webp new file mode 100644 index 000000000..e9e7d8a79 Binary files /dev/null and b/translated_images/pt-PT/thai.0269dbab2e78bd38.webp differ diff --git a/translated_images/pt-PT/tokenization.1641a160c66cd2d9.webp b/translated_images/pt-PT/tokenization.1641a160c66cd2d9.webp new file mode 100644 index 000000000..eb74e9e4f Binary files /dev/null and b/translated_images/pt-PT/tokenization.1641a160c66cd2d9.webp differ diff --git a/translated_images/pt-PT/train-data-predict.3c4ef4e78553104f.webp b/translated_images/pt-PT/train-data-predict.3c4ef4e78553104f.webp new file mode 100644 index 000000000..9b3938d97 Binary files /dev/null and b/translated_images/pt-PT/train-data-predict.3c4ef4e78553104f.webp differ diff --git a/translated_images/pt-PT/train-test.8928d14e5b91fc94.webp b/translated_images/pt-PT/train-test.8928d14e5b91fc94.webp new file mode 100644 index 000000000..508e3b216 Binary files /dev/null and b/translated_images/pt-PT/train-test.8928d14e5b91fc94.webp differ diff --git a/translated_images/pt-PT/train-test.ead0cecbfc341921.webp b/translated_images/pt-PT/train-test.ead0cecbfc341921.webp new file mode 100644 index 000000000..512f4dc5e Binary files /dev/null and b/translated_images/pt-PT/train-test.ead0cecbfc341921.webp differ diff --git a/translated_images/pt-PT/train_progress_raw.2adfdf2daea09c59.webp b/translated_images/pt-PT/train_progress_raw.2adfdf2daea09c59.webp new file mode 100644 index 000000000..9cb93e6e5 Binary files /dev/null and b/translated_images/pt-PT/train_progress_raw.2adfdf2daea09c59.webp differ diff --git a/translated_images/pt-PT/train_progress_runav.c71694a8fa9ab359.webp b/translated_images/pt-PT/train_progress_runav.c71694a8fa9ab359.webp new file mode 100644 index 000000000..46fb46ea5 Binary files /dev/null and b/translated_images/pt-PT/train_progress_runav.c71694a8fa9ab359.webp differ diff --git a/translated_images/pt-PT/turntable.f2b86b13c53302dc.webp b/translated_images/pt-PT/turntable.f2b86b13c53302dc.webp new file mode 100644 index 000000000..27c674f5b Binary files /dev/null and b/translated_images/pt-PT/turntable.f2b86b13c53302dc.webp differ diff --git a/translated_images/pt-PT/ufo.9e787f5161da9d4d.webp b/translated_images/pt-PT/ufo.9e787f5161da9d4d.webp new file mode 100644 index 000000000..44a08cb65 Binary files /dev/null and b/translated_images/pt-PT/ufo.9e787f5161da9d4d.webp differ diff --git a/translated_images/pt-PT/unruly_data.0eedc7ced92d2d91.webp b/translated_images/pt-PT/unruly_data.0eedc7ced92d2d91.webp new file mode 100644 index 000000000..87862b3a6 Binary files /dev/null and b/translated_images/pt-PT/unruly_data.0eedc7ced92d2d91.webp differ diff --git a/translated_images/pt-PT/violin.ffceb68923177011.webp b/translated_images/pt-PT/violin.ffceb68923177011.webp new file mode 100644 index 000000000..5e5bfc849 Binary files /dev/null and b/translated_images/pt-PT/violin.ffceb68923177011.webp differ diff --git a/translated_images/pt-PT/voronoi.1dc1613fb0439b95.webp b/translated_images/pt-PT/voronoi.1dc1613fb0439b95.webp new file mode 100644 index 000000000..4a7d11723 Binary files /dev/null and b/translated_images/pt-PT/voronoi.1dc1613fb0439b95.webp differ diff --git a/translated_images/pt-PT/web-app.4c76450cabe20036.webp b/translated_images/pt-PT/web-app.4c76450cabe20036.webp new file mode 100644 index 000000000..880f3df7e Binary files /dev/null and b/translated_images/pt-PT/web-app.4c76450cabe20036.webp differ diff --git a/translated_images/pt-PT/wolf.a56d3d4070ca0c79.webp b/translated_images/pt-PT/wolf.a56d3d4070ca0c79.webp new file mode 100644 index 000000000..a9f12f4bd Binary files /dev/null and b/translated_images/pt-PT/wolf.a56d3d4070ca0c79.webp differ diff --git a/translations/pa/.co-op-translator.json b/translations/pa/.co-op-translator.json new file mode 100644 index 000000000..631ab62f2 --- /dev/null +++ b/translations/pa/.co-op-translator.json @@ -0,0 +1,596 @@ +{ + "1-Introduction/1-intro-to-ML/README.md": { + "original_hash": "69389392fa6346e0dfa30f664b7b6fec", + "translation_date": "2025-09-06T07:05:22+00:00", + "source_file": "1-Introduction/1-intro-to-ML/README.md", + "language_code": "pa" + }, + "1-Introduction/1-intro-to-ML/assignment.md": { + "original_hash": "4c4698044bb8af52cfb6388a4ee0e53b", + "translation_date": "2025-08-29T17:41:44+00:00", + "source_file": "1-Introduction/1-intro-to-ML/assignment.md", + "language_code": "pa" + }, + "1-Introduction/2-history-of-ML/README.md": { + "original_hash": "6a05fec147e734c3e6bfa54505648e2b", + "translation_date": "2025-09-06T07:06:44+00:00", + "source_file": "1-Introduction/2-history-of-ML/README.md", + "language_code": "pa" + }, + "1-Introduction/2-history-of-ML/assignment.md": { + "original_hash": "eb6e4d5afd1b21a57d2b9e6d0aac3969", + "translation_date": "2025-08-29T17:44:18+00:00", + "source_file": "1-Introduction/2-history-of-ML/assignment.md", + "language_code": "pa" + }, + "1-Introduction/3-fairness/README.md": { + "original_hash": "9a6b702d1437c0467e3c5c28d763dac2", + "translation_date": "2025-09-06T07:03:15+00:00", + "source_file": "1-Introduction/3-fairness/README.md", + "language_code": "pa" + }, + "1-Introduction/3-fairness/assignment.md": { + "original_hash": "dbda60e7b1fe5f18974e7858eff0004e", + "translation_date": "2025-08-29T17:34:47+00:00", + "source_file": "1-Introduction/3-fairness/assignment.md", + "language_code": "pa" + }, + "1-Introduction/4-techniques-of-ML/README.md": { + "original_hash": "9d91f3af3758fdd4569fb410575995ef", + "translation_date": "2025-09-06T07:04:42+00:00", + "source_file": "1-Introduction/4-techniques-of-ML/README.md", + "language_code": "pa" + }, + "1-Introduction/4-techniques-of-ML/assignment.md": { + "original_hash": "70d65aeddc06170bc1aed5b27805f930", + "translation_date": "2025-08-29T17:39:13+00:00", + "source_file": "1-Introduction/4-techniques-of-ML/assignment.md", + "language_code": "pa" + }, + "1-Introduction/README.md": { + "original_hash": "cf8ecc83f28e5b98051d2179eca08e08", + "translation_date": "2025-08-29T17:30:20+00:00", + "source_file": "1-Introduction/README.md", + "language_code": "pa" + }, + "2-Regression/1-Tools/README.md": { + "original_hash": "fa81d226c71d5af7a2cade31c1c92b88", + "translation_date": "2025-09-06T06:50:17+00:00", + "source_file": "2-Regression/1-Tools/README.md", + "language_code": "pa" + }, + "2-Regression/1-Tools/assignment.md": { + "original_hash": "74a5cf83e4ebc302afbcbc4f418afd0a", + "translation_date": "2025-08-29T16:51:51+00:00", + "source_file": "2-Regression/1-Tools/assignment.md", + "language_code": "pa" + }, + "2-Regression/1-Tools/solution/Julia/README.md": { + "original_hash": "a39c15d63f3b2795ee2284a82b986b93", + "translation_date": "2025-08-29T16:52:07+00:00", + "source_file": "2-Regression/1-Tools/solution/Julia/README.md", + "language_code": "pa" + }, + "2-Regression/2-Data/README.md": { + "original_hash": "7c077988328ebfe33b24d07945f16eca", + "translation_date": "2025-09-06T06:51:45+00:00", + "source_file": "2-Regression/2-Data/README.md", + "language_code": "pa" + }, + "2-Regression/2-Data/assignment.md": { + "original_hash": "4485a1ed4dd1b5647365e3d87456515d", + "translation_date": "2025-08-29T16:56:04+00:00", + "source_file": "2-Regression/2-Data/assignment.md", + "language_code": "pa" + }, + "2-Regression/2-Data/solution/Julia/README.md": { + "original_hash": "a39c15d63f3b2795ee2284a82b986b93", + "translation_date": "2025-08-29T16:56:18+00:00", + "source_file": "2-Regression/2-Data/solution/Julia/README.md", + "language_code": "pa" + }, + "2-Regression/3-Linear/README.md": { + "original_hash": "40e64f004f3cb50aa1d8661672d3cd92", + "translation_date": "2025-09-06T06:46:31+00:00", + "source_file": "2-Regression/3-Linear/README.md", + "language_code": "pa" + }, + "2-Regression/3-Linear/assignment.md": { + "original_hash": "cc471fa89c293bc735dd3a9a0fb79b1b", + "translation_date": "2025-08-29T16:41:58+00:00", + "source_file": "2-Regression/3-Linear/assignment.md", + "language_code": "pa" + }, + "2-Regression/3-Linear/solution/Julia/README.md": { + "original_hash": "a39c15d63f3b2795ee2284a82b986b93", + "translation_date": "2025-08-29T16:42:14+00:00", + "source_file": "2-Regression/3-Linear/solution/Julia/README.md", + "language_code": "pa" + }, + "2-Regression/4-Logistic/README.md": { + "original_hash": "abf86d845c84330bce205a46b382ec88", + "translation_date": "2025-09-06T06:48:36+00:00", + "source_file": "2-Regression/4-Logistic/README.md", + "language_code": "pa" + }, + "2-Regression/4-Logistic/assignment.md": { + "original_hash": "8af40209a41494068c1f42b14c0b450d", + "translation_date": "2025-08-29T16:47:24+00:00", + "source_file": "2-Regression/4-Logistic/assignment.md", + "language_code": "pa" + }, + "2-Regression/4-Logistic/solution/Julia/README.md": { + "original_hash": "a39c15d63f3b2795ee2284a82b986b93", + "translation_date": "2025-08-29T16:47:41+00:00", + "source_file": "2-Regression/4-Logistic/solution/Julia/README.md", + "language_code": "pa" + }, + "2-Regression/README.md": { + "original_hash": "508582278dbb8edd2a8a80ac96ef416c", + "translation_date": "2025-08-29T16:35:23+00:00", + "source_file": "2-Regression/README.md", + "language_code": "pa" + }, + "3-Web-App/1-Web-App/README.md": { + "original_hash": "e0b75f73e4a90d45181dc5581fe2ef5c", + "translation_date": "2025-09-06T07:07:24+00:00", + "source_file": "3-Web-App/1-Web-App/README.md", + "language_code": "pa" + }, + "3-Web-App/1-Web-App/assignment.md": { + "original_hash": "a8e8ae10be335cbc745b75ee552317ff", + "translation_date": "2025-08-29T17:47:37+00:00", + "source_file": "3-Web-App/1-Web-App/assignment.md", + "language_code": "pa" + }, + "3-Web-App/README.md": { + "original_hash": "9836ff53cfef716ddfd70e06c5f43436", + "translation_date": "2025-08-29T17:44:46+00:00", + "source_file": "3-Web-App/README.md", + "language_code": "pa" + }, + "4-Classification/1-Introduction/README.md": { + "original_hash": "aaf391d922bd6de5efba871d514c6d47", + "translation_date": "2025-09-06T07:10:09+00:00", + "source_file": "4-Classification/1-Introduction/README.md", + "language_code": "pa" + }, + "4-Classification/1-Introduction/assignment.md": { + "original_hash": "b2a01912beb24cfb0007f83594dba801", + "translation_date": "2025-08-29T17:59:18+00:00", + "source_file": "4-Classification/1-Introduction/assignment.md", + "language_code": "pa" + }, + "4-Classification/1-Introduction/solution/Julia/README.md": { + "original_hash": "a39c15d63f3b2795ee2284a82b986b93", + "translation_date": "2025-08-29T17:59:34+00:00", + "source_file": "4-Classification/1-Introduction/solution/Julia/README.md", + "language_code": "pa" + }, + "4-Classification/2-Classifiers-1/README.md": { + "original_hash": "1a6e9e46b34a2e559fbbfc1f95397c7b", + "translation_date": "2025-09-06T07:08:07+00:00", + "source_file": "4-Classification/2-Classifiers-1/README.md", + "language_code": "pa" + }, + "4-Classification/2-Classifiers-1/assignment.md": { + "original_hash": "de6025f96841498b0577e9d1aee18d1f", + "translation_date": "2025-08-29T17:52:10+00:00", + "source_file": "4-Classification/2-Classifiers-1/assignment.md", + "language_code": "pa" + }, + "4-Classification/2-Classifiers-1/solution/Julia/README.md": { + "original_hash": "a39c15d63f3b2795ee2284a82b986b93", + "translation_date": "2025-08-29T17:52:26+00:00", + "source_file": "4-Classification/2-Classifiers-1/solution/Julia/README.md", + "language_code": "pa" + }, + "4-Classification/3-Classifiers-2/README.md": { + "original_hash": "49047911108adc49d605cddfb455749c", + "translation_date": "2025-09-06T07:09:41+00:00", + "source_file": "4-Classification/3-Classifiers-2/README.md", + "language_code": "pa" + }, + "4-Classification/3-Classifiers-2/assignment.md": { + "original_hash": "58dfdaf79fb73f7d34b22bdbacf57329", + "translation_date": "2025-08-29T17:56:40+00:00", + "source_file": "4-Classification/3-Classifiers-2/assignment.md", + "language_code": "pa" + }, + "4-Classification/3-Classifiers-2/solution/Julia/README.md": { + "original_hash": "a39c15d63f3b2795ee2284a82b986b93", + "translation_date": "2025-08-29T17:56:58+00:00", + "source_file": "4-Classification/3-Classifiers-2/solution/Julia/README.md", + "language_code": "pa" + }, + "4-Classification/4-Applied/README.md": { + "original_hash": "61bdec27ed2da8b098cd9065405d9bb0", + "translation_date": "2025-09-06T07:09:21+00:00", + "source_file": "4-Classification/4-Applied/README.md", + "language_code": "pa" + }, + "4-Classification/4-Applied/assignment.md": { + "original_hash": "799ed651e2af0a7cad17c6268db11578", + "translation_date": "2025-08-29T17:54:43+00:00", + "source_file": "4-Classification/4-Applied/assignment.md", + "language_code": "pa" + }, + "4-Classification/README.md": { + "original_hash": "74e809ffd1e613a1058bbc3e9600859e", + "translation_date": "2025-08-29T17:48:57+00:00", + "source_file": "4-Classification/README.md", + "language_code": "pa" + }, + "5-Clustering/1-Visualize/README.md": { + "original_hash": "730225ea274c9174fe688b21d421539d", + "translation_date": "2025-09-06T06:57:24+00:00", + "source_file": "5-Clustering/1-Visualize/README.md", + "language_code": "pa" + }, + "5-Clustering/1-Visualize/assignment.md": { + "original_hash": "589fa015a5e7d9e67bd629f7d47b53de", + "translation_date": "2025-08-29T17:16:30+00:00", + "source_file": "5-Clustering/1-Visualize/assignment.md", + "language_code": "pa" + }, + "5-Clustering/1-Visualize/solution/Julia/README.md": { + "original_hash": "a39c15d63f3b2795ee2284a82b986b93", + "translation_date": "2025-08-29T17:16:50+00:00", + "source_file": "5-Clustering/1-Visualize/solution/Julia/README.md", + "language_code": "pa" + }, + "5-Clustering/2-K-Means/README.md": { + "original_hash": "7cdd17338d9bbd7e2171c2cd462eb081", + "translation_date": "2025-09-06T06:58:34+00:00", + "source_file": "5-Clustering/2-K-Means/README.md", + "language_code": "pa" + }, + "5-Clustering/2-K-Means/assignment.md": { + "original_hash": "b8e17eff34ad1680eba2a5d3cf9ffc41", + "translation_date": "2025-08-29T17:18:56+00:00", + "source_file": "5-Clustering/2-K-Means/assignment.md", + "language_code": "pa" + }, + "5-Clustering/2-K-Means/solution/Julia/README.md": { + "original_hash": "a39c15d63f3b2795ee2284a82b986b93", + "translation_date": "2025-08-29T17:19:12+00:00", + "source_file": "5-Clustering/2-K-Means/solution/Julia/README.md", + "language_code": "pa" + }, + "5-Clustering/README.md": { + "original_hash": "b28a3a4911584062772c537b653ebbc7", + "translation_date": "2025-08-29T17:08:26+00:00", + "source_file": "5-Clustering/README.md", + "language_code": "pa" + }, + "6-NLP/1-Introduction-to-NLP/README.md": { + "original_hash": "1c2ec40cf55c98a028a359c27ef7e45a", + "translation_date": "2025-09-06T07:19:50+00:00", + "source_file": "6-NLP/1-Introduction-to-NLP/README.md", + "language_code": "pa" + }, + "6-NLP/1-Introduction-to-NLP/assignment.md": { + "original_hash": "1d7583e8046dacbb0c056d5ba0a71b16", + "translation_date": "2025-08-29T18:32:49+00:00", + "source_file": "6-NLP/1-Introduction-to-NLP/assignment.md", + "language_code": "pa" + }, + "6-NLP/2-Tasks/README.md": { + "original_hash": "5f3cb462e3122e1afe7ab0050ccf2bd3", + "translation_date": "2025-09-06T07:15:46+00:00", + "source_file": "6-NLP/2-Tasks/README.md", + "language_code": "pa" + }, + "6-NLP/2-Tasks/assignment.md": { + "original_hash": "2efc4c2aba5ed06c780c05539c492ae3", + "translation_date": "2025-08-29T18:22:33+00:00", + "source_file": "6-NLP/2-Tasks/assignment.md", + "language_code": "pa" + }, + "6-NLP/3-Translation-Sentiment/README.md": { + "original_hash": "be03c8182982b87ced155e4e9d1438e8", + "translation_date": "2025-09-06T07:21:25+00:00", + "source_file": "6-NLP/3-Translation-Sentiment/README.md", + "language_code": "pa" + }, + "6-NLP/3-Translation-Sentiment/assignment.md": { + "original_hash": "9d2a734deb904caff310d1a999c6bd7a", + "translation_date": "2025-08-29T18:37:00+00:00", + "source_file": "6-NLP/3-Translation-Sentiment/assignment.md", + "language_code": "pa" + }, + "6-NLP/3-Translation-Sentiment/solution/Julia/README.md": { + "original_hash": "a39c15d63f3b2795ee2284a82b986b93", + "translation_date": "2025-08-29T18:37:30+00:00", + "source_file": "6-NLP/3-Translation-Sentiment/solution/Julia/README.md", + "language_code": "pa" + }, + "6-NLP/3-Translation-Sentiment/solution/R/README.md": { + "original_hash": "81db6ff2cf6e62fbe2340b094bb9509e", + "translation_date": "2025-08-29T18:37:16+00:00", + "source_file": "6-NLP/3-Translation-Sentiment/solution/R/README.md", + "language_code": "pa" + }, + "6-NLP/4-Hotel-Reviews-1/README.md": { + "original_hash": "8d32dadeda93c6fb5c43619854882ab1", + "translation_date": "2025-09-06T07:17:55+00:00", + "source_file": "6-NLP/4-Hotel-Reviews-1/README.md", + "language_code": "pa" + }, + "6-NLP/4-Hotel-Reviews-1/assignment.md": { + "original_hash": "bf39bceb833cd628f224941dca8041df", + "translation_date": "2025-08-29T18:28:51+00:00", + "source_file": "6-NLP/4-Hotel-Reviews-1/assignment.md", + "language_code": "pa" + }, + "6-NLP/4-Hotel-Reviews-1/solution/Julia/README.md": { + "original_hash": "a39c15d63f3b2795ee2284a82b986b93", + "translation_date": "2025-08-29T18:29:20+00:00", + "source_file": "6-NLP/4-Hotel-Reviews-1/solution/Julia/README.md", + "language_code": "pa" + }, + "6-NLP/4-Hotel-Reviews-1/solution/R/README.md": { + "original_hash": "81db6ff2cf6e62fbe2340b094bb9509e", + "translation_date": "2025-08-29T18:29:07+00:00", + "source_file": "6-NLP/4-Hotel-Reviews-1/solution/R/README.md", + "language_code": "pa" + }, + "6-NLP/5-Hotel-Reviews-2/README.md": { + "original_hash": "2c742993fe95d5bcbb2846eda3d442a1", + "translation_date": "2025-09-06T07:22:48+00:00", + "source_file": "6-NLP/5-Hotel-Reviews-2/README.md", + "language_code": "pa" + }, + "6-NLP/5-Hotel-Reviews-2/assignment.md": { + "original_hash": "daf144daa552da6a7d442aff6f3e77d8", + "translation_date": "2025-08-29T18:42:57+00:00", + "source_file": "6-NLP/5-Hotel-Reviews-2/assignment.md", + "language_code": "pa" + }, + "6-NLP/5-Hotel-Reviews-2/solution/Julia/README.md": { + "original_hash": "a39c15d63f3b2795ee2284a82b986b93", + "translation_date": "2025-08-29T18:43:23+00:00", + "source_file": "6-NLP/5-Hotel-Reviews-2/solution/Julia/README.md", + "language_code": "pa" + }, + "6-NLP/5-Hotel-Reviews-2/solution/R/README.md": { + "original_hash": "81db6ff2cf6e62fbe2340b094bb9509e", + "translation_date": "2025-08-29T18:43:12+00:00", + "source_file": "6-NLP/5-Hotel-Reviews-2/solution/R/README.md", + "language_code": "pa" + }, + "6-NLP/README.md": { + "original_hash": "1eb379dc2d0c9940b320732d16083778", + "translation_date": "2025-08-29T18:18:55+00:00", + "source_file": "6-NLP/README.md", + "language_code": "pa" + }, + "6-NLP/data/README.md": { + "original_hash": "ee0670655c89e4719319764afb113624", + "translation_date": "2025-08-29T18:29:31+00:00", + "source_file": "6-NLP/data/README.md", + "language_code": "pa" + }, + "7-TimeSeries/1-Introduction/README.md": { + "original_hash": "662b509c39eee205687726636d0a8455", + "translation_date": "2025-09-06T06:54:47+00:00", + "source_file": "7-TimeSeries/1-Introduction/README.md", + "language_code": "pa" + }, + "7-TimeSeries/1-Introduction/assignment.md": { + "original_hash": "d1781b0b92568ea1d119d0a198b576b4", + "translation_date": "2025-08-29T17:05:04+00:00", + "source_file": "7-TimeSeries/1-Introduction/assignment.md", + "language_code": "pa" + }, + "7-TimeSeries/1-Introduction/solution/Julia/README.md": { + "original_hash": "a39c15d63f3b2795ee2284a82b986b93", + "translation_date": "2025-08-29T17:05:31+00:00", + "source_file": "7-TimeSeries/1-Introduction/solution/Julia/README.md", + "language_code": "pa" + }, + "7-TimeSeries/1-Introduction/solution/R/README.md": { + "original_hash": "81db6ff2cf6e62fbe2340b094bb9509e", + "translation_date": "2025-08-29T17:05:20+00:00", + "source_file": "7-TimeSeries/1-Introduction/solution/R/README.md", + "language_code": "pa" + }, + "7-TimeSeries/2-ARIMA/README.md": { + "original_hash": "917dbf890db71a322f306050cb284749", + "translation_date": "2025-09-06T06:53:15+00:00", + "source_file": "7-TimeSeries/2-ARIMA/README.md", + "language_code": "pa" + }, + "7-TimeSeries/2-ARIMA/assignment.md": { + "original_hash": "1c814013e10866dfd92cdb32caaae3ac", + "translation_date": "2025-08-29T17:01:23+00:00", + "source_file": "7-TimeSeries/2-ARIMA/assignment.md", + "language_code": "pa" + }, + "7-TimeSeries/2-ARIMA/solution/Julia/README.md": { + "original_hash": "a39c15d63f3b2795ee2284a82b986b93", + "translation_date": "2025-08-29T17:01:51+00:00", + "source_file": "7-TimeSeries/2-ARIMA/solution/Julia/README.md", + "language_code": "pa" + }, + "7-TimeSeries/2-ARIMA/solution/R/README.md": { + "original_hash": "81db6ff2cf6e62fbe2340b094bb9509e", + "translation_date": "2025-08-29T17:01:39+00:00", + "source_file": "7-TimeSeries/2-ARIMA/solution/R/README.md", + "language_code": "pa" + }, + "7-TimeSeries/3-SVR/README.md": { + "original_hash": "482bccabe1df958496ea71a3667995cd", + "translation_date": "2025-09-06T06:55:27+00:00", + "source_file": "7-TimeSeries/3-SVR/README.md", + "language_code": "pa" + }, + "7-TimeSeries/3-SVR/assignment.md": { + "original_hash": "94aa2fc6154252ae30a3f3740299707a", + "translation_date": "2025-08-29T17:07:53+00:00", + "source_file": "7-TimeSeries/3-SVR/assignment.md", + "language_code": "pa" + }, + "7-TimeSeries/README.md": { + "original_hash": "61342603bad8acadbc6b2e4e3aab3f66", + "translation_date": "2025-08-29T16:56:46+00:00", + "source_file": "7-TimeSeries/README.md", + "language_code": "pa" + }, + "8-Reinforcement/1-QLearning/README.md": { + "original_hash": "911efd5e595089000cb3c16fce1beab8", + "translation_date": "2025-09-06T07:11:50+00:00", + "source_file": "8-Reinforcement/1-QLearning/README.md", + "language_code": "pa" + }, + "8-Reinforcement/1-QLearning/assignment.md": { + "original_hash": "68394b2102d3503882e5e914bd0ff5c1", + "translation_date": "2025-08-29T18:13:49+00:00", + "source_file": "8-Reinforcement/1-QLearning/assignment.md", + "language_code": "pa" + }, + "8-Reinforcement/1-QLearning/solution/Julia/README.md": { + "original_hash": "a39c15d63f3b2795ee2284a82b986b93", + "translation_date": "2025-08-29T18:14:21+00:00", + "source_file": "8-Reinforcement/1-QLearning/solution/Julia/README.md", + "language_code": "pa" + }, + "8-Reinforcement/1-QLearning/solution/R/README.md": { + "original_hash": "81db6ff2cf6e62fbe2340b094bb9509e", + "translation_date": "2025-08-29T18:14:11+00:00", + "source_file": "8-Reinforcement/1-QLearning/solution/R/README.md", + "language_code": "pa" + }, + "8-Reinforcement/2-Gym/README.md": { + "original_hash": "107d5bb29da8a562e7ae72262d251a75", + "translation_date": "2025-09-06T07:14:05+00:00", + "source_file": "8-Reinforcement/2-Gym/README.md", + "language_code": "pa" + }, + "8-Reinforcement/2-Gym/assignment.md": { + "original_hash": "1f2b7441745eb52e25745423b247016b", + "translation_date": "2025-08-29T18:17:46+00:00", + "source_file": "8-Reinforcement/2-Gym/assignment.md", + "language_code": "pa" + }, + "8-Reinforcement/2-Gym/solution/Julia/README.md": { + "original_hash": "a39c15d63f3b2795ee2284a82b986b93", + "translation_date": "2025-08-29T18:18:23+00:00", + "source_file": "8-Reinforcement/2-Gym/solution/Julia/README.md", + "language_code": "pa" + }, + "8-Reinforcement/2-Gym/solution/R/README.md": { + "original_hash": "81db6ff2cf6e62fbe2340b094bb9509e", + "translation_date": "2025-08-29T18:18:11+00:00", + "source_file": "8-Reinforcement/2-Gym/solution/R/README.md", + "language_code": "pa" + }, + "8-Reinforcement/README.md": { + "original_hash": "20ca019012b1725de956681d036d8b18", + "translation_date": "2025-08-29T18:05:32+00:00", + "source_file": "8-Reinforcement/README.md", + "language_code": "pa" + }, + "9-Real-World/1-Applications/README.md": { + "original_hash": "83320d6b6994909e35d830cebf214039", + "translation_date": "2025-09-06T06:59:52+00:00", + "source_file": "9-Real-World/1-Applications/README.md", + "language_code": "pa" + }, + "9-Real-World/1-Applications/assignment.md": { + "original_hash": "fdebfcd0a3f12c9e2b436ded1aa79885", + "translation_date": "2025-08-29T17:24:22+00:00", + "source_file": "9-Real-World/1-Applications/assignment.md", + "language_code": "pa" + }, + "9-Real-World/2-Debugging-ML-Models/README.md": { + "original_hash": "df2b538e8fbb3e91cf0419ae2f858675", + "translation_date": "2025-09-06T07:01:30+00:00", + "source_file": "9-Real-World/2-Debugging-ML-Models/README.md", + "language_code": "pa" + }, + "9-Real-World/2-Debugging-ML-Models/assignment.md": { + "original_hash": "91c6a180ef08e20cc15acfd2d6d6e164", + "translation_date": "2025-08-29T17:29:51+00:00", + "source_file": "9-Real-World/2-Debugging-ML-Models/assignment.md", + "language_code": "pa" + }, + "9-Real-World/README.md": { + "original_hash": "5e069a0ac02a9606a69946c2b3c574a9", + "translation_date": "2025-08-29T17:20:15+00:00", + "source_file": "9-Real-World/README.md", + "language_code": "pa" + }, + "AGENTS.md": { + "original_hash": "93fdaa0fd38836e50c4793e2f2f25e8b", + "translation_date": "2025-10-03T11:05:19+00:00", + "source_file": "AGENTS.md", + "language_code": "pa" + }, + "CODE_OF_CONDUCT.md": { + "original_hash": "c06b12caf3c901eb3156e3dd5b0aea56", + "translation_date": "2025-08-29T16:34:38+00:00", + "source_file": "CODE_OF_CONDUCT.md", + "language_code": "pa" + }, + "CONTRIBUTING.md": { + "original_hash": "977ec5266dfd78ad1ce2bd8d46fccbda", + "translation_date": "2025-08-29T16:32:33+00:00", + "source_file": "CONTRIBUTING.md", + "language_code": "pa" + }, + "README.md": { + "original_hash": "da2ceed62f16a0820259556e3a873c95", + "translation_date": "2026-01-29T18:16:50+00:00", + "source_file": "README.md", + "language_code": "pa" + }, + "SECURITY.md": { + "original_hash": "5e1b8da31aae9cca3d53ad243fa3365a", + "translation_date": "2025-08-29T16:33:19+00:00", + "source_file": "SECURITY.md", + "language_code": "pa" + }, + "SUPPORT.md": { + "original_hash": "09623d7343ff1c26ff4f198c1b2d3176", + "translation_date": "2025-10-03T11:55:23+00:00", + "source_file": "SUPPORT.md", + "language_code": "pa" + }, + "TROUBLESHOOTING.md": { + "original_hash": "134d8759f0e2ab886e9aa4f62362c201", + "translation_date": "2025-10-03T12:43:02+00:00", + "source_file": "TROUBLESHOOTING.md", + "language_code": "pa" + }, + "docs/_sidebar.md": { + "original_hash": "68dd06c685f6ce840e0acfa313352e7c", + "translation_date": "2025-08-29T17:19:42+00:00", + "source_file": "docs/_sidebar.md", + "language_code": "pa" + }, + "for-teachers.md": { + "original_hash": "b37de02054fa6c0438ede6fabe1fdfb8", + "translation_date": "2025-08-29T16:34:03+00:00", + "source_file": "for-teachers.md", + "language_code": "pa" + }, + "quiz-app/README.md": { + "original_hash": "6d130dffca5db70d7e615f926cb1ad4c", + "translation_date": "2025-08-29T17:48:16+00:00", + "source_file": "quiz-app/README.md", + "language_code": "pa" + }, + "sketchnotes/LICENSE.md": { + "original_hash": "fba3b94d88bfb9b81369b869a1e9a20f", + "translation_date": "2025-08-29T18:03:59+00:00", + "source_file": "sketchnotes/LICENSE.md", + "language_code": "pa" + }, + "sketchnotes/README.md": { + "original_hash": "a88d5918c1b9da69a40d917a0840c497", + "translation_date": "2025-08-29T17:59:52+00:00", + "source_file": "sketchnotes/README.md", + "language_code": "pa" + } +} \ No newline at end of file diff --git a/translations/pt-BR/.co-op-translator.json b/translations/pt-BR/.co-op-translator.json new file mode 100644 index 000000000..404bcb02f --- /dev/null +++ b/translations/pt-BR/.co-op-translator.json @@ -0,0 +1,596 @@ +{ + "1-Introduction/1-intro-to-ML/README.md": { + "original_hash": "69389392fa6346e0dfa30f664b7b6fec", + "translation_date": "2025-09-04T21:36:24+00:00", + "source_file": "1-Introduction/1-intro-to-ML/README.md", + "language_code": "pt-BR" + }, + "1-Introduction/1-intro-to-ML/assignment.md": { + "original_hash": "4c4698044bb8af52cfb6388a4ee0e53b", + "translation_date": "2025-08-29T21:30:36+00:00", + "source_file": "1-Introduction/1-intro-to-ML/assignment.md", + "language_code": "pt-BR" + }, + "1-Introduction/2-history-of-ML/README.md": { + "original_hash": "6a05fec147e734c3e6bfa54505648e2b", + "translation_date": "2025-09-04T21:37:10+00:00", + "source_file": "1-Introduction/2-history-of-ML/README.md", + "language_code": "pt-BR" + }, + "1-Introduction/2-history-of-ML/assignment.md": { + "original_hash": "eb6e4d5afd1b21a57d2b9e6d0aac3969", + "translation_date": "2025-08-29T21:34:04+00:00", + "source_file": "1-Introduction/2-history-of-ML/assignment.md", + "language_code": "pt-BR" + }, + "1-Introduction/3-fairness/README.md": { + "original_hash": "9a6b702d1437c0467e3c5c28d763dac2", + "translation_date": "2025-09-04T21:34:04+00:00", + "source_file": "1-Introduction/3-fairness/README.md", + "language_code": "pt-BR" + }, + "1-Introduction/3-fairness/assignment.md": { + "original_hash": "dbda60e7b1fe5f18974e7858eff0004e", + "translation_date": "2025-08-29T21:24:15+00:00", + "source_file": "1-Introduction/3-fairness/assignment.md", + "language_code": "pt-BR" + }, + "1-Introduction/4-techniques-of-ML/README.md": { + "original_hash": "9d91f3af3758fdd4569fb410575995ef", + "translation_date": "2025-09-04T21:35:13+00:00", + "source_file": "1-Introduction/4-techniques-of-ML/README.md", + "language_code": "pt-BR" + }, + "1-Introduction/4-techniques-of-ML/assignment.md": { + "original_hash": "70d65aeddc06170bc1aed5b27805f930", + "translation_date": "2025-08-29T21:27:34+00:00", + "source_file": "1-Introduction/4-techniques-of-ML/assignment.md", + "language_code": "pt-BR" + }, + "1-Introduction/README.md": { + "original_hash": "cf8ecc83f28e5b98051d2179eca08e08", + "translation_date": "2025-08-29T21:19:33+00:00", + "source_file": "1-Introduction/README.md", + "language_code": "pt-BR" + }, + "2-Regression/1-Tools/README.md": { + "original_hash": "fa81d226c71d5af7a2cade31c1c92b88", + "translation_date": "2025-09-04T21:24:44+00:00", + "source_file": "2-Regression/1-Tools/README.md", + "language_code": "pt-BR" + }, + "2-Regression/1-Tools/assignment.md": { + "original_hash": "74a5cf83e4ebc302afbcbc4f418afd0a", + "translation_date": "2025-08-29T20:33:30+00:00", + "source_file": "2-Regression/1-Tools/assignment.md", + "language_code": "pt-BR" + }, + "2-Regression/1-Tools/solution/Julia/README.md": { + "original_hash": "a39c15d63f3b2795ee2284a82b986b93", + "translation_date": "2025-08-29T20:33:54+00:00", + "source_file": "2-Regression/1-Tools/solution/Julia/README.md", + "language_code": "pt-BR" + }, + "2-Regression/2-Data/README.md": { + "original_hash": "7c077988328ebfe33b24d07945f16eca", + "translation_date": "2025-09-04T21:25:44+00:00", + "source_file": "2-Regression/2-Data/README.md", + "language_code": "pt-BR" + }, + "2-Regression/2-Data/assignment.md": { + "original_hash": "4485a1ed4dd1b5647365e3d87456515d", + "translation_date": "2025-08-29T20:37:30+00:00", + "source_file": "2-Regression/2-Data/assignment.md", + "language_code": "pt-BR" + }, + "2-Regression/2-Data/solution/Julia/README.md": { + "original_hash": "a39c15d63f3b2795ee2284a82b986b93", + "translation_date": "2025-08-29T20:38:00+00:00", + "source_file": "2-Regression/2-Data/solution/Julia/README.md", + "language_code": "pt-BR" + }, + "2-Regression/3-Linear/README.md": { + "original_hash": "40e64f004f3cb50aa1d8661672d3cd92", + "translation_date": "2025-09-04T21:20:40+00:00", + "source_file": "2-Regression/3-Linear/README.md", + "language_code": "pt-BR" + }, + "2-Regression/3-Linear/assignment.md": { + "original_hash": "cc471fa89c293bc735dd3a9a0fb79b1b", + "translation_date": "2025-08-29T20:19:42+00:00", + "source_file": "2-Regression/3-Linear/assignment.md", + "language_code": "pt-BR" + }, + "2-Regression/3-Linear/solution/Julia/README.md": { + "original_hash": "a39c15d63f3b2795ee2284a82b986b93", + "translation_date": "2025-08-29T20:20:05+00:00", + "source_file": "2-Regression/3-Linear/solution/Julia/README.md", + "language_code": "pt-BR" + }, + "2-Regression/4-Logistic/README.md": { + "original_hash": "abf86d845c84330bce205a46b382ec88", + "translation_date": "2025-09-04T21:23:34+00:00", + "source_file": "2-Regression/4-Logistic/README.md", + "language_code": "pt-BR" + }, + "2-Regression/4-Logistic/assignment.md": { + "original_hash": "8af40209a41494068c1f42b14c0b450d", + "translation_date": "2025-08-29T20:28:50+00:00", + "source_file": "2-Regression/4-Logistic/assignment.md", + "language_code": "pt-BR" + }, + "2-Regression/4-Logistic/solution/Julia/README.md": { + "original_hash": "a39c15d63f3b2795ee2284a82b986b93", + "translation_date": "2025-08-29T20:29:15+00:00", + "source_file": "2-Regression/4-Logistic/solution/Julia/README.md", + "language_code": "pt-BR" + }, + "2-Regression/README.md": { + "original_hash": "508582278dbb8edd2a8a80ac96ef416c", + "translation_date": "2025-08-29T20:13:26+00:00", + "source_file": "2-Regression/README.md", + "language_code": "pt-BR" + }, + "3-Web-App/1-Web-App/README.md": { + "original_hash": "e0b75f73e4a90d45181dc5581fe2ef5c", + "translation_date": "2025-09-04T21:38:11+00:00", + "source_file": "3-Web-App/1-Web-App/README.md", + "language_code": "pt-BR" + }, + "3-Web-App/1-Web-App/assignment.md": { + "original_hash": "a8e8ae10be335cbc745b75ee552317ff", + "translation_date": "2025-08-29T21:38:10+00:00", + "source_file": "3-Web-App/1-Web-App/assignment.md", + "language_code": "pt-BR" + }, + "3-Web-App/README.md": { + "original_hash": "9836ff53cfef716ddfd70e06c5f43436", + "translation_date": "2025-08-29T21:34:41+00:00", + "source_file": "3-Web-App/README.md", + "language_code": "pt-BR" + }, + "4-Classification/1-Introduction/README.md": { + "original_hash": "aaf391d922bd6de5efba871d514c6d47", + "translation_date": "2025-09-04T21:41:01+00:00", + "source_file": "4-Classification/1-Introduction/README.md", + "language_code": "pt-BR" + }, + "4-Classification/1-Introduction/assignment.md": { + "original_hash": "b2a01912beb24cfb0007f83594dba801", + "translation_date": "2025-08-29T21:54:04+00:00", + "source_file": "4-Classification/1-Introduction/assignment.md", + "language_code": "pt-BR" + }, + "4-Classification/1-Introduction/solution/Julia/README.md": { + "original_hash": "a39c15d63f3b2795ee2284a82b986b93", + "translation_date": "2025-08-29T21:54:29+00:00", + "source_file": "4-Classification/1-Introduction/solution/Julia/README.md", + "language_code": "pt-BR" + }, + "4-Classification/2-Classifiers-1/README.md": { + "original_hash": "1a6e9e46b34a2e559fbbfc1f95397c7b", + "translation_date": "2025-09-04T21:39:01+00:00", + "source_file": "4-Classification/2-Classifiers-1/README.md", + "language_code": "pt-BR" + }, + "4-Classification/2-Classifiers-1/assignment.md": { + "original_hash": "de6025f96841498b0577e9d1aee18d1f", + "translation_date": "2025-08-29T21:44:33+00:00", + "source_file": "4-Classification/2-Classifiers-1/assignment.md", + "language_code": "pt-BR" + }, + "4-Classification/2-Classifiers-1/solution/Julia/README.md": { + "original_hash": "a39c15d63f3b2795ee2284a82b986b93", + "translation_date": "2025-08-29T21:44:55+00:00", + "source_file": "4-Classification/2-Classifiers-1/solution/Julia/README.md", + "language_code": "pt-BR" + }, + "4-Classification/3-Classifiers-2/README.md": { + "original_hash": "49047911108adc49d605cddfb455749c", + "translation_date": "2025-09-04T21:40:38+00:00", + "source_file": "4-Classification/3-Classifiers-2/README.md", + "language_code": "pt-BR" + }, + "4-Classification/3-Classifiers-2/assignment.md": { + "original_hash": "58dfdaf79fb73f7d34b22bdbacf57329", + "translation_date": "2025-08-29T21:50:29+00:00", + "source_file": "4-Classification/3-Classifiers-2/assignment.md", + "language_code": "pt-BR" + }, + "4-Classification/3-Classifiers-2/solution/Julia/README.md": { + "original_hash": "a39c15d63f3b2795ee2284a82b986b93", + "translation_date": "2025-08-29T21:50:51+00:00", + "source_file": "4-Classification/3-Classifiers-2/solution/Julia/README.md", + "language_code": "pt-BR" + }, + "4-Classification/4-Applied/README.md": { + "original_hash": "61bdec27ed2da8b098cd9065405d9bb0", + "translation_date": "2025-09-04T21:40:07+00:00", + "source_file": "4-Classification/4-Applied/README.md", + "language_code": "pt-BR" + }, + "4-Classification/4-Applied/assignment.md": { + "original_hash": "799ed651e2af0a7cad17c6268db11578", + "translation_date": "2025-08-29T21:48:02+00:00", + "source_file": "4-Classification/4-Applied/assignment.md", + "language_code": "pt-BR" + }, + "4-Classification/README.md": { + "original_hash": "74e809ffd1e613a1058bbc3e9600859e", + "translation_date": "2025-08-29T21:40:04+00:00", + "source_file": "4-Classification/README.md", + "language_code": "pt-BR" + }, + "5-Clustering/1-Visualize/README.md": { + "original_hash": "730225ea274c9174fe688b21d421539d", + "translation_date": "2025-09-04T21:29:07+00:00", + "source_file": "5-Clustering/1-Visualize/README.md", + "language_code": "pt-BR" + }, + "5-Clustering/1-Visualize/assignment.md": { + "original_hash": "589fa015a5e7d9e67bd629f7d47b53de", + "translation_date": "2025-08-29T21:04:33+00:00", + "source_file": "5-Clustering/1-Visualize/assignment.md", + "language_code": "pt-BR" + }, + "5-Clustering/1-Visualize/solution/Julia/README.md": { + "original_hash": "a39c15d63f3b2795ee2284a82b986b93", + "translation_date": "2025-08-29T21:04:56+00:00", + "source_file": "5-Clustering/1-Visualize/solution/Julia/README.md", + "language_code": "pt-BR" + }, + "5-Clustering/2-K-Means/README.md": { + "original_hash": "7cdd17338d9bbd7e2171c2cd462eb081", + "translation_date": "2025-09-04T21:30:41+00:00", + "source_file": "5-Clustering/2-K-Means/README.md", + "language_code": "pt-BR" + }, + "5-Clustering/2-K-Means/assignment.md": { + "original_hash": "b8e17eff34ad1680eba2a5d3cf9ffc41", + "translation_date": "2025-08-29T21:07:38+00:00", + "source_file": "5-Clustering/2-K-Means/assignment.md", + "language_code": "pt-BR" + }, + "5-Clustering/2-K-Means/solution/Julia/README.md": { + "original_hash": "a39c15d63f3b2795ee2284a82b986b93", + "translation_date": "2025-08-29T21:08:00+00:00", + "source_file": "5-Clustering/2-K-Means/solution/Julia/README.md", + "language_code": "pt-BR" + }, + "5-Clustering/README.md": { + "original_hash": "b28a3a4911584062772c537b653ebbc7", + "translation_date": "2025-08-29T20:52:39+00:00", + "source_file": "5-Clustering/README.md", + "language_code": "pt-BR" + }, + "6-NLP/1-Introduction-to-NLP/README.md": { + "original_hash": "1c2ec40cf55c98a028a359c27ef7e45a", + "translation_date": "2025-09-04T21:45:46+00:00", + "source_file": "6-NLP/1-Introduction-to-NLP/README.md", + "language_code": "pt-BR" + }, + "6-NLP/1-Introduction-to-NLP/assignment.md": { + "original_hash": "1d7583e8046dacbb0c056d5ba0a71b16", + "translation_date": "2025-08-29T22:33:21+00:00", + "source_file": "6-NLP/1-Introduction-to-NLP/assignment.md", + "language_code": "pt-BR" + }, + "6-NLP/2-Tasks/README.md": { + "original_hash": "5f3cb462e3122e1afe7ab0050ccf2bd3", + "translation_date": "2025-09-04T21:43:59+00:00", + "source_file": "6-NLP/2-Tasks/README.md", + "language_code": "pt-BR" + }, + "6-NLP/2-Tasks/assignment.md": { + "original_hash": "2efc4c2aba5ed06c780c05539c492ae3", + "translation_date": "2025-08-29T22:21:35+00:00", + "source_file": "6-NLP/2-Tasks/assignment.md", + "language_code": "pt-BR" + }, + "6-NLP/3-Translation-Sentiment/README.md": { + "original_hash": "be03c8182982b87ced155e4e9d1438e8", + "translation_date": "2025-09-04T21:46:33+00:00", + "source_file": "6-NLP/3-Translation-Sentiment/README.md", + "language_code": "pt-BR" + }, + "6-NLP/3-Translation-Sentiment/assignment.md": { + "original_hash": "9d2a734deb904caff310d1a999c6bd7a", + "translation_date": "2025-08-29T22:38:26+00:00", + "source_file": "6-NLP/3-Translation-Sentiment/assignment.md", + "language_code": "pt-BR" + }, + "6-NLP/3-Translation-Sentiment/solution/Julia/README.md": { + "original_hash": "a39c15d63f3b2795ee2284a82b986b93", + "translation_date": "2025-08-29T22:39:07+00:00", + "source_file": "6-NLP/3-Translation-Sentiment/solution/Julia/README.md", + "language_code": "pt-BR" + }, + "6-NLP/3-Translation-Sentiment/solution/R/README.md": { + "original_hash": "81db6ff2cf6e62fbe2340b094bb9509e", + "translation_date": "2025-08-29T22:38:51+00:00", + "source_file": "6-NLP/3-Translation-Sentiment/solution/R/README.md", + "language_code": "pt-BR" + }, + "6-NLP/4-Hotel-Reviews-1/README.md": { + "original_hash": "8d32dadeda93c6fb5c43619854882ab1", + "translation_date": "2025-09-04T21:44:36+00:00", + "source_file": "6-NLP/4-Hotel-Reviews-1/README.md", + "language_code": "pt-BR" + }, + "6-NLP/4-Hotel-Reviews-1/assignment.md": { + "original_hash": "bf39bceb833cd628f224941dca8041df", + "translation_date": "2025-08-29T22:29:04+00:00", + "source_file": "6-NLP/4-Hotel-Reviews-1/assignment.md", + "language_code": "pt-BR" + }, + "6-NLP/4-Hotel-Reviews-1/solution/Julia/README.md": { + "original_hash": "a39c15d63f3b2795ee2284a82b986b93", + "translation_date": "2025-08-29T22:29:42+00:00", + "source_file": "6-NLP/4-Hotel-Reviews-1/solution/Julia/README.md", + "language_code": "pt-BR" + }, + "6-NLP/4-Hotel-Reviews-1/solution/R/README.md": { + "original_hash": "81db6ff2cf6e62fbe2340b094bb9509e", + "translation_date": "2025-08-29T22:29:24+00:00", + "source_file": "6-NLP/4-Hotel-Reviews-1/solution/R/README.md", + "language_code": "pt-BR" + }, + "6-NLP/5-Hotel-Reviews-2/README.md": { + "original_hash": "2c742993fe95d5bcbb2846eda3d442a1", + "translation_date": "2025-09-04T21:47:17+00:00", + "source_file": "6-NLP/5-Hotel-Reviews-2/README.md", + "language_code": "pt-BR" + }, + "6-NLP/5-Hotel-Reviews-2/assignment.md": { + "original_hash": "daf144daa552da6a7d442aff6f3e77d8", + "translation_date": "2025-08-29T22:43:47+00:00", + "source_file": "6-NLP/5-Hotel-Reviews-2/assignment.md", + "language_code": "pt-BR" + }, + "6-NLP/5-Hotel-Reviews-2/solution/Julia/README.md": { + "original_hash": "a39c15d63f3b2795ee2284a82b986b93", + "translation_date": "2025-08-29T22:44:24+00:00", + "source_file": "6-NLP/5-Hotel-Reviews-2/solution/Julia/README.md", + "language_code": "pt-BR" + }, + "6-NLP/5-Hotel-Reviews-2/solution/R/README.md": { + "original_hash": "81db6ff2cf6e62fbe2340b094bb9509e", + "translation_date": "2025-08-29T22:44:08+00:00", + "source_file": "6-NLP/5-Hotel-Reviews-2/solution/R/README.md", + "language_code": "pt-BR" + }, + "6-NLP/README.md": { + "original_hash": "1eb379dc2d0c9940b320732d16083778", + "translation_date": "2025-08-29T22:17:54+00:00", + "source_file": "6-NLP/README.md", + "language_code": "pt-BR" + }, + "6-NLP/data/README.md": { + "original_hash": "ee0670655c89e4719319764afb113624", + "translation_date": "2025-08-29T22:30:00+00:00", + "source_file": "6-NLP/data/README.md", + "language_code": "pt-BR" + }, + "7-TimeSeries/1-Introduction/README.md": { + "original_hash": "662b509c39eee205687726636d0a8455", + "translation_date": "2025-09-04T21:27:37+00:00", + "source_file": "7-TimeSeries/1-Introduction/README.md", + "language_code": "pt-BR" + }, + "7-TimeSeries/1-Introduction/assignment.md": { + "original_hash": "d1781b0b92568ea1d119d0a198b576b4", + "translation_date": "2025-08-29T20:48:05+00:00", + "source_file": "7-TimeSeries/1-Introduction/assignment.md", + "language_code": "pt-BR" + }, + "7-TimeSeries/1-Introduction/solution/Julia/README.md": { + "original_hash": "a39c15d63f3b2795ee2284a82b986b93", + "translation_date": "2025-08-29T20:48:45+00:00", + "source_file": "7-TimeSeries/1-Introduction/solution/Julia/README.md", + "language_code": "pt-BR" + }, + "7-TimeSeries/1-Introduction/solution/R/README.md": { + "original_hash": "81db6ff2cf6e62fbe2340b094bb9509e", + "translation_date": "2025-08-29T20:48:28+00:00", + "source_file": "7-TimeSeries/1-Introduction/solution/R/README.md", + "language_code": "pt-BR" + }, + "7-TimeSeries/2-ARIMA/README.md": { + "original_hash": "917dbf890db71a322f306050cb284749", + "translation_date": "2025-09-04T21:26:37+00:00", + "source_file": "7-TimeSeries/2-ARIMA/README.md", + "language_code": "pt-BR" + }, + "7-TimeSeries/2-ARIMA/assignment.md": { + "original_hash": "1c814013e10866dfd92cdb32caaae3ac", + "translation_date": "2025-08-29T20:43:12+00:00", + "source_file": "7-TimeSeries/2-ARIMA/assignment.md", + "language_code": "pt-BR" + }, + "7-TimeSeries/2-ARIMA/solution/Julia/README.md": { + "original_hash": "a39c15d63f3b2795ee2284a82b986b93", + "translation_date": "2025-08-29T20:43:57+00:00", + "source_file": "7-TimeSeries/2-ARIMA/solution/Julia/README.md", + "language_code": "pt-BR" + }, + "7-TimeSeries/2-ARIMA/solution/R/README.md": { + "original_hash": "81db6ff2cf6e62fbe2340b094bb9509e", + "translation_date": "2025-08-29T20:43:34+00:00", + "source_file": "7-TimeSeries/2-ARIMA/solution/R/README.md", + "language_code": "pt-BR" + }, + "7-TimeSeries/3-SVR/README.md": { + "original_hash": "482bccabe1df958496ea71a3667995cd", + "translation_date": "2025-09-04T21:28:28+00:00", + "source_file": "7-TimeSeries/3-SVR/README.md", + "language_code": "pt-BR" + }, + "7-TimeSeries/3-SVR/assignment.md": { + "original_hash": "94aa2fc6154252ae30a3f3740299707a", + "translation_date": "2025-08-29T20:51:43+00:00", + "source_file": "7-TimeSeries/3-SVR/assignment.md", + "language_code": "pt-BR" + }, + "7-TimeSeries/README.md": { + "original_hash": "61342603bad8acadbc6b2e4e3aab3f66", + "translation_date": "2025-08-29T20:38:37+00:00", + "source_file": "7-TimeSeries/README.md", + "language_code": "pt-BR" + }, + "8-Reinforcement/1-QLearning/README.md": { + "original_hash": "911efd5e595089000cb3c16fce1beab8", + "translation_date": "2025-09-04T21:42:23+00:00", + "source_file": "8-Reinforcement/1-QLearning/README.md", + "language_code": "pt-BR" + }, + "8-Reinforcement/1-QLearning/assignment.md": { + "original_hash": "68394b2102d3503882e5e914bd0ff5c1", + "translation_date": "2025-08-29T22:10:51+00:00", + "source_file": "8-Reinforcement/1-QLearning/assignment.md", + "language_code": "pt-BR" + }, + "8-Reinforcement/1-QLearning/solution/Julia/README.md": { + "original_hash": "a39c15d63f3b2795ee2284a82b986b93", + "translation_date": "2025-08-29T22:11:50+00:00", + "source_file": "8-Reinforcement/1-QLearning/solution/Julia/README.md", + "language_code": "pt-BR" + }, + "8-Reinforcement/1-QLearning/solution/R/README.md": { + "original_hash": "81db6ff2cf6e62fbe2340b094bb9509e", + "translation_date": "2025-08-29T22:11:34+00:00", + "source_file": "8-Reinforcement/1-QLearning/solution/R/README.md", + "language_code": "pt-BR" + }, + "8-Reinforcement/2-Gym/README.md": { + "original_hash": "107d5bb29da8a562e7ae72262d251a75", + "translation_date": "2025-09-04T21:43:14+00:00", + "source_file": "8-Reinforcement/2-Gym/README.md", + "language_code": "pt-BR" + }, + "8-Reinforcement/2-Gym/assignment.md": { + "original_hash": "1f2b7441745eb52e25745423b247016b", + "translation_date": "2025-08-29T22:16:29+00:00", + "source_file": "8-Reinforcement/2-Gym/assignment.md", + "language_code": "pt-BR" + }, + "8-Reinforcement/2-Gym/solution/Julia/README.md": { + "original_hash": "a39c15d63f3b2795ee2284a82b986b93", + "translation_date": "2025-08-29T22:17:19+00:00", + "source_file": "8-Reinforcement/2-Gym/solution/Julia/README.md", + "language_code": "pt-BR" + }, + "8-Reinforcement/2-Gym/solution/R/README.md": { + "original_hash": "81db6ff2cf6e62fbe2340b094bb9509e", + "translation_date": "2025-08-29T22:17:02+00:00", + "source_file": "8-Reinforcement/2-Gym/solution/R/README.md", + "language_code": "pt-BR" + }, + "8-Reinforcement/README.md": { + "original_hash": "20ca019012b1725de956681d036d8b18", + "translation_date": "2025-08-29T22:02:32+00:00", + "source_file": "8-Reinforcement/README.md", + "language_code": "pt-BR" + }, + "9-Real-World/1-Applications/README.md": { + "original_hash": "83320d6b6994909e35d830cebf214039", + "translation_date": "2025-09-04T21:31:29+00:00", + "source_file": "9-Real-World/1-Applications/README.md", + "language_code": "pt-BR" + }, + "9-Real-World/1-Applications/assignment.md": { + "original_hash": "fdebfcd0a3f12c9e2b436ded1aa79885", + "translation_date": "2025-08-29T21:14:07+00:00", + "source_file": "9-Real-World/1-Applications/assignment.md", + "language_code": "pt-BR" + }, + "9-Real-World/2-Debugging-ML-Models/README.md": { + "original_hash": "df2b538e8fbb3e91cf0419ae2f858675", + "translation_date": "2025-09-04T21:32:46+00:00", + "source_file": "9-Real-World/2-Debugging-ML-Models/README.md", + "language_code": "pt-BR" + }, + "9-Real-World/2-Debugging-ML-Models/assignment.md": { + "original_hash": "91c6a180ef08e20cc15acfd2d6d6e164", + "translation_date": "2025-08-29T21:18:53+00:00", + "source_file": "9-Real-World/2-Debugging-ML-Models/assignment.md", + "language_code": "pt-BR" + }, + "9-Real-World/README.md": { + "original_hash": "5e069a0ac02a9606a69946c2b3c574a9", + "translation_date": "2025-08-29T21:09:28+00:00", + "source_file": "9-Real-World/README.md", + "language_code": "pt-BR" + }, + "AGENTS.md": { + "original_hash": "93fdaa0fd38836e50c4793e2f2f25e8b", + "translation_date": "2025-10-03T11:06:33+00:00", + "source_file": "AGENTS.md", + "language_code": "pt-BR" + }, + "CODE_OF_CONDUCT.md": { + "original_hash": "c06b12caf3c901eb3156e3dd5b0aea56", + "translation_date": "2025-08-29T20:12:34+00:00", + "source_file": "CODE_OF_CONDUCT.md", + "language_code": "pt-BR" + }, + "CONTRIBUTING.md": { + "original_hash": "977ec5266dfd78ad1ce2bd8d46fccbda", + "translation_date": "2025-08-29T20:10:18+00:00", + "source_file": "CONTRIBUTING.md", + "language_code": "pt-BR" + }, + "README.md": { + "original_hash": "da2ceed62f16a0820259556e3a873c95", + "translation_date": "2026-01-29T18:20:17+00:00", + "source_file": "README.md", + "language_code": "pt-BR" + }, + "SECURITY.md": { + "original_hash": "5e1b8da31aae9cca3d53ad243fa3365a", + "translation_date": "2025-08-29T20:11:06+00:00", + "source_file": "SECURITY.md", + "language_code": "pt-BR" + }, + "SUPPORT.md": { + "original_hash": "09623d7343ff1c26ff4f198c1b2d3176", + "translation_date": "2025-10-03T11:57:42+00:00", + "source_file": "SUPPORT.md", + "language_code": "pt-BR" + }, + "TROUBLESHOOTING.md": { + "original_hash": "134d8759f0e2ab886e9aa4f62362c201", + "translation_date": "2025-10-03T12:44:07+00:00", + "source_file": "TROUBLESHOOTING.md", + "language_code": "pt-BR" + }, + "docs/_sidebar.md": { + "original_hash": "68dd06c685f6ce840e0acfa313352e7c", + "translation_date": "2025-08-29T21:08:41+00:00", + "source_file": "docs/_sidebar.md", + "language_code": "pt-BR" + }, + "for-teachers.md": { + "original_hash": "b37de02054fa6c0438ede6fabe1fdfb8", + "translation_date": "2025-08-29T20:11:59+00:00", + "source_file": "for-teachers.md", + "language_code": "pt-BR" + }, + "quiz-app/README.md": { + "original_hash": "6d130dffca5db70d7e615f926cb1ad4c", + "translation_date": "2025-08-29T21:39:09+00:00", + "source_file": "quiz-app/README.md", + "language_code": "pt-BR" + }, + "sketchnotes/LICENSE.md": { + "original_hash": "fba3b94d88bfb9b81369b869a1e9a20f", + "translation_date": "2025-08-29T21:59:36+00:00", + "source_file": "sketchnotes/LICENSE.md", + "language_code": "pt-BR" + }, + "sketchnotes/README.md": { + "original_hash": "a88d5918c1b9da69a40d917a0840c497", + "translation_date": "2025-08-29T21:54:55+00:00", + "source_file": "sketchnotes/README.md", + "language_code": "pt-BR" + } +} \ No newline at end of file diff --git a/translations/pt-BR/1-Introduction/1-intro-to-ML/README.md b/translations/pt-BR/1-Introduction/1-intro-to-ML/README.md new file mode 100644 index 000000000..eefa4d68b --- /dev/null +++ b/translations/pt-BR/1-Introduction/1-intro-to-ML/README.md @@ -0,0 +1,150 @@ +# Introdução ao aprendizado de máquina + +## [Quiz pré-aula](https://ff-quizzes.netlify.app/en/ml/) + +--- + +[![ML para iniciantes - Introdução ao Aprendizado de Máquina para Iniciantes](https://img.youtube.com/vi/6mSx_KJxcHI/0.jpg)](https://youtu.be/6mSx_KJxcHI "ML para iniciantes - Introdução ao Aprendizado de Máquina para Iniciantes") + +> 🎥 Clique na imagem acima para assistir a um vídeo curto sobre esta lição. + +Bem-vindo a este curso sobre aprendizado de máquina clássico para iniciantes! Seja você completamente novo neste tópico ou um praticante experiente de ML buscando revisar alguma área, estamos felizes em tê-lo conosco! Queremos criar um ponto de partida amigável para seus estudos de ML e ficaremos felizes em avaliar, responder e incorporar seu [feedback](https://github.com/microsoft/ML-For-Beginners/discussions). + +[![Introdução ao ML](https://img.youtube.com/vi/h0e2HAPTGF4/0.jpg)](https://youtu.be/h0e2HAPTGF4 "Introdução ao ML") + +> 🎥 Clique na imagem acima para assistir a um vídeo: John Guttag do MIT apresenta aprendizado de máquina. + +--- +## Começando com aprendizado de máquina + +Antes de começar com este currículo, você precisa configurar seu computador e estar pronto para executar notebooks localmente. + +- **Configure sua máquina com estes vídeos**. Use os links a seguir para aprender [como instalar Python](https://youtu.be/CXZYvNRIAKM) no seu sistema e [configurar um editor de texto](https://youtu.be/EU8eayHWoZg) para desenvolvimento. +- **Aprenda Python**. Também é recomendado ter um entendimento básico de [Python](https://docs.microsoft.com/learn/paths/python-language/?WT.mc_id=academic-77952-leestott), uma linguagem de programação útil para cientistas de dados que utilizamos neste curso. +- **Aprenda Node.js e JavaScript**. Também utilizamos JavaScript algumas vezes neste curso ao construir aplicativos web, então você precisará ter [node](https://nodejs.org) e [npm](https://www.npmjs.com/) instalados, além de [Visual Studio Code](https://code.visualstudio.com/) disponível para desenvolvimento em Python e JavaScript. +- **Crie uma conta no GitHub**. Já que você nos encontrou aqui no [GitHub](https://github.com), talvez já tenha uma conta, mas se não, crie uma e depois faça um fork deste currículo para usar por conta própria. (Sinta-se à vontade para nos dar uma estrela também 😊) +- **Explore o Scikit-learn**. Familiarize-se com [Scikit-learn](https://scikit-learn.org/stable/user_guide.html), um conjunto de bibliotecas de ML que referenciamos nestas lições. + +--- +## O que é aprendizado de máquina? + +O termo 'aprendizado de máquina' é um dos mais populares e frequentemente usados atualmente. Existe uma possibilidade não trivial de que você já tenha ouvido este termo pelo menos uma vez, caso tenha algum tipo de familiaridade com tecnologia, independentemente da área em que trabalha. No entanto, a mecânica do aprendizado de máquina é um mistério para a maioria das pessoas. Para um iniciante em aprendizado de máquina, o assunto pode às vezes parecer intimidante. Portanto, é importante entender o que realmente é aprendizado de máquina e aprender sobre ele passo a passo, por meio de exemplos práticos. + +--- +## A curva de hype + +![ml hype curve](../../../../1-Introduction/1-intro-to-ML/images/hype.png) + +> O Google Trends mostra a recente 'curva de hype' do termo 'aprendizado de máquina' + +--- +## Um universo misterioso + +Vivemos em um universo cheio de mistérios fascinantes. Grandes cientistas como Stephen Hawking, Albert Einstein e muitos outros dedicaram suas vidas à busca de informações significativas que desvendassem os mistérios do mundo ao nosso redor. Esta é a condição humana de aprender: uma criança humana aprende coisas novas e descobre a estrutura de seu mundo ano após ano enquanto cresce até a idade adulta. + +--- +## O cérebro da criança + +O cérebro e os sentidos de uma criança percebem os fatos ao seu redor e gradualmente aprendem os padrões ocultos da vida, que ajudam a criança a criar regras lógicas para identificar padrões aprendidos. O processo de aprendizado do cérebro humano torna os humanos as criaturas mais sofisticadas deste mundo. Aprender continuamente, descobrindo padrões ocultos e depois inovando com base nesses padrões, nos permite melhorar continuamente ao longo de nossas vidas. Essa capacidade de aprendizado e evolução está relacionada a um conceito chamado [plasticidade cerebral](https://www.simplypsychology.org/brain-plasticity.html). Superficialmente, podemos traçar algumas semelhanças motivacionais entre o processo de aprendizado do cérebro humano e os conceitos de aprendizado de máquina. + +--- +## O cérebro humano + +O [cérebro humano](https://www.livescience.com/29365-human-brain.html) percebe coisas do mundo real, processa as informações percebidas, toma decisões racionais e realiza certas ações com base nas circunstâncias. Isso é o que chamamos de comportamento inteligente. Quando programamos uma réplica do processo de comportamento inteligente em uma máquina, isso é chamado de inteligência artificial (IA). + +--- +## Alguns termos + +Embora os termos possam ser confundidos, aprendizado de máquina (ML) é um subconjunto importante da inteligência artificial. **ML está relacionado ao uso de algoritmos especializados para descobrir informações significativas e encontrar padrões ocultos a partir de dados percebidos, corroborando o processo de tomada de decisão racional**. + +--- +## IA, ML, Aprendizado Profundo + +![AI, ML, deep learning, data science](../../../../1-Introduction/1-intro-to-ML/images/ai-ml-ds.png) + +> Um diagrama mostrando as relações entre IA, ML, aprendizado profundo e ciência de dados. Infográfico por [Jen Looper](https://twitter.com/jenlooper) inspirado por [este gráfico](https://softwareengineering.stackexchange.com/questions/366996/distinction-between-ai-ml-neural-networks-deep-learning-and-data-mining) + +--- +## Conceitos abordados + +Neste currículo, vamos abordar apenas os conceitos principais de aprendizado de máquina que um iniciante deve conhecer. Abordamos o que chamamos de 'aprendizado de máquina clássico', principalmente usando Scikit-learn, uma excelente biblioteca que muitos estudantes utilizam para aprender o básico. Para entender conceitos mais amplos de inteligência artificial ou aprendizado profundo, um conhecimento fundamental sólido de aprendizado de máquina é indispensável, e é isso que queremos oferecer aqui. + +--- +## Neste curso você aprenderá: + +- conceitos principais de aprendizado de máquina +- a história do ML +- ML e justiça +- técnicas de regressão em ML +- técnicas de classificação em ML +- técnicas de agrupamento em ML +- técnicas de processamento de linguagem natural em ML +- técnicas de previsão de séries temporais em ML +- aprendizado por reforço +- aplicações reais de ML + +--- +## O que não abordaremos + +- aprendizado profundo +- redes neurais +- IA + +Para proporcionar uma melhor experiência de aprendizado, evitaremos as complexidades de redes neurais, 'aprendizado profundo' - construção de modelos com muitas camadas usando redes neurais - e IA, que discutiremos em um currículo diferente. Também ofereceremos um futuro currículo de ciência de dados para focar nesse aspecto deste campo maior. + +--- +## Por que estudar aprendizado de máquina? + +Aprendizado de máquina, de uma perspectiva de sistemas, é definido como a criação de sistemas automatizados que podem aprender padrões ocultos a partir de dados para ajudar na tomada de decisões inteligentes. + +Essa motivação é vagamente inspirada por como o cérebro humano aprende certas coisas com base nos dados que percebe do mundo exterior. + +✅ Pense por um momento por que uma empresa gostaria de usar estratégias de aprendizado de máquina em vez de criar um mecanismo baseado em regras codificadas. + +--- +## Aplicações do aprendizado de máquina + +As aplicações do aprendizado de máquina estão agora quase em todos os lugares e são tão onipresentes quanto os dados que circulam em nossas sociedades, gerados por nossos smartphones, dispositivos conectados e outros sistemas. Considerando o imenso potencial dos algoritmos de aprendizado de máquina de última geração, pesquisadores têm explorado sua capacidade de resolver problemas reais multidimensionais e multidisciplinares com ótimos resultados positivos. + +--- +## Exemplos de ML aplicado + +**Você pode usar aprendizado de máquina de várias maneiras**: + +- Para prever a probabilidade de uma doença com base no histórico médico ou relatórios de um paciente. +- Para aproveitar dados meteorológicos e prever eventos climáticos. +- Para entender o sentimento de um texto. +- Para detectar notícias falsas e impedir a propagação de propaganda. + +Finanças, economia, ciência da terra, exploração espacial, engenharia biomédica, ciência cognitiva e até mesmo áreas das humanidades têm adaptado o aprendizado de máquina para resolver os problemas árduos e pesados em processamento de dados de seus domínios. + +--- +## Conclusão + +O aprendizado de máquina automatiza o processo de descoberta de padrões ao encontrar insights significativos a partir de dados reais ou gerados. Ele tem se mostrado altamente valioso em aplicações de negócios, saúde e finanças, entre outras. + +No futuro próximo, entender os fundamentos do aprendizado de máquina será essencial para pessoas de qualquer área devido à sua ampla adoção. + +--- +# 🚀 Desafio + +Desenhe, no papel ou usando um aplicativo online como [Excalidraw](https://excalidraw.com/), sua compreensão das diferenças entre IA, ML, aprendizado profundo e ciência de dados. Adicione algumas ideias de problemas que cada uma dessas técnicas é boa em resolver. + +# [Quiz pós-aula](https://ff-quizzes.netlify.app/en/ml/) + +--- +# Revisão e Autoestudo + +Para aprender mais sobre como trabalhar com algoritmos de ML na nuvem, siga este [Caminho de Aprendizado](https://docs.microsoft.com/learn/paths/create-no-code-predictive-models-azure-machine-learning/?WT.mc_id=academic-77952-leestott). + +Faça um [Caminho de Aprendizado](https://docs.microsoft.com/learn/modules/introduction-to-machine-learning/?WT.mc_id=academic-77952-leestott) sobre os fundamentos de ML. + +--- +# Tarefa + +[Prepare-se e comece](assignment.md) + +--- + +**Aviso Legal**: +Este documento foi traduzido utilizando o serviço de tradução por IA [Co-op Translator](https://github.com/Azure/co-op-translator). Embora nos esforcemos para garantir a precisão, esteja ciente de que traduções automatizadas podem conter erros ou imprecisões. O documento original em seu idioma nativo deve ser considerado a fonte autoritativa. Para informações críticas, recomenda-se a tradução profissional realizada por humanos. Não nos responsabilizamos por quaisquer mal-entendidos ou interpretações equivocadas decorrentes do uso desta tradução. \ No newline at end of file diff --git a/translations/pt-BR/1-Introduction/1-intro-to-ML/assignment.md b/translations/pt-BR/1-Introduction/1-intro-to-ML/assignment.md new file mode 100644 index 000000000..28fcb84e3 --- /dev/null +++ b/translations/pt-BR/1-Introduction/1-intro-to-ML/assignment.md @@ -0,0 +1,14 @@ +# Comece a Trabalhar + +## Instruções + +Nesta atividade não avaliada, você deve revisar seus conhecimentos em Python e configurar seu ambiente para executar notebooks. + +Siga este [Caminho de Aprendizado em Python](https://docs.microsoft.com/learn/paths/python-language/?WT.mc_id=academic-77952-leestott) e, em seguida, configure seus sistemas assistindo a estes vídeos introdutórios: + +https://www.youtube.com/playlist?list=PLlrxD0HtieHhS8VzuMCfQD4uJ9yne1mE6 + +--- + +**Aviso Legal**: +Este documento foi traduzido utilizando o serviço de tradução por IA [Co-op Translator](https://github.com/Azure/co-op-translator). Embora nos esforcemos para garantir a precisão, esteja ciente de que traduções automatizadas podem conter erros ou imprecisões. O documento original em seu idioma nativo deve ser considerado a fonte autoritativa. Para informações críticas, recomenda-se a tradução profissional realizada por humanos. Não nos responsabilizamos por quaisquer mal-entendidos ou interpretações equivocadas decorrentes do uso desta tradução. \ No newline at end of file diff --git a/translations/pt-BR/1-Introduction/2-history-of-ML/README.md b/translations/pt-BR/1-Introduction/2-history-of-ML/README.md new file mode 100644 index 000000000..586650dcb --- /dev/null +++ b/translations/pt-BR/1-Introduction/2-history-of-ML/README.md @@ -0,0 +1,155 @@ +# História do aprendizado de máquina + +![Resumo da história do aprendizado de máquina em um sketchnote](../../../../sketchnotes/ml-history.png) +> Sketchnote por [Tomomi Imura](https://www.twitter.com/girlie_mac) + +## [Quiz pré-aula](https://ff-quizzes.netlify.app/en/ml/) + +--- + +[![ML para iniciantes - História do aprendizado de máquina](https://img.youtube.com/vi/N6wxM4wZ7V0/0.jpg)](https://youtu.be/N6wxM4wZ7V0 "ML para iniciantes - História do aprendizado de máquina") + +> 🎥 Clique na imagem acima para assistir a um vídeo curto sobre esta lição. + +Nesta lição, vamos explorar os principais marcos na história do aprendizado de máquina e da inteligência artificial. + +A história da inteligência artificial (IA) como campo está entrelaçada com a história do aprendizado de máquina, já que os algoritmos e avanços computacionais que sustentam o aprendizado de máquina contribuíram para o desenvolvimento da IA. É útil lembrar que, embora esses campos como áreas distintas de estudo tenham começado a se cristalizar na década de 1950, importantes [descobertas algorítmicas, estatísticas, matemáticas, computacionais e técnicas](https://wikipedia.org/wiki/Timeline_of_machine_learning) precederam e se sobrepuseram a essa era. Na verdade, as pessoas têm pensado sobre essas questões por [centenas de anos](https://wikipedia.org/wiki/History_of_artificial_intelligence): este artigo discute as bases intelectuais históricas da ideia de uma 'máquina pensante'. + +--- +## Descobertas notáveis + +- 1763, 1812 [Teorema de Bayes](https://wikipedia.org/wiki/Bayes%27_theorem) e seus predecessores. Este teorema e suas aplicações fundamentam a inferência, descrevendo a probabilidade de um evento ocorrer com base em conhecimento prévio. +- 1805 [Teoria dos Mínimos Quadrados](https://wikipedia.org/wiki/Least_squares) pelo matemático francês Adrien-Marie Legendre. Esta teoria, que você aprenderá em nossa unidade de regressão, ajuda no ajuste de dados. +- 1913 [Cadeias de Markov](https://wikipedia.org/wiki/Markov_chain), nomeadas em homenagem ao matemático russo Andrey Markov, são usadas para descrever uma sequência de eventos possíveis com base em um estado anterior. +- 1957 [Perceptron](https://wikipedia.org/wiki/Perceptron) é um tipo de classificador linear inventado pelo psicólogo americano Frank Rosenblatt que fundamenta avanços em aprendizado profundo. + +--- + +- 1967 [Vizinho Mais Próximo](https://wikipedia.org/wiki/Nearest_neighbor) é um algoritmo originalmente projetado para mapear rotas. No contexto de aprendizado de máquina, é usado para detectar padrões. +- 1970 [Retropropagação](https://wikipedia.org/wiki/Backpropagation) é usada para treinar [redes neurais feedforward](https://wikipedia.org/wiki/Feedforward_neural_network). +- 1982 [Redes Neurais Recorrentes](https://wikipedia.org/wiki/Recurrent_neural_network) são redes neurais artificiais derivadas de redes neurais feedforward que criam gráficos temporais. + +✅ Faça uma pequena pesquisa. Quais outras datas se destacam como marcos na história do aprendizado de máquina e da IA? + +--- +## 1950: Máquinas que pensam + +Alan Turing, uma pessoa verdadeiramente notável que foi eleito [pelo público em 2019](https://wikipedia.org/wiki/Icons:_The_Greatest_Person_of_the_20th_Century) como o maior cientista do século 20, é creditado por ajudar a estabelecer as bases para o conceito de uma 'máquina que pode pensar'. Ele enfrentou críticos e sua própria necessidade de evidências empíricas desse conceito, em parte, criando o [Teste de Turing](https://www.bbc.com/news/technology-18475646), que você explorará em nossas lições de PLN. + +--- +## 1956: Projeto de Pesquisa de Verão em Dartmouth + +"O Projeto de Pesquisa de Verão em Dartmouth sobre inteligência artificial foi um evento seminal para a inteligência artificial como campo", e foi aqui que o termo 'inteligência artificial' foi cunhado ([fonte](https://250.dartmouth.edu/highlights/artificial-intelligence-ai-coined-dartmouth)). + +> Todo aspecto de aprendizado ou qualquer outra característica da inteligência pode, em princípio, ser descrito tão precisamente que uma máquina pode ser feita para simulá-lo. + +--- + +O pesquisador principal, o professor de matemática John McCarthy, esperava "prosseguir com base na conjectura de que todo aspecto de aprendizado ou qualquer outra característica da inteligência pode, em princípio, ser descrito tão precisamente que uma máquina pode ser feita para simulá-lo." Os participantes incluíram outro grande nome do campo, Marvin Minsky. + +O workshop é creditado por ter iniciado e incentivado várias discussões, incluindo "a ascensão de métodos simbólicos, sistemas focados em domínios limitados (primeiros sistemas especialistas) e sistemas dedutivos versus sistemas indutivos." ([fonte](https://wikipedia.org/wiki/Dartmouth_workshop)). + +--- +## 1956 - 1974: "Os anos dourados" + +Dos anos 1950 até meados dos anos 70, o otimismo era alto na esperança de que a IA pudesse resolver muitos problemas. Em 1967, Marvin Minsky afirmou confiantemente que "Dentro de uma geração... o problema de criar 'inteligência artificial' será substancialmente resolvido." (Minsky, Marvin (1967), Computation: Finite and Infinite Machines, Englewood Cliffs, N.J.: Prentice-Hall) + +Pesquisas em processamento de linguagem natural floresceram, buscas foram refinadas e tornadas mais poderosas, e o conceito de 'micro-mundos' foi criado, onde tarefas simples eram realizadas usando instruções em linguagem comum. + +--- + +A pesquisa foi bem financiada por agências governamentais, avanços foram feitos em computação e algoritmos, e protótipos de máquinas inteligentes foram construídos. Algumas dessas máquinas incluem: + +* [Shakey, o robô](https://wikipedia.org/wiki/Shakey_the_robot), que podia se mover e decidir como realizar tarefas 'inteligentemente'. + + ![Shakey, um robô inteligente](../../../../1-Introduction/2-history-of-ML/images/shakey.jpg) + > Shakey em 1972 + +--- + +* Eliza, um dos primeiros 'chatterbots', podia conversar com pessoas e agir como um 'terapeuta' primitivo. Você aprenderá mais sobre Eliza nas lições de PLN. + + ![Eliza, um bot](../../../../1-Introduction/2-history-of-ML/images/eliza.png) + > Uma versão de Eliza, um chatbot + +--- + +* "Blocks world" foi um exemplo de micro-mundo onde blocos podiam ser empilhados e organizados, e experimentos em ensinar máquinas a tomar decisões podiam ser testados. Avanços construídos com bibliotecas como [SHRDLU](https://wikipedia.org/wiki/SHRDLU) ajudaram a impulsionar o processamento de linguagem. + + [![blocks world com SHRDLU](https://img.youtube.com/vi/QAJz4YKUwqw/0.jpg)](https://www.youtube.com/watch?v=QAJz4YKUwqw "blocks world com SHRDLU") + + > 🎥 Clique na imagem acima para assistir a um vídeo: Blocks world com SHRDLU + +--- +## 1974 - 1980: "Inverno da IA" + +Por volta de meados dos anos 1970, tornou-se evidente que a complexidade de criar 'máquinas inteligentes' havia sido subestimada e que sua promessa, dada a capacidade computacional disponível, havia sido exagerada. O financiamento secou e a confiança no campo diminuiu. Alguns problemas que impactaram a confiança incluíram: +--- +- **Limitações**. A capacidade computacional era muito limitada. +- **Explosão combinatória**. A quantidade de parâmetros necessários para treinamento cresceu exponencialmente à medida que mais era exigido dos computadores, sem uma evolução paralela da capacidade computacional. +- **Escassez de dados**. Havia uma escassez de dados que dificultava o processo de teste, desenvolvimento e refinamento de algoritmos. +- **Estamos fazendo as perguntas certas?**. As próprias perguntas que estavam sendo feitas começaram a ser questionadas. Pesquisadores começaram a enfrentar críticas sobre suas abordagens: + - Testes de Turing foram questionados por meio, entre outras ideias, da 'teoria da sala chinesa', que postulava que "programar um computador digital pode fazê-lo parecer entender a linguagem, mas não poderia produzir compreensão real." ([fonte](https://plato.stanford.edu/entries/chinese-room/)) + - A ética de introduzir inteligências artificiais como o "terapeuta" ELIZA na sociedade foi desafiada. + +--- + +Ao mesmo tempo, várias escolas de pensamento em IA começaram a se formar. Uma dicotomia foi estabelecida entre práticas de ["IA desleixada" vs. "IA organizada"](https://wikipedia.org/wiki/Neats_and_scruffies). Laboratórios _desleixados_ ajustavam programas por horas até obterem os resultados desejados. Laboratórios _organizados_ "focavam em lógica e resolução formal de problemas". ELIZA e SHRDLU eram sistemas _desleixados_ bem conhecidos. Nos anos 1980, à medida que surgiu a demanda por sistemas de aprendizado de máquina reproduzíveis, a abordagem _organizada_ gradualmente tomou a dianteira, pois seus resultados são mais explicáveis. + +--- +## Sistemas especialistas nos anos 1980 + +À medida que o campo crescia, seus benefícios para os negócios tornaram-se mais claros, e nos anos 1980 também ocorreu a proliferação de 'sistemas especialistas'. "Sistemas especialistas estavam entre as primeiras formas verdadeiramente bem-sucedidas de software de inteligência artificial (IA)." ([fonte](https://wikipedia.org/wiki/Expert_system)). + +Este tipo de sistema é na verdade _híbrido_, consistindo parcialmente de um motor de regras que define requisitos de negócios e um motor de inferência que utiliza o sistema de regras para deduzir novos fatos. + +Esta era também viu uma atenção crescente às redes neurais. + +--- +## 1987 - 1993: "Resfriamento da IA" + +A proliferação de hardware especializado para sistemas especialistas teve o efeito infeliz de se tornar muito especializado. O surgimento dos computadores pessoais também competiu com esses sistemas grandes, especializados e centralizados. A democratização da computação havia começado, e isso eventualmente abriu caminho para a explosão moderna de big data. + +--- +## 1993 - 2011 + +Este período viu uma nova era para o aprendizado de máquina e a IA, permitindo resolver alguns dos problemas causados anteriormente pela falta de dados e capacidade computacional. A quantidade de dados começou a aumentar rapidamente e se tornar mais amplamente disponível, para o bem e para o mal, especialmente com o advento do smartphone por volta de 2007. A capacidade computacional expandiu exponencialmente, e os algoritmos evoluíram junto. O campo começou a ganhar maturidade à medida que os dias livres do passado começaram a se cristalizar em uma verdadeira disciplina. + +--- +## Hoje + +Hoje, o aprendizado de máquina e a IA tocam quase todas as partes de nossas vidas. Esta era exige uma compreensão cuidadosa dos riscos e dos potenciais efeitos desses algoritmos na vida humana. Como Brad Smith, da Microsoft, afirmou: "A tecnologia da informação levanta questões que vão ao cerne das proteções fundamentais dos direitos humanos, como privacidade e liberdade de expressão. Essas questões aumentam a responsabilidade das empresas de tecnologia que criam esses produtos. Em nossa visão, elas também exigem uma regulamentação governamental cuidadosa e o desenvolvimento de normas sobre usos aceitáveis" ([fonte](https://www.technologyreview.com/2019/12/18/102365/the-future-of-ais-impact-on-society/)). + +--- + +Ainda não se sabe o que o futuro reserva, mas é importante entender esses sistemas computacionais e o software e os algoritmos que eles executam. Esperamos que este currículo ajude você a obter uma melhor compreensão para que possa decidir por si mesmo. + +[![A história do aprendizado profundo](https://img.youtube.com/vi/mTtDfKgLm54/0.jpg)](https://www.youtube.com/watch?v=mTtDfKgLm54 "A história do aprendizado profundo") +> 🎥 Clique na imagem acima para assistir a um vídeo: Yann LeCun discute a história do aprendizado profundo nesta palestra + +--- +## 🚀Desafio + +Aprofunde-se em um desses momentos históricos e aprenda mais sobre as pessoas por trás deles. Há personagens fascinantes, e nenhuma descoberta científica foi criada em um vácuo cultural. O que você descobre? + +## [Quiz pós-aula](https://ff-quizzes.netlify.app/en/ml/) + +--- +## Revisão e autoestudo + +Aqui estão itens para assistir e ouvir: + +[Este podcast onde Amy Boyd discute a evolução da IA](http://runasradio.com/Shows/Show/739) + +[![A história da IA por Amy Boyd](https://img.youtube.com/vi/EJt3_bFYKss/0.jpg)](https://www.youtube.com/watch?v=EJt3_bFYKss "A história da IA por Amy Boyd") + +--- + +## Tarefa + +[Criar uma linha do tempo](assignment.md) + +--- + +**Aviso Legal**: +Este documento foi traduzido utilizando o serviço de tradução por IA [Co-op Translator](https://github.com/Azure/co-op-translator). Embora nos esforcemos para garantir a precisão, esteja ciente de que traduções automatizadas podem conter erros ou imprecisões. O documento original em seu idioma nativo deve ser considerado a fonte autoritativa. Para informações críticas, recomenda-se a tradução profissional realizada por humanos. Não nos responsabilizamos por quaisquer mal-entendidos ou interpretações equivocadas decorrentes do uso desta tradução. \ No newline at end of file diff --git a/translations/pt-BR/1-Introduction/2-history-of-ML/assignment.md b/translations/pt-BR/1-Introduction/2-history-of-ML/assignment.md new file mode 100644 index 000000000..d8abb2e3b --- /dev/null +++ b/translations/pt-BR/1-Introduction/2-history-of-ML/assignment.md @@ -0,0 +1,16 @@ +# Criar uma linha do tempo + +## Instruções + +Usando [este repositório](https://github.com/Digital-Humanities-Toolkit/timeline-builder), crie uma linha do tempo sobre algum aspecto da história dos algoritmos, matemática, estatística, IA ou ML, ou uma combinação desses temas. Você pode focar em uma pessoa, uma ideia ou um longo período de pensamento. Certifique-se de adicionar elementos multimídia. + +## Rubrica + +| Critérios | Exemplares | Adequado | Precisa de Melhorias | +| --------- | -------------------------------------------------- | --------------------------------------- | ---------------------------------------------------------------- | +| | Uma linha do tempo implantada é apresentada como uma página do GitHub | O código está incompleto e não foi implantado | A linha do tempo está incompleta, não bem pesquisada e não foi implantada | + +--- + +**Aviso Legal**: +Este documento foi traduzido utilizando o serviço de tradução por IA [Co-op Translator](https://github.com/Azure/co-op-translator). Embora nos esforcemos para garantir a precisão, esteja ciente de que traduções automatizadas podem conter erros ou imprecisões. O documento original em seu idioma nativo deve ser considerado a fonte autoritativa. Para informações críticas, recomenda-se a tradução profissional realizada por humanos. Não nos responsabilizamos por quaisquer mal-entendidos ou interpretações equivocadas decorrentes do uso desta tradução. \ No newline at end of file diff --git a/translations/pt-BR/1-Introduction/3-fairness/README.md b/translations/pt-BR/1-Introduction/3-fairness/README.md new file mode 100644 index 000000000..3d4ffd423 --- /dev/null +++ b/translations/pt-BR/1-Introduction/3-fairness/README.md @@ -0,0 +1,161 @@ +# Construindo soluções de Machine Learning com IA responsável + +![Resumo de IA responsável em Machine Learning em um sketchnote](../../../../sketchnotes/ml-fairness.png) +> Sketchnote por [Tomomi Imura](https://www.twitter.com/girlie_mac) + +## [Quiz pré-aula](https://ff-quizzes.netlify.app/en/ml/) + +## Introdução + +Neste currículo, você começará a descobrir como o aprendizado de máquina pode impactar e já está impactando nossas vidas cotidianas. Atualmente, sistemas e modelos estão envolvidos em tarefas de tomada de decisão diária, como diagnósticos de saúde, aprovações de empréstimos ou detecção de fraudes. Por isso, é importante que esses modelos funcionem bem para fornecer resultados confiáveis. Assim como qualquer aplicação de software, sistemas de IA podem não atender às expectativas ou ter resultados indesejáveis. É por isso que é essencial entender e explicar o comportamento de um modelo de IA. + +Imagine o que pode acontecer quando os dados usados para construir esses modelos carecem de certos grupos demográficos, como raça, gênero, visão política, religião, ou representam esses grupos de forma desproporcional. E se a saída do modelo for interpretada de forma a favorecer algum grupo demográfico? Qual é a consequência para a aplicação? Além disso, o que acontece quando o modelo tem um resultado adverso e prejudica pessoas? Quem é responsável pelo comportamento dos sistemas de IA? Estas são algumas das questões que exploraremos neste currículo. + +Nesta lição, você irá: + +- Aumentar sua conscientização sobre a importância da equidade no aprendizado de máquina e os danos relacionados à falta de equidade. +- Familiarizar-se com a prática de explorar outliers e cenários incomuns para garantir confiabilidade e segurança. +- Compreender a necessidade de capacitar todos ao projetar sistemas inclusivos. +- Explorar como é vital proteger a privacidade e a segurança dos dados e das pessoas. +- Ver a importância de ter uma abordagem transparente para explicar o comportamento dos modelos de IA. +- Ser consciente de como a responsabilidade é essencial para construir confiança em sistemas de IA. + +## Pré-requisito + +Como pré-requisito, faça o "Caminho de Aprendizado sobre Princípios de IA Responsável" e assista ao vídeo abaixo sobre o tema: + +Saiba mais sobre IA Responsável seguindo este [Caminho de Aprendizado](https://docs.microsoft.com/learn/modules/responsible-ai-principles/?WT.mc_id=academic-77952-leestott) + +[![Abordagem da Microsoft para IA Responsável](https://img.youtube.com/vi/dnC8-uUZXSc/0.jpg)](https://youtu.be/dnC8-uUZXSc "Abordagem da Microsoft para IA Responsável") + +> 🎥 Clique na imagem acima para assistir ao vídeo: Abordagem da Microsoft para IA Responsável + +## Equidade + +Sistemas de IA devem tratar todos de forma justa e evitar afetar grupos semelhantes de pessoas de maneiras diferentes. Por exemplo, quando sistemas de IA fornecem orientações sobre tratamento médico, solicitações de empréstimos ou emprego, eles devem fazer as mesmas recomendações para todos com sintomas, circunstâncias financeiras ou qualificações profissionais semelhantes. Cada um de nós, como seres humanos, carrega preconceitos herdados que afetam nossas decisões e ações. Esses preconceitos podem estar evidentes nos dados que usamos para treinar sistemas de IA. Essa manipulação pode, às vezes, acontecer de forma não intencional. Muitas vezes, é difícil perceber conscientemente quando você está introduzindo preconceitos nos dados. + +**“Injustiça”** abrange impactos negativos, ou “danos”, para um grupo de pessoas, como aqueles definidos em termos de raça, gênero, idade ou status de deficiência. Os principais danos relacionados à equidade podem ser classificados como: + +- **Alocação**, quando, por exemplo, um gênero ou etnia é favorecido em detrimento de outro. +- **Qualidade do serviço**. Se você treinar os dados para um cenário específico, mas a realidade for muito mais complexa, isso leva a um serviço de desempenho ruim. Por exemplo, um dispensador de sabão que não consegue detectar pessoas com pele escura. [Referência](https://gizmodo.com/why-cant-this-soap-dispenser-identify-dark-skin-1797931773) +- **Denigração**. Criticar ou rotular algo ou alguém de forma injusta. Por exemplo, uma tecnologia de rotulagem de imagens que infamemente rotulou imagens de pessoas de pele escura como gorilas. +- **Super ou sub-representação**. A ideia de que um determinado grupo não é visto em uma certa profissão, e qualquer serviço ou função que continue promovendo isso está contribuindo para o dano. +- **Estereotipagem**. Associar um grupo específico a atributos pré-definidos. Por exemplo, um sistema de tradução entre inglês e turco pode ter imprecisões devido a palavras com associações estereotipadas de gênero. + +![tradução para turco](../../../../1-Introduction/3-fairness/images/gender-bias-translate-en-tr.png) +> tradução para turco + +![tradução de volta para inglês](../../../../1-Introduction/3-fairness/images/gender-bias-translate-tr-en.png) +> tradução de volta para inglês + +Ao projetar e testar sistemas de IA, precisamos garantir que a IA seja justa e não programada para tomar decisões tendenciosas ou discriminatórias, que também são proibidas para seres humanos. Garantir equidade em IA e aprendizado de máquina continua sendo um desafio sociotécnico complexo. + +### Confiabilidade e segurança + +Para construir confiança, sistemas de IA precisam ser confiáveis, seguros e consistentes em condições normais e inesperadas. É importante saber como os sistemas de IA se comportarão em uma variedade de situações, especialmente quando são casos extremos. Ao construir soluções de IA, é necessário um foco substancial em como lidar com uma ampla variedade de circunstâncias que as soluções de IA podem encontrar. Por exemplo, um carro autônomo precisa priorizar a segurança das pessoas. Como resultado, a IA que alimenta o carro precisa considerar todos os cenários possíveis que o carro pode enfrentar, como noite, tempestades, nevascas, crianças correndo pela rua, animais de estimação, construções na estrada, etc. Quão bem um sistema de IA pode lidar com uma ampla gama de condições de forma confiável e segura reflete o nível de antecipação que o cientista de dados ou desenvolvedor de IA considerou durante o design ou teste do sistema. + +> [🎥 Clique aqui para assistir ao vídeo: ](https://www.microsoft.com/videoplayer/embed/RE4vvIl) + +### Inclusão + +Sistemas de IA devem ser projetados para engajar e capacitar todos. Ao projetar e implementar sistemas de IA, cientistas de dados e desenvolvedores de IA identificam e abordam possíveis barreiras no sistema que poderiam excluir pessoas de forma não intencional. Por exemplo, existem 1 bilhão de pessoas com deficiência em todo o mundo. Com o avanço da IA, elas podem acessar uma ampla gama de informações e oportunidades mais facilmente em suas vidas diárias. Ao abordar as barreiras, cria-se oportunidades para inovar e desenvolver produtos de IA com melhores experiências que beneficiem todos. + +> [🎥 Clique aqui para assistir ao vídeo: inclusão em IA](https://www.microsoft.com/videoplayer/embed/RE4vl9v) + +### Segurança e privacidade + +Sistemas de IA devem ser seguros e respeitar a privacidade das pessoas. As pessoas têm menos confiança em sistemas que colocam sua privacidade, informações ou vidas em risco. Ao treinar modelos de aprendizado de máquina, dependemos de dados para produzir os melhores resultados. Ao fazer isso, a origem dos dados e sua integridade devem ser consideradas. Por exemplo, os dados foram enviados por usuários ou estão disponíveis publicamente? Além disso, ao trabalhar com os dados, é crucial desenvolver sistemas de IA que possam proteger informações confidenciais e resistir a ataques. À medida que a IA se torna mais prevalente, proteger a privacidade e garantir a segurança de informações pessoais e empresariais importantes está se tornando mais crítico e complexo. Questões de privacidade e segurança de dados exigem atenção especial para IA porque o acesso aos dados é essencial para que os sistemas de IA façam previsões e decisões precisas e informadas sobre as pessoas. + +> [🎥 Clique aqui para assistir ao vídeo: segurança em IA](https://www.microsoft.com/videoplayer/embed/RE4voJF) + +- Como indústria, fizemos avanços significativos em privacidade e segurança, impulsionados significativamente por regulamentações como o GDPR (Regulamento Geral de Proteção de Dados). +- No entanto, com sistemas de IA, devemos reconhecer a tensão entre a necessidade de mais dados pessoais para tornar os sistemas mais personalizados e eficazes – e a privacidade. +- Assim como com o nascimento de computadores conectados à internet, também estamos vendo um grande aumento no número de problemas de segurança relacionados à IA. +- Ao mesmo tempo, vimos a IA sendo usada para melhorar a segurança. Por exemplo, a maioria dos scanners antivírus modernos é alimentada por heurísticas de IA. +- Precisamos garantir que nossos processos de ciência de dados se harmonizem com as práticas mais recentes de privacidade e segurança. + +### Transparência + +Sistemas de IA devem ser compreensíveis. Uma parte crucial da transparência é explicar o comportamento dos sistemas de IA e seus componentes. Melhorar a compreensão dos sistemas de IA exige que as partes interessadas compreendam como e por que eles funcionam, para que possam identificar possíveis problemas de desempenho, preocupações de segurança e privacidade, preconceitos, práticas excludentes ou resultados indesejados. Também acreditamos que aqueles que usam sistemas de IA devem ser honestos e transparentes sobre quando, por que e como escolhem implantá-los, bem como sobre as limitações dos sistemas que utilizam. Por exemplo, se um banco usa um sistema de IA para apoiar suas decisões de empréstimos ao consumidor, é importante examinar os resultados e entender quais dados influenciam as recomendações do sistema. Governos estão começando a regulamentar a IA em diferentes indústrias, então cientistas de dados e organizações devem explicar se um sistema de IA atende aos requisitos regulatórios, especialmente quando há um resultado indesejável. + +> [🎥 Clique aqui para assistir ao vídeo: transparência em IA](https://www.microsoft.com/videoplayer/embed/RE4voJF) + +- Como os sistemas de IA são tão complexos, é difícil entender como eles funcionam e interpretar os resultados. +- Essa falta de compreensão afeta a forma como esses sistemas são gerenciados, operacionalizados e documentados. +- Mais importante ainda, essa falta de compreensão afeta as decisões tomadas com base nos resultados que esses sistemas produzem. + +### Responsabilidade + +As pessoas que projetam e implantam sistemas de IA devem ser responsáveis pelo funcionamento de seus sistemas. A necessidade de responsabilidade é particularmente crucial com tecnologias sensíveis, como reconhecimento facial. Recentemente, houve uma demanda crescente por tecnologia de reconhecimento facial, especialmente de organizações de aplicação da lei que veem o potencial da tecnologia em usos como encontrar crianças desaparecidas. No entanto, essas tecnologias podem ser usadas por um governo para colocar em risco as liberdades fundamentais de seus cidadãos, por exemplo, permitindo vigilância contínua de indivíduos específicos. Portanto, cientistas de dados e organizações precisam ser responsáveis pelo impacto de seus sistemas de IA sobre indivíduos ou a sociedade. + +[![Pesquisador líder em IA alerta sobre vigilância em massa por meio de reconhecimento facial](../../../../1-Introduction/3-fairness/images/accountability.png)](https://www.youtube.com/watch?v=Wldt8P5V6D0 "Abordagem da Microsoft para IA Responsável") + +> 🎥 Clique na imagem acima para assistir ao vídeo: Alertas sobre vigilância em massa por meio de reconhecimento facial + +No final, uma das maiores questões para nossa geração, como a primeira geração que está trazendo IA para a sociedade, é como garantir que os computadores permaneçam responsáveis perante as pessoas e como garantir que as pessoas que projetam computadores permaneçam responsáveis perante todos os outros. + +## Avaliação de impacto + +Antes de treinar um modelo de aprendizado de máquina, é importante realizar uma avaliação de impacto para entender o propósito do sistema de IA; qual é o uso pretendido; onde ele será implantado; e quem interagirá com o sistema. Essas informações são úteis para os revisores ou testadores avaliarem o sistema e saberem quais fatores considerar ao identificar riscos potenciais e consequências esperadas. + +As seguintes áreas devem ser focadas ao realizar uma avaliação de impacto: + +* **Impacto adverso sobre indivíduos**. Estar ciente de quaisquer restrições ou requisitos, uso não suportado ou limitações conhecidas que possam prejudicar o desempenho do sistema é vital para garantir que o sistema não seja usado de forma a causar danos às pessoas. +* **Requisitos de dados**. Compreender como e onde o sistema usará dados permite que os revisores explorem quaisquer requisitos de dados que você precise considerar (por exemplo, regulamentações de dados como GDPR ou HIPAA). Além disso, examine se a origem ou quantidade de dados é substancial para o treinamento. +* **Resumo do impacto**. Reúna uma lista de possíveis danos que podem surgir do uso do sistema. Ao longo do ciclo de vida do aprendizado de máquina, revise se os problemas identificados foram mitigados ou resolvidos. +* **Metas aplicáveis** para cada um dos seis princípios fundamentais. Avalie se as metas de cada princípio foram atendidas e se há lacunas. + +## Depuração com IA responsável + +Semelhante à depuração de uma aplicação de software, depurar um sistema de IA é um processo necessário para identificar e resolver problemas no sistema. Há muitos fatores que podem afetar o desempenho de um modelo ou sua responsabilidade. A maioria das métricas tradicionais de desempenho de modelos são agregados quantitativos do desempenho de um modelo, o que não é suficiente para analisar como um modelo viola os princípios de IA responsável. Além disso, um modelo de aprendizado de máquina é uma "caixa preta", o que dificulta entender o que impulsiona seus resultados ou fornecer explicações quando ele comete erros. Mais adiante neste curso, aprenderemos como usar o painel de IA Responsável para ajudar a depurar sistemas de IA. O painel fornece uma ferramenta holística para cientistas de dados e desenvolvedores de IA realizarem: + +* **Análise de erros**. Para identificar a distribuição de erros do modelo que pode afetar a equidade ou confiabilidade do sistema. +* **Visão geral do modelo**. Para descobrir onde há disparidades no desempenho do modelo entre diferentes grupos de dados. +* **Análise de dados**. Para entender a distribuição dos dados e identificar possíveis preconceitos nos dados que possam levar a problemas de equidade, inclusão e confiabilidade. +* **Interpretabilidade do modelo**. Para entender o que afeta ou influencia as previsões do modelo. Isso ajuda a explicar o comportamento do modelo, o que é importante para transparência e responsabilidade. + +## 🚀 Desafio + +Para evitar que danos sejam introduzidos desde o início, devemos: + +- ter diversidade de origens e perspectivas entre as pessoas que trabalham nos sistemas +- investir em conjuntos de dados que reflitam a diversidade de nossa sociedade +- desenvolver melhores métodos ao longo do ciclo de vida do aprendizado de máquina para detectar e corrigir problemas de IA responsável quando eles ocorrerem + +Pense em cenários da vida real onde a falta de confiabilidade de um modelo é evidente na construção e uso do modelo. O que mais devemos considerar? + +## [Quiz pós-aula](https://ff-quizzes.netlify.app/en/ml/) + +## Revisão e Autoestudo + +Nesta lição, você aprendeu alguns conceitos básicos sobre equidade e injustiça no aprendizado de máquina. +Assista a este workshop para se aprofundar nos tópicos: + +- Em busca de IA responsável: Colocando princípios em prática por Besmira Nushi, Mehrnoosh Sameki e Amit Sharma + +[![Responsible AI Toolbox: Um framework de código aberto para construir IA responsável](https://img.youtube.com/vi/tGgJCrA-MZU/0.jpg)](https://www.youtube.com/watch?v=tGgJCrA-MZU "RAI Toolbox: Um framework de código aberto para construir IA responsável") + +> 🎥 Clique na imagem acima para assistir ao vídeo: RAI Toolbox: Um framework de código aberto para construir IA responsável por Besmira Nushi, Mehrnoosh Sameki e Amit Sharma + +Além disso, leia: + +- Centro de recursos de IA responsável da Microsoft: [Responsible AI Resources – Microsoft AI](https://www.microsoft.com/ai/responsible-ai-resources?activetab=pivot1%3aprimaryr4) + +- Grupo de pesquisa FATE da Microsoft: [FATE: Fairness, Accountability, Transparency, and Ethics in AI - Microsoft Research](https://www.microsoft.com/research/theme/fate/) + +RAI Toolbox: + +- [Repositório GitHub do Responsible AI Toolbox](https://github.com/microsoft/responsible-ai-toolbox) + +Leia sobre as ferramentas do Azure Machine Learning para garantir equidade: + +- [Azure Machine Learning](https://docs.microsoft.com/azure/machine-learning/concept-fairness-ml?WT.mc_id=academic-77952-leestott) + +## Tarefa + +[Explore o RAI Toolbox](assignment.md) + +--- + +**Aviso Legal**: +Este documento foi traduzido utilizando o serviço de tradução por IA [Co-op Translator](https://github.com/Azure/co-op-translator). Embora nos esforcemos para garantir a precisão, esteja ciente de que traduções automatizadas podem conter erros ou imprecisões. O documento original em seu idioma nativo deve ser considerado a fonte autoritativa. Para informações críticas, recomenda-se a tradução profissional realizada por humanos. Não nos responsabilizamos por quaisquer mal-entendidos ou interpretações equivocadas decorrentes do uso desta tradução. \ No newline at end of file diff --git a/translations/pt-BR/1-Introduction/3-fairness/assignment.md b/translations/pt-BR/1-Introduction/3-fairness/assignment.md new file mode 100644 index 000000000..dc8cff118 --- /dev/null +++ b/translations/pt-BR/1-Introduction/3-fairness/assignment.md @@ -0,0 +1,16 @@ +# Explore o Toolbox de IA Responsável + +## Instruções + +Nesta lição, você aprendeu sobre o Toolbox de IA Responsável, um "projeto de código aberto e orientado pela comunidade para ajudar cientistas de dados a analisar e melhorar sistemas de IA." Para esta tarefa, explore um dos [notebooks](https://github.com/microsoft/responsible-ai-toolbox/blob/main/notebooks/responsibleaidashboard/getting-started.ipynb) do Toolbox de IA Responsável e relate suas descobertas em um artigo ou apresentação. + +## Rubrica + +| Critérios | Exemplar | Adequado | Necessita Melhorias | +| --------- | -------- | -------- | ------------------- | +| | Um artigo ou apresentação em PowerPoint é apresentado discutindo os sistemas do Fairlearn, o notebook que foi executado e as conclusões obtidas a partir da execução | Um artigo é apresentado sem conclusões | Nenhum artigo é apresentado | + +--- + +**Aviso Legal**: +Este documento foi traduzido utilizando o serviço de tradução por IA [Co-op Translator](https://github.com/Azure/co-op-translator). Embora nos esforcemos para garantir a precisão, esteja ciente de que traduções automatizadas podem conter erros ou imprecisões. O documento original em seu idioma nativo deve ser considerado a fonte autoritativa. Para informações críticas, recomenda-se a tradução profissional realizada por humanos. Não nos responsabilizamos por quaisquer mal-entendidos ou interpretações equivocadas decorrentes do uso desta tradução. \ No newline at end of file diff --git a/translations/pt-BR/1-Introduction/4-techniques-of-ML/README.md b/translations/pt-BR/1-Introduction/4-techniques-of-ML/README.md new file mode 100644 index 000000000..a193f10b3 --- /dev/null +++ b/translations/pt-BR/1-Introduction/4-techniques-of-ML/README.md @@ -0,0 +1,123 @@ +# Técnicas de Aprendizado de Máquina + +O processo de construir, usar e manter modelos de aprendizado de máquina e os dados que eles utilizam é muito diferente de muitos outros fluxos de trabalho de desenvolvimento. Nesta lição, vamos desmistificar o processo e delinear as principais técnicas que você precisa conhecer. Você irá: + +- Compreender os processos que sustentam o aprendizado de máquina em um nível geral. +- Explorar conceitos básicos como 'modelos', 'previsões' e 'dados de treinamento'. + +## [Quiz pré-aula](https://ff-quizzes.netlify.app/en/ml/) + +[![ML para iniciantes - Técnicas de Aprendizado de Máquina](https://img.youtube.com/vi/4NGM0U2ZSHU/0.jpg)](https://youtu.be/4NGM0U2ZSHU "ML para iniciantes - Técnicas de Aprendizado de Máquina") + +> 🎥 Clique na imagem acima para assistir a um vídeo curto sobre esta lição. + +## Introdução + +Em um nível geral, a prática de criar processos de aprendizado de máquina (ML) é composta por várias etapas: + +1. **Definir a pergunta**. A maioria dos processos de ML começa com uma pergunta que não pode ser respondida por um programa condicional simples ou um mecanismo baseado em regras. Essas perguntas geralmente giram em torno de previsões baseadas em um conjunto de dados. +2. **Coletar e preparar os dados**. Para responder à sua pergunta, você precisa de dados. A qualidade e, às vezes, a quantidade dos seus dados determinarão o quão bem você pode responder à pergunta inicial. Visualizar os dados é um aspecto importante desta fase. Esta etapa também inclui dividir os dados em grupos de treinamento e teste para construir um modelo. +3. **Escolher um método de treinamento**. Dependendo da sua pergunta e da natureza dos seus dados, você precisa escolher como deseja treinar um modelo para refletir melhor seus dados e fazer previsões precisas. Esta é a parte do processo de ML que exige expertise específica e, frequentemente, uma quantidade considerável de experimentação. +4. **Treinar o modelo**. Usando seus dados de treinamento, você aplicará vários algoritmos para treinar um modelo que reconheça padrões nos dados. O modelo pode usar pesos internos que podem ser ajustados para privilegiar certas partes dos dados em detrimento de outras, a fim de construir um modelo melhor. +5. **Avaliar o modelo**. Você usa dados nunca antes vistos (seus dados de teste) do conjunto coletado para verificar o desempenho do modelo. +6. **Ajustar parâmetros**. Com base no desempenho do modelo, você pode refazer o processo usando diferentes parâmetros ou variáveis que controlam o comportamento dos algoritmos usados para treinar o modelo. +7. **Prever**. Use novas entradas para testar a precisão do modelo. + +## Qual pergunta fazer + +Os computadores são particularmente habilidosos em descobrir padrões ocultos nos dados. Essa utilidade é muito útil para pesquisadores que têm perguntas sobre um determinado domínio que não podem ser facilmente respondidas criando um mecanismo baseado em regras condicionais. Dado um trabalho atuarial, por exemplo, um cientista de dados pode construir regras personalizadas sobre a mortalidade de fumantes versus não fumantes. + +Quando muitas outras variáveis são incluídas na equação, no entanto, um modelo de ML pode ser mais eficiente para prever taxas de mortalidade futuras com base no histórico de saúde anterior. Um exemplo mais animador pode ser fazer previsões meteorológicas para o mês de abril em um determinado local com base em dados que incluem latitude, longitude, mudanças climáticas, proximidade ao oceano, padrões de correntes de jato e mais. + +✅ Este [slide deck](https://www2.cisl.ucar.edu/sites/default/files/2021-10/0900%20June%2024%20Haupt_0.pdf) sobre modelos meteorológicos oferece uma perspectiva histórica sobre o uso de ML na análise climática. + +## Tarefas pré-construção + +Antes de começar a construir seu modelo, há várias tarefas que você precisa completar. Para testar sua pergunta e formar uma hipótese com base nas previsões de um modelo, você precisa identificar e configurar vários elementos. + +### Dados + +Para responder à sua pergunta com algum grau de certeza, você precisa de uma boa quantidade de dados do tipo certo. Há duas coisas que você precisa fazer neste momento: + +- **Coletar dados**. Lembre-se da lição anterior sobre justiça na análise de dados e colete seus dados com cuidado. Esteja atento às fontes desses dados, quaisquer vieses inerentes que possam ter e documente sua origem. +- **Preparar dados**. Há várias etapas no processo de preparação de dados. Você pode precisar reunir dados e normalizá-los se vierem de fontes diversas. Você pode melhorar a qualidade e a quantidade dos dados por meio de vários métodos, como converter strings em números (como fazemos em [Clustering](../../5-Clustering/1-Visualize/README.md)). Você também pode gerar novos dados com base nos originais (como fazemos em [Classificação](../../4-Classification/1-Introduction/README.md)). Você pode limpar e editar os dados (como faremos antes da lição de [Aplicativo Web](../../3-Web-App/README.md)). Por fim, pode ser necessário randomizar e embaralhar os dados, dependendo das técnicas de treinamento. + +✅ Após coletar e processar seus dados, reserve um momento para verificar se sua estrutura permitirá que você responda à pergunta pretendida. Pode ser que os dados não funcionem bem na tarefa proposta, como descobrimos em nossas lições de [Clustering](../../5-Clustering/1-Visualize/README.md)! + +### Features e Target + +Uma [feature](https://www.datasciencecentral.com/profiles/blogs/an-introduction-to-variable-and-feature-selection) é uma propriedade mensurável dos seus dados. Em muitos conjuntos de dados, ela é expressa como um cabeçalho de coluna, como 'data', 'tamanho' ou 'cor'. Sua variável de feature, geralmente representada como `X` no código, representa a variável de entrada que será usada para treinar o modelo. + +Um target é aquilo que você está tentando prever. O target, geralmente representado como `y` no código, representa a resposta à pergunta que você está tentando fazer com seus dados: em dezembro, qual **cor** de abóbora será mais barata? Em São Francisco, quais bairros terão o melhor **preço** de imóveis? Às vezes, o target também é chamado de atributo de rótulo. + +### Selecionando sua variável de feature + +🎓 **Seleção de Features e Extração de Features** Como saber qual variável escolher ao construir um modelo? Você provavelmente passará por um processo de seleção ou extração de features para escolher as variáveis certas para o modelo mais eficiente. No entanto, elas não são a mesma coisa: "A extração de features cria novas features a partir de funções das features originais, enquanto a seleção de features retorna um subconjunto das features." ([fonte](https://wikipedia.org/wiki/Feature_selection)) + +### Visualizar seus dados + +Um aspecto importante do kit de ferramentas do cientista de dados é o poder de visualizar dados usando várias bibliotecas excelentes, como Seaborn ou MatPlotLib. Representar seus dados visualmente pode permitir que você descubra correlações ocultas que pode aproveitar. Suas visualizações também podem ajudar a identificar vieses ou dados desbalanceados (como descobrimos em [Classificação](../../4-Classification/2-Classifiers-1/README.md)). + +### Dividir seu conjunto de dados + +Antes de treinar, você precisa dividir seu conjunto de dados em duas ou mais partes de tamanhos desiguais que ainda representem bem os dados. + +- **Treinamento**. Esta parte do conjunto de dados é ajustada ao seu modelo para treiná-lo. Este conjunto constitui a maior parte do conjunto de dados original. +- **Teste**. Um conjunto de teste é um grupo independente de dados, frequentemente extraído dos dados originais, que você usa para confirmar o desempenho do modelo construído. +- **Validação**. Um conjunto de validação é um grupo menor e independente de exemplos que você usa para ajustar os hiperparâmetros ou a arquitetura do modelo para melhorá-lo. Dependendo do tamanho dos seus dados e da pergunta que você está fazendo, pode não ser necessário construir este terceiro conjunto (como observamos em [Previsão de Séries Temporais](../../7-TimeSeries/1-Introduction/README.md)). + +## Construindo um modelo + +Usando seus dados de treinamento, seu objetivo é construir um modelo, ou uma representação estatística dos seus dados, usando vários algoritmos para **treiná-lo**. Treinar um modelo o expõe aos dados e permite que ele faça suposições sobre padrões percebidos que descobre, valida e aceita ou rejeita. + +### Decidir sobre um método de treinamento + +Dependendo da sua pergunta e da natureza dos seus dados, você escolherá um método para treiná-lo. Explorando a [documentação do Scikit-learn](https://scikit-learn.org/stable/user_guide.html) - que usamos neste curso - você pode explorar várias maneiras de treinar um modelo. Dependendo da sua experiência, pode ser necessário tentar vários métodos diferentes para construir o melhor modelo. É provável que você passe por um processo em que cientistas de dados avaliam o desempenho de um modelo alimentando-o com dados não vistos, verificando sua precisão, vieses e outros problemas que degradam a qualidade, e selecionando o método de treinamento mais apropriado para a tarefa. + +### Treinar um modelo + +Com seus dados de treinamento em mãos, você está pronto para 'ajustá-los' e criar um modelo. Você notará que em muitas bibliotecas de ML encontrará o código 'model.fit' - é neste momento que você envia sua variável de feature como um array de valores (geralmente 'X') e uma variável de target (geralmente 'y'). + +### Avaliar o modelo + +Uma vez concluído o processo de treinamento (pode levar muitas iterações, ou 'épocas', para treinar um modelo grande), você poderá avaliar a qualidade do modelo usando dados de teste para medir seu desempenho. Esses dados são um subconjunto dos dados originais que o modelo ainda não analisou. Você pode imprimir uma tabela de métricas sobre a qualidade do modelo. + +🎓 **Ajuste do modelo** + +No contexto de aprendizado de máquina, ajuste do modelo refere-se à precisão da função subjacente do modelo ao tentar analisar dados com os quais não está familiarizado. + +🎓 **Subajuste** e **superajuste** são problemas comuns que degradam a qualidade do modelo, pois ele se ajusta de forma insuficiente ou excessiva. Isso faz com que o modelo faça previsões muito alinhadas ou pouco alinhadas com seus dados de treinamento. Um modelo superajustado prevê os dados de treinamento muito bem porque aprendeu os detalhes e ruídos dos dados excessivamente. Um modelo subajustado não é preciso, pois não consegue analisar com precisão nem seus dados de treinamento nem os dados que ainda não 'viu'. + +![modelo superajustado](../../../../1-Introduction/4-techniques-of-ML/images/overfitting.png) +> Infográfico por [Jen Looper](https://twitter.com/jenlooper) + +## Ajuste de parâmetros + +Depois de concluir o treinamento inicial, observe a qualidade do modelo e considere melhorá-lo ajustando seus 'hiperparâmetros'. Leia mais sobre o processo [na documentação](https://docs.microsoft.com/en-us/azure/machine-learning/how-to-tune-hyperparameters?WT.mc_id=academic-77952-leestott). + +## Previsão + +Este é o momento em que você pode usar dados completamente novos para testar a precisão do modelo. Em um cenário de ML 'aplicado', onde você está construindo ativos web para usar o modelo em produção, este processo pode envolver coletar entrada do usuário (um clique de botão, por exemplo) para definir uma variável e enviá-la ao modelo para inferência ou avaliação. + +Nestes módulos, você descobrirá como usar essas etapas para preparar, construir, testar, avaliar e prever - todos os gestos de um cientista de dados e mais, enquanto avança em sua jornada para se tornar um engenheiro de ML 'full stack'. + +--- + +## 🚀Desafio + +Desenhe um fluxograma refletindo as etapas de um profissional de ML. Onde você se vê agora no processo? Onde você prevê que encontrará dificuldades? O que parece fácil para você? + +## [Quiz pós-aula](https://ff-quizzes.netlify.app/en/ml/) + +## Revisão e Autoestudo + +Pesquise online entrevistas com cientistas de dados que discutem seu trabalho diário. Aqui está [uma](https://www.youtube.com/watch?v=Z3IjgbbCEfs). + +## Tarefa + +[Entrevistar um cientista de dados](assignment.md) + +--- + +**Aviso Legal**: +Este documento foi traduzido utilizando o serviço de tradução por IA [Co-op Translator](https://github.com/Azure/co-op-translator). Embora nos esforcemos para garantir a precisão, esteja ciente de que traduções automatizadas podem conter erros ou imprecisões. O documento original em seu idioma nativo deve ser considerado a fonte autoritativa. Para informações críticas, recomenda-se a tradução profissional realizada por humanos. Não nos responsabilizamos por quaisquer mal-entendidos ou interpretações equivocadas decorrentes do uso desta tradução. \ No newline at end of file diff --git a/translations/pt-BR/1-Introduction/4-techniques-of-ML/assignment.md b/translations/pt-BR/1-Introduction/4-techniques-of-ML/assignment.md new file mode 100644 index 000000000..3a6d9b198 --- /dev/null +++ b/translations/pt-BR/1-Introduction/4-techniques-of-ML/assignment.md @@ -0,0 +1,16 @@ +# Entrevista com um cientista de dados + +## Instruções + +Na sua empresa, em um grupo de usuários, ou entre seus amigos ou colegas de estudo, converse com alguém que trabalha profissionalmente como cientista de dados. Escreva um pequeno artigo (500 palavras) sobre as ocupações diárias dessa pessoa. Eles são especialistas ou trabalham de forma 'full stack'? + +## Rubrica + +| Critérios | Exemplar | Adequado | Precisa Melhorar | +| --------- | ----------------------------------------------------------------------------------- | ------------------------------------------------------------------ | --------------------- | +| | Um artigo com o comprimento correto, com fontes atribuídas, apresentado como um arquivo .doc | O artigo tem atribuições inadequadas ou é mais curto que o comprimento exigido | Nenhum artigo é apresentado | + +--- + +**Aviso Legal**: +Este documento foi traduzido utilizando o serviço de tradução por IA [Co-op Translator](https://github.com/Azure/co-op-translator). Embora nos esforcemos para garantir a precisão, esteja ciente de que traduções automatizadas podem conter erros ou imprecisões. O documento original em seu idioma nativo deve ser considerado a fonte autoritativa. Para informações críticas, recomenda-se a tradução profissional realizada por humanos. Não nos responsabilizamos por quaisquer mal-entendidos ou interpretações equivocadas decorrentes do uso desta tradução. \ No newline at end of file diff --git a/translations/pt-BR/1-Introduction/README.md b/translations/pt-BR/1-Introduction/README.md new file mode 100644 index 000000000..e8fd59220 --- /dev/null +++ b/translations/pt-BR/1-Introduction/README.md @@ -0,0 +1,28 @@ +# Introdução ao aprendizado de máquina + +Nesta seção do currículo, você será apresentado aos conceitos básicos que fundamentam o campo do aprendizado de máquina, o que ele é, e aprenderá sobre sua história e as técnicas que os pesquisadores utilizam para trabalhar com ele. Vamos explorar juntos este novo mundo do aprendizado de máquina! + +![globo](../../../translated_images/pt-BR/globe.59f26379ceb40428.webp) +> Foto por Bill Oxford no Unsplash + +### Aulas + +1. [Introdução ao aprendizado de máquina](1-intro-to-ML/README.md) +1. [A história do aprendizado de máquina e da IA](2-history-of-ML/README.md) +1. [Equidade e aprendizado de máquina](3-fairness/README.md) +1. [Técnicas de aprendizado de máquina](4-techniques-of-ML/README.md) + +### Créditos + +"Introdução ao Aprendizado de Máquina" foi escrito com ♥️ por uma equipe de pessoas incluindo [Muhammad Sakib Khan Inan](https://twitter.com/Sakibinan), [Ornella Altunyan](https://twitter.com/ornelladotcom) e [Jen Looper](https://twitter.com/jenlooper) + +"A História do Aprendizado de Máquina" foi escrito com ♥️ por [Jen Looper](https://twitter.com/jenlooper) e [Amy Boyd](https://twitter.com/AmyKateNicho) + +"Equidade e Aprendizado de Máquina" foi escrito com ♥️ por [Tomomi Imura](https://twitter.com/girliemac) + +"Técnicas de Aprendizado de Máquina" foi escrito com ♥️ por [Jen Looper](https://twitter.com/jenlooper) e [Chris Noring](https://twitter.com/softchris) + +--- + +**Aviso Legal**: +Este documento foi traduzido utilizando o serviço de tradução por IA [Co-op Translator](https://github.com/Azure/co-op-translator). Embora nos esforcemos para garantir a precisão, esteja ciente de que traduções automatizadas podem conter erros ou imprecisões. O documento original em seu idioma nativo deve ser considerado a fonte autoritativa. Para informações críticas, recomenda-se a tradução profissional realizada por humanos. Não nos responsabilizamos por quaisquer mal-entendidos ou interpretações equivocadas decorrentes do uso desta tradução. \ No newline at end of file diff --git a/translations/pt-BR/2-Regression/1-Tools/README.md b/translations/pt-BR/2-Regression/1-Tools/README.md new file mode 100644 index 000000000..1c1811d63 --- /dev/null +++ b/translations/pt-BR/2-Regression/1-Tools/README.md @@ -0,0 +1,230 @@ +# Introdução ao Python e Scikit-learn para modelos de regressão + +![Resumo de regressões em um sketchnote](../../../../sketchnotes/ml-regression.png) + +> Sketchnote por [Tomomi Imura](https://www.twitter.com/girlie_mac) + +## [Quiz pré-aula](https://ff-quizzes.netlify.app/en/ml/) + +> ### [Esta lição está disponível em R!](../../../../2-Regression/1-Tools/solution/R/lesson_1.html) + +## Introdução + +Nestas quatro lições, você descobrirá como construir modelos de regressão. Vamos discutir para que eles servem em breve. Mas antes de começar, certifique-se de ter as ferramentas certas para iniciar o processo! + +Nesta lição, você aprenderá a: + +- Configurar seu computador para tarefas locais de aprendizado de máquina. +- Trabalhar com notebooks Jupyter. +- Utilizar Scikit-learn, incluindo sua instalação. +- Explorar regressão linear com um exercício prático. + +## Instalações e configurações + +[![ML para iniciantes - Configure suas ferramentas para criar modelos de aprendizado de máquina](https://img.youtube.com/vi/-DfeD2k2Kj0/0.jpg)](https://youtu.be/-DfeD2k2Kj0 "ML para iniciantes - Configure suas ferramentas para criar modelos de aprendizado de máquina") + +> 🎥 Clique na imagem acima para um vídeo curto sobre como configurar seu computador para ML. + +1. **Instale o Python**. Certifique-se de que o [Python](https://www.python.org/downloads/) está instalado em seu computador. Você usará Python para muitas tarefas de ciência de dados e aprendizado de máquina. A maioria dos sistemas de computador já inclui uma instalação do Python. Há também [Pacotes de Codificação Python](https://code.visualstudio.com/learn/educators/installers?WT.mc_id=academic-77952-leestott) úteis disponíveis para facilitar a configuração para alguns usuários. + + Algumas utilizações do Python, no entanto, exigem uma versão específica do software, enquanto outras requerem uma versão diferente. Por essa razão, é útil trabalhar dentro de um [ambiente virtual](https://docs.python.org/3/library/venv.html). + +2. **Instale o Visual Studio Code**. Certifique-se de que o Visual Studio Code está instalado em seu computador. Siga estas instruções para [instalar o Visual Studio Code](https://code.visualstudio.com/) para a instalação básica. Você usará Python no Visual Studio Code neste curso, então pode ser útil revisar como [configurar o Visual Studio Code](https://docs.microsoft.com/learn/modules/python-install-vscode?WT.mc_id=academic-77952-leestott) para desenvolvimento em Python. + + > Familiarize-se com Python trabalhando nesta coleção de [módulos de aprendizado](https://docs.microsoft.com/users/jenlooper-2911/collections/mp1pagggd5qrq7?WT.mc_id=academic-77952-leestott) + > + > [![Configurar Python com Visual Studio Code](https://img.youtube.com/vi/yyQM70vi7V8/0.jpg)](https://youtu.be/yyQM70vi7V8 "Configurar Python com Visual Studio Code") + > + > 🎥 Clique na imagem acima para um vídeo: usando Python no VS Code. + +3. **Instale o Scikit-learn**, seguindo [estas instruções](https://scikit-learn.org/stable/install.html). Como você precisa garantir que está usando Python 3, é recomendado que utilize um ambiente virtual. Note que, se estiver instalando esta biblioteca em um Mac M1, há instruções especiais na página vinculada acima. + +4. **Instale o Jupyter Notebook**. Você precisará [instalar o pacote Jupyter](https://pypi.org/project/jupyter/). + +## Seu ambiente de autoria de ML + +Você usará **notebooks** para desenvolver seu código Python e criar modelos de aprendizado de máquina. Este tipo de arquivo é uma ferramenta comum para cientistas de dados e pode ser identificado por seu sufixo ou extensão `.ipynb`. + +Notebooks são um ambiente interativo que permite ao desenvolvedor tanto codificar quanto adicionar notas e escrever documentação em torno do código, o que é bastante útil para projetos experimentais ou orientados à pesquisa. + +[![ML para iniciantes - Configure Jupyter Notebooks para começar a construir modelos de regressão](https://img.youtube.com/vi/7E-jC8FLA2E/0.jpg)](https://youtu.be/7E-jC8FLA2E "ML para iniciantes - Configure Jupyter Notebooks para começar a construir modelos de regressão") + +> 🎥 Clique na imagem acima para um vídeo curto sobre este exercício. + +### Exercício - Trabalhando com um notebook + +Nesta pasta, você encontrará o arquivo _notebook.ipynb_. + +1. Abra _notebook.ipynb_ no Visual Studio Code. + + Um servidor Jupyter será iniciado com Python 3+. Você encontrará áreas do notebook que podem ser `executadas`, pedaços de código. Você pode executar um bloco de código selecionando o ícone que parece um botão de reprodução. + +2. Selecione o ícone `md` e adicione um pouco de markdown, com o seguinte texto **# Bem-vindo ao seu notebook**. + + Em seguida, adicione algum código Python. + +3. Digite **print('hello notebook')** no bloco de código. +4. Selecione a seta para executar o código. + + Você deverá ver a declaração impressa: + + ```output + hello notebook + ``` + +![VS Code com um notebook aberto](../../../../2-Regression/1-Tools/images/notebook.jpg) + +Você pode intercalar seu código com comentários para auto-documentar o notebook. + +✅ Pense por um momento como o ambiente de trabalho de um desenvolvedor web é diferente do de um cientista de dados. + +## Começando com Scikit-learn + +Agora que o Python está configurado em seu ambiente local e você está confortável com notebooks Jupyter, vamos nos familiarizar com o Scikit-learn (pronuncia-se `sci` como em `science`). O Scikit-learn fornece uma [API extensa](https://scikit-learn.org/stable/modules/classes.html#api-ref) para ajudá-lo a realizar tarefas de ML. + +De acordo com seu [site](https://scikit-learn.org/stable/getting_started.html), "Scikit-learn é uma biblioteca de aprendizado de máquina de código aberto que suporta aprendizado supervisionado e não supervisionado. Também fornece várias ferramentas para ajuste de modelos, pré-processamento de dados, seleção e avaliação de modelos, e muitas outras utilidades." + +Neste curso, você usará Scikit-learn e outras ferramentas para construir modelos de aprendizado de máquina para realizar o que chamamos de tarefas de 'aprendizado de máquina tradicional'. Evitamos deliberadamente redes neurais e aprendizado profundo, pois eles são melhor abordados em nosso futuro currículo 'AI para Iniciantes'. + +O Scikit-learn torna simples construir modelos e avaliá-los para uso. Ele é focado principalmente em usar dados numéricos e contém vários conjuntos de dados prontos para uso como ferramentas de aprendizado. Também inclui modelos pré-construídos para os alunos experimentarem. Vamos explorar o processo de carregar dados pré-empacotados e usar um estimador para criar o primeiro modelo de ML com Scikit-learn usando alguns dados básicos. + +## Exercício - Seu primeiro notebook com Scikit-learn + +> Este tutorial foi inspirado pelo [exemplo de regressão linear](https://scikit-learn.org/stable/auto_examples/linear_model/plot_ols.html#sphx-glr-auto-examples-linear-model-plot-ols-py) no site do Scikit-learn. + +[![ML para iniciantes - Seu primeiro projeto de regressão linear em Python](https://img.youtube.com/vi/2xkXL5EUpS0/0.jpg)](https://youtu.be/2xkXL5EUpS0 "ML para iniciantes - Seu primeiro projeto de regressão linear em Python") + +> 🎥 Clique na imagem acima para um vídeo curto sobre este exercício. + +No arquivo _notebook.ipynb_ associado a esta lição, limpe todas as células pressionando o ícone de 'lixeira'. + +Nesta seção, você trabalhará com um pequeno conjunto de dados sobre diabetes que está embutido no Scikit-learn para fins de aprendizado. Imagine que você deseja testar um tratamento para pacientes diabéticos. Modelos de aprendizado de máquina podem ajudá-lo a determinar quais pacientes responderiam melhor ao tratamento, com base em combinações de variáveis. Mesmo um modelo de regressão muito básico, quando visualizado, pode mostrar informações sobre variáveis que ajudariam a organizar seus ensaios clínicos teóricos. + +✅ Existem muitos tipos de métodos de regressão, e qual você escolhe depende da resposta que está procurando. Se você quiser prever a altura provável de uma pessoa de uma determinada idade, usaria regressão linear, pois está buscando um **valor numérico**. Se estiver interessado em descobrir se um tipo de culinária deve ser considerado vegano ou não, estará buscando uma **atribuição de categoria**, então usaria regressão logística. Você aprenderá mais sobre regressão logística mais tarde. Pense um pouco sobre algumas perguntas que você pode fazer aos dados e qual desses métodos seria mais apropriado. + +Vamos começar esta tarefa. + +### Importar bibliotecas + +Para esta tarefa, importaremos algumas bibliotecas: + +- **matplotlib**. É uma ferramenta útil para [criação de gráficos](https://matplotlib.org/) e a usaremos para criar um gráfico de linha. +- **numpy**. [numpy](https://numpy.org/doc/stable/user/whatisnumpy.html) é uma biblioteca útil para lidar com dados numéricos em Python. +- **sklearn**. Esta é a biblioteca [Scikit-learn](https://scikit-learn.org/stable/user_guide.html). + +Importe algumas bibliotecas para ajudar em suas tarefas. + +1. Adicione as importações digitando o seguinte código: + + ```python + import matplotlib.pyplot as plt + import numpy as np + from sklearn import datasets, linear_model, model_selection + ``` + + Acima, você está importando `matplotlib`, `numpy` e está importando `datasets`, `linear_model` e `model_selection` de `sklearn`. `model_selection` é usado para dividir dados em conjuntos de treinamento e teste. + +### O conjunto de dados de diabetes + +O [conjunto de dados de diabetes](https://scikit-learn.org/stable/datasets/toy_dataset.html#diabetes-dataset) embutido inclui 442 amostras de dados sobre diabetes, com 10 variáveis de características, algumas das quais incluem: + +- age: idade em anos +- bmi: índice de massa corporal +- bp: pressão arterial média +- s1 tc: células T (um tipo de glóbulo branco) + +✅ Este conjunto de dados inclui o conceito de 'sexo' como uma variável de característica importante para pesquisas sobre diabetes. Muitos conjuntos de dados médicos incluem este tipo de classificação binária. Pense um pouco sobre como categorizações como esta podem excluir certas partes da população de tratamentos. + +Agora, carregue os dados X e y. + +> 🎓 Lembre-se, este é aprendizado supervisionado, e precisamos de um 'y' alvo nomeado. + +Em uma nova célula de código, carregue o conjunto de dados de diabetes chamando `load_diabetes()`. O parâmetro `return_X_y=True` indica que `X` será uma matriz de dados e `y` será o alvo da regressão. + +1. Adicione alguns comandos de impressão para mostrar a forma da matriz de dados e seu primeiro elemento: + + ```python + X, y = datasets.load_diabetes(return_X_y=True) + print(X.shape) + print(X[0]) + ``` + + O que você está recebendo como resposta é uma tupla. O que você está fazendo é atribuir os dois primeiros valores da tupla a `X` e `y`, respectivamente. Saiba mais [sobre tuplas](https://wikipedia.org/wiki/Tuple). + + Você pode ver que esses dados têm 442 itens organizados em arrays de 10 elementos: + + ```text + (442, 10) + [ 0.03807591 0.05068012 0.06169621 0.02187235 -0.0442235 -0.03482076 + -0.04340085 -0.00259226 0.01990842 -0.01764613] + ``` + + ✅ Pense um pouco sobre a relação entre os dados e o alvo da regressão. A regressão linear prevê relações entre a característica X e a variável alvo y. Você consegue encontrar o [alvo](https://scikit-learn.org/stable/datasets/toy_dataset.html#diabetes-dataset) para o conjunto de dados de diabetes na documentação? O que este conjunto de dados está demonstrando, dado o alvo? + +2. Em seguida, selecione uma parte deste conjunto de dados para plotar, escolhendo a 3ª coluna do conjunto de dados. Você pode fazer isso usando o operador `:` para selecionar todas as linhas e, em seguida, selecionando a 3ª coluna usando o índice (2). Você também pode remodelar os dados para serem um array 2D - conforme necessário para plotagem - usando `reshape(n_rows, n_columns)`. Se um dos parâmetros for -1, a dimensão correspondente será calculada automaticamente. + + ```python + X = X[:, 2] + X = X.reshape((-1,1)) + ``` + + ✅ A qualquer momento, imprima os dados para verificar sua forma. + +3. Agora que você tem os dados prontos para serem plotados, pode verificar se uma máquina pode ajudar a determinar uma divisão lógica entre os números neste conjunto de dados. Para fazer isso, você precisa dividir tanto os dados (X) quanto o alvo (y) em conjuntos de teste e treinamento. O Scikit-learn tem uma maneira simples de fazer isso; você pode dividir seus dados de teste em um ponto específico. + + ```python + X_train, X_test, y_train, y_test = model_selection.train_test_split(X, y, test_size=0.33) + ``` + +4. Agora você está pronto para treinar seu modelo! Carregue o modelo de regressão linear e treine-o com seus conjuntos de treinamento X e y usando `model.fit()`: + + ```python + model = linear_model.LinearRegression() + model.fit(X_train, y_train) + ``` + + ✅ `model.fit()` é uma função que você verá em muitas bibliotecas de ML, como TensorFlow. + +5. Em seguida, crie uma previsão usando os dados de teste, utilizando a função `predict()`. Isso será usado para desenhar a linha entre os grupos de dados. + + ```python + y_pred = model.predict(X_test) + ``` + +6. Agora é hora de mostrar os dados em um gráfico. O Matplotlib é uma ferramenta muito útil para esta tarefa. Crie um gráfico de dispersão de todos os dados de teste X e y e use a previsão para desenhar uma linha no lugar mais apropriado, entre os agrupamentos de dados do modelo. + + ```python + plt.scatter(X_test, y_test, color='black') + plt.plot(X_test, y_pred, color='blue', linewidth=3) + plt.xlabel('Scaled BMIs') + plt.ylabel('Disease Progression') + plt.title('A Graph Plot Showing Diabetes Progression Against BMI') + plt.show() + ``` + + ![um gráfico de dispersão mostrando pontos de dados sobre diabetes](../../../../2-Regression/1-Tools/images/scatterplot.png) +✅ Pense um pouco sobre o que está acontecendo aqui. Uma linha reta está passando por muitos pequenos pontos de dados, mas o que exatamente ela está fazendo? Você consegue perceber como essa linha pode ser usada para prever onde um novo ponto de dados, ainda não visto, deve se encaixar em relação ao eixo y do gráfico? Tente colocar em palavras a utilidade prática desse modelo. + +Parabéns, você construiu seu primeiro modelo de regressão linear, criou uma previsão com ele e a exibiu em um gráfico! + +--- +## 🚀Desafio + +Plote uma variável diferente deste conjunto de dados. Dica: edite esta linha: `X = X[:,2]`. Dado o alvo deste conjunto de dados, o que você consegue descobrir sobre a progressão do diabetes como uma doença? + +## [Quiz pós-aula](https://ff-quizzes.netlify.app/en/ml/) + +## Revisão e Autoestudo + +Neste tutorial, você trabalhou com regressão linear simples, em vez de regressão univariada ou múltipla. Leia um pouco sobre as diferenças entre esses métodos ou assista a [este vídeo](https://www.coursera.org/lecture/quantifying-relationships-regression-models/linear-vs-nonlinear-categorical-variables-ai2Ef). + +Leia mais sobre o conceito de regressão e pense sobre quais tipos de perguntas podem ser respondidas por essa técnica. Faça este [tutorial](https://docs.microsoft.com/learn/modules/train-evaluate-regression-models?WT.mc_id=academic-77952-leestott) para aprofundar seu entendimento. + +## Tarefa + +[Um conjunto de dados diferente](assignment.md) + +--- + +**Aviso Legal**: +Este documento foi traduzido utilizando o serviço de tradução por IA [Co-op Translator](https://github.com/Azure/co-op-translator). Embora nos esforcemos para garantir a precisão, esteja ciente de que traduções automatizadas podem conter erros ou imprecisões. O documento original em seu idioma nativo deve ser considerado a fonte autoritativa. Para informações críticas, recomenda-se a tradução profissional realizada por humanos. Não nos responsabilizamos por quaisquer mal-entendidos ou interpretações equivocadas decorrentes do uso desta tradução. \ No newline at end of file diff --git a/translations/pt-BR/2-Regression/1-Tools/assignment.md b/translations/pt-BR/2-Regression/1-Tools/assignment.md new file mode 100644 index 000000000..bda1e5adc --- /dev/null +++ b/translations/pt-BR/2-Regression/1-Tools/assignment.md @@ -0,0 +1,18 @@ +# Regressão com Scikit-learn + +## Instruções + +Dê uma olhada no [conjunto de dados Linnerud](https://scikit-learn.org/stable/modules/generated/sklearn.datasets.load_linnerud.html#sklearn.datasets.load_linnerud) no Scikit-learn. Este conjunto de dados possui múltiplos [alvos](https://scikit-learn.org/stable/datasets/toy_dataset.html#linnerrud-dataset): 'Ele consiste em três variáveis de exercício (dados) e três variáveis fisiológicas (alvo) coletadas de vinte homens de meia-idade em um clube de fitness'. + +Com suas próprias palavras, descreva como criar um modelo de Regressão que plote a relação entre a circunferência da cintura e a quantidade de abdominais realizados. Faça o mesmo para os outros pontos de dados deste conjunto de dados. + +## Rubrica + +| Critério | Exemplary | Adequado | Precisa de Melhorias | +| ------------------------------ | ----------------------------------- | ----------------------------- | -------------------------- | +| Enviar um parágrafo descritivo | Um parágrafo bem escrito é enviado | Algumas frases são enviadas | Nenhuma descrição é fornecida | + +--- + +**Aviso Legal**: +Este documento foi traduzido utilizando o serviço de tradução por IA [Co-op Translator](https://github.com/Azure/co-op-translator). Embora nos esforcemos para garantir a precisão, esteja ciente de que traduções automatizadas podem conter erros ou imprecisões. O documento original em seu idioma nativo deve ser considerado a fonte autoritativa. Para informações críticas, recomenda-se a tradução profissional realizada por humanos. Não nos responsabilizamos por quaisquer mal-entendidos ou interpretações equivocadas decorrentes do uso desta tradução. \ No newline at end of file diff --git a/translations/pt-BR/2-Regression/1-Tools/notebook.ipynb b/translations/pt-BR/2-Regression/1-Tools/notebook.ipynb new file mode 100644 index 000000000..e69de29bb diff --git a/translations/pt-BR/2-Regression/1-Tools/solution/Julia/README.md b/translations/pt-BR/2-Regression/1-Tools/solution/Julia/README.md new file mode 100644 index 000000000..c58234bae --- /dev/null +++ b/translations/pt-BR/2-Regression/1-Tools/solution/Julia/README.md @@ -0,0 +1,6 @@ + + +--- + +**Aviso Legal**: +Este documento foi traduzido utilizando o serviço de tradução por IA [Co-op Translator](https://github.com/Azure/co-op-translator). Embora nos esforcemos para garantir a precisão, esteja ciente de que traduções automatizadas podem conter erros ou imprecisões. O documento original em seu idioma nativo deve ser considerado a fonte autoritativa. Para informações críticas, recomenda-se a tradução profissional realizada por humanos. Não nos responsabilizamos por quaisquer mal-entendidos ou interpretações equivocadas decorrentes do uso desta tradução. \ No newline at end of file diff --git a/translations/pt-BR/2-Regression/1-Tools/solution/R/lesson_1-R.ipynb b/translations/pt-BR/2-Regression/1-Tools/solution/R/lesson_1-R.ipynb new file mode 100644 index 000000000..b26aecbdf --- /dev/null +++ b/translations/pt-BR/2-Regression/1-Tools/solution/R/lesson_1-R.ipynb @@ -0,0 +1,447 @@ +{ + "nbformat": 4, + "nbformat_minor": 2, + "metadata": { + "colab": { + "name": "lesson_1-R.ipynb", + "provenance": [], + "collapsed_sections": [], + "toc_visible": true + }, + "kernelspec": { + "name": "ir", + "display_name": "R" + }, + "language_info": { + "name": "R" + }, + "coopTranslator": { + "original_hash": "c18d3bd0bd8ae3878597e89dcd1fa5c1", + "translation_date": "2025-08-29T23:09:43+00:00", + "source_file": "2-Regression/1-Tools/solution/R/lesson_1-R.ipynb", + "language_code": "br" + } + }, + "cells": [ + { + "cell_type": "markdown", + "source": [], + "metadata": { + "id": "YJUHCXqK57yz" + } + }, + { + "cell_type": "markdown", + "source": [ + "## Introdução à Regressão - Aula 1\n", + "\n", + "#### Colocando em perspectiva\n", + "\n", + "✅ Existem muitos tipos de métodos de regressão, e qual você escolhe depende da resposta que está buscando. Se você quiser prever a altura provável de uma pessoa com uma determinada idade, usaria `regressão linear`, pois está procurando um **valor numérico**. Se estiver interessado em descobrir se um tipo de culinária deve ser considerado vegano ou não, estará buscando uma **atribuição de categoria**, então usaria `regressão logística`. Você aprenderá mais sobre regressão logística mais adiante. Pense um pouco sobre algumas perguntas que você pode fazer aos dados e quais desses métodos seriam mais apropriados.\n", + "\n", + "Nesta seção, você trabalhará com um [pequeno conjunto de dados sobre diabetes](https://www4.stat.ncsu.edu/~boos/var.select/diabetes.html). Imagine que você queira testar um tratamento para pacientes diabéticos. Modelos de aprendizado de máquina podem ajudar a determinar quais pacientes responderiam melhor ao tratamento, com base em combinações de variáveis. Mesmo um modelo de regressão muito básico, quando visualizado, pode mostrar informações sobre variáveis que ajudariam você a organizar seus ensaios clínicos teóricos.\n", + "\n", + "Dito isso, vamos começar esta tarefa!\n", + "\n", + "

\n", + " \n", + "

Arte por @allison_horst
\n", + "\n", + "\n" + ], + "metadata": { + "id": "LWNNzfqd6feZ" + } + }, + { + "cell_type": "markdown", + "source": [ + "## 1. Carregando nosso conjunto de ferramentas\n", + "\n", + "Para esta tarefa, vamos precisar dos seguintes pacotes:\n", + "\n", + "- `tidyverse`: O [tidyverse](https://www.tidyverse.org/) é uma [coleção de pacotes R](https://www.tidyverse.org/packages) projetada para tornar a ciência de dados mais rápida, fácil e divertida!\n", + "\n", + "- `tidymodels`: O [tidymodels](https://www.tidymodels.org/) é uma [coleção de pacotes](https://www.tidymodels.org/packages/) para modelagem e aprendizado de máquina.\n", + "\n", + "Você pode instalá-los com o seguinte comando:\n", + "\n", + "`install.packages(c(\"tidyverse\", \"tidymodels\"))`\n", + "\n", + "O script abaixo verifica se você possui os pacotes necessários para completar este módulo e os instala para você caso algum esteja faltando.\n" + ], + "metadata": { + "id": "FIo2YhO26wI9" + } + }, + { + "cell_type": "code", + "execution_count": 2, + "source": [ + "suppressWarnings(if(!require(\"pacman\")) install.packages(\"pacman\"))\n", + "pacman::p_load(tidyverse, tidymodels)" + ], + "outputs": [ + { + "output_type": "stream", + "name": "stderr", + "text": [ + "Loading required package: pacman\n", + "\n" + ] + } + ], + "metadata": { + "id": "cIA9fz9v7Dss", + "colab": { + "base_uri": "https://localhost:8080/" + }, + "outputId": "2df7073b-86b2-4b32-cb86-0da605a0dc11" + } + }, + { + "cell_type": "markdown", + "source": [ + "Agora, vamos carregar esses pacotes incríveis e torná-los disponíveis na nossa sessão atual do R. (Isso é apenas para ilustração, `pacman::p_load()` já fez isso por você)\n" + ], + "metadata": { + "id": "gpO_P_6f9WUG" + } + }, + { + "cell_type": "code", + "execution_count": null, + "source": [ + "# load the core Tidyverse packages\r\n", + "library(tidyverse)\r\n", + "\r\n", + "# load the core Tidymodels packages\r\n", + "library(tidymodels)\r\n" + ], + "outputs": [], + "metadata": { + "id": "NLMycgG-9ezO" + } + }, + { + "cell_type": "markdown", + "source": [ + "## 2. O conjunto de dados de diabetes\n", + "\n", + "Neste exercício, vamos demonstrar nossas habilidades de regressão fazendo previsões em um conjunto de dados de diabetes. O [conjunto de dados de diabetes](https://www4.stat.ncsu.edu/~boos/var.select/diabetes.rwrite1.txt) inclui `442 amostras` de dados relacionados ao diabetes, com 10 variáveis preditoras, `idade`, `sexo`, `índice de massa corporal`, `pressão arterial média` e `seis medições de soro sanguíneo`, além de uma variável de resultado `y`: uma medida quantitativa da progressão da doença um ano após a linha de base.\n", + "\n", + "|Número de observações|442|\n", + "|----------------------|:---|\n", + "|Número de preditores|As primeiras 10 colunas são preditivas numéricas|\n", + "|Resultado/Alvo|A coluna 11 é uma medida quantitativa da progressão da doença um ano após a linha de base|\n", + "|Informações dos preditores|- idade em anos\n", + "||- sexo\n", + "||- bmi índice de massa corporal\n", + "||- bp pressão arterial média\n", + "||- s1 tc, colesterol total no soro\n", + "||- s2 ldl, lipoproteínas de baixa densidade\n", + "||- s3 hdl, lipoproteínas de alta densidade\n", + "||- s4 tch, colesterol total / HDL\n", + "||- s5 ltg, possivelmente logaritmo do nível de triglicerídeos no soro\n", + "||- s6 glu, nível de açúcar no sangue|\n", + "\n", + "> 🎓 Lembre-se, isso é aprendizado supervisionado, e precisamos de um alvo chamado 'y'.\n", + "\n", + "Antes de manipular os dados com R, você precisa importar os dados para a memória do R ou estabelecer uma conexão com os dados que o R possa usar para acessá-los remotamente.\n", + "\n", + "> O pacote [readr](https://readr.tidyverse.org/), que faz parte do Tidyverse, oferece uma maneira rápida e amigável de ler dados retangulares no R.\n", + "\n", + "Agora, vamos carregar o conjunto de dados de diabetes fornecido neste URL de origem: \n", + "\n", + "Além disso, faremos uma verificação básica nos dados usando `glimpse()` e exibiremos as primeiras 5 linhas usando `slice()`.\n", + "\n", + "Antes de prosseguir, vamos também introduzir algo que você encontrará frequentemente no código R 🥁🥁: o operador pipe `%>%`\n", + "\n", + "O operador pipe (`%>%`) realiza operações em sequência lógica, passando um objeto para frente em uma função ou expressão de chamada. Você pode pensar no operador pipe como dizendo \"e então\" no seu código.\n" + ], + "metadata": { + "id": "KM6iXLH996Cl" + } + }, + { + "cell_type": "code", + "execution_count": null, + "source": [ + "# Import the data set\r\n", + "diabetes <- read_table2(file = \"https://www4.stat.ncsu.edu/~boos/var.select/diabetes.rwrite1.txt\")\r\n", + "\r\n", + "\r\n", + "# Get a glimpse and dimensions of the data\r\n", + "glimpse(diabetes)\r\n", + "\r\n", + "\r\n", + "# Select the first 5 rows of the data\r\n", + "diabetes %>% \r\n", + " slice(1:5)" + ], + "outputs": [], + "metadata": { + "id": "Z1geAMhM-bSP" + } + }, + { + "cell_type": "markdown", + "source": [ + "`glimpse()` nos mostra que esses dados possuem 442 linhas e 11 colunas, com todas as colunas sendo do tipo de dado `double`.\n", + "\n", + "
\n", + "\n", + "> glimpse() e slice() são funções do [`dplyr`](https://dplyr.tidyverse.org/). Dplyr, parte do Tidyverse, é uma gramática de manipulação de dados que fornece um conjunto consistente de verbos para ajudar a resolver os desafios mais comuns de manipulação de dados.\n", + "\n", + "
\n", + "\n", + "Agora que temos os dados, vamos focar em uma única característica (`bmi`) como alvo para este exercício. Isso exigirá que selecionemos as colunas desejadas. Então, como fazemos isso?\n", + "\n", + "[`dplyr::select()`](https://dplyr.tidyverse.org/reference/select.html) nos permite *selecionar* (e opcionalmente renomear) colunas em um data frame.\n" + ], + "metadata": { + "id": "UwjVT1Hz-c3Z" + } + }, + { + "cell_type": "code", + "execution_count": null, + "source": [ + "# Select predictor feature `bmi` and outcome `y`\r\n", + "diabetes_select <- diabetes %>% \r\n", + " select(c(bmi, y))\r\n", + "\r\n", + "# Print the first 5 rows\r\n", + "diabetes_select %>% \r\n", + " slice(1:10)" + ], + "outputs": [], + "metadata": { + "id": "RDY1oAKI-m80" + } + }, + { + "cell_type": "markdown", + "source": [ + "## 3. Dados de Treinamento e Teste\n", + "\n", + "É uma prática comum em aprendizado supervisionado *dividir* os dados em dois subconjuntos: um conjunto (geralmente maior) para treinar o modelo e um conjunto menor \"reservado\" para verificar como o modelo se saiu.\n", + "\n", + "Agora que temos os dados prontos, podemos verificar se uma máquina pode ajudar a determinar uma divisão lógica entre os números neste conjunto de dados. Podemos usar o pacote [rsample](https://tidymodels.github.io/rsample/), que faz parte do framework Tidymodels, para criar um objeto que contém as informações sobre *como* dividir os dados, e então usar mais duas funções do rsample para extrair os conjuntos de treinamento e teste criados:\n" + ], + "metadata": { + "id": "SDk668xK-tc3" + } + }, + { + "cell_type": "code", + "execution_count": null, + "source": [ + "set.seed(2056)\r\n", + "# Split 67% of the data for training and the rest for tesing\r\n", + "diabetes_split <- diabetes_select %>% \r\n", + " initial_split(prop = 0.67)\r\n", + "\r\n", + "# Extract the resulting train and test sets\r\n", + "diabetes_train <- training(diabetes_split)\r\n", + "diabetes_test <- testing(diabetes_split)\r\n", + "\r\n", + "# Print the first 3 rows of the training set\r\n", + "diabetes_train %>% \r\n", + " slice(1:10)" + ], + "outputs": [], + "metadata": { + "id": "EqtHx129-1h-" + } + }, + { + "cell_type": "markdown", + "source": [ + "## 4. Treinar um modelo de regressão linear com Tidymodels\n", + "\n", + "Agora estamos prontos para treinar nosso modelo!\n", + "\n", + "No Tidymodels, você especifica modelos usando `parsnip()` ao definir três conceitos:\n", + "\n", + "- O **tipo** do modelo diferencia modelos como regressão linear, regressão logística, modelos de árvore de decisão, entre outros.\n", + "\n", + "- O **modo** do modelo inclui opções comuns como regressão e classificação; alguns tipos de modelo suportam ambos, enquanto outros possuem apenas um modo.\n", + "\n", + "- O **motor** do modelo é a ferramenta computacional que será usada para ajustar o modelo. Frequentemente, são pacotes do R, como **`\"lm\"`** ou **`\"ranger\"`**.\n", + "\n", + "Essas informações de modelagem são capturadas em uma especificação de modelo, então vamos criar uma!\n" + ], + "metadata": { + "id": "sBOS-XhB-6v7" + } + }, + { + "cell_type": "code", + "execution_count": null, + "source": [ + "# Build a linear model specification\r\n", + "lm_spec <- \r\n", + " # Type\r\n", + " linear_reg() %>% \r\n", + " # Engine\r\n", + " set_engine(\"lm\") %>% \r\n", + " # Mode\r\n", + " set_mode(\"regression\")\r\n", + "\r\n", + "\r\n", + "# Print the model specification\r\n", + "lm_spec" + ], + "outputs": [], + "metadata": { + "id": "20OwEw20--t3" + } + }, + { + "cell_type": "markdown", + "source": [ + "Depois que um modelo foi *especificado*, ele pode ser `estimado` ou `treinado` usando a função [`fit()`](https://parsnip.tidymodels.org/reference/fit.html), geralmente utilizando uma fórmula e alguns dados.\n", + "\n", + "`y ~ .` significa que ajustaremos `y` como a quantidade/objetivo previsto, explicado por todos os preditores/características, ou seja, `.` (neste caso, temos apenas um preditor: `bmi`).\n" + ], + "metadata": { + "id": "_oDHs89k_CJj" + } + }, + { + "cell_type": "code", + "execution_count": null, + "source": [ + "# Build a linear model specification\r\n", + "lm_spec <- linear_reg() %>% \r\n", + " set_engine(\"lm\") %>%\r\n", + " set_mode(\"regression\")\r\n", + "\r\n", + "\r\n", + "# Train a linear regression model\r\n", + "lm_mod <- lm_spec %>% \r\n", + " fit(y ~ ., data = diabetes_train)\r\n", + "\r\n", + "# Print the model\r\n", + "lm_mod" + ], + "outputs": [], + "metadata": { + "id": "YlsHqd-q_GJQ" + } + }, + { + "cell_type": "markdown", + "source": [ + "A partir do resultado do modelo, podemos observar os coeficientes aprendidos durante o treinamento. Eles representam os coeficientes da linha de melhor ajuste que nos dá o menor erro geral entre a variável real e a prevista. \n", + "
\n", + "\n", + "## 5. Fazer previsões no conjunto de teste\n", + "\n", + "Agora que treinamos um modelo, podemos usá-lo para prever a progressão da doença y para o conjunto de dados de teste usando [parsnip::predict()](https://parsnip.tidymodels.org/reference/predict.model_fit.html). Isso será usado para traçar a linha entre os grupos de dados.\n" + ], + "metadata": { + "id": "kGZ22RQj_Olu" + } + }, + { + "cell_type": "code", + "execution_count": null, + "source": [ + "# Make predictions for the test set\r\n", + "predictions <- lm_mod %>% \r\n", + " predict(new_data = diabetes_test)\r\n", + "\r\n", + "# Print out some of the predictions\r\n", + "predictions %>% \r\n", + " slice(1:5)" + ], + "outputs": [], + "metadata": { + "id": "nXHbY7M2_aao" + } + }, + { + "cell_type": "markdown", + "source": [ + "Uhuu! 💃🕺 Acabamos de treinar um modelo e usá-lo para fazer previsões!\n", + "\n", + "Ao fazer previsões, a convenção do tidymodels é sempre produzir um tibble/data frame de resultados com nomes de colunas padronizados. Isso facilita a combinação dos dados originais com as previsões em um formato utilizável para operações subsequentes, como criação de gráficos.\n", + "\n", + "`dplyr::bind_cols()` une de forma eficiente várias data frames por coluna.\n" + ], + "metadata": { + "id": "R_JstwUY_bIs" + } + }, + { + "cell_type": "code", + "execution_count": null, + "source": [ + "# Combine the predictions and the original test set\r\n", + "results <- diabetes_test %>% \r\n", + " bind_cols(predictions)\r\n", + "\r\n", + "\r\n", + "results %>% \r\n", + " slice(1:5)" + ], + "outputs": [], + "metadata": { + "id": "RybsMJR7_iI8" + } + }, + { + "cell_type": "markdown", + "source": [ + "## 6. Plotar resultados do modelo\n", + "\n", + "Agora é hora de visualizar isso 📈. Vamos criar um gráfico de dispersão com todos os valores de `y` e `bmi` do conjunto de teste e, em seguida, usar as previsões para desenhar uma linha no lugar mais apropriado, entre os agrupamentos de dados do modelo.\n", + "\n", + "O R possui vários sistemas para criar gráficos, mas o `ggplot2` é um dos mais elegantes e versáteis. Ele permite que você componha gráficos **combinando componentes independentes**.\n" + ], + "metadata": { + "id": "XJbYbMZW_n_s" + } + }, + { + "cell_type": "code", + "execution_count": null, + "source": [ + "# Set a theme for the plot\r\n", + "theme_set(theme_light())\r\n", + "# Create a scatter plot\r\n", + "results %>% \r\n", + " ggplot(aes(x = bmi)) +\r\n", + " # Add a scatter plot\r\n", + " geom_point(aes(y = y), size = 1.6) +\r\n", + " # Add a line plot\r\n", + " geom_line(aes(y = .pred), color = \"blue\", size = 1.5)" + ], + "outputs": [], + "metadata": { + "id": "R9tYp3VW_sTn" + } + }, + { + "cell_type": "markdown", + "source": [ + "✅ Pense um pouco sobre o que está acontecendo aqui. Uma linha reta está passando por vários pequenos pontos de dados, mas o que exatamente ela está fazendo? Você consegue perceber como deveria ser possível usar essa linha para prever onde um novo ponto de dados, ainda não visto, deveria se encaixar em relação ao eixo y do gráfico? Tente colocar em palavras o uso prático desse modelo.\n", + "\n", + "Parabéns, você construiu seu primeiro modelo de regressão linear, fez uma previsão com ele e a exibiu em um gráfico!\n" + ], + "metadata": { + "id": "zrPtHIxx_tNI" + } + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n---\n\n**Aviso Legal**: \nEste documento foi traduzido utilizando o serviço de tradução por IA [Co-op Translator](https://github.com/Azure/co-op-translator). Embora nos esforcemos para garantir a precisão, esteja ciente de que traduções automatizadas podem conter erros ou imprecisões. O documento original em seu idioma nativo deve ser considerado a fonte autoritativa. Para informações críticas, recomenda-se a tradução profissional realizada por humanos. Não nos responsabilizamos por quaisquer mal-entendidos ou interpretações equivocadas decorrentes do uso desta tradução.\n" + ] + } + ] +} \ No newline at end of file diff --git a/translations/pt-BR/2-Regression/1-Tools/solution/notebook.ipynb b/translations/pt-BR/2-Regression/1-Tools/solution/notebook.ipynb new file mode 100644 index 000000000..8753e05b0 --- /dev/null +++ b/translations/pt-BR/2-Regression/1-Tools/solution/notebook.ipynb @@ -0,0 +1,675 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Importar bibliotecas necessárias\n" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "import matplotlib.pyplot as plt\n", + "import numpy as np\n", + "from sklearn import datasets, linear_model, model_selection\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Carregue o conjunto de dados de diabetes, dividido em dados `X` e características `y`\n" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "(442, 10)\n", + "[ 0.03807591 0.05068012 0.06169621 0.02187239 -0.0442235 -0.03482076\n", + " -0.04340085 -0.00259226 0.01990749 -0.01764613]\n" + ] + } + ], + "source": [ + "X, y = datasets.load_diabetes(return_X_y=True)\n", + "print(X.shape)\n", + "print(X[0])" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Selecione apenas uma funcionalidade para focar neste exercício\n" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "(442,)\n" + ] + } + ], + "source": [ + "# Selecting the 3rd feature\n", + "X = X[:, 2]\n", + "print(X.shape)\n" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "(442, 1)\n", + "[[ 0.06169621]\n", + " [-0.05147406]\n", + " [ 0.04445121]\n", + " [-0.01159501]\n", + " [-0.03638469]\n", + " [-0.04069594]\n", + " [-0.04716281]\n", + " [-0.00189471]\n", + " [ 0.06169621]\n", + " [ 0.03906215]\n", + " [-0.08380842]\n", + " [ 0.01750591]\n", + " [-0.02884001]\n", + " [-0.00189471]\n", + " [-0.02560657]\n", + " [-0.01806189]\n", + " [ 0.04229559]\n", + " [ 0.01211685]\n", + " [-0.0105172 ]\n", + " [-0.01806189]\n", + " [-0.05686312]\n", + " [-0.02237314]\n", + " [-0.00405033]\n", + " [ 0.06061839]\n", + " [ 0.03582872]\n", + " [-0.01267283]\n", + " [-0.07734155]\n", + " [ 0.05954058]\n", + " [-0.02129532]\n", + " [-0.00620595]\n", + " [ 0.04445121]\n", + " [-0.06548562]\n", + " [ 0.12528712]\n", + " [-0.05039625]\n", + " [-0.06332999]\n", + " [-0.03099563]\n", + " [ 0.02289497]\n", + " [ 0.01103904]\n", + " [ 0.07139652]\n", + " [ 0.01427248]\n", + " [-0.00836158]\n", + " [-0.06764124]\n", + " [-0.0105172 ]\n", + " [-0.02345095]\n", + " [ 0.06816308]\n", + " [-0.03530688]\n", + " [-0.01159501]\n", + " [-0.0730303 ]\n", + " [-0.04177375]\n", + " [ 0.01427248]\n", + " [-0.00728377]\n", + " [ 0.0164281 ]\n", + " [-0.00943939]\n", + " [-0.01590626]\n", + " [ 0.0250506 ]\n", + " [-0.04931844]\n", + " [ 0.04121778]\n", + " [-0.06332999]\n", + " [-0.06440781]\n", + " [-0.02560657]\n", + " [-0.00405033]\n", + " [ 0.00457217]\n", + " [-0.00728377]\n", + " [-0.0374625 ]\n", + " [-0.02560657]\n", + " [-0.02452876]\n", + " [-0.01806189]\n", + " [-0.01482845]\n", + " [-0.02991782]\n", + " [-0.046085 ]\n", + " [-0.06979687]\n", + " [ 0.03367309]\n", + " [-0.00405033]\n", + " [-0.02021751]\n", + " [ 0.00241654]\n", + " [-0.03099563]\n", + " [ 0.02828403]\n", + " [-0.03638469]\n", + " [-0.05794093]\n", + " [-0.0374625 ]\n", + " [ 0.01211685]\n", + " [-0.02237314]\n", + " [-0.03530688]\n", + " [ 0.00996123]\n", + " [-0.03961813]\n", + " [ 0.07139652]\n", + " [-0.07518593]\n", + " [-0.00620595]\n", + " [-0.04069594]\n", + " [-0.04824063]\n", + " [-0.02560657]\n", + " [ 0.0519959 ]\n", + " [ 0.00457217]\n", + " [-0.06440781]\n", + " [-0.01698407]\n", + " [-0.05794093]\n", + " [ 0.00996123]\n", + " [ 0.08864151]\n", + " [-0.00512814]\n", + " [-0.06440781]\n", + " [ 0.01750591]\n", + " [-0.04500719]\n", + " [ 0.02828403]\n", + " [ 0.04121778]\n", + " [ 0.06492964]\n", + " [-0.03207344]\n", + " [-0.07626374]\n", + " [ 0.04984027]\n", + " [ 0.04552903]\n", + " [-0.00943939]\n", + " [-0.03207344]\n", + " [ 0.00457217]\n", + " [ 0.02073935]\n", + " [ 0.01427248]\n", + " [ 0.11019775]\n", + " [ 0.00133873]\n", + " [ 0.05846277]\n", + " [-0.02129532]\n", + " [-0.0105172 ]\n", + " [-0.04716281]\n", + " [ 0.00457217]\n", + " [ 0.01750591]\n", + " [ 0.08109682]\n", + " [ 0.0347509 ]\n", + " [ 0.02397278]\n", + " [-0.00836158]\n", + " [-0.06117437]\n", + " [-0.00189471]\n", + " [-0.06225218]\n", + " [ 0.0164281 ]\n", + " [ 0.09618619]\n", + " [-0.06979687]\n", + " [-0.02129532]\n", + " [-0.05362969]\n", + " [ 0.0433734 ]\n", + " [ 0.05630715]\n", + " [-0.0816528 ]\n", + " [ 0.04984027]\n", + " [ 0.11127556]\n", + " [ 0.06169621]\n", + " [ 0.01427248]\n", + " [ 0.04768465]\n", + " [ 0.01211685]\n", + " [ 0.00564998]\n", + " [ 0.04660684]\n", + " [ 0.12852056]\n", + " [ 0.05954058]\n", + " [ 0.09295276]\n", + " [ 0.01535029]\n", + " [-0.00512814]\n", + " [ 0.0703187 ]\n", + " [-0.00405033]\n", + " [-0.00081689]\n", + " [-0.04392938]\n", + " [ 0.02073935]\n", + " [ 0.06061839]\n", + " [-0.0105172 ]\n", + " [-0.03315126]\n", + " [-0.06548562]\n", + " [ 0.0433734 ]\n", + " [-0.06225218]\n", + " [ 0.06385183]\n", + " [ 0.03043966]\n", + " [ 0.07247433]\n", + " [-0.0191397 ]\n", + " [-0.06656343]\n", + " [-0.06009656]\n", + " [ 0.06924089]\n", + " [ 0.05954058]\n", + " [-0.02668438]\n", + " [-0.02021751]\n", + " [-0.046085 ]\n", + " [ 0.07139652]\n", + " [-0.07949718]\n", + " [ 0.00996123]\n", + " [-0.03854032]\n", + " [ 0.01966154]\n", + " [ 0.02720622]\n", + " [-0.00836158]\n", + " [-0.01590626]\n", + " [ 0.00457217]\n", + " [-0.04285156]\n", + " [ 0.00564998]\n", + " [-0.03530688]\n", + " [ 0.02397278]\n", + " [-0.01806189]\n", + " [ 0.04229559]\n", + " [-0.0547075 ]\n", + " [-0.00297252]\n", + " [-0.06656343]\n", + " [-0.01267283]\n", + " [-0.04177375]\n", + " [-0.03099563]\n", + " [-0.00512814]\n", + " [-0.05901875]\n", + " [ 0.0250506 ]\n", + " [-0.046085 ]\n", + " [ 0.00349435]\n", + " [ 0.05415152]\n", + " [-0.04500719]\n", + " [-0.05794093]\n", + " [-0.05578531]\n", + " [ 0.00133873]\n", + " [ 0.03043966]\n", + " [ 0.00672779]\n", + " [ 0.04660684]\n", + " [ 0.02612841]\n", + " [ 0.04552903]\n", + " [ 0.04013997]\n", + " [-0.01806189]\n", + " [ 0.01427248]\n", + " [ 0.03690653]\n", + " [ 0.00349435]\n", + " [-0.07087468]\n", + " [-0.03315126]\n", + " [ 0.09403057]\n", + " [ 0.03582872]\n", + " [ 0.03151747]\n", + " [-0.06548562]\n", + " [-0.04177375]\n", + " [-0.03961813]\n", + " [-0.03854032]\n", + " [-0.02560657]\n", + " [-0.02345095]\n", + " [-0.06656343]\n", + " [ 0.03259528]\n", + " [-0.046085 ]\n", + " [-0.02991782]\n", + " [-0.01267283]\n", + " [-0.01590626]\n", + " [ 0.07139652]\n", + " [-0.03099563]\n", + " [ 0.00026092]\n", + " [ 0.03690653]\n", + " [ 0.03906215]\n", + " [-0.01482845]\n", + " [ 0.00672779]\n", + " [-0.06871905]\n", + " [-0.00943939]\n", + " [ 0.01966154]\n", + " [ 0.07462995]\n", + " [-0.00836158]\n", + " [-0.02345095]\n", + " [-0.046085 ]\n", + " [ 0.05415152]\n", + " [-0.03530688]\n", + " [-0.03207344]\n", + " [-0.0816528 ]\n", + " [ 0.04768465]\n", + " [ 0.06061839]\n", + " [ 0.05630715]\n", + " [ 0.09834182]\n", + " [ 0.05954058]\n", + " [ 0.03367309]\n", + " [ 0.05630715]\n", + " [-0.06548562]\n", + " [ 0.16085492]\n", + " [-0.05578531]\n", + " [-0.02452876]\n", + " [-0.03638469]\n", + " [-0.00836158]\n", + " [-0.04177375]\n", + " [ 0.12744274]\n", + " [-0.07734155]\n", + " [ 0.02828403]\n", + " [-0.02560657]\n", + " [-0.06225218]\n", + " [-0.00081689]\n", + " [ 0.08864151]\n", + " [-0.03207344]\n", + " [ 0.03043966]\n", + " [ 0.00888341]\n", + " [ 0.00672779]\n", + " [-0.02021751]\n", + " [-0.02452876]\n", + " [-0.01159501]\n", + " [ 0.02612841]\n", + " [-0.05901875]\n", + " [-0.03638469]\n", + " [-0.02452876]\n", + " [ 0.01858372]\n", + " [-0.0902753 ]\n", + " [-0.00512814]\n", + " [-0.05255187]\n", + " [-0.02237314]\n", + " [-0.02021751]\n", + " [-0.0547075 ]\n", + " [-0.00620595]\n", + " [-0.01698407]\n", + " [ 0.05522933]\n", + " [ 0.07678558]\n", + " [ 0.01858372]\n", + " [-0.02237314]\n", + " [ 0.09295276]\n", + " [-0.03099563]\n", + " [ 0.03906215]\n", + " [-0.06117437]\n", + " [-0.00836158]\n", + " [-0.0374625 ]\n", + " [-0.01375064]\n", + " [ 0.07355214]\n", + " [-0.02452876]\n", + " [ 0.03367309]\n", + " [ 0.0347509 ]\n", + " [-0.03854032]\n", + " [-0.03961813]\n", + " [-0.00189471]\n", + " [-0.03099563]\n", + " [-0.046085 ]\n", + " [ 0.00133873]\n", + " [ 0.06492964]\n", + " [ 0.04013997]\n", + " [-0.02345095]\n", + " [ 0.05307371]\n", + " [ 0.04013997]\n", + " [-0.02021751]\n", + " [ 0.01427248]\n", + " [-0.03422907]\n", + " [ 0.00672779]\n", + " [ 0.00457217]\n", + " [ 0.03043966]\n", + " [ 0.0519959 ]\n", + " [ 0.06169621]\n", + " [-0.00728377]\n", + " [ 0.00564998]\n", + " [ 0.05415152]\n", + " [-0.00836158]\n", + " [ 0.114509 ]\n", + " [ 0.06708527]\n", + " [-0.05578531]\n", + " [ 0.03043966]\n", + " [-0.02560657]\n", + " [ 0.10480869]\n", + " [-0.00620595]\n", + " [-0.04716281]\n", + " [-0.04824063]\n", + " [ 0.08540807]\n", + " [-0.01267283]\n", + " [-0.03315126]\n", + " [-0.00728377]\n", + " [-0.01375064]\n", + " [ 0.05954058]\n", + " [ 0.02181716]\n", + " [ 0.01858372]\n", + " [-0.01159501]\n", + " [-0.00297252]\n", + " [ 0.01750591]\n", + " [-0.02991782]\n", + " [-0.02021751]\n", + " [-0.05794093]\n", + " [ 0.06061839]\n", + " [-0.04069594]\n", + " [-0.07195249]\n", + " [-0.05578531]\n", + " [ 0.04552903]\n", + " [-0.00943939]\n", + " [-0.03315126]\n", + " [ 0.04984027]\n", + " [-0.08488624]\n", + " [ 0.00564998]\n", + " [ 0.02073935]\n", + " [-0.00728377]\n", + " [ 0.10480869]\n", + " [-0.02452876]\n", + " [-0.00620595]\n", + " [-0.03854032]\n", + " [ 0.13714305]\n", + " [ 0.17055523]\n", + " [ 0.00241654]\n", + " [ 0.03798434]\n", + " [-0.05794093]\n", + " [-0.00943939]\n", + " [-0.02345095]\n", + " [-0.0105172 ]\n", + " [-0.03422907]\n", + " [-0.00297252]\n", + " [ 0.06816308]\n", + " [ 0.00996123]\n", + " [ 0.00241654]\n", + " [-0.03854032]\n", + " [ 0.02612841]\n", + " [-0.08919748]\n", + " [ 0.06061839]\n", + " [-0.02884001]\n", + " [-0.02991782]\n", + " [-0.0191397 ]\n", + " [-0.04069594]\n", + " [ 0.01535029]\n", + " [-0.02452876]\n", + " [ 0.00133873]\n", + " [ 0.06924089]\n", + " [-0.06979687]\n", + " [-0.02991782]\n", + " [-0.046085 ]\n", + " [ 0.01858372]\n", + " [ 0.00133873]\n", + " [-0.03099563]\n", + " [-0.00405033]\n", + " [ 0.01535029]\n", + " [ 0.02289497]\n", + " [ 0.04552903]\n", + " [-0.04500719]\n", + " [-0.03315126]\n", + " [ 0.097264 ]\n", + " [ 0.05415152]\n", + " [ 0.12313149]\n", + " [-0.08057499]\n", + " [ 0.09295276]\n", + " [-0.05039625]\n", + " [-0.01159501]\n", + " [-0.0277622 ]\n", + " [ 0.05846277]\n", + " [ 0.08540807]\n", + " [-0.00081689]\n", + " [ 0.00672779]\n", + " [ 0.00888341]\n", + " [ 0.08001901]\n", + " [ 0.07139652]\n", + " [-0.02452876]\n", + " [-0.0547075 ]\n", + " [-0.03638469]\n", + " [ 0.0164281 ]\n", + " [ 0.07786339]\n", + " [-0.03961813]\n", + " [ 0.01103904]\n", + " [-0.04069594]\n", + " [-0.03422907]\n", + " [ 0.00564998]\n", + " [ 0.08864151]\n", + " [-0.03315126]\n", + " [-0.05686312]\n", + " [-0.03099563]\n", + " [ 0.05522933]\n", + " [-0.06009656]\n", + " [ 0.00133873]\n", + " [-0.02345095]\n", + " [-0.07410811]\n", + " [ 0.01966154]\n", + " [-0.01590626]\n", + " [-0.01590626]\n", + " [ 0.03906215]\n", + " [-0.0730303 ]]\n" + ] + } + ], + "source": [ + "#Reshaping to get a 2D array\n", + "X = X.reshape(-1, 1)\n", + "print(X.shape)\n", + "print(X)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Divida os dados de treinamento e teste tanto para `X` quanto para `y`\n" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [], + "source": [ + "X_train, X_test, y_train, y_test = model_selection.train_test_split(X, y, test_size=0.33)\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Selecione o modelo e ajuste-o com os dados de treinamento\n" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
LinearRegression()
In a Jupyter environment, please rerun this cell to show the HTML representation or trust the notebook.
On GitHub, the HTML representation is unable to render, please try loading this page with nbviewer.org.
" + ], + "text/plain": [ + "LinearRegression()" + ] + }, + "execution_count": 6, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "model = linear_model.LinearRegression()\n", + "model.fit(X_train, y_train)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Use dados de teste para prever uma linha\n" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [], + "source": [ + "y_pred = model.predict(X_test)\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Exiba os resultados em um gráfico\n" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAigAAAGdCAYAAAA44ojeAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy88F64QAAAACXBIWXMAAA9hAAAPYQGoP6dpAABbmUlEQVR4nO3de3wU1f0//tcQIHIxiQmBALsQUdSigNYLxn6iSaECaj/5NKTawAfRWi2IbUBRS71gtIrKp5rUj5dqK7ZfXfwAWcVS8ALuYtCIQEERvAC/cAtJoCBJQAhkc35/rLtmk92dmd2Z2ZnZ1/Px2Edl92Tm7CTd894z7/M+khBCgIiIiMhEuiW6A0RERESdMUAhIiIi02GAQkRERKbDAIWIiIhMhwEKERERmQ4DFCIiIjIdBihERERkOgxQiIiIyHS6J7oDsWhvb8f+/ftx+umnQ5KkRHeHiIiIFBBCoKWlBYMGDUK3btHnSCwZoOzfvx9OpzPR3SAiIqIY7N27Fw6HI2obSwYop59+OgD/G0xLS0twb4iIiEiJ5uZmOJ3O4DgejSUDlMBtnbS0NAYoREREFqMkPYNJskRERGQ6DFCIiIjIdBigEBERkekwQCEiIiLTYYBCREREpqMqQHn++ecxatSo4OqZvLw8rFy5Mvh6QUEBJEkKeUyfPj3kGHv27MG1116L3r17o3///rj77rvR1tamzbshIiIiW1C1zNjhcODxxx/H8OHDIYTA3/72NxQVFWHTpk04//zzAQC33norHn744eDP9O7dO/jfPp8P1157LXJycvDRRx+hvr4eN954I3r06IHHHntMo7dEREREVicJIUQ8B8jMzMSCBQtwyy23oKCgABdeeCEqKirCtl25ciWuu+467N+/HwMGDAAAvPDCC7j33ntx8OBB9OzZU9E5m5ubkZ6ejqamJtZBISIisgg143fMOSg+nw+vv/46jh07hry8vODzr732Gvr164cLLrgAc+fOxbfffht8raamBiNHjgwGJwAwfvx4NDc3Y+vWrRHP1draiubm5pAHERERac/n88Hr9WLRokXwer3w+XwJ6YfqSrJbtmxBXl4eTpw4gb59++KNN97AiBEjAACTJ0/G0KFDMWjQIHz22We499578dVXX8HtdgMAGhoaQoITAMF/NzQ0RDzn/PnzUV5errarREREpILb7UZZWRn2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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "plt.scatter(X_test, y_test, color='black')\n", + "plt.plot(X_test, y_pred, color='blue', linewidth=3)\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n---\n\n**Aviso Legal**: \nEste documento foi traduzido utilizando o serviço de tradução por IA [Co-op Translator](https://github.com/Azure/co-op-translator). Embora nos esforcemos para garantir a precisão, esteja ciente de que traduções automatizadas podem conter erros ou imprecisões. O documento original em seu idioma nativo deve ser considerado a fonte autoritativa. Para informações críticas, recomenda-se a tradução profissional realizada por humanos. Não nos responsabilizamos por quaisquer mal-entendidos ou interpretações equivocadas decorrentes do uso desta tradução.\n" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.11.1" + }, + "metadata": { + "interpreter": { + "hash": "70b38d7a306a849643e446cd70466270a13445e5987dfa1344ef2b127438fa4d" + } + }, + "orig_nbformat": 2, + "coopTranslator": { + "original_hash": "16ff1a974f6e4348e869e4a7d366b86a", + "translation_date": "2025-08-29T23:06:23+00:00", + "source_file": "2-Regression/1-Tools/solution/notebook.ipynb", + "language_code": "br" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} \ No newline at end of file diff --git a/translations/pt-BR/2-Regression/2-Data/README.md b/translations/pt-BR/2-Regression/2-Data/README.md new file mode 100644 index 000000000..698becffb --- /dev/null +++ b/translations/pt-BR/2-Regression/2-Data/README.md @@ -0,0 +1,217 @@ +# Construir um modelo de regressão usando Scikit-learn: preparar e visualizar dados + +![Infográfico de visualização de dados](../../../../2-Regression/2-Data/images/data-visualization.png) + +Infográfico por [Dasani Madipalli](https://twitter.com/dasani_decoded) + +## [Quiz pré-aula](https://ff-quizzes.netlify.app/en/ml/) + +> ### [Esta lição está disponível em R!](../../../../2-Regression/2-Data/solution/R/lesson_2.html) + +## Introdução + +Agora que você está equipado com as ferramentas necessárias para começar a construir modelos de aprendizado de máquina com Scikit-learn, está pronto para começar a fazer perguntas sobre seus dados. Ao trabalhar com dados e aplicar soluções de aprendizado de máquina, é muito importante saber como fazer as perguntas certas para desbloquear adequadamente o potencial do seu conjunto de dados. + +Nesta lição, você aprenderá: + +- Como preparar seus dados para a construção de modelos. +- Como usar o Matplotlib para visualização de dados. + +## Fazendo as perguntas certas sobre seus dados + +A pergunta que você precisa responder determinará o tipo de algoritmos de aprendizado de máquina que você usará. E a qualidade da resposta que você obtém dependerá muito da natureza dos seus dados. + +Dê uma olhada nos [dados](https://github.com/microsoft/ML-For-Beginners/blob/main/2-Regression/data/US-pumpkins.csv) fornecidos para esta lição. Você pode abrir este arquivo .csv no VS Code. Uma rápida olhada mostra imediatamente que há lacunas e uma mistura de dados em formato de texto e numérico. Há também uma coluna estranha chamada 'Package', onde os dados são uma mistura de 'sacks', 'bins' e outros valores. Os dados, na verdade, estão um pouco bagunçados. + +[![ML para iniciantes - Como analisar e limpar um conjunto de dados](https://img.youtube.com/vi/5qGjczWTrDQ/0.jpg)](https://youtu.be/5qGjczWTrDQ "ML para iniciantes - Como analisar e limpar um conjunto de dados") + +> 🎥 Clique na imagem acima para assistir a um vídeo curto sobre como preparar os dados para esta lição. + +Na verdade, não é muito comum receber um conjunto de dados completamente pronto para criar um modelo de aprendizado de máquina. Nesta lição, você aprenderá como preparar um conjunto de dados bruto usando bibliotecas padrão do Python. Você também aprenderá várias técnicas para visualizar os dados. + +## Estudo de caso: 'o mercado de abóboras' + +Nesta pasta, você encontrará um arquivo .csv na pasta raiz `data` chamado [US-pumpkins.csv](https://github.com/microsoft/ML-For-Beginners/blob/main/2-Regression/data/US-pumpkins.csv), que inclui 1757 linhas de dados sobre o mercado de abóboras, organizados em agrupamentos por cidade. Estes são dados brutos extraídos dos [Relatórios Padrão dos Mercados de Produtos Especiais](https://www.marketnews.usda.gov/mnp/fv-report-config-step1?type=termPrice) distribuídos pelo Departamento de Agricultura dos Estados Unidos. + +### Preparando os dados + +Esses dados estão em domínio público. Eles podem ser baixados em vários arquivos separados, por cidade, no site do USDA. Para evitar muitos arquivos separados, concatenamos todos os dados das cidades em uma única planilha, ou seja, já _preparamos_ um pouco os dados. Agora, vamos dar uma olhada mais de perto nos dados. + +### Os dados das abóboras - primeiras conclusões + +O que você percebe sobre esses dados? Você já viu que há uma mistura de textos, números, lacunas e valores estranhos que você precisa interpretar. + +Que pergunta você pode fazer sobre esses dados, usando uma técnica de regressão? Que tal "Prever o preço de uma abóbora à venda durante um determinado mês"? Olhando novamente para os dados, há algumas mudanças que você precisa fazer para criar a estrutura de dados necessária para essa tarefa. + +## Exercício - analisar os dados das abóboras + +Vamos usar o [Pandas](https://pandas.pydata.org/) (o nome significa `Python Data Analysis`), uma ferramenta muito útil para modelar dados, para analisar e preparar esses dados de abóboras. + +### Primeiro, verifique se há datas ausentes + +Você precisará primeiro tomar medidas para verificar se há datas ausentes: + +1. Converta as datas para o formato de mês (estas são datas dos EUA, então o formato é `MM/DD/YYYY`). +2. Extraia o mês para uma nova coluna. + +Abra o arquivo _notebook.ipynb_ no Visual Studio Code e importe a planilha para um novo dataframe do Pandas. + +1. Use a função `head()` para visualizar as cinco primeiras linhas. + + ```python + import pandas as pd + pumpkins = pd.read_csv('../data/US-pumpkins.csv') + pumpkins.head() + ``` + + ✅ Qual função você usaria para visualizar as últimas cinco linhas? + +1. Verifique se há dados ausentes no dataframe atual: + + ```python + pumpkins.isnull().sum() + ``` + + Há dados ausentes, mas talvez isso não importe para a tarefa em questão. + +1. Para tornar seu dataframe mais fácil de trabalhar, selecione apenas as colunas necessárias, usando a função `loc`, que extrai do dataframe original um grupo de linhas (passado como primeiro parâmetro) e colunas (passado como segundo parâmetro). A expressão `:` no caso abaixo significa "todas as linhas". + + ```python + columns_to_select = ['Package', 'Low Price', 'High Price', 'Date'] + pumpkins = pumpkins.loc[:, columns_to_select] + ``` + +### Segundo, determine o preço médio da abóbora + +Pense em como determinar o preço médio de uma abóbora em um determinado mês. Quais colunas você escolheria para essa tarefa? Dica: você precisará de 3 colunas. + +Solução: calcule a média das colunas `Low Price` e `High Price` para preencher a nova coluna Price e converta a coluna Date para mostrar apenas o mês. Felizmente, de acordo com a verificação acima, não há dados ausentes para datas ou preços. + +1. Para calcular a média, adicione o seguinte código: + + ```python + price = (pumpkins['Low Price'] + pumpkins['High Price']) / 2 + + month = pd.DatetimeIndex(pumpkins['Date']).month + + ``` + + ✅ Sinta-se à vontade para imprimir qualquer dado que desejar verificar usando `print(month)`. + +2. Agora, copie seus dados convertidos para um novo dataframe do Pandas: + + ```python + new_pumpkins = pd.DataFrame({'Month': month, 'Package': pumpkins['Package'], 'Low Price': pumpkins['Low Price'],'High Price': pumpkins['High Price'], 'Price': price}) + ``` + + Imprimir seu dataframe mostrará um conjunto de dados limpo e organizado, no qual você pode construir seu novo modelo de regressão. + +### Mas espere! Há algo estranho aqui + +Se você olhar para a coluna `Package`, verá que as abóboras são vendidas em muitas configurações diferentes. Algumas são vendidas em medidas de '1 1/9 bushel', outras em '1/2 bushel', algumas por unidade, algumas por peso e outras em grandes caixas com larguras variadas. + +> Parece que é muito difícil pesar abóboras de forma consistente + +Ao investigar os dados originais, é interessante notar que qualquer coisa com `Unit of Sale` igual a 'EACH' ou 'PER BIN' também tem o tipo `Package` por polegada, por bin ou 'each'. Parece que é muito difícil pesar abóboras de forma consistente, então vamos filtrá-las selecionando apenas abóboras com a string 'bushel' na coluna `Package`. + +1. Adicione um filtro no início do arquivo, sob a importação inicial do .csv: + + ```python + pumpkins = pumpkins[pumpkins['Package'].str.contains('bushel', case=True, regex=True)] + ``` + + Se você imprimir os dados agora, verá que está obtendo apenas cerca de 415 linhas de dados contendo abóboras por bushel. + +### Mas espere! Há mais uma coisa a fazer + +Você percebeu que a quantidade de bushel varia por linha? Você precisa normalizar os preços para mostrar o preço por bushel, então faça alguns cálculos para padronizá-los. + +1. Adicione estas linhas após o bloco que cria o dataframe new_pumpkins: + + ```python + new_pumpkins.loc[new_pumpkins['Package'].str.contains('1 1/9'), 'Price'] = price/(1 + 1/9) + + new_pumpkins.loc[new_pumpkins['Package'].str.contains('1/2'), 'Price'] = price/(1/2) + ``` + +✅ De acordo com [The Spruce Eats](https://www.thespruceeats.com/how-much-is-a-bushel-1389308), o peso de um bushel depende do tipo de produto, pois é uma medida de volume. "Um bushel de tomates, por exemplo, deve pesar 56 libras... Folhas e verduras ocupam mais espaço com menos peso, então um bushel de espinafre pesa apenas 20 libras." É tudo muito complicado! Vamos evitar fazer uma conversão de bushel para libra e, em vez disso, precificar por bushel. Todo esse estudo sobre bushels de abóboras, no entanto, mostra como é muito importante entender a natureza dos seus dados! + +Agora, você pode analisar os preços por unidade com base na medida de bushel. Se você imprimir os dados mais uma vez, verá como eles estão padronizados. + +✅ Você percebeu que abóboras vendidas por meio bushel são muito caras? Consegue descobrir por quê? Dica: abóboras pequenas são muito mais caras do que grandes, provavelmente porque há muito mais delas por bushel, dado o espaço não utilizado ocupado por uma grande abóbora oca para torta. + +## Estratégias de visualização + +Parte do papel do cientista de dados é demonstrar a qualidade e a natureza dos dados com os quais está trabalhando. Para isso, eles frequentemente criam visualizações interessantes, como gráficos, diagramas e tabelas, mostrando diferentes aspectos dos dados. Dessa forma, eles conseguem mostrar visualmente relações e lacunas que, de outra forma, seriam difíceis de identificar. + +[![ML para iniciantes - Como visualizar dados com Matplotlib](https://img.youtube.com/vi/SbUkxH6IJo0/0.jpg)](https://youtu.be/SbUkxH6IJo0 "ML para iniciantes - Como visualizar dados com Matplotlib") + +> 🎥 Clique na imagem acima para assistir a um vídeo curto sobre como visualizar os dados para esta lição. + +As visualizações também podem ajudar a determinar a técnica de aprendizado de máquina mais apropriada para os dados. Um gráfico de dispersão que parece seguir uma linha, por exemplo, indica que os dados são bons candidatos para um exercício de regressão linear. + +Uma biblioteca de visualização de dados que funciona bem em notebooks Jupyter é o [Matplotlib](https://matplotlib.org/) (que você também viu na lição anterior). + +> Obtenha mais experiência com visualização de dados nestes [tutoriais](https://docs.microsoft.com/learn/modules/explore-analyze-data-with-python?WT.mc_id=academic-77952-leestott). + +## Exercício - experimente o Matplotlib + +Tente criar alguns gráficos básicos para exibir o novo dataframe que você acabou de criar. O que um gráfico de linha básico mostraria? + +1. Importe o Matplotlib no início do arquivo, sob a importação do Pandas: + + ```python + import matplotlib.pyplot as plt + ``` + +1. Execute novamente todo o notebook para atualizar. +1. No final do notebook, adicione uma célula para plotar os dados como um boxplot: + + ```python + price = new_pumpkins.Price + month = new_pumpkins.Month + plt.scatter(price, month) + plt.show() + ``` + + ![Um gráfico de dispersão mostrando a relação entre preço e mês](../../../../2-Regression/2-Data/images/scatterplot.png) + + Este gráfico é útil? Algo nele te surpreende? + + Não é particularmente útil, pois tudo o que faz é exibir seus dados como uma distribuição de pontos em um determinado mês. + +### Torne-o útil + +Para que os gráficos exibam dados úteis, geralmente é necessário agrupar os dados de alguma forma. Vamos tentar criar um gráfico onde o eixo y mostra os meses e os dados demonstram a distribuição. + +1. Adicione uma célula para criar um gráfico de barras agrupado: + + ```python + new_pumpkins.groupby(['Month'])['Price'].mean().plot(kind='bar') + plt.ylabel("Pumpkin Price") + ``` + + ![Um gráfico de barras mostrando a relação entre preço e mês](../../../../2-Regression/2-Data/images/barchart.png) + + Este é um gráfico de visualização de dados mais útil! Parece indicar que o preço mais alto das abóboras ocorre em setembro e outubro. Isso corresponde à sua expectativa? Por quê? + +--- + +## 🚀Desafio + +Explore os diferentes tipos de visualização que o Matplotlib oferece. Quais tipos são mais apropriados para problemas de regressão? + +## [Quiz pós-aula](https://ff-quizzes.netlify.app/en/ml/) + +## Revisão e Autoestudo + +Dê uma olhada nas várias maneiras de visualizar dados. Faça uma lista das diferentes bibliotecas disponíveis e anote quais são melhores para determinados tipos de tarefas, por exemplo, visualizações 2D versus visualizações 3D. O que você descobre? + +## Tarefa + +[Explorando visualização](assignment.md) + +--- + +**Aviso Legal**: +Este documento foi traduzido utilizando o serviço de tradução por IA [Co-op Translator](https://github.com/Azure/co-op-translator). Embora nos esforcemos para garantir a precisão, esteja ciente de que traduções automatizadas podem conter erros ou imprecisões. O documento original em seu idioma nativo deve ser considerado a fonte autoritativa. Para informações críticas, recomenda-se a tradução profissional realizada por humanos. Não nos responsabilizamos por quaisquer mal-entendidos ou interpretações equivocadas decorrentes do uso desta tradução. \ No newline at end of file diff --git a/translations/pt-BR/2-Regression/2-Data/assignment.md b/translations/pt-BR/2-Regression/2-Data/assignment.md new file mode 100644 index 000000000..09857b73e --- /dev/null +++ b/translations/pt-BR/2-Regression/2-Data/assignment.md @@ -0,0 +1,14 @@ +# Explorando Visualizações + +Existem várias bibliotecas disponíveis para visualização de dados. Crie algumas visualizações usando os dados de Pumpkin nesta lição com matplotlib e seaborn em um notebook de exemplo. Quais bibliotecas são mais fáceis de usar? + +## Rubrica + +| Critério | Exemplary | Adequado | Precisa de Melhorias | +| -------- | --------- | -------- | -------------------- | +| | Um notebook é enviado com duas explorações/visualizações | Um notebook é enviado com uma exploração/visualização | Um notebook não é enviado | + +--- + +**Aviso Legal**: +Este documento foi traduzido utilizando o serviço de tradução por IA [Co-op Translator](https://github.com/Azure/co-op-translator). Embora nos esforcemos para garantir a precisão, esteja ciente de que traduções automatizadas podem conter erros ou imprecisões. O documento original em seu idioma nativo deve ser considerado a fonte autoritativa. Para informações críticas, recomenda-se a tradução profissional realizada por humanos. Não nos responsabilizamos por quaisquer mal-entendidos ou interpretações equivocadas decorrentes do uso desta tradução. \ No newline at end of file diff --git a/translations/pt-BR/2-Regression/2-Data/notebook.ipynb b/translations/pt-BR/2-Regression/2-Data/notebook.ipynb new file mode 100644 index 000000000..de04b8988 --- /dev/null +++ b/translations/pt-BR/2-Regression/2-Data/notebook.ipynb @@ -0,0 +1,46 @@ +{ + "metadata": { + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.8.3-final" + }, + "orig_nbformat": 2, + "kernelspec": { + "name": "python3", + "display_name": "Python 3", + "language": "python" + }, + "coopTranslator": { + "original_hash": "1b2ab303ac6c604a34c6ca7a49077fc7", + "translation_date": "2025-08-29T23:10:40+00:00", + "source_file": "2-Regression/2-Data/notebook.ipynb", + "language_code": "br" + } + }, + "nbformat": 4, + "nbformat_minor": 2, + "cells": [ + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n---\n\n**Aviso Legal**: \nEste documento foi traduzido utilizando o serviço de tradução por IA [Co-op Translator](https://github.com/Azure/co-op-translator). Embora nos esforcemos para garantir a precisão, esteja ciente de que traduções automatizadas podem conter erros ou imprecisões. O documento original em seu idioma nativo deve ser considerado a fonte autoritativa. Para informações críticas, recomenda-se a tradução profissional realizada por humanos. Não nos responsabilizamos por quaisquer mal-entendidos ou interpretações equivocadas decorrentes do uso desta tradução.\n" + ] + } + ] +} \ No newline at end of file diff --git a/translations/pt-BR/2-Regression/2-Data/solution/Julia/README.md b/translations/pt-BR/2-Regression/2-Data/solution/Julia/README.md new file mode 100644 index 000000000..c58234bae --- /dev/null +++ b/translations/pt-BR/2-Regression/2-Data/solution/Julia/README.md @@ -0,0 +1,6 @@ + + +--- + +**Aviso Legal**: +Este documento foi traduzido utilizando o serviço de tradução por IA [Co-op Translator](https://github.com/Azure/co-op-translator). Embora nos esforcemos para garantir a precisão, esteja ciente de que traduções automatizadas podem conter erros ou imprecisões. O documento original em seu idioma nativo deve ser considerado a fonte autoritativa. Para informações críticas, recomenda-se a tradução profissional realizada por humanos. Não nos responsabilizamos por quaisquer mal-entendidos ou interpretações equivocadas decorrentes do uso desta tradução. \ No newline at end of file diff --git a/translations/pt-BR/2-Regression/2-Data/solution/R/lesson_2-R.ipynb b/translations/pt-BR/2-Regression/2-Data/solution/R/lesson_2-R.ipynb new file mode 100644 index 000000000..a91027f55 --- /dev/null +++ b/translations/pt-BR/2-Regression/2-Data/solution/R/lesson_2-R.ipynb @@ -0,0 +1,668 @@ +{ + "nbformat": 4, + "nbformat_minor": 2, + "metadata": { + "colab": { + "name": "lesson_2-R.ipynb", + "provenance": [], + "collapsed_sections": [], + "toc_visible": true + }, + "kernelspec": { + "name": "ir", + "display_name": "R" + }, + "language_info": { + "name": "R" + }, + "coopTranslator": { + "original_hash": "f3c335f9940cfd76528b3ef918b9b342", + "translation_date": "2025-08-29T23:16:14+00:00", + "source_file": "2-Regression/2-Data/solution/R/lesson_2-R.ipynb", + "language_code": "br" + } + }, + "cells": [ + { + "cell_type": "markdown", + "source": [ + "# Construir um modelo de regressão: preparar e visualizar dados\n", + "\n", + "## **Regressão Linear para Abóboras - Aula 2**\n", + "#### Introdução\n", + "\n", + "Agora que você já está equipado com as ferramentas necessárias para começar a construir modelos de aprendizado de máquina com Tidymodels e o Tidyverse, está pronto para começar a fazer perguntas sobre seus dados. Ao trabalhar com dados e aplicar soluções de aprendizado de máquina, é muito importante entender como formular a pergunta certa para desbloquear adequadamente o potencial do seu conjunto de dados.\n", + "\n", + "Nesta aula, você aprenderá:\n", + "\n", + "- Como preparar seus dados para a construção de modelos.\n", + "\n", + "- Como usar `ggplot2` para visualização de dados.\n", + "\n", + "A pergunta que você precisa responder determinará o tipo de algoritmos de aprendizado de máquina que você utilizará. E a qualidade da resposta que você obtiver dependerá fortemente da natureza dos seus dados.\n", + "\n", + "Vamos ver isso na prática por meio de um exercício.\n", + "\n", + "

\n", + " \n", + "

Arte por @allison_horst
\n" + ], + "metadata": { + "id": "Pg5aexcOPqAZ" + } + }, + { + "cell_type": "markdown", + "source": [ + "## 1. Importando dados de abóboras e invocando o Tidyverse\n", + "\n", + "Vamos precisar dos seguintes pacotes para explorar e manipular esta lição:\n", + "\n", + "- `tidyverse`: O [tidyverse](https://www.tidyverse.org/) é uma [coleção de pacotes R](https://www.tidyverse.org/packages) projetada para tornar a ciência de dados mais rápida, fácil e divertida!\n", + "\n", + "Você pode instalá-los assim:\n", + "\n", + "`install.packages(c(\"tidyverse\"))`\n", + "\n", + "O script abaixo verifica se você possui os pacotes necessários para completar este módulo e os instala para você caso algum esteja faltando.\n" + ], + "metadata": { + "id": "dc5WhyVdXAjR" + } + }, + { + "cell_type": "code", + "execution_count": null, + "source": [ + "suppressWarnings(if(!require(\"pacman\")) install.packages(\"pacman\"))\n", + "pacman::p_load(tidyverse)" + ], + "outputs": [], + "metadata": { + "id": "GqPYUZgfXOBt" + } + }, + { + "cell_type": "markdown", + "source": [ + "Agora, vamos iniciar alguns pacotes e carregar os [dados](https://github.com/microsoft/ML-For-Beginners/blob/main/2-Regression/data/US-pumpkins.csv) fornecidos para esta lição!\n" + ], + "metadata": { + "id": "kvjDTPDSXRr2" + } + }, + { + "cell_type": "code", + "execution_count": null, + "source": [ + "# Load the core Tidyverse packages\n", + "library(tidyverse)\n", + "\n", + "# Import the pumpkins data\n", + "pumpkins <- read_csv(file = \"https://raw.githubusercontent.com/microsoft/ML-For-Beginners/main/2-Regression/data/US-pumpkins.csv\")\n", + "\n", + "\n", + "# Get a glimpse and dimensions of the data\n", + "glimpse(pumpkins)\n", + "\n", + "\n", + "# Print the first 50 rows of the data set\n", + "pumpkins %>% \n", + " slice_head(n =50)" + ], + "outputs": [], + "metadata": { + "id": "VMri-t2zXqgD" + } + }, + { + "cell_type": "markdown", + "source": [ + "Um rápido `glimpse()` mostra imediatamente que há valores em branco e uma mistura de strings (`chr`) e dados numéricos (`dbl`). A coluna `Date` está no formato de texto e há também uma coluna estranha chamada `Package`, onde os dados são uma mistura de `sacks`, `bins` e outros valores. Na verdade, os dados estão um pouco bagunçados 😤.\n", + "\n", + "De fato, não é muito comum receber um conjunto de dados completamente pronto para ser usado na criação de um modelo de ML diretamente. Mas não se preocupe, nesta lição, você aprenderá como preparar um conjunto de dados bruto usando bibliotecas padrão do R 🧑‍🔧. Você também aprenderá várias técnicas para visualizar os dados. 📈📊\n", + "
\n", + "\n", + "> Um lembrete: O operador pipe (`%>%`) realiza operações em sequência lógica, passando um objeto adiante para uma função ou expressão. Você pode pensar no operador pipe como se estivesse dizendo \"e então\" no seu código.\n" + ], + "metadata": { + "id": "REWcIv9yX29v" + } + }, + { + "cell_type": "markdown", + "source": [ + "## 2. Verificar dados ausentes\n", + "\n", + "Um dos problemas mais comuns que os cientistas de dados precisam lidar é com dados incompletos ou ausentes. O R representa valores ausentes ou desconhecidos com um valor especial chamado sentinela: `NA` (Not Available).\n", + "\n", + "Então, como saberíamos que o data frame contém valores ausentes? \n", + "
\n", + "- Uma maneira direta seria usar a função base do R `anyNA`, que retorna os objetos lógicos `TRUE` ou `FALSE`.\n" + ], + "metadata": { + "id": "Zxfb3AM5YbUe" + } + }, + { + "cell_type": "code", + "execution_count": null, + "source": [ + "pumpkins %>% \n", + " anyNA()" + ], + "outputs": [], + "metadata": { + "id": "G--DQutAYltj" + } + }, + { + "cell_type": "markdown", + "source": [ + "Ótimo, parece que há alguns dados faltando! Esse é um bom ponto de partida.\n", + "\n", + "- Outra maneira seria usar a função `is.na()`, que indica quais elementos individuais da coluna estão ausentes com um valor lógico `TRUE`.\n" + ], + "metadata": { + "id": "mU-7-SB6YokF" + } + }, + { + "cell_type": "code", + "execution_count": null, + "source": [ + "pumpkins %>% \n", + " is.na() %>% \n", + " head(n = 7)" + ], + "outputs": [], + "metadata": { + "id": "W-DxDOR4YxSW" + } + }, + { + "cell_type": "markdown", + "source": [ + "Certo, trabalho concluído, mas com um dataframe tão grande como este, seria ineficiente e praticamente impossível revisar todas as linhas e colunas individualmente😴.\n", + "\n", + "- Uma maneira mais intuitiva seria calcular a soma dos valores ausentes para cada coluna:\n" + ], + "metadata": { + "id": "xUWxipKYY0o7" + } + }, + { + "cell_type": "code", + "execution_count": null, + "source": [ + "pumpkins %>% \n", + " is.na() %>% \n", + " colSums()" + ], + "outputs": [], + "metadata": { + "id": "ZRBWV6P9ZArL" + } + }, + { + "cell_type": "markdown", + "source": [ + "Muito melhor! Há dados faltando, mas talvez isso não importe para a tarefa em questão. Vamos ver o que uma análise mais aprofundada revela.\n", + "\n", + "> Junto com os incríveis conjuntos de pacotes e funções, o R possui uma documentação muito boa. Por exemplo, use `help(colSums)` ou `?colSums` para saber mais sobre a função.\n" + ], + "metadata": { + "id": "9gv-crB6ZD1Y" + } + }, + { + "cell_type": "markdown", + "source": [ + "## 3. Dplyr: Uma Gramática para Manipulação de Dados\n", + "\n", + "

\n", + " \n", + "

Arte por @allison_horst
\n", + "\n", + "\n", + "\n" + ], + "metadata": { + "id": "o4jLY5-VZO2C" + } + }, + { + "cell_type": "markdown", + "source": [ + "[`dplyr`](https://dplyr.tidyverse.org/), um pacote do Tidyverse, é uma gramática de manipulação de dados que oferece um conjunto consistente de verbos para ajudar a resolver os desafios mais comuns de manipulação de dados. Nesta seção, vamos explorar alguns dos verbos do dplyr! \n", + "
\n" + ], + "metadata": { + "id": "i5o33MQBZWWw" + } + }, + { + "cell_type": "markdown", + "source": [ + "#### dplyr::select()\n", + "\n", + "`select()` é uma função do pacote `dplyr` que ajuda você a escolher colunas para manter ou excluir.\n", + "\n", + "Para tornar seu data frame mais fácil de trabalhar, remova várias de suas colunas usando `select()`, mantendo apenas as colunas que você precisa.\n", + "\n", + "Por exemplo, neste exercício, nossa análise envolverá as colunas `Package`, `Low Price`, `High Price` e `Date`. Vamos selecionar essas colunas.\n" + ], + "metadata": { + "id": "x3VGMAGBZiUr" + } + }, + { + "cell_type": "code", + "execution_count": null, + "source": [ + "# Select desired columns\n", + "pumpkins <- pumpkins %>% \n", + " select(Package, `Low Price`, `High Price`, Date)\n", + "\n", + "\n", + "# Print data set\n", + "pumpkins %>% \n", + " slice_head(n = 5)" + ], + "outputs": [], + "metadata": { + "id": "F_FgxQnVZnM0" + } + }, + { + "cell_type": "markdown", + "source": [ + "#### dplyr::mutate()\n", + "\n", + "`mutate()` é uma função do pacote `dplyr` que ajuda a criar ou modificar colunas, mantendo as colunas existentes.\n", + "\n", + "A estrutura geral do `mutate` é:\n", + "\n", + "`data %>% mutate(nome_da_nova_coluna = o_que_ela_contem)`\n", + "\n", + "Vamos experimentar o `mutate` usando a coluna `Date` e realizando as seguintes operações:\n", + "\n", + "1. Converter as datas (atualmente do tipo caractere) para um formato de mês (essas são datas no formato dos EUA, ou seja, `MM/DD/YYYY`).\n", + "\n", + "2. Extrair o mês das datas para uma nova coluna.\n", + "\n", + "No R, o pacote [lubridate](https://lubridate.tidyverse.org/) facilita o trabalho com dados de data e hora. Então, vamos usar `dplyr::mutate()`, `lubridate::mdy()`, `lubridate::month()` e ver como alcançar os objetivos acima. Podemos descartar a coluna `Date`, já que não precisaremos mais dela nas operações subsequentes.\n" + ], + "metadata": { + "id": "2KKo0Ed9Z1VB" + } + }, + { + "cell_type": "code", + "execution_count": null, + "source": [ + "# Load lubridate\n", + "library(lubridate)\n", + "\n", + "pumpkins <- pumpkins %>% \n", + " # Convert the Date column to a date object\n", + " mutate(Date = mdy(Date)) %>% \n", + " # Extract month from Date\n", + " mutate(Month = month(Date)) %>% \n", + " # Drop Date column\n", + " select(-Date)\n", + "\n", + "# View the first few rows\n", + "pumpkins %>% \n", + " slice_head(n = 7)" + ], + "outputs": [], + "metadata": { + "id": "5joszIVSZ6xe" + } + }, + { + "cell_type": "markdown", + "source": [ + "Uhuu! 🤩\n", + "\n", + "Agora, vamos criar uma nova coluna chamada `Price`, que representa o preço médio de uma abóbora. Para isso, vamos calcular a média das colunas `Low Price` e `High Price` para preencher a nova coluna Price. \n", + "
\n" + ], + "metadata": { + "id": "nIgLjNMCZ-6Y" + } + }, + { + "cell_type": "code", + "execution_count": null, + "source": [ + "# Create a new column Price\n", + "pumpkins <- pumpkins %>% \n", + " mutate(Price = (`Low Price` + `High Price`)/2)\n", + "\n", + "# View the first few rows of the data\n", + "pumpkins %>% \n", + " slice_head(n = 5)" + ], + "outputs": [], + "metadata": { + "id": "Zo0BsqqtaJw2" + } + }, + { + "cell_type": "markdown", + "source": [ + "Yeees!💪\n", + "\n", + "\"Mas espere!\", você dirá depois de dar uma olhada rápida no conjunto de dados com `View(pumpkins)`, \"Tem algo estranho aqui!\"🤔\n", + "\n", + "Se você observar a coluna `Package`, verá que as abóboras são vendidas em várias configurações diferentes. Algumas são vendidas em medidas de `1 1/9 bushel`, outras em medidas de `1/2 bushel`, algumas por abóbora, outras por libra, e algumas em grandes caixas com larguras variadas.\n", + "\n", + "Vamos verificar isso:\n" + ], + "metadata": { + "id": "p77WZr-9aQAR" + } + }, + { + "cell_type": "code", + "execution_count": null, + "source": [ + "# Verify the distinct observations in Package column\n", + "pumpkins %>% \n", + " distinct(Package)" + ], + "outputs": [], + "metadata": { + "id": "XISGfh0IaUy6" + } + }, + { + "cell_type": "markdown", + "source": [ + "Incrível!👏\n", + "\n", + "Parece que abóboras são muito difíceis de pesar de forma consistente, então vamos filtrá-las selecionando apenas as abóboras que contêm a string *bushel* na coluna `Package` e colocar isso em um novo data frame `new_pumpkins`.\n" + ], + "metadata": { + "id": "7sMjiVujaZxY" + } + }, + { + "cell_type": "markdown", + "source": [ + "#### dplyr::filter() e stringr::str_detect()\n", + "\n", + "[`dplyr::filter()`](https://dplyr.tidyverse.org/reference/filter.html): cria um subconjunto dos dados contendo apenas as **linhas** que atendem às suas condições, neste caso, abóboras com a string *bushel* na coluna `Package`.\n", + "\n", + "[stringr::str_detect()](https://stringr.tidyverse.org/reference/str_detect.html): detecta a presença ou ausência de um padrão em uma string.\n", + "\n", + "O pacote [`stringr`](https://github.com/tidyverse/stringr) fornece funções simples para operações comuns com strings.\n" + ], + "metadata": { + "id": "L8Qfcs92ageF" + } + }, + { + "cell_type": "code", + "execution_count": null, + "source": [ + "# Retain only pumpkins with \"bushel\"\n", + "new_pumpkins <- pumpkins %>% \n", + " filter(str_detect(Package, \"bushel\"))\n", + "\n", + "# Get the dimensions of the new data\n", + "dim(new_pumpkins)\n", + "\n", + "# View a few rows of the new data\n", + "new_pumpkins %>% \n", + " slice_head(n = 5)" + ], + "outputs": [], + "metadata": { + "id": "hy_SGYREampd" + } + }, + { + "cell_type": "markdown", + "source": [ + "Você pode ver que reduzimos para cerca de 415 linhas de dados contendo abóboras por alqueire. 🤩\n" + ], + "metadata": { + "id": "VrDwF031avlR" + } + }, + { + "cell_type": "markdown", + "source": [ + "#### dplyr::case_when()\n", + "\n", + "**Mas espere! Ainda há mais uma coisa a fazer**\n", + "\n", + "Você percebeu que a quantidade de alqueires varia por linha? É necessário normalizar os preços para que sejam exibidos por alqueire, e não por 1 1/9 ou 1/2 alqueire. Hora de fazer alguns cálculos para padronizar isso.\n", + "\n", + "Usaremos a função [`case_when()`](https://dplyr.tidyverse.org/reference/case_when.html) para *modificar* a coluna Price dependendo de algumas condições. `case_when` permite que você vetorize múltiplas declarações `if_else()`.\n" + ], + "metadata": { + "id": "mLpw2jH4a0tx" + } + }, + { + "cell_type": "code", + "execution_count": null, + "source": [ + "# Convert the price if the Package contains fractional bushel values\n", + "new_pumpkins <- new_pumpkins %>% \n", + " mutate(Price = case_when(\n", + " str_detect(Package, \"1 1/9\") ~ Price/(1 + 1/9),\n", + " str_detect(Package, \"1/2\") ~ Price/(1/2),\n", + " TRUE ~ Price))\n", + "\n", + "# View the first few rows of the data\n", + "new_pumpkins %>% \n", + " slice_head(n = 30)" + ], + "outputs": [], + "metadata": { + "id": "P68kLVQmbM6I" + } + }, + { + "cell_type": "markdown", + "source": [ + "Agora, podemos analisar o preço por unidade com base na medida de alqueire. Todo esse estudo sobre alqueires de abóboras, no entanto, mostra como é `importante` `entender a natureza dos seus dados`!\n", + "\n", + "> ✅ De acordo com [The Spruce Eats](https://www.thespruceeats.com/how-much-is-a-bushel-1389308), o peso de um alqueire depende do tipo de produto, já que é uma medida de volume. \"Um alqueire de tomates, por exemplo, deve pesar 56 libras... Folhas e verduras ocupam mais espaço com menos peso, então um alqueire de espinafre pesa apenas 20 libras.\" É tudo bem complicado! Vamos evitar fazer uma conversão de alqueire para libra e, em vez disso, precificar pelo alqueire. Todo esse estudo sobre alqueires de abóboras, no entanto, mostra como é muito importante entender a natureza dos seus dados!\n", + ">\n", + "> ✅ Você percebeu que as abóboras vendidas por meio alqueire são muito caras? Consegue descobrir o motivo? Dica: abóboras pequenas são muito mais caras do que as grandes, provavelmente porque há muito mais delas por alqueire, considerando o espaço não utilizado ocupado por uma grande abóbora oca de torta.\n" + ], + "metadata": { + "id": "pS2GNPagbSdb" + } + }, + { + "cell_type": "markdown", + "source": [ + "Agora, por pura diversão 💁‍♀️, vamos também mover a coluna Mês para a primeira posição, ou seja, `antes` da coluna `Pacote`.\n", + "\n", + "`dplyr::relocate()` é usado para alterar as posições das colunas.\n" + ], + "metadata": { + "id": "qql1SowfbdnP" + } + }, + { + "cell_type": "code", + "execution_count": null, + "source": [ + "# Create a new data frame new_pumpkins\n", + "new_pumpkins <- new_pumpkins %>% \n", + " relocate(Month, .before = Package)\n", + "\n", + "new_pumpkins %>% \n", + " slice_head(n = 7)" + ], + "outputs": [], + "metadata": { + "id": "JJ1x6kw8bixF" + } + }, + { + "cell_type": "markdown", + "source": [ + "Bom trabalho!👌 Agora você tem um conjunto de dados limpo e organizado para construir seu novo modelo de regressão! \n", + "
\n" + ], + "metadata": { + "id": "y8TJ0Za_bn5Y" + } + }, + { + "cell_type": "markdown", + "source": [ + "## 4. Visualização de dados com ggplot2\n", + "\n", + "

\n", + " \n", + "

Infográfico por Dasani Madipalli
\n", + "\n", + "\n", + "\n", + "\n", + "Existe um *sábio* ditado que diz o seguinte:\n", + "\n", + "> \"O gráfico simples trouxe mais informações à mente do analista de dados do que qualquer outro dispositivo.\" --- John Tukey\n", + "\n", + "Parte do papel do cientista de dados é demonstrar a qualidade e a natureza dos dados com os quais está trabalhando. Para isso, eles frequentemente criam visualizações interessantes, como gráficos, diagramas e tabelas, mostrando diferentes aspectos dos dados. Dessa forma, eles conseguem mostrar visualmente relações e lacunas que, de outra maneira, seriam difíceis de identificar.\n", + "\n", + "As visualizações também podem ajudar a determinar a técnica de aprendizado de máquina mais apropriada para os dados. Um gráfico de dispersão que parece seguir uma linha, por exemplo, indica que os dados são bons candidatos para um exercício de regressão linear.\n", + "\n", + "O R oferece vários sistemas para criar gráficos, mas [`ggplot2`](https://ggplot2.tidyverse.org/index.html) é um dos mais elegantes e versáteis. O `ggplot2` permite compor gráficos **combinando componentes independentes**.\n", + "\n", + "Vamos começar com um gráfico de dispersão simples para as colunas Price e Month.\n", + "\n", + "Neste caso, começaremos com [`ggplot()`](https://ggplot2.tidyverse.org/reference/ggplot.html), fornecendo um conjunto de dados e um mapeamento estético (com [`aes()`](https://ggplot2.tidyverse.org/reference/aes.html)) e, em seguida, adicionaremos camadas (como [`geom_point()`](https://ggplot2.tidyverse.org/reference/geom_point.html)) para gráficos de dispersão.\n" + ], + "metadata": { + "id": "mYSH6-EtbvNa" + } + }, + { + "cell_type": "code", + "execution_count": null, + "source": [ + "# Set a theme for the plots\n", + "theme_set(theme_light())\n", + "\n", + "# Create a scatter plot\n", + "p <- ggplot(data = new_pumpkins, aes(x = Price, y = Month))\n", + "p + geom_point()" + ], + "outputs": [], + "metadata": { + "id": "g2YjnGeOcLo4" + } + }, + { + "cell_type": "markdown", + "source": [ + "Este é um gráfico útil 🤷? Algo nele te surpreende?\n", + "\n", + "Não é particularmente útil, já que tudo o que ele faz é mostrar seus dados como uma distribuição de pontos em um determinado mês.\n", + "
\n" + ], + "metadata": { + "id": "Ml7SDCLQcPvE" + } + }, + { + "cell_type": "markdown", + "source": [ + "### **Como tornamos isso útil?**\n", + "\n", + "Para exibir dados úteis em gráficos, geralmente é necessário agrupar os dados de alguma forma. Por exemplo, no nosso caso, calcular o preço médio das abóboras para cada mês forneceria mais insights sobre os padrões subjacentes em nossos dados. Isso nos leva a mais uma abordagem do **dplyr**:\n", + "\n", + "#### `dplyr::group_by() %>% summarize()`\n", + "\n", + "A agregação agrupada no R pode ser facilmente realizada usando\n", + "\n", + "`dplyr::group_by() %>% summarize()`\n", + "\n", + "- `dplyr::group_by()` altera a unidade de análise do conjunto de dados completo para grupos individuais, como por mês.\n", + "\n", + "- `dplyr::summarize()` cria um novo data frame com uma coluna para cada variável de agrupamento e uma coluna para cada estatística resumida que você especificou.\n", + "\n", + "Por exemplo, podemos usar `dplyr::group_by() %>% summarize()` para agrupar as abóboras com base na coluna **Month** e, em seguida, calcular o **preço médio** para cada mês.\n" + ], + "metadata": { + "id": "jMakvJZIcVkh" + } + }, + { + "cell_type": "code", + "execution_count": null, + "source": [ + "# Find the average price of pumpkins per month\r\n", + "new_pumpkins %>%\r\n", + " group_by(Month) %>% \r\n", + " summarise(mean_price = mean(Price))" + ], + "outputs": [], + "metadata": { + "id": "6kVSUa2Bcilf" + } + }, + { + "cell_type": "markdown", + "source": [ + "Sucinto!✨\n", + "\n", + "Características categóricas, como meses, são melhor representadas usando um gráfico de barras 📊. As camadas responsáveis por gráficos de barras são `geom_bar()` e `geom_col()`. Consulte `?geom_bar` para saber mais.\n", + "\n", + "Vamos criar um agora!\n" + ], + "metadata": { + "id": "Kds48GUBcj3W" + } + }, + { + "cell_type": "code", + "execution_count": null, + "source": [ + "# Find the average price of pumpkins per month then plot a bar chart\r\n", + "new_pumpkins %>%\r\n", + " group_by(Month) %>% \r\n", + " summarise(mean_price = mean(Price)) %>% \r\n", + " ggplot(aes(x = Month, y = mean_price)) +\r\n", + " geom_col(fill = \"midnightblue\", alpha = 0.7) +\r\n", + " ylab(\"Pumpkin Price\")" + ], + "outputs": [], + "metadata": { + "id": "VNbU1S3BcrxO" + } + }, + { + "cell_type": "markdown", + "source": [ + "🤩🤩 Esta é uma visualização de dados mais útil! Parece indicar que o preço mais alto para abóboras ocorre em setembro e outubro. Isso atende às suas expectativas? Por que sim ou por que não?\n", + "\n", + "Parabéns por concluir a segunda lição 👏! Você preparou seus dados para a construção do modelo e, em seguida, descobriu mais insights usando visualizações!\n" + ], + "metadata": { + "id": "zDm0VOzzcuzR" + } + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n---\n\n**Aviso Legal**: \nEste documento foi traduzido utilizando o serviço de tradução por IA [Co-op Translator](https://github.com/Azure/co-op-translator). Embora nos esforcemos para garantir a precisão, esteja ciente de que traduções automáticas podem conter erros ou imprecisões. O documento original em seu idioma nativo deve ser considerado a fonte oficial. Para informações críticas, recomenda-se a tradução profissional realizada por humanos. Não nos responsabilizamos por quaisquer mal-entendidos ou interpretações equivocadas decorrentes do uso desta tradução.\n" + ] + } + ] +} \ No newline at end of file diff --git a/translations/pt-BR/2-Regression/2-Data/solution/notebook.ipynb b/translations/pt-BR/2-Regression/2-Data/solution/notebook.ipynb new file mode 100644 index 000000000..cadd6f6b8 --- /dev/null +++ b/translations/pt-BR/2-Regression/2-Data/solution/notebook.ipynb @@ -0,0 +1,437 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [ + { + "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", + "
City NameTypePackageVarietySub VarietyGradeDateLow PriceHigh PriceMostly Low...Unit of SaleQualityConditionAppearanceStorageCropRepackTrans ModeUnnamed: 24Unnamed: 25
70BALTIMORENaN1 1/9 bushel cartonsPIE TYPENaNNaN9/24/1615.015.015.0...NaNNaNNaNNaNNaNNaNNNaNNaNNaN
71BALTIMORENaN1 1/9 bushel cartonsPIE TYPENaNNaN9/24/1618.018.018.0...NaNNaNNaNNaNNaNNaNNNaNNaNNaN
72BALTIMORENaN1 1/9 bushel cartonsPIE TYPENaNNaN10/1/1618.018.018.0...NaNNaNNaNNaNNaNNaNNNaNNaNNaN
73BALTIMORENaN1 1/9 bushel cartonsPIE TYPENaNNaN10/1/1617.017.017.0...NaNNaNNaNNaNNaNNaNNNaNNaNNaN
74BALTIMORENaN1 1/9 bushel cartonsPIE TYPENaNNaN10/8/1615.015.015.0...NaNNaNNaNNaNNaNNaNNNaNNaNNaN
\n", + "

5 rows × 26 columns

\n", + "
" + ], + "text/plain": [ + " City Name Type Package Variety Sub Variety Grade \\\n", + "70 BALTIMORE NaN 1 1/9 bushel cartons PIE TYPE NaN NaN \n", + "71 BALTIMORE NaN 1 1/9 bushel cartons PIE TYPE NaN NaN \n", + "72 BALTIMORE NaN 1 1/9 bushel cartons PIE TYPE NaN NaN \n", + "73 BALTIMORE NaN 1 1/9 bushel cartons PIE TYPE NaN NaN \n", + "74 BALTIMORE NaN 1 1/9 bushel cartons PIE TYPE NaN NaN \n", + "\n", + " Date Low Price High Price Mostly Low ... Unit of Sale Quality \\\n", + "70 9/24/16 15.0 15.0 15.0 ... NaN NaN \n", + "71 9/24/16 18.0 18.0 18.0 ... NaN NaN \n", + "72 10/1/16 18.0 18.0 18.0 ... NaN NaN \n", + "73 10/1/16 17.0 17.0 17.0 ... NaN NaN \n", + "74 10/8/16 15.0 15.0 15.0 ... NaN NaN \n", + "\n", + " Condition Appearance Storage Crop Repack Trans Mode Unnamed: 24 \\\n", + "70 NaN NaN NaN NaN N NaN NaN \n", + "71 NaN NaN NaN NaN N NaN NaN \n", + "72 NaN NaN NaN NaN N NaN NaN \n", + "73 NaN NaN NaN NaN N NaN NaN \n", + "74 NaN NaN NaN NaN N NaN NaN \n", + "\n", + " Unnamed: 25 \n", + "70 NaN \n", + "71 NaN \n", + "72 NaN \n", + "73 NaN \n", + "74 NaN \n", + "\n", + "[5 rows x 26 columns]" + ] + }, + "execution_count": 2, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "import pandas as pd\n", + "import matplotlib.pyplot as plt\n", + "pumpkins = pd.read_csv('../../data/US-pumpkins.csv')\n", + "\n", + "pumpkins = pumpkins[pumpkins['Package'].str.contains('bushel', case=True, regex=True)]\n", + "\n", + "pumpkins.head()" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "City Name 0\n", + "Type 406\n", + "Package 0\n", + "Variety 0\n", + "Sub Variety 167\n", + "Grade 415\n", + "Date 0\n", + "Low Price 0\n", + "High Price 0\n", + "Mostly Low 24\n", + "Mostly High 24\n", + "Origin 0\n", + "Origin District 396\n", + "Item Size 114\n", + "Color 145\n", + "Environment 415\n", + "Unit of Sale 404\n", + "Quality 415\n", + "Condition 415\n", + "Appearance 415\n", + "Storage 415\n", + "Crop 415\n", + "Repack 0\n", + "Trans Mode 415\n", + "Unnamed: 24 415\n", + "Unnamed: 25 391\n", + "dtype: int64" + ] + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "pumpkins.isnull().sum()" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + " Month Package Low Price High Price Price\n", + "70 9 1 1/9 bushel cartons 15.00 15.0 13.50\n", + "71 9 1 1/9 bushel cartons 18.00 18.0 16.20\n", + "72 10 1 1/9 bushel cartons 18.00 18.0 16.20\n", + "73 10 1 1/9 bushel cartons 17.00 17.0 15.30\n", + "74 10 1 1/9 bushel cartons 15.00 15.0 13.50\n", + "... ... ... ... ... ...\n", + "1738 9 1/2 bushel cartons 15.00 15.0 30.00\n", + "1739 9 1/2 bushel cartons 13.75 15.0 28.75\n", + "1740 9 1/2 bushel cartons 10.75 15.0 25.75\n", + "1741 9 1/2 bushel cartons 12.00 12.0 24.00\n", + "1742 9 1/2 bushel cartons 12.00 12.0 24.00\n", + "\n", + "[415 rows x 5 columns]\n" + ] + } + ], + "source": [ + "\n", + "# A set of new columns for a new dataframe. Filter out nonmatching columns\n", + "columns_to_select = ['Package', 'Low Price', 'High Price', 'Date']\n", + "pumpkins = pumpkins.loc[:, columns_to_select]\n", + "\n", + "# Get an average between low and high price for the base pumpkin price\n", + "price = (pumpkins['Low Price'] + pumpkins['High Price']) / 2\n", + "\n", + "# Convert the date to its month only\n", + "month = pd.DatetimeIndex(pumpkins['Date']).month\n", + "\n", + "# Create a new dataframe with this basic data\n", + "new_pumpkins = pd.DataFrame({'Month': month, 'Package': pumpkins['Package'], 'Low Price': pumpkins['Low Price'],'High Price': pumpkins['High Price'], 'Price': price})\n", + "\n", + "# Convert the price if the Package contains fractional bushel values\n", + "new_pumpkins.loc[new_pumpkins['Package'].str.contains('1 1/9'), 'Price'] = price/(1 + 1/9)\n", + "\n", + "new_pumpkins.loc[new_pumpkins['Package'].str.contains('1/2'), 'Price'] = price/(1/2)\n", + "\n", + "print(new_pumpkins)\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "\n", + "price = new_pumpkins.Price\n", + "month = new_pumpkins.Month\n", + "plt.scatter(price, month)\n", + "plt.show()\n" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "Text(0, 0.5, 'Pumpkin Price')" + ] + }, + "execution_count": 6, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "\n", + "new_pumpkins.groupby(['Month'])['Price'].mean().plot(kind='bar')\n", + "plt.ylabel(\"Pumpkin Price\")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n---\n\n**Aviso Legal**: \nEste documento foi traduzido utilizando o serviço de tradução por IA [Co-op Translator](https://github.com/Azure/co-op-translator). Embora nos esforcemos para garantir a precisão, esteja ciente de que traduções automatizadas podem conter erros ou imprecisões. O documento original em seu idioma nativo deve ser considerado a fonte autoritativa. Para informações críticas, recomenda-se a tradução profissional realizada por humanos. Não nos responsabilizamos por quaisquer mal-entendidos ou interpretações equivocadas decorrentes do uso desta tradução.\n" + ] + } + ], + "metadata": { + "interpreter": { + "hash": "31f2aee4e71d21fbe5cf8b01ff0e069b9275f58929596ceb00d14d90e3e16cd6" + }, + "kernelspec": { + "display_name": "Python 3.7.0 64-bit ('3.7')", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.11.1" + }, + "metadata": { + "interpreter": { + "hash": "70b38d7a306a849643e446cd70466270a13445e5987dfa1344ef2b127438fa4d" + } + }, + "orig_nbformat": 2, + "coopTranslator": { + "original_hash": "95726f0b8283628d5356a4f8eb8b4b76", + "translation_date": "2025-08-29T23:11:00+00:00", + "source_file": "2-Regression/2-Data/solution/notebook.ipynb", + "language_code": "br" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} \ No newline at end of file diff --git a/translations/pt-BR/2-Regression/3-Linear/README.md b/translations/pt-BR/2-Regression/3-Linear/README.md new file mode 100644 index 000000000..8b37d5e1d --- /dev/null +++ b/translations/pt-BR/2-Regression/3-Linear/README.md @@ -0,0 +1,371 @@ +# Construir um modelo de regressão usando Scikit-learn: regressão de quatro maneiras + +![Infográfico de regressão linear vs polinomial](../../../../2-Regression/3-Linear/images/linear-polynomial.png) +> Infográfico por [Dasani Madipalli](https://twitter.com/dasani_decoded) +## [Quiz pré-aula](https://ff-quizzes.netlify.app/en/ml/) + +> ### [Esta lição está disponível em R!](../../../../2-Regression/3-Linear/solution/R/lesson_3.html) +### Introdução + +Até agora, você explorou o que é regressão com dados de exemplo coletados do conjunto de dados de preços de abóbora que usaremos ao longo desta lição. Você também os visualizou usando Matplotlib. + +Agora você está pronto para mergulhar mais fundo na regressão para aprendizado de máquina. Embora a visualização permita que você compreenda os dados, o verdadeiro poder do aprendizado de máquina vem do _treinamento de modelos_. Modelos são treinados com dados históricos para capturar automaticamente as dependências dos dados e permitem prever resultados para novos dados que o modelo ainda não viu. + +Nesta lição, você aprenderá mais sobre dois tipos de regressão: _regressão linear básica_ e _regressão polinomial_, juntamente com algumas das matemáticas subjacentes a essas técnicas. Esses modelos nos permitirão prever os preços das abóboras dependendo de diferentes dados de entrada. + +[![ML para iniciantes - Entendendo a Regressão Linear](https://img.youtube.com/vi/CRxFT8oTDMg/0.jpg)](https://youtu.be/CRxFT8oTDMg "ML para iniciantes - Entendendo a Regressão Linear") + +> 🎥 Clique na imagem acima para um breve vídeo sobre regressão linear. + +> Ao longo deste currículo, assumimos conhecimento mínimo de matemática e buscamos torná-lo acessível para estudantes de outras áreas. Fique atento a notas, 🧮 chamadas, diagramas e outras ferramentas de aprendizado para ajudar na compreensão. + +### Pré-requisito + +Você já deve estar familiarizado com a estrutura dos dados de abóbora que estamos analisando. Você pode encontrá-los pré-carregados e pré-limpos no arquivo _notebook.ipynb_ desta lição. No arquivo, o preço da abóbora é exibido por alqueire em um novo data frame. Certifique-se de que pode executar esses notebooks em kernels no Visual Studio Code. + +### Preparação + +Como lembrete, você está carregando esses dados para fazer perguntas sobre eles. + +- Qual é o melhor momento para comprar abóboras? +- Qual preço posso esperar por uma caixa de abóboras em miniatura? +- Devo comprá-las em cestas de meio alqueire ou em caixas de 1 1/9 alqueire? +Vamos continuar explorando esses dados. + +Na lição anterior, você criou um data frame do Pandas e o preencheu com parte do conjunto de dados original, padronizando os preços por alqueire. Ao fazer isso, no entanto, você só conseguiu reunir cerca de 400 pontos de dados e apenas para os meses de outono. + +Dê uma olhada nos dados que pré-carregamos no notebook que acompanha esta lição. Os dados estão pré-carregados e um gráfico de dispersão inicial é traçado para mostrar os dados por mês. Talvez possamos obter um pouco mais de detalhes sobre a natureza dos dados ao limpá-los mais. + +## Uma linha de regressão linear + +Como você aprendeu na Lição 1, o objetivo de um exercício de regressão linear é ser capaz de traçar uma linha para: + +- **Mostrar relações entre variáveis**. Mostrar a relação entre variáveis +- **Fazer previsões**. Fazer previsões precisas sobre onde um novo ponto de dados cairia em relação a essa linha. + +É típico da **Regressão de Mínimos Quadrados** traçar esse tipo de linha. O termo 'mínimos quadrados' significa que todos os pontos de dados ao redor da linha de regressão são elevados ao quadrado e depois somados. Idealmente, essa soma final é o menor possível, porque queremos um número baixo de erros, ou `mínimos quadrados`. + +Fazemos isso porque queremos modelar uma linha que tenha a menor distância cumulativa de todos os nossos pontos de dados. Também elevamos os termos ao quadrado antes de somá-los, pois estamos preocupados com sua magnitude, em vez de sua direção. + +> **🧮 Mostre-me a matemática** +> +> Esta linha, chamada de _linha de melhor ajuste_, pode ser expressa por [uma equação](https://en.wikipedia.org/wiki/Simple_linear_regression): +> +> ``` +> Y = a + bX +> ``` +> +> `X` é a 'variável explicativa'. `Y` é a 'variável dependente'. A inclinação da linha é `b` e `a` é o intercepto no eixo Y, que se refere ao valor de `Y` quando `X = 0`. +> +>![calcular a inclinação](../../../../2-Regression/3-Linear/images/slope.png) +> +> Primeiro, calcule a inclinação `b`. Infográfico por [Jen Looper](https://twitter.com/jenlooper) +> +> Em outras palavras, e referindo-se à pergunta original dos dados de abóbora: "prever o preço de uma abóbora por alqueire por mês", `X` se referiria ao preço e `Y` ao mês de venda. +> +>![completar a equação](../../../../2-Regression/3-Linear/images/calculation.png) +> +> Calcule o valor de Y. Se você está pagando cerca de $4, deve ser abril! Infográfico por [Jen Looper](https://twitter.com/jenlooper) +> +> A matemática que calcula a linha deve demonstrar a inclinação da linha, que também depende do intercepto, ou onde `Y` está situado quando `X = 0`. +> +> Você pode observar o método de cálculo desses valores no site [Math is Fun](https://www.mathsisfun.com/data/least-squares-regression.html). Também visite [este calculador de mínimos quadrados](https://www.mathsisfun.com/data/least-squares-calculator.html) para ver como os valores dos números impactam a linha. + +## Correlação + +Outro termo importante para entender é o **Coeficiente de Correlação** entre as variáveis X e Y fornecidas. Usando um gráfico de dispersão, você pode visualizar rapidamente esse coeficiente. Um gráfico com pontos de dados espalhados em uma linha ordenada tem alta correlação, mas um gráfico com pontos de dados espalhados por toda parte entre X e Y tem baixa correlação. + +Um bom modelo de regressão linear será aquele que tem um Coeficiente de Correlação alto (mais próximo de 1 do que de 0) usando o método de Mínimos Quadrados com uma linha de regressão. + +✅ Execute o notebook que acompanha esta lição e observe o gráfico de dispersão de Mês para Preço. Os dados que associam Mês ao Preço para vendas de abóbora parecem ter alta ou baixa correlação, de acordo com sua interpretação visual do gráfico de dispersão? Isso muda se você usar uma medida mais detalhada em vez de `Mês`, como *dia do ano* (ou seja, número de dias desde o início do ano)? + +No código abaixo, assumiremos que limpamos os dados e obtivemos um data frame chamado `new_pumpkins`, semelhante ao seguinte: + +ID | Mês | DiaDoAno | Variedade | Cidade | Embalagem | Preço Baixo | Preço Alto | Preço +---|-----|----------|-----------|--------|-----------|-------------|------------|------- +70 | 9 | 267 | TIPO TORTA | BALTIMORE | 1 1/9 caixas de alqueire | 15.0 | 15.0 | 13.636364 +71 | 9 | 267 | TIPO TORTA | BALTIMORE | 1 1/9 caixas de alqueire | 18.0 | 18.0 | 16.363636 +72 | 10 | 274 | TIPO TORTA | BALTIMORE | 1 1/9 caixas de alqueire | 18.0 | 18.0 | 16.363636 +73 | 10 | 274 | TIPO TORTA | BALTIMORE | 1 1/9 caixas de alqueire | 17.0 | 17.0 | 15.454545 +74 | 10 | 281 | TIPO TORTA | BALTIMORE | 1 1/9 caixas de alqueire | 15.0 | 15.0 | 13.636364 + +> O código para limpar os dados está disponível em [`notebook.ipynb`](../../../../2-Regression/3-Linear/notebook.ipynb). Realizamos os mesmos passos de limpeza da lição anterior e calculamos a coluna `DiaDoAno` usando a seguinte expressão: + +```python +day_of_year = pd.to_datetime(pumpkins['Date']).apply(lambda dt: (dt-datetime(dt.year,1,1)).days) +``` + +Agora que você entende a matemática por trás da regressão linear, vamos criar um modelo de regressão para ver se conseguimos prever qual embalagem de abóboras terá os melhores preços. Alguém comprando abóboras para um campo de abóboras de feriado pode querer essa informação para otimizar suas compras de embalagens de abóboras para o campo. + +## Procurando por Correlação + +[![ML para iniciantes - Procurando por Correlação: A Chave para Regressão Linear](https://img.youtube.com/vi/uoRq-lW2eQo/0.jpg)](https://youtu.be/uoRq-lW2eQo "ML para iniciantes - Procurando por Correlação: A Chave para Regressão Linear") + +> 🎥 Clique na imagem acima para um breve vídeo sobre correlação. + +Na lição anterior, você provavelmente viu que o preço médio para diferentes meses se parece com isto: + +Preço médio por mês + +Isso sugere que deve haver alguma correlação, e podemos tentar treinar um modelo de regressão linear para prever a relação entre `Mês` e `Preço`, ou entre `DiaDoAno` e `Preço`. Aqui está o gráfico de dispersão que mostra a última relação: + +Gráfico de dispersão de Preço vs. Dia do Ano + +Vamos ver se há correlação usando a função `corr`: + +```python +print(new_pumpkins['Month'].corr(new_pumpkins['Price'])) +print(new_pumpkins['DayOfYear'].corr(new_pumpkins['Price'])) +``` + +Parece que a correlação é bem pequena, -0.15 por `Mês` e -0.17 por `DiaDoAno`, mas pode haver outra relação importante. Parece que há diferentes agrupamentos de preços correspondendo a diferentes variedades de abóbora. Para confirmar essa hipótese, vamos plotar cada categoria de abóbora usando uma cor diferente. Passando um parâmetro `ax` para a função de plotagem `scatter`, podemos plotar todos os pontos no mesmo gráfico: + +```python +ax=None +colors = ['red','blue','green','yellow'] +for i,var in enumerate(new_pumpkins['Variety'].unique()): + df = new_pumpkins[new_pumpkins['Variety']==var] + ax = df.plot.scatter('DayOfYear','Price',ax=ax,c=colors[i],label=var) +``` + +Gráfico de dispersão de Preço vs. Dia do Ano + +Nossa investigação sugere que a variedade tem mais efeito no preço geral do que a data de venda. Podemos ver isso com um gráfico de barras: + +```python +new_pumpkins.groupby('Variety')['Price'].mean().plot(kind='bar') +``` + +Gráfico de barras de preço vs variedade + +Vamos focar por enquanto apenas em uma variedade de abóbora, o 'tipo torta', e ver qual efeito a data tem no preço: + +```python +pie_pumpkins = new_pumpkins[new_pumpkins['Variety']=='PIE TYPE'] +pie_pumpkins.plot.scatter('DayOfYear','Price') +``` +Gráfico de dispersão de Preço vs. Dia do Ano + +Se agora calcularmos a correlação entre `Preço` e `DiaDoAno` usando a função `corr`, obteremos algo como `-0.27` - o que significa que treinar um modelo preditivo faz sentido. + +> Antes de treinar um modelo de regressão linear, é importante garantir que nossos dados estejam limpos. A regressão linear não funciona bem com valores ausentes, portanto, faz sentido eliminar todas as células vazias: + +```python +pie_pumpkins.dropna(inplace=True) +pie_pumpkins.info() +``` + +Outra abordagem seria preencher esses valores vazios com valores médios da coluna correspondente. + +## Regressão Linear Simples + +[![ML para iniciantes - Regressão Linear e Polinomial usando Scikit-learn](https://img.youtube.com/vi/e4c_UP2fSjg/0.jpg)](https://youtu.be/e4c_UP2fSjg "ML para iniciantes - Regressão Linear e Polinomial usando Scikit-learn") + +> 🎥 Clique na imagem acima para um breve vídeo sobre regressão linear e polinomial. + +Para treinar nosso modelo de regressão linear, usaremos a biblioteca **Scikit-learn**. + +```python +from sklearn.linear_model import LinearRegression +from sklearn.metrics import mean_squared_error +from sklearn.model_selection import train_test_split +``` + +Começamos separando os valores de entrada (features) e a saída esperada (label) em arrays numpy separados: + +```python +X = pie_pumpkins['DayOfYear'].to_numpy().reshape(-1,1) +y = pie_pumpkins['Price'] +``` + +> Note que tivemos que realizar `reshape` nos dados de entrada para que o pacote de regressão linear os entendesse corretamente. A regressão linear espera um array 2D como entrada, onde cada linha do array corresponde a um vetor de características de entrada. No nosso caso, como temos apenas uma entrada, precisamos de um array com formato N×1, onde N é o tamanho do conjunto de dados. + +Depois, precisamos dividir os dados em conjuntos de treino e teste, para que possamos validar nosso modelo após o treinamento: + +```python +X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0) +``` + +Finalmente, treinar o modelo de regressão linear real leva apenas duas linhas de código. Definimos o objeto `LinearRegression` e ajustamos aos nossos dados usando o método `fit`: + +```python +lin_reg = LinearRegression() +lin_reg.fit(X_train,y_train) +``` + +O objeto `LinearRegression` após o ajuste (`fit`) contém todos os coeficientes da regressão, que podem ser acessados usando a propriedade `.coef_`. No nosso caso, há apenas um coeficiente, que deve ser em torno de `-0.017`. Isso significa que os preços parecem cair um pouco com o tempo, mas não muito, cerca de 2 centavos por dia. Também podemos acessar o ponto de interseção da regressão com o eixo Y usando `lin_reg.intercept_` - será em torno de `21` no nosso caso, indicando o preço no início do ano. + +Para ver quão preciso nosso modelo é, podemos prever preços em um conjunto de dados de teste e, em seguida, medir quão próximas nossas previsões estão dos valores esperados. Isso pode ser feito usando a métrica de erro quadrático médio (MSE), que é a média de todas as diferenças quadradas entre o valor esperado e o valor previsto. + +```python +pred = lin_reg.predict(X_test) + +mse = np.sqrt(mean_squared_error(y_test,pred)) +print(f'Mean error: {mse:3.3} ({mse/np.mean(pred)*100:3.3}%)') +``` +Nosso erro parece estar em torno de 2 pontos, o que equivale a ~17%. Não é muito bom. Outro indicador da qualidade do modelo é o **coeficiente de determinação**, que pode ser obtido assim: + +```python +score = lin_reg.score(X_train,y_train) +print('Model determination: ', score) +``` +Se o valor for 0, significa que o modelo não leva os dados de entrada em consideração e age como o *pior preditor linear*, que é simplesmente o valor médio do resultado. O valor 1 significa que podemos prever perfeitamente todos os resultados esperados. No nosso caso, o coeficiente está em torno de 0,06, o que é bastante baixo. + +Também podemos plotar os dados de teste junto com a linha de regressão para entender melhor como a regressão funciona no nosso caso: + +```python +plt.scatter(X_test,y_test) +plt.plot(X_test,pred) +``` + +Regressão linear + +## Regressão Polinomial + +Outro tipo de Regressão Linear é a Regressão Polinomial. Embora às vezes haja uma relação linear entre as variáveis - quanto maior o volume da abóbora, maior o preço - às vezes essas relações não podem ser representadas como um plano ou linha reta. + +✅ Aqui estão [alguns exemplos](https://online.stat.psu.edu/stat501/lesson/9/9.8) de dados que poderiam usar Regressão Polinomial. + +Observe novamente a relação entre Data e Preço. Esse gráfico de dispersão parece que deveria ser analisado necessariamente por uma linha reta? Os preços não podem flutuar? Nesse caso, você pode tentar a regressão polinomial. + +✅ Polinômios são expressões matemáticas que podem consistir em uma ou mais variáveis e coeficientes. + +A regressão polinomial cria uma linha curva para ajustar melhor os dados não lineares. No nosso caso, se incluirmos uma variável `DayOfYear` ao quadrado nos dados de entrada, devemos ser capazes de ajustar nossos dados com uma curva parabólica, que terá um mínimo em um determinado ponto do ano. + +O Scikit-learn inclui uma [API de pipeline](https://scikit-learn.org/stable/modules/generated/sklearn.pipeline.make_pipeline.html?highlight=pipeline#sklearn.pipeline.make_pipeline) útil para combinar diferentes etapas de processamento de dados. Um **pipeline** é uma cadeia de **estimadores**. No nosso caso, criaremos um pipeline que primeiro adiciona características polinomiais ao nosso modelo e, em seguida, treina a regressão: + +```python +from sklearn.preprocessing import PolynomialFeatures +from sklearn.pipeline import make_pipeline + +pipeline = make_pipeline(PolynomialFeatures(2), LinearRegression()) + +pipeline.fit(X_train,y_train) +``` + +Usar `PolynomialFeatures(2)` significa que incluiremos todos os polinômios de segundo grau dos dados de entrada. No nosso caso, isso significará apenas `DayOfYear`2, mas, dado duas variáveis de entrada X e Y, isso adicionará X2, XY e Y2. Também podemos usar polinômios de grau superior, se quisermos. + +Os pipelines podem ser usados da mesma maneira que o objeto original `LinearRegression`, ou seja, podemos usar `fit` no pipeline e, em seguida, usar `predict` para obter os resultados da previsão. Aqui está o gráfico mostrando os dados de teste e a curva de aproximação: + +Regressão polinomial + +Usando Regressão Polinomial, podemos obter um MSE ligeiramente menor e um coeficiente de determinação maior, mas não significativamente. Precisamos levar em conta outras características! + +> Você pode ver que os preços mínimos das abóboras são observados em algum momento próximo ao Halloween. Como você explicaria isso? + +🎃 Parabéns, você acabou de criar um modelo que pode ajudar a prever o preço das abóboras para torta. Você provavelmente pode repetir o mesmo procedimento para todos os tipos de abóbora, mas isso seria tedioso. Vamos aprender agora como levar em conta a variedade de abóbora no nosso modelo! + +## Características Categóricas + +No mundo ideal, queremos ser capazes de prever preços para diferentes variedades de abóbora usando o mesmo modelo. No entanto, a coluna `Variety` é um pouco diferente de colunas como `Month`, porque contém valores não numéricos. Essas colunas são chamadas de **categóricas**. + +[![ML para iniciantes - Previsões com características categóricas usando Regressão Linear](https://img.youtube.com/vi/DYGliioIAE0/0.jpg)](https://youtu.be/DYGliioIAE0 "ML para iniciantes - Previsões com características categóricas usando Regressão Linear") + +> 🎥 Clique na imagem acima para um breve vídeo sobre o uso de características categóricas. + +Aqui você pode ver como o preço médio depende da variedade: + +Preço médio por variedade + +Para levar a variedade em conta, primeiro precisamos convertê-la para forma numérica, ou **codificá-la**. Existem várias maneiras de fazer isso: + +* A **codificação numérica simples** criará uma tabela de diferentes variedades e, em seguida, substituirá o nome da variedade por um índice nessa tabela. Essa não é a melhor ideia para regressão linear, porque a regressão linear leva o valor numérico real do índice e o adiciona ao resultado, multiplicando por algum coeficiente. No nosso caso, a relação entre o número do índice e o preço é claramente não linear, mesmo que garantamos que os índices sejam ordenados de alguma forma específica. +* A **codificação one-hot** substituirá a coluna `Variety` por 4 colunas diferentes, uma para cada variedade. Cada coluna conterá `1` se a linha correspondente for de uma determinada variedade e `0` caso contrário. Isso significa que haverá quatro coeficientes na regressão linear, um para cada variedade de abóbora, responsável pelo "preço inicial" (ou melhor, "preço adicional") para aquela variedade específica. + +O código abaixo mostra como podemos codificar uma variedade usando one-hot: + +```python +pd.get_dummies(new_pumpkins['Variety']) +``` + + ID | FAIRYTALE | MINIATURE | MIXED HEIRLOOM VARIETIES | PIE TYPE +----|-----------|-----------|--------------------------|---------- +70 | 0 | 0 | 0 | 1 +71 | 0 | 0 | 0 | 1 +... | ... | ... | ... | ... +1738 | 0 | 1 | 0 | 0 +1739 | 0 | 1 | 0 | 0 +1740 | 0 | 1 | 0 | 0 +1741 | 0 | 1 | 0 | 0 +1742 | 0 | 1 | 0 | 0 + +Para treinar a regressão linear usando a variedade codificada como one-hot nos dados de entrada, só precisamos inicializar os dados `X` e `y` corretamente: + +```python +X = pd.get_dummies(new_pumpkins['Variety']) +y = new_pumpkins['Price'] +``` + +O restante do código é o mesmo que usamos acima para treinar a Regressão Linear. Se você tentar, verá que o erro médio quadrático é aproximadamente o mesmo, mas obtemos um coeficiente de determinação muito maior (~77%). Para obter previsões ainda mais precisas, podemos levar em conta mais características categóricas, bem como características numéricas, como `Month` ou `DayOfYear`. Para obter um grande array de características, podemos usar `join`: + +```python +X = pd.get_dummies(new_pumpkins['Variety']) \ + .join(new_pumpkins['Month']) \ + .join(pd.get_dummies(new_pumpkins['City'])) \ + .join(pd.get_dummies(new_pumpkins['Package'])) +y = new_pumpkins['Price'] +``` + +Aqui também levamos em conta `City` e o tipo de `Package`, o que nos dá um MSE de 2.84 (10%) e um coeficiente de determinação de 0.94! + +## Juntando tudo + +Para criar o melhor modelo, podemos usar dados combinados (categóricos codificados como one-hot + numéricos) do exemplo acima junto com a Regressão Polinomial. Aqui está o código completo para sua conveniência: + +```python +# set up training data +X = pd.get_dummies(new_pumpkins['Variety']) \ + .join(new_pumpkins['Month']) \ + .join(pd.get_dummies(new_pumpkins['City'])) \ + .join(pd.get_dummies(new_pumpkins['Package'])) +y = new_pumpkins['Price'] + +# make train-test split +X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0) + +# setup and train the pipeline +pipeline = make_pipeline(PolynomialFeatures(2), LinearRegression()) +pipeline.fit(X_train,y_train) + +# predict results for test data +pred = pipeline.predict(X_test) + +# calculate MSE and determination +mse = np.sqrt(mean_squared_error(y_test,pred)) +print(f'Mean error: {mse:3.3} ({mse/np.mean(pred)*100:3.3}%)') + +score = pipeline.score(X_train,y_train) +print('Model determination: ', score) +``` + +Isso deve nos dar o melhor coeficiente de determinação de quase 97% e MSE=2.23 (~8% de erro de previsão). + +| Modelo | MSE | Determinação | +|--------|-----|--------------| +| `DayOfYear` Linear | 2.77 (17.2%) | 0.07 | +| `DayOfYear` Polinomial | 2.73 (17.0%) | 0.08 | +| `Variety` Linear | 5.24 (19.7%) | 0.77 | +| Todas as características Linear | 2.84 (10.5%) | 0.94 | +| Todas as características Polinomial | 2.23 (8.25%) | 0.97 | + +🏆 Muito bem! Você criou quatro modelos de Regressão em uma única lição e melhorou a qualidade do modelo para 97%. Na seção final sobre Regressão, você aprenderá sobre Regressão Logística para determinar categorias. + +--- +## 🚀Desafio + +Teste várias variáveis diferentes neste notebook para ver como a correlação corresponde à precisão do modelo. + +## [Quiz pós-aula](https://ff-quizzes.netlify.app/en/ml/) + +## Revisão e Autoestudo + +Nesta lição, aprendemos sobre Regressão Linear. Existem outros tipos importantes de Regressão. Leia sobre as técnicas Stepwise, Ridge, Lasso e Elasticnet. Um bom curso para aprender mais é o [curso de Aprendizado Estatístico de Stanford](https://online.stanford.edu/courses/sohs-ystatslearning-statistical-learning). + +## Tarefa + +[Construa um Modelo](assignment.md) + +--- + +**Aviso Legal**: +Este documento foi traduzido utilizando o serviço de tradução por IA [Co-op Translator](https://github.com/Azure/co-op-translator). Embora nos esforcemos para garantir a precisão, esteja ciente de que traduções automatizadas podem conter erros ou imprecisões. O documento original em seu idioma nativo deve ser considerado a fonte autoritativa. Para informações críticas, recomenda-se a tradução profissional realizada por humanos. Não nos responsabilizamos por quaisquer mal-entendidos ou interpretações equivocadas decorrentes do uso desta tradução. \ No newline at end of file diff --git a/translations/pt-BR/2-Regression/3-Linear/assignment.md b/translations/pt-BR/2-Regression/3-Linear/assignment.md new file mode 100644 index 000000000..c03be6a37 --- /dev/null +++ b/translations/pt-BR/2-Regression/3-Linear/assignment.md @@ -0,0 +1,16 @@ +# Criar um Modelo de Regressão + +## Instruções + +Nesta lição, você aprendeu como construir um modelo usando Regressão Linear e Polinomial. Usando esse conhecimento, encontre um conjunto de dados ou utilize um dos conjuntos integrados do Scikit-learn para criar um novo modelo. Explique em seu notebook por que escolheu a técnica utilizada e demonstre a precisão do seu modelo. Se ele não for preciso, explique o motivo. + +## Rubrica + +| Critério | Exemplary | Adequate | Needs Improvement | +| -------- | ------------------------------------------------------------ | -------------------------- | ------------------------------- | +| | apresenta um notebook completo com uma solução bem documentada | a solução está incompleta | a solução apresenta falhas ou bugs | + +--- + +**Aviso Legal**: +Este documento foi traduzido utilizando o serviço de tradução por IA [Co-op Translator](https://github.com/Azure/co-op-translator). Embora nos esforcemos para garantir a precisão, esteja ciente de que traduções automatizadas podem conter erros ou imprecisões. O documento original em seu idioma nativo deve ser considerado a fonte autoritativa. Para informações críticas, recomenda-se a tradução profissional realizada por humanos. Não nos responsabilizamos por quaisquer mal-entendidos ou interpretações equivocadas decorrentes do uso desta tradução. \ No newline at end of file diff --git a/translations/pt-BR/2-Regression/3-Linear/notebook.ipynb b/translations/pt-BR/2-Regression/3-Linear/notebook.ipynb new file mode 100644 index 000000000..08c033497 --- /dev/null +++ b/translations/pt-BR/2-Regression/3-Linear/notebook.ipynb @@ -0,0 +1,128 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Preços de Abóboras\n", + "\n", + "Carregue as bibliotecas necessárias e o conjunto de dados. Converta os dados em um dataframe contendo um subconjunto dos dados:\n", + "\n", + "- Considere apenas abóboras com preços por alqueire\n", + "- Converta a data para o formato de mês\n", + "- Calcule o preço como a média entre os preços mais altos e mais baixos\n", + "- Converta o preço para refletir a precificação pela quantidade em alqueires\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "import pandas as pd\n", + "import matplotlib.pyplot as plt\n", + "import numpy as np\n", + "from datetime import datetime\n", + "\n", + "pumpkins = pd.read_csv('../data/US-pumpkins.csv')\n", + "\n", + "pumpkins.head()\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "pumpkins = pumpkins[pumpkins['Package'].str.contains('bushel', case=True, regex=True)]\n", + "\n", + "columns_to_select = ['Package', 'Variety', 'City Name', 'Low Price', 'High Price', 'Date']\n", + "pumpkins = pumpkins.loc[:, columns_to_select]\n", + "\n", + "price = (pumpkins['Low Price'] + pumpkins['High Price']) / 2\n", + "\n", + "month = pd.DatetimeIndex(pumpkins['Date']).month\n", + "day_of_year = pd.to_datetime(pumpkins['Date']).apply(lambda dt: (dt-datetime(dt.year,1,1)).days)\n", + "\n", + "new_pumpkins = pd.DataFrame(\n", + " {'Month': month, \n", + " 'DayOfYear' : day_of_year, \n", + " 'Variety': pumpkins['Variety'], \n", + " 'City': pumpkins['City Name'], \n", + " 'Package': pumpkins['Package'], \n", + " 'Low Price': pumpkins['Low Price'],\n", + " 'High Price': pumpkins['High Price'], \n", + " 'Price': price})\n", + "\n", + "new_pumpkins.loc[new_pumpkins['Package'].str.contains('1 1/9'), 'Price'] = price/1.1\n", + "new_pumpkins.loc[new_pumpkins['Package'].str.contains('1/2'), 'Price'] = price*2\n", + "\n", + "new_pumpkins.head()\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Um gráfico de dispersão básico nos lembra que temos dados mensais apenas de agosto a dezembro. Provavelmente precisamos de mais dados para poder tirar conclusões de forma linear.\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "import matplotlib.pyplot as plt\n", + "plt.scatter('Month','Price',data=new_pumpkins)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "\n", + "plt.scatter('DayOfYear','Price',data=new_pumpkins)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n---\n\n**Aviso Legal**: \nEste documento foi traduzido utilizando o serviço de tradução por IA [Co-op Translator](https://github.com/Azure/co-op-translator). Embora nos esforcemos para garantir a precisão, esteja ciente de que traduções automatizadas podem conter erros ou imprecisões. O documento original em seu idioma nativo deve ser considerado a fonte autoritativa. Para informações críticas, recomenda-se a tradução profissional realizada por humanos. Não nos responsabilizamos por quaisquer mal-entendidos ou interpretações equivocadas decorrentes do uso desta tradução.\n" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.8.3-final" + }, + "orig_nbformat": 2, + "coopTranslator": { + "original_hash": "b032d371c75279373507f003439a577e", + "translation_date": "2025-08-29T22:45:29+00:00", + "source_file": "2-Regression/3-Linear/notebook.ipynb", + "language_code": "br" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} \ No newline at end of file diff --git a/translations/pt-BR/2-Regression/3-Linear/solution/Julia/README.md b/translations/pt-BR/2-Regression/3-Linear/solution/Julia/README.md new file mode 100644 index 000000000..c58234bae --- /dev/null +++ b/translations/pt-BR/2-Regression/3-Linear/solution/Julia/README.md @@ -0,0 +1,6 @@ + + +--- + +**Aviso Legal**: +Este documento foi traduzido utilizando o serviço de tradução por IA [Co-op Translator](https://github.com/Azure/co-op-translator). Embora nos esforcemos para garantir a precisão, esteja ciente de que traduções automatizadas podem conter erros ou imprecisões. O documento original em seu idioma nativo deve ser considerado a fonte autoritativa. Para informações críticas, recomenda-se a tradução profissional realizada por humanos. Não nos responsabilizamos por quaisquer mal-entendidos ou interpretações equivocadas decorrentes do uso desta tradução. \ No newline at end of file diff --git a/translations/pt-BR/2-Regression/3-Linear/solution/R/lesson_3-R.ipynb b/translations/pt-BR/2-Regression/3-Linear/solution/R/lesson_3-R.ipynb new file mode 100644 index 000000000..01d25ab1a --- /dev/null +++ b/translations/pt-BR/2-Regression/3-Linear/solution/R/lesson_3-R.ipynb @@ -0,0 +1,1084 @@ +{ + "nbformat": 4, + "nbformat_minor": 2, + "metadata": { + "colab": { + "name": "lesson_3-R.ipynb", + "provenance": [], + "collapsed_sections": [], + "toc_visible": true + }, + "kernelspec": { + "name": "ir", + "display_name": "R" + }, + "language_info": { + "name": "R" + }, + "coopTranslator": { + "original_hash": "5015d65d61ba75a223bfc56c273aa174", + "translation_date": "2025-08-29T22:55:39+00:00", + "source_file": "2-Regression/3-Linear/solution/R/lesson_3-R.ipynb", + "language_code": "br" + } + }, + "cells": [ + { + "cell_type": "markdown", + "source": [], + "metadata": { + "id": "EgQw8osnsUV-" + } + }, + { + "cell_type": "markdown", + "source": [ + "## Regressão Linear e Polinomial para Precificação de Abóboras - Aula 3\n", + "

\n", + " \n", + "

Infográfico por Dasani Madipalli
\n", + "\n", + "\n", + "#### Introdução\n", + "\n", + "Até agora, você explorou o que é regressão com dados de exemplo coletados do conjunto de dados de precificação de abóboras que usaremos ao longo desta aula. Você também os visualizou usando `ggplot2`. 💪\n", + "\n", + "Agora você está pronto para se aprofundar na regressão para aprendizado de máquina. Nesta aula, você aprenderá mais sobre dois tipos de regressão: *regressão linear básica* e *regressão polinomial*, junto com parte da matemática por trás dessas técnicas.\n", + "\n", + "> Ao longo deste currículo, assumimos conhecimento mínimo de matemática e buscamos torná-la acessível para estudantes de outras áreas. Fique atento a notas, 🧮 destaques, diagramas e outras ferramentas de aprendizado para ajudar na compreensão.\n", + "\n", + "#### Preparação\n", + "\n", + "Como lembrete, você está carregando esses dados para fazer perguntas sobre eles.\n", + "\n", + "- Qual é o melhor momento para comprar abóboras?\n", + "\n", + "- Qual preço posso esperar por uma caixa de abóboras em miniatura?\n", + "\n", + "- Devo comprá-las em cestas de meio alqueire ou em caixas de 1 1/9 alqueire? Vamos continuar explorando esses dados.\n", + "\n", + "Na aula anterior, você criou um `tibble` (uma reinterpretação moderna do data frame) e o preencheu com parte do conjunto de dados original, padronizando os preços por alqueire. Ao fazer isso, no entanto, você conseguiu reunir apenas cerca de 400 pontos de dados e apenas para os meses de outono. Talvez possamos obter um pouco mais de detalhes sobre a natureza dos dados ao limpá-los mais? Vamos descobrir... 🕵️‍♀️\n", + "\n", + "Para esta tarefa, precisaremos dos seguintes pacotes:\n", + "\n", + "- `tidyverse`: O [tidyverse](https://www.tidyverse.org/) é uma [coleção de pacotes R](https://www.tidyverse.org/packages) projetada para tornar a ciência de dados mais rápida, fácil e divertida!\n", + "\n", + "- `tidymodels`: O [tidymodels](https://www.tidymodels.org/) é uma [estrutura de pacotes](https://www.tidymodels.org/packages/) para modelagem e aprendizado de máquina.\n", + "\n", + "- `janitor`: O [pacote janitor](https://github.com/sfirke/janitor) fornece ferramentas simples para examinar e limpar dados sujos.\n", + "\n", + "- `corrplot`: O [pacote corrplot](https://cran.r-project.org/web/packages/corrplot/vignettes/corrplot-intro.html) oferece uma ferramenta visual exploratória para matrizes de correlação que suporta o reordenamento automático de variáveis para ajudar a detectar padrões ocultos entre elas.\n", + "\n", + "Você pode instalá-los com:\n", + "\n", + "`install.packages(c(\"tidyverse\", \"tidymodels\", \"janitor\", \"corrplot\"))`\n", + "\n", + "O script abaixo verifica se você possui os pacotes necessários para completar este módulo e os instala para você caso estejam ausentes.\n" + ], + "metadata": { + "id": "WqQPS1OAsg3H" + } + }, + { + "cell_type": "code", + "execution_count": null, + "source": [ + "suppressWarnings(if (!require(\"pacman\")) install.packages(\"pacman\"))\n", + "\n", + "pacman::p_load(tidyverse, tidymodels, janitor, corrplot)" + ], + "outputs": [], + "metadata": { + "id": "tA4C2WN3skCf", + "colab": { + "base_uri": "https://localhost:8080/" + }, + "outputId": "c06cd805-5534-4edc-f72b-d0d1dab96ac0" + } + }, + { + "cell_type": "markdown", + "source": [ + "Vamos carregar esses pacotes incríveis e torná-los disponíveis na nossa sessão atual do R. (Isso é apenas para ilustração, `pacman::p_load()` já fez isso por você)\n", + "\n", + "## 1. Uma linha de regressão linear\n", + "\n", + "Como você aprendeu na Aula 1, o objetivo de um exercício de regressão linear é ser capaz de traçar uma *linha* *de* *melhor ajuste* para:\n", + "\n", + "- **Mostrar relações entre variáveis**. Demonstrar a relação entre as variáveis.\n", + "\n", + "- **Fazer previsões**. Fazer previsões precisas sobre onde um novo ponto de dados se encaixaria em relação a essa linha.\n", + "\n", + "Para traçar esse tipo de linha, usamos uma técnica estatística chamada **Regressão dos Mínimos Quadrados**. O termo `mínimos quadrados` significa que todos os pontos de dados ao redor da linha de regressão são elevados ao quadrado e, em seguida, somados. Idealmente, essa soma final deve ser o menor valor possível, porque queremos um número baixo de erros, ou `mínimos quadrados`. Assim, a linha de melhor ajuste é aquela que nos dá o menor valor para a soma dos erros ao quadrado - daí o nome *regressão dos mínimos quadrados*.\n", + "\n", + "Fazemos isso porque queremos modelar uma linha que tenha a menor distância acumulada de todos os nossos pontos de dados. Também elevamos os termos ao quadrado antes de somá-los, pois estamos preocupados com a magnitude, e não com a direção.\n", + "\n", + "> **🧮 Mostre-me a matemática**\n", + ">\n", + "> Essa linha, chamada de *linha de melhor ajuste*, pode ser expressa por [uma equação](https://en.wikipedia.org/wiki/Simple_linear_regression):\n", + ">\n", + "> Y = a + bX\n", + ">\n", + "> `X` é a '`variável explicativa` ou `preditor`'. `Y` é a '`variável dependente` ou `resultado`'. A inclinação da linha é `b` e `a` é o intercepto no eixo y, que se refere ao valor de `Y` quando `X = 0`.\n", + ">\n", + "\n", + "> ![](../../../../../../2-Regression/3-Linear/solution/images/slope.png \"slope = $y/x$\")\n", + " Infográfico por Jen Looper\n", + ">\n", + "> Primeiro, calcule a inclinação `b`.\n", + ">\n", + "> Em outras palavras, e referindo-se à pergunta original dos dados das abóboras: \"prever o preço de uma abóbora por alqueire por mês\", `X` se referiria ao preço e `Y` ao mês de venda.\n", + ">\n", + "> ![](../../../../../../translated_images/pt-BR/calculation.989aa7822020d9d0ba9fc781f1ab5192f3421be86ebb88026528aef33c37b0d8.png)\n", + " Infográfico por Jen Looper\n", + "> \n", + "> Calcule o valor de Y. Se você está pagando cerca de \\$4, deve ser abril!\n", + ">\n", + "> A matemática que calcula a linha deve demonstrar a inclinação da linha, que também depende do intercepto, ou onde `Y` está situado quando `X = 0`.\n", + ">\n", + "> Você pode observar o método de cálculo desses valores no site [Math is Fun](https://www.mathsisfun.com/data/least-squares-regression.html). Também visite [este calculador de mínimos quadrados](https://www.mathsisfun.com/data/least-squares-calculator.html) para ver como os valores dos números impactam a linha.\n", + "\n", + "Não é tão assustador, certo? 🤓\n", + "\n", + "#### Correlação\n", + "\n", + "Outro termo importante para entender é o **Coeficiente de Correlação** entre as variáveis X e Y fornecidas. Usando um gráfico de dispersão, você pode visualizar rapidamente esse coeficiente. Um gráfico com pontos de dados alinhados de forma ordenada tem alta correlação, mas um gráfico com pontos de dados espalhados por toda parte entre X e Y tem baixa correlação.\n", + "\n", + "Um bom modelo de regressão linear será aquele que possui um Coeficiente de Correlação alto (mais próximo de 1 do que de 0) usando o método de Regressão dos Mínimos Quadrados com uma linha de regressão.\n" + ], + "metadata": { + "id": "cdX5FRpvsoP5" + } + }, + { + "cell_type": "markdown", + "source": [ + "## **2. Uma dança com dados: criando um data frame que será usado para modelagem**\n", + "\n", + "

\n", + " \n", + "

Arte por @allison_horst
\n", + "\n", + "\n", + "\n" + ], + "metadata": { + "id": "WdUKXk7Bs8-V" + } + }, + { + "cell_type": "markdown", + "source": [ + "Carregue as bibliotecas necessárias e o conjunto de dados. Converta os dados em um data frame contendo um subconjunto dos dados:\n", + "\n", + "- Considere apenas abóboras com preço por alqueire\n", + "\n", + "- Converta a data para o formato de mês\n", + "\n", + "- Calcule o preço como a média entre os preços mais altos e mais baixos\n", + "\n", + "- Converta o preço para refletir a precificação pela quantidade em alqueires\n", + "\n", + "> Cobrimos essas etapas na [lição anterior](https://github.com/microsoft/ML-For-Beginners/blob/main/2-Regression/2-Data/solution/lesson_2-R.ipynb).\n" + ], + "metadata": { + "id": "fMCtu2G2s-p8" + } + }, + { + "cell_type": "code", + "execution_count": null, + "source": [ + "# Load the core Tidyverse packages\n", + "library(tidyverse)\n", + "library(lubridate)\n", + "\n", + "# Import the pumpkins data\n", + "pumpkins <- read_csv(file = \"https://raw.githubusercontent.com/microsoft/ML-For-Beginners/main/2-Regression/data/US-pumpkins.csv\")\n", + "\n", + "\n", + "# Get a glimpse and dimensions of the data\n", + "glimpse(pumpkins)\n", + "\n", + "\n", + "# Print the first 50 rows of the data set\n", + "pumpkins %>% \n", + " slice_head(n = 5)" + ], + "outputs": [], + "metadata": { + "id": "ryMVZEEPtERn" + } + }, + { + "cell_type": "markdown", + "source": [ + "No espírito de pura aventura, vamos explorar o [`pacote janitor`](../../../../../../2-Regression/3-Linear/solution/R/github.com/sfirke/janitor) que fornece funções simples para examinar e limpar dados desorganizados. Por exemplo, vamos dar uma olhada nos nomes das colunas dos nossos dados:\n" + ], + "metadata": { + "id": "xcNxM70EtJjb" + } + }, + { + "cell_type": "code", + "execution_count": null, + "source": [ + "# Return column names\n", + "pumpkins %>% \n", + " names()" + ], + "outputs": [], + "metadata": { + "id": "5XtpaIigtPfW" + } + }, + { + "cell_type": "markdown", + "source": [ + "🤔 Podemos fazer melhor. Vamos tornar esses nomes de colunas `friendR` convertendo-os para a convenção [snake_case](https://en.wikipedia.org/wiki/Snake_case) usando `janitor::clean_names`. Para saber mais sobre essa função: `?clean_names`\n" + ], + "metadata": { + "id": "IbIqrMINtSHe" + } + }, + { + "cell_type": "code", + "execution_count": null, + "source": [ + "# Clean names to the snake_case convention\n", + "pumpkins <- pumpkins %>% \n", + " clean_names(case = \"snake\")\n", + "\n", + "# Return column names\n", + "pumpkins %>% \n", + " names()" + ], + "outputs": [], + "metadata": { + "id": "a2uYvclYtWvX" + } + }, + { + "cell_type": "markdown", + "source": [ + "Muito tidyR 🧹! Agora, uma dança com os dados usando `dplyr`, como na lição anterior! 💃\n" + ], + "metadata": { + "id": "HfhnuzDDtaDd" + } + }, + { + "cell_type": "code", + "execution_count": null, + "source": [ + "# Select desired columns\n", + "pumpkins <- pumpkins %>% \n", + " select(variety, city_name, package, low_price, high_price, date)\n", + "\n", + "\n", + "\n", + "# Extract the month from the dates to a new column\n", + "pumpkins <- pumpkins %>%\n", + " mutate(date = mdy(date),\n", + " month = month(date)) %>% \n", + " select(-date)\n", + "\n", + "\n", + "\n", + "# Create a new column for average Price\n", + "pumpkins <- pumpkins %>% \n", + " mutate(price = (low_price + high_price)/2)\n", + "\n", + "\n", + "# Retain only pumpkins with the string \"bushel\"\n", + "new_pumpkins <- pumpkins %>% \n", + " filter(str_detect(string = package, pattern = \"bushel\"))\n", + "\n", + "\n", + "# Normalize the pricing so that you show the pricing per bushel, not per 1 1/9 or 1/2 bushel\n", + "new_pumpkins <- new_pumpkins %>% \n", + " mutate(price = case_when(\n", + " str_detect(package, \"1 1/9\") ~ price/(1.1),\n", + " str_detect(package, \"1/2\") ~ price*2,\n", + " TRUE ~ price))\n", + "\n", + "# Relocate column positions\n", + "new_pumpkins <- new_pumpkins %>% \n", + " relocate(month, .before = variety)\n", + "\n", + "\n", + "# Display the first 5 rows\n", + "new_pumpkins %>% \n", + " slice_head(n = 5)" + ], + "outputs": [], + "metadata": { + "id": "X0wU3gQvtd9f" + } + }, + { + "cell_type": "markdown", + "source": [ + "Bom trabalho!👌 Agora você tem um conjunto de dados limpo e organizado para construir seu novo modelo de regressão!\n", + "\n", + "Que tal um gráfico de dispersão?\n" + ], + "metadata": { + "id": "UpaIwaxqth82" + } + }, + { + "cell_type": "code", + "execution_count": null, + "source": [ + "# Set theme\n", + "theme_set(theme_light())\n", + "\n", + "# Make a scatter plot of month and price\n", + "new_pumpkins %>% \n", + " ggplot(mapping = aes(x = month, y = price)) +\n", + " geom_point(size = 1.6)\n" + ], + "outputs": [], + "metadata": { + "id": "DXgU-j37tl5K" + } + }, + { + "cell_type": "markdown", + "source": [ + "Um gráfico de dispersão nos lembra que só temos dados mensais de agosto a dezembro. Provavelmente precisamos de mais dados para conseguir tirar conclusões de forma linear.\n", + "\n", + "Vamos dar uma olhada novamente nos nossos dados de modelagem:\n" + ], + "metadata": { + "id": "Ve64wVbwtobI" + } + }, + { + "cell_type": "code", + "execution_count": null, + "source": [ + "# Display first 5 rows\n", + "new_pumpkins %>% \n", + " slice_head(n = 5)" + ], + "outputs": [], + "metadata": { + "id": "HFQX2ng1tuSJ" + } + }, + { + "cell_type": "markdown", + "source": [ + "E se quiséssemos prever o `price` de uma abóbora com base nas colunas `city` ou `package`, que são do tipo caractere? Ou, de forma ainda mais simples, como poderíamos encontrar a correlação (que exige que ambos os seus inputs sejam numéricos) entre, por exemplo, `package` e `price`? 🤷🤷\n", + "\n", + "Modelos de aprendizado de máquina funcionam melhor com características numéricas em vez de valores de texto, então geralmente é necessário converter características categóricas em representações numéricas.\n", + "\n", + "Isso significa que precisamos encontrar uma maneira de reformular nossos preditores para torná-los mais fáceis de usar por um modelo de forma eficaz, um processo conhecido como `feature engineering`.\n" + ], + "metadata": { + "id": "7hsHoxsStyjJ" + } + }, + { + "cell_type": "markdown", + "source": [ + "## 3. Pré-processamento de dados para modelagem com recipes 👩‍🍳👨‍🍳\n", + "\n", + "Atividades que reformulam os valores dos preditores para torná-los mais fáceis de serem usados de forma eficaz por um modelo são chamadas de `engenharia de atributos`.\n", + "\n", + "Modelos diferentes têm requisitos de pré-processamento diferentes. Por exemplo, mínimos quadrados requerem `codificação de variáveis categóricas`, como mês, variedade e city_name. Isso simplesmente envolve `traduzir` uma coluna com `valores categóricos` em uma ou mais `colunas numéricas` que substituem a original.\n", + "\n", + "Por exemplo, suponha que seus dados incluam a seguinte característica categórica:\n", + "\n", + "| cidade |\n", + "|:---------:|\n", + "| Denver |\n", + "| Nairobi |\n", + "| Tóquio |\n", + "\n", + "Você pode aplicar *codificação ordinal* para substituir cada categoria por um valor inteiro único, assim:\n", + "\n", + "| cidade |\n", + "|:------:|\n", + "| 0 |\n", + "| 1 |\n", + "| 2 |\n", + "\n", + "E é isso que faremos com nossos dados!\n", + "\n", + "Nesta seção, exploraremos outro pacote incrível do Tidymodels: [recipes](https://tidymodels.github.io/recipes/) - que foi projetado para ajudar você a pré-processar seus dados **antes** de treinar seu modelo. No seu núcleo, uma receita é um objeto que define quais etapas devem ser aplicadas a um conjunto de dados para prepará-lo para a modelagem.\n", + "\n", + "Agora, vamos criar uma receita que prepara nossos dados para modelagem, substituindo um número inteiro único para todas as observações nas colunas de preditores:\n" + ], + "metadata": { + "id": "AD5kQbcvt3Xl" + } + }, + { + "cell_type": "code", + "execution_count": null, + "source": [ + "# Specify a recipe\n", + "pumpkins_recipe <- recipe(price ~ ., data = new_pumpkins) %>% \n", + " step_integer(all_predictors(), zero_based = TRUE)\n", + "\n", + "\n", + "# Print out the recipe\n", + "pumpkins_recipe" + ], + "outputs": [], + "metadata": { + "id": "BNaFKXfRt9TU" + } + }, + { + "cell_type": "markdown", + "source": [ + "Incrível! 👏 Acabamos de criar nossa primeira receita que especifica um resultado (preço) e seus respectivos preditores, e que todas as colunas de preditores devem ser codificadas em um conjunto de números inteiros 🙌! Vamos analisar isso rapidamente:\n", + "\n", + "- A chamada para `recipe()` com uma fórmula informa à receita os *papéis* das variáveis usando os dados de `new_pumpkins` como referência. Por exemplo, a coluna `price` foi atribuída ao papel de `outcome`, enquanto o restante das colunas foi atribuído ao papel de `predictor`.\n", + "\n", + "- `step_integer(all_predictors(), zero_based = TRUE)` especifica que todos os preditores devem ser convertidos em um conjunto de números inteiros, começando a numeração em 0.\n", + "\n", + "Temos certeza de que você pode estar pensando algo como: \"Isso é tão legal!! Mas e se eu precisar confirmar que as receitas estão fazendo exatamente o que eu espero? 🤔\"\n", + "\n", + "Esse é um pensamento incrível! Veja bem, uma vez que sua receita está definida, você pode estimar os parâmetros necessários para realmente pré-processar os dados e, em seguida, extrair os dados processados. Normalmente, você não precisa fazer isso ao usar Tidymodels (veremos a convenção normal em apenas um minuto-\\> `workflows`), mas pode ser útil quando você quiser fazer algum tipo de verificação para confirmar que as receitas estão funcionando como esperado.\n", + "\n", + "Para isso, você precisará de dois outros verbos: `prep()` e `bake()`, e como sempre, nossos pequenos amigos do R criados por [`Allison Horst`](https://github.com/allisonhorst/stats-illustrations) ajudam você a entender isso melhor!\n", + "\n", + "

\n", + " \n", + "

Arte por @allison_horst
\n" + ], + "metadata": { + "id": "KEiO0v7kuC9O" + } + }, + { + "cell_type": "markdown", + "source": [ + "[`prep()`](https://recipes.tidymodels.org/reference/prep.html): estima os parâmetros necessários a partir de um conjunto de treinamento que podem ser posteriormente aplicados a outros conjuntos de dados. Por exemplo, para uma determinada coluna preditora, qual observação será atribuída ao inteiro 0, 1, 2, etc.\n", + "\n", + "[`bake()`](https://recipes.tidymodels.org/reference/bake.html): utiliza uma receita preparada e aplica as operações a qualquer conjunto de dados.\n", + "\n", + "Dito isso, vamos preparar e aplicar nossas receitas para realmente confirmar que, nos bastidores, as colunas preditoras serão primeiro codificadas antes que um modelo seja ajustado.\n" + ], + "metadata": { + "id": "Q1xtzebuuTCP" + } + }, + { + "cell_type": "code", + "execution_count": null, + "source": [ + "# Prep the recipe\n", + "pumpkins_prep <- prep(pumpkins_recipe)\n", + "\n", + "# Bake the recipe to extract a preprocessed new_pumpkins data\n", + "baked_pumpkins <- bake(pumpkins_prep, new_data = NULL)\n", + "\n", + "# Print out the baked data set\n", + "baked_pumpkins %>% \n", + " slice_head(n = 10)" + ], + "outputs": [], + "metadata": { + "id": "FGBbJbP_uUUn" + } + }, + { + "cell_type": "markdown", + "source": [ + "Uhuu! 🥳 Os dados processados `baked_pumpkins` têm todos os seus preditores codificados, confirmando que, de fato, as etapas de pré-processamento definidas como nossa receita funcionarão conforme o esperado. Isso pode dificultar a leitura para você, mas torna muito mais compreensível para o Tidymodels! Reserve um tempo para descobrir qual observação foi mapeada para um número inteiro correspondente.\n", + "\n", + "Também vale mencionar que `baked_pumpkins` é um data frame no qual podemos realizar cálculos.\n", + "\n", + "Por exemplo, vamos tentar encontrar uma boa correlação entre dois pontos dos seus dados para, potencialmente, construir um bom modelo preditivo. Usaremos a função `cor()` para isso. Digite `?cor()` para saber mais sobre a função.\n" + ], + "metadata": { + "id": "1dvP0LBUueAW" + } + }, + { + "cell_type": "code", + "execution_count": null, + "source": [ + "# Find the correlation between the city_name and the price\n", + "cor(baked_pumpkins$city_name, baked_pumpkins$price)\n", + "\n", + "# Find the correlation between the package and the price\n", + "cor(baked_pumpkins$package, baked_pumpkins$price)\n" + ], + "outputs": [], + "metadata": { + "id": "3bQzXCjFuiSV" + } + }, + { + "cell_type": "markdown", + "source": [ + "Como se verifica, há apenas uma correlação fraca entre a Cidade e o Preço. No entanto, há uma correlação um pouco melhor entre o Pacote e seu Preço. Faz sentido, certo? Normalmente, quanto maior a caixa do produto, maior o preço.\n", + "\n", + "Já que estamos nisso, vamos também tentar visualizar uma matriz de correlação de todas as colunas usando o pacote `corrplot`.\n" + ], + "metadata": { + "id": "BToPWbgjuoZw" + } + }, + { + "cell_type": "code", + "execution_count": null, + "source": [ + "# Load the corrplot package\n", + "library(corrplot)\n", + "\n", + "# Obtain correlation matrix\n", + "corr_mat <- cor(baked_pumpkins %>% \n", + " # Drop columns that are not really informative\n", + " select(-c(low_price, high_price)))\n", + "\n", + "# Make a correlation plot between the variables\n", + "corrplot(corr_mat, method = \"shade\", shade.col = NA, tl.col = \"black\", tl.srt = 45, addCoef.col = \"black\", cl.pos = \"n\", order = \"original\")" + ], + "outputs": [], + "metadata": { + "id": "ZwAL3ksmutVR" + } + }, + { + "cell_type": "markdown", + "source": [ + "🤩🤩 Muito melhor.\n", + "\n", + "Uma boa pergunta a se fazer agora com esses dados seria: '`Qual preço posso esperar de um determinado pacote de abóboras?`' Vamos direto ao ponto!\n", + "\n", + "> Nota: Quando você **`bake()`** a receita preparada **`pumpkins_prep`** com **`new_data = NULL`**, você extrai os dados de treinamento processados (ou seja, codificados). Se você tivesse outro conjunto de dados, por exemplo, um conjunto de teste, e quisesse ver como a receita o pré-processaria, bastaria assar **`pumpkins_prep`** com **`new_data = test_set`**\n", + "\n", + "## 4. Construir um modelo de regressão linear\n", + "\n", + "

\n", + " \n", + "

Infográfico por Dasani Madipalli
\n", + "\n", + "\n", + "\n" + ], + "metadata": { + "id": "YqXjLuWavNxW" + } + }, + { + "cell_type": "markdown", + "source": [ + "Agora que criamos uma receita e confirmamos que os dados serão pré-processados adequadamente, vamos construir um modelo de regressão para responder à pergunta: `Qual preço posso esperar de um determinado pacote de abóbora?`\n", + "\n", + "#### Treinar um modelo de regressão linear usando o conjunto de treinamento\n", + "\n", + "Como você já deve ter percebido, a coluna *price* é a variável `resultado`, enquanto a coluna *package* é a variável `preditor`.\n", + "\n", + "Para isso, primeiro dividiremos os dados de forma que 80% sejam destinados ao treinamento e 20% ao conjunto de teste. Em seguida, definiremos uma receita que codificará a coluna preditora em um conjunto de números inteiros e, depois, construiremos uma especificação de modelo. Não vamos preparar e aplicar nossa receita, já que sabemos que ela pré-processará os dados conforme esperado.\n" + ], + "metadata": { + "id": "Pq0bSzCevW-h" + } + }, + { + "cell_type": "code", + "execution_count": null, + "source": [ + "set.seed(2056)\n", + "# Split the data into training and test sets\n", + "pumpkins_split <- new_pumpkins %>% \n", + " initial_split(prop = 0.8)\n", + "\n", + "\n", + "# Extract training and test data\n", + "pumpkins_train <- training(pumpkins_split)\n", + "pumpkins_test <- testing(pumpkins_split)\n", + "\n", + "\n", + "\n", + "# Create a recipe for preprocessing the data\n", + "lm_pumpkins_recipe <- recipe(price ~ package, data = pumpkins_train) %>% \n", + " step_integer(all_predictors(), zero_based = TRUE)\n", + "\n", + "\n", + "\n", + "# Create a linear model specification\n", + "lm_spec <- linear_reg() %>% \n", + " set_engine(\"lm\") %>% \n", + " set_mode(\"regression\")" + ], + "outputs": [], + "metadata": { + "id": "CyoEh_wuvcLv" + } + }, + { + "cell_type": "markdown", + "source": [ + "Bom trabalho! Agora que temos uma receita e uma especificação de modelo, precisamos encontrar uma maneira de agrupá-las em um objeto que, primeiro, faça o pré-processamento dos dados (prep+bake nos bastidores), ajuste o modelo nos dados pré-processados e também permita possíveis atividades de pós-processamento. Que tal isso para sua tranquilidade! 🤩\n", + "\n", + "No Tidymodels, esse objeto prático é chamado de [`workflow`](https://workflows.tidymodels.org/) e organiza convenientemente seus componentes de modelagem! É o que chamaríamos de *pipelines* em *Python*.\n", + "\n", + "Então, vamos agrupar tudo em um workflow! 📦\n" + ], + "metadata": { + "id": "G3zF_3DqviFJ" + } + }, + { + "cell_type": "code", + "execution_count": null, + "source": [ + "# Hold modelling components in a workflow\n", + "lm_wf <- workflow() %>% \n", + " add_recipe(lm_pumpkins_recipe) %>% \n", + " add_model(lm_spec)\n", + "\n", + "# Print out the workflow\n", + "lm_wf" + ], + "outputs": [], + "metadata": { + "id": "T3olroU3v-WX" + } + }, + { + "cell_type": "markdown", + "source": [ + "👌 Além disso, um fluxo de trabalho pode ser ajustado/treinado de maneira muito semelhante a um modelo.\n" + ], + "metadata": { + "id": "zd1A5tgOwEPX" + } + }, + { + "cell_type": "code", + "execution_count": null, + "source": [ + "# Train the model\n", + "lm_wf_fit <- lm_wf %>% \n", + " fit(data = pumpkins_train)\n", + "\n", + "# Print the model coefficients learned \n", + "lm_wf_fit" + ], + "outputs": [], + "metadata": { + "id": "NhJagFumwFHf" + } + }, + { + "cell_type": "markdown", + "source": [ + "A partir da saída do modelo, podemos observar os coeficientes aprendidos durante o treinamento. Eles representam os coeficientes da linha de melhor ajuste que nos dá o menor erro geral entre a variável real e a prevista.\n", + "\n", + "#### Avaliar o desempenho do modelo usando o conjunto de teste\n", + "\n", + "É hora de ver como o modelo se saiu 📏! Como fazemos isso?\n", + "\n", + "Agora que treinamos o modelo, podemos usá-lo para fazer previsões para o `test_set` usando `parsnip::predict()`. Em seguida, podemos comparar essas previsões com os valores reais dos rótulos para avaliar o quão bem (ou não!) o modelo está funcionando.\n", + "\n", + "Vamos começar fazendo previsões para o conjunto de teste e, em seguida, vinculando as colunas ao conjunto de teste.\n" + ], + "metadata": { + "id": "_4QkGtBTwItF" + } + }, + { + "cell_type": "code", + "execution_count": null, + "source": [ + "# Make predictions for the test set\n", + "predictions <- lm_wf_fit %>% \n", + " predict(new_data = pumpkins_test)\n", + "\n", + "\n", + "# Bind predictions to the test set\n", + "lm_results <- pumpkins_test %>% \n", + " select(c(package, price)) %>% \n", + " bind_cols(predictions)\n", + "\n", + "\n", + "# Print the first ten rows of the tibble\n", + "lm_results %>% \n", + " slice_head(n = 10)" + ], + "outputs": [], + "metadata": { + "id": "UFZzTG0gwTs9" + } + }, + { + "cell_type": "markdown", + "source": [ + "Sim, você acabou de treinar um modelo e usá-lo para fazer previsões! 🔮 Será que ele é bom? Vamos avaliar o desempenho do modelo!\n", + "\n", + "No Tidymodels, fazemos isso usando `yardstick::metrics()`! Para regressão linear, vamos focar nas seguintes métricas:\n", + "\n", + "- `Root Mean Square Error (RMSE)`: A raiz quadrada do [MSE](https://en.wikipedia.org/wiki/Mean_squared_error). Isso resulta em uma métrica absoluta na mesma unidade do rótulo (neste caso, o preço de uma abóbora). Quanto menor o valor, melhor o modelo (de forma simplificada, representa o preço médio pelo qual as previsões estão erradas!).\n", + "\n", + "- `Coefficient of Determination (geralmente conhecido como R-quadrado ou R2)`: Uma métrica relativa em que, quanto maior o valor, melhor o ajuste do modelo. Essencialmente, essa métrica representa o quanto da variância entre os valores previstos e reais o modelo é capaz de explicar.\n" + ], + "metadata": { + "id": "0A5MjzM7wW9M" + } + }, + { + "cell_type": "code", + "execution_count": null, + "source": [ + "# Evaluate performance of linear regression\n", + "metrics(data = lm_results,\n", + " truth = price,\n", + " estimate = .pred)" + ], + "outputs": [], + "metadata": { + "id": "reJ0UIhQwcEH" + } + }, + { + "cell_type": "markdown", + "source": [ + "Lá se vai o desempenho do modelo. Vamos ver se conseguimos uma indicação melhor visualizando um gráfico de dispersão do pacote e do preço, e então usar as previsões feitas para sobrepor uma linha de melhor ajuste.\n", + "\n", + "Isso significa que teremos que preparar e processar o conjunto de teste para codificar a coluna de pacote e, em seguida, vinculá-la às previsões feitas pelo nosso modelo.\n" + ], + "metadata": { + "id": "fdgjzjkBwfWt" + } + }, + { + "cell_type": "code", + "execution_count": null, + "source": [ + "# Encode package column\n", + "package_encode <- lm_pumpkins_recipe %>% \n", + " prep() %>% \n", + " bake(new_data = pumpkins_test) %>% \n", + " select(package)\n", + "\n", + "\n", + "# Bind encoded package column to the results\n", + "lm_results <- lm_results %>% \n", + " bind_cols(package_encode %>% \n", + " rename(package_integer = package)) %>% \n", + " relocate(package_integer, .after = package)\n", + "\n", + "\n", + "# Print new results data frame\n", + "lm_results %>% \n", + " slice_head(n = 5)\n", + "\n", + "\n", + "# Make a scatter plot\n", + "lm_results %>% \n", + " ggplot(mapping = aes(x = package_integer, y = price)) +\n", + " geom_point(size = 1.6) +\n", + " # Overlay a line of best fit\n", + " geom_line(aes(y = .pred), color = \"orange\", size = 1.2) +\n", + " xlab(\"package\")\n", + " \n" + ], + "outputs": [], + "metadata": { + "id": "R0nw719lwkHE" + } + }, + { + "cell_type": "markdown", + "source": [ + "Ótimo! Como você pode ver, o modelo de regressão linear não generaliza muito bem a relação entre um pacote e seu preço correspondente.\n", + "\n", + "🎃 Parabéns, você acabou de criar um modelo que pode ajudar a prever o preço de algumas variedades de abóboras. Sua plantação de abóboras para o feriado ficará linda. Mas provavelmente você pode criar um modelo melhor!\n", + "\n", + "## 5. Construir um modelo de regressão polinomial\n", + "\n", + "

\n", + " \n", + "

Infográfico por Dasani Madipalli
\n", + "\n", + "\n", + "\n" + ], + "metadata": { + "id": "HOCqJXLTwtWI" + } + }, + { + "cell_type": "markdown", + "source": [ + "Às vezes, nossos dados podem não ter uma relação linear, mas ainda assim queremos prever um resultado. A regressão polinomial pode nos ajudar a fazer previsões para relações não lineares mais complexas.\n", + "\n", + "Por exemplo, considere a relação entre o pacote e o preço no nosso conjunto de dados de abóboras. Embora às vezes haja uma relação linear entre as variáveis - quanto maior o volume da abóbora, maior o preço - em outras ocasiões essas relações não podem ser representadas como um plano ou uma linha reta.\n", + "\n", + "> ✅ Aqui estão [alguns exemplos adicionais](https://online.stat.psu.edu/stat501/lesson/9/9.8) de dados que poderiam usar regressão polinomial\n", + ">\n", + "> Dê outra olhada na relação entre Variedade e Preço no gráfico anterior. Esse gráfico de dispersão parece que necessariamente deveria ser analisado por uma linha reta? Talvez não. Nesse caso, você pode tentar a regressão polinomial.\n", + ">\n", + "> ✅ Polinômios são expressões matemáticas que podem consistir em uma ou mais variáveis e coeficientes\n", + "\n", + "#### Treine um modelo de regressão polinomial usando o conjunto de treinamento\n", + "\n", + "A regressão polinomial cria uma *linha curva* para ajustar melhor os dados não lineares.\n", + "\n", + "Vamos ver se um modelo polinomial terá um desempenho melhor ao fazer previsões. Seguiremos um procedimento um pouco semelhante ao que fizemos antes:\n", + "\n", + "- Criar uma receita que especifique os passos de pré-processamento que devem ser realizados nos nossos dados para prepará-los para modelagem, ou seja: codificar os preditores e calcular polinômios de grau *n*\n", + "\n", + "- Construir uma especificação de modelo\n", + "\n", + "- Agrupar a receita e a especificação do modelo em um fluxo de trabalho\n", + "\n", + "- Criar um modelo ajustando o fluxo de trabalho\n", + "\n", + "- Avaliar o desempenho do modelo nos dados de teste\n", + "\n", + "Vamos começar!\n" + ], + "metadata": { + "id": "VcEIpRV9wzYr" + } + }, + { + "cell_type": "code", + "execution_count": null, + "source": [ + "# Specify a recipe\r\n", + "poly_pumpkins_recipe <-\r\n", + " recipe(price ~ package, data = pumpkins_train) %>%\r\n", + " step_integer(all_predictors(), zero_based = TRUE) %>% \r\n", + " step_poly(all_predictors(), degree = 4)\r\n", + "\r\n", + "\r\n", + "# Create a model specification\r\n", + "poly_spec <- linear_reg() %>% \r\n", + " set_engine(\"lm\") %>% \r\n", + " set_mode(\"regression\")\r\n", + "\r\n", + "\r\n", + "# Bundle recipe and model spec into a workflow\r\n", + "poly_wf <- workflow() %>% \r\n", + " add_recipe(poly_pumpkins_recipe) %>% \r\n", + " add_model(poly_spec)\r\n", + "\r\n", + "\r\n", + "# Create a model\r\n", + "poly_wf_fit <- poly_wf %>% \r\n", + " fit(data = pumpkins_train)\r\n", + "\r\n", + "\r\n", + "# Print learned model coefficients\r\n", + "poly_wf_fit\r\n", + "\r\n", + " " + ], + "outputs": [], + "metadata": { + "id": "63n_YyRXw3CC" + } + }, + { + "cell_type": "markdown", + "source": [ + "#### Avaliar o desempenho do modelo\n", + "\n", + "👏👏Você construiu um modelo polinomial, vamos fazer previsões no conjunto de teste!\n" + ], + "metadata": { + "id": "-LHZtztSxDP0" + } + }, + { + "cell_type": "code", + "execution_count": null, + "source": [ + "# Make price predictions on test data\r\n", + "poly_results <- poly_wf_fit %>% predict(new_data = pumpkins_test) %>% \r\n", + " bind_cols(pumpkins_test %>% select(c(package, price))) %>% \r\n", + " relocate(.pred, .after = last_col())\r\n", + "\r\n", + "\r\n", + "# Print the results\r\n", + "poly_results %>% \r\n", + " slice_head(n = 10)" + ], + "outputs": [], + "metadata": { + "id": "YUFpQ_dKxJGx" + } + }, + { + "cell_type": "markdown", + "source": [ + "Uhuu, vamos avaliar como o modelo se saiu no test_set usando `yardstick::metrics()`.\n" + ], + "metadata": { + "id": "qxdyj86bxNGZ" + } + }, + { + "cell_type": "code", + "execution_count": null, + "source": [ + "metrics(data = poly_results, truth = price, estimate = .pred)" + ], + "outputs": [], + "metadata": { + "id": "8AW5ltkBxXDm" + } + }, + { + "cell_type": "markdown", + "source": [ + "🤩🤩 Desempenho muito melhor.\n", + "\n", + "O `rmse` diminuiu de cerca de 7 para cerca de 3, indicando uma redução no erro entre o preço real e o preço previsto. Você pode *interpretar livremente* isso como significando que, em média, as previsões incorretas erram por volta de R\\$3. O `rsq` aumentou de cerca de 0,4 para 0,8.\n", + "\n", + "Todas essas métricas indicam que o modelo polinomial tem um desempenho muito melhor do que o modelo linear. Bom trabalho!\n", + "\n", + "Vamos ver se conseguimos visualizar isso!\n" + ], + "metadata": { + "id": "6gLHNZDwxYaS" + } + }, + { + "cell_type": "code", + "execution_count": null, + "source": [ + "# Bind encoded package column to the results\r\n", + "poly_results <- poly_results %>% \r\n", + " bind_cols(package_encode %>% \r\n", + " rename(package_integer = package)) %>% \r\n", + " relocate(package_integer, .after = package)\r\n", + "\r\n", + "\r\n", + "# Print new results data frame\r\n", + "poly_results %>% \r\n", + " slice_head(n = 5)\r\n", + "\r\n", + "\r\n", + "# Make a scatter plot\r\n", + "poly_results %>% \r\n", + " ggplot(mapping = aes(x = package_integer, y = price)) +\r\n", + " geom_point(size = 1.6) +\r\n", + " # Overlay a line of best fit\r\n", + " geom_line(aes(y = .pred), color = \"midnightblue\", size = 1.2) +\r\n", + " xlab(\"package\")\r\n" + ], + "outputs": [], + "metadata": { + "id": "A83U16frxdF1" + } + }, + { + "cell_type": "markdown", + "source": [ + "Você pode ver uma linha curva que se ajusta melhor aos seus dados! 🤩\n", + "\n", + "Você pode torná-la ainda mais suave passando uma fórmula polinomial para `geom_smooth`, assim:\n" + ], + "metadata": { + "id": "4U-7aHOVxlGU" + } + }, + { + "cell_type": "code", + "execution_count": null, + "source": [ + "# Make a scatter plot\r\n", + "poly_results %>% \r\n", + " ggplot(mapping = aes(x = package_integer, y = price)) +\r\n", + " geom_point(size = 1.6) +\r\n", + " # Overlay a line of best fit\r\n", + " geom_smooth(method = lm, formula = y ~ poly(x, degree = 4), color = \"midnightblue\", size = 1.2, se = FALSE) +\r\n", + " xlab(\"package\")" + ], + "outputs": [], + "metadata": { + "id": "5vzNT0Uexm-w" + } + }, + { + "cell_type": "markdown", + "source": [ + "Muito parecido com uma curva suave!🤩\n", + "\n", + "Aqui está como você pode fazer uma nova previsão:\n" + ], + "metadata": { + "id": "v9u-wwyLxq4G" + } + }, + { + "cell_type": "code", + "execution_count": null, + "source": [ + "# Make a hypothetical data frame\r\n", + "hypo_tibble <- tibble(package = \"bushel baskets\")\r\n", + "\r\n", + "# Make predictions using linear model\r\n", + "lm_pred <- lm_wf_fit %>% predict(new_data = hypo_tibble)\r\n", + "\r\n", + "# Make predictions using polynomial model\r\n", + "poly_pred <- poly_wf_fit %>% predict(new_data = hypo_tibble)\r\n", + "\r\n", + "# Return predictions in a list\r\n", + "list(\"linear model prediction\" = lm_pred, \r\n", + " \"polynomial model prediction\" = poly_pred)\r\n" + ], + "outputs": [], + "metadata": { + "id": "jRPSyfQGxuQv" + } + }, + { + "cell_type": "markdown", + "source": [ + "A previsão do `polynomial model` faz sentido, considerando os gráficos de dispersão de `price` e `package`! E, se este modelo for melhor do que o anterior, analisando os mesmos dados, você precisará planejar um orçamento para essas abóboras mais caras!\n", + "\n", + "🏆 Muito bem! Você criou dois modelos de regressão em uma única lição. Na seção final sobre regressão, você aprenderá sobre regressão logística para determinar categorias.\n", + "\n", + "## **🚀Desafio**\n", + "\n", + "Teste várias variáveis diferentes neste notebook para ver como a correlação corresponde à precisão do modelo.\n", + "\n", + "## [**Questionário pós-aula**](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/14/)\n", + "\n", + "## **Revisão e Autoestudo**\n", + "\n", + "Nesta lição, aprendemos sobre Regressão Linear. Existem outros tipos importantes de Regressão. Leia sobre as técnicas Stepwise, Ridge, Lasso e Elasticnet. Um bom curso para aprender mais é o [curso de Aprendizado Estatístico de Stanford](https://online.stanford.edu/courses/sohs-ystatslearning-statistical-learning).\n", + "\n", + "Se você quiser aprender mais sobre como usar o incrível framework Tidymodels, confira os seguintes recursos:\n", + "\n", + "- Site do Tidymodels: [Comece com Tidymodels](https://www.tidymodels.org/start/)\n", + "\n", + "- Max Kuhn e Julia Silge, [*Tidy Modeling with R*](https://www.tmwr.org/)*.*\n", + "\n", + "###### **AGRADECIMENTOS A:**\n", + "\n", + "[Allison Horst](https://twitter.com/allison_horst?lang=en) por criar as ilustrações incríveis que tornam o R mais acolhedor e envolvente. Encontre mais ilustrações na sua [galeria](https://www.google.com/url?q=https://github.com/allisonhorst/stats-illustrations&sa=D&source=editors&ust=1626380772530000&usg=AOvVaw3zcfyCizFQZpkSLzxiiQEM).\n" + ], + "metadata": { + "id": "8zOLOWqMxzk5" + } + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n---\n\n**Aviso Legal**: \nEste documento foi traduzido utilizando o serviço de tradução por IA [Co-op Translator](https://github.com/Azure/co-op-translator). Embora nos esforcemos para garantir a precisão, esteja ciente de que traduções automatizadas podem conter erros ou imprecisões. O documento original em seu idioma nativo deve ser considerado a fonte autoritativa. Para informações críticas, recomenda-se a tradução profissional realizada por humanos. Não nos responsabilizamos por quaisquer mal-entendidos ou interpretações equivocadas decorrentes do uso desta tradução.\n" + ] + } + ] +} \ No newline at end of file diff --git a/translations/pt-BR/2-Regression/3-Linear/solution/notebook.ipynb b/translations/pt-BR/2-Regression/3-Linear/solution/notebook.ipynb new file mode 100644 index 000000000..61755c0b0 --- /dev/null +++ b/translations/pt-BR/2-Regression/3-Linear/solution/notebook.ipynb @@ -0,0 +1,1111 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Regressão Linear e Polinomial para Precificação de Abóboras - Aula 3\n", + "\n", + "Carregue as bibliotecas necessárias e o conjunto de dados. Converta os dados para um dataframe contendo um subconjunto dos dados:\n", + "\n", + "- Considere apenas abóboras com preços definidos por alqueire\n", + "- Converta a data para o formato de mês\n", + "- Calcule o preço como uma média entre os preços mais altos e mais baixos\n", + "- Converta o preço para refletir a precificação pela quantidade em alqueires\n" + ] + }, + { + "cell_type": "code", + "execution_count": 167, + "metadata": {}, + "outputs": [ + { + "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", + "
City NameTypePackageVarietySub VarietyGradeDateLow PriceHigh PriceMostly Low...Unit of SaleQualityConditionAppearanceStorageCropRepackTrans ModeUnnamed: 24Unnamed: 25
0BALTIMORENaN24 inch binsNaNNaNNaN4/29/17270.0280.0270.0...NaNNaNNaNNaNNaNNaNENaNNaNNaN
1BALTIMORENaN24 inch binsNaNNaNNaN5/6/17270.0280.0270.0...NaNNaNNaNNaNNaNNaNENaNNaNNaN
2BALTIMORENaN24 inch binsHOWDEN TYPENaNNaN9/24/16160.0160.0160.0...NaNNaNNaNNaNNaNNaNNNaNNaNNaN
3BALTIMORENaN24 inch binsHOWDEN TYPENaNNaN9/24/16160.0160.0160.0...NaNNaNNaNNaNNaNNaNNNaNNaNNaN
4BALTIMORENaN24 inch binsHOWDEN TYPENaNNaN11/5/1690.0100.090.0...NaNNaNNaNNaNNaNNaNNNaNNaNNaN
\n", + "

5 rows × 26 columns

\n", + "
" + ], + "text/plain": [ + " City Name Type Package Variety Sub Variety Grade Date \\\n", + "0 BALTIMORE NaN 24 inch bins NaN NaN NaN 4/29/17 \n", + "1 BALTIMORE NaN 24 inch bins NaN NaN NaN 5/6/17 \n", + "2 BALTIMORE NaN 24 inch bins HOWDEN TYPE NaN NaN 9/24/16 \n", + "3 BALTIMORE NaN 24 inch bins HOWDEN TYPE NaN NaN 9/24/16 \n", + "4 BALTIMORE NaN 24 inch bins HOWDEN TYPE NaN NaN 11/5/16 \n", + "\n", + " Low Price High Price Mostly Low ... Unit of Sale Quality Condition \\\n", + "0 270.0 280.0 270.0 ... NaN NaN NaN \n", + "1 270.0 280.0 270.0 ... NaN NaN NaN \n", + "2 160.0 160.0 160.0 ... NaN NaN NaN \n", + "3 160.0 160.0 160.0 ... NaN NaN NaN \n", + "4 90.0 100.0 90.0 ... NaN NaN NaN \n", + "\n", + " Appearance Storage Crop Repack Trans Mode Unnamed: 24 Unnamed: 25 \n", + "0 NaN NaN NaN E NaN NaN NaN \n", + "1 NaN NaN NaN E NaN NaN NaN \n", + "2 NaN NaN NaN N NaN NaN NaN \n", + "3 NaN NaN NaN N NaN NaN NaN \n", + "4 NaN NaN NaN N NaN NaN NaN \n", + "\n", + "[5 rows x 26 columns]" + ] + }, + "execution_count": 167, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "import pandas as pd\n", + "import matplotlib.pyplot as plt\n", + "import numpy as np\n", + "from datetime import datetime\n", + "\n", + "pumpkins = pd.read_csv('../../data/US-pumpkins.csv')\n", + "pumpkins.head()" + ] + }, + { + "cell_type": "code", + "execution_count": 168, + "metadata": {}, + "outputs": [ + { + "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", + "
MonthDayOfYearVarietyCityPackageLow PriceHigh PricePrice
709267PIE TYPEBALTIMORE1 1/9 bushel cartons15.015.013.636364
719267PIE TYPEBALTIMORE1 1/9 bushel cartons18.018.016.363636
7210274PIE TYPEBALTIMORE1 1/9 bushel cartons18.018.016.363636
7310274PIE TYPEBALTIMORE1 1/9 bushel cartons17.017.015.454545
7410281PIE TYPEBALTIMORE1 1/9 bushel cartons15.015.013.636364
\n", + "
" + ], + "text/plain": [ + " Month DayOfYear Variety City Package Low Price \\\n", + "70 9 267 PIE TYPE BALTIMORE 1 1/9 bushel cartons 15.0 \n", + "71 9 267 PIE TYPE BALTIMORE 1 1/9 bushel cartons 18.0 \n", + "72 10 274 PIE TYPE BALTIMORE 1 1/9 bushel cartons 18.0 \n", + "73 10 274 PIE TYPE BALTIMORE 1 1/9 bushel cartons 17.0 \n", + "74 10 281 PIE TYPE BALTIMORE 1 1/9 bushel cartons 15.0 \n", + "\n", + " High Price Price \n", + "70 15.0 13.636364 \n", + "71 18.0 16.363636 \n", + "72 18.0 16.363636 \n", + "73 17.0 15.454545 \n", + "74 15.0 13.636364 " + ] + }, + "execution_count": 168, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "pumpkins = pumpkins[pumpkins['Package'].str.contains('bushel', case=True, regex=True)]\n", + "\n", + "new_columns = ['Package', 'Variety', 'City Name', 'Month', 'Low Price', 'High Price', 'Date']\n", + "pumpkins = pumpkins.drop([c for c in pumpkins.columns if c not in new_columns], axis=1)\n", + "\n", + "price = (pumpkins['Low Price'] + pumpkins['High Price']) / 2\n", + "\n", + "month = pd.DatetimeIndex(pumpkins['Date']).month\n", + "day_of_year = pd.to_datetime(pumpkins['Date']).apply(lambda dt: (dt-datetime(dt.year,1,1)).days)\n", + "\n", + "new_pumpkins = pd.DataFrame(\n", + " {'Month': month, \n", + " 'DayOfYear' : day_of_year, \n", + " 'Variety': pumpkins['Variety'], \n", + " 'City': pumpkins['City Name'], \n", + " 'Package': pumpkins['Package'], \n", + " 'Low Price': pumpkins['Low Price'],\n", + " 'High Price': pumpkins['High Price'], \n", + " 'Price': price})\n", + "\n", + "new_pumpkins.loc[new_pumpkins['Package'].str.contains('1 1/9'), 'Price'] = price/1.1\n", + "new_pumpkins.loc[new_pumpkins['Package'].str.contains('1/2'), 'Price'] = price*2\n", + "\n", + "new_pumpkins.head()\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Um gráfico de dispersão nos lembra que temos dados mensais apenas de agosto a dezembro. Provavelmente precisamos de mais dados para poder tirar conclusões de forma linear.\n" + ] + }, + { + "cell_type": "code", + "execution_count": 169, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 169, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "new_pumpkins.plot.scatter('Month','Price')" + ] + }, + { + "cell_type": "code", + "execution_count": 170, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 170, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "new_pumpkins.plot.scatter('DayOfYear','Price')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [] + }, + { + "cell_type": "code", + "execution_count": 171, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "-0.14878293554077535\n", + "-0.16673322492745407\n" + ] + } + ], + "source": [ + "print(new_pumpkins['Month'].corr(new_pumpkins['Price']))\n", + "print(new_pumpkins['DayOfYear'].corr(new_pumpkins['Price']))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Parece que a correlação é bem pequena, mas há alguma outra relação mais importante - porque os pontos de preço no gráfico acima parecem ter vários clusters distintos. Vamos fazer um gráfico que mostrará diferentes variedades de abóbora:\n" + ] + }, + { + "cell_type": "code", + "execution_count": 172, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAX4AAAEGCAYAAABiq/5QAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjQuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8rg+JYAAAACXBIWXMAAAsTAAALEwEAmpwYAAA7VklEQVR4nO2deXxU5fX/34cQzACyR6WyBEEpyBIlYF3rAlQtAi61Rtx+xq9tNZbar1q7iHxb7FdxrVr7VZt+QYGIS12wdcMvtmqtLIoIRFHbhCKUhMhO2M/vj3uTzCQzSWbmzsydmfN+ve7rzj1z7+c+T2Zy5rnneZ7ziKpiGIZhZA/tUl0AwzAMI7mY4zcMw8gyzPEbhmFkGeb4DcMwsgxz/IZhGFlG+1QXoC306tVLCwoKUl0MwzCMtGLZsmWbVDW/qT0tHH9BQQFLly5NdTEMwzDSChGpCme3UI9hGEaWYY7fMAwjyzDHbxiGkWWkRYzfMBLJvn37WLduHbt37051UQwjJvLy8ujTpw+5ubltOt8cv5H1rFu3jkMPPZSCggJEJNXFMYyoUFVqa2tZt24dAwYMaNM1FuoxIlJTA0uWOPtMZvfu3fTs2dOcvpGWiAg9e/aM6onVHL8RlvJy6N8fxo1z9uXlqS5RYjGnb6Qz0X5/zfEbzaipgZISqKuDrVudfUlJ5rf8DSNbMMdvNKOyEjp0CLXl5jp2IzHk5ORQWFjIsGHD+M53vsOuXbsA6Ny5MwCVlZUEAgEKCwsbtieeeCJE4/zzz6ewsJBBgwbRtWvXhvPOPPNMfvKTnzScV1VVxVFHHcWWLVs4/fTTGTx4MCNHjuTkk0/m008/BWiw12tcdNFFSfpLGElBVX2/jRo1So3kUV2tGgioQuMWCDj2TGT16tWpLoJ26tSp4fWll16q9957b4j9n//8px577LFt0lq0aJF++9vfbjjetWuXDh48uKGekyZN0jlz5qiq6je/+U1dsmSJqqo++uijet555zWzG+lBuO8xsFTD+FRr8RvNyM+HsjIIBKBLF2dfVubY4yGjOosTWJlTTz2Vzz//3DO9QCDAfffdx3XXXccrr7zC9u3bmTJlSrPzTjvtNE/va/gXc/xGWIqLoaoKFi509sXF8ellVGdxAiuzf/9+XnnlFYYPH97svS+++CIk1PP222+3Wffcc8+lR48eXHHFFTzyyCNhz1mwYEHIfadMmdJwr5tvvjn6yhi+JaHj+EWkEtgOHAD2q2qRiPQA5gMFQCVwsapuTmQ5jNjIz4+/lQ+hncV1dY6tpATGjvVGP6kkqDJ1dXUUFhYCTou/pKSk2TkDBw5k+fLlMd/j+uuvp66ujsGDB4fYp0yZQiAQoKCggIceeqjBPnfuXIqKimK+n+FfkjGB6wxV3RR0fCvwpqreKSK3usc/CX+pkQnUdxbX+0lo7CxOO8efoMoEAoG4nHpbaNeuHe3aNX/INweffaQi1DMJmO2+ng1MTkEZjCRSUAB794ba9u1z7GlHRlXGyFYS7fgVeF1ElonIta7tcFXdAODuD0twGYwUk6jO4pSQwso0jfE/+OCDCb1fcIx/7NixCb2XkVzEGfGTIHGRr6nqehE5DHgDuAF4SVW7BZ2zWVW7h7n2WuBagH79+o2qqgq7noCRRtTUOBGRggJ/Of2KigqGDBkS3UV+rYyRtYT7HovIMlVtFsdLaIxfVde7+2oReR4YA2wUkd6qukFEegPVEa59DHgMoKioKHG/TkbS8Kqz2BdkVGWMbCNhoR4R6SQih9a/BsYDK4GXgCvd064EXkxUGQzDMIzmJLLFfzjwvJs8qD0wT1VfFZElwNMiUgKsBb6TwDIYhmEYTUiY41fVfwAjw9hrgbMSdV/DMAyjZWzmrmEYRpZhjj+FeJ3uxe96hmH4A3P8KcLrdC9+1zNaRkS4/PLLG473799Pfn4+EyZMAGDWrFmUlpYCMH36dDp27Eh1deOAuPr0zU1fA9x///3k5eWxdetWamtrG8bmH3HEERx55JENx2vWrGHYsGEh106fPp177rkHgKuuuooBAwZQWFjIyJEjefPNNxvOszTO6YU5/hTg9UInftczWqdTp06sXLmSOjcVxBtvvMGRRx4Z8fxevXpx7733tkm7vLyc0aNH8/zzz9OzZ0+WL1/O8uXL+f73v8+NN97YcNyh6SIMYbj77rtZvnw5DzzwAN///vdD3ps7d26D1rPPPtumshmpwRx/CvB6oRO/62UiiQiDnXPOOfzpT38CHGdd3EJK1Kuvvpr58+fz1Vdftaj5xRdfsGPHDmbMmEG5h49tJ554Il9++aVnekZyMcefArxO9+J3vUwjUWGwSy65hKeeeordu3ezYsUKTjjhhIjndu7cmauvvprf/OY3rZTV+QE59dRT+fTTT0PCQ/Hw6quvMnny5BCbpXFOH8zxpwCv0734Xa+eTOgsTmQYbMSIEVRWVlJeXs65557b6vk//OEPmT17Ntu2bYt4zlNPPcUll1xCu3btuOCCC3jmmWcinhtpwe5g+80338xRRx3FZZddxs9+9rOQ84JDPXfffXer5TdSRzLSMhthKC52Urh7le7F73rl5Y6D7NDBeZooK4t/cZdUkOgU0xMnTuSmm27irbfeora2tsVzu3XrxqWXXhpxYZUVK1bw2WefMW7cOAD27t3LUUcdxfXXXx/2/J49e7J5c+jSGF999RUDBgxoOL777ru54IILePDBB7nyyitZtmxZNNUzfIK1+FNIfj6MHu1dyhe/6mVSZ3Giw2BXX30106ZNC7sCVzh+/OMf8+ijj7J///5m75WXlzN9+nQqKyuprKxk/fr1fPnll0RKeNi5c2d69+7dMFrnq6++4tVXX+WUU04JOa9du3ZMnTqVgwcP8tprr0VZQ8MPmOM3Ek46dxbv2wc7dzp7iD8MVlcHmzaFPjEE06dPH6ZOndrm8nXt2osJE85nz549zd576qmnOP/880Ns559/Pk899VREvSeeeIIZM2ZQWFjImWeeye23387AgQObnSci/OIXv2DmzJkNNkvjnD4kNC2zVxQVFenSpUtTXQwjRmpqnE7QYGcXCDhr+fohwWWktMy1tU4ZRUDVqUPPns57sWRlXrsWgvtWDzsM+vWLvdwtlc/IPqJJy2wtfiNqKipg9mxn3xbScSGWffscp3rwIBw44OyrqkJb/tGEwerqQp0+OMeRWv7xls8wWsI6d42ouOEGePjhxuPSUghanzsiXncWJ5q9e52WdDAijj03N3q9nTsj2wOB1JfPyC6sxW+0mYqKUKcPznE0LX8vO58TSYcOTvgkGNXmfRVtpVOn6Oyt4XX5jOzCHL/RZhYvjs6ezuTmOjHzdu0gJ8fZ9+8fe2s6EHBi+sEcdlhsrf1ElM/ILizUY7SZMWOis6c7PXs6fRJ79zot6Xidar9+ztPOzp1OSz9Wp5+o8hnZQ8Jb/CKSIyIfisjL7vF0EflSRJa7W+tTFA1fMGSIE9MPprTUsWcqubmOk/bKqQYC0KtX/E6/Hq/L13T4qpGZJCPUMxVoGgW+X1UL3e3PSSiD4REPPQSrV8OsWc6+LR27Ruvk5OQ0jIEvLCyk0p3kEJxSuZ633norJF1zfn4+hYWFfP3rX+f+++9n9+7dfP3rX+fjjz9uuGbmzJmcddZZDfo9evRoSLFcP+Z+0aIP6dBBmDXrNT7+2BkuCs3TPIOTrjk4pXNhYSFbtmxJzB/H8JyEhnpEpA/wbeAO4MeJvJeRPIYMyexWfioIBAIsX768mT04pfJVV10V9trvfve7PPzww9TW1jJ48GAuuugiHnjgAa677jr++te/sn79eh599FGWLl1K9+7dASe3/oQJExry5u/bB7NmlVNYeAqvvFLOCSd8i6oqJ5QUiRtvvJGbbrop3qobKSDRLf4HgFuAg03spSKyQkT+ICLdw10oIteKyFIRWVqTjnP7jYymZmcNS75cQs3OxH03o02p3LNnTwYNGsSGDRs4++yz6d27N0888QQ33ngj06dPb3D64dizR3nzzWe5/fZZvP/+6+zZs7theKiReSTM8YvIBKBaVZtmcfodMBAoBDYAYVeTUNXHVLVIVYvy02H8n5E1lH9cTv8H+jPuyXH0f6A/5Svjz8tcV1fXEDKpT7MQbUrltWvXsnv3bkaMGAHAAw88wM9//nNqampCVvcKx9Kl7/K1rw2gT5+BjBp1Ou++++dWh4fef//9DWU+44wzoquwkVIS2eI/GZgoIpXAU8CZIjJHVTeq6gFVPQg8DmTomBAjE6nZWUPJSyXU7a9j656t1O2vo+TFkrhb/vWhnuXLl/P8888DbU+pPH/+fI499liOOuoopk6dSl5eHgBf+9rXOPPMM/nBD37Q6v2feaac4uJLaNcOzj77El5/vbzV4aHBq3ctWrQo+kobKSNhMX5V/SnwUwAROR24SVUvE5HeqrrBPe18YGWiymAYXlO5pZIOOR2o29+YayE3J5fKLZXkd/LuyTSalMr1Mf733nuPb3/725xzzjkcccQRgJNJs127ltt3Bw4c4LnnniM39yV+85s7OHhQ+eqrWjp02A4c6lmdDP+QiglcM0XkYxFZAZwB3JiCMhhGTBR0K2DvgdDA974D+yjoVuDpfaJNqQzOcoiXX355q6tyNWXhwoWMHDmSf/3rX1RWVrJ2bRUXXnghL7zwQpy1MPxKUhy/qr6lqhPc15er6nBVHaGqE4Na/4bhe/I75VM2qYxA+wBdDulCoH2Askllnrb2IbaUygA/+clP+N///V+2b9/e5nuVl5c3u9eFF17IvHnzANi1axd9+vRp2O677z4gNMYfPATV8D+WltnIeiKlZW6Jmp01VG6ppKBbgedO3zBiIZq0zJaywTBiIL9Tvjl8I22xJG2GYRhZhjl+wzCMLMMcv2EYRpZhjt8wDCPLMMdvJI2aGliyxNknipdfhmuucfZesGWLs1ykV4knvdbzOo2y3/UMbzDHbySF8nJnhahx45x9G3KORc3w4XDeec5C7uedB27KmphZtQo+/xw2bXL2q1YlTk9EQvLp7N+/n/z8/JD0y6XuYgg//OEP+dWvfkVtLXz8Mdxyyx1MmXI9tbVO1s36dMuFhYWcdNJJDdfn5+dz3HHHcfTRR/Otb32Lv/3tbyHlq9f78Y+nc/PN9zSkZQYoKChg06ZNQPMU0nfeeScAp59+OvXDrgsKChg6dDhDh47gtNO+yeuvV7WY5nnr1q1cccUVDBw4kIEDB3LFFVeEpKJetWoVZ555JscccwxHH300v/rVr6gfij5r1ixEhDfffLPh/Oeffx4R4dlnnw25z6xZsyguLg6xbdq0ifz8fPbs2QPApEmTOPHEE0POCU5DPXTo0JCkeVdddVXDfU4//XQGDx7c8Le56KKLuOOOOxqOg/92Dz74INOnT+eee+5p0An32W3cuJEJEyYwcuRIhg4dyrnnxr+EiQ3nNBJOTQ2UlEBdnbOBczx2rHfr7778Mqxskvzj448du+s7o2LLlsay1lNX59i7dfNer1OnTqxcuZK6ujoCgQBvvPEGRx55ZFitGTNmUFhYyMiRU1AVXnjh98yZ8yFVVXDwINx9990N6ZaDqU/tALBo0SIuuOACFi1axJAhQ9i3j4brVZ2tPi1z03w9kVJIN+WhhxbRtWsvHn30dh5/fAa9ez8eMc1zSUkJw4YN44knngDg9ttv55prruGZZ56hrq6OiRMn8rvf/Y7x48eza9cuLrzwQh555JGGFBbDhw+nvLycs846C3AmwI0cObLZfS644AJuuukmdu3aRceOHQF49tlnmThxIocccghbtmzhgw8+oHPnzvzzn/9kwIABDdfWp6H+7LPPGDVqFBdddBG5YZIZzZ07l6Ki0KHzP//5zwHnRy/4bzd9+vSQ88J9dtOmTWPcuHFMnToVcNJ5xIu1+I2EU1nZPMtjbq5j94pI2QVizToQKRTTaK8Blrh7L/TgnHPO4U9/+hPQmJkzHF26dOG22+5g5sxSZs68nu9975ccemg3RBzH3RbOOOMMrr32Wh577DHASb8sEnpOPGmZVRv1hg8/kZqaLyPqff755yxbtozbbrutwTZt2jSWLl3KF198wbx58zj55JMZP348AB07duThhx9ueNIAOPXUU1m8eDH79u1jx44dfP755xQWFja7V5cuXTjttNNYsGBBg+2pp55q+Fs/99xznHfeeVxyySURZ0kfffTRdOzYkc2bN0f7Z4mJDRs20KdPn4bjEfE+ymKO30gCBQXN/+H37XPsXjF5cnT21ojUqnfs5UB/YJy7bz1u1bKeQ72z2b17NytWrOCEE06IqHfZZcVs27aZnTu3ce65TohI1Vl0/eabb24IF0yZMiWixvHHH88nn3wCOD/MwZP4y8vv55JLCjnpJEdn/fr1De8Fp5AuLCxk/vz5zbRFGvXee+9VvvnNyRHTPK9evbohDFJPfUhk1apVrFq1ilGjRoVcM3DgQHbs2MG2bdvc+wljx47ltdde48UXX2TixIkR611cXNzg1NevX8+aNWsa0krX/+AWFxdHXAPhgw8+4Oijj+awww4L+/6UKVMa/jY333xzxHKEI9xnd/3111NSUsIZZ5zBHXfcEfJZxIqFeoyEk5/vxN1LSpyW/r59zrGXyyxMmODE+INWG2T48NjCPOA45EAgNDwTCEC3bjVACVDnbrjHY4HIFYqs13g8YsQIKisrKS8vbzWOu3HjOrZu/TcHDgh79uwgEOhM//6O448U6mlKcLqW3Fyn76WqynHal156I7fddhM9ezrvFwT9Src11HPDDWfw739vpEePw7j++hkR0zyrKtL0cSPIHul9IMR+ySWX8OCDD7J161buvfdefv3rX4e9ZsKECVx33XVs27aNp59+mosuuoicnBw2btzI559/zimnnIKI0L59e1auXMmwYcMAJzfR448/zj/+8Q9effXViPUOF+ppK+E+u29961sN93zllVc47rjjWLlyJfGsU2ItfiMpFBc7TmXhQmcfIYoRFytWwIIFzg/MggXOcTwceywMGuQsjj5okHMMlUDTZmuua49FL5SJEydy0003RQzz1DN16lR++cvpFBdfzDPP/BfDh9PgpNvKhx9+GJLbpWdPGnR6945eryl//esiKiurGDnyWJ59dlpEvWOPPZYPP/yQg0FxqoMHD/LRRx8xZMgQjj32WJrm6vrH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", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "ax=None\n", + "colors = ['red','blue','green','yellow']\n", + "for i,var in enumerate(new_pumpkins['Variety'].unique()):\n", + " ax = new_pumpkins[new_pumpkins['Variety']==var].plot.scatter('DayOfYear','Price',ax=ax,c=colors[i],label=var)" + ] + }, + { + "cell_type": "code", + "execution_count": 173, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 173, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "new_pumpkins.groupby('Variety')['Price'].mean().plot(kind='bar')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [] + }, + { + "cell_type": "code", + "execution_count": 174, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "-0.2669192282197318\n" + ] + }, + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 174, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "pie_pumpkins = new_pumpkins[new_pumpkins['Variety']=='PIE TYPE']\n", + "print(pie_pumpkins['DayOfYear'].corr(pie_pumpkins['Price']))\n", + "pie_pumpkins.plot.scatter('DayOfYear','Price')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Regressão Linear\n", + "\n", + "Usaremos o Scikit Learn para treinar um modelo de regressão linear:\n" + ] + }, + { + "cell_type": "code", + "execution_count": 175, + "metadata": {}, + "outputs": [], + "source": [ + "from sklearn.linear_model import LinearRegression\n", + "from sklearn.metrics import r2_score, mean_squared_error, mean_absolute_error\n", + "from sklearn.model_selection import train_test_split" + ] + }, + { + "cell_type": "code", + "execution_count": 176, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Mean error: 2.77 (17.2%)\n" + ] + } + ], + "source": [ + "X = pie_pumpkins['DayOfYear'].to_numpy().reshape(-1,1)\n", + "y = pie_pumpkins['Price']\n", + "\n", + "X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0)\n", + "lin_reg = LinearRegression()\n", + "lin_reg.fit(X_train,y_train)\n", + "\n", + "pred = lin_reg.predict(X_test)\n", + "\n", + "mse = np.sqrt(mean_squared_error(y_test,pred))\n", + "print(f'Mean error: {mse:3.3} ({mse/np.mean(pred)*100:3.3}%)')\n" + ] + }, + { + "cell_type": "code", + "execution_count": 177, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[]" + ] + }, + "execution_count": 177, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "plt.scatter(X_test,y_test)\n", + "plt.plot(X_test,pred)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "A inclinação da linha pode ser determinada a partir dos coeficientes de regressão linear:\n" + ] + }, + { + "cell_type": "code", + "execution_count": 178, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "(array([-0.01751876]), 21.133734359909326)" + ] + }, + "execution_count": 178, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "lin_reg.coef_, lin_reg.intercept_" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [] + }, + { + "cell_type": "code", + "execution_count": 179, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([16.64893156])" + ] + }, + "execution_count": 179, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Pumpkin price on programmer's day\n", + "\n", + "lin_reg.predict([[256]])" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Regressão Polinomial\n", + "\n", + "Às vezes, a relação entre as características e os resultados é inerentemente não linear. Por exemplo, os preços de abóboras podem ser altos no inverno (meses=1,2), depois caírem no verão (meses=5-7) e subirem novamente. A regressão linear não consegue capturar essa relação com precisão.\n", + "\n", + "Nesse caso, podemos considerar adicionar características extras. Uma maneira simples é usar polinômios das características de entrada, o que resultaria em **regressão polinomial**. No Scikit Learn, podemos pré-computar automaticamente características polinomiais usando pipelines:\n" + ] + }, + { + "cell_type": "code", + "execution_count": 180, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Mean error: 2.73 (17.0%)\n", + "Model determination: 0.07639977655280217\n" + ] + }, + { + "data": { + "text/plain": [ + "[]" + ] + }, + "execution_count": 180, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "from sklearn.preprocessing import PolynomialFeatures\n", + "from sklearn.pipeline import make_pipeline\n", + "\n", + "pipeline = make_pipeline(PolynomialFeatures(2), LinearRegression())\n", + "\n", + "pipeline.fit(X_train,y_train)\n", + "\n", + "pred = pipeline.predict(X_test)\n", + "\n", + "mse = np.sqrt(mean_squared_error(y_test,pred))\n", + "print(f'Mean error: {mse:3.3} ({mse/np.mean(pred)*100:3.3}%)')\n", + "\n", + "score = pipeline.score(X_train,y_train)\n", + "print('Model determination: ', score)\n", + "\n", + "plt.scatter(X_test,y_test)\n", + "plt.plot(sorted(X_test),pipeline.predict(sorted(X_test)))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Codificando variedades\n", + "\n", + "No mundo ideal, queremos ser capazes de prever os preços de diferentes variedades de abóbora usando o mesmo modelo. Para levar a variedade em consideração, primeiro precisamos convertê-la para uma forma numérica, ou seja, **codificar**. Existem várias maneiras de fazer isso:\n", + "\n", + "* Codificação numérica simples, que cria uma tabela com as diferentes variedades e, em seguida, substitui o nome da variedade por um índice nessa tabela. Essa não é a melhor ideia para regressão linear, porque a regressão linear considera o valor numérico do índice, e esse valor numérico provavelmente não terá uma correlação direta com o preço.\n", + "* Codificação one-hot, que substitui a coluna `Variety` por 4 colunas diferentes, uma para cada variedade, que conterão 1 se a linha correspondente for da variedade em questão, e 0 caso contrário.\n", + "\n", + "O código abaixo mostra como podemos realizar a codificação one-hot de uma variedade:\n" + ] + }, + { + "cell_type": "code", + "execution_count": 181, + "metadata": {}, + "outputs": [ + { + "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", + "
FAIRYTALEMINIATUREMIXED HEIRLOOM VARIETIESPIE TYPE
700001
710001
720001
730001
740001
...............
17380100
17390100
17400100
17410100
17420100
\n", + "

415 rows × 4 columns

\n", + "
" + ], + "text/plain": [ + " FAIRYTALE MINIATURE MIXED HEIRLOOM VARIETIES PIE TYPE\n", + "70 0 0 0 1\n", + "71 0 0 0 1\n", + "72 0 0 0 1\n", + "73 0 0 0 1\n", + "74 0 0 0 1\n", + "... ... ... ... ...\n", + "1738 0 1 0 0\n", + "1739 0 1 0 0\n", + "1740 0 1 0 0\n", + "1741 0 1 0 0\n", + "1742 0 1 0 0\n", + "\n", + "[415 rows x 4 columns]" + ] + }, + "execution_count": 181, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "pd.get_dummies(new_pumpkins['Variety'])" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Regressão Linear em Variedade\n", + "\n", + "Agora usaremos o mesmo código mencionado acima, mas, em vez de `DayOfYear`, utilizaremos nossa variedade codificada em one-hot como entrada:\n" + ] + }, + { + "cell_type": "code", + "execution_count": 182, + "metadata": {}, + "outputs": [], + "source": [ + "X = pd.get_dummies(new_pumpkins['Variety'])\n", + "y = new_pumpkins['Price']" + ] + }, + { + "cell_type": "code", + "execution_count": 183, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Mean error: 5.24 (19.7%)\n", + "Model determination: 0.774085281105197\n" + ] + } + ], + "source": [ + "def run_linear_regression(X,y):\n", + " X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0)\n", + " lin_reg = LinearRegression()\n", + " lin_reg.fit(X_train,y_train)\n", + "\n", + " pred = lin_reg.predict(X_test)\n", + "\n", + " mse = np.sqrt(mean_squared_error(y_test,pred))\n", + " print(f'Mean error: {mse:3.3} ({mse/np.mean(pred)*100:3.3}%)')\n", + "\n", + " score = lin_reg.score(X_train,y_train)\n", + " print('Model determination: ', score)\n", + "\n", + "run_linear_regression(X,y)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Podemos também tentar usar outras características da mesma maneira e combiná-las com características numéricas, como `Month` ou `DayOfYear`:\n" + ] + }, + { + "cell_type": "code", + "execution_count": 184, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Mean error: 2.84 (10.5%)\n", + "Model determination: 0.9401096672643048\n" + ] + } + ], + "source": [ + "X = pd.get_dummies(new_pumpkins['Variety']) \\\n", + " .join(new_pumpkins['Month']) \\\n", + " .join(pd.get_dummies(new_pumpkins['City'])) \\\n", + " .join(pd.get_dummies(new_pumpkins['Package']))\n", + "y = new_pumpkins['Price']\n", + "\n", + "run_linear_regression(X,y)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Regressão Polinomial\n", + "\n", + "A regressão polinomial também pode ser usada com características categóricas que foram codificadas em one-hot. O código para treinar a regressão polinomial seria essencialmente o mesmo que vimos acima.\n" + ] + }, + { + "cell_type": "code", + "execution_count": 185, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Mean error: 2.23 (8.25%)\n", + "Model determination: 0.9652870784724543\n" + ] + } + ], + "source": [ + "from sklearn.preprocessing import PolynomialFeatures\n", + "from sklearn.pipeline import make_pipeline\n", + "\n", + "pipeline = make_pipeline(PolynomialFeatures(2), LinearRegression())\n", + "\n", + "X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0)\n", + "\n", + "pipeline.fit(X_train,y_train)\n", + "\n", + "pred = pipeline.predict(X_test)\n", + "\n", + "mse = np.sqrt(mean_squared_error(y_test,pred))\n", + "print(f'Mean error: {mse:3.3} ({mse/np.mean(pred)*100:3.3}%)')\n", + "\n", + "score = pipeline.score(X_train,y_train)\n", + "print('Model determination: ', score)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n---\n\n**Aviso Legal**: \nEste documento foi traduzido utilizando o serviço de tradução por IA [Co-op Translator](https://github.com/Azure/co-op-translator). Embora nos esforcemos para garantir a precisão, esteja ciente de que traduções automáticas podem conter erros ou imprecisões. O documento original em seu idioma nativo deve ser considerado a fonte oficial. Para informações críticas, recomenda-se a tradução profissional realizada por humanos. Não nos responsabilizamos por quaisquer mal-entendidos ou interpretações incorretas decorrentes do uso desta tradução.\n" + ] + } + ], + "metadata": { + "interpreter": { + "hash": "86193a1ab0ba47eac1c69c1756090baa3b420b3eea7d4aafab8b85f8b312f0c5" + }, + "kernelspec": { + "display_name": "Python 3.7.0 64-bit ('3.7')", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.9.5" + }, + "metadata": { + "interpreter": { + "hash": "70b38d7a306a849643e446cd70466270a13445e5987dfa1344ef2b127438fa4d" + } + }, + "orig_nbformat": 2, + "coopTranslator": { + "original_hash": "d77bd89ae7e79780c68c58bab91f13f8", + "translation_date": "2025-08-29T22:47:23+00:00", + "source_file": "2-Regression/3-Linear/solution/notebook.ipynb", + "language_code": "br" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} \ No newline at end of file diff --git a/translations/pt-BR/2-Regression/4-Logistic/README.md b/translations/pt-BR/2-Regression/4-Logistic/README.md new file mode 100644 index 000000000..2f7e4817a --- /dev/null +++ b/translations/pt-BR/2-Regression/4-Logistic/README.md @@ -0,0 +1,405 @@ +# Regressão logística para prever categorias + +![Infográfico de regressão logística vs. regressão linear](../../../../2-Regression/4-Logistic/images/linear-vs-logistic.png) + +## [Quiz pré-aula](https://ff-quizzes.netlify.app/en/ml/) + +> ### [Esta aula está disponível em R!](../../../../2-Regression/4-Logistic/solution/R/lesson_4.html) + +## Introdução + +Nesta última aula sobre Regressão, uma das técnicas básicas _clássicas_ de ML, vamos explorar a Regressão Logística. Você usaria essa técnica para descobrir padrões e prever categorias binárias. Este doce é chocolate ou não? Esta doença é contagiosa ou não? Este cliente escolherá este produto ou não? + +Nesta aula, você aprenderá: + +- Uma nova biblioteca para visualização de dados +- Técnicas de regressão logística + +✅ Aprofunde seu entendimento sobre como trabalhar com este tipo de regressão neste [módulo de aprendizado](https://docs.microsoft.com/learn/modules/train-evaluate-classification-models?WT.mc_id=academic-77952-leestott) + +## Pré-requisito + +Depois de trabalhar com os dados de abóbora, já estamos suficientemente familiarizados para perceber que há uma categoria binária com a qual podemos trabalhar: `Color`. + +Vamos construir um modelo de regressão logística para prever, com base em algumas variáveis, _qual é a cor provável de uma determinada abóbora_ (laranja 🎃 ou branca 👻). + +> Por que estamos falando de classificação binária em uma aula sobre regressão? Apenas por conveniência linguística, já que a regressão logística é [na verdade um método de classificação](https://scikit-learn.org/stable/modules/linear_model.html#logistic-regression), embora baseado em linearidade. Aprenda sobre outras formas de classificar dados no próximo grupo de aulas. + +## Definir a pergunta + +Para nossos propósitos, vamos expressar isso como um binário: 'Branca' ou 'Não Branca'. Há também uma categoria 'listrada' em nosso conjunto de dados, mas há poucas instâncias dela, então não a utilizaremos. Ela desaparece quando removemos valores nulos do conjunto de dados, de qualquer forma. + +> 🎃 Curiosidade: às vezes chamamos abóboras brancas de abóboras 'fantasma'. Elas não são muito fáceis de esculpir, então não são tão populares quanto as laranjas, mas têm uma aparência interessante! Assim, poderíamos reformular nossa pergunta como: 'Fantasma' ou 'Não Fantasma'. 👻 + +## Sobre regressão logística + +A regressão logística difere da regressão linear, que você aprendeu anteriormente, em alguns aspectos importantes. + +[![ML para iniciantes - Entendendo a Regressão Logística para Classificação de Machine Learning](https://img.youtube.com/vi/KpeCT6nEpBY/0.jpg)](https://youtu.be/KpeCT6nEpBY "ML para iniciantes - Entendendo a Regressão Logística para Classificação de Machine Learning") + +> 🎥 Clique na imagem acima para um breve vídeo sobre regressão logística. + +### Classificação binária + +A regressão logística não oferece os mesmos recursos que a regressão linear. A primeira oferece uma previsão sobre uma categoria binária ("branca ou não branca"), enquanto a segunda é capaz de prever valores contínuos, por exemplo, dado a origem de uma abóbora e o tempo de colheita, _quanto seu preço aumentará_. + +![Modelo de classificação de abóbora](../../../../2-Regression/4-Logistic/images/pumpkin-classifier.png) +> Infográfico por [Dasani Madipalli](https://twitter.com/dasani_decoded) + +### Outras classificações + +Existem outros tipos de regressão logística, incluindo multinomial e ordinal: + +- **Multinomial**, que envolve mais de uma categoria - "Laranja, Branca e Listrada". +- **Ordinal**, que envolve categorias ordenadas, útil se quisermos ordenar nossos resultados logicamente, como nossas abóboras que são ordenadas por um número finito de tamanhos (mini, pequeno, médio, grande, extra grande, extra extra grande). + +![Regressão multinomial vs ordinal](../../../../2-Regression/4-Logistic/images/multinomial-vs-ordinal.png) + +### As variáveis NÃO precisam ser correlacionadas + +Lembra como a regressão linear funcionava melhor com variáveis mais correlacionadas? A regressão logística é o oposto - as variáveis não precisam estar alinhadas. Isso funciona para este conjunto de dados, que tem correlações relativamente fracas. + +### Você precisa de muitos dados limpos + +A regressão logística fornecerá resultados mais precisos se você usar mais dados; nosso pequeno conjunto de dados não é ideal para esta tarefa, então tenha isso em mente. + +[![ML para iniciantes - Análise e Preparação de Dados para Regressão Logística](https://img.youtube.com/vi/B2X4H9vcXTs/0.jpg)](https://youtu.be/B2X4H9vcXTs "ML para iniciantes - Análise e Preparação de Dados para Regressão Logística") + +> 🎥 Clique na imagem acima para um breve vídeo sobre preparação de dados para regressão linear. + +✅ Pense nos tipos de dados que se adaptariam bem à regressão logística. + +## Exercício - organizar os dados + +Primeiro, limpe os dados, removendo valores nulos e selecionando apenas algumas colunas: + +1. Adicione o seguinte código: + + ```python + + columns_to_select = ['City Name','Package','Variety', 'Origin','Item Size', 'Color'] + pumpkins = full_pumpkins.loc[:, columns_to_select] + + pumpkins.dropna(inplace=True) + ``` + + Você sempre pode dar uma olhada no seu novo dataframe: + + ```python + pumpkins.info + ``` + +### Visualização - gráfico categórico + +Agora você carregou o [notebook inicial](../../../../2-Regression/4-Logistic/notebook.ipynb) com os dados de abóbora novamente e os limpou para preservar um conjunto de dados contendo algumas variáveis, incluindo `Color`. Vamos visualizar o dataframe no notebook usando uma biblioteca diferente: [Seaborn](https://seaborn.pydata.org/index.html), que é construída sobre o Matplotlib que usamos anteriormente. + +Seaborn oferece algumas maneiras interessantes de visualizar seus dados. Por exemplo, você pode comparar distribuições dos dados para cada `Variety` e `Color` em um gráfico categórico. + +1. Crie tal gráfico usando a função `catplot`, com os dados de abóbora `pumpkins`, e especificando um mapeamento de cores para cada categoria de abóbora (laranja ou branca): + + ```python + import seaborn as sns + + palette = { + 'ORANGE': 'orange', + 'WHITE': 'wheat', + } + + sns.catplot( + data=pumpkins, y="Variety", hue="Color", kind="count", + palette=palette, + ) + ``` + + ![Uma grade de dados visualizados](../../../../2-Regression/4-Logistic/images/pumpkins_catplot_1.png) + + Observando os dados, você pode ver como os dados de `Color` se relacionam com `Variety`. + + ✅ Dado este gráfico categórico, quais são algumas explorações interessantes que você pode imaginar? + +### Pré-processamento de dados: codificação de características e rótulos + +Nosso conjunto de dados de abóboras contém valores de string para todas as suas colunas. Trabalhar com dados categóricos é intuitivo para humanos, mas não para máquinas. Algoritmos de aprendizado de máquina funcionam bem com números. É por isso que a codificação é uma etapa muito importante na fase de pré-processamento de dados, pois nos permite transformar dados categóricos em dados numéricos, sem perder nenhuma informação. Uma boa codificação leva à construção de um bom modelo. + +Para codificação de características, existem dois tipos principais de codificadores: + +1. Codificador ordinal: é adequado para variáveis ordinais, que são variáveis categóricas cujos dados seguem uma ordem lógica, como a coluna `Item Size` em nosso conjunto de dados. Ele cria um mapeamento de forma que cada categoria seja representada por um número, que é a ordem da categoria na coluna. + + ```python + from sklearn.preprocessing import OrdinalEncoder + + item_size_categories = [['sml', 'med', 'med-lge', 'lge', 'xlge', 'jbo', 'exjbo']] + ordinal_features = ['Item Size'] + ordinal_encoder = OrdinalEncoder(categories=item_size_categories) + ``` + +2. Codificador categórico: é adequado para variáveis nominais, que são variáveis categóricas cujos dados não seguem uma ordem lógica, como todas as características diferentes de `Item Size` em nosso conjunto de dados. É uma codificação one-hot, o que significa que cada categoria é representada por uma coluna binária: a variável codificada é igual a 1 se a abóbora pertence àquela `Variety` e 0 caso contrário. + + ```python + from sklearn.preprocessing import OneHotEncoder + + categorical_features = ['City Name', 'Package', 'Variety', 'Origin'] + categorical_encoder = OneHotEncoder(sparse_output=False) + ``` + +Então, `ColumnTransformer` é usado para combinar múltiplos codificadores em uma única etapa e aplicá-los às colunas apropriadas. + +```python + from sklearn.compose import ColumnTransformer + + ct = ColumnTransformer(transformers=[ + ('ord', ordinal_encoder, ordinal_features), + ('cat', categorical_encoder, categorical_features) + ]) + + ct.set_output(transform='pandas') + encoded_features = ct.fit_transform(pumpkins) +``` + +Por outro lado, para codificar o rótulo, usamos a classe `LabelEncoder` do scikit-learn, que é uma classe utilitária para ajudar a normalizar rótulos de forma que contenham apenas valores entre 0 e n_classes-1 (aqui, 0 e 1). + +```python + from sklearn.preprocessing import LabelEncoder + + label_encoder = LabelEncoder() + encoded_label = label_encoder.fit_transform(pumpkins['Color']) +``` + +Depois de codificar as características e o rótulo, podemos mesclá-los em um novo dataframe `encoded_pumpkins`. + +```python + encoded_pumpkins = encoded_features.assign(Color=encoded_label) +``` + +✅ Quais são as vantagens de usar um codificador ordinal para a coluna `Item Size`? + +### Analisar relações entre variáveis + +Agora que pré-processamos nossos dados, podemos analisar as relações entre as características e o rótulo para ter uma ideia de quão bem o modelo será capaz de prever o rótulo com base nas características. + +A melhor maneira de realizar esse tipo de análise é plotando os dados. Usaremos novamente a função `catplot` do Seaborn para visualizar as relações entre `Item Size`, `Variety` e `Color` em um gráfico categórico. Para melhor plotar os dados, usaremos a coluna codificada `Item Size` e a coluna não codificada `Variety`. + +```python + palette = { + 'ORANGE': 'orange', + 'WHITE': 'wheat', + } + pumpkins['Item Size'] = encoded_pumpkins['ord__Item Size'] + + g = sns.catplot( + data=pumpkins, + x="Item Size", y="Color", row='Variety', + kind="box", orient="h", + sharex=False, margin_titles=True, + height=1.8, aspect=4, palette=palette, + ) + g.set(xlabel="Item Size", ylabel="").set(xlim=(0,6)) + g.set_titles(row_template="{row_name}") +``` + +![Um gráfico categórico de dados visualizados](../../../../2-Regression/4-Logistic/images/pumpkins_catplot_2.png) + +### Usar um gráfico de dispersão + +Como `Color` é uma categoria binária (Branca ou Não), ela precisa de '[uma abordagem especializada](https://seaborn.pydata.org/tutorial/categorical.html?highlight=bar) para visualização'. Existem outras maneiras de visualizar a relação dessa categoria com outras variáveis. + +Você pode visualizar variáveis lado a lado com gráficos do Seaborn. + +1. Experimente um gráfico de dispersão ('swarm plot') para mostrar a distribuição de valores: + + ```python + palette = { + 0: 'orange', + 1: 'wheat' + } + sns.swarmplot(x="Color", y="ord__Item Size", data=encoded_pumpkins, palette=palette) + ``` + + ![Um gráfico de dispersão de dados visualizados](../../../../2-Regression/4-Logistic/images/swarm_2.png) + +**Atenção**: o código acima pode gerar um aviso, já que o Seaborn pode falhar ao representar uma quantidade tão grande de pontos de dados em um gráfico de dispersão. Uma solução possível é diminuir o tamanho do marcador, usando o parâmetro 'size'. No entanto, esteja ciente de que isso afeta a legibilidade do gráfico. + +> **🧮 Mostre-me a Matemática** +> +> A regressão logística se baseia no conceito de 'máxima verossimilhança' usando [funções sigmoides](https://wikipedia.org/wiki/Sigmoid_function). Uma 'Função Sigmoide' em um gráfico tem a forma de um 'S'. Ela pega um valor e o mapeia para algo entre 0 e 1. Sua curva também é chamada de 'curva logística'. Sua fórmula é assim: +> +> ![função logística](../../../../2-Regression/4-Logistic/images/sigmoid.png) +> +> onde o ponto médio da sigmoide encontra-se no ponto 0 de x, L é o valor máximo da curva, e k é a inclinação da curva. Se o resultado da função for maior que 0.5, o rótulo em questão será atribuído à classe '1' da escolha binária. Caso contrário, será classificado como '0'. + +## Construir seu modelo + +Construir um modelo para encontrar essas classificações binárias é surpreendentemente simples no Scikit-learn. + +[![ML para iniciantes - Regressão Logística para classificação de dados](https://img.youtube.com/vi/MmZS2otPrQ8/0.jpg)](https://youtu.be/MmZS2otPrQ8 "ML para iniciantes - Regressão Logística para classificação de dados") + +> 🎥 Clique na imagem acima para um breve vídeo sobre construção de um modelo de regressão linear. + +1. Selecione as variáveis que deseja usar em seu modelo de classificação e divida os conjuntos de treinamento e teste chamando `train_test_split()`: + + ```python + from sklearn.model_selection import train_test_split + + X = encoded_pumpkins[encoded_pumpkins.columns.difference(['Color'])] + y = encoded_pumpkins['Color'] + + X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0) + + ``` + +2. Agora você pode treinar seu modelo, chamando `fit()` com seus dados de treinamento, e imprimir o resultado: + + ```python + from sklearn.metrics import f1_score, classification_report + from sklearn.linear_model import LogisticRegression + + model = LogisticRegression() + model.fit(X_train, y_train) + predictions = model.predict(X_test) + + print(classification_report(y_test, predictions)) + print('Predicted labels: ', predictions) + print('F1-score: ', f1_score(y_test, predictions)) + ``` + + Veja o desempenho do seu modelo. Não está ruim, considerando que você tem apenas cerca de 1000 linhas de dados: + + ```output + precision recall f1-score support + + 0 0.94 0.98 0.96 166 + 1 0.85 0.67 0.75 33 + + accuracy 0.92 199 + macro avg 0.89 0.82 0.85 199 + weighted avg 0.92 0.92 0.92 199 + + Predicted labels: [0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 0 + 0 0 0 0 0 1 0 1 0 0 1 0 0 0 0 0 1 0 1 0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 0 1 0 0 0 0 0 0 0 1 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 1 1 0 + 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 + 0 0 0 1 0 0 0 0 0 0 0 0 1 1] + F1-score: 0.7457627118644068 + ``` + +## Melhor compreensão via uma matriz de confusão + +Embora você possa obter um relatório de desempenho [termos](https://scikit-learn.org/stable/modules/generated/sklearn.metrics.classification_report.html?highlight=classification_report#sklearn.metrics.classification_report) imprimindo os itens acima, talvez consiga entender seu modelo mais facilmente usando uma [matriz de confusão](https://scikit-learn.org/stable/modules/model_evaluation.html#confusion-matrix) para ajudar a entender como o modelo está se saindo. + +> 🎓 Uma '[matriz de confusão](https://wikipedia.org/wiki/Confusion_matrix)' (ou 'matriz de erro') é uma tabela que expressa os verdadeiros vs. falsos positivos e negativos do seu modelo, avaliando assim a precisão das previsões. + +1. Para usar uma matriz de confusão, chame `confusion_matrix()`: + + ```python + from sklearn.metrics import confusion_matrix + confusion_matrix(y_test, predictions) + ``` + + Veja a matriz de confusão do seu modelo: + + ```output + array([[162, 4], + [ 11, 22]]) + ``` + +No Scikit-learn, as linhas (eixo 0) são os rótulos reais e as colunas (eixo 1) são os rótulos previstos. + +| | 0 | 1 | +| :---: | :---: | :---: | +| 0 | TN | FP | +| 1 | FN | TP | + +O que está acontecendo aqui? Digamos que nosso modelo seja solicitado a classificar abóboras entre duas categorias binárias, categoria 'branca' e categoria 'não branca'. + +- Se seu modelo prevê uma abóbora como não branca e ela pertence à categoria 'não branca' na realidade, chamamos isso de verdadeiro negativo, mostrado pelo número no canto superior esquerdo. +- Se seu modelo prevê uma abóbora como branca e ela pertence à categoria 'não branca' na realidade, chamamos isso de falso negativo, mostrado pelo número no canto inferior esquerdo. +- Se seu modelo prevê uma abóbora como não branca e ela pertence à categoria 'branca' na realidade, chamamos isso de falso positivo, mostrado pelo número no canto superior direito. +- Se seu modelo prevê uma abóbora como branca e ela pertence à categoria 'branca' na realidade, chamamos isso de verdadeiro positivo, mostrado pelo número no canto inferior direito. + +Como você deve ter imaginado, é preferível ter um número maior de verdadeiros positivos e verdadeiros negativos e um número menor de falsos positivos e falsos negativos, o que implica que o modelo está se saindo melhor. +Como a matriz de confusão se relaciona com precisão e recall? Lembre-se, o relatório de classificação mostrado acima indicou precisão (0,85) e recall (0,67). + +Precisão = tp / (tp + fp) = 22 / (22 + 4) = 0,8461538461538461 + +Recall = tp / (tp + fn) = 22 / (22 + 11) = 0,6666666666666666 + +✅ P: De acordo com a matriz de confusão, como o modelo se saiu? R: Não foi ruim; há um bom número de verdadeiros negativos, mas também alguns falsos negativos. + +Vamos revisitar os termos que vimos anteriormente com a ajuda do mapeamento de TP/TN e FP/FN na matriz de confusão: + +🎓 Precisão: TP/(TP + FP) A fração de instâncias relevantes entre as instâncias recuperadas (ex.: quais rótulos foram bem rotulados) + +🎓 Recall: TP/(TP + FN) A fração de instâncias relevantes que foram recuperadas, independentemente de estarem bem rotuladas ou não + +🎓 f1-score: (2 * precisão * recall)/(precisão + recall) Uma média ponderada entre precisão e recall, sendo o melhor 1 e o pior 0 + +🎓 Suporte: O número de ocorrências de cada rótulo recuperado + +🎓 Precisão geral: (TP + TN)/(TP + TN + FP + FN) A porcentagem de rótulos previstos corretamente para uma amostra. + +🎓 Média Macro: O cálculo das métricas médias não ponderadas para cada rótulo, sem levar em conta o desequilíbrio entre os rótulos. + +🎓 Média Ponderada: O cálculo das métricas médias para cada rótulo, levando em conta o desequilíbrio entre os rótulos ao ponderá-los pelo suporte (o número de instâncias verdadeiras para cada rótulo). + +✅ Você consegue pensar em qual métrica deve observar se quiser que seu modelo reduza o número de falsos negativos? + +## Visualizar a curva ROC deste modelo + +[![ML para iniciantes - Analisando o desempenho da regressão logística com curvas ROC](https://img.youtube.com/vi/GApO575jTA0/0.jpg)](https://youtu.be/GApO575jTA0 "ML para iniciantes - Analisando o desempenho da regressão logística com curvas ROC") + +> 🎥 Clique na imagem acima para um breve vídeo sobre curvas ROC + +Vamos fazer mais uma visualização para ver a chamada curva 'ROC': + +```python +from sklearn.metrics import roc_curve, roc_auc_score +import matplotlib +import matplotlib.pyplot as plt +%matplotlib inline + +y_scores = model.predict_proba(X_test) +fpr, tpr, thresholds = roc_curve(y_test, y_scores[:,1]) + +fig = plt.figure(figsize=(6, 6)) +plt.plot([0, 1], [0, 1], 'k--') +plt.plot(fpr, tpr) +plt.xlabel('False Positive Rate') +plt.ylabel('True Positive Rate') +plt.title('ROC Curve') +plt.show() +``` + +Usando Matplotlib, plote a [Curva Característica de Operação do Receptor](https://scikit-learn.org/stable/auto_examples/model_selection/plot_roc.html?highlight=roc) ou ROC do modelo. As curvas ROC são frequentemente usadas para visualizar o desempenho de um classificador em termos de seus verdadeiros positivos versus falsos positivos. "As curvas ROC geralmente apresentam a taxa de verdadeiros positivos no eixo Y e a taxa de falsos positivos no eixo X." Assim, a inclinação da curva e o espaço entre a linha do ponto médio e a curva são importantes: você quer uma curva que rapidamente suba e ultrapasse a linha. No nosso caso, há falsos positivos no início, e então a linha sobe e ultrapassa adequadamente: + +![ROC](../../../../2-Regression/4-Logistic/images/ROC_2.png) + +Por fim, use a API [`roc_auc_score`](https://scikit-learn.org/stable/modules/generated/sklearn.metrics.roc_auc_score.html?highlight=roc_auc#sklearn.metrics.roc_auc_score) do Scikit-learn para calcular a 'Área Sob a Curva' (AUC): + +```python +auc = roc_auc_score(y_test,y_scores[:,1]) +print(auc) +``` +O resultado é `0.9749908725812341`. Dado que o AUC varia de 0 a 1, você quer um valor alto, já que um modelo que é 100% correto em suas previsões terá um AUC de 1; neste caso, o modelo está _muito bom_. + +Em futuras lições sobre classificações, você aprenderá como iterar para melhorar os resultados do seu modelo. Mas, por enquanto, parabéns! Você concluiu estas lições sobre regressão! + +--- +## 🚀Desafio + +Há muito mais para explorar sobre regressão logística! Mas a melhor maneira de aprender é experimentando. Encontre um conjunto de dados que se preste a este tipo de análise e construa um modelo com ele. O que você aprende? dica: experimente [Kaggle](https://www.kaggle.com/search?q=logistic+regression+datasets) para conjuntos de dados interessantes. + +## [Quiz pós-aula](https://ff-quizzes.netlify.app/en/ml/) + +## Revisão & Autoestudo + +Leia as primeiras páginas [deste artigo de Stanford](https://web.stanford.edu/~jurafsky/slp3/5.pdf) sobre alguns usos práticos da regressão logística. Pense em tarefas que são mais adequadas para um ou outro tipo de regressão entre as que estudamos até agora. O que funcionaria melhor? + +## Tarefa + +[Repetindo esta regressão](assignment.md) + +--- + +**Aviso Legal**: +Este documento foi traduzido utilizando o serviço de tradução por IA [Co-op Translator](https://github.com/Azure/co-op-translator). Embora nos esforcemos para garantir a precisão, esteja ciente de que traduções automatizadas podem conter erros ou imprecisões. O documento original em seu idioma nativo deve ser considerado a fonte autoritativa. Para informações críticas, recomenda-se a tradução profissional realizada por humanos. Não nos responsabilizamos por quaisquer mal-entendidos ou interpretações equivocadas decorrentes do uso desta tradução. \ No newline at end of file diff --git a/translations/pt-BR/2-Regression/4-Logistic/assignment.md b/translations/pt-BR/2-Regression/4-Logistic/assignment.md new file mode 100644 index 000000000..64d6c25f3 --- /dev/null +++ b/translations/pt-BR/2-Regression/4-Logistic/assignment.md @@ -0,0 +1,16 @@ +# Repetindo uma Regressão + +## Instruções + +Na aula, você utilizou um subconjunto dos dados de abóbora. Agora, volte aos dados originais e tente usar todos eles, limpos e padronizados, para construir um modelo de Regressão Logística. + +## Rubrica + +| Critério | Exemplary | Adequado | Precisa de Melhorias | +| --------- | ----------------------------------------------------------------------- | ------------------------------------------------------------ | ----------------------------------------------------------- | +| | Um notebook é apresentado com um modelo bem explicado e de bom desempenho | Um notebook é apresentado com um modelo que apresenta desempenho mínimo | Um notebook é apresentado com um modelo de baixo desempenho ou nenhum | + +--- + +**Aviso Legal**: +Este documento foi traduzido utilizando o serviço de tradução por IA [Co-op Translator](https://github.com/Azure/co-op-translator). Embora nos esforcemos para garantir a precisão, esteja ciente de que traduções automatizadas podem conter erros ou imprecisões. O documento original em seu idioma nativo deve ser considerado a fonte autoritativa. Para informações críticas, recomenda-se a tradução profissional realizada por humanos. Não nos responsabilizamos por quaisquer mal-entendidos ou interpretações equivocadas decorrentes do uso desta tradução. \ No newline at end of file diff --git a/translations/pt-BR/2-Regression/4-Logistic/notebook.ipynb b/translations/pt-BR/2-Regression/4-Logistic/notebook.ipynb new file mode 100644 index 000000000..f29d1084e --- /dev/null +++ b/translations/pt-BR/2-Regression/4-Logistic/notebook.ipynb @@ -0,0 +1,269 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Variedades de Abóbora e Cor\n", + "\n", + "Carregue as bibliotecas necessárias e o conjunto de dados. Converta os dados para um dataframe contendo um subconjunto dos dados:\n", + "\n", + "Vamos observar a relação entre cor e variedade\n" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [ + { + "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", + "
City NameTypePackageVarietySub VarietyGradeDateLow PriceHigh PriceMostly Low...Unit of SaleQualityConditionAppearanceStorageCropRepackTrans ModeUnnamed: 24Unnamed: 25
0BALTIMORENaN24 inch binsNaNNaNNaN4/29/17270.0280.0270.0...NaNNaNNaNNaNNaNNaNENaNNaNNaN
1BALTIMORENaN24 inch binsNaNNaNNaN5/6/17270.0280.0270.0...NaNNaNNaNNaNNaNNaNENaNNaNNaN
2BALTIMORENaN24 inch binsHOWDEN TYPENaNNaN9/24/16160.0160.0160.0...NaNNaNNaNNaNNaNNaNNNaNNaNNaN
3BALTIMORENaN24 inch binsHOWDEN TYPENaNNaN9/24/16160.0160.0160.0...NaNNaNNaNNaNNaNNaNNNaNNaNNaN
4BALTIMORENaN24 inch binsHOWDEN TYPENaNNaN11/5/1690.0100.090.0...NaNNaNNaNNaNNaNNaNNNaNNaNNaN
\n", + "

5 rows × 26 columns

\n", + "
" + ], + "text/plain": [ + " City Name Type Package Variety Sub Variety Grade Date \\\n", + "0 BALTIMORE NaN 24 inch bins NaN NaN NaN 4/29/17 \n", + "1 BALTIMORE NaN 24 inch bins NaN NaN NaN 5/6/17 \n", + "2 BALTIMORE NaN 24 inch bins HOWDEN TYPE NaN NaN 9/24/16 \n", + "3 BALTIMORE NaN 24 inch bins HOWDEN TYPE NaN NaN 9/24/16 \n", + "4 BALTIMORE NaN 24 inch bins HOWDEN TYPE NaN NaN 11/5/16 \n", + "\n", + " Low Price High Price Mostly Low ... Unit of Sale Quality Condition \\\n", + "0 270.0 280.0 270.0 ... NaN NaN NaN \n", + "1 270.0 280.0 270.0 ... NaN NaN NaN \n", + "2 160.0 160.0 160.0 ... NaN NaN NaN \n", + "3 160.0 160.0 160.0 ... NaN NaN NaN \n", + "4 90.0 100.0 90.0 ... NaN NaN NaN \n", + "\n", + " Appearance Storage Crop Repack Trans Mode Unnamed: 24 Unnamed: 25 \n", + "0 NaN NaN NaN E NaN NaN NaN \n", + "1 NaN NaN NaN E NaN NaN NaN \n", + "2 NaN NaN NaN N NaN NaN NaN \n", + "3 NaN NaN NaN N NaN NaN NaN \n", + "4 NaN NaN NaN N NaN NaN NaN \n", + "\n", + "[5 rows x 26 columns]" + ] + }, + "execution_count": 1, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "import pandas as pd\n", + "import numpy as np\n", + "\n", + "full_pumpkins = pd.read_csv('../data/US-pumpkins.csv')\n", + "\n", + "full_pumpkins.head()\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n---\n\n**Aviso Legal**: \nEste documento foi traduzido utilizando o serviço de tradução por IA [Co-op Translator](https://github.com/Azure/co-op-translator). Embora nos esforcemos para garantir a precisão, esteja ciente de que traduções automatizadas podem conter erros ou imprecisões. O documento original em seu idioma nativo deve ser considerado a fonte autoritativa. Para informações críticas, recomenda-se a tradução profissional realizada por humanos. Não nos responsabilizamos por quaisquer mal-entendidos ou interpretações equivocadas decorrentes do uso desta tradução.\n" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.11.1" + }, + "metadata": { + "interpreter": { + "hash": "70b38d7a306a849643e446cd70466270a13445e5987dfa1344ef2b127438fa4d" + } + }, + "orig_nbformat": 2, + "coopTranslator": { + "original_hash": "dee08c2b49057b0de8b6752c4dbca368", + "translation_date": "2025-08-29T22:57:44+00:00", + "source_file": "2-Regression/4-Logistic/notebook.ipynb", + "language_code": "br" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} \ No newline at end of file diff --git a/translations/pt-BR/2-Regression/4-Logistic/solution/Julia/README.md b/translations/pt-BR/2-Regression/4-Logistic/solution/Julia/README.md new file mode 100644 index 000000000..c58234bae --- /dev/null +++ b/translations/pt-BR/2-Regression/4-Logistic/solution/Julia/README.md @@ -0,0 +1,6 @@ + + +--- + +**Aviso Legal**: +Este documento foi traduzido utilizando o serviço de tradução por IA [Co-op Translator](https://github.com/Azure/co-op-translator). Embora nos esforcemos para garantir a precisão, esteja ciente de que traduções automatizadas podem conter erros ou imprecisões. O documento original em seu idioma nativo deve ser considerado a fonte autoritativa. Para informações críticas, recomenda-se a tradução profissional realizada por humanos. Não nos responsabilizamos por quaisquer mal-entendidos ou interpretações equivocadas decorrentes do uso desta tradução. \ No newline at end of file diff --git a/translations/pt-BR/2-Regression/4-Logistic/solution/R/lesson_4-R.ipynb b/translations/pt-BR/2-Regression/4-Logistic/solution/R/lesson_4-R.ipynb new file mode 100644 index 000000000..3604e2c91 --- /dev/null +++ b/translations/pt-BR/2-Regression/4-Logistic/solution/R/lesson_4-R.ipynb @@ -0,0 +1,685 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Construir um modelo de regressão logística - Aula 4\n", + "\n", + "![Infográfico de regressão logística vs. regressão linear](../../../../../../translated_images/pt-BR/linear-vs-logistic.ba180bf95e7ee667.webp)\n", + "\n", + "#### **[Questionário pré-aula](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/15/)**\n", + "\n", + "#### Introdução\n", + "\n", + "Nesta última aula sobre Regressão, uma das técnicas *clássicas* básicas de Machine Learning, vamos explorar a Regressão Logística. Você usaria essa técnica para descobrir padrões e prever categorias binárias. Este doce é de chocolate ou não? Esta doença é contagiosa ou não? Este cliente escolherá este produto ou não?\n", + "\n", + "Nesta aula, você aprenderá:\n", + "\n", + "- Técnicas para regressão logística\n", + "\n", + "✅ Aprofunde seu entendimento sobre como trabalhar com este tipo de regressão neste [módulo do Learn](https://learn.microsoft.com/training/modules/introduction-classification-models/?WT.mc_id=academic-77952-leestott)\n", + "\n", + "## Pré-requisito\n", + "\n", + "Depois de trabalhar com os dados de abóboras, já estamos suficientemente familiarizados com eles para perceber que há uma categoria binária com a qual podemos trabalhar: `Color`.\n", + "\n", + "Vamos construir um modelo de regressão logística para prever, dado algumas variáveis, *qual é a cor provável de uma determinada abóbora* (laranja 🎃 ou branca 👻).\n", + "\n", + "> Por que estamos falando de classificação binária em uma aula sobre regressão? Apenas por conveniência linguística, já que a regressão logística é [na verdade um método de classificação](https://scikit-learn.org/stable/modules/linear_model.html#logistic-regression), embora baseado em um modelo linear. Aprenda sobre outras formas de classificar dados no próximo grupo de aulas.\n", + "\n", + "Para esta aula, precisaremos dos seguintes pacotes:\n", + "\n", + "- `tidyverse`: O [tidyverse](https://www.tidyverse.org/) é uma [coleção de pacotes R](https://www.tidyverse.org/packages) projetada para tornar a ciência de dados mais rápida, fácil e divertida!\n", + "\n", + "- `tidymodels`: O [tidymodels](https://www.tidymodels.org/) é uma [coleção de pacotes](https://www.tidymodels.org/packages/) para modelagem e aprendizado de máquina.\n", + "\n", + "- `janitor`: O pacote [janitor](https://github.com/sfirke/janitor) oferece ferramentas simples para examinar e limpar dados desorganizados.\n", + "\n", + "- `ggbeeswarm`: O pacote [ggbeeswarm](https://github.com/eclarke/ggbeeswarm) fornece métodos para criar gráficos no estilo \"beeswarm\" usando ggplot2.\n", + "\n", + "Você pode instalá-los com o seguinte comando:\n", + "\n", + "`install.packages(c(\"tidyverse\", \"tidymodels\", \"janitor\", \"ggbeeswarm\"))`\n", + "\n", + "Alternativamente, o script abaixo verifica se você possui os pacotes necessários para completar este módulo e os instala caso estejam ausentes.\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "vscode": { + "languageId": "r" + } + }, + "outputs": [], + "source": [ + "suppressWarnings(if (!require(\"pacman\"))install.packages(\"pacman\"))\n", + "\n", + "pacman::p_load(tidyverse, tidymodels, janitor, ggbeeswarm)\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## **Defina a pergunta**\n", + "\n", + "Para os nossos propósitos, vamos expressar isso como um binário: 'Branco' ou 'Não Branco'. Há também uma categoria 'listrado' em nosso conjunto de dados, mas há poucos exemplos dela, então não a utilizaremos. De qualquer forma, ela desaparece quando removemos os valores nulos do conjunto de dados.\n", + "\n", + "> 🎃 Curiosidade: às vezes chamamos abóboras brancas de abóboras 'fantasmas'. Elas não são muito fáceis de esculpir, então não são tão populares quanto as laranjas, mas têm uma aparência bem legal! Assim, também poderíamos reformular nossa pergunta como: 'Fantasma' ou 'Não Fantasma'. 👻\n", + "\n", + "## **Sobre regressão logística**\n", + "\n", + "A regressão logística difere da regressão linear, que você aprendeu anteriormente, de algumas maneiras importantes.\n", + "\n", + "#### **Classificação binária**\n", + "\n", + "A regressão logística não oferece os mesmos recursos que a regressão linear. A primeira fornece uma previsão sobre uma `categoria binária` (\"laranja ou não laranja\"), enquanto a segunda é capaz de prever `valores contínuos`, por exemplo, dado a origem de uma abóbora e o momento da colheita, *quanto o preço dela vai aumentar*.\n", + "\n", + "![Infográfico por Dasani Madipalli](../../../../../../translated_images/pt-BR/pumpkin-classifier.562771f104ad5436.webp)\n", + "\n", + "### Outras classificações\n", + "\n", + "Existem outros tipos de regressão logística, incluindo multinomial e ordinal:\n", + "\n", + "- **Multinomial**, que envolve mais de uma categoria - \"Laranja, Branco e Listrado\".\n", + "\n", + "- **Ordinal**, que envolve categorias ordenadas, útil se quisermos organizar nossos resultados de forma lógica, como nossas abóboras ordenadas por um número finito de tamanhos (mini,pequeno,médio,grande,xl,xxl).\n", + "\n", + "![Regressão multinomial vs ordinal](../../../../../../translated_images/pt-BR/multinomial-vs-ordinal.36701b4850e37d86.webp)\n", + "\n", + "#### **As variáveis NÃO precisam ser correlacionadas**\n", + "\n", + "Lembra como a regressão linear funcionava melhor com variáveis mais correlacionadas? A regressão logística é o oposto - as variáveis não precisam estar alinhadas. Isso funciona para este conjunto de dados, que tem correlações um tanto fracas.\n", + "\n", + "#### **Você precisa de muitos dados limpos**\n", + "\n", + "A regressão logística fornecerá resultados mais precisos se você usar mais dados; nosso pequeno conjunto de dados não é o ideal para essa tarefa, então tenha isso em mente.\n", + "\n", + "✅ Pense nos tipos de dados que se adaptariam bem à regressão logística.\n", + "\n", + "## Exercício - organize os dados\n", + "\n", + "Primeiro, limpe um pouco os dados, removendo valores nulos e selecionando apenas algumas das colunas:\n", + "\n", + "1. Adicione o seguinte código:\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "vscode": { + "languageId": "r" + } + }, + "outputs": [], + "source": [ + "# Load the core tidyverse packages\n", + "library(tidyverse)\n", + "\n", + "# Import the data and clean column names\n", + "pumpkins <- read_csv(file = \"https://raw.githubusercontent.com/microsoft/ML-For-Beginners/main/2-Regression/data/US-pumpkins.csv\") %>% \n", + " clean_names()\n", + "\n", + "# Select desired columns\n", + "pumpkins_select <- pumpkins %>% \n", + " select(c(city_name, package, variety, origin, item_size, color)) \n", + "\n", + "# Drop rows containing missing values and encode color as factor (category)\n", + "pumpkins_select <- pumpkins_select %>% \n", + " drop_na() %>% \n", + " mutate(color = factor(color))\n", + "\n", + "# View the first few rows\n", + "pumpkins_select %>% \n", + " slice_head(n = 5)\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Você pode sempre dar uma olhada no seu novo dataframe usando a função [*glimpse()*](https://pillar.r-lib.org/reference/glimpse.html) como mostrado abaixo:\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "vscode": { + "languageId": "r" + } + }, + "outputs": [], + "source": [ + "pumpkins_select %>% \n", + " glimpse()\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Vamos confirmar que estaremos realmente lidando com um problema de classificação binária:\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "vscode": { + "languageId": "r" + } + }, + "outputs": [], + "source": [ + "# Subset distinct observations in outcome column\n", + "pumpkins_select %>% \n", + " distinct(color)\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Visualização - gráfico categórico\n", + "Agora você já carregou novamente os dados das abóboras e os limpou para preservar um conjunto de dados contendo algumas variáveis, incluindo Cor. Vamos visualizar o dataframe no notebook usando a biblioteca ggplot.\n", + "\n", + "A biblioteca ggplot oferece maneiras interessantes de visualizar seus dados. Por exemplo, você pode comparar as distribuições dos dados para cada Variedade e Cor em um gráfico categórico.\n", + "\n", + "1. Crie um gráfico desse tipo usando a função geombar, com os dados das abóboras, e especifique um mapeamento de cores para cada categoria de abóbora (laranja ou branca):\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "vscode": { + "languageId": "python" + } + }, + "outputs": [], + "source": [ + "# Specify colors for each value of the hue variable\n", + "palette <- c(ORANGE = \"orange\", WHITE = \"wheat\")\n", + "\n", + "# Create the bar plot\n", + "ggplot(pumpkins_select, aes(y = variety, fill = color)) +\n", + " geom_bar(position = \"dodge\") +\n", + " scale_fill_manual(values = palette) +\n", + " labs(y = \"Variety\", fill = \"Color\") +\n", + " theme_minimal()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Ao observar os dados, você pode ver como as informações de Cor se relacionam com a Variedade.\n", + "\n", + "✅ Dado este gráfico categórico, quais são algumas explorações interessantes que você consegue imaginar?\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Pré-processamento de dados: codificação de características\n", + "\n", + "Nosso conjunto de dados de abóboras contém valores em formato de texto para todas as suas colunas. Trabalhar com dados categóricos é intuitivo para humanos, mas não para máquinas. Os algoritmos de aprendizado de máquina funcionam melhor com números. Por isso, a codificação é uma etapa muito importante na fase de pré-processamento de dados, pois nos permite transformar dados categóricos em dados numéricos, sem perder nenhuma informação. Uma boa codificação contribui para a construção de um bom modelo.\n", + "\n", + "Para a codificação de características, existem dois principais tipos de codificadores:\n", + "\n", + "1. Codificador ordinal: é adequado para variáveis ordinais, que são variáveis categóricas cujos dados seguem uma ordem lógica, como a coluna `item_size` no nosso conjunto de dados. Ele cria um mapeamento em que cada categoria é representada por um número, que corresponde à ordem da categoria na coluna.\n", + "\n", + "2. Codificador categórico: é adequado para variáveis nominais, que são variáveis categóricas cujos dados não seguem uma ordem lógica, como todas as características diferentes de `item_size` no nosso conjunto de dados. Trata-se de uma codificação one-hot, o que significa que cada categoria é representada por uma coluna binária: a variável codificada é igual a 1 se a abóbora pertence àquela variedade e 0 caso contrário.\n", + "\n", + "O Tidymodels oferece mais um pacote interessante: [recipes](https://recipes.tidymodels.org/) - um pacote para pré-processamento de dados. Vamos definir uma `recipe` que especifica que todas as colunas preditoras devem ser codificadas em um conjunto de números inteiros, `prep` para estimar as quantidades e estatísticas necessárias para quaisquer operações e, por fim, `bake` para aplicar os cálculos aos novos dados.\n", + "\n", + "> Normalmente, o recipes é usado como um pré-processador para modelagem, onde define quais etapas devem ser aplicadas a um conjunto de dados para prepará-lo para a modelagem. Nesse caso, é **altamente recomendado** que você use um `workflow()` em vez de estimar manualmente uma receita usando prep e bake. Veremos tudo isso em breve.\n", + ">\n", + "> No entanto, por enquanto, estamos usando recipes + prep + bake para especificar quais etapas devem ser aplicadas a um conjunto de dados para prepará-lo para análise de dados e, em seguida, extrair os dados pré-processados com as etapas aplicadas.\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "vscode": { + "languageId": "r" + } + }, + "outputs": [], + "source": [ + "# Preprocess and extract data to allow some data analysis\n", + "baked_pumpkins <- recipe(color ~ ., data = pumpkins_select) %>%\n", + " # Define ordering for item_size column\n", + " step_mutate(item_size = ordered(item_size, levels = c('sml', 'med', 'med-lge', 'lge', 'xlge', 'jbo', 'exjbo'))) %>%\n", + " # Convert factors to numbers using the order defined above (Ordinal encoding)\n", + " step_integer(item_size, zero_based = F) %>%\n", + " # Encode all other predictors using one hot encoding\n", + " step_dummy(all_nominal(), -all_outcomes(), one_hot = TRUE) %>%\n", + " prep(data = pumpkin_select) %>%\n", + " bake(new_data = NULL)\n", + "\n", + "# Display the first few rows of preprocessed data\n", + "baked_pumpkins %>% \n", + " slice_head(n = 5)\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "✅ Quais são as vantagens de usar um codificador ordinal para a coluna Item Size?\n", + "\n", + "### Analisar relações entre variáveis\n", + "\n", + "Agora que pré-processamos nossos dados, podemos analisar as relações entre as características e o rótulo para ter uma ideia de quão bem o modelo será capaz de prever o rótulo com base nas características. A melhor maneira de realizar esse tipo de análise é plotando os dados. \n", + "Usaremos novamente a função ggplot geom_boxplot_ para visualizar as relações entre Item Size, Variety e Color em um gráfico categórico. Para melhorar a visualização dos dados, utilizaremos a coluna codificada de Item Size e a coluna não codificada de Variety.\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "vscode": { + "languageId": "r" + } + }, + "outputs": [], + "source": [ + "# Define the color palette\n", + "palette <- c(ORANGE = \"orange\", WHITE = \"wheat\")\n", + "\n", + "# We need the encoded Item Size column to use it as the x-axis values in the plot\n", + "pumpkins_select_plot<-pumpkins_select\n", + "pumpkins_select_plot$item_size <- baked_pumpkins$item_size\n", + "\n", + "# Create the grouped box plot\n", + "ggplot(pumpkins_select_plot, aes(x = `item_size`, y = color, fill = color)) +\n", + " geom_boxplot() +\n", + " facet_grid(variety ~ ., scales = \"free_x\") +\n", + " scale_fill_manual(values = palette) +\n", + " labs(x = \"Item Size\", y = \"\") +\n", + " theme_minimal() +\n", + " theme(strip.text = element_text(size = 12)) +\n", + " theme(axis.text.x = element_text(size = 10)) +\n", + " theme(axis.title.x = element_text(size = 12)) +\n", + " theme(axis.title.y = element_blank()) +\n", + " theme(legend.position = \"bottom\") +\n", + " guides(fill = guide_legend(title = \"Color\")) +\n", + " theme(panel.spacing = unit(0.5, \"lines\"))+\n", + " theme(strip.text.y = element_text(size = 4, hjust = 0)) \n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Use um gráfico swarm\n", + "\n", + "Como Cor é uma categoria binária (Branco ou Não), ela requer '[uma abordagem especializada](https://github.com/rstudio/cheatsheets/blob/main/data-visualization.pdf) para visualização'.\n", + "\n", + "Experimente um `gráfico swarm` para mostrar a distribuição de cor em relação ao item_size.\n", + "\n", + "Usaremos o [pacote ggbeeswarm](https://github.com/eclarke/ggbeeswarm), que fornece métodos para criar gráficos no estilo beeswarm usando ggplot2. Gráficos beeswarm são uma forma de plotar pontos que normalmente se sobreporiam, organizando-os lado a lado.\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "vscode": { + "languageId": "r" + } + }, + "outputs": [], + "source": [ + "# Create beeswarm plots of color and item_size\n", + "baked_pumpkins %>% \n", + " mutate(color = factor(color)) %>% \n", + " ggplot(mapping = aes(x = color, y = item_size, color = color)) +\n", + " geom_quasirandom() +\n", + " scale_color_brewer(palette = \"Dark2\", direction = -1) +\n", + " theme(legend.position = \"none\")\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Agora que temos uma ideia da relação entre as categorias binárias de cor e o grupo maior de tamanhos, vamos explorar a regressão logística para determinar a provável cor de uma abóbora.\n", + "\n", + "## Construa seu modelo\n", + "\n", + "Selecione as variáveis que você deseja usar no seu modelo de classificação e divida os dados em conjuntos de treinamento e teste. O [rsample](https://rsample.tidymodels.org/), um pacote do Tidymodels, fornece uma infraestrutura para divisão e reamostragem de dados de forma eficiente:\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "vscode": { + "languageId": "r" + } + }, + "outputs": [], + "source": [ + "# Split data into 80% for training and 20% for testing\n", + "set.seed(2056)\n", + "pumpkins_split <- pumpkins_select %>% \n", + " initial_split(prop = 0.8)\n", + "\n", + "# Extract the data in each split\n", + "pumpkins_train <- training(pumpkins_split)\n", + "pumpkins_test <- testing(pumpkins_split)\n", + "\n", + "# Print out the first 5 rows of the training set\n", + "pumpkins_train %>% \n", + " slice_head(n = 5)\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "🙌 Estamos prontos para treinar um modelo ajustando as características de treinamento ao rótulo de treinamento (cor).\n", + "\n", + "Começaremos criando uma receita que especifica as etapas de pré-processamento que devem ser realizadas em nossos dados para prepará-los para a modelagem, ou seja: codificar variáveis categóricas em um conjunto de números inteiros. Assim como `baked_pumpkins`, criaremos uma `pumpkins_recipe`, mas não usaremos `prep` e `bake`, já que isso será incorporado em um fluxo de trabalho, como você verá em apenas alguns passos.\n", + "\n", + "Existem várias maneiras de especificar um modelo de regressão logística no Tidymodels. Veja `?logistic_reg()`. Por enquanto, especificaremos um modelo de regressão logística usando o mecanismo padrão `stats::glm()`.\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "vscode": { + "languageId": "r" + } + }, + "outputs": [], + "source": [ + "# Create a recipe that specifies preprocessing steps for modelling\n", + "pumpkins_recipe <- recipe(color ~ ., data = pumpkins_train) %>% \n", + " step_mutate(item_size = ordered(item_size, levels = c('sml', 'med', 'med-lge', 'lge', 'xlge', 'jbo', 'exjbo'))) %>%\n", + " step_integer(item_size, zero_based = F) %>% \n", + " step_dummy(all_nominal(), -all_outcomes(), one_hot = TRUE)\n", + "\n", + "# Create a logistic model specification\n", + "log_reg <- logistic_reg() %>% \n", + " set_engine(\"glm\") %>% \n", + " set_mode(\"classification\")\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Agora que temos uma receita e uma especificação de modelo, precisamos encontrar uma maneira de combiná-los em um objeto que primeiro pré-processará os dados (prep+bake nos bastidores), ajustará o modelo nos dados pré-processados e também permitirá atividades de pós-processamento, se necessário.\n", + "\n", + "No Tidymodels, esse objeto prático é chamado de [`workflow`](https://workflows.tidymodels.org/) e organiza convenientemente seus componentes de modelagem.\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "vscode": { + "languageId": "r" + } + }, + "outputs": [], + "source": [ + "# Bundle modelling components in a workflow\n", + "log_reg_wf <- workflow() %>% \n", + " add_recipe(pumpkins_recipe) %>% \n", + " add_model(log_reg)\n", + "\n", + "# Print out the workflow\n", + "log_reg_wf\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Depois que um fluxo de trabalho é *especificado*, um modelo pode ser `treinado` usando a função [`fit()`](https://tidymodels.github.io/parsnip/reference/fit.html). O fluxo de trabalho estimará uma receita e pré-processará os dados antes do treinamento, então não será necessário fazer isso manualmente usando prep e bake.\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "vscode": { + "languageId": "r" + } + }, + "outputs": [], + "source": [ + "# Train the model\n", + "wf_fit <- log_reg_wf %>% \n", + " fit(data = pumpkins_train)\n", + "\n", + "# Print the trained workflow\n", + "wf_fit\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "O modelo exibe os coeficientes aprendidos durante o treinamento.\n", + "\n", + "Agora que treinamos o modelo usando os dados de treinamento, podemos fazer previsões nos dados de teste usando [parsnip::predict()](https://parsnip.tidymodels.org/reference/predict.model_fit.html). Vamos começar usando o modelo para prever os rótulos do nosso conjunto de teste e as probabilidades para cada rótulo. Quando a probabilidade for maior que 0,5, a classe prevista será `WHITE`, caso contrário, será `ORANGE`.\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "vscode": { + "languageId": "r" + } + }, + "outputs": [], + "source": [ + "# Make predictions for color and corresponding probabilities\n", + "results <- pumpkins_test %>% select(color) %>% \n", + " bind_cols(wf_fit %>% \n", + " predict(new_data = pumpkins_test)) %>%\n", + " bind_cols(wf_fit %>%\n", + " predict(new_data = pumpkins_test, type = \"prob\"))\n", + "\n", + "# Compare predictions\n", + "results %>% \n", + " slice_head(n = 10)\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Muito bom! Isso oferece mais insights sobre como a regressão logística funciona.\n", + "\n", + "### Melhor compreensão por meio de uma matriz de confusão\n", + "\n", + "Comparar cada previsão com seu respectivo valor real (\"ground truth\") não é uma maneira muito eficiente de determinar o quão bem o modelo está prevendo. Felizmente, o Tidymodels tem mais algumas cartas na manga: [`yardstick`](https://yardstick.tidymodels.org/) - um pacote usado para medir a eficácia de modelos utilizando métricas de desempenho.\n", + "\n", + "Uma métrica de desempenho associada a problemas de classificação é a [`matriz de confusão`](https://wikipedia.org/wiki/Confusion_matrix). Uma matriz de confusão descreve o quão bem um modelo de classificação está performando. Ela tabula quantos exemplos de cada classe foram classificados corretamente por um modelo. No nosso caso, ela mostrará quantas abóboras laranjas foram classificadas como laranjas e quantas abóboras brancas foram classificadas como brancas; a matriz de confusão também mostra quantas foram classificadas nas categorias **erradas**.\n", + "\n", + "A função [**`conf_mat()`**](https://tidymodels.github.io/yardstick/reference/conf_mat.html) do yardstick calcula essa tabela cruzada de classes observadas e previstas.\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "vscode": { + "languageId": "r" + } + }, + "outputs": [], + "source": [ + "# Confusion matrix for prediction results\n", + "conf_mat(data = results, truth = color, estimate = .pred_class)\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Vamos interpretar a matriz de confusão. Nosso modelo foi solicitado a classificar abóboras entre duas categorias binárias, a categoria `branca` e a categoria `não-branca`.\n", + "\n", + "- Se o seu modelo prevê que uma abóbora é branca e ela realmente pertence à categoria 'branca', chamamos isso de `verdadeiro positivo`, representado pelo número no canto superior esquerdo.\n", + "\n", + "- Se o seu modelo prevê que uma abóbora não é branca e ela realmente pertence à categoria 'branca', chamamos isso de `falso negativo`, representado pelo número no canto inferior esquerdo.\n", + "\n", + "- Se o seu modelo prevê que uma abóbora é branca e ela realmente pertence à categoria 'não-branca', chamamos isso de `falso positivo`, representado pelo número no canto superior direito.\n", + "\n", + "- Se o seu modelo prevê que uma abóbora não é branca e ela realmente pertence à categoria 'não-branca', chamamos isso de `verdadeiro negativo`, representado pelo número no canto inferior direito.\n", + "\n", + "| Verdade |\n", + "|:-------:|\n", + "\n", + "| | | |\n", + "|---------------|--------|-------|\n", + "| **Previsto** | BRANCA | LARANJA |\n", + "| BRANCA | VP | FP |\n", + "| LARANJA | FN | VN |\n", + "\n", + "Como você deve ter imaginado, é preferível ter um número maior de verdadeiros positivos e verdadeiros negativos e um número menor de falsos positivos e falsos negativos, o que implica que o modelo tem um desempenho melhor.\n", + "\n", + "A matriz de confusão é útil porque dá origem a outras métricas que podem nos ajudar a avaliar melhor o desempenho de um modelo de classificação. Vamos analisar algumas delas:\n", + "\n", + "🎓 Precisão: `VP/(VP + FP)` definida como a proporção de positivos previstos que são realmente positivos. Também chamada de [valor preditivo positivo](https://en.wikipedia.org/wiki/Positive_predictive_value \"Positive predictive value\").\n", + "\n", + "🎓 Revocação: `VP/(VP + FN)` definida como a proporção de resultados positivos em relação ao número de amostras que eram realmente positivas. Também conhecida como `sensibilidade`.\n", + "\n", + "🎓 Especificidade: `VN/(VN + FP)` definida como a proporção de resultados negativos em relação ao número de amostras que eram realmente negativas.\n", + "\n", + "🎓 Acurácia: `VP + VN/(VP + VN + FP + FN)` A porcentagem de rótulos previstos corretamente para uma amostra.\n", + "\n", + "🎓 Medida F: Uma média ponderada entre a precisão e a revocação, sendo 1 o melhor valor e 0 o pior.\n", + "\n", + "Vamos calcular essas métricas!\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "vscode": { + "languageId": "r" + } + }, + "outputs": [], + "source": [ + "# Combine metric functions and calculate them all at once\n", + "eval_metrics <- metric_set(ppv, recall, spec, f_meas, accuracy)\n", + "eval_metrics(data = results, truth = color, estimate = .pred_class)\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Visualizar a curva ROC deste modelo\n", + "\n", + "Vamos fazer mais uma visualização para observar a chamada [`curva ROC`](https://en.wikipedia.org/wiki/Receiver_operating_characteristic):\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "vscode": { + "languageId": "r" + } + }, + "outputs": [], + "source": [ + "# Make a roc_curve\n", + "results %>% \n", + " roc_curve(color, .pred_ORANGE) %>% \n", + " autoplot()\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Curvas ROC são frequentemente usadas para obter uma visão do desempenho de um classificador em termos de verdadeiros positivos versus falsos positivos. Curvas ROC geralmente apresentam a `Taxa de Verdadeiros Positivos`/Sensibilidade no eixo Y e a `Taxa de Falsos Positivos`/1-Especificidade no eixo X. Assim, a inclinação da curva e o espaço entre a linha do ponto médio e a curva são importantes: você quer uma curva que rapidamente suba e ultrapasse a linha. No nosso caso, há falsos positivos no início, e então a linha sobe e ultrapassa adequadamente.\n", + "\n", + "Por fim, vamos usar `yardstick::roc_auc()` para calcular a Área Sob a Curva. Uma forma de interpretar a AUC é como a probabilidade de que o modelo classifique um exemplo positivo aleatório mais alto do que um exemplo negativo aleatório.\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "vscode": { + "languageId": "r" + } + }, + "outputs": [], + "source": [ + "# Calculate area under curve\n", + "results %>% \n", + " roc_auc(color, .pred_ORANGE)\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "O resultado é cerca de `0.975`. Dado que o AUC varia de 0 a 1, você quer um valor alto, já que um modelo que acerta 100% das previsões terá um AUC de 1; neste caso, o modelo é *muito bom*.\n", + "\n", + "Em futuras lições sobre classificações, você aprenderá como melhorar os resultados do seu modelo (como lidar com dados desbalanceados neste caso).\n", + "\n", + "## 🚀Desafio\n", + "\n", + "Há muito mais para explorar sobre regressão logística! Mas a melhor forma de aprender é experimentando. Encontre um conjunto de dados que se preste a esse tipo de análise e construa um modelo com ele. O que você aprende? dica: experimente [Kaggle](https://www.kaggle.com/search?q=logistic+regression+datasets) para conjuntos de dados interessantes.\n", + "\n", + "## Revisão & Estudo Individual\n", + "\n", + "Leia as primeiras páginas [deste artigo de Stanford](https://web.stanford.edu/~jurafsky/slp3/5.pdf) sobre alguns usos práticos da regressão logística. Pense em tarefas que são mais adequadas para um ou outro tipo de regressão entre as que estudamos até agora. O que funcionaria melhor?\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n---\n\n**Aviso Legal**: \nEste documento foi traduzido utilizando o serviço de tradução por IA [Co-op Translator](https://github.com/Azure/co-op-translator). Embora nos esforcemos para garantir a precisão, esteja ciente de que traduções automatizadas podem conter erros ou imprecisões. O documento original em seu idioma nativo deve ser considerado a fonte autoritativa. Para informações críticas, recomenda-se a tradução profissional realizada por humanos. Não nos responsabilizamos por quaisquer mal-entendidos ou interpretações equivocadas decorrentes do uso desta tradução.\n" + ] + } + ], + "metadata": { + "anaconda-cloud": "", + "kernelspec": { + "display_name": "R", + "langauge": "R", + "name": "ir" + }, + "language_info": { + "codemirror_mode": "r", + "file_extension": ".r", + "mimetype": "text/x-r-source", + "name": "R", + "pygments_lexer": "r", + "version": "3.4.1" + }, + "coopTranslator": { + "original_hash": "feaf125f481a89c468fa115bf2aed580", + "translation_date": "2025-08-29T23:04:05+00:00", + "source_file": "2-Regression/4-Logistic/solution/R/lesson_4-R.ipynb", + "language_code": "br" + } + }, + "nbformat": 4, + "nbformat_minor": 1 +} \ No newline at end of file diff --git a/translations/pt-BR/2-Regression/4-Logistic/solution/notebook.ipynb b/translations/pt-BR/2-Regression/4-Logistic/solution/notebook.ipynb new file mode 100644 index 000000000..7042722d3 --- /dev/null +++ b/translations/pt-BR/2-Regression/4-Logistic/solution/notebook.ipynb @@ -0,0 +1,1255 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Regressão Logística - Aula 4\n", + "\n", + "Carregue as bibliotecas necessárias e o conjunto de dados. Converta os dados para um dataframe contendo um subconjunto dos dados:\n" + ] + }, + { + "cell_type": "code", + "execution_count": 63, + "metadata": {}, + "outputs": [ + { + "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", + "
City NameTypePackageVarietySub VarietyGradeDateLow PriceHigh PriceMostly Low...Unit of SaleQualityConditionAppearanceStorageCropRepackTrans ModeUnnamed: 24Unnamed: 25
0BALTIMORENaN24 inch binsNaNNaNNaN4/29/17270.0280.0270.0...NaNNaNNaNNaNNaNNaNENaNNaNNaN
1BALTIMORENaN24 inch binsNaNNaNNaN5/6/17270.0280.0270.0...NaNNaNNaNNaNNaNNaNENaNNaNNaN
2BALTIMORENaN24 inch binsHOWDEN TYPENaNNaN9/24/16160.0160.0160.0...NaNNaNNaNNaNNaNNaNNNaNNaNNaN
3BALTIMORENaN24 inch binsHOWDEN TYPENaNNaN9/24/16160.0160.0160.0...NaNNaNNaNNaNNaNNaNNNaNNaNNaN
4BALTIMORENaN24 inch binsHOWDEN TYPENaNNaN11/5/1690.0100.090.0...NaNNaNNaNNaNNaNNaNNNaNNaNNaN
\n", + "

5 rows × 26 columns

\n", + "
" + ], + "text/plain": [ + " City Name Type Package Variety Sub Variety Grade Date \n", + "0 BALTIMORE NaN 24 inch bins NaN NaN NaN 4/29/17 \\\n", + "1 BALTIMORE NaN 24 inch bins NaN NaN NaN 5/6/17 \n", + "2 BALTIMORE NaN 24 inch bins HOWDEN TYPE NaN NaN 9/24/16 \n", + "3 BALTIMORE NaN 24 inch bins HOWDEN TYPE NaN NaN 9/24/16 \n", + "4 BALTIMORE NaN 24 inch bins HOWDEN TYPE NaN NaN 11/5/16 \n", + "\n", + " Low Price High Price Mostly Low ... Unit of Sale Quality Condition \n", + "0 270.0 280.0 270.0 ... NaN NaN NaN \\\n", + "1 270.0 280.0 270.0 ... NaN NaN NaN \n", + "2 160.0 160.0 160.0 ... NaN NaN NaN \n", + "3 160.0 160.0 160.0 ... NaN NaN NaN \n", + "4 90.0 100.0 90.0 ... NaN NaN NaN \n", + "\n", + " Appearance Storage Crop Repack Trans Mode Unnamed: 24 Unnamed: 25 \n", + "0 NaN NaN NaN E NaN NaN NaN \n", + "1 NaN NaN NaN E NaN NaN NaN \n", + "2 NaN NaN NaN N NaN NaN NaN \n", + "3 NaN NaN NaN N NaN NaN NaN \n", + "4 NaN NaN NaN N NaN NaN NaN \n", + "\n", + "[5 rows x 26 columns]" + ] + }, + "execution_count": 63, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "import pandas as pd\n", + "import numpy as np\n", + "\n", + "full_pumpkins = pd.read_csv('../../data/US-pumpkins.csv')\n", + "\n", + "full_pumpkins.head()\n" + ] + }, + { + "cell_type": "code", + "execution_count": 64, + "metadata": {}, + "outputs": [ + { + "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", + "
City NamePackageVarietyOriginItem SizeColor
2BALTIMORE24 inch binsHOWDEN TYPEDELAWAREmedORANGE
3BALTIMORE24 inch binsHOWDEN TYPEVIRGINIAmedORANGE
4BALTIMORE24 inch binsHOWDEN TYPEMARYLANDlgeORANGE
5BALTIMORE24 inch binsHOWDEN TYPEMARYLANDlgeORANGE
6BALTIMORE36 inch binsHOWDEN TYPEMARYLANDmedORANGE
\n", + "
" + ], + "text/plain": [ + " City Name Package Variety Origin Item Size Color\n", + "2 BALTIMORE 24 inch bins HOWDEN TYPE DELAWARE med ORANGE\n", + "3 BALTIMORE 24 inch bins HOWDEN TYPE VIRGINIA med ORANGE\n", + "4 BALTIMORE 24 inch bins HOWDEN TYPE MARYLAND lge ORANGE\n", + "5 BALTIMORE 24 inch bins HOWDEN TYPE MARYLAND lge ORANGE\n", + "6 BALTIMORE 36 inch bins HOWDEN TYPE MARYLAND med ORANGE" + ] + }, + "execution_count": 64, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Select the columns we want to use\n", + "columns_to_select = ['City Name','Package','Variety', 'Origin','Item Size', 'Color']\n", + "pumpkins = full_pumpkins.loc[:, columns_to_select]\n", + "\n", + "# Drop rows with missing values\n", + "pumpkins.dropna(inplace=True)\n", + "\n", + "pumpkins.head()" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Vamos dar uma olhada nos nossos dados!\n", + "\n", + "Visualizando-os com Seaborn\n" + ] + }, + { + "cell_type": "code", + "execution_count": 65, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 65, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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S0tLab1CCxcuxAcffIBXXnkFbm5uGDZsGF555RW89dZbBtd1cnLCjBkzMGjQIFy6dAleXl4AYHDuomRnZyM7O1t6nJ6eXqJxRERU/THQEMzMzHD79u2nuuaQIUOwefNmDB06FL1798bp06dx5syZYseYmZkBAHJycsq0Znh4OD755BO9dssOi2BlaQ7bBv5lmpeIiKoe76F5jomiiN27d+PXX39F586di+1br149affFwsICPj4+5V5/+fLlOH36NMaOHYvly5fDwcGhyL4pKSn44osvULduXWl3BgCmTJkiq8vCwgIHDhwwOEdoaCjS0tKk4/r16+W+BiIiqh64Q/Mc2rFjBywsLJCbm4uCggK8+eabmDVrVrFjDhw4ILs3pUaNGuWuw9HREe+99x62bNmCnj17GuxTr149iKKI//77D82aNcPGjRthYmIinZ80aRKCg4NlY+rWrWtwLrVaDbVaXe66iYio+mGgeQ5ptVpERkbCxMQEderUgUr15B8Dd3f3Et1DU1oqlarY9Q8cOAArKys4OjoavNnX3t4eHh4eFV4XEREpCwPNc8jc3FwxIaCyghQRET1bGGioRG7duoWsrCxZm52dXYW89FQeGRkZep+HU7NmTb23mBMR0bONNwVTiXh5ecHJyUl2/PHHH1VdFmbMmKFX1+TJk6u6LCIiesoEURTFqi6CqCqkp6fD2toaV05u4du2iYgUjjs0REREpHgMNERERKR4DDRERESkeAw0REREpHgMNERERKR4DDRERESkeAw0REREpHgMNERERKR4DDRERESkeAw0REREpHgMNERERKR4/LZteu7Z1tfy27mJiBSOOzRERESkeAw0REREpHgMNERERKR4DDRERESkeAw0REREpHgMNERERKR4DDRERESkeAw0REREpHgMNERERKR4/KRgeu5dXdUElmYlz/Zuw65UYjVERFQW3KEhIiIixWOgISIiIsVjoCEiIiLFY6AhIiIixWOgISIiIsVjoCEiIiLFY6AhIiIixWOgISIiIsVjoCEiIiLFY6AhIiIixWOgISIiIsVjoCEiIiLFY6AhIiIixWOgISIiIsVjoCml4OBgCIIgHXZ2dggMDMSpU6dk/QRBwJYtW2RtcXFxeO211+Dg4ABTU1M0aNAAAwYMwP79+4td083NDYIgYO3atXrnfHx8IAgCVq5cqXcu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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "import seaborn as sns\n", + "# Specify colors for each values of the hue variable\n", + "palette = {\n", + " 'ORANGE': 'orange',\n", + " 'WHITE': 'wheat',\n", + "}\n", + "# Plot a bar plot to visualize how many pumpkins of each variety are orange or white\n", + "sns.catplot(\n", + " data=pumpkins, y=\"Variety\", hue=\"Color\", kind=\"count\",\n", + " palette=palette, \n", + ")" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Pré-processamento de dados\n", + "\n", + "Vamos codificar as características e os rótulos para melhor visualizar os dados e treinar o modelo\n" + ] + }, + { + "cell_type": "code", + "execution_count": 66, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array(['med', 'lge', 'sml', 'xlge', 'med-lge', 'jbo', 'exjbo'],\n", + " dtype=object)" + ] + }, + "execution_count": 66, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Let's look at the different values of the 'Item Size' column\n", + "pumpkins['Item Size'].unique()" + ] + }, + { + "cell_type": "code", + "execution_count": 67, + "metadata": {}, + "outputs": [], + "source": [ + "from sklearn.preprocessing import OrdinalEncoder\n", + "# Encode the 'Item Size' column using ordinal encoding\n", + "item_size_categories = [['sml', 'med', 'med-lge', 'lge', 'xlge', 'jbo', 'exjbo']]\n", + "ordinal_features = ['Item Size']\n", + "ordinal_encoder = OrdinalEncoder(categories=item_size_categories)" + ] + }, + { + "cell_type": "code", + "execution_count": 68, + "metadata": {}, + "outputs": [], + "source": [ + "from sklearn.preprocessing import OneHotEncoder\n", + "# Encode all the other features using one-hot encoding\n", + "categorical_features = ['City Name', 'Package', 'Variety', 'Origin']\n", + "categorical_encoder = OneHotEncoder(sparse_output=False)" + ] + }, + { + "cell_type": "code", + "execution_count": 69, + "metadata": {}, + "outputs": [ + { + "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", + "
ord__Item Sizecat__City Name_ATLANTAcat__City Name_BALTIMOREcat__City Name_BOSTONcat__City Name_CHICAGOcat__City Name_COLUMBIAcat__City Name_DALLAScat__City Name_DETROITcat__City Name_LOS ANGELEScat__City Name_MIAMI...cat__Origin_MICHIGANcat__Origin_NEW JERSEYcat__Origin_NEW YORKcat__Origin_NORTH CAROLINAcat__Origin_OHIOcat__Origin_PENNSYLVANIAcat__Origin_TENNESSEEcat__Origin_TEXAScat__Origin_VERMONTcat__Origin_VIRGINIA
21.00.01.00.00.00.00.00.00.00.0...0.00.00.00.00.00.00.00.00.00.0
31.00.01.00.00.00.00.00.00.00.0...0.00.00.00.00.00.00.00.00.01.0
43.00.01.00.00.00.00.00.00.00.0...0.00.00.00.00.00.00.00.00.00.0
53.00.01.00.00.00.00.00.00.00.0...0.00.00.00.00.00.00.00.00.00.0
61.00.01.00.00.00.00.00.00.00.0...0.00.00.00.00.00.00.00.00.00.0
\n", + "

5 rows × 48 columns

\n", + "
" + ], + "text/plain": [ + " ord__Item Size cat__City Name_ATLANTA cat__City Name_BALTIMORE \n", + "2 1.0 0.0 1.0 \\\n", + "3 1.0 0.0 1.0 \n", + "4 3.0 0.0 1.0 \n", + "5 3.0 0.0 1.0 \n", + "6 1.0 0.0 1.0 \n", + "\n", + " cat__City Name_BOSTON cat__City Name_CHICAGO cat__City Name_COLUMBIA \n", + "2 0.0 0.0 0.0 \\\n", + "3 0.0 0.0 0.0 \n", + "4 0.0 0.0 0.0 \n", + "5 0.0 0.0 0.0 \n", + "6 0.0 0.0 0.0 \n", + "\n", + " cat__City Name_DALLAS cat__City Name_DETROIT cat__City Name_LOS ANGELES \n", + "2 0.0 0.0 0.0 \\\n", + "3 0.0 0.0 0.0 \n", + "4 0.0 0.0 0.0 \n", + "5 0.0 0.0 0.0 \n", + "6 0.0 0.0 0.0 \n", + "\n", + " cat__City Name_MIAMI ... cat__Origin_MICHIGAN cat__Origin_NEW JERSEY \n", + "2 0.0 ... 0.0 0.0 \\\n", + "3 0.0 ... 0.0 0.0 \n", + "4 0.0 ... 0.0 0.0 \n", + "5 0.0 ... 0.0 0.0 \n", + "6 0.0 ... 0.0 0.0 \n", + "\n", + " cat__Origin_NEW YORK cat__Origin_NORTH CAROLINA cat__Origin_OHIO \n", + "2 0.0 0.0 0.0 \\\n", + "3 0.0 0.0 0.0 \n", + "4 0.0 0.0 0.0 \n", + "5 0.0 0.0 0.0 \n", + "6 0.0 0.0 0.0 \n", + "\n", + " cat__Origin_PENNSYLVANIA cat__Origin_TENNESSEE cat__Origin_TEXAS \n", + "2 0.0 0.0 0.0 \\\n", + "3 0.0 0.0 0.0 \n", + "4 0.0 0.0 0.0 \n", + "5 0.0 0.0 0.0 \n", + "6 0.0 0.0 0.0 \n", + "\n", + " cat__Origin_VERMONT cat__Origin_VIRGINIA \n", + "2 0.0 0.0 \n", + "3 0.0 1.0 \n", + "4 0.0 0.0 \n", + "5 0.0 0.0 \n", + "6 0.0 0.0 \n", + "\n", + "[5 rows x 48 columns]" + ] + }, + "execution_count": 69, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "from sklearn.compose import ColumnTransformer\n", + "ct = ColumnTransformer(transformers=[\n", + " ('ord', ordinal_encoder, ordinal_features),\n", + " ('cat', categorical_encoder, categorical_features)\n", + " ])\n", + "# Get the encoded features as a pandas DataFrame\n", + "ct.set_output(transform='pandas')\n", + "encoded_features = ct.fit_transform(pumpkins)\n", + "encoded_features.head()" + ] + }, + { + "cell_type": "code", + "execution_count": 70, + "metadata": {}, + "outputs": [ + { + "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", + "
ord__Item Sizecat__City Name_ATLANTAcat__City Name_BALTIMOREcat__City Name_BOSTONcat__City Name_CHICAGOcat__City Name_COLUMBIAcat__City Name_DALLAScat__City Name_DETROITcat__City Name_LOS ANGELEScat__City Name_MIAMI...cat__Origin_NEW JERSEYcat__Origin_NEW YORKcat__Origin_NORTH CAROLINAcat__Origin_OHIOcat__Origin_PENNSYLVANIAcat__Origin_TENNESSEEcat__Origin_TEXAScat__Origin_VERMONTcat__Origin_VIRGINIAColor
21.00.01.00.00.00.00.00.00.00.0...0.00.00.00.00.00.00.00.00.00
31.00.01.00.00.00.00.00.00.00.0...0.00.00.00.00.00.00.00.01.00
43.00.01.00.00.00.00.00.00.00.0...0.00.00.00.00.00.00.00.00.00
53.00.01.00.00.00.00.00.00.00.0...0.00.00.00.00.00.00.00.00.00
61.00.01.00.00.00.00.00.00.00.0...0.00.00.00.00.00.00.00.00.00
\n", + "

5 rows × 49 columns

\n", + "
" + ], + "text/plain": [ + " ord__Item Size cat__City Name_ATLANTA cat__City Name_BALTIMORE \n", + "2 1.0 0.0 1.0 \\\n", + "3 1.0 0.0 1.0 \n", + "4 3.0 0.0 1.0 \n", + "5 3.0 0.0 1.0 \n", + "6 1.0 0.0 1.0 \n", + "\n", + " cat__City Name_BOSTON cat__City Name_CHICAGO cat__City Name_COLUMBIA \n", + "2 0.0 0.0 0.0 \\\n", + "3 0.0 0.0 0.0 \n", + "4 0.0 0.0 0.0 \n", + "5 0.0 0.0 0.0 \n", + "6 0.0 0.0 0.0 \n", + "\n", + " cat__City Name_DALLAS cat__City Name_DETROIT cat__City Name_LOS ANGELES \n", + "2 0.0 0.0 0.0 \\\n", + "3 0.0 0.0 0.0 \n", + "4 0.0 0.0 0.0 \n", + "5 0.0 0.0 0.0 \n", + "6 0.0 0.0 0.0 \n", + "\n", + " cat__City Name_MIAMI ... cat__Origin_NEW JERSEY cat__Origin_NEW YORK \n", + "2 0.0 ... 0.0 0.0 \\\n", + "3 0.0 ... 0.0 0.0 \n", + "4 0.0 ... 0.0 0.0 \n", + "5 0.0 ... 0.0 0.0 \n", + "6 0.0 ... 0.0 0.0 \n", + "\n", + " cat__Origin_NORTH CAROLINA cat__Origin_OHIO cat__Origin_PENNSYLVANIA \n", + "2 0.0 0.0 0.0 \\\n", + "3 0.0 0.0 0.0 \n", + "4 0.0 0.0 0.0 \n", + "5 0.0 0.0 0.0 \n", + "6 0.0 0.0 0.0 \n", + "\n", + " cat__Origin_TENNESSEE cat__Origin_TEXAS cat__Origin_VERMONT \n", + "2 0.0 0.0 0.0 \\\n", + "3 0.0 0.0 0.0 \n", + "4 0.0 0.0 0.0 \n", + "5 0.0 0.0 0.0 \n", + "6 0.0 0.0 0.0 \n", + "\n", + " cat__Origin_VIRGINIA Color \n", + "2 0.0 0 \n", + "3 1.0 0 \n", + "4 0.0 0 \n", + "5 0.0 0 \n", + "6 0.0 0 \n", + "\n", + "[5 rows x 49 columns]" + ] + }, + "execution_count": 70, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "from sklearn.preprocessing import LabelEncoder\n", + "# Encode the 'Color' column using label encoding\n", + "label_encoder = LabelEncoder()\n", + "encoded_label = label_encoder.fit_transform(pumpkins['Color'])\n", + "encoded_pumpkins = encoded_features.assign(Color=encoded_label)\n", + "encoded_pumpkins.head()" + ] + }, + { + "cell_type": "code", + "execution_count": 71, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "['ORANGE', 'WHITE']" + ] + }, + "execution_count": 71, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Let's look at the mapping between the encoded values and the original values\n", + "list(label_encoder.inverse_transform([0, 1]))" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [] + }, + { + "cell_type": "code", + "execution_count": 81, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 81, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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drtdw4cPN7s0t/DII4+oZ8+eeuaZZzR06FBt27ZNixcv1uLFi8vdp4eHh373u99p0KBBGj58uPLz87V06VI9+OCDrndioFxeeeUVo1mzZoanp6fRtWtXY+vWrWaX5BYSEhIMSSW2UaNGmV3ar15p112SsWTJErNLcwtjxowxQkJCDE9PT6NRo0bGbbfdZnzxxRdml+XWIiMjjUmTJpldhlsYNmyYERgYaHh6ehpNmjQxhg0bZhw6dMjsstzKZ599ZrRv397w8vIyIiIijMWLF1e4z8zMTGPYsGFGw4YNjaCgIOPhhx828vLyXD6fdWIBAABgOUwnAAAAQJX74YcfXDrO1bm2jMQCAACgytntdscTuUqLn5f3FxcXu9QfI7EAAACoFuvWrVPDhg0lScePH9fQoUP11VdfSZLOnDmjvn37utwXIRYAAADVol27do6nnvr4+Mhmszme2pWZmVmmvlgnFgAAAJZDiAUAAECVq+zbsAixAAAAqHI2m+26+0o75moIsQDgBo4cOSKbzaaUlBSzSwHgppYtW6a6des63rdo0UI5OTmO9w0aNNCWLVtc7o8QCwDlMHr0aN11112O91FRUZo8ebJp9aSlpelPf/qTgoKC5O3traZNm2rw4ME6cOCAJCk4OFjp6ek8IhWAaYYOHSovL6+rttvtdnXt2tXl/lidAAAs7uLFi+rfv79at26tFStWKDAwUMePH9eqVat09uxZSZd+OAQEBJhbKABUIkZiAaCCRo8eraSkJL300kuy2Wyy2Ww6cuSIJGnPnj0aNGiQfHx81LhxY40cOVKnT592nBsVFaUJEyZo8uTJqlevnho3bqzXX39d586dU0xMjHx9fRUWFqZVq1Zd9fP37t2rw4cPa+HCherevbtCQkLUq1cvzZ49W927d5dUcjrB6NGjHbVeuSUmJkqSCgoKNHXqVDVp0kS1a9dWt27dHG0A8EtAiAWACnrppZfUo0cPjR07Vunp6UpPT1dwcLDOnj2rvn37qnPnzkpOTtbq1at18uRJDR061On8t956Sw0bNtS2bds0YcIEjRs3TkOGDFHPnj21c+dO3X777Ro5cqT++9//lvr5jRo1Uo0aNfThhx+qqKjI5Zov15qenq5JkybJ399fERERkqTx48dry5YtWr58ub799lsNGTJEAwcO1MGDByt2sQCgkvDYWQAoh9GjR+vs2bP6+OOPJV0aUe3UqZPmzZvnOGb27NnatGmT1qxZ49h3/PhxBQcHKzU1VeHh4YqKilJRUZE2bdokSSoqKpKfn5/uvvtuvf3225KkjIwMBQYGasuWLY6R1Z9bsGCBHnvsMdntdnXp0kV9+vTRiBEj1KJFC0mXRmKbN2+uXbt2qVOnTk7nrlixQiNGjNC6devUq1cvHT16VC1atNDRo0cVFBTkOK5fv37q2rWrnnnmmYpePgCoMEZiAaCKfPPNN0pISJCPj49juzzSefjwYcdxl59WI12au9qgQQPdcMMNjn2Xn25zrafZxMbGKiMjQ0uXLlWPHj30wQcfqF27dlq7du01a9y1a5dGjhyp+fPnq1evXpKk3bt3q6ioSOHh4U61JyUlOdUNAGbixi4AqCJ5eXmKjo7Ws88+W6ItMDDQ8bpmzZpObTabzWnf5XUTi4uLr/l5vr6+io6OVnR0tGbPnq0BAwZo9uzZ6t+/f6nHZ2Rk6M4779QDDzyg+++/36luu92uHTt2yG63O53j4+NzzRoAoLoQYgGgEnh6epaYj3rjjTfqo48+UmhoqDw8qvfbrc1mU0REhL766qtS2/Pz8zV48GBFREToxRdfdGrr3LmzioqKlJmZqVtvvbU6ygWAMmM6AQBUgtDQUH399dc6cuSITp8+reLiYsXGxurMmTMaPny4tm/frsOHD2vNmjWKiYlx+QYsV6SkpGjw4MH68MMPtW/fPh06dEjx8fF64403NHjw4FLPeeihh3Ts2DG9/PLLOnXqlDIyMpSRkaELFy4oPDxcI0aM0H333acVK1YoLS1N27ZtU1xcnP79739XWt0AUBGMxAJAJZg6dapGjRqltm3b6vz580pLS1NoaKg2b96sxx9/XLfffrsKCgoUEhKigQMHqkaNyhtDaNq0qUJDQzVr1izHUlqX3z/yyCOlnpOUlKT09HS1bdvWaX9CQoKioqK0ZMkSzZ49W3/5y1/0448/qmHDhurevbt+97vfVVrdAFARrE4AAAAAy2E6AQAAACyHEAsAAADLIcQCAADAcgixAAAAsBxCLAAAACyHEAsAAADLIcQCAADAcgixAAAAsBxCLAAAACyHEAsAAADLIcQCAADAcgixAAAAsBxCLAAAACyHEAsAAADLIcQCAADAcgixAAAAsBxCLAAAACyHEAsAAADLIcQCAADAcgixAAAAsBxCLAAAACyHEAsAAADLIcQCAADAcgixAAAAsBxCLAAAACyHEAsAAADLIcQCAADAcgixAAAAsBxCLAAAACyHEAsAAADLIcQCAADAcgixAAAAsBxCLAAAACyHEAsAAADLIcQCAADAcgixAAAAsBxCLAAAACyHEAsAAADLIcQCAADAcgixAAAAsBxCLAAAACyHEAsAAADLIcQCAADAcgixAAAAsBxCLAAAACyHEAsAAADLIcQCAADAcgixAAAAsBxCLAAAACyHEAsAAADLIcQCAADAcgixAAAAsBxCLAAAACyHEAsAAADLIcQCAADAcgixAAAAsBxCLAAAACyHEAsAAADLIcQCAADAcgixAAAAsBxCLAAAACyHEAsAAADLIcQCAADAcgixAAAAsBxCLAAAACyHEAsAAADLIcQCAADAcgixAAAAsBxCLAAAACyHEAsAAADLIcQCAADAcgixAAAAsBxCLAAAACyHEAsAAADLIcQCAADAcgixAAAAsBxCLAAAACyHEAsAAADLIcQCAADAcgixAAAAsBxCLAAAACyHEAsAAADLIcQCAADAcgixAAAAsBxCLAAAACyHEAsAAADLIcQCAADAcgixAAAAsBwPswsAAADAr19MTIxLxy1ZssSl42yGYRgVKQgAAAC4nrvvvtvx+ty5c9qwYYOio6Md+woKCrRq1SoVFxe71B8hFgAAANUqLS1NHTp0UG5urmPfqVOnFBAQoKKiIpf6YE4sAAAAqlXNmjV18eJFp335+fny8HB9pishtpwMw1BOTo4YyAYAACiboKAgGYahdevWOfb95z//UbNmzVzugxu7yik3N1d+fn46efKk6tSpY3Y5bsUwDBUUFEiSvLy8ZLPZTK7IfXH9AQDlUaNGDY0YMULR0dEaMGCAzp8/r3Xr1mnmzJku98Gc2HLKycmRn5+fBgwYoJo1a5pdDmCKDz74QN7e3maXAQCwoPPnz2vWrFlav369PD09deedd+rRRx9VjRquTRRgJBYAAADVrlatWpozZ065zyfEVtCM/t+pvo/ZVbiXgkKbnlzdVpL09MB98vLgjwnV6UJRDT2xqo3ZZQAALCYpKcml4yIjI106jhBbQTVrFMvLgzmBZvHyMAix1c619fuAXxvm4wMV07dvXxmGcc3/dgzDcHmdWEJsBV0o4psYALiDgoICDRkyRBLzwYHy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I0NLly7VfffdV+rcUx8fH02aNElTp07Vrl27VFRUpLffflsvvPCCbr/9dqdj77rrLi1btkwPP/xwiX66du2qu+++W9OmTXPa37lzZ0VEROj555/X0KFDrzovtry8vLyu+R/NxIkT+VN2FbPb7ZowYYLmzZtXoo3rD6DKXfGjzdvbW97e3ubV4uZ40IG11atXTzabTd9884327Nmjd955RyNHjpS3t7diYmI0ffp0l/opc9KbP3++CgoKNGDAAG3cuFHHjh3T6tWr1b9/fzVp0kRPP/30Vc996KGH9N133+mjjz7S559/rqysLN1///1q376903bPPfdcdUqBJD399NPasGGDUlNTHftsNpuWLFmi1NRU9erVS59++qkOHjyoffv2adGiRTp16lSJkHP27FllZGQ4befOnSvrJVHDhg3Vt2/fMp+HsrvtttvUsGFDp31cfwAArKl9+/Z69tlnlZaWpiFDhrg8ZVQqR4ht1aqVkpOT1aJFCw0dOlQtW7bUgw8+qD59+mjLli2qX7/+Vc+tX7++7rvvPs2cOVPx8fHq169fqVMG7rnnHiUnJ+vbb78ttZ/w8HCNGTOmxJ2h3bt3144dO9S6dWvFxsaqbdu26tmzp5YtW6a5c+c6Le0lXVr2KzAw0Gm72o1D18KC+9Xr59eb6w8AgDV98803evTRRxUSEqKPP/64TD/Ty7xOrCSFhITozTffvOYxiYmJpe4v7WEHP9e1a1enm8dKu5Hstdde02uvvVZif3h4+HVru1qf5dGjR49S161F1fH399ctt9yiL7/8UrfccgvXH27lymlNV87RBH7tvLy89MEHHzhew7p++uknGYahG264QUePHtWQIUP04Ycfqnv37mXqp1whFv/zyCOPmF2CW3r88cdLPPQAcAdXzgVkWiDcyeXH2MO6nnvuOX300UdKTk5Wjx49NGbMGA0bNky/+c1vytUfIRYALOpCUQ1JxWaX4TYuFlXuDcOAu3nxxRc1cuRIvf322woPD69wf4RYALCoJ1aV/uAZAPglOn78uOMm+6ysLB08eFA2m01hYWGqV69emfvj10oAAABUObvdrrS0NP32t79Vw4YN1b17d3Xr1k0NGzbUb3/7W/3www9l6s9m8ADicsnJyZGfn5+ys7NVp04ds8sB4CYMw3B6BDaqz5XXvk6dOpW+Hjnwa3fy5EndeOON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dWulpKQoOztbH374oUaNGqWkpCSCbDU4duyYJk2apLVr18rb29vsctzOoEGDHK87dOigbt26KSQkRO+//z7TaapBcXGxunTpomeeeUaS1LlzZ+3Zs0eLFi3SqFGjXO4nJibmuscYhqE333zTpf4YiS2jhg0bym636+TJk077T548qYCAAJOqAqrP+PHj9fnnnyshIaFMf/ZBxXl6eiosLEw33XST4uLi1LFjR7300ktml+UWduzYoczMTN14443y8PCQh4eHkpKS9PLLL8vDw0NFRUVml+hW6tatq/DwcB06dMjsUtxCYGBgiV+W27RpU+YpHdnZ2Y7txIkT+te//uW0LzMzU2+//bbL/TESW0aenp666aabtH79escNRcXFxVq/fr3Gjx9vbnFAFTIMQxMmTNDKlSuVmJio5s2bm12S2ysuLlZBQYHZZbiF2267Tbt373baFxMTo4iICD3++OOy2+0mVeae8vLydPjwYY0cOdLsUtxCr169Siyp+N133ykkJKRM/axYscLxOi0tTR06dHDad+rUqTINCBJiy2HKlCkaNWqUunTpoq5du2revHk6d+6cS8PkqJi8vDyn37zT0tKUkpKi+vXrq1mzZiZW9usXGxurd999V5988ol8fX0dc8D9/PxUq1Ytk6v79Zs+fboGDRqkZs2aKTc3V++++64SExO1Zs0as0tzC76+viXmf9euXVsNGjRgXng1mDp1qqKjoxUSEqITJ05oxowZstvtGj58uNmluYVHHnlEPXv21DPPPKOhQ4dq27ZtWrx4sRYvXlzuPmvWrKmLFy867cvPzy/b0mkGyuWVV14xmjVrZnh6ehpdu3Y1tm7danZJbiEhIcGQVGIbNWqU2aX96pV23SUZS5YsMbs0tzBmzBgjJCTE8PT0NBo1amTcdtttxhdffGF2WW4tMjLSmDRpktlluIVhw4YZgYGBhqenp9GkSRNj2LBhxqFDh8wuy6189tlnRvv27Q0vLy8jIiLCWLx4cYX6KyoqMjw9PY21a9c69i1atMgICwtzuQ/WiQUAAEC1GzNmjJYtW6YBAwbo/PnzWrdunWbOnKm//vWvLp1PiAUAAEC1O3/+vGbNmqX169fL09NTd955px599FHVqOHaugOEWAAAAFgON3YBAACgyiUlJbl0XGRkpEvHMRILAACAKme322UYhmw2m2Nfae+Li4td6o+HHQAAAKBapKamKisrS1lZWdq1a5d8fHx05swZZWVl6bvvvnMKtNfDdAIAAABUizp16qhOnTqSJB8fHxmGIT8/P0mX1oktywQBRmIBAABgOYRYAAAAVLnKvg2LEAsAbuDIkSOy2WxKSUkxuxQAburn811r1qyp0NDQax5zLYRYACiH0aNH66677nK8j4qK0uTJk02rJy0tTX/6058UFBQkb29vNW3aVIMHD9aBAwckScHBwUpPT1f79u1NqxGAe9uyZYsaNGjgeB8cHKzdu3c73vv7+ys9Pd3l/rixCwAs7uLFi+rfv79at26tFStWKDAwUMePH9eqVat09uxZSZeWtgkICDC3UABurWvXrtc9xt/f3+X+GIkFgAoaPXq0kpKS9NJLL8lms8lms+nIkSOSpD179mjQoEHy8fFR48aNNXLkSJ0+fdpxblRUlCZMmKDJkyerXr16aty4sV5//XWdO3dOMTEx8vX1VVhYmFatWnXVz9+7d68OHz6shQsXqnv37goJCVGvXr00e/Zsde/eXVLJ6QSjR4921HrllpiYKEkqKCjQ1KlT1aRJE9WuXVvdunVztAHALwEhFgAq6KWXXlKPHj00duxYpaenKz09XcHBwTp79qz69u2rzp07Kzk5WatXr9bJkyc1dOhQp/PfeustNWzYUNu2bdOECRM0btw4DRkyRD179tTOnTt1++23a+TIkfrvf/9b6uc3atRINWrU0IcffqiioiKXa75ca3p6uiZNmiR/f39FRERIksaPH68tW7Zo+fLl+vbbbzVkyBANHDhQBw8erNjFAoBKwhO7AKAcRo8erbNnz+rjjz+WdGlEtVOnTpo3b57jmNmzZ2vTpk1as2aNY9/x48cVHBys1NRUhYeHKyoqSkVFRdq0aZMkqaioSH5+frr77rv19ttvS5IyMjIUGBioLVu2OEZWf27BggV67LHHZLfb1aVLF/Xp00cjRoxQixYtJF0aiW3evLl27dqlTp06OZ27YsUKjRgxQuvWrVOvXr109OhRtWjRQkePHlVQUJDjuH79+qlr16565plnKnr5AKDCGIkFgCryzTffKCEhQT4+Po7t8kjn4cOHHcd16NDB8dput6tBgwa64YYbHPsaN24sScrMzLzqZ8XGxiojI0NLly5Vjx499MEHH6hdu3Zau3btNWvctWuXRo4cqfnz56tX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69y5c2aX5haaNm2qOXPmaMeOHUpOTlbfvn01ePBg7d271+zS3M727dv12muvqUOHDmaX4lbatWun9PR0x/bll1+aXZLbyMrKUq9evVSzZk2tWrVK+/bt0wsvvKB69epV2mf8/ClgLj0VzECZde3a1YiNjXW8LyoqMoKCgoy4uDgTq3I/koyVK1eaXYbbyszMNCQZSUlJZpfiturVq2f885//NLsMt5Kbm2u0atXKWLt2rREZGWlMmjTJ7JLcwowZM4yOHTuaXYbbevzxx41bbrml0vpr06aNcfr0acf7rKwspwx19uxZY9CgQdfth5HYMrpw4YJ27Nihfv36OfbVqFFD/fr105YtW0ysDKhe2dnZkqT69eubXIn7KSoq0vLly3Xu3Dn16NHD7HLcSmxsrO644w6nnwGoHgcPHlRQUJBatGihESNG6OjRo2aX5DY+/fRTdenSRUOGDJG/v786d+6s119/vdz97du3Tw0aNHC8r1u3rqZNm+Z47+fnp//85z/X7YcQW0anT59WUVGR4466yxo3bqyMjAyTqgKqV3FxsSZPnqxevXqpffv2ZpfjNnbv3i0fHx95eXnp4Ycf1sqVK9W2bVuzy3Iby5cv186dOxUXF2d2KW6nW7duevPNN7V69Wq9+uqrSktL06233uq4mx1V6/vvv9err76qVq1aac2aNRo3bpwmTpyot956y9S6eNgBgDKLjY3Vnj17mJNWzVq3bq2UlBRlZ2frww8/1KhRo5SUlESQrQbHjh3TpEmTtHbtWnl7e5tdjtsZNGiQ43WHDh3UrVs3hYSE6P3339f9999vYmXuobi4WF26dNEzzzwjSercubP27NmjRYsWadSoUabVxUhsGTVs2FB2u10nT5502n/y5EkFBASYVBVQfcaPH6/PP/9cCQkJatq0qdnluBVPT0+FhYXppptuUlxcnDp27KiXXnrJ7LLcwo4dO5SZmakbb7xRHh4e8vDwUFJSkl5++WV5eHhcdz1LVK66desqPDxchw4dMrsUtxAYGFjil+U2bdqYPqWDEFtGnp6euummm7R+/XrHvuLiYq1fv565afhVMwxD48eP18qVK7VhwwY1b97c7JLcXnFxsQoKCswuwy3cdttt2r17t1JSUhxbly5dNGLECKWkpMhut5tdolvJy8vT4cOHFRgYaHYpbqFXr14lllT87rvvFBIS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0blz5zRy5Eh5enpaXffwww8rMTFRTz31VJntTJ8+XW3btrXqNTWZTFq0aJF69+6t8PBwTZ48Wa1bt9aVK1e0fv16nTp1Smaz2aqd8+fPKzs72+qYh4eH6tSpU97HAgAAABts2bJFnTt3LnX82qQBx48fV1xcnNasWXPDdso9JrZVq1ZKT09XQECAHn30UbVs2VJPPvmkoqKitGnTJsscsWWpX7++HnvsMU2dOlWJiYnq1atXqQArXQ2x6enp+uGHH8psJygoSCNGjNClS5esjnfr1k3btm1TcHCw4uPj1aZNG3Xv3l1LlizRW2+9VWp+2ri4OPn4+Fhts2fPLu8jAQAAgI3KCrDXfPjhh2rfvn2pjseymAwWgK6QvLw8eXp6auubfmpwO0vPwnkUFpk08V9tJUmvP7Bbbi78FgLncOmKSc/+++qv/U8//bTUVJMAKu7UqVMaNWqUvvnmG73xxht64oknbnpPuYcTwNqVkhoqLLr5dcBvRWGRqczPwG/dlZL//8fLW5l3HHB2v159taioSO+++67atWunnTt3ys/Pz6Z2CLG36OU1QapZs6a9ywDs4sVVbexdAgDAwXz55ZdW+0VFRTp37pwGDRpkc4CVCLEAAACoRt9//32pY1999ZWeeOIJff7550pMTFSLFi1u2g5jYivo2pjYkydPMmcsnIphGCosLJR0df5k/lkVzohf+0DlO3v2rEaNGqVVq1bptdde0x//+McbXk+IraBrITY3N5cQCwAAUEk++eQTxcfH69y5cze8rkLLzgIA4GwMw9ClS5d06dIlm5dfB1B+/fv3v+E0XNcQYgEAsEFhYaEGDx6swYMHW4bUAKh8Fy9e1Nq1a296HSEWAAAb/HKBnV8vtgOg+hFiAQAA4HCYYgsAABuUlJSU+RlA+ZjN5koZV06IBQDABvn5+Vaf69evb8dqAMe1cuXKG57Pzc1VbGzsTdup8uEECxYskIeHh4qK/n9t1oKCAtWsWVORkZFW16akpMhkMunw4cPy9/fXrFmzSrU3depUdezYscx9f39/mUym627Dhw+XpOueX7p0aSX/9AAAAPilBx988IZbnz59bGqnyntio6KiVFBQoPT0dHXr1k2StGHDBnl7e2vLli26dOmSatWqJUlKTk5W8+bN1bJlywp919atW1VcXCxJ+u677/Twww9r//79lnlca9eu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xAIAAKDKff7555bPx44dU2RkpK5cuaKgoCDNnDmz3O0xJhYAAADV5vjx44qMjFSTJk20du1azZ8/X3/961/L3Q49sQAAAKgWJ06cUFRUlHx9fZWUlKQ6deroyy+/1P3336/69evr8ccft7ktQiwAAACqXFZWliIjI9W4cWOtWrVKderUkSRFRkZqyZIlGjJkiOrWratHHnnEpvZMhmEYVVkwAAAAEBISIi8vL61evVru7u6lzn/44YcaNWqULl68aFN79MQCAACgynl5eWnVqlVlBlhJeuyxx3TmzBmb26MnFgAAAFWuoKDgugG2IgixAAAAqHK2LHZgGIY++OADm9ojxAIAAKDKDRo06LrniouL9c033+jixYsqKSmxqT3GxAIAAKDK/XKxg1/68ssv9cILL6hWrVqaMmWKze2x2AEAAACq3YYNG9S9e3dFR0frgQce0I8//qjnnnvO5vsJsQAAAKg2u3btUv/+/XXvvfeqbdu2OnTokF577TV5enqWqx1CLAAAAKrcTz/9pNjYWHXs2FEuLi7auXOn3nvvPfn6+laoPV7sAgAAQJWrVauWatSooaefflphYWHXvW7AgAE2tUeIBQAAQJVzcXHRzWKnYRg2z05AiAUAAIDDYUwsAAAAHA7zxAIAAKDa7NmzR/v371deXl6Z52NjY21qh+EEAAAAqHJ5eXl69NFHtWbNGrm4uKhOnTqlrjEMQ+fOnbOpPXpiAQAAUOWmTJminJwcbdu2TR07drzl9uiJBQAAQJULCgrSggUL1LNnz0ppjxe7AAAAUOVOnDihgICASmuPEAsAAIAq17RpU+3bt6/S2mNMLAAAAKrcoEGDNGHCBLm6uurOO++Up6fnLbXHmFgAAABUuf/+97964okntHTp0huu3MWKXQAAAPifk5WVpQMHDig3N7fM8w8++KBN7RBiK8gwDOXn58vDw0Mmk8ne5QAAADgVxsRWUH5+vjw9PZWbm6vbb7/d3uUAAAA4hLS0NH3yySc6cOCATCaTAgMDFRMToy5dupSrHWYnAADABoZh6NKlS7p06dINx/MBuL5JkyYpLCxMixYtUlZWlk6cOKEPPvhA3bp104svvliutgixAADYoLCwUIMHD9bgwYNVWFho73IAh7N8+XK9+eabmjVrls6ePavt27dr+/btOnv2rN555x399a9/1YoVK2xujxAL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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "palette = {\n", + " 'ORANGE': 'orange',\n", + " 'WHITE': 'wheat',\n", + "}\n", + "# We need the encoded Item Size column to use it as the x-axis values in the plot\n", + "pumpkins['Item Size'] = encoded_pumpkins['ord__Item Size']\n", + "\n", + "g = sns.catplot(\n", + " data=pumpkins,\n", + " x=\"Item Size\", y=\"Color\", row='Variety',\n", + " kind=\"box\", orient=\"h\",\n", + " sharex=False, margin_titles=True,\n", + " height=1.8, aspect=4, palette=palette,\n", + ")\n", + "# Defining axis labels \n", + "g.set(xlabel=\"Item Size\", ylabel=\"\").set(xlim=(0,6))\n", + "g.set_titles(row_template=\"{row_name}\")\n" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "import warnings\n", + "warnings.filterwarnings(action='ignore', category=UserWarning, module='seaborn')" + ] + }, + { + "cell_type": "code", + "execution_count": 37, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 37, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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CqaZPpI33vSZxDsgvoKetmSb8564Msty4KSbTd+ceqvpq4mOtO+mlXfot8hxzVc4Bds/wvWak12GJ38sntwKPMEaV8zy5OArPgXL8eMrnu7uY5aDr3h6T+wUrH53nj3BGjy5lXjyx+JkuxMk2z/C1MUXxFs4BdcwZvvwl8zEth18JTP73VW18BZMwgkcTn+WTKLJtAN5sBA4EP/3ZTHY+yo0vw/BE6Fotvv97Tuhfo1Z4lm+xD3Yh9th99PmmX/F2e5lubEYND5vJoYWznIvywWz1HXvBjOAlJ4RX2IMZqnr7lVmOXP5Oe5ludEw1D9rlimXLHQvywXY/0bP8uQTzMqbRB11ZvmtN2jKTVhmSKTTtCXcZu7uJC7LBWh8CVo3mzsMBVPdsZYtsOcls/y1bLF7sO9uNuUCVJzjHuxjUVOfjjoonu9elgtw4O348uSSfglGZyPU/dEkPxXnuO/eRLrMSqTuJlOfrH7fGvesjy9PLux3l6p1mzlvgRKz9DthySTdrWZuSDRsznfiYB+LmWXN7bVQNM+9pByg6f348uSShe7zHdpnzrcTMG1JfDQW7Ya6Z8zy5LIz3IkLHNu+mzjhXJNoP1UinfuJdbdh+/Oxfe7rbrS7jWjnfiwngJ1V5FpdE4t2E2k3q4Kc7GKshD5mljbvJRbpxA4UYvdLXKJdzURDTVje7KQlxrFIiEjHHrAcnKySnkdGveVGibQ3QjSMk1WE5RngEap8rI6bVT+tra1s3rwZgOnTp/ODH/yA008/ncLCQkaNGnXI7Yc8UREREZFj7rhZ9fPaa69x+unxX0p1/fXXA3DllVdy//33D1OtREREJFMMa6KyaNEiMuTJk4iIiGSg42oyrYiIiHy6KFERERGRjKVERURERDKWEhURERHJWEpUREREJGMpUREREZGMpURFREREMpYSFREREclYSlREREQkYylRERERkYylREVEREQylhIVERERyVhKVERERCRjKVERERGRjKVERURERDKWEhURERHJWEpUREREJGMpUREREZGMpURFREREMpYSFREREclYSlREREQkYylRERERkYylREVEREQylhIVERERyVhKVERERCRjKVERERGRjKVERURERDKWEhURERHJWEpUREREJGMpUREREZGMpURFREREMpYSFREREclYSlREREQkYylRERERkYylREVE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txPt3Ifl+HvakniMwj3HKNZzjNKd7wLXknLTlpae5cnpzndj2rZEO/YQi3RjZ410LSkHjmnfTVwVd6wn0fY6rlb9PPzww1x55ZX8/Oc/Z/bs2dx111088sgj/OUvf0mau9LfkCcqIiIicswdN6t+AC6++GL27NnDv/zLv1BfX8+0adNYtWrVIZMUERER+eQb9jsqR0N3VERERI4/gxm/j6tVPyIiIvLpokRFREREMpYSFREREclYSlREREQkYylRERERkYylREVEREQylhIVERERyVhKVERERCRjKVERERGRjDXsv0L/aPT+Ut3m5uZhromIiIgcrt5x+3B+Of5xnai0tLQAUF1dfYh3ioiISKZpaWkhPz9/wPcc13/rJxqNsnv3bvLy8lx/Kls+mZqbm6murqa2tlZ/20nkE0af70+XWCxGS0sLFRUV2PbAs1CO6zsqtm1TVVU13NWQj1kwGNSFTOQTSp/vT49D3Unppcm0IiIikrGUqIiIiEjGUqIixw2/38/NN9+M3+8f7qqIyDGmz7ekc1xPphUREZFPNt1RERERkYylREVEREQylhIVERERyVhKVERERCRjKVGR48aKFSuoqakhEAgwZ84cXn311eGukogcpRdeeIFzzz2XiooKLMviiSeeGO4qSYZRoiLHhYcffpjrr7+em2++mTfeeINTTjmFJUuW0NjYONxVE5Gj0NbWximnnMKKFSuGuyqSobQ8WY4Lc+bMYdasWdx9992A+TtP1dXVLFu2jBtvvHGYaycix4JlWTz++ON84QtfGO6qSAbRHRXJeF1dXbz++ussXry47zXbtlm8eDHr168fxpqJiMhQU6IiGW/v3r1EIhFKS0tdr5eWllJfXz9MtRIRkY+DEhURERHJWEpUJOMVFRXhOA4NDQ2u1xsaGigrKxumWomIyMdBiYpkPJ/Px8yZM1m9enXfa9FolNWrVzNv3rxhrJmIiAw1z3BXQORwXH/99Vx55ZWceuqpzJ49m7vuuou2tjauvvrq4a6aiByF1tZWNm/e3PfvrVu38tZbb1FYWMioUaOGsWaSKbQ8WY4bd999N8uXL6e+vp5p06bx4x//mDlz5gx3tUTkKKxbt47TTz896fUrr7yS+++//+OvkGQcJSoiIiKSsTRHRURERDKWEhURERHJWEpUREREJGMpUREREZGMpURFREREMpYSFREREclYSlREREQkYylRERERkYylREVEMtott9zCtGnThrsaIjJMlKiIyJCqr69n2bJljB07Fr/fT3V1Neeee67rj0yKiKSjP0ooIkNm27ZtnHbaaYwYMYLly5dz8skn093dzTPPPMN1113HX/7yl4+lHt3d3Xi93o9lXyJybOmOiogMmWuvvRbLsnj11Ve58MILmThxIlOmTOH6669nw4YNAOzYsYPzzz+f3NxcgsEgF110EQ0NDWnLjEaj3HrrrVRVVeH3+5k2bRqrVq3qi2/btg3Lsnj44YdZuHAhgUCABx54YMjbKiJDQ4mKiAyJ/fv3s2rVKq677jpycnKS4iNGjCAajXL++eezf/9+nn/+eZ599lk++ugjLr744rTl/uhHP+L73/8+d955J2+//TZLlizhvPPO48MPP3S978Ybb+Tb3/42mzZtYsmSJce8fSLy8dCjHxEZEps3byYWizFp0qS071m9ejXvvPMOW7dupbq6GoBf//rXTJkyhY0bNzJr1qykbe68806++93vcskllwBwxx13sHbtWu666y5WrFjR976///u/54ILLjjGrRKRj5vuqIjIkIjFYod8z6ZNm6iuru5LUgBOPPFERowYwaZNm5Le39zczO7duznttNNcr5922mlJ7z/11FOPsOYikkmUqIjIkJgwYQKWZX1sE2b7S/W4SUSOP0pURGRIFBYWsmTJElasWEFbW1tS/ODBg0yePJna2lpqa2v7Xn///fc5ePAgJ554YtI2wWCQiooKXn75ZdfrL7/8csr3i8jxT3NURGTIrFixgtNOO43Zs2dz6623MnXqVMLhMM8++yz33HMP77//PieffDKXX345d911F+FwmGuvvZaFCxemfXRzww03cPPNNzNu3DimTZvGfffdx1tvvaWVPSKfUEpURGTIjB07ljfeeIN///d/5zvf+Q51dXUUFxczc+ZM7rnnHizL4sknn2TZsmV89rOfxbZtzj77bH7yk5+kLfNb3/oWTU1NfOc736GxsZETTzyRlStXMmHChI+xZSLycbFihzPjTURERGQYaI6KiIiIZCwlKiIiIpKxlKiIiIhIxlKiIiIiIhlLiYqIiIhkLCUqIiIikrGUqIiIiEjGUqIiIiIiGUuJioiIiGQsJSoiIiKSsZSoiIiISMb6/wHCnL2DXQSZ/gAAAABJRU5ErkJggg==", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# Suppressing warning message claiming that a portion of points cannot be placed into the plot due to the high number of data points\n", + "import warnings\n", + "warnings.filterwarnings(action='ignore', category=UserWarning, module='seaborn')\n", + "\n", + "palette = {\n", + " 0: 'orange',\n", + " 1: 'wheat'\n", + "}\n", + "sns.swarmplot(x=\"Color\", y=\"ord__Item Size\", hue=\"Color\", data=encoded_pumpkins, palette=palette)" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Atenção**: Ignorar avisos NÃO é uma boa prática e deve ser evitado sempre que possível. Avisos geralmente contêm mensagens úteis que nos permitem melhorar nosso código e resolver um problema. \n", + "O motivo pelo qual estamos ignorando este aviso específico é para garantir a legibilidade do gráfico. Plotar todos os pontos de dados com um tamanho de marcador reduzido, mantendo a consistência com a paleta de cores, gera uma visualização pouco clara.\n" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [] + }, + { + "cell_type": "code", + "execution_count": 74, + "metadata": {}, + "outputs": [], + "source": [ + "from sklearn.model_selection import train_test_split\n", + "# X is the encoded features\n", + "X = encoded_pumpkins[encoded_pumpkins.columns.difference(['Color'])]\n", + "# y is the encoded label\n", + "y = encoded_pumpkins['Color']\n", + "\n", + "# Split the data into training and test sets\n", + "X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0)" + ] + }, + { + "cell_type": "code", + "execution_count": 75, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + " precision recall f1-score support\n", + "\n", + " 0 0.94 0.98 0.96 166\n", + " 1 0.85 0.67 0.75 33\n", + "\n", + " accuracy 0.92 199\n", + " macro avg 0.89 0.82 0.85 199\n", + "weighted avg 0.92 0.92 0.92 199\n", + "\n", + "Predicted labels: [0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 0\n", + " 0 0 0 0 0 1 0 1 0 0 1 0 0 0 0 0 1 0 1 0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0\n", + " 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 0 1 0 0 0 0 0 0 0 1 0\n", + " 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 1 1 0\n", + " 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1\n", + " 0 0 0 1 0 0 0 0 0 0 0 0 1 1]\n", + "F1-score: 0.7457627118644068\n" + ] + } + ], + "source": [ + "from sklearn.metrics import f1_score, classification_report \n", + "from sklearn.linear_model import LogisticRegression\n", + "\n", + "# Train a logistic regression model on the pumpkin dataset\n", + "model = LogisticRegression()\n", + "model.fit(X_train, y_train)\n", + "predictions = model.predict(X_test)\n", + "\n", + "# Evaluate the model and print the results\n", + "print(classification_report(y_test, predictions))\n", + "print('Predicted labels: ', predictions)\n", + "print('F1-score: ', f1_score(y_test, predictions))" + ] + }, + { + "cell_type": "code", + "execution_count": 76, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([[162, 4],\n", + " [ 11, 22]])" + ] + }, + "execution_count": 76, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "from sklearn.metrics import confusion_matrix\n", + "confusion_matrix(y_test, predictions)" + ] + }, + { + "cell_type": "code", + "execution_count": 77, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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EBoaii1btkAul78xCtOzZ0+cOHECYWFhb2z//PlzZGVlafSaRKaAV/IkMgHZV/I8ffq0+hBJtm3btqFHjx5Yvnw5hgwZAuDVYQYfHx/89ttvaNmyJbp37w5ra2scPXoUGzduRPXq1REREZHjSp4qlQpffPEFNmzYgPr166uv5BkXF4edO3fi1KlTOH78OJo0aZJnzidPnqBdu3Y4d+4cvLy80KZNG9ja2uKff/7Bli1bEBsbi/T0dACvzjqpWbMm6tSpg/79++Px48dYsWIFSpYsicTERPUpuHfu3EGFChUwf/78HAXldZs2bcLnn38Oe3t7uLm5qU+ZzZaSkoIWLVrg/Pnz+OKLL9CgQQMkJyfjwoUL2LZtG+7cuZPjkAoRgVfyJDIFeV1oSwghlEqlqFSpkqhUqVKOi2QplUrxyy+/iGbNmgkHBwehUCjExx9/LGbMmCFevnyZ52tt27ZNtGvXThQrVkxYWFiI0qVLCx8fHxEVFZWvrCkpKWLBggXik08+EXZ2dkIul4vKlSuLkSNHihs3buRYd+PGjaJixYpCLpeLunXrirCwsLdeaCsviYmJwtraWgAQGzduzHWdpKQkMWnSJPHRRx8JuVwunJycRNOmTcWCBQtERkZGvt4bkSnhCAYRERFpHedgEBERkdaxYBAREZHWsWAQERGR1rFgEBERkdaxYBAREZHWsWAQERGR1pncvUhUKhUePXoEe3t7yGQyqeMQEREZDCEEkpKSUKZMGZiZvX2MwuQKxqNHj+Ds7Cx1DCIiIoN1//59lCtX7q3rmFzByL699P3799W3hyYiIqJ3S0xMhLOzs/p36duYXMHIPizi4ODAgkFERFQA+ZliwEmeREREpHUsGERERKR1LBhERESkdSwYREREpHUsGERERKR1LBhERESkdSwYREREpHUsGERERKR1LBhERESkdSwYREREpHUsGERERKR1LBhERESkdSwYREREpHUsGERERKR1khaMw4cPw8vLC2XKlIFMJsPOnTvfuU1UVBTq168PKysrfPTRRwgODtZ5TiIiItKMpAUjOTkZderUQVBQUL7Wv337Njp27IhWrVohJiYGX331FQYMGICwsDAdJyUiIiJNWEj54u3bt0f79u3zvf6KFStQoUIFLFy4EABQvXp1HD16FIsXL4aHh4euYhoVIQSi7z3Dk6R0qaMQEVEh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isTERGRlZSEtLQ0pKSmwsbF543kCAgIwYMAAbNiwQT3MX6lSJQCvDp+cP38emzZtUq8vhIBKpcLt27dRvXr1XLO9ePECdnZ2UKlUSEtLQ/PmzbF69WokJibi0aNHaNasWY71mzVrhnPnzgF4dXijbdu2qFq1Kjw9PdGpUye0a9fuvfZV3759MXDgQCxbtgxWVlbYtGkTevXqBTMzM/X7PHbsWI4RC6VS+db9BgBVq1bFrl27kJaWho0bNyImJgYjR47MsU5QUBDWrl2Le/fuITU1FRkZGahbt+5b8547dw43btyAvb19juVpaWm4efNmAfYAkf5hwSDSU7a2tvjoo49yLLtz5w46deqEoUOH4ttvv0WxYsVw9OhR9O/fHxkZGbn+opw+fTr69OmDPXv2YN++fQgMDMSWLVvQtWtXvHz5EoMHD8aoUaPe2K58+fJ5ZrO3t0d0dDTMzMxQunRpWFtbAwASExPf+b7q16+P27dvY9++fQgPD0fPnj3h7u6Obdu2vXPbvHh5eUEIgT179uCTTz7BkSNHsHjxYvXXX758iRkzZqBbt25vbKtQKPJ8Xrlcrv5/MG/ePHTs2BEzZszArFmzAABbtmzBuHHjsHDhQjRp0gT29vaYP38+/vrrr7fmffnyJRo0aJCj2GXTl4m8RO+LBYPIgJw5cwYqlQoLFy5U/3Wefbz/bapUqYIqVapgzJgx6N27N3755Rd07doV9evXx+XLl98oMu9iZmaW6zYODg4oU6YMjh07BldXV/XyY8eOoVGjRjnW8/HxgY+PDz777DN4enri6dOnKFasWI7ny57voFQq35pHoVCgW7du2LRpE27cuIGqVauifv366q/Xr18f165d0/h9/teUKVPQunVrDB06VP0+mzZtimHDhqnX+e8IhFwufyN//fr1ERISghIlSsDBweG9MhHpK07yJDIgH330ETIzM7F06VLcunULGzZswIoVK/JcPzU1FSNGjEBUVBTu3r2LY8eO4fTp0+pDHxMmTMDx48cxYsQIxMTE4J9//sHvv/+u8STP13399df47rvvEBISgmvXrmHixImIiYnB6NGjAQCLFi3Cr7/+iqtXr+L69evYunUrSpUqlevFwUqUKAFra2vs378f8fHxePHiRZ6v27dvX+zZswdr165VT+7MNm3aNKxfvx4zZszApUuXcOXKFWzZsgVTpkzR6L01adIEtWvXxpw5cwAAlStXxt9//42wsDBcv34dU6dOxenTp3Ns4+LigvPnz+PatWtISEhAZmYm+vbtCycnJ3Tp0gVHjhzB7du3ERUVhVGjRuHBgwcaZSLSW1JPAiGiN+U2MTDbokWLROnSpYW1tbXw8PAQ69evFwDEs2fPhBA5J2Gmp6eLXr16CWdnZyGXy0WZMmXEiBEjckzgPHXqlGjbtq2ws7MTtra2onbt2m9M0nzdfyd5/pdSqRTTp08XZcuWFZaWlqJOnTpi37596q+vXLlS1K1bV9ja2goHBwfRpk0bER0drf46XpvkKYQQq1atEs7OzsLMzEy4urrmuX+USqUoXbq0ACBu3rz5Rq79+/eLpk2bCmtra+Hg4CAaNWokVq5cmef7CAwMFHXq1Hlj+a+//iqsrKzEvXv3RFpamvjiiy+Eo6OjKFKkiBg6dKiYOHFiju0eP36s3r8ARGRkpBBCiNjYWOHr6yucnJyElZWVqFixohg4cKB48eJFnpmIDIlMCCGkrThERERkbHiIhIiIiLSOBYOIiIi0jgWDiIiItI4Fg4iIiLSOBYOIiIi0jgWDiIiItI4Fg4iIiLSOBYOIiIi0jgWDiIiItI4Fg4iIiLSOBYOIiIi07v8A1k+hWenkwRsAAAAASUVORK5CYII=", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "from sklearn.metrics import roc_curve, roc_auc_score\n", + "import matplotlib\n", + "import matplotlib.pyplot as plt\n", + "%matplotlib inline\n", + "\n", + "y_scores = model.predict_proba(X_test)\n", + "# calculate ROC curve\n", + "fpr, tpr, thresholds = roc_curve(y_test, y_scores[:,1])\n", + "\n", + "# plot ROC curve\n", + "fig = plt.figure(figsize=(6, 6))\n", + "# Plot the diagonal 50% line\n", + "plt.plot([0, 1], [0, 1], 'k--')\n", + "# Plot the FPR and TPR achieved by our model\n", + "plt.plot(fpr, tpr)\n", + "plt.xlabel('False Positive Rate')\n", + "plt.ylabel('True Positive Rate')\n", + "plt.title('ROC Curve')\n", + "plt.show()" + ] + }, + { + "cell_type": "code", + "execution_count": 78, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "0.9749908725812341\n" + ] + } + ], + "source": [ + "# Calculate AUC score\n", + "auc = roc_auc_score(y_test,y_scores[:,1])\n", + "print(auc)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n---\n\n**Aviso Legal**: \nEste documento foi traduzido utilizando o serviço de tradução por IA [Co-op Translator](https://github.com/Azure/co-op-translator). Embora nos esforcemos para garantir a precisão, esteja ciente de que traduções automatizadas podem conter erros ou imprecisões. O documento original em seu idioma nativo deve ser considerado a fonte autoritativa. Para informações críticas, recomenda-se a tradução profissional realizada por humanos. Não nos responsabilizamos por quaisquer mal-entendidos ou interpretações equivocadas decorrentes do uso desta tradução.\n" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.8.16" + }, + "metadata": { + "interpreter": { + "hash": "70b38d7a306a849643e446cd70466270a13445e5987dfa1344ef2b127438fa4d" + } + }, + "orig_nbformat": 2, + "vscode": { + "interpreter": { + "hash": "949777d72b0d2535278d3dc13498b2535136f6dfe0678499012e853ee9abcab1" + } + }, + "coopTranslator": { + "original_hash": "ef50cc584e0b79412610cc7da15e1f86", + "translation_date": "2025-08-29T22:58:37+00:00", + "source_file": "2-Regression/4-Logistic/solution/notebook.ipynb", + "language_code": "br" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} \ No newline at end of file diff --git a/translations/pt-BR/2-Regression/README.md b/translations/pt-BR/2-Regression/README.md new file mode 100644 index 000000000..4cc94062e --- /dev/null +++ b/translations/pt-BR/2-Regression/README.md @@ -0,0 +1,45 @@ +# Modelos de regressão para aprendizado de máquina +## Tópico regional: Modelos de regressão para preços de abóboras na América do Norte 🎃 + +Na América do Norte, as abóboras são frequentemente esculpidas em rostos assustadores para o Halloween. Vamos descobrir mais sobre esses vegetais fascinantes! + +![jack-o-lanterns](../../../translated_images/pt-BR/jack-o-lanterns.181c661a9212457d.webp) +> Foto de Beth Teutschmann no Unsplash + +## O que você vai aprender + +[![Introdução à Regressão](https://img.youtube.com/vi/5QnJtDad4iQ/0.jpg)](https://youtu.be/5QnJtDad4iQ "Vídeo de introdução à regressão - Clique para assistir!") +> 🎥 Clique na imagem acima para um vídeo rápido de introdução a esta lição + +As lições desta seção abordam os tipos de regressão no contexto do aprendizado de máquina. Os modelos de regressão podem ajudar a determinar o _relacionamento_ entre variáveis. Esse tipo de modelo pode prever valores como comprimento, temperatura ou idade, revelando assim relações entre variáveis enquanto analisa pontos de dados. + +Nesta série de lições, você descobrirá as diferenças entre regressão linear e logística, e quando deve preferir uma em vez da outra. + +[![ML para iniciantes - Introdução aos modelos de regressão para aprendizado de máquina](https://img.youtube.com/vi/XA3OaoW86R8/0.jpg)](https://youtu.be/XA3OaoW86R8 "ML para iniciantes - Introdução aos modelos de regressão para aprendizado de máquina") + +> 🎥 Clique na imagem acima para um vídeo curto apresentando os modelos de regressão. + +Neste grupo de lições, você será preparado para começar tarefas de aprendizado de máquina, incluindo a configuração do Visual Studio Code para gerenciar notebooks, o ambiente comum para cientistas de dados. Você descobrirá o Scikit-learn, uma biblioteca para aprendizado de máquina, e construirá seus primeiros modelos, com foco nos modelos de regressão neste capítulo. + +> Existem ferramentas úteis de baixo código que podem ajudá-lo a aprender sobre o trabalho com modelos de regressão. Experimente [Azure ML para esta tarefa](https://docs.microsoft.com/learn/modules/create-regression-model-azure-machine-learning-designer/?WT.mc_id=academic-77952-leestott) + +### Lições + +1. [Ferramentas do ofício](1-Tools/README.md) +2. [Gerenciando dados](2-Data/README.md) +3. [Regressão linear e polinomial](3-Linear/README.md) +4. [Regressão logística](4-Logistic/README.md) + +--- +### Créditos + +"ML com regressão" foi escrito com ♥️ por [Jen Looper](https://twitter.com/jenlooper) + +♥️ Contribuidores do quiz incluem: [Muhammad Sakib Khan Inan](https://twitter.com/Sakibinan) e [Ornella Altunyan](https://twitter.com/ornelladotcom) + +O conjunto de dados de abóboras foi sugerido por [este projeto no Kaggle](https://www.kaggle.com/usda/a-year-of-pumpkin-prices) e seus dados são provenientes dos [Relatórios Padrão dos Mercados de Culturas Especiais](https://www.marketnews.usda.gov/mnp/fv-report-config-step1?type=termPrice) distribuídos pelo Departamento de Agricultura dos Estados Unidos. Adicionamos alguns pontos relacionados à cor com base na variedade para normalizar a distribuição. Esses dados estão em domínio público. + +--- + +**Aviso Legal**: +Este documento foi traduzido utilizando o serviço de tradução por IA [Co-op Translator](https://github.com/Azure/co-op-translator). Embora nos esforcemos para garantir a precisão, esteja ciente de que traduções automatizadas podem conter erros ou imprecisões. O documento original em seu idioma nativo deve ser considerado a fonte autoritativa. Para informações críticas, recomenda-se a tradução profissional realizada por humanos. Não nos responsabilizamos por quaisquer mal-entendidos ou interpretações equivocadas decorrentes do uso desta tradução. \ No newline at end of file diff --git a/translations/pt-BR/3-Web-App/1-Web-App/README.md b/translations/pt-BR/3-Web-App/1-Web-App/README.md new file mode 100644 index 000000000..1e9c3ce01 --- /dev/null +++ b/translations/pt-BR/3-Web-App/1-Web-App/README.md @@ -0,0 +1,350 @@ +# Construa um Aplicativo Web para Usar um Modelo de ML + +Nesta lição, você irá treinar um modelo de ML em um conjunto de dados que é fora deste mundo: _avistamentos de OVNIs ao longo do último século_, obtidos do banco de dados do NUFORC. + +Você aprenderá: + +- Como 'pickle' um modelo treinado +- Como usar esse modelo em um aplicativo Flask + +Continuaremos utilizando notebooks para limpar os dados e treinar nosso modelo, mas você pode levar o processo um passo adiante explorando o uso de um modelo "na prática", por assim dizer: em um aplicativo web. + +Para fazer isso, você precisa construir um aplicativo web usando Flask. + +## [Quiz pré-aula](https://ff-quizzes.netlify.app/en/ml/) + +## Construindo um aplicativo + +Existem várias maneiras de construir aplicativos web para consumir modelos de aprendizado de máquina. Sua arquitetura web pode influenciar a forma como seu modelo é treinado. Imagine que você está trabalhando em uma empresa onde o grupo de ciência de dados treinou um modelo que eles querem que você use em um aplicativo. + +### Considerações + +Há muitas perguntas que você precisa fazer: + +- **É um aplicativo web ou um aplicativo móvel?** Se você está construindo um aplicativo móvel ou precisa usar o modelo em um contexto de IoT, você pode usar [TensorFlow Lite](https://www.tensorflow.org/lite/) e utilizar o modelo em um aplicativo Android ou iOS. +- **Onde o modelo ficará armazenado?** Na nuvem ou localmente? +- **Suporte offline.** O aplicativo precisa funcionar offline? +- **Qual tecnologia foi usada para treinar o modelo?** A tecnologia escolhida pode influenciar as ferramentas que você precisa usar. + - **Usando TensorFlow.** Se você está treinando um modelo usando TensorFlow, por exemplo, esse ecossistema oferece a capacidade de converter um modelo TensorFlow para uso em um aplicativo web usando [TensorFlow.js](https://www.tensorflow.org/js/). + - **Usando PyTorch.** Se você está construindo um modelo usando uma biblioteca como [PyTorch](https://pytorch.org/), você tem a opção de exportá-lo no formato [ONNX](https://onnx.ai/) (Open Neural Network Exchange) para uso em aplicativos web JavaScript que podem usar o [Onnx Runtime](https://www.onnxruntime.ai/). Essa opção será explorada em uma lição futura para um modelo treinado com Scikit-learn. + - **Usando Lobe.ai ou Azure Custom Vision.** Se você está usando um sistema de ML SaaS (Software como Serviço) como [Lobe.ai](https://lobe.ai/) ou [Azure Custom Vision](https://azure.microsoft.com/services/cognitive-services/custom-vision-service/?WT.mc_id=academic-77952-leestott) para treinar um modelo, esse tipo de software oferece maneiras de exportar o modelo para várias plataformas, incluindo a construção de uma API personalizada para ser consultada na nuvem pelo seu aplicativo online. + +Você também tem a oportunidade de construir um aplicativo web Flask completo que seria capaz de treinar o modelo diretamente em um navegador web. Isso também pode ser feito usando TensorFlow.js em um contexto JavaScript. + +Para nossos propósitos, já que estamos trabalhando com notebooks baseados em Python, vamos explorar os passos necessários para exportar um modelo treinado de um notebook para um formato legível por um aplicativo web construído em Python. + +## Ferramenta + +Para esta tarefa, você precisa de duas ferramentas: Flask e Pickle, ambas executadas em Python. + +✅ O que é [Flask](https://palletsprojects.com/p/flask/)? Definido como um 'micro-framework' por seus criadores, Flask fornece os recursos básicos de frameworks web usando Python e um mecanismo de templates para construir páginas web. Confira [este módulo de aprendizado](https://docs.microsoft.com/learn/modules/python-flask-build-ai-web-app?WT.mc_id=academic-77952-leestott) para praticar a construção com Flask. + +✅ O que é [Pickle](https://docs.python.org/3/library/pickle.html)? Pickle 🥒 é um módulo Python que serializa e desserializa uma estrutura de objeto Python. Quando você 'pickle' um modelo, você serializa ou achata sua estrutura para uso na web. Cuidado: pickle não é intrinsecamente seguro, então tenha cuidado se for solicitado a 'despickle' um arquivo. Um arquivo pickled tem o sufixo `.pkl`. + +## Exercício - limpe seus dados + +Nesta lição, você usará dados de 80.000 avistamentos de OVNIs, coletados pelo [NUFORC](https://nuforc.org) (Centro Nacional de Relatórios de OVNIs). Esses dados têm algumas descrições interessantes de avistamentos de OVNIs, por exemplo: + +- **Descrição longa de exemplo.** "Um homem emerge de um feixe de luz que brilha em um campo gramado à noite e corre em direção ao estacionamento da Texas Instruments". +- **Descrição curta de exemplo.** "as luzes nos perseguiram". + +A planilha [ufos.csv](../../../../3-Web-App/1-Web-App/data/ufos.csv) inclui colunas sobre a `cidade`, `estado` e `país` onde o avistamento ocorreu, o `formato` do objeto e sua `latitude` e `longitude`. + +No [notebook](../../../../3-Web-App/1-Web-App/notebook.ipynb) em branco incluído nesta lição: + +1. Importe `pandas`, `matplotlib` e `numpy` como você fez em lições anteriores e importe a planilha de OVNIs. Você pode dar uma olhada em um conjunto de dados de amostra: + + ```python + import pandas as pd + import numpy as np + + ufos = pd.read_csv('./data/ufos.csv') + ufos.head() + ``` + +1. Converta os dados de OVNIs para um pequeno dataframe com títulos novos. Verifique os valores únicos no campo `Country`. + + ```python + ufos = pd.DataFrame({'Seconds': ufos['duration (seconds)'], 'Country': ufos['country'],'Latitude': ufos['latitude'],'Longitude': ufos['longitude']}) + + ufos.Country.unique() + ``` + +1. Agora, você pode reduzir a quantidade de dados com que precisamos lidar, descartando quaisquer valores nulos e importando apenas avistamentos entre 1-60 segundos: + + ```python + ufos.dropna(inplace=True) + + ufos = ufos[(ufos['Seconds'] >= 1) & (ufos['Seconds'] <= 60)] + + ufos.info() + ``` + +1. Importe a biblioteca `LabelEncoder` do Scikit-learn para converter os valores de texto dos países em números: + + ✅ LabelEncoder codifica dados alfabeticamente + + ```python + from sklearn.preprocessing import LabelEncoder + + ufos['Country'] = LabelEncoder().fit_transform(ufos['Country']) + + ufos.head() + ``` + + Seus dados devem se parecer com isto: + + ```output + Seconds Country Latitude Longitude + 2 20.0 3 53.200000 -2.916667 + 3 20.0 4 28.978333 -96.645833 + 14 30.0 4 35.823889 -80.253611 + 23 60.0 4 45.582778 -122.352222 + 24 3.0 3 51.783333 -0.783333 + ``` + +## Exercício - construa seu modelo + +Agora você pode se preparar para treinar um modelo dividindo os dados em grupos de treinamento e teste. + +1. Selecione as três características que você deseja treinar como seu vetor X, e o vetor y será o `Country`. Você quer ser capaz de inserir `Seconds`, `Latitude` e `Longitude` e obter um id de país como retorno. + + ```python + from sklearn.model_selection import train_test_split + + Selected_features = ['Seconds','Latitude','Longitude'] + + X = ufos[Selected_features] + y = ufos['Country'] + + X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0) + ``` + +1. Treine seu modelo usando regressão logística: + + ```python + from sklearn.metrics import accuracy_score, classification_report + from sklearn.linear_model import LogisticRegression + model = LogisticRegression() + model.fit(X_train, y_train) + predictions = model.predict(X_test) + + print(classification_report(y_test, predictions)) + print('Predicted labels: ', predictions) + print('Accuracy: ', accuracy_score(y_test, predictions)) + ``` + +A precisão não é ruim **(cerca de 95%)**, o que não é surpreendente, já que `Country` e `Latitude/Longitude` estão correlacionados. + +O modelo que você criou não é muito revolucionário, já que você deveria ser capaz de inferir um `Country` a partir de sua `Latitude` e `Longitude`, mas é um bom exercício para tentar treinar a partir de dados brutos que você limpou, exportou e depois usou esse modelo em um aplicativo web. + +## Exercício - 'pickle' seu modelo + +Agora é hora de _pickle_ seu modelo! Você pode fazer isso em algumas linhas de código. Uma vez que ele esteja _pickled_, carregue seu modelo pickled e teste-o contra um array de dados de amostra contendo valores para segundos, latitude e longitude. + +```python +import pickle +model_filename = 'ufo-model.pkl' +pickle.dump(model, open(model_filename,'wb')) + +model = pickle.load(open('ufo-model.pkl','rb')) +print(model.predict([[50,44,-12]])) +``` + +O modelo retorna **'3'**, que é o código do país para o Reino Unido. Incrível! 👽 + +## Exercício - construa um aplicativo Flask + +Agora você pode construir um aplicativo Flask para chamar seu modelo e retornar resultados semelhantes, mas de uma maneira mais visualmente agradável. + +1. Comece criando uma pasta chamada **web-app** ao lado do arquivo _notebook.ipynb_ onde seu arquivo _ufo-model.pkl_ está localizado. + +1. Nessa pasta, crie mais três pastas: **static**, com uma pasta **css** dentro dela, e **templates**. Você deve ter os seguintes arquivos e diretórios: + + ```output + web-app/ + static/ + css/ + templates/ + notebook.ipynb + ufo-model.pkl + ``` + + ✅ Consulte a pasta de solução para ver o aplicativo finalizado + +1. O primeiro arquivo a ser criado na pasta _web-app_ é o arquivo **requirements.txt**. Como o _package.json_ em um aplicativo JavaScript, este arquivo lista as dependências necessárias para o aplicativo. No **requirements.txt** adicione as linhas: + + ```text + scikit-learn + pandas + numpy + flask + ``` + +1. Agora, execute este arquivo navegando até _web-app_: + + ```bash + cd web-app + ``` + +1. No seu terminal, digite `pip install` para instalar as bibliotecas listadas no _requirements.txt_: + + ```bash + pip install -r requirements.txt + ``` + +1. Agora, você está pronto para criar mais três arquivos para finalizar o aplicativo: + + 1. Crie **app.py** na raiz. + 2. Crie **index.html** no diretório _templates_. + 3. Crie **styles.css** no diretório _static/css_. + +1. Desenvolva o arquivo _styles.css_ com alguns estilos: + + ```css + body { + width: 100%; + height: 100%; + font-family: 'Helvetica'; + background: black; + color: #fff; + text-align: center; + letter-spacing: 1.4px; + font-size: 30px; + } + + input { + min-width: 150px; + } + + .grid { + width: 300px; + border: 1px solid #2d2d2d; + display: grid; + justify-content: center; + margin: 20px auto; + } + + .box { + color: #fff; + background: #2d2d2d; + padding: 12px; + display: inline-block; + } + ``` + +1. Em seguida, desenvolva o arquivo _index.html_: + + ```html + + + + + 🛸 UFO Appearance Prediction! 👽 + + + + +
+ +
+ +

According to the number of seconds, latitude and longitude, which country is likely to have reported seeing a UFO?

+ +
+ + + + +
+ +

{{ prediction_text }}

+ +
+ +
+ + + + ``` + + Observe o uso de templates neste arquivo. Note a sintaxe 'mustache' ao redor das variáveis que serão fornecidas pelo aplicativo, como o texto de previsão: `{{}}`. Há também um formulário que envia uma previsão para a rota `/predict`. + + Finalmente, você está pronto para construir o arquivo Python que dirige o consumo do modelo e a exibição das previsões: + +1. No `app.py` adicione: + + ```python + import numpy as np + from flask import Flask, request, render_template + import pickle + + app = Flask(__name__) + + model = pickle.load(open("./ufo-model.pkl", "rb")) + + + @app.route("/") + def home(): + return render_template("index.html") + + + @app.route("/predict", methods=["POST"]) + def predict(): + + int_features = [int(x) for x in request.form.values()] + final_features = [np.array(int_features)] + prediction = model.predict(final_features) + + output = prediction[0] + + countries = ["Australia", "Canada", "Germany", "UK", "US"] + + return render_template( + "index.html", prediction_text="Likely country: {}".format(countries[output]) + ) + + + if __name__ == "__main__": + app.run(debug=True) + ``` + + > 💡 Dica: quando você adiciona [`debug=True`](https://www.askpython.com/python-modules/flask/flask-debug-mode) ao executar o aplicativo web usando Flask, quaisquer alterações feitas no seu aplicativo serão refletidas imediatamente sem a necessidade de reiniciar o servidor. Atenção! Não habilite este modo em um aplicativo de produção. + +Se você executar `python app.py` ou `python3 app.py` - seu servidor web será iniciado localmente, e você poderá preencher um formulário curto para obter uma resposta à sua pergunta sobre onde os OVNIs foram avistados! + +Antes de fazer isso, dê uma olhada nas partes do `app.py`: + +1. Primeiro, as dependências são carregadas e o aplicativo é iniciado. +1. Em seguida, o modelo é importado. +1. Depois, o index.html é renderizado na rota inicial. + +Na rota `/predict`, várias coisas acontecem quando o formulário é enviado: + +1. As variáveis do formulário são coletadas e convertidas em um array numpy. Elas são então enviadas ao modelo e uma previsão é retornada. +2. Os países que queremos exibir são re-renderizados como texto legível a partir de seu código de país previsto, e esse valor é enviado de volta ao index.html para ser renderizado no template. + +Usar um modelo dessa forma, com Flask e um modelo pickled, é relativamente simples. O mais difícil é entender qual é o formato dos dados que devem ser enviados ao modelo para obter uma previsão. Isso depende de como o modelo foi treinado. Este modelo requer três pontos de dados para ser inserido e obter uma previsão. + +Em um ambiente profissional, você pode ver como é importante ter uma boa comunicação entre as pessoas que treinam o modelo e aquelas que o consomem em um aplicativo web ou móvel. No nosso caso, é apenas uma pessoa: você! + +--- + +## 🚀 Desafio + +Em vez de trabalhar em um notebook e importar o modelo para o aplicativo Flask, você poderia treinar o modelo diretamente dentro do aplicativo Flask! Tente converter seu código Python no notebook, talvez após limpar seus dados, para treinar o modelo dentro do aplicativo em uma rota chamada `train`. Quais são os prós e contras de seguir esse método? + +## [Quiz pós-aula](https://ff-quizzes.netlify.app/en/ml/) + +## Revisão e Autoestudo + +Existem muitas maneiras de construir um aplicativo web para consumir modelos de ML. Faça uma lista das maneiras que você poderia usar JavaScript ou Python para construir um aplicativo web que aproveite o aprendizado de máquina. Considere a arquitetura: o modelo deve permanecer no aplicativo ou viver na nuvem? Se for o último caso, como você o acessaria? Desenhe um modelo arquitetural para uma solução de ML aplicada em um aplicativo web. + +## Tarefa + +[Experimente um modelo diferente](assignment.md) + +--- + +**Aviso Legal**: +Este documento foi traduzido utilizando o serviço de tradução por IA [Co-op Translator](https://github.com/Azure/co-op-translator). Embora nos esforcemos para garantir a precisão, esteja ciente de que traduções automatizadas podem conter erros ou imprecisões. O documento original em seu idioma nativo deve ser considerado a fonte autoritativa. Para informações críticas, recomenda-se a tradução profissional realizada por humanos. Não nos responsabilizamos por quaisquer mal-entendidos ou interpretações equivocadas decorrentes do uso desta tradução. \ No newline at end of file diff --git a/translations/pt-BR/3-Web-App/1-Web-App/assignment.md b/translations/pt-BR/3-Web-App/1-Web-App/assignment.md new file mode 100644 index 000000000..5bc7ee570 --- /dev/null +++ b/translations/pt-BR/3-Web-App/1-Web-App/assignment.md @@ -0,0 +1,16 @@ +# Experimente um modelo diferente + +## Instruções + +Agora que você criou um aplicativo web usando um modelo de Regressão treinado, utilize um dos modelos de uma lição anterior sobre Regressão para refazer este aplicativo web. Você pode manter o estilo ou projetá-lo de forma diferente para refletir os dados de abóbora. Certifique-se de alterar os inputs para refletir o método de treinamento do seu modelo. + +## Rubrica + +| Critérios | Exemplares | Adequados | Necessita Melhorias | +| -------------------------- | -------------------------------------------------------- | --------------------------------------------------------- | -------------------------------------- | +| | O aplicativo web funciona como esperado e está implantado na nuvem | O aplicativo web contém falhas ou apresenta resultados inesperados | O aplicativo web não funciona corretamente | + +--- + +**Aviso Legal**: +Este documento foi traduzido utilizando o serviço de tradução por IA [Co-op Translator](https://github.com/Azure/co-op-translator). Embora nos esforcemos para garantir a precisão, esteja ciente de que traduções automatizadas podem conter erros ou imprecisões. O documento original em seu idioma nativo deve ser considerado a fonte autoritativa. Para informações críticas, recomenda-se a tradução profissional realizada por humanos. Não nos responsabilizamos por quaisquer mal-entendidos ou interpretações equivocadas decorrentes do uso desta tradução. \ No newline at end of file diff --git a/translations/pt-BR/3-Web-App/1-Web-App/notebook.ipynb b/translations/pt-BR/3-Web-App/1-Web-App/notebook.ipynb new file mode 100644 index 000000000..e69de29bb diff --git a/translations/pt-BR/3-Web-App/1-Web-App/solution/notebook.ipynb b/translations/pt-BR/3-Web-App/1-Web-App/solution/notebook.ipynb new file mode 100644 index 000000000..303c919ac --- /dev/null +++ b/translations/pt-BR/3-Web-App/1-Web-App/solution/notebook.ipynb @@ -0,0 +1,267 @@ +{ + "metadata": { + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.7.0" + }, + "orig_nbformat": 2, + "kernelspec": { + "name": "python37364bit8d3b438fb5fc4430a93ac2cb74d693a7", + "display_name": "Python 3.7.0 64-bit ('3.7')" + }, + "metadata": { + "interpreter": { + "hash": "70b38d7a306a849643e446cd70466270a13445e5987dfa1344ef2b127438fa4d" + } + }, + "coopTranslator": { + "original_hash": "5fa2e8f4584c78250ca9729b46562ceb", + "translation_date": "2025-08-29T23:40:42+00:00", + "source_file": "3-Web-App/1-Web-App/solution/notebook.ipynb", + "language_code": "br" + } + }, + "nbformat": 4, + "nbformat_minor": 2, + "cells": [ + { + "source": [], + "cell_type": "markdown", + "metadata": {} + }, + { + "cell_type": "code", + "execution_count": 23, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + " datetime city state country shape \\\n", + "0 10/10/1949 20:30 san marcos tx us cylinder \n", + "1 10/10/1949 21:00 lackland afb tx NaN light \n", + "2 10/10/1955 17:00 chester (uk/england) NaN gb circle \n", + "3 10/10/1956 21:00 edna tx us circle \n", + "4 10/10/1960 20:00 kaneohe hi us light \n", + "\n", + " duration (seconds) duration (hours/min) \\\n", + "0 2700.0 45 minutes \n", + "1 7200.0 1-2 hrs \n", + "2 20.0 20 seconds \n", + "3 20.0 1/2 hour \n", + "4 900.0 15 minutes \n", + "\n", + " comments date posted latitude \\\n", + "0 This event took place in early fall around 194... 4/27/2004 29.883056 \n", + "1 1949 Lackland AFB, TX. Lights racing acros... 12/16/2005 29.384210 \n", + "2 Green/Orange circular disc over Chester, En... 1/21/2008 53.200000 \n", + "3 My older brother and twin sister were leaving ... 1/17/2004 28.978333 \n", + "4 AS a Marine 1st Lt. flying an FJ4B fighter/att... 1/22/2004 21.418056 \n", + "\n", + " longitude \n", + "0 -97.941111 \n", + "1 -98.581082 \n", + "2 -2.916667 \n", + "3 -96.645833 \n", + "4 -157.803611 " + ], + "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
datetimecitystatecountryshapeduration (seconds)duration (hours/min)commentsdate postedlatitudelongitude
010/10/1949 20:30san marcostxuscylinder2700.045 minutesThis event took place in early fall around 194...4/27/200429.883056-97.941111
110/10/1949 21:00lackland afbtxNaNlight7200.01-2 hrs1949 Lackland AFB&#44 TX. Lights racing acros...12/16/200529.384210-98.581082
210/10/1955 17:00chester (uk/england)NaNgbcircle20.020 secondsGreen/Orange circular disc over Chester&#44 En...1/21/200853.200000-2.916667
310/10/1956 21:00ednatxuscircle20.01/2 hourMy older brother and twin sister were leaving ...1/17/200428.978333-96.645833
410/10/1960 20:00kaneohehiuslight900.015 minutesAS a Marine 1st Lt. flying an FJ4B fighter/att...1/22/200421.418056-157.803611
\n
" + }, + "metadata": {}, + "execution_count": 23 + } + ], + "source": [ + "import pandas as pd\n", + "import numpy as np\n", + "\n", + "ufos = pd.read_csv('../data/ufos.csv')\n", + "ufos.head()\n" + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "array(['us', nan, 'gb', 'ca', 'au', 'de'], dtype=object)" + ] + }, + "metadata": {}, + "execution_count": 24 + } + ], + "source": [ + "\n", + "ufos = pd.DataFrame({'Seconds': ufos['duration (seconds)'], 'Country': ufos['country'],'Latitude': ufos['latitude'],'Longitude': ufos['longitude']})\n", + "\n", + "ufos.Country.unique()\n", + "\n", + "# 0 au, 1 ca, 2 de, 3 gb, 4 us" + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "metadata": {}, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "\nInt64Index: 25863 entries, 2 to 80330\nData columns (total 4 columns):\n # Column Non-Null Count Dtype \n--- ------ -------------- ----- \n 0 Seconds 25863 non-null float64\n 1 Country 25863 non-null object \n 2 Latitude 25863 non-null float64\n 3 Longitude 25863 non-null float64\ndtypes: float64(3), object(1)\nmemory usage: 1010.3+ KB\n" + ] + } + ], + "source": [ + "ufos.dropna(inplace=True)\n", + "\n", + "ufos = ufos[(ufos['Seconds'] >= 1) & (ufos['Seconds'] <= 60)]\n", + "\n", + "ufos.info()" + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + " Seconds Country Latitude Longitude\n", + "2 20.0 3 53.200000 -2.916667\n", + "3 20.0 4 28.978333 -96.645833\n", + "14 30.0 4 35.823889 -80.253611\n", + "23 60.0 4 45.582778 -122.352222\n", + "24 3.0 3 51.783333 -0.783333" + ], + "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
SecondsCountryLatitudeLongitude
220.0353.200000-2.916667
320.0428.978333-96.645833
1430.0435.823889-80.253611
2360.0445.582778-122.352222
243.0351.783333-0.783333
\n
" + }, + "metadata": {}, + "execution_count": 26 + } + ], + "source": [ + "from sklearn.preprocessing import LabelEncoder\n", + "\n", + "ufos['Country'] = LabelEncoder().fit_transform(ufos['Country'])\n", + "\n", + "ufos.head()" + ] + }, + { + "cell_type": "code", + "execution_count": 27, + "metadata": {}, + "outputs": [], + "source": [ + "from sklearn.model_selection import train_test_split\n", + "\n", + "Selected_features = ['Seconds','Latitude','Longitude']\n", + "\n", + "X = ufos[Selected_features]\n", + "y = ufos['Country']\n", + "\n", + "\n", + "X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0)\n" + ] + }, + { + "cell_type": "code", + "execution_count": 28, + "metadata": {}, + "outputs": [ + { + "output_type": "stream", + "name": "stderr", + "text": [ + "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/sklearn/linear_model/logistic.py:432: FutureWarning: Default solver will be changed to 'lbfgs' in 0.22. Specify a solver to silence this warning.\n", + " FutureWarning)\n", + "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/sklearn/linear_model/logistic.py:469: FutureWarning: Default multi_class will be changed to 'auto' in 0.22. Specify the multi_class option to silence this warning.\n", + " \"this warning.\", FutureWarning)\n", + " precision recall f1-score support\n", + "\n", + " 0 1.00 1.00 1.00 41\n", + " 1 1.00 0.02 0.05 250\n", + " 2 0.00 0.00 0.00 8\n", + " 3 0.94 1.00 0.97 131\n", + " 4 0.95 1.00 0.97 4743\n", + "\n", + " accuracy 0.95 5173\n", + " macro avg 0.78 0.60 0.60 5173\n", + "weighted avg 0.95 0.95 0.93 5173\n", + "\n", + "Predicted labels: [4 4 4 ... 3 4 4]\n", + "Accuracy: 0.9512855209742895\n", + "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/sklearn/metrics/classification.py:1437: UndefinedMetricWarning: Precision and F-score are ill-defined and being set to 0.0 in labels with no predicted samples.\n", + " 'precision', 'predicted', average, warn_for)\n" + ] + } + ], + "source": [ + "from sklearn.model_selection import train_test_split\n", + "from sklearn.metrics import accuracy_score, classification_report \n", + "from sklearn.linear_model import LogisticRegression\n", + "model = LogisticRegression()\n", + "model.fit(X_train, y_train)\n", + "predictions = model.predict(X_test)\n", + "\n", + "print(classification_report(y_test, predictions))\n", + "print('Predicted labels: ', predictions)\n", + "print('Accuracy: ', accuracy_score(y_test, predictions))\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": 29, + "metadata": {}, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "[3]\n" + ] + } + ], + "source": [ + "import pickle\n", + "model_filename = 'ufo-model.pkl'\n", + "pickle.dump(model, open(model_filename,'wb'))\n", + "\n", + "model = pickle.load(open('ufo-model.pkl','rb'))\n", + "print(model.predict([[50,44,-12]]))\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n---\n\n**Aviso Legal**: \nEste documento foi traduzido utilizando o serviço de tradução por IA [Co-op Translator](https://github.com/Azure/co-op-translator). Embora nos esforcemos para garantir a precisão, esteja ciente de que traduções automatizadas podem conter erros ou imprecisões. O documento original em seu idioma nativo deve ser considerado a fonte autoritativa. Para informações críticas, recomenda-se a tradução profissional realizada por humanos. Não nos responsabilizamos por quaisquer mal-entendidos ou interpretações equivocadas decorrentes do uso desta tradução.\n" + ] + } + ] +} \ No newline at end of file diff --git a/translations/pt-BR/3-Web-App/README.md b/translations/pt-BR/3-Web-App/README.md new file mode 100644 index 000000000..f90b037c4 --- /dev/null +++ b/translations/pt-BR/3-Web-App/README.md @@ -0,0 +1,26 @@ +# Construa um aplicativo web para usar seu modelo de ML + +Nesta seção do currículo, você será introduzido a um tópico aplicado de aprendizado de máquina: como salvar seu modelo Scikit-learn como um arquivo que pode ser usado para fazer previsões dentro de um aplicativo web. Depois que o modelo estiver salvo, você aprenderá como utilizá-lo em um aplicativo web construído com Flask. Primeiro, você criará um modelo usando alguns dados relacionados a avistamentos de OVNIs! Em seguida, você construirá um aplicativo web que permitirá inserir um número de segundos junto com valores de latitude e longitude para prever qual país relatou ter visto um OVNI. + +![Estacionamento de OVNIs](../../../translated_images/pt-BR/ufo.9e787f5161da9d4d.webp) + +Foto por Michael Herren no Unsplash + +## Aulas + +1. [Construa um Aplicativo Web](1-Web-App/README.md) + +## Créditos + +"Construa um Aplicativo Web" foi escrito com ♥️ por [Jen Looper](https://twitter.com/jenlooper). + +♥️ Os questionários foram escritos por Rohan Raj. + +O conjunto de dados foi obtido de [Kaggle](https://www.kaggle.com/NUFORC/ufo-sightings). + +A arquitetura do aplicativo web foi sugerida em parte por [este artigo](https://towardsdatascience.com/how-to-easily-deploy-machine-learning-models-using-flask-b95af8fe34d4) e [este repositório](https://github.com/abhinavsagar/machine-learning-deployment) de Abhinav Sagar. + +--- + +**Aviso Legal**: +Este documento foi traduzido utilizando o serviço de tradução por IA [Co-op Translator](https://github.com/Azure/co-op-translator). Embora nos esforcemos para garantir a precisão, esteja ciente de que traduções automatizadas podem conter erros ou imprecisões. O documento original em seu idioma nativo deve ser considerado a fonte autoritativa. Para informações críticas, recomenda-se a tradução profissional realizada por humanos. Não nos responsabilizamos por quaisquer mal-entendidos ou interpretações equivocadas decorrentes do uso desta tradução. \ No newline at end of file diff --git a/translations/pt-BR/4-Classification/1-Introduction/README.md b/translations/pt-BR/4-Classification/1-Introduction/README.md new file mode 100644 index 000000000..18f323449 --- /dev/null +++ b/translations/pt-BR/4-Classification/1-Introduction/README.md @@ -0,0 +1,304 @@ +# Introdução à classificação + +Nestas quatro lições, você explorará um dos focos fundamentais do aprendizado de máquina clássico - _classificação_. Vamos utilizar vários algoritmos de classificação com um conjunto de dados sobre as brilhantes culinárias da Ásia e da Índia. Espero que você esteja com fome! + +![só uma pitada!](../../../../4-Classification/1-Introduction/images/pinch.png) + +> Celebre as culinárias pan-asiáticas nestas lições! Imagem por [Jen Looper](https://twitter.com/jenlooper) + +Classificação é uma forma de [aprendizado supervisionado](https://wikipedia.org/wiki/Supervised_learning) que tem muito em comum com técnicas de regressão. Se o aprendizado de máquina é sobre prever valores ou nomes para coisas usando conjuntos de dados, então a classificação geralmente se divide em dois grupos: _classificação binária_ e _classificação multiclasse_. + +[![Introdução à classificação](https://img.youtube.com/vi/eg8DJYwdMyg/0.jpg)](https://youtu.be/eg8DJYwdMyg "Introdução à classificação") + +> 🎥 Clique na imagem acima para assistir a um vídeo: John Guttag do MIT apresenta a classificação + +Lembre-se: + +- **Regressão linear** ajudou você a prever relações entre variáveis e fazer previsões precisas sobre onde um novo ponto de dados se encaixaria em relação a essa linha. Por exemplo, você poderia prever _qual seria o preço de uma abóbora em setembro vs. dezembro_. +- **Regressão logística** ajudou você a descobrir "categorias binárias": neste ponto de preço, _essa abóbora é laranja ou não-laranja_? + +A classificação utiliza vários algoritmos para determinar outras formas de identificar o rótulo ou a classe de um ponto de dados. Vamos trabalhar com esses dados de culinária para ver se, ao observar um grupo de ingredientes, conseguimos determinar sua origem culinária. + +## [Quiz pré-aula](https://ff-quizzes.netlify.app/en/ml/) + +> ### [Esta lição está disponível em R!](../../../../4-Classification/1-Introduction/solution/R/lesson_10.html) + +### Introdução + +A classificação é uma das atividades fundamentais do pesquisador de aprendizado de máquina e do cientista de dados. Desde a classificação básica de um valor binário ("este e-mail é spam ou não?"), até a classificação e segmentação complexas de imagens usando visão computacional, é sempre útil poder organizar dados em classes e fazer perguntas sobre eles. + +Para descrever o processo de forma mais científica, seu método de classificação cria um modelo preditivo que permite mapear a relação entre variáveis de entrada e variáveis de saída. + +![classificação binária vs. multiclasse](../../../../4-Classification/1-Introduction/images/binary-multiclass.png) + +> Problemas binários vs. multiclasse para algoritmos de classificação lidarem. Infográfico por [Jen Looper](https://twitter.com/jenlooper) + +Antes de começar o processo de limpar nossos dados, visualizá-los e prepará-los para nossas tarefas de aprendizado de máquina, vamos aprender um pouco sobre as várias formas de usar aprendizado de máquina para classificar dados. + +Derivada da [estatística](https://wikipedia.org/wiki/Statistical_classification), a classificação usando aprendizado de máquina clássico utiliza características, como `fumante`, `peso` e `idade`, para determinar a _probabilidade de desenvolver X doença_. Como uma técnica de aprendizado supervisionado semelhante aos exercícios de regressão que você realizou anteriormente, seus dados são rotulados e os algoritmos de aprendizado de máquina usam esses rótulos para classificar e prever classes (ou 'características') de um conjunto de dados e atribuí-las a um grupo ou resultado. + +✅ Tire um momento para imaginar um conjunto de dados sobre culinárias. O que um modelo multiclasse seria capaz de responder? O que um modelo binário seria capaz de responder? E se você quisesse determinar se uma determinada culinária provavelmente usaria feno-grego? E se você quisesse ver se, dado um presente de uma sacola de supermercado cheia de anis-estrelado, alcachofras, couve-flor e raiz-forte, você poderia criar um prato típico indiano? + +[![Cestas misteriosas malucas](https://img.youtube.com/vi/GuTeDbaNoEU/0.jpg)](https://youtu.be/GuTeDbaNoEU "Cestas misteriosas malucas") + +> 🎥 Clique na imagem acima para assistir a um vídeo. Todo o conceito do programa 'Chopped' é a 'cesta misteriosa', onde os chefs têm que fazer um prato com uma escolha aleatória de ingredientes. Certamente um modelo de aprendizado de máquina teria ajudado! + +## Olá 'classificador' + +A pergunta que queremos fazer sobre este conjunto de dados de culinária é, na verdade, uma **pergunta multiclasse**, já que temos várias possíveis culinárias nacionais para trabalhar. Dado um lote de ingredientes, a qual dessas muitas classes os dados se encaixarão? + +O Scikit-learn oferece vários algoritmos diferentes para classificar dados, dependendo do tipo de problema que você deseja resolver. Nas próximas duas lições, você aprenderá sobre alguns desses algoritmos. + +## Exercício - limpar e balancear seus dados + +A primeira tarefa, antes de começar este projeto, é limpar e **balancear** seus dados para obter melhores resultados. Comece com o arquivo em branco _notebook.ipynb_ na raiz desta pasta. + +A primeira coisa a instalar é o [imblearn](https://imbalanced-learn.org/stable/). Este é um pacote do Scikit-learn que permitirá que você balanceie melhor os dados (você aprenderá mais sobre essa tarefa em um minuto). + +1. Para instalar o `imblearn`, execute `pip install`, assim: + + ```python + pip install imblearn + ``` + +1. Importe os pacotes necessários para importar seus dados e visualizá-los, e também importe `SMOTE` do `imblearn`. + + ```python + import pandas as pd + import matplotlib.pyplot as plt + import matplotlib as mpl + import numpy as np + from imblearn.over_sampling import SMOTE + ``` + + Agora você está pronto para importar os dados. + +1. A próxima tarefa será importar os dados: + + ```python + df = pd.read_csv('../data/cuisines.csv') + ``` + + Usar `read_csv()` lerá o conteúdo do arquivo csv _cusines.csv_ e o colocará na variável `df`. + +1. Verifique o formato dos dados: + + ```python + df.head() + ``` + + As primeiras cinco linhas se parecem com isto: + + ```output + | | Unnamed: 0 | cuisine | almond | angelica | anise | anise_seed | apple | apple_brandy | apricot | armagnac | ... | whiskey | white_bread | white_wine | whole_grain_wheat_flour | wine | wood | yam | yeast | yogurt | zucchini | + | --- | ---------- | ------- | ------ | -------- | ----- | ---------- | ----- | ------------ | ------- | -------- | --- | ------- | ----------- | ---------- | ----------------------- | ---- | ---- | --- | ----- | ------ | -------- | + | 0 | 65 | indian | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ... | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | + | 1 | 66 | indian | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ... | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | + | 2 | 67 | indian | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ... | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | + | 3 | 68 | indian | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ... | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | + | 4 | 69 | indian | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ... | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | + ``` + +1. Obtenha informações sobre esses dados chamando `info()`: + + ```python + df.info() + ``` + + Sua saída será semelhante a: + + ```output + + RangeIndex: 2448 entries, 0 to 2447 + Columns: 385 entries, Unnamed: 0 to zucchini + dtypes: int64(384), object(1) + memory usage: 7.2+ MB + ``` + +## Exercício - aprendendo sobre culinárias + +Agora o trabalho começa a ficar mais interessante. Vamos descobrir a distribuição dos dados por culinária. + +1. Plote os dados como barras chamando `barh()`: + + ```python + df.cuisine.value_counts().plot.barh() + ``` + + ![distribuição de dados de culinária](../../../../4-Classification/1-Introduction/images/cuisine-dist.png) + + Há um número finito de culinárias, mas a distribuição dos dados é desigual. Você pode corrigir isso! Antes de fazer isso, explore um pouco mais. + +1. Descubra quanto dado está disponível por culinária e imprima: + + ```python + thai_df = df[(df.cuisine == "thai")] + japanese_df = df[(df.cuisine == "japanese")] + chinese_df = df[(df.cuisine == "chinese")] + indian_df = df[(df.cuisine == "indian")] + korean_df = df[(df.cuisine == "korean")] + + print(f'thai df: {thai_df.shape}') + print(f'japanese df: {japanese_df.shape}') + print(f'chinese df: {chinese_df.shape}') + print(f'indian df: {indian_df.shape}') + print(f'korean df: {korean_df.shape}') + ``` + + A saída se parece com isto: + + ```output + thai df: (289, 385) + japanese df: (320, 385) + chinese df: (442, 385) + indian df: (598, 385) + korean df: (799, 385) + ``` + +## Descobrindo ingredientes + +Agora você pode se aprofundar nos dados e aprender quais são os ingredientes típicos por culinária. Você deve limpar dados recorrentes que criam confusão entre as culinárias, então vamos aprender sobre esse problema. + +1. Crie uma função `create_ingredient()` em Python para criar um dataframe de ingredientes. Esta função começará removendo uma coluna inútil e classificará os ingredientes por sua contagem: + + ```python + def create_ingredient_df(df): + ingredient_df = df.T.drop(['cuisine','Unnamed: 0']).sum(axis=1).to_frame('value') + ingredient_df = ingredient_df[(ingredient_df.T != 0).any()] + ingredient_df = ingredient_df.sort_values(by='value', ascending=False, + inplace=False) + return ingredient_df + ``` + + Agora você pode usar essa função para ter uma ideia dos dez ingredientes mais populares por culinária. + +1. Chame `create_ingredient()` e plote chamando `barh()`: + + ```python + thai_ingredient_df = create_ingredient_df(thai_df) + thai_ingredient_df.head(10).plot.barh() + ``` + + ![tailandesa](../../../../4-Classification/1-Introduction/images/thai.png) + +1. Faça o mesmo para os dados japoneses: + + ```python + japanese_ingredient_df = create_ingredient_df(japanese_df) + japanese_ingredient_df.head(10).plot.barh() + ``` + + ![japonesa](../../../../4-Classification/1-Introduction/images/japanese.png) + +1. Agora para os ingredientes chineses: + + ```python + chinese_ingredient_df = create_ingredient_df(chinese_df) + chinese_ingredient_df.head(10).plot.barh() + ``` + + ![chinesa](../../../../4-Classification/1-Introduction/images/chinese.png) + +1. Plote os ingredientes indianos: + + ```python + indian_ingredient_df = create_ingredient_df(indian_df) + indian_ingredient_df.head(10).plot.barh() + ``` + + ![indiana](../../../../4-Classification/1-Introduction/images/indian.png) + +1. Finalmente, plote os ingredientes coreanos: + + ```python + korean_ingredient_df = create_ingredient_df(korean_df) + korean_ingredient_df.head(10).plot.barh() + ``` + + ![coreana](../../../../4-Classification/1-Introduction/images/korean.png) + +1. Agora, remova os ingredientes mais comuns que criam confusão entre culinárias distintas, chamando `drop()`: + + Todo mundo ama arroz, alho e gengibre! + + ```python + feature_df= df.drop(['cuisine','Unnamed: 0','rice','garlic','ginger'], axis=1) + labels_df = df.cuisine #.unique() + feature_df.head() + ``` + +## Balancear o conjunto de dados + +Agora que você limpou os dados, use o [SMOTE](https://imbalanced-learn.org/dev/references/generated/imblearn.over_sampling.SMOTE.html) - "Técnica de Sobreamostragem de Minoria Sintética" - para balanceá-los. + +1. Chame `fit_resample()`, esta estratégia gera novas amostras por interpolação. + + ```python + oversample = SMOTE() + transformed_feature_df, transformed_label_df = oversample.fit_resample(feature_df, labels_df) + ``` + + Ao balancear seus dados, você terá melhores resultados ao classificá-los. Pense em uma classificação binária. Se a maior parte dos seus dados pertence a uma classe, um modelo de aprendizado de máquina vai prever essa classe com mais frequência, apenas porque há mais dados para ela. Balancear os dados corrige esse desequilíbrio. + +1. Agora você pode verificar os números de rótulos por ingrediente: + + ```python + print(f'new label count: {transformed_label_df.value_counts()}') + print(f'old label count: {df.cuisine.value_counts()}') + ``` + + Sua saída será semelhante a: + + ```output + new label count: korean 799 + chinese 799 + indian 799 + japanese 799 + thai 799 + Name: cuisine, dtype: int64 + old label count: korean 799 + indian 598 + chinese 442 + japanese 320 + thai 289 + Name: cuisine, dtype: int64 + ``` + + Os dados estão limpos, balanceados e muito deliciosos! + +1. O último passo é salvar seus dados balanceados, incluindo rótulos e características, em um novo dataframe que pode ser exportado para um arquivo: + + ```python + transformed_df = pd.concat([transformed_label_df,transformed_feature_df],axis=1, join='outer') + ``` + +1. Você pode dar mais uma olhada nos dados usando `transformed_df.head()` e `transformed_df.info()`. Salve uma cópia desses dados para uso em lições futuras: + + ```python + transformed_df.head() + transformed_df.info() + transformed_df.to_csv("../data/cleaned_cuisines.csv") + ``` + + Este novo CSV pode agora ser encontrado na pasta de dados raiz. + +--- + +## 🚀Desafio + +Este currículo contém vários conjuntos de dados interessantes. Explore as pastas `data` e veja se alguma contém conjuntos de dados que seriam apropriados para classificação binária ou multiclasse. Que perguntas você faria a esse conjunto de dados? + +## [Quiz pós-aula](https://ff-quizzes.netlify.app/en/ml/) + +## Revisão e Autoestudo + +Explore a API do SMOTE. Para quais casos de uso ele é mais adequado? Que problemas ele resolve? + +## Tarefa + +[Explore métodos de classificação](assignment.md) + +--- + +**Aviso Legal**: +Este documento foi traduzido utilizando o serviço de tradução por IA [Co-op Translator](https://github.com/Azure/co-op-translator). Embora nos esforcemos para garantir a precisão, esteja ciente de que traduções automáticas podem conter erros ou imprecisões. O documento original em seu idioma nativo deve ser considerado a fonte oficial. Para informações críticas, recomenda-se a tradução profissional realizada por humanos. Não nos responsabilizamos por quaisquer mal-entendidos ou interpretações equivocadas decorrentes do uso desta tradução. \ No newline at end of file diff --git a/translations/pt-BR/4-Classification/1-Introduction/assignment.md b/translations/pt-BR/4-Classification/1-Introduction/assignment.md new file mode 100644 index 000000000..7fb06fd7a --- /dev/null +++ b/translations/pt-BR/4-Classification/1-Introduction/assignment.md @@ -0,0 +1,16 @@ +# Explore métodos de classificação + +## Instruções + +Na [documentação do Scikit-learn](https://scikit-learn.org/stable/supervised_learning.html), você encontrará uma grande lista de maneiras de classificar dados. Faça uma pequena caça ao tesouro nesses documentos: seu objetivo é procurar métodos de classificação e associar um conjunto de dados deste currículo, uma pergunta que você pode fazer sobre ele e uma técnica de classificação. Crie uma planilha ou tabela em um arquivo .doc e explique como o conjunto de dados funcionaria com o algoritmo de classificação. + +## Rubrica + +| Critérios | Exemplary | Adequate | Needs Improvement | +| --------- | ----------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| | um documento é apresentado com uma visão geral de 5 algoritmos juntamente com uma técnica de classificação. A visão geral é bem explicada e detalhada. | um documento é apresentado com uma visão geral de 3 algoritmos juntamente com uma técnica de classificação. A visão geral é bem explicada e detalhada. | um documento é apresentado com uma visão geral de menos de três algoritmos juntamente com uma técnica de classificação, e a visão geral não é bem explicada nem detalhada. | + +--- + +**Aviso Legal**: +Este documento foi traduzido utilizando o serviço de tradução por IA [Co-op Translator](https://github.com/Azure/co-op-translator). Embora nos esforcemos para garantir a precisão, esteja ciente de que traduções automáticas podem conter erros ou imprecisões. O documento original em seu idioma nativo deve ser considerado a fonte oficial. Para informações críticas, recomenda-se a tradução profissional feita por humanos. Não nos responsabilizamos por quaisquer mal-entendidos ou interpretações incorretas decorrentes do uso desta tradução. \ No newline at end of file diff --git a/translations/pt-BR/4-Classification/1-Introduction/notebook.ipynb b/translations/pt-BR/4-Classification/1-Introduction/notebook.ipynb new file mode 100644 index 000000000..16fc0c584 --- /dev/null +++ b/translations/pt-BR/4-Classification/1-Introduction/notebook.ipynb @@ -0,0 +1,39 @@ +{ + "metadata": { + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": 3 + }, + "orig_nbformat": 2, + "coopTranslator": { + "original_hash": "d544ef384b7ba73757d830a72372a7f2", + "translation_date": "2025-08-29T23:52:57+00:00", + "source_file": "4-Classification/1-Introduction/notebook.ipynb", + "language_code": "br" + } + }, + "nbformat": 4, + "nbformat_minor": 2, + "cells": [ + { + "source": [], + "cell_type": "markdown", + "metadata": {} + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n---\n\n**Aviso Legal**: \nEste documento foi traduzido utilizando o serviço de tradução por IA [Co-op Translator](https://github.com/Azure/co-op-translator). Embora nos esforcemos para garantir a precisão, esteja ciente de que traduções automatizadas podem conter erros ou imprecisões. O documento original em seu idioma nativo deve ser considerado a fonte autoritativa. Para informações críticas, recomenda-se a tradução profissional realizada por humanos. Não nos responsabilizamos por quaisquer mal-entendidos ou interpretações equivocadas decorrentes do uso desta tradução.\n" + ] + } + ] +} \ No newline at end of file diff --git a/translations/pt-BR/4-Classification/1-Introduction/solution/Julia/README.md b/translations/pt-BR/4-Classification/1-Introduction/solution/Julia/README.md new file mode 100644 index 000000000..c58234bae --- /dev/null +++ b/translations/pt-BR/4-Classification/1-Introduction/solution/Julia/README.md @@ -0,0 +1,6 @@ + + +--- + +**Aviso Legal**: +Este documento foi traduzido utilizando o serviço de tradução por IA [Co-op Translator](https://github.com/Azure/co-op-translator). Embora nos esforcemos para garantir a precisão, esteja ciente de que traduções automatizadas podem conter erros ou imprecisões. O documento original em seu idioma nativo deve ser considerado a fonte autoritativa. Para informações críticas, recomenda-se a tradução profissional realizada por humanos. Não nos responsabilizamos por quaisquer mal-entendidos ou interpretações equivocadas decorrentes do uso desta tradução. \ No newline at end of file diff --git a/translations/pt-BR/4-Classification/1-Introduction/solution/R/lesson_10-R.ipynb b/translations/pt-BR/4-Classification/1-Introduction/solution/R/lesson_10-R.ipynb new file mode 100644 index 000000000..0b8b71f9f --- /dev/null +++ b/translations/pt-BR/4-Classification/1-Introduction/solution/R/lesson_10-R.ipynb @@ -0,0 +1,723 @@ +{ + "nbformat": 4, + "nbformat_minor": 2, + "metadata": { + "colab": { + "name": "lesson_10-R.ipynb", + "provenance": [], + "collapsed_sections": [] + }, + "kernelspec": { + "name": "ir", + "display_name": "R" + }, + "language_info": { + "name": "R" + }, + "coopTranslator": { + "original_hash": "2621e24705e8100893c9bf84e0fc8aef", + "translation_date": "2025-08-29T23:59:26+00:00", + "source_file": "4-Classification/1-Introduction/solution/R/lesson_10-R.ipynb", + "language_code": "br" + } + }, + "cells": [ + { + "cell_type": "markdown", + "source": [ + "# Construir um modelo de classificação: Deliciosas culinárias asiáticas e indianas\n" + ], + "metadata": { + "id": "ItETB4tSFprR" + } + }, + { + "cell_type": "markdown", + "source": [ + "## Introdução à classificação: Limpe, prepare e visualize seus dados\n", + "\n", + "Nestes quatro módulos, você explorará um dos focos fundamentais do aprendizado de máquina clássico - *classificação*. Vamos explorar o uso de vários algoritmos de classificação com um conjunto de dados sobre as brilhantes culinárias da Ásia e da Índia. Espero que você esteja com fome!\n", + "\n", + "

\n", + " \n", + "

Comemore as culinárias pan-asiáticas nestas lições! Imagem de Jen Looper
\n", + "\n", + "\n", + "\n", + "\n", + "Classificação é uma forma de [aprendizado supervisionado](https://wikipedia.org/wiki/Supervised_learning) que tem muito em comum com técnicas de regressão. Na classificação, você treina um modelo para prever a qual `categoria` um item pertence. Se o aprendizado de máquina é sobre prever valores ou nomes para coisas usando conjuntos de dados, então a classificação geralmente se divide em dois grupos: *classificação binária* e *classificação multiclasses*.\n", + "\n", + "Lembre-se:\n", + "\n", + "- **Regressão linear** ajudou você a prever relações entre variáveis e fazer previsões precisas sobre onde um novo ponto de dados se encaixaria em relação a essa linha. Por exemplo, você poderia prever valores numéricos como *qual seria o preço de uma abóbora em setembro vs. dezembro*.\n", + "\n", + "- **Regressão logística** ajudou você a descobrir \"categorias binárias\": neste ponto de preço, *essa abóbora é laranja ou não-laranja*?\n", + "\n", + "A classificação utiliza vários algoritmos para determinar outras formas de identificar o rótulo ou a classe de um ponto de dados. Vamos trabalhar com esses dados de culinária para ver se, ao observar um grupo de ingredientes, conseguimos determinar sua origem culinária.\n", + "\n", + "### [**Questionário pré-aula**](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/19/)\n", + "\n", + "### **Introdução**\n", + "\n", + "A classificação é uma das atividades fundamentais do pesquisador de aprendizado de máquina e do cientista de dados. Desde a classificação básica de um valor binário (\"este e-mail é spam ou não?\") até a classificação e segmentação complexa de imagens usando visão computacional, é sempre útil ser capaz de organizar dados em classes e fazer perguntas sobre eles.\n", + "\n", + "Para descrever o processo de forma mais científica, seu método de classificação cria um modelo preditivo que permite mapear a relação entre variáveis de entrada e variáveis de saída.\n", + "\n", + "

\n", + " \n", + "

Problemas binários vs. multiclasses para algoritmos de classificação. Infográfico por Jen Looper
\n", + "\n", + "\n", + "\n", + "Antes de começar o processo de limpeza dos dados, visualizá-los e prepará-los para nossas tarefas de aprendizado de máquina, vamos aprender um pouco sobre as várias maneiras pelas quais o aprendizado de máquina pode ser usado para classificar dados.\n", + "\n", + "Derivada da [estatística](https://wikipedia.org/wiki/Statistical_classification), a classificação usando aprendizado de máquina clássico utiliza características, como `fumante`, `peso` e `idade`, para determinar a *probabilidade de desenvolver X doença*. Como uma técnica de aprendizado supervisionado semelhante aos exercícios de regressão que você realizou anteriormente, seus dados são rotulados e os algoritmos de aprendizado de máquina usam esses rótulos para classificar e prever classes (ou 'características') de um conjunto de dados e atribuí-las a um grupo ou resultado.\n", + "\n", + "✅ Tire um momento para imaginar um conjunto de dados sobre culinárias. O que um modelo multiclasses seria capaz de responder? O que um modelo binário seria capaz de responder? E se você quisesse determinar se uma determinada culinária provavelmente usa feno-grego? E se você quisesse ver se, dado um presente de uma sacola de compras cheia de anis-estrelado, alcachofras, couve-flor e raiz-forte, você poderia criar um prato típico indiano?\n", + "\n", + "### **Olá 'classificador'**\n", + "\n", + "A pergunta que queremos fazer sobre este conjunto de dados de culinária é, na verdade, uma questão **multiclasses**, já que temos várias possíveis culinárias nacionais para trabalhar. Dado um lote de ingredientes, a qual dessas muitas classes os dados se encaixam?\n", + "\n", + "O Tidymodels oferece vários algoritmos diferentes para classificar dados, dependendo do tipo de problema que você deseja resolver. Nas próximas duas lições, você aprenderá sobre alguns desses algoritmos.\n", + "\n", + "#### **Pré-requisito**\n", + "\n", + "Para esta lição, precisaremos dos seguintes pacotes para limpar, preparar e visualizar nossos dados:\n", + "\n", + "- `tidyverse`: O [tidyverse](https://www.tidyverse.org/) é uma [coleção de pacotes R](https://www.tidyverse.org/packages) projetada para tornar a ciência de dados mais rápida, fácil e divertida!\n", + "\n", + "- `tidymodels`: O [tidymodels](https://www.tidymodels.org/) é uma [coleção de pacotes](https://www.tidymodels.org/packages/) para modelagem e aprendizado de máquina.\n", + "\n", + "- `DataExplorer`: O [pacote DataExplorer](https://cran.r-project.org/web/packages/DataExplorer/vignettes/dataexplorer-intro.html) foi criado para simplificar e automatizar o processo de análise exploratória de dados (EDA) e a geração de relatórios.\n", + "\n", + "- `themis`: O [pacote themis](https://themis.tidymodels.org/) fornece etapas extras de receitas para lidar com dados desbalanceados.\n", + "\n", + "Você pode instalá-los com:\n", + "\n", + "`install.packages(c(\"tidyverse\", \"tidymodels\", \"DataExplorer\", \"here\"))`\n", + "\n", + "Alternativamente, o script abaixo verifica se você possui os pacotes necessários para completar este módulo e os instala para você caso estejam ausentes.\n" + ], + "metadata": { + "id": "ri5bQxZ-Fz_0" + } + }, + { + "cell_type": "code", + "execution_count": null, + "source": [ + "suppressWarnings(if (!require(\"pacman\"))install.packages(\"pacman\"))\r\n", + "\r\n", + "pacman::p_load(tidyverse, tidymodels, DataExplorer, themis, here)" + ], + "outputs": [], + "metadata": { + "id": "KIPxa4elGAPI" + } + }, + { + "cell_type": "markdown", + "source": [ + "Vamos carregar esses pacotes incríveis mais tarde e torná-los disponíveis na nossa sessão atual do R. (Isso é apenas para ilustração, `pacman::p_load()` já fez isso por você)\n" + ], + "metadata": { + "id": "YkKAxOJvGD4C" + } + }, + { + "cell_type": "markdown", + "source": [ + "## Exercício - limpar e balancear seus dados\n", + "\n", + "A primeira tarefa, antes de começar este projeto, é limpar e **balancear** seus dados para obter melhores resultados.\n", + "\n", + "Vamos conhecer os dados! 🕵️\n" + ], + "metadata": { + "id": "PFkQDlk0GN5O" + } + }, + { + "cell_type": "code", + "execution_count": null, + "source": [ + "# Import data\r\n", + "df <- read_csv(file = \"https://raw.githubusercontent.com/microsoft/ML-For-Beginners/main/4-Classification/data/cuisines.csv\")\r\n", + "\r\n", + "# View the first 5 rows\r\n", + "df %>% \r\n", + " slice_head(n = 5)\r\n" + ], + "outputs": [], + "metadata": { + "id": "Qccw7okxGT0S" + } + }, + { + "cell_type": "markdown", + "source": [ + "Interessante! Pelo que parece, a primeira coluna é um tipo de coluna `id`. Vamos obter um pouco mais de informações sobre os dados.\n" + ], + "metadata": { + "id": "XrWnlgSrGVmR" + } + }, + { + "cell_type": "code", + "execution_count": null, + "source": [ + "# Basic information about the data\r\n", + "df %>%\r\n", + " introduce()\r\n", + "\r\n", + "# Visualize basic information above\r\n", + "df %>% \r\n", + " plot_intro(ggtheme = theme_light())" + ], + "outputs": [], + "metadata": { + "id": "4UcGmxRxGieA" + } + }, + { + "cell_type": "markdown", + "source": [ + "A partir do resultado, podemos ver imediatamente que temos `2448` linhas, `385` colunas e `0` valores ausentes. Também temos 1 coluna discreta, *cuisine*.\n", + "\n", + "## Exercício - aprendendo sobre culinárias\n", + "\n", + "Agora o trabalho começa a ficar mais interessante. Vamos descobrir a distribuição dos dados por tipo de culinária.\n" + ], + "metadata": { + "id": "AaPubl__GmH5" + } + }, + { + "cell_type": "code", + "execution_count": null, + "source": [ + "# Count observations per cuisine\r\n", + "df %>% \r\n", + " count(cuisine) %>% \r\n", + " arrange(n)\r\n", + "\r\n", + "# Plot the distribution\r\n", + "theme_set(theme_light())\r\n", + "df %>% \r\n", + " count(cuisine) %>% \r\n", + " ggplot(mapping = aes(x = n, y = reorder(cuisine, -n))) +\r\n", + " geom_col(fill = \"midnightblue\", alpha = 0.7) +\r\n", + " ylab(\"cuisine\")" + ], + "outputs": [], + "metadata": { + "id": "FRsBVy5eGrrv" + } + }, + { + "cell_type": "markdown", + "source": [ + "Existem um número finito de culinárias, mas a distribuição dos dados é desigual. Você pode corrigir isso! Antes de fazer isso, explore um pouco mais.\n", + "\n", + "Em seguida, vamos atribuir cada culinária ao seu próprio tibble e descobrir quantos dados estão disponíveis (linhas, colunas) por culinária.\n", + "\n", + "> Um [tibble](https://tibble.tidyverse.org/) é uma versão moderna de um data frame.\n", + "\n", + "

\n", + " \n", + "

Ilustração por @allison_horst
\n" + ], + "metadata": { + "id": "vVvyDb1kG2in" + } + }, + { + "cell_type": "code", + "execution_count": null, + "source": [ + "# Create individual tibble for the cuisines\r\n", + "thai_df <- df %>% \r\n", + " filter(cuisine == \"thai\")\r\n", + "japanese_df <- df %>% \r\n", + " filter(cuisine == \"japanese\")\r\n", + "chinese_df <- df %>% \r\n", + " filter(cuisine == \"chinese\")\r\n", + "indian_df <- df %>% \r\n", + " filter(cuisine == \"indian\")\r\n", + "korean_df <- df %>% \r\n", + " filter(cuisine == \"korean\")\r\n", + "\r\n", + "\r\n", + "# Find out how much data is available per cuisine\r\n", + "cat(\" thai df:\", dim(thai_df), \"\\n\",\r\n", + " \"japanese df:\", dim(japanese_df), \"\\n\",\r\n", + " \"chinese_df:\", dim(chinese_df), \"\\n\",\r\n", + " \"indian_df:\", dim(indian_df), \"\\n\",\r\n", + " \"korean_df:\", dim(korean_df))" + ], + "outputs": [], + "metadata": { + "id": "0TvXUxD3G8Bk" + } + }, + { + "cell_type": "markdown", + "source": [ + "## **Exercício - Descobrindo os principais ingredientes por culinária usando dplyr**\n", + "\n", + "Agora você pode explorar mais profundamente os dados e descobrir quais são os ingredientes típicos de cada culinária. É importante limpar dados recorrentes que criam confusão entre as culinárias, então vamos aprender sobre esse problema.\n", + "\n", + "Crie uma função `create_ingredient()` em R que retorne um dataframe de ingredientes. Essa função começará eliminando uma coluna pouco útil e organizará os ingredientes por sua contagem.\n", + "\n", + "A estrutura básica de uma função em R é:\n", + "\n", + "`myFunction <- function(arglist){`\n", + "\n", + "**`...`**\n", + "\n", + "**`return`**`(value)`\n", + "\n", + "`}`\n", + "\n", + "Uma introdução prática às funções em R pode ser encontrada [aqui](https://skirmer.github.io/presentations/functions_with_r.html#1).\n", + "\n", + "Vamos direto ao ponto! Faremos uso dos [verbos do dplyr](https://dplyr.tidyverse.org/) que aprendemos em nossas lições anteriores. Para relembrar:\n", + "\n", + "- `dplyr::select()`: ajuda você a escolher quais **colunas** manter ou excluir.\n", + "\n", + "- `dplyr::pivot_longer()`: ajuda a \"alongar\" os dados, aumentando o número de linhas e diminuindo o número de colunas.\n", + "\n", + "- `dplyr::group_by()` e `dplyr::summarise()`: ajudam você a encontrar estatísticas resumidas para diferentes grupos e colocá-las em uma tabela organizada.\n", + "\n", + "- `dplyr::filter()`: cria um subconjunto dos dados contendo apenas as linhas que satisfazem suas condições.\n", + "\n", + "- `dplyr::mutate()`: ajuda você a criar ou modificar colunas.\n", + "\n", + "Confira este [tutorial *artístico* do learnr](https://allisonhorst.shinyapps.io/dplyr-learnr/#section-welcome) de Allison Horst, que apresenta algumas funções úteis de manipulação de dados no dplyr *(parte do Tidyverse)*.\n" + ], + "metadata": { + "id": "K3RF5bSCHC76" + } + }, + { + "cell_type": "code", + "execution_count": null, + "source": [ + "# Creates a functions that returns the top ingredients by class\r\n", + "\r\n", + "create_ingredient <- function(df){\r\n", + " \r\n", + " # Drop the id column which is the first colum\r\n", + " ingredient_df = df %>% select(-1) %>% \r\n", + " # Transpose data to a long format\r\n", + " pivot_longer(!cuisine, names_to = \"ingredients\", values_to = \"count\") %>% \r\n", + " # Find the top most ingredients for a particular cuisine\r\n", + " group_by(ingredients) %>% \r\n", + " summarise(n_instances = sum(count)) %>% \r\n", + " filter(n_instances != 0) %>% \r\n", + " # Arrange by descending order\r\n", + " arrange(desc(n_instances)) %>% \r\n", + " mutate(ingredients = factor(ingredients) %>% fct_inorder())\r\n", + " \r\n", + " \r\n", + " return(ingredient_df)\r\n", + "} # End of function" + ], + "outputs": [], + "metadata": { + "id": "uB_0JR82HTPa" + } + }, + { + "cell_type": "markdown", + "source": [ + "Agora podemos usar a função para ter uma ideia dos dez ingredientes mais populares por culinária. Vamos testá-la com `thai_df`.\n" + ], + "metadata": { + "id": "h9794WF8HWmc" + } + }, + { + "cell_type": "code", + "execution_count": null, + "source": [ + "# Call create_ingredient and display popular ingredients\r\n", + "thai_ingredient_df <- create_ingredient(df = thai_df)\r\n", + "\r\n", + "thai_ingredient_df %>% \r\n", + " slice_head(n = 10)" + ], + "outputs": [], + "metadata": { + "id": "agQ-1HrcHaEA" + } + }, + { + "cell_type": "markdown", + "source": [ + "Na seção anterior, usamos `geom_col()`, vamos ver como você pode usar `geom_bar` também, para criar gráficos de barras. Use `?geom_bar` para leitura adicional.\n" + ], + "metadata": { + "id": "kHu9ffGjHdcX" + } + }, + { + "cell_type": "code", + "execution_count": null, + "source": [ + "# Make a bar chart for popular thai cuisines\r\n", + "thai_ingredient_df %>% \r\n", + " slice_head(n = 10) %>% \r\n", + " ggplot(aes(x = n_instances, y = ingredients)) +\r\n", + " geom_bar(stat = \"identity\", width = 0.5, fill = \"steelblue\") +\r\n", + " xlab(\"\") + ylab(\"\")" + ], + "outputs": [], + "metadata": { + "id": "fb3Bx_3DHj6e" + } + }, + { + "cell_type": "markdown", + "source": [], + "metadata": { + "id": "RHP_xgdkHnvM" + } + }, + { + "cell_type": "code", + "execution_count": null, + "source": [ + "# Get popular ingredients for Japanese cuisines and make bar chart\r\n", + "create_ingredient(df = japanese_df) %>% \r\n", + " slice_head(n = 10) %>%\r\n", + " ggplot(aes(x = n_instances, y = ingredients)) +\r\n", + " geom_bar(stat = \"identity\", width = 0.5, fill = \"darkorange\", alpha = 0.8) +\r\n", + " xlab(\"\") + ylab(\"\")\r\n" + ], + "outputs": [], + "metadata": { + "id": "019v8F0XHrRU" + } + }, + { + "cell_type": "markdown", + "source": [ + "E quanto às culinárias chinesas?\n" + ], + "metadata": { + "id": "iIGM7vO8Hu3v" + } + }, + { + "cell_type": "code", + "execution_count": null, + "source": [ + "# Get popular ingredients for Chinese cuisines and make bar chart\r\n", + "create_ingredient(df = chinese_df) %>% \r\n", + " slice_head(n = 10) %>%\r\n", + " ggplot(aes(x = n_instances, y = ingredients)) +\r\n", + " geom_bar(stat = \"identity\", width = 0.5, fill = \"cyan4\", alpha = 0.8) +\r\n", + " xlab(\"\") + ylab(\"\")" + ], + "outputs": [], + "metadata": { + "id": "lHd9_gd2HyzU" + } + }, + { + "cell_type": "markdown", + "source": [], + "metadata": { + "id": "ir8qyQbNH1c7" + } + }, + { + "cell_type": "code", + "execution_count": null, + "source": [ + "# Get popular ingredients for Indian cuisines and make bar chart\r\n", + "create_ingredient(df = indian_df) %>% \r\n", + " slice_head(n = 10) %>%\r\n", + " ggplot(aes(x = n_instances, y = ingredients)) +\r\n", + " geom_bar(stat = \"identity\", width = 0.5, fill = \"#041E42FF\", alpha = 0.8) +\r\n", + " xlab(\"\") + ylab(\"\")" + ], + "outputs": [], + "metadata": { + "id": "ApukQtKjH5FO" + } + }, + { + "cell_type": "markdown", + "source": [], + "metadata": { + "id": "qv30cwY1H-FM" + } + }, + { + "cell_type": "code", + "execution_count": null, + "source": [ + "# Get popular ingredients for Korean cuisines and make bar chart\r\n", + "create_ingredient(df = korean_df) %>% \r\n", + " slice_head(n = 10) %>%\r\n", + " ggplot(aes(x = n_instances, y = ingredients)) +\r\n", + " geom_bar(stat = \"identity\", width = 0.5, fill = \"#852419FF\", alpha = 0.8) +\r\n", + " xlab(\"\") + ylab(\"\")" + ], + "outputs": [], + "metadata": { + "id": "lumgk9cHIBie" + } + }, + { + "cell_type": "markdown", + "source": [ + "A partir das visualizações de dados, agora podemos remover os ingredientes mais comuns que geram confusão entre diferentes culinárias, usando `dplyr::select()`.\n", + "\n", + "Todo mundo adora arroz, alho e gengibre!\n" + ], + "metadata": { + "id": "iO4veMXuIEta" + } + }, + { + "cell_type": "code", + "execution_count": null, + "source": [ + "# Drop id column, rice, garlic and ginger from our original data set\r\n", + "df_select <- df %>% \r\n", + " select(-c(1, rice, garlic, ginger))\r\n", + "\r\n", + "# Display new data set\r\n", + "df_select %>% \r\n", + " slice_head(n = 5)" + ], + "outputs": [], + "metadata": { + "id": "iHJPiG6rIUcK" + } + }, + { + "cell_type": "markdown", + "source": [ + "## Pré-processamento de dados usando recipes 👩‍🍳👨‍🍳 - Lidando com dados desbalanceados ⚖️\n", + "\n", + "

\n", + " \n", + "

Arte por @allison_horst
\n", + "\n", + "Dado que esta lição é sobre culinárias, precisamos colocar `recipes` em contexto.\n", + "\n", + "Tidymodels oferece mais um pacote interessante: `recipes` - um pacote para pré-processamento de dados.\n" + ], + "metadata": { + "id": "kkFd-JxdIaL6" + } + }, + { + "cell_type": "markdown", + "source": [ + "Vamos dar uma olhada novamente na distribuição das nossas culinárias.\n" + ], + "metadata": { + "id": "6l2ubtTPJAhY" + } + }, + { + "cell_type": "code", + "execution_count": null, + "source": [ + "# Distribution of cuisines\r\n", + "old_label_count <- df_select %>% \r\n", + " count(cuisine) %>% \r\n", + " arrange(desc(n))\r\n", + "\r\n", + "old_label_count" + ], + "outputs": [], + "metadata": { + "id": "1e-E9cb7JDVi" + } + }, + { + "cell_type": "markdown", + "source": [ + "Como você pode ver, há uma distribuição bastante desigual no número de culinárias. Culinárias coreanas são quase 3 vezes mais numerosas que as culinárias tailandesas. Dados desequilibrados frequentemente têm efeitos negativos no desempenho do modelo. Pense em uma classificação binária. Se a maior parte dos seus dados pertence a uma classe, um modelo de aprendizado de máquina vai prever essa classe com mais frequência, simplesmente porque há mais dados para ela. Balancear os dados corrige qualquer desequilíbrio e ajuda a remover essa disparidade. Muitos modelos apresentam melhor desempenho quando o número de observações é igual e, por isso, tendem a ter dificuldades com dados desequilibrados.\n", + "\n", + "Existem basicamente duas maneiras de lidar com conjuntos de dados desequilibrados:\n", + "\n", + "- adicionar observações à classe minoritária: `Over-sampling`, por exemplo, usando um algoritmo SMOTE\n", + "\n", + "- remover observações da classe majoritária: `Under-sampling`\n", + "\n", + "Agora vamos demonstrar como lidar com conjuntos de dados desequilibrados usando uma `receita`. Uma receita pode ser vista como um plano que descreve quais etapas devem ser aplicadas a um conjunto de dados para prepará-lo para análise.\n" + ], + "metadata": { + "id": "soAw6826JKx9" + } + }, + { + "cell_type": "code", + "execution_count": null, + "source": [ + "# Load themis package for dealing with imbalanced data\r\n", + "library(themis)\r\n", + "\r\n", + "# Create a recipe for preprocessing data\r\n", + "cuisines_recipe <- recipe(cuisine ~ ., data = df_select) %>% \r\n", + " step_smote(cuisine)\r\n", + "\r\n", + "cuisines_recipe" + ], + "outputs": [], + "metadata": { + "id": "HS41brUIJVJy" + } + }, + { + "cell_type": "markdown", + "source": [ + "Vamos detalhar nossas etapas de pré-processamento.\n", + "\n", + "- A chamada para `recipe()` com uma fórmula informa à receita os *papéis* das variáveis usando os dados de `df_select` como referência. Por exemplo, a coluna `cuisine` foi atribuída ao papel de `outcome`, enquanto o restante das colunas foi atribuído ao papel de `predictor`.\n", + "\n", + "- [`step_smote(cuisine)`](https://themis.tidymodels.org/reference/step_smote.html) cria uma *especificação* de uma etapa da receita que gera sinteticamente novos exemplos da classe minoritária usando os vizinhos mais próximos desses casos.\n", + "\n", + "Agora, se quisermos ver os dados pré-processados, precisamos [**`prep()`**](https://recipes.tidymodels.org/reference/prep.html) e [**`bake()`**](https://recipes.tidymodels.org/reference/bake.html) nossa receita.\n", + "\n", + "`prep()`: estima os parâmetros necessários a partir de um conjunto de treinamento que podem ser aplicados posteriormente a outros conjuntos de dados.\n", + "\n", + "`bake()`: aplica uma receita preparada às operações em qualquer conjunto de dados.\n" + ], + "metadata": { + "id": "Yb-7t7XcJaC8" + } + }, + { + "cell_type": "code", + "execution_count": null, + "source": [ + "# Prep and bake the recipe\r\n", + "preprocessed_df <- cuisines_recipe %>% \r\n", + " prep() %>% \r\n", + " bake(new_data = NULL) %>% \r\n", + " relocate(cuisine)\r\n", + "\r\n", + "# Display data\r\n", + "preprocessed_df %>% \r\n", + " slice_head(n = 5)\r\n", + "\r\n", + "# Quick summary stats\r\n", + "preprocessed_df %>% \r\n", + " introduce()" + ], + "outputs": [], + "metadata": { + "id": "9QhSgdpxJl44" + } + }, + { + "cell_type": "markdown", + "source": [ + "Vamos agora verificar a distribuição de nossas culinárias e compará-las com os dados desequilibrados.\n" + ], + "metadata": { + "id": "dmidELh_LdV7" + } + }, + { + "cell_type": "code", + "execution_count": null, + "source": [ + "# Distribution of cuisines\r\n", + "new_label_count <- preprocessed_df %>% \r\n", + " count(cuisine) %>% \r\n", + " arrange(desc(n))\r\n", + "\r\n", + "list(new_label_count = new_label_count,\r\n", + " old_label_count = old_label_count)" + ], + "outputs": [], + "metadata": { + "id": "aSh23klBLwDz" + } + }, + { + "cell_type": "markdown", + "source": [ + "Yum! Os dados estão limpos, balanceados e muito deliciosos 😋!\n", + "\n", + "> Normalmente, uma receita é usada como um pré-processador para modelagem, onde define quais etapas devem ser aplicadas a um conjunto de dados para prepará-lo para a modelagem. Nesse caso, um `workflow()` é tipicamente usado (como já vimos em nossas aulas anteriores) em vez de estimar manualmente uma receita.\n", + ">\n", + "> Assim, você geralmente não precisa usar **`prep()`** e **`bake()`** em receitas quando utiliza o tidymodels, mas essas são funções úteis para ter em sua caixa de ferramentas para confirmar que as receitas estão fazendo o que você espera, como no nosso caso.\n", + ">\n", + "> Quando você usa **`bake()`** em uma receita preparada com **`new_data = NULL`**, você obtém de volta os dados que forneceu ao definir a receita, mas já processados pelas etapas de pré-processamento.\n", + "\n", + "Agora vamos salvar uma cópia desses dados para uso em aulas futuras:\n" + ], + "metadata": { + "id": "HEu80HZ8L7ae" + } + }, + { + "cell_type": "code", + "execution_count": null, + "source": [ + "# Save preprocessed data\r\n", + "write_csv(preprocessed_df, \"../../../data/cleaned_cuisines_R.csv\")" + ], + "outputs": [], + "metadata": { + "id": "cBmCbIgrMOI6" + } + }, + { + "cell_type": "markdown", + "source": [ + "Este novo CSV agora pode ser encontrado na pasta raiz de dados.\n", + "\n", + "**🚀Desafio**\n", + "\n", + "Este currículo contém vários conjuntos de dados interessantes. Explore as pastas `data` e veja se alguma contém conjuntos de dados que seriam apropriados para classificação binária ou multi-classes. Que perguntas você faria sobre este conjunto de dados?\n", + "\n", + "## [**Quiz pós-aula**](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/20/)\n", + "\n", + "## **Revisão e Autoestudo**\n", + "\n", + "- Confira o [pacote themis](https://github.com/tidymodels/themis). Quais outras técnicas poderíamos usar para lidar com dados desbalanceados?\n", + "\n", + "- Site de referência dos modelos Tidy: [Tidy models](https://www.tidymodels.org/start/).\n", + "\n", + "- H. Wickham e G. Grolemund, [*R for Data Science: Visualize, Model, Transform, Tidy, and Import Data*](https://r4ds.had.co.nz/).\n", + "\n", + "#### AGRADECIMENTOS A:\n", + "\n", + "[`Allison Horst`](https://twitter.com/allison_horst/) por criar as ilustrações incríveis que tornam o R mais acolhedor e envolvente. Encontre mais ilustrações na sua [galeria](https://www.google.com/url?q=https://github.com/allisonhorst/stats-illustrations&sa=D&source=editors&ust=1626380772530000&usg=AOvVaw3zcfyCizFQZpkSLzxiiQEM).\n", + "\n", + "[Cassie Breviu](https://www.twitter.com/cassieview) e [Jen Looper](https://www.twitter.com/jenlooper) por criarem a versão original em Python deste módulo ♥️\n", + "\n", + "

\n", + " \n", + "

Arte por @allison_horst
\n" + ], + "metadata": { + "id": "WQs5621pMGwf" + } + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n---\n\n**Aviso Legal**: \nEste documento foi traduzido utilizando o serviço de tradução por IA [Co-op Translator](https://github.com/Azure/co-op-translator). Embora nos esforcemos para garantir a precisão, esteja ciente de que traduções automatizadas podem conter erros ou imprecisões. O documento original em seu idioma nativo deve ser considerado a fonte autoritativa. Para informações críticas, recomenda-se a tradução profissional realizada por humanos. Não nos responsabilizamos por quaisquer mal-entendidos ou interpretações equivocadas decorrentes do uso desta tradução.\n" + ] + } + ] +} \ No newline at end of file diff --git a/translations/pt-BR/4-Classification/1-Introduction/solution/notebook.ipynb b/translations/pt-BR/4-Classification/1-Introduction/solution/notebook.ipynb new file mode 100644 index 000000000..b568c29bc --- /dev/null +++ b/translations/pt-BR/4-Classification/1-Introduction/solution/notebook.ipynb @@ -0,0 +1,707 @@ +{ + "cells": [ + { + "source": [ + "# Deliciosas Culinárias Asiáticas e Indianas\n", + "\n", + "## Introdução\n", + "\n", + "A culinária asiática e indiana é conhecida por seus sabores ricos, ingredientes frescos e técnicas de preparo únicas. Este guia oferece uma visão geral de alguns pratos populares e dicas para prepará-los em casa.\n", + "\n", + "## Pratos Asiáticos Populares\n", + "\n", + "### Sushi\n", + "O sushi é um prato japonês que combina arroz temperado com vinagre e uma variedade de ingredientes, como peixe cru, vegetais e algas. É uma arte que exige prática, mas os resultados valem a pena.\n", + "\n", + "### Pad Thai\n", + "Pad Thai é um prato tailandês feito com macarrão de arroz, camarão ou frango, ovos, amendoim e molho de tamarindo. É uma combinação perfeita de sabores doces, azedos e salgados.\n", + "\n", + "### Dim Sum\n", + "Dim Sum é uma seleção de pequenos pratos chineses, geralmente servidos com chá. Inclui opções como bolinhos recheados, pãezinhos no vapor e rolinhos primavera.\n", + "\n", + "## Pratos Indianos Populares\n", + "\n", + "### Curry\n", + "Os curries indianos são conhecidos por suas misturas de especiarias, como cúrcuma, cominho e coentro. Eles podem ser feitos com vegetais, frango, carne ou frutos do mar.\n", + "\n", + "### Naan\n", + "Naan é um pão indiano macio e levemente tostado, geralmente servido como acompanhamento de curries. Pode ser simples ou recheado com alho, queijo ou outros ingredientes.\n", + "\n", + "### Biryani\n", + "Biryani é um prato de arroz aromático, preparado com especiarias, carne ou vegetais. É um prato único que combina sabores intensos e texturas variadas.\n", + "\n", + "## Dicas para Cozinhar em Casa\n", + "\n", + "- **Use ingredientes frescos:** A qualidade dos ingredientes faz toda a diferença no sabor final.\n", + "- **Experimente especiarias:** Não tenha medo de ajustar as especiarias ao seu gosto.\n", + "- **Pratique técnicas tradicionais:** Algumas receitas exigem métodos específicos, como cozinhar no vapor ou grelhar.\n", + "\n", + "## Conclusão\n", + "\n", + "Cozinhar pratos asiáticos e indianos em casa pode ser uma experiência gratificante e deliciosa. Com um pouco de prática e os ingredientes certos, você pode trazer os sabores autênticos dessas culinárias para sua mesa.\n" + ], + "cell_type": "markdown", + "metadata": {} + }, + { + "source": [ + "Instale o Imblearn, que permitirá o SMOTE. Este é um pacote do Scikit-learn que ajuda a lidar com dados desbalanceados ao realizar classificação. (https://imbalanced-learn.org/stable/)\n" + ], + "cell_type": "markdown", + "metadata": {} + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Requirement already satisfied: imblearn in /Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages (0.0)\n", + "Requirement already satisfied: imbalanced-learn in /Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages (from imblearn) (0.8.0)\n", + "Requirement already satisfied: numpy>=1.13.3 in /Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages (from imbalanced-learn->imblearn) (1.19.2)\n", + "Requirement already satisfied: scipy>=0.19.1 in /Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages (from imbalanced-learn->imblearn) (1.4.1)\n", + "Requirement already satisfied: scikit-learn>=0.24 in /Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages (from imbalanced-learn->imblearn) (0.24.2)\n", + "Requirement already satisfied: joblib>=0.11 in /Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages (from imbalanced-learn->imblearn) (0.16.0)\n", + "Requirement already satisfied: threadpoolctl>=2.0.0 in /Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages (from scikit-learn>=0.24->imbalanced-learn->imblearn) (2.1.0)\n", + "\u001b[33mWARNING: You are using pip version 20.2.3; however, version 21.1.2 is available.\n", + "You should consider upgrading via the '/Library/Frameworks/Python.framework/Versions/3.7/bin/python3.7 -m pip install --upgrade pip' command.\u001b[0m\n", + "Note: you may need to restart the kernel to use updated packages.\n" + ] + } + ], + "source": [ + "pip install imblearn" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "import pandas as pd\n", + "import matplotlib.pyplot as plt\n", + "import matplotlib as mpl\n", + "import numpy as np\n", + "from imblearn.over_sampling import SMOTE" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [], + "source": [ + "df = pd.read_csv('../../data/cuisines.csv')" + ] + }, + { + "source": [ + "Este conjunto de dados inclui 385 colunas indicando todos os tipos de ingredientes em várias culinárias de um conjunto específico de culinárias.\n" + ], + "cell_type": "markdown", + "metadata": {} + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + " Unnamed: 0 cuisine almond angelica anise anise_seed apple \\\n", + "0 65 indian 0 0 0 0 0 \n", + "1 66 indian 1 0 0 0 0 \n", + "2 67 indian 0 0 0 0 0 \n", + "3 68 indian 0 0 0 0 0 \n", + "4 69 indian 0 0 0 0 0 \n", + "\n", + " apple_brandy apricot armagnac ... whiskey white_bread white_wine \\\n", + "0 0 0 0 ... 0 0 0 \n", + "1 0 0 0 ... 0 0 0 \n", + "2 0 0 0 ... 0 0 0 \n", + "3 0 0 0 ... 0 0 0 \n", + "4 0 0 0 ... 0 0 0 \n", + "\n", + " whole_grain_wheat_flour wine wood yam yeast yogurt zucchini \n", + "0 0 0 0 0 0 0 0 \n", + "1 0 0 0 0 0 0 0 \n", + "2 0 0 0 0 0 0 0 \n", + "3 0 0 0 0 0 0 0 \n", + "4 0 0 0 0 0 1 0 \n", + "\n", + "[5 rows x 385 columns]" + ], + "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
Unnamed: 0cuisinealmondangelicaaniseanise_seedappleapple_brandyapricotarmagnac...whiskeywhite_breadwhite_winewhole_grain_wheat_flourwinewoodyamyeastyogurtzucchini
065indian00000000...0000000000
166indian10000000...0000000000
267indian00000000...0000000000
368indian00000000...0000000000
469indian00000000...0000000010
\n

5 rows × 385 columns

\n
" + }, + "metadata": {}, + "execution_count": 4 + } + ], + "source": [ + "df.head()" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "\nRangeIndex: 2448 entries, 0 to 2447\nColumns: 385 entries, Unnamed: 0 to zucchini\ndtypes: int64(384), object(1)\nmemory usage: 7.2+ MB\n" + ] + } + ], + "source": [ + "df.info()" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "korean 799\n", + "indian 598\n", + "chinese 442\n", + "japanese 320\n", + "thai 289\n", + "Name: cuisine, dtype: int64" + ] + }, + "metadata": {}, + "execution_count": 6 + } + ], + "source": [ + "df.cuisine.value_counts()" + ] + }, + { + "source": [ + "Mostre as culinárias em um gráfico de barras\n" + ], + "cell_type": "markdown", + "metadata": {} + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "" + ] + }, + "metadata": {}, + "execution_count": 7 + }, + { + "output_type": "display_data", + "data": { + "text/plain": "
", + "image/svg+xml": "\n\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n\n", + "image/png": "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\n" + }, + "metadata": { + "needs_background": "light" + } + } + ], + "source": [ + "df.cuisine.value_counts().plot.barh()" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "thai df: (289, 385)\njapanese df: (320, 385)\nchinese df: (442, 385)\nindian df: (598, 385)\nkorean df: (799, 385)\n" + ] + } + ], + "source": [ + "\n", + "thai_df = df[(df.cuisine == \"thai\")]\n", + "japanese_df = df[(df.cuisine == \"japanese\")]\n", + "chinese_df = df[(df.cuisine == \"chinese\")]\n", + "indian_df = df[(df.cuisine == \"indian\")]\n", + "korean_df = df[(df.cuisine == \"korean\")]\n", + "\n", + "print(f'thai df: {thai_df.shape}')\n", + "print(f'japanese df: {japanese_df.shape}')\n", + "print(f'chinese df: {chinese_df.shape}')\n", + "print(f'indian df: {indian_df.shape}')\n", + "print(f'korean df: {korean_df.shape}')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [], + "source": [ + "def create_ingredient_df(df):\n", + " # transpose df, drop cuisine and unnamed rows, sum the row to get total for ingredient and add value header to new df\n", + " ingredient_df = df.T.drop(['cuisine','Unnamed: 0']).sum(axis=1).to_frame('value')\n", + " # drop ingredients that have a 0 sum\n", + " ingredient_df = ingredient_df[(ingredient_df.T != 0).any()]\n", + " # sort df\n", + " ingredient_df = ingredient_df.sort_values(by='value', ascending=False, inplace=False)\n", + " return ingredient_df\n" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "" + ] + }, + "metadata": {}, + "execution_count": 10 + }, + { + "output_type": "display_data", + "data": { + "text/plain": "
", + "image/svg+xml": "\n\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n\n", + "image/png": "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\n" + }, + "metadata": { + "needs_background": "light" + } + } + ], + "source": [ + "thai_ingredient_df = create_ingredient_df(thai_df)\r\n", + "thai_ingredient_df.head(10).plot.barh()" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "" + ] + }, + "metadata": {}, + "execution_count": 11 + }, + { + "output_type": "display_data", + "data": { + "text/plain": "
", + "image/svg+xml": "\n\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n\n", + "image/png": "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\n" + }, + "metadata": { + "needs_background": "light" + } + } + ], + "source": [ + "japanese_ingredient_df = create_ingredient_df(japanese_df)\r\n", + "japanese_ingredient_df.head(10).plot.barh()" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "" + ] + }, + "metadata": {}, + "execution_count": 12 + }, + { + "output_type": "display_data", + "data": { + "text/plain": "
", + "image/svg+xml": "\n\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n\n", + "image/png": "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\n" + }, + "metadata": { + "needs_background": "light" + } + } + ], + "source": [ + "chinese_ingredient_df = create_ingredient_df(chinese_df)\r\n", + "chinese_ingredient_df.head(10).plot.barh()" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "" + ] + }, + "metadata": {}, + "execution_count": 13 + }, + { + "output_type": "display_data", + "data": { + "text/plain": "
", + "image/svg+xml": "\n\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n\n", + "image/png": "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\n" + }, + "metadata": { + "needs_background": "light" + } + } + ], + "source": [ + "indian_ingredient_df = create_ingredient_df(indian_df)\r\n", + "indian_ingredient_df.head(10).plot.barh()" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "" + ] + }, + "metadata": {}, + "execution_count": 14 + }, + { + "output_type": "display_data", + "data": { + "text/plain": "
", + "image/svg+xml": "\n\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n\n", + "image/png": "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\n" + }, + "metadata": { + "needs_background": "light" + } + } + ], + "source": [ + "korean_ingredient_df = create_ingredient_df(korean_df)\r\n", + "korean_ingredient_df.head(10).plot.barh()" + ] + }, + { + "source": [], + "cell_type": "markdown", + "metadata": {} + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + " almond angelica anise anise_seed apple apple_brandy apricot \\\n", + "0 0 0 0 0 0 0 0 \n", + "1 1 0 0 0 0 0 0 \n", + "2 0 0 0 0 0 0 0 \n", + "3 0 0 0 0 0 0 0 \n", + "4 0 0 0 0 0 0 0 \n", + "\n", + " armagnac artemisia artichoke ... whiskey white_bread white_wine \\\n", + "0 0 0 0 ... 0 0 0 \n", + "1 0 0 0 ... 0 0 0 \n", + "2 0 0 0 ... 0 0 0 \n", + "3 0 0 0 ... 0 0 0 \n", + "4 0 0 0 ... 0 0 0 \n", + "\n", + " whole_grain_wheat_flour wine wood yam yeast yogurt zucchini \n", + "0 0 0 0 0 0 0 0 \n", + "1 0 0 0 0 0 0 0 \n", + "2 0 0 0 0 0 0 0 \n", + "3 0 0 0 0 0 0 0 \n", + "4 0 0 0 0 0 1 0 \n", + "\n", + "[5 rows x 380 columns]" + ], + "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
almondangelicaaniseanise_seedappleapple_brandyapricotarmagnacartemisiaartichoke...whiskeywhite_breadwhite_winewhole_grain_wheat_flourwinewoodyamyeastyogurtzucchini
00000000000...0000000000
11000000000...0000000000
20000000000...0000000000
30000000000...0000000000
40000000000...0000000010
\n

5 rows × 380 columns

\n
" + }, + "metadata": {}, + "execution_count": 15 + } + ], + "source": [ + "feature_df= df.drop(['cuisine','Unnamed: 0','rice','garlic','ginger'], axis=1)\n", + "labels_df = df.cuisine #.unique()\n", + "feature_df.head()\n" + ] + }, + { + "source": [ + "Equilibre os dados com oversampling SMOTE para a classe mais alta. Leia mais aqui: https://imbalanced-learn.org/dev/references/generated/imblearn.over_sampling.SMOTE.html\n" + ], + "cell_type": "markdown", + "metadata": {} + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": {}, + "outputs": [], + "source": [ + "oversample = SMOTE()\n", + "transformed_feature_df, transformed_label_df = oversample.fit_resample(feature_df, labels_df)" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": {}, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "new label count: korean 799\nchinese 799\njapanese 799\nindian 799\nthai 799\nName: cuisine, dtype: int64\nold label count: korean 799\nindian 598\nchinese 442\njapanese 320\nthai 289\nName: cuisine, dtype: int64\n" + ] + } + ], + "source": [ + "print(f'new label count: {transformed_label_df.value_counts()}')\r\n", + "print(f'old label count: {df.cuisine.value_counts()}')" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + " almond angelica anise anise_seed apple apple_brandy apricot \\\n", + "0 0 0 0 0 0 0 0 \n", + "1 1 0 0 0 0 0 0 \n", + "2 0 0 0 0 0 0 0 \n", + "3 0 0 0 0 0 0 0 \n", + "4 0 0 0 0 0 0 0 \n", + "\n", + " armagnac artemisia artichoke ... whiskey white_bread white_wine \\\n", + "0 0 0 0 ... 0 0 0 \n", + "1 0 0 0 ... 0 0 0 \n", + "2 0 0 0 ... 0 0 0 \n", + "3 0 0 0 ... 0 0 0 \n", + "4 0 0 0 ... 0 0 0 \n", + "\n", + " whole_grain_wheat_flour wine wood yam yeast yogurt zucchini \n", + "0 0 0 0 0 0 0 0 \n", + "1 0 0 0 0 0 0 0 \n", + "2 0 0 0 0 0 0 0 \n", + "3 0 0 0 0 0 0 0 \n", + "4 0 0 0 0 0 1 0 \n", + "\n", + "[5 rows x 380 columns]" + ], + "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
almondangelicaaniseanise_seedappleapple_brandyapricotarmagnacartemisiaartichoke...whiskeywhite_breadwhite_winewhole_grain_wheat_flourwinewoodyamyeastyogurtzucchini
00000000000...0000000000
11000000000...0000000000
20000000000...0000000000
30000000000...0000000000
40000000000...0000000010
\n

5 rows × 380 columns

\n
" + }, + "metadata": {}, + "execution_count": 18 + } + ], + "source": [ + "transformed_feature_df.head()" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + " cuisine almond angelica anise anise_seed apple apple_brandy \\\n", + "0 indian 0 0 0 0 0 0 \n", + "1 indian 1 0 0 0 0 0 \n", + "2 indian 0 0 0 0 0 0 \n", + "3 indian 0 0 0 0 0 0 \n", + "4 indian 0 0 0 0 0 0 \n", + "... ... ... ... ... ... ... ... \n", + "3990 thai 0 0 0 0 0 0 \n", + "3991 thai 0 0 0 0 0 0 \n", + "3992 thai 0 0 0 0 0 0 \n", + "3993 thai 0 0 0 0 0 0 \n", + "3994 thai 0 0 0 0 0 0 \n", + "\n", + " apricot armagnac artemisia ... whiskey white_bread white_wine \\\n", + "0 0 0 0 ... 0 0 0 \n", + "1 0 0 0 ... 0 0 0 \n", + "2 0 0 0 ... 0 0 0 \n", + "3 0 0 0 ... 0 0 0 \n", + "4 0 0 0 ... 0 0 0 \n", + "... ... ... ... ... ... ... ... \n", + "3990 0 0 0 ... 0 0 0 \n", + "3991 0 0 0 ... 0 0 0 \n", + "3992 0 0 0 ... 0 0 0 \n", + "3993 0 0 0 ... 0 0 0 \n", + "3994 0 0 0 ... 0 0 0 \n", + "\n", + " whole_grain_wheat_flour wine wood yam yeast yogurt zucchini \n", + "0 0 0 0 0 0 0 0 \n", + "1 0 0 0 0 0 0 0 \n", + "2 0 0 0 0 0 0 0 \n", + "3 0 0 0 0 0 0 0 \n", + "4 0 0 0 0 0 1 0 \n", + "... ... ... ... ... ... ... ... \n", + "3990 0 0 0 0 0 0 0 \n", + "3991 0 0 0 0 0 0 0 \n", + "3992 0 0 0 0 0 0 0 \n", + "3993 0 0 0 0 0 0 0 \n", + "3994 0 0 0 0 0 0 0 \n", + "\n", + "[3995 rows x 381 columns]" + ], + "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 \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
cuisinealmondangelicaaniseanise_seedappleapple_brandyapricotarmagnacartemisia...whiskeywhite_breadwhite_winewhole_grain_wheat_flourwinewoodyamyeastyogurtzucchini
0indian000000000...0000000000
1indian100000000...0000000000
2indian000000000...0000000000
3indian000000000...0000000000
4indian000000000...0000000010
..................................................................
3990thai000000000...0000000000
3991thai000000000...0000000000
3992thai000000000...0000000000
3993thai000000000...0000000000
3994thai000000000...0000000000
\n

3995 rows × 381 columns

\n
" + }, + "metadata": {}, + "execution_count": 19 + } + ], + "source": [ + "# export transformed data to new df for classification\n", + "transformed_df = pd.concat([transformed_label_df,transformed_feature_df],axis=1, join='outer')\n", + "transformed_df" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": {}, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "\nRangeIndex: 3995 entries, 0 to 3994\nColumns: 381 entries, cuisine to zucchini\ndtypes: int64(380), object(1)\nmemory usage: 11.6+ MB\n" + ] + } + ], + "source": [ + "transformed_df.info()" + ] + }, + { + "source": [], + "cell_type": "markdown", + "metadata": {} + }, + { + "cell_type": "code", + "execution_count": 21, + "metadata": {}, + "outputs": [], + "source": [ + "transformed_df.to_csv(\"../../data/cleaned_cuisines.csv\")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n---\n\n**Aviso Legal**: \nEste documento foi traduzido utilizando o serviço de tradução por IA [Co-op Translator](https://github.com/Azure/co-op-translator). Embora nos esforcemos para garantir a precisão, esteja ciente de que traduções automatizadas podem conter erros ou imprecisões. O documento original em seu idioma nativo deve ser considerado a fonte autoritativa. Para informações críticas, recomenda-se a tradução profissional realizada por humanos. Não nos responsabilizamos por quaisquer mal-entendidos ou interpretações equivocadas decorrentes do uso desta tradução.\n" + ] + } + ], + "metadata": { + "interpreter": { + "hash": "70b38d7a306a849643e446cd70466270a13445e5987dfa1344ef2b127438fa4d" + }, + "kernelspec": { + "name": "python3", + "display_name": "Python 3.7.0 64-bit ('3.7')" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.7.0" + }, + "metadata": { + "interpreter": { + "hash": "70b38d7a306a849643e446cd70466270a13445e5987dfa1344ef2b127438fa4d" + } + }, + "coopTranslator": { + "original_hash": "1da12ed6d238756959b8de9cac2a35a2", + "translation_date": "2025-08-29T23:54:14+00:00", + "source_file": "4-Classification/1-Introduction/solution/notebook.ipynb", + "language_code": "br" + } + }, + "nbformat": 4, + "nbformat_minor": 4 +} \ No newline at end of file diff --git a/translations/pt-BR/4-Classification/2-Classifiers-1/README.md b/translations/pt-BR/4-Classification/2-Classifiers-1/README.md new file mode 100644 index 000000000..978e3b19a --- /dev/null +++ b/translations/pt-BR/4-Classification/2-Classifiers-1/README.md @@ -0,0 +1,244 @@ +# Classificadores de culinária 1 + +Nesta lição, você usará o conjunto de dados que salvou na última lição, cheio de dados equilibrados e limpos sobre culinárias. + +Você usará este conjunto de dados com uma variedade de classificadores para _prever uma culinária nacional com base em um grupo de ingredientes_. Enquanto faz isso, aprenderá mais sobre algumas das maneiras pelas quais os algoritmos podem ser utilizados para tarefas de classificação. + +## [Quiz pré-aula](https://ff-quizzes.netlify.app/en/ml/) +# Preparação + +Assumindo que você completou [Lição 1](../1-Introduction/README.md), certifique-se de que um arquivo _cleaned_cuisines.csv_ exista na pasta raiz `/data` para estas quatro lições. + +## Exercício - prever uma culinária nacional + +1. Trabalhando na pasta _notebook.ipynb_ desta lição, importe esse arquivo junto com a biblioteca Pandas: + + ```python + import pandas as pd + cuisines_df = pd.read_csv("../data/cleaned_cuisines.csv") + cuisines_df.head() + ``` + + Os dados têm esta aparência: + +| | Unnamed: 0 | cuisine | almond | angelica | anise | anise_seed | apple | apple_brandy | apricot | armagnac | ... | whiskey | white_bread | white_wine | whole_grain_wheat_flour | wine | wood | yam | yeast | yogurt | zucchini | +| --- | ---------- | ------- | ------ | -------- | ----- | ---------- | ----- | ------------ | ------- | -------- | --- | ------- | ----------- | ---------- | ----------------------- | ---- | ---- | --- | ----- | ------ | -------- | +| 0 | 0 | indian | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ... | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | +| 1 | 1 | indian | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ... | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | +| 2 | 2 | indian | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ... | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | +| 3 | 3 | indian | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ... | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | +| 4 | 4 | indian | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ... | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | + + +1. Agora, importe várias outras bibliotecas: + + ```python + from sklearn.linear_model import LogisticRegression + from sklearn.model_selection import train_test_split, cross_val_score + from sklearn.metrics import accuracy_score,precision_score,confusion_matrix,classification_report, precision_recall_curve + from sklearn.svm import SVC + import numpy as np + ``` + +1. Divida as coordenadas X e y em dois dataframes para treinamento. `cuisine` pode ser o dataframe de rótulos: + + ```python + cuisines_label_df = cuisines_df['cuisine'] + cuisines_label_df.head() + ``` + + Ele terá esta aparência: + + ```output + 0 indian + 1 indian + 2 indian + 3 indian + 4 indian + Name: cuisine, dtype: object + ``` + +1. Remova a coluna `Unnamed: 0` e a coluna `cuisine`, chamando `drop()`. Salve o restante dos dados como características treináveis: + + ```python + cuisines_feature_df = cuisines_df.drop(['Unnamed: 0', 'cuisine'], axis=1) + cuisines_feature_df.head() + ``` + + Suas características terão esta aparência: + +| | almond | angelica | anise | anise_seed | apple | apple_brandy | apricot | armagnac | artemisia | artichoke | ... | whiskey | white_bread | white_wine | whole_grain_wheat_flour | wine | wood | yam | yeast | yogurt | zucchini | +| ---: | -----: | -------: | ----: | ---------: | ----: | -----------: | ------: | -------: | --------: | --------: | ---: | ------: | ----------: | ---------: | ----------------------: | ---: | ---: | ---: | ----: | -----: | -------: | +| 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ... | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | +| 1 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ... | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | +| 2 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ... | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | +| 3 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ... | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | +| 4 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ... | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | + +Agora você está pronto para treinar seu modelo! + +## Escolhendo seu classificador + +Agora que seus dados estão limpos e prontos para treinamento, você precisa decidir qual algoritmo usar para a tarefa. + +O Scikit-learn agrupa classificação sob Aprendizado Supervisionado, e nessa categoria você encontrará muitas maneiras de classificar. [A variedade](https://scikit-learn.org/stable/supervised_learning.html) pode parecer confusa à primeira vista. Os seguintes métodos incluem técnicas de classificação: + +- Modelos Lineares +- Máquinas de Vetores de Suporte +- Descida de Gradiente Estocástico +- Vizinhos Mais Próximos +- Processos Gaussianos +- Árvores de Decisão +- Métodos de Conjunto (voting Classifier) +- Algoritmos multiclasses e multioutput (classificação multiclasses e multilabel, classificação multiclasses-multioutput) + +> Você também pode usar [redes neurais para classificar dados](https://scikit-learn.org/stable/modules/neural_networks_supervised.html#classification), mas isso está fora do escopo desta lição. + +### Qual classificador escolher? + +Então, qual classificador você deve escolher? Muitas vezes, testar vários e procurar um bom resultado é uma maneira de avaliar. O Scikit-learn oferece uma [comparação lado a lado](https://scikit-learn.org/stable/auto_examples/classification/plot_classifier_comparison.html) em um conjunto de dados criado, comparando KNeighbors, SVC de duas maneiras, GaussianProcessClassifier, DecisionTreeClassifier, RandomForestClassifier, MLPClassifier, AdaBoostClassifier, GaussianNB e QuadraticDiscrinationAnalysis, mostrando os resultados visualizados: + +![comparação de classificadores](../../../../4-Classification/2-Classifiers-1/images/comparison.png) +> Gráficos gerados na documentação do Scikit-learn + +> O AutoML resolve esse problema de forma prática ao executar essas comparações na nuvem, permitindo que você escolha o melhor algoritmo para seus dados. Experimente [aqui](https://docs.microsoft.com/learn/modules/automate-model-selection-with-azure-automl/?WT.mc_id=academic-77952-leestott) + +### Uma abordagem melhor + +Uma maneira melhor do que adivinhar aleatoriamente, no entanto, é seguir as ideias deste [guia de referência de ML](https://docs.microsoft.com/azure/machine-learning/algorithm-cheat-sheet?WT.mc_id=academic-77952-leestott) para download. Aqui, descobrimos que, para nosso problema multiclasses, temos algumas opções: + +![guia para problemas multiclasses](../../../../4-Classification/2-Classifiers-1/images/cheatsheet.png) +> Uma seção do Guia de Algoritmos da Microsoft, detalhando opções de classificação multiclasses + +✅ Baixe este guia, imprima e pendure na sua parede! + +### Raciocínio + +Vamos ver se conseguimos raciocinar sobre diferentes abordagens, dadas as restrições que temos: + +- **Redes neurais são muito pesadas**. Dado nosso conjunto de dados limpo, mas minimalista, e o fato de que estamos executando o treinamento localmente via notebooks, redes neurais são muito pesadas para esta tarefa. +- **Nenhum classificador de duas classes**. Não usamos um classificador de duas classes, então isso exclui o one-vs-all. +- **Árvore de decisão ou regressão logística podem funcionar**. Uma árvore de decisão pode funcionar, ou regressão logística para dados multiclasses. +- **Árvores de decisão impulsionadas multiclasses resolvem outro problema**. A árvore de decisão impulsionada multiclasses é mais adequada para tarefas não paramétricas, como tarefas projetadas para construir rankings, então não é útil para nós. + +### Usando Scikit-learn + +Usaremos o Scikit-learn para analisar nossos dados. No entanto, existem muitas maneiras de usar regressão logística no Scikit-learn. Veja os [parâmetros que podem ser passados](https://scikit-learn.org/stable/modules/generated/sklearn.linear_model.LogisticRegression.html?highlight=logistic%20regressio#sklearn.linear_model.LogisticRegression). + +Basicamente, há dois parâmetros importantes - `multi_class` e `solver` - que precisamos especificar ao pedir ao Scikit-learn para realizar uma regressão logística. O valor de `multi_class` aplica um certo comportamento. O valor do solver define qual algoritmo usar. Nem todos os solvers podem ser combinados com todos os valores de `multi_class`. + +De acordo com a documentação, no caso multiclasses, o algoritmo de treinamento: + +- **Usa o esquema one-vs-rest (OvR)**, se a opção `multi_class` estiver configurada como `ovr` +- **Usa a perda de entropia cruzada**, se a opção `multi_class` estiver configurada como `multinomial`. (Atualmente, a opção `multinomial` é suportada apenas pelos solvers ‘lbfgs’, ‘sag’, ‘saga’ e ‘newton-cg’.) + +> 🎓 O 'esquema' aqui pode ser 'ovr' (one-vs-rest) ou 'multinomial'. Como a regressão logística foi projetada para suportar classificação binária, esses esquemas permitem que ela lide melhor com tarefas de classificação multiclasses. [fonte](https://machinelearningmastery.com/one-vs-rest-and-one-vs-one-for-multi-class-classification/) + +> 🎓 O 'solver' é definido como "o algoritmo a ser usado no problema de otimização". [fonte](https://scikit-learn.org/stable/modules/generated/sklearn.linear_model.LogisticRegression.html?highlight=logistic%20regressio#sklearn.linear_model.LogisticRegression). + +O Scikit-learn oferece esta tabela para explicar como os solvers lidam com diferentes desafios apresentados por diferentes tipos de estruturas de dados: + +![solvers](../../../../4-Classification/2-Classifiers-1/images/solvers.png) + +## Exercício - dividir os dados + +Podemos focar na regressão logística para nosso primeiro teste de treinamento, já que você aprendeu sobre ela recentemente em uma lição anterior. +Divida seus dados em grupos de treinamento e teste chamando `train_test_split()`: + +```python +X_train, X_test, y_train, y_test = train_test_split(cuisines_feature_df, cuisines_label_df, test_size=0.3) +``` + +## Exercício - aplicar regressão logística + +Como você está usando o caso multiclasses, precisa escolher qual _esquema_ usar e qual _solver_ configurar. Use LogisticRegression com uma configuração multiclasses e o solver **liblinear** para treinar. + +1. Crie uma regressão logística com `multi_class` configurado como `ovr` e o solver configurado como `liblinear`: + + ```python + lr = LogisticRegression(multi_class='ovr',solver='liblinear') + model = lr.fit(X_train, np.ravel(y_train)) + + accuracy = model.score(X_test, y_test) + print ("Accuracy is {}".format(accuracy)) + ``` + + ✅ Experimente um solver diferente, como `lbfgs`, que frequentemente é configurado como padrão +> Observação, use a função Pandas [`ravel`](https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.Series.ravel.html) para achatar seus dados quando necessário. +A precisão é boa em mais de **80%**! + +1. Você pode ver este modelo em ação testando uma linha de dados (#50): + + ```python + print(f'ingredients: {X_test.iloc[50][X_test.iloc[50]!=0].keys()}') + print(f'cuisine: {y_test.iloc[50]}') + ``` + + O resultado é exibido: + + ```output + ingredients: Index(['cilantro', 'onion', 'pea', 'potato', 'tomato', 'vegetable_oil'], dtype='object') + cuisine: indian + ``` + + ✅ Experimente um número de linha diferente e verifique os resultados. + +1. Indo mais a fundo, você pode verificar a precisão desta previsão: + + ```python + test= X_test.iloc[50].values.reshape(-1, 1).T + proba = model.predict_proba(test) + classes = model.classes_ + resultdf = pd.DataFrame(data=proba, columns=classes) + + topPrediction = resultdf.T.sort_values(by=[0], ascending = [False]) + topPrediction.head() + ``` + + O resultado é exibido - culinária indiana é sua melhor aposta, com boa probabilidade: + + | | 0 | + | -------: | -------: | + | indian | 0.715851 | + | chinese | 0.229475 | + | japanese | 0.029763 | + | korean | 0.017277 | + | thai | 0.007634 | + + ✅ Você consegue explicar por que o modelo tem tanta certeza de que se trata de uma culinária indiana? + +1. Obtenha mais detalhes imprimindo um relatório de classificação, como você fez nas lições de regressão: + + ```python + y_pred = model.predict(X_test) + print(classification_report(y_test,y_pred)) + ``` + + | | precisão | recall | f1-score | suporte | + | ------------ | -------- | ------ | -------- | ------- | + | chinese | 0.73 | 0.71 | 0.72 | 229 | + | indian | 0.91 | 0.93 | 0.92 | 254 | + | japanese | 0.70 | 0.75 | 0.72 | 220 | + | korean | 0.86 | 0.76 | 0.81 | 242 | + | thai | 0.79 | 0.85 | 0.82 | 254 | + | accuracy | 0.80 | 1199 | | | + | macro avg | 0.80 | 0.80 | 0.80 | 1199 | + | weighted avg | 0.80 | 0.80 | 0.80 | 1199 | + +## 🚀Desafio + +Nesta lição, você usou seus dados limpos para construir um modelo de aprendizado de máquina que pode prever uma culinária nacional com base em uma série de ingredientes. Reserve um tempo para explorar as muitas opções que o Scikit-learn oferece para classificar dados. Aprofunde-se no conceito de 'solver' para entender o que acontece nos bastidores. + +## [Quiz pós-aula](https://ff-quizzes.netlify.app/en/ml/) + +## Revisão & Autoestudo + +Aprofunde-se um pouco mais na matemática por trás da regressão logística nesta [lição](https://people.eecs.berkeley.edu/~russell/classes/cs194/f11/lectures/CS194%20Fall%202011%20Lecture%2006.pdf). +## Tarefa + +[Estude os solvers](assignment.md) + +--- + +**Aviso Legal**: +Este documento foi traduzido utilizando o serviço de tradução por IA [Co-op Translator](https://github.com/Azure/co-op-translator). Embora nos esforcemos para garantir a precisão, esteja ciente de que traduções automatizadas podem conter erros ou imprecisões. O documento original em seu idioma nativo deve ser considerado a fonte autoritativa. Para informações críticas, recomenda-se a tradução profissional realizada por humanos. Não nos responsabilizamos por quaisquer mal-entendidos ou interpretações equivocadas decorrentes do uso desta tradução. \ No newline at end of file diff --git a/translations/pt-BR/4-Classification/2-Classifiers-1/assignment.md b/translations/pt-BR/4-Classification/2-Classifiers-1/assignment.md new file mode 100644 index 000000000..4771c049a --- /dev/null +++ b/translations/pt-BR/4-Classification/2-Classifiers-1/assignment.md @@ -0,0 +1,14 @@ +# Estude os solucionadores +## Instruções + +Nesta lição, você aprendeu sobre os diversos solucionadores que combinam algoritmos com um processo de aprendizado de máquina para criar um modelo preciso. Revise os solucionadores listados na lição e escolha dois. Com suas próprias palavras, compare e contraste esses dois solucionadores. Que tipo de problema eles resolvem? Como eles trabalham com diferentes estruturas de dados? Por que você escolheria um em vez do outro? +## Rubrica + +| Critérios | Exemplary | Adequado | Precisa de Melhorias | +| --------- | ---------------------------------------------------------------------------------------------- | ------------------------------------------------ | ---------------------------- | +| | Um arquivo .doc é apresentado com dois parágrafos, um para cada solucionador, comparando-os de forma reflexiva. | Um arquivo .doc é apresentado com apenas um parágrafo | A tarefa está incompleta | + +--- + +**Aviso Legal**: +Este documento foi traduzido utilizando o serviço de tradução por IA [Co-op Translator](https://github.com/Azure/co-op-translator). Embora nos esforcemos para garantir a precisão, esteja ciente de que traduções automatizadas podem conter erros ou imprecisões. O documento original em seu idioma nativo deve ser considerado a fonte autoritativa. Para informações críticas, recomenda-se a tradução profissional realizada por humanos. Não nos responsabilizamos por quaisquer mal-entendidos ou interpretações equivocadas decorrentes do uso desta tradução. \ No newline at end of file diff --git a/translations/pt-BR/4-Classification/2-Classifiers-1/notebook.ipynb b/translations/pt-BR/4-Classification/2-Classifiers-1/notebook.ipynb new file mode 100644 index 000000000..498a8190e --- /dev/null +++ b/translations/pt-BR/4-Classification/2-Classifiers-1/notebook.ipynb @@ -0,0 +1,41 @@ +{ + "metadata": { + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": 3 + }, + "orig_nbformat": 2, + "coopTranslator": { + "original_hash": "68829b06b4dcd512d3327849191f4d7f", + "translation_date": "2025-08-29T23:41:00+00:00", + "source_file": "4-Classification/2-Classifiers-1/notebook.ipynb", + "language_code": "br" + } + }, + "nbformat": 4, + "nbformat_minor": 2, + "cells": [ + { + "source": [ + "# Construir Modelos de Classificação\n" + ], + "cell_type": "markdown", + "metadata": {} + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n---\n\n**Aviso Legal**: \nEste documento foi traduzido utilizando o serviço de tradução por IA [Co-op Translator](https://github.com/Azure/co-op-translator). Embora nos esforcemos para garantir a precisão, esteja ciente de que traduções automatizadas podem conter erros ou imprecisões. O documento original em seu idioma nativo deve ser considerado a fonte autoritativa. Para informações críticas, recomenda-se a tradução profissional realizada por humanos. Não nos responsabilizamos por quaisquer mal-entendidos ou interpretações equivocadas decorrentes do uso desta tradução.\n" + ] + } + ] +} \ No newline at end of file diff --git a/translations/pt-BR/4-Classification/2-Classifiers-1/solution/Julia/README.md b/translations/pt-BR/4-Classification/2-Classifiers-1/solution/Julia/README.md new file mode 100644 index 000000000..c58234bae --- /dev/null +++ b/translations/pt-BR/4-Classification/2-Classifiers-1/solution/Julia/README.md @@ -0,0 +1,6 @@ + + +--- + +**Aviso Legal**: +Este documento foi traduzido utilizando o serviço de tradução por IA [Co-op Translator](https://github.com/Azure/co-op-translator). Embora nos esforcemos para garantir a precisão, esteja ciente de que traduções automatizadas podem conter erros ou imprecisões. O documento original em seu idioma nativo deve ser considerado a fonte autoritativa. Para informações críticas, recomenda-se a tradução profissional realizada por humanos. Não nos responsabilizamos por quaisquer mal-entendidos ou interpretações equivocadas decorrentes do uso desta tradução. \ No newline at end of file diff --git a/translations/pt-BR/4-Classification/2-Classifiers-1/solution/R/lesson_11-R.ipynb b/translations/pt-BR/4-Classification/2-Classifiers-1/solution/R/lesson_11-R.ipynb new file mode 100644 index 000000000..79d9b67bb --- /dev/null +++ b/translations/pt-BR/4-Classification/2-Classifiers-1/solution/R/lesson_11-R.ipynb @@ -0,0 +1,1300 @@ +{ + "nbformat": 4, + "nbformat_minor": 2, + "metadata": { + "colab": { + "name": "lesson_11-R.ipynb", + "provenance": [], + "collapsed_sections": [], + "toc_visible": true + }, + "kernelspec": { + "name": "ir", + "display_name": "R" + }, + "language_info": { + "name": "R" + }, + "coopTranslator": { + "original_hash": "6ea6a5171b1b99b7b5a55f7469c048d2", + "translation_date": "2025-08-29T23:45:42+00:00", + "source_file": "4-Classification/2-Classifiers-1/solution/R/lesson_11-R.ipynb", + "language_code": "br" + } + }, + "cells": [ + { + "cell_type": "markdown", + "source": [ + "# Construir um modelo de classificação: Deliciosas culinárias asiáticas e indianas\n" + ], + "metadata": { + "id": "zs2woWv_HoE8" + } + }, + { + "cell_type": "markdown", + "source": [ + "## Classificadores de culinária 1\n", + "\n", + "Nesta lição, exploraremos uma variedade de classificadores para *prever uma culinária nacional específica com base em um grupo de ingredientes.* Enquanto fazemos isso, aprenderemos mais sobre algumas das maneiras como os algoritmos podem ser utilizados em tarefas de classificação.\n", + "\n", + "### [**Quiz pré-aula**](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/21/)\n", + "\n", + "### **Preparação**\n", + "\n", + "Esta lição se baseia na nossa [lição anterior](https://github.com/microsoft/ML-For-Beginners/blob/main/4-Classification/1-Introduction/solution/lesson_10-R.ipynb), onde:\n", + "\n", + "- Fizemos uma introdução leve às classificações usando um conjunto de dados sobre todas as brilhantes culinárias da Ásia e Índia 😋.\n", + "\n", + "- Exploramos alguns [verbos do dplyr](https://dplyr.tidyverse.org/) para preparar e limpar nossos dados.\n", + "\n", + "- Criamos visualizações bonitas usando ggplot2.\n", + "\n", + "- Demonstramos como lidar com dados desbalanceados ao pré-processá-los usando [recipes](https://recipes.tidymodels.org/articles/Simple_Example.html).\n", + "\n", + "- Mostramos como `prep` e `bake` nossa receita para confirmar que ela funcionará como esperado.\n", + "\n", + "#### **Pré-requisito**\n", + "\n", + "Para esta lição, precisaremos dos seguintes pacotes para limpar, preparar e visualizar nossos dados:\n", + "\n", + "- `tidyverse`: O [tidyverse](https://www.tidyverse.org/) é uma [coleção de pacotes R](https://www.tidyverse.org/packages) projetada para tornar a ciência de dados mais rápida, fácil e divertida!\n", + "\n", + "- `tidymodels`: O framework [tidymodels](https://www.tidymodels.org/) é uma [coleção de pacotes](https://www.tidymodels.org/packages/) para modelagem e aprendizado de máquina.\n", + "\n", + "- `themis`: O pacote [themis](https://themis.tidymodels.org/) fornece etapas extras de receitas para lidar com dados desbalanceados.\n", + "\n", + "- `nnet`: O pacote [nnet](https://cran.r-project.org/web/packages/nnet/nnet.pdf) fornece funções para estimar redes neurais feed-forward com uma única camada oculta e para modelos de regressão logística multinomial.\n", + "\n", + "Você pode instalá-los como:\n" + ], + "metadata": { + "id": "iDFOb3ebHwQC" + } + }, + { + "cell_type": "markdown", + "source": [ + "`install.packages(c(\"tidyverse\", \"tidymodels\", \"DataExplorer\", \"here\"))`\n", + "\n", + "Alternativamente, o script abaixo verifica se você possui os pacotes necessários para completar este módulo e os instala caso estejam ausentes.\n" + ], + "metadata": { + "id": "4V85BGCjII7F" + } + }, + { + "cell_type": "code", + "execution_count": 2, + "source": [ + "suppressWarnings(if (!require(\"pacman\"))install.packages(\"pacman\"))\r\n", + "\r\n", + "pacman::p_load(tidyverse, tidymodels, themis, here)" + ], + "outputs": [ + { + "output_type": "stream", + "name": "stderr", + "text": [ + "Loading required package: pacman\n", + "\n" + ] + } + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "an5NPyyKIKNR", + "outputId": "834d5e74-f4b8-49f9-8ab5-4c52ff2d7bc8" + } + }, + { + "cell_type": "markdown", + "source": [ + "## 1. Divida os dados em conjuntos de treinamento e teste.\n", + "\n", + "Vamos começar escolhendo alguns passos da nossa lição anterior.\n", + "\n", + "### Remova os ingredientes mais comuns que geram confusão entre diferentes culinárias, usando `dplyr::select()`.\n", + "\n", + "Todo mundo adora arroz, alho e gengibre!\n" + ], + "metadata": { + "id": "0ax9GQLBINVv" + } + }, + { + "cell_type": "code", + "execution_count": 3, + "source": [ + "# Load the original cuisines data\r\n", + "df <- read_csv(file = \"https://raw.githubusercontent.com/microsoft/ML-For-Beginners/main/4-Classification/data/cuisines.csv\")\r\n", + "\r\n", + "# Drop id column, rice, garlic and ginger from our original data set\r\n", + "df_select <- df %>% \r\n", + " select(-c(1, rice, garlic, ginger)) %>%\r\n", + " # Encode cuisine column as categorical\r\n", + " mutate(cuisine = factor(cuisine))\r\n", + "\r\n", + "# Display new data set\r\n", + "df_select %>% \r\n", + " slice_head(n = 5)\r\n", + "\r\n", + "# Display distribution of cuisines\r\n", + "df_select %>% \r\n", + " count(cuisine) %>% \r\n", + " arrange(desc(n))" + ], + "outputs": [ + { + "output_type": "stream", + "name": "stderr", + "text": [ + "New names:\n", + "* `` -> ...1\n", + "\n", + "\u001b[1m\u001b[1mRows: \u001b[1m\u001b[22m\u001b[34m\u001b[34m2448\u001b[34m\u001b[39m \u001b[1m\u001b[1mColumns: \u001b[1m\u001b[22m\u001b[34m\u001b[34m385\u001b[34m\u001b[39m\n", + "\n", + "\u001b[36m──\u001b[39m \u001b[1m\u001b[1mColumn specification\u001b[1m\u001b[22m \u001b[36m────────────────────────────────────────────────────────\u001b[39m\n", + "\u001b[1mDelimiter:\u001b[22m \",\"\n", + "\u001b[31mchr\u001b[39m (1): cuisine\n", + "\u001b[32mdbl\u001b[39m (384): ...1, almond, angelica, anise, anise_seed, apple, apple_brandy, a...\n", + "\n", + "\n", + "\u001b[36mℹ\u001b[39m Use \u001b[30m\u001b[47m\u001b[30m\u001b[47m`spec()`\u001b[47m\u001b[30m\u001b[49m\u001b[39m to retrieve the full column specification for this data.\n", + "\u001b[36mℹ\u001b[39m Specify the column types or set \u001b[30m\u001b[47m\u001b[30m\u001b[47m`show_col_types = FALSE`\u001b[47m\u001b[30m\u001b[49m\u001b[39m to quiet this message.\n", + "\n" + ] + }, + { + "output_type": "display_data", + "data": { + "text/plain": [ + " cuisine almond angelica anise anise_seed apple apple_brandy apricot armagnac\n", + "1 indian 0 0 0 0 0 0 0 0 \n", + "2 indian 1 0 0 0 0 0 0 0 \n", + "3 indian 0 0 0 0 0 0 0 0 \n", + "4 indian 0 0 0 0 0 0 0 0 \n", + "5 indian 0 0 0 0 0 0 0 0 \n", + " artemisia ⋯ whiskey white_bread white_wine whole_grain_wheat_flour wine wood\n", + "1 0 ⋯ 0 0 0 0 0 0 \n", + "2 0 ⋯ 0 0 0 0 0 0 \n", + "3 0 ⋯ 0 0 0 0 0 0 \n", + "4 0 ⋯ 0 0 0 0 0 0 \n", + "5 0 ⋯ 0 0 0 0 0 0 \n", + " yam yeast yogurt zucchini\n", + "1 0 0 0 0 \n", + "2 0 0 0 0 \n", + "3 0 0 0 0 \n", + "4 0 0 0 0 \n", + "5 0 0 1 0 " + ], + "text/markdown": [ + "\n", + "A tibble: 5 × 381\n", + "\n", + "| cuisine <fct> | almond <dbl> | angelica <dbl> | anise <dbl> | anise_seed <dbl> | apple <dbl> | apple_brandy <dbl> | apricot <dbl> | armagnac <dbl> | artemisia <dbl> | ⋯ ⋯ | whiskey <dbl> | white_bread <dbl> | white_wine <dbl> | whole_grain_wheat_flour <dbl> | wine <dbl> | wood <dbl> | yam <dbl> | yeast <dbl> | yogurt <dbl> | zucchini <dbl> |\n", + "|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|\n", + "| indian | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ⋯ | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |\n", + "| indian | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ⋯ | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |\n", + "| indian | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ⋯ | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |\n", + "| indian | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ⋯ | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |\n", + "| indian | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ⋯ | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 |\n", + "\n" + ], + "text/latex": [ + "A tibble: 5 × 381\n", + "\\begin{tabular}{lllllllllllllllllllll}\n", + " cuisine & almond & angelica & anise & anise\\_seed & apple & apple\\_brandy & apricot & armagnac & artemisia & ⋯ & whiskey & white\\_bread & white\\_wine & whole\\_grain\\_wheat\\_flour & wine & wood & yam & yeast & yogurt & zucchini\\\\\n", + " & & & & & & & & & & ⋯ & & & & & & & & & & \\\\\n", + "\\hline\n", + "\t indian & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & ⋯ & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0\\\\\n", + "\t indian & 1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & ⋯ & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0\\\\\n", + "\t indian & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & ⋯ & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0\\\\\n", + "\t indian & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & ⋯ & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0\\\\\n", + "\t indian & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & ⋯ & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 1 & 0\\\\\n", + "\\end{tabular}\n" + ], + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "
A tibble: 5 × 381
cuisinealmondangelicaaniseanise_seedappleapple_brandyapricotarmagnacartemisiawhiskeywhite_breadwhite_winewhole_grain_wheat_flourwinewoodyamyeastyogurtzucchini
<fct><dbl><dbl><dbl><dbl><dbl><dbl><dbl><dbl><dbl><dbl><dbl><dbl><dbl><dbl><dbl><dbl><dbl><dbl><dbl>
indian0000000000000000000
indian1000000000000000000
indian0000000000000000000
indian0000000000000000000
indian0000000000000000010
\n" + ] + }, + "metadata": {} + }, + { + "output_type": "display_data", + "data": { + "text/plain": [ + " cuisine n \n", + "1 korean 799\n", + "2 indian 598\n", + "3 chinese 442\n", + "4 japanese 320\n", + "5 thai 289" + ], + "text/markdown": [ + "\n", + "A tibble: 5 × 2\n", + "\n", + "| cuisine <fct> | n <int> |\n", + "|---|---|\n", + "| korean | 799 |\n", + "| indian | 598 |\n", + "| chinese | 442 |\n", + "| japanese | 320 |\n", + "| thai | 289 |\n", + "\n" + ], + "text/latex": [ + "A tibble: 5 × 2\n", + "\\begin{tabular}{ll}\n", + " cuisine & n\\\\\n", + " & \\\\\n", + "\\hline\n", + "\t korean & 799\\\\\n", + "\t indian & 598\\\\\n", + "\t chinese & 442\\\\\n", + "\t japanese & 320\\\\\n", + "\t thai & 289\\\\\n", + "\\end{tabular}\n" + ], + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "
A tibble: 5 × 2
cuisinen
<fct><int>
korean 799
indian 598
chinese 442
japanese320
thai 289
\n" + ] + }, + "metadata": {} + } + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 735 + }, + "id": "jhCrrH22IWVR", + "outputId": "d444a85c-1d8b-485f-bc4f-8be2e8f8217c" + } + }, + { + "cell_type": "markdown", + "source": [ + "Perfeito! Agora, é hora de dividir os dados de forma que 70% dos dados sejam destinados ao treinamento e 30% ao teste. Também aplicaremos uma técnica de `estratificação` ao dividir os dados para `manter a proporção de cada tipo de culinária` nos conjuntos de treinamento e validação.\n", + "\n", + "[rsample](https://rsample.tidymodels.org/), um pacote do Tidymodels, fornece infraestrutura para divisão e reamostragem de dados de forma eficiente:\n" + ], + "metadata": { + "id": "AYTjVyajIdny" + } + }, + { + "cell_type": "code", + "execution_count": 4, + "source": [ + "# Load the core Tidymodels packages into R session\r\n", + "library(tidymodels)\r\n", + "\r\n", + "# Create split specification\r\n", + "set.seed(2056)\r\n", + "cuisines_split <- initial_split(data = df_select,\r\n", + " strata = cuisine,\r\n", + " prop = 0.7)\r\n", + "\r\n", + "# Extract the data in each split\r\n", + "cuisines_train <- training(cuisines_split)\r\n", + "cuisines_test <- testing(cuisines_split)\r\n", + "\r\n", + "# Print the number of cases in each split\r\n", + "cat(\"Training cases: \", nrow(cuisines_train), \"\\n\",\r\n", + " \"Test cases: \", nrow(cuisines_test), sep = \"\")\r\n", + "\r\n", + "# Display the first few rows of the training set\r\n", + "cuisines_train %>% \r\n", + " slice_head(n = 5)\r\n", + "\r\n", + "\r\n", + "# Display distribution of cuisines in the training set\r\n", + "cuisines_train %>% \r\n", + " count(cuisine) %>% \r\n", + " arrange(desc(n))" + ], + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Training cases: 1712\n", + "Test cases: 736" + ] + }, + { + "output_type": "display_data", + "data": { + "text/plain": [ + " cuisine almond angelica anise anise_seed apple apple_brandy apricot armagnac\n", + "1 chinese 0 0 0 0 0 0 0 0 \n", + "2 chinese 0 0 0 0 0 0 0 0 \n", + "3 chinese 0 0 0 0 0 0 0 0 \n", + "4 chinese 0 0 0 0 0 0 0 0 \n", + "5 chinese 0 0 0 0 0 0 0 0 \n", + " artemisia ⋯ whiskey white_bread white_wine whole_grain_wheat_flour wine wood\n", + "1 0 ⋯ 0 0 0 0 1 0 \n", + "2 0 ⋯ 0 0 0 0 1 0 \n", + "3 0 ⋯ 0 0 0 0 0 0 \n", + "4 0 ⋯ 0 0 0 0 0 0 \n", + "5 0 ⋯ 0 0 0 0 0 0 \n", + " yam yeast yogurt zucchini\n", + "1 0 0 0 0 \n", + "2 0 0 0 0 \n", + "3 0 0 0 0 \n", + "4 0 0 0 0 \n", + "5 0 0 0 0 " + ], + "text/markdown": [ + "\n", + "A tibble: 5 × 381\n", + "\n", + "| cuisine <fct> | almond <dbl> | angelica <dbl> | anise <dbl> | anise_seed <dbl> | apple <dbl> | apple_brandy <dbl> | apricot <dbl> | armagnac <dbl> | artemisia <dbl> | ⋯ ⋯ | whiskey <dbl> | white_bread <dbl> | white_wine <dbl> | whole_grain_wheat_flour <dbl> | wine <dbl> | wood <dbl> | yam <dbl> | yeast <dbl> | yogurt <dbl> | zucchini <dbl> |\n", + "|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|\n", + "| chinese | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ⋯ | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 |\n", + "| chinese | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ⋯ | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 |\n", + "| chinese | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ⋯ | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |\n", + "| chinese | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ⋯ | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |\n", + "| chinese | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ⋯ | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |\n", + "\n" + ], + "text/latex": [ + "A tibble: 5 × 381\n", + "\\begin{tabular}{lllllllllllllllllllll}\n", + " cuisine & almond & angelica & anise & anise\\_seed & apple & apple\\_brandy & apricot & armagnac & artemisia & ⋯ & whiskey & white\\_bread & white\\_wine & whole\\_grain\\_wheat\\_flour & wine & wood & yam & yeast & yogurt & zucchini\\\\\n", + " & & & & & & & & & & ⋯ & & & & & & & & & & \\\\\n", + "\\hline\n", + "\t chinese & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & ⋯ & 0 & 0 & 0 & 0 & 1 & 0 & 0 & 0 & 0 & 0\\\\\n", + "\t chinese & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & ⋯ & 0 & 0 & 0 & 0 & 1 & 0 & 0 & 0 & 0 & 0\\\\\n", + "\t chinese & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & ⋯ & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0\\\\\n", + "\t chinese & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & ⋯ & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0\\\\\n", + "\t chinese & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & ⋯ & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0\\\\\n", + "\\end{tabular}\n" + ], + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "
A tibble: 5 × 381
cuisinealmondangelicaaniseanise_seedappleapple_brandyapricotarmagnacartemisiawhiskeywhite_breadwhite_winewhole_grain_wheat_flourwinewoodyamyeastyogurtzucchini
<fct><dbl><dbl><dbl><dbl><dbl><dbl><dbl><dbl><dbl><dbl><dbl><dbl><dbl><dbl><dbl><dbl><dbl><dbl><dbl>
chinese0000000000000100000
chinese0000000000000100000
chinese0000000000000000000
chinese0000000000000000000
chinese0000000000000000000
\n" + ] + }, + "metadata": {} + }, + { + "output_type": "display_data", + "data": { + "text/plain": [ + " cuisine n \n", + "1 korean 559\n", + "2 indian 418\n", + "3 chinese 309\n", + "4 japanese 224\n", + "5 thai 202" + ], + "text/markdown": [ + "\n", + "A tibble: 5 × 2\n", + "\n", + "| cuisine <fct> | n <int> |\n", + "|---|---|\n", + "| korean | 559 |\n", + "| indian | 418 |\n", + "| chinese | 309 |\n", + "| japanese | 224 |\n", + "| thai | 202 |\n", + "\n" + ], + "text/latex": [ + "A tibble: 5 × 2\n", + "\\begin{tabular}{ll}\n", + " cuisine & n\\\\\n", + " & \\\\\n", + "\\hline\n", + "\t korean & 559\\\\\n", + "\t indian & 418\\\\\n", + "\t chinese & 309\\\\\n", + "\t japanese & 224\\\\\n", + "\t thai & 202\\\\\n", + "\\end{tabular}\n" + ], + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "
A tibble: 5 × 2
cuisinen
<fct><int>
korean 559
indian 418
chinese 309
japanese224
thai 202
\n" + ] + }, + "metadata": {} + } + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 535 + }, + "id": "w5FWIkEiIjdN", + "outputId": "2e195fd9-1a8f-4b91-9573-cce5582242df" + } + }, + { + "cell_type": "markdown", + "source": [ + "## 2. Lidando com dados desbalanceados\n", + "\n", + "Como você deve ter notado no conjunto de dados original, assim como no nosso conjunto de treinamento, há uma distribuição bastante desigual no número de tipos de culinária. Culinárias coreanas são *quase* 3 vezes mais numerosas que as culinárias tailandesas. Dados desbalanceados frequentemente têm efeitos negativos no desempenho do modelo. Muitos modelos apresentam melhor desempenho quando o número de observações é igual e, por isso, tendem a ter dificuldades com dados desbalanceados.\n", + "\n", + "Existem basicamente duas maneiras de lidar com conjuntos de dados desbalanceados:\n", + "\n", + "- adicionar observações à classe minoritária: `Over-sampling`, por exemplo, usando um algoritmo SMOTE, que gera novos exemplos da classe minoritária de forma sintética, utilizando os vizinhos mais próximos desses casos.\n", + "\n", + "- remover observações da classe majoritária: `Under-sampling`\n", + "\n", + "Na nossa lição anterior, demonstramos como lidar com conjuntos de dados desbalanceados usando um `recipe`. Um recipe pode ser pensado como um plano que descreve quais etapas devem ser aplicadas a um conjunto de dados para prepará-lo para análise. No nosso caso, queremos ter uma distribuição igual no número de nossas culinárias para o nosso `conjunto de treinamento`. Vamos direto ao ponto.\n" + ], + "metadata": { + "id": "daBi9qJNIwqW" + } + }, + { + "cell_type": "code", + "execution_count": 5, + "source": [ + "# Load themis package for dealing with imbalanced data\r\n", + "library(themis)\r\n", + "\r\n", + "# Create a recipe for preprocessing training data\r\n", + "cuisines_recipe <- recipe(cuisine ~ ., data = cuisines_train) %>% \r\n", + " step_smote(cuisine)\r\n", + "\r\n", + "# Print recipe\r\n", + "cuisines_recipe" + ], + "outputs": [ + { + "output_type": "display_data", + "data": { + "text/plain": [ + "Data Recipe\n", + "\n", + "Inputs:\n", + "\n", + " role #variables\n", + " outcome 1\n", + " predictor 380\n", + "\n", + "Operations:\n", + "\n", + "SMOTE based on cuisine" + ] + }, + "metadata": {} + } + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 200 + }, + "id": "Az6LFBGxI1X0", + "outputId": "29d71d85-64b0-4e62-871e-bcd5398573b6" + } + }, + { + "cell_type": "markdown", + "source": [ + "Você pode, é claro, confirmar (usando prep+bake) que a receita funcionará como esperado - todas as etiquetas de culinária terão `559` observações.\n", + "\n", + "Como usaremos essa receita como um pré-processador para modelagem, um `workflow()` fará todo o preparo e execução para nós, então não precisaremos estimar a receita manualmente.\n", + "\n", + "Agora estamos prontos para treinar um modelo 👩‍💻👨‍💻!\n", + "\n", + "## 3. Escolhendo seu classificador\n", + "\n", + "

\n", + " \n", + "

Arte por @allison_horst
\n" + ], + "metadata": { + "id": "NBL3PqIWJBBB" + } + }, + { + "cell_type": "markdown", + "source": [ + "Agora precisamos decidir qual algoritmo usar para a tarefa 🤔.\n", + "\n", + "No Tidymodels, o [`pacote parsnip`](https://parsnip.tidymodels.org/index.html) fornece uma interface consistente para trabalhar com modelos em diferentes engines (pacotes). Consulte a documentação do parsnip para explorar [tipos de modelos e engines](https://www.tidymodels.org/find/parsnip/#models) e seus correspondentes [argumentos de modelo](https://www.tidymodels.org/find/parsnip/#model-args). A variedade pode parecer bastante confusa à primeira vista. Por exemplo, os seguintes métodos incluem técnicas de classificação:\n", + "\n", + "- Modelos de Classificação Baseados em Regras C5.0\n", + "\n", + "- Modelos de Discriminante Flexível\n", + "\n", + "- Modelos de Discriminante Linear\n", + "\n", + "- Modelos de Discriminante Regularizado\n", + "\n", + "- Modelos de Regressão Logística\n", + "\n", + "- Modelos de Regressão Multinomial\n", + "\n", + "- Modelos de Naive Bayes\n", + "\n", + "- Máquinas de Vetores de Suporte (SVM)\n", + "\n", + "- Vizinhos Mais Próximos\n", + "\n", + "- Árvores de Decisão\n", + "\n", + "- Métodos de Ensemble\n", + "\n", + "- Redes Neurais\n", + "\n", + "E a lista continua!\n", + "\n", + "### **Qual classificador escolher?**\n", + "\n", + "Então, qual classificador você deve escolher? Muitas vezes, testar vários e procurar por um bom resultado é uma forma de experimentar.\n", + "\n", + "> O AutoML resolve esse problema de forma prática ao executar essas comparações na nuvem, permitindo que você escolha o melhor algoritmo para seus dados. Experimente [aqui](https://docs.microsoft.com/learn/modules/automate-model-selection-with-azure-automl/?WT.mc_id=academic-77952-leestott)\n", + "\n", + "Além disso, a escolha do classificador depende do nosso problema. Por exemplo, quando o resultado pode ser categorizado em `mais de duas classes`, como no nosso caso, você deve usar um `algoritmo de classificação multiclasse` em vez de `classificação binária.`\n", + "\n", + "### **Uma abordagem melhor**\n", + "\n", + "Uma abordagem melhor do que simplesmente adivinhar é seguir as ideias deste [guia de referência rápida de ML](https://docs.microsoft.com/azure/machine-learning/algorithm-cheat-sheet?WT.mc_id=academic-77952-leestott), que pode ser baixado. Aqui, descobrimos que, para o nosso problema de classificação multiclasse, temos algumas opções:\n", + "\n", + "

\n", + " \n", + "

Uma seção do Guia de Algoritmos da Microsoft, detalhando opções de classificação multiclasse
\n" + ], + "metadata": { + "id": "a6DLAZ3vJZ14" + } + }, + { + "cell_type": "markdown", + "source": [ + "### **Raciocínio**\n", + "\n", + "Vamos analisar diferentes abordagens dadas as restrições que temos:\n", + "\n", + "- **Redes neurais profundas são muito pesadas**. Dado nosso conjunto de dados limpo, mas minimalista, e o fato de que estamos executando o treinamento localmente via notebooks, redes neurais profundas são muito pesadas para esta tarefa.\n", + "\n", + "- **Sem classificador de duas classes**. Não utilizamos um classificador de duas classes, o que elimina a abordagem um-contra-todos.\n", + "\n", + "- **Árvore de decisão ou regressão logística podem funcionar**. Uma árvore de decisão pode funcionar, ou regressão multinomial/regressão logística multiclasses para dados multiclasses.\n", + "\n", + "- **Árvores de decisão impulsionadas multiclasses resolvem outro problema**. A árvore de decisão impulsionada multiclasses é mais adequada para tarefas não paramétricas, como tarefas projetadas para construir rankings, então não é útil para nós.\n", + "\n", + "Além disso, normalmente antes de embarcar em modelos de aprendizado de máquina mais complexos, como métodos de ensemble, é uma boa ideia construir o modelo mais simples possível para ter uma ideia do que está acontecendo. Então, para esta lição, começaremos com um modelo de `regressão multinomial`.\n", + "\n", + "> Regressão logística é uma técnica usada quando a variável de resultado é categórica (ou nominal). Para regressão logística binária, o número de variáveis de resultado é dois, enquanto o número de variáveis de resultado para regressão logística multinomial é mais de dois. Veja [Métodos Avançados de Regressão](https://bookdown.org/chua/ber642_advanced_regression/multinomial-logistic-regression.html) para leitura adicional.\n", + "\n", + "## 4. Treinar e avaliar um modelo de regressão logística multinomial.\n", + "\n", + "No Tidymodels, `parsnip::multinom_reg()`, define um modelo que usa preditores lineares para prever dados multiclasses usando a distribuição multinomial. Veja `?multinom_reg()` para as diferentes formas/motores que você pode usar para ajustar este modelo.\n", + "\n", + "Neste exemplo, ajustaremos um modelo de regressão multinomial via o motor padrão [nnet](https://cran.r-project.org/web/packages/nnet/nnet.pdf).\n", + "\n", + "> Escolhi um valor para `penalty` meio que aleatoriamente. Existem maneiras melhores de escolher este valor, como usar `reamostragem` e `ajustar` o modelo, que discutiremos mais tarde.\n", + ">\n", + "> Veja [Tidymodels: Introdução](https://www.tidymodels.org/start/tuning/) caso queira aprender mais sobre como ajustar os hiperparâmetros do modelo.\n" + ], + "metadata": { + "id": "gWMsVcbBJemu" + } + }, + { + "cell_type": "code", + "execution_count": 6, + "source": [ + "# Create a multinomial regression model specification\r\n", + "mr_spec <- multinom_reg(penalty = 1) %>% \r\n", + " set_engine(\"nnet\", MaxNWts = 2086) %>% \r\n", + " set_mode(\"classification\")\r\n", + "\r\n", + "# Print model specification\r\n", + "mr_spec" + ], + "outputs": [ + { + "output_type": "display_data", + "data": { + "text/plain": [ + "Multinomial Regression Model Specification (classification)\n", + "\n", + "Main Arguments:\n", + " penalty = 1\n", + "\n", + "Engine-Specific Arguments:\n", + " MaxNWts = 2086\n", + "\n", + "Computational engine: nnet \n" + ] + }, + "metadata": {} + } + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 166 + }, + "id": "Wq_fcyQiJvfG", + "outputId": "c30449c7-3864-4be7-f810-72a003743e2d" + } + }, + { + "cell_type": "markdown", + "source": [ + "Ótimo trabalho 🥳! Agora que temos uma receita e uma especificação de modelo, precisamos encontrar uma maneira de agrupá-los em um objeto que primeiro pré-processará os dados, depois ajustará o modelo nos dados pré-processados e também permitirá atividades de pós-processamento, se necessário. No Tidymodels, esse objeto conveniente é chamado de [`workflow`](https://workflows.tidymodels.org/) e organiza de forma prática os componentes do seu modelo! Isso é o que chamaríamos de *pipelines* em *Python*.\n", + "\n", + "Então, vamos reunir tudo em um workflow!📦\n" + ], + "metadata": { + "id": "NlSbzDfgJ0zh" + } + }, + { + "cell_type": "code", + "execution_count": 7, + "source": [ + "# Bundle recipe and model specification\r\n", + "mr_wf <- workflow() %>% \r\n", + " add_recipe(cuisines_recipe) %>% \r\n", + " add_model(mr_spec)\r\n", + "\r\n", + "# Print out workflow\r\n", + "mr_wf" + ], + "outputs": [ + { + "output_type": "display_data", + "data": { + "text/plain": [ + "══ Workflow ════════════════════════════════════════════════════════════════════\n", + "\u001b[3mPreprocessor:\u001b[23m Recipe\n", + "\u001b[3mModel:\u001b[23m multinom_reg()\n", + "\n", + "── Preprocessor ────────────────────────────────────────────────────────────────\n", + "1 Recipe Step\n", + "\n", + "• step_smote()\n", + "\n", + "── Model ───────────────────────────────────────────────────────────────────────\n", + "Multinomial Regression Model Specification (classification)\n", + "\n", + "Main Arguments:\n", + " penalty = 1\n", + "\n", + "Engine-Specific Arguments:\n", + " MaxNWts = 2086\n", + "\n", + "Computational engine: nnet \n" + ] + }, + "metadata": {} + } + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 333 + }, + "id": "Sc1TfPA4Ke3_", + "outputId": "82c70013-e431-4e7e-cef6-9fcf8aad4a6c" + } + }, + { + "cell_type": "markdown", + "source": [ + "Workflows 👌👌! Um **`workflow()`** pode ser ajustado de maneira muito semelhante a um modelo. Então, hora de treinar um modelo!\n" + ], + "metadata": { + "id": "TNQ8i85aKf9L" + } + }, + { + "cell_type": "code", + "execution_count": 8, + "source": [ + "# Train a multinomial regression model\n", + "mr_fit <- fit(object = mr_wf, data = cuisines_train)\n", + "\n", + "mr_fit" + ], + "outputs": [ + { + "output_type": "display_data", + "data": { + "text/plain": [ + "══ Workflow [trained] ══════════════════════════════════════════════════════════\n", + "\u001b[3mPreprocessor:\u001b[23m Recipe\n", + "\u001b[3mModel:\u001b[23m multinom_reg()\n", + "\n", + "── Preprocessor ────────────────────────────────────────────────────────────────\n", + "1 Recipe Step\n", + "\n", + "• step_smote()\n", + "\n", + "── Model ───────────────────────────────────────────────────────────────────────\n", + "Call:\n", + "nnet::multinom(formula = ..y ~ ., data = data, decay = ~1, MaxNWts = ~2086, \n", + " trace = FALSE)\n", + "\n", + "Coefficients:\n", + " (Intercept) almond angelica anise anise_seed apple\n", + "indian 0.19723325 0.2409661 0 -5.004955e-05 -0.1657635 -0.05769734\n", + "japanese 0.13961959 -0.6262400 0 -1.169155e-04 -0.4893596 -0.08585717\n", + "korean 0.22377347 -0.1833485 0 -5.560395e-05 -0.2489401 -0.15657804\n", + "thai -0.04336577 -0.6106258 0 4.903828e-04 -0.5782866 0.63451105\n", + " apple_brandy apricot armagnac artemisia artichoke asparagus\n", + "indian 0 0.37042636 0 -0.09122797 0 -0.27181970\n", + "japanese 0 0.28895643 0 -0.12651100 0 0.14054037\n", + "korean 0 -0.07981259 0 0.55756709 0 -0.66979948\n", + "thai 0 -0.33160904 0 -0.10725182 0 -0.02602152\n", + " avocado bacon baked_potato balm banana barley\n", + "indian -0.46624197 0.16008055 0 0 -0.2838796 0.2230625\n", + "japanese 0.90341344 0.02932727 0 0 -0.4142787 2.0953906\n", + "korean -0.06925382 -0.35804134 0 0 -0.2686963 -0.7233404\n", + "thai -0.21473955 -0.75594439 0 0 0.6784880 -0.4363320\n", + " bartlett_pear basil bay bean beech\n", + "indian 0 -0.7128756 0.1011587 -0.8777275 -0.0004380795\n", + "japanese 0 0.1288697 0.9425626 -0.2380748 0.3373437611\n", + "korean 0 -0.2445193 -0.4744318 -0.8957870 -0.0048784496\n", + "thai 0 1.5365848 0.1333256 0.2196970 -0.0113078024\n", + " beef beef_broth beef_liver beer beet\n", + "indian -0.7985278 0.2430186 -0.035598065 -0.002173738 0.01005813\n", + "japanese 0.2241875 -0.3653020 -0.139551027 0.128905553 0.04923911\n", + "korean 0.5366515 -0.6153237 0.213455197 -0.010828645 0.27325423\n", + "thai 0.1570012 -0.9364154 -0.008032213 -0.035063746 -0.28279823\n", + " bell_pepper bergamot berry bitter_orange black_bean\n", + "indian 0.49074330 0 0.58947607 0.191256164 -0.1945233\n", + "japanese 0.09074167 0 -0.25917977 -0.118915977 -0.3442400\n", + "korean -0.57876763 0 -0.07874180 -0.007729435 -0.5220672\n", + "thai 0.92554006 0 -0.07210196 -0.002983296 -0.4614426\n", + " black_currant black_mustard_seed_oil black_pepper black_raspberry\n", + "indian 0 0.38935801 -0.4453495 0\n", + "japanese 0 -0.05452887 -0.5440869 0\n", + "korean 0 -0.03929970 0.8025454 0\n", + "thai 0 -0.21498372 -0.9854806 0\n", + " black_sesame_seed black_tea blackberry blackberry_brandy\n", + "indian -0.2759246 0.3079977 0.191256164 0\n", + "japanese -0.6101687 -0.1671913 -0.118915977 0\n", + "korean 1.5197674 -0.3036261 -0.007729435 0\n", + "thai -0.1755656 -0.1487033 -0.002983296 0\n", + " blue_cheese blueberry bone_oil bourbon_whiskey brandy\n", + "indian 0 0.216164294 -0.2276744 0 0.22427587\n", + "japanese 0 -0.119186087 0.3913019 0 -0.15595599\n", + "korean 0 -0.007821986 0.2854487 0 -0.02562342\n", + "thai 0 -0.004947048 -0.0253658 0 -0.05715244\n", + "\n", + "...\n", + "and 308 more lines." + ] + }, + "metadata": {} + } + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 1000 + }, + "id": "GMbdfVmTKkJI", + "outputId": "adf9ebdf-d69d-4a64-e9fd-e06e5322292e" + } + }, + { + "cell_type": "markdown", + "source": [ + "Os resultados mostram os coeficientes que o modelo aprendeu durante o treinamento.\n", + "\n", + "### Avaliar o Modelo Treinado\n", + "\n", + "É hora de ver como o modelo se saiu 📏 avaliando-o em um conjunto de teste! Vamos começar fazendo previsões no conjunto de teste.\n" + ], + "metadata": { + "id": "tt2BfOxrKmcJ" + } + }, + { + "cell_type": "code", + "execution_count": 9, + "source": [ + "# Make predictions on the test set\n", + "results <- cuisines_test %>% select(cuisine) %>% \n", + " bind_cols(mr_fit %>% predict(new_data = cuisines_test))\n", + "\n", + "# Print out results\n", + "results %>% \n", + " slice_head(n = 5)" + ], + "outputs": [ + { + "output_type": "display_data", + "data": { + "text/plain": [ + " cuisine .pred_class\n", + "1 indian thai \n", + "2 indian indian \n", + "3 indian indian \n", + "4 indian indian \n", + "5 indian indian " + ], + "text/markdown": [ + "\n", + "A tibble: 5 × 2\n", + "\n", + "| cuisine <fct> | .pred_class <fct> |\n", + "|---|---|\n", + "| indian | thai |\n", + "| indian | indian |\n", + "| indian | indian |\n", + "| indian | indian |\n", + "| indian | indian |\n", + "\n" + ], + "text/latex": [ + "A tibble: 5 × 2\n", + "\\begin{tabular}{ll}\n", + " cuisine & .pred\\_class\\\\\n", + " & \\\\\n", + "\\hline\n", + "\t indian & thai \\\\\n", + "\t indian & indian\\\\\n", + "\t indian & indian\\\\\n", + "\t indian & indian\\\\\n", + "\t indian & indian\\\\\n", + "\\end{tabular}\n" + ], + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "
A tibble: 5 × 2
cuisine.pred_class
<fct><fct>
indianthai
indianindian
indianindian
indianindian
indianindian
\n" + ] + }, + "metadata": {} + } + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 248 + }, + "id": "CqtckvtsKqax", + "outputId": "e57fe557-6a68-4217-fe82-173328c5436d" + } + }, + { + "cell_type": "markdown", + "source": [ + "Bom trabalho! No Tidymodels, avaliar o desempenho do modelo pode ser feito usando [yardstick](https://yardstick.tidymodels.org/) - um pacote usado para medir a eficácia dos modelos utilizando métricas de desempenho. Como fizemos na nossa aula de regressão logística, vamos começar calculando uma matriz de confusão.\n" + ], + "metadata": { + "id": "8w5N6XsBKss7" + } + }, + { + "cell_type": "code", + "execution_count": 10, + "source": [ + "# Confusion matrix for categorical data\n", + "conf_mat(data = results, truth = cuisine, estimate = .pred_class)\n" + ], + "outputs": [ + { + "output_type": "display_data", + "data": { + "text/plain": [ + " Truth\n", + "Prediction chinese indian japanese korean thai\n", + " chinese 83 1 8 15 10\n", + " indian 4 163 1 2 6\n", + " japanese 21 5 73 25 1\n", + " korean 15 0 11 191 0\n", + " thai 10 11 3 7 70" + ] + }, + "metadata": {} + } + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 133 + }, + "id": "YvODvsLkK0iG", + "outputId": "bb69da84-1266-47ad-b174-d43b88ca2988" + } + }, + { + "cell_type": "markdown", + "source": [ + "Ao lidar com várias classes, geralmente é mais intuitivo visualizar isso como um mapa de calor, assim:\n" + ], + "metadata": { + "id": "c0HfPL16Lr6U" + } + }, + { + "cell_type": "code", + "execution_count": 11, + "source": [ + "update_geom_defaults(geom = \"tile\", new = list(color = \"black\", alpha = 0.7))\n", + "# Visualize confusion matrix\n", + "results %>% \n", + " conf_mat(cuisine, .pred_class) %>% \n", + " autoplot(type = \"heatmap\")" + ], + "outputs": [ + { + "output_type": "display_data", + "data": { + "text/plain": [ + "plot without title" + ], + "image/png": "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" + }, + "metadata": { + "image/png": { + "width": 420, + "height": 420 + } + } + } + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 436 + }, + "id": "HsAtwukyLsvt", + "outputId": "3032a224-a2c8-4270-b4f2-7bb620317400" + } + }, + { + "cell_type": "markdown", + "source": [ + "Os quadrados mais escuros no gráfico da matriz de confusão indicam um número elevado de casos, e você deve conseguir observar uma linha diagonal de quadrados mais escuros, indicando os casos em que o rótulo previsto e o rótulo real são os mesmos.\n", + "\n", + "Agora, vamos calcular as estatísticas resumidas para a matriz de confusão.\n" + ], + "metadata": { + "id": "oOJC87dkLwPr" + } + }, + { + "cell_type": "code", + "execution_count": 12, + "source": [ + "# Summary stats for confusion matrix\n", + "conf_mat(data = results, truth = cuisine, estimate = .pred_class) %>% \n", + "summary()" + ], + "outputs": [ + { + "output_type": "display_data", + "data": { + "text/plain": [ + " .metric .estimator .estimate\n", + "1 accuracy multiclass 0.7880435\n", + "2 kap multiclass 0.7276583\n", + "3 sens macro 0.7780927\n", + "4 spec macro 0.9477598\n", + "5 ppv macro 0.7585583\n", + "6 npv macro 0.9460080\n", + "7 mcc multiclass 0.7292724\n", + "8 j_index macro 0.7258524\n", + "9 bal_accuracy macro 0.8629262\n", + "10 detection_prevalence macro 0.2000000\n", + "11 precision macro 0.7585583\n", + "12 recall macro 0.7780927\n", + "13 f_meas macro 0.7641862" + ], + "text/markdown": [ + "\n", + "A tibble: 13 × 3\n", + "\n", + "| .metric <chr> | .estimator <chr> | .estimate <dbl> |\n", + "|---|---|---|\n", + "| accuracy | multiclass | 0.7880435 |\n", + "| kap | multiclass | 0.7276583 |\n", + "| sens | macro | 0.7780927 |\n", + "| spec | macro | 0.9477598 |\n", + "| ppv | macro | 0.7585583 |\n", + "| npv | macro | 0.9460080 |\n", + "| mcc | multiclass | 0.7292724 |\n", + "| j_index | macro | 0.7258524 |\n", + "| bal_accuracy | macro | 0.8629262 |\n", + "| detection_prevalence | macro | 0.2000000 |\n", + "| precision | macro | 0.7585583 |\n", + "| recall | macro | 0.7780927 |\n", + "| f_meas | macro | 0.7641862 |\n", + "\n" + ], + "text/latex": [ + "A tibble: 13 × 3\n", + "\\begin{tabular}{lll}\n", + " .metric & .estimator & .estimate\\\\\n", + " & & \\\\\n", + "\\hline\n", + "\t accuracy & multiclass & 0.7880435\\\\\n", + "\t kap & multiclass & 0.7276583\\\\\n", + "\t sens & macro & 0.7780927\\\\\n", + "\t spec & macro & 0.9477598\\\\\n", + "\t ppv & macro & 0.7585583\\\\\n", + "\t npv & macro & 0.9460080\\\\\n", + "\t mcc & multiclass & 0.7292724\\\\\n", + "\t j\\_index & macro & 0.7258524\\\\\n", + "\t bal\\_accuracy & macro & 0.8629262\\\\\n", + "\t detection\\_prevalence & macro & 0.2000000\\\\\n", + "\t precision & macro & 0.7585583\\\\\n", + "\t recall & macro & 0.7780927\\\\\n", + "\t f\\_meas & macro & 0.7641862\\\\\n", + "\\end{tabular}\n" + ], + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "
A tibble: 13 × 3
.metric.estimator.estimate
<chr><chr><dbl>
accuracy multiclass0.7880435
kap multiclass0.7276583
sens macro 0.7780927
spec macro 0.9477598
ppv macro 0.7585583
npv macro 0.9460080
mcc multiclass0.7292724
j_index macro 0.7258524
bal_accuracy macro 0.8629262
detection_prevalencemacro 0.2000000
precision macro 0.7585583
recall macro 0.7780927
f_meas macro 0.7641862
\n" + ] + }, + "metadata": {} + } + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 494 + }, + "id": "OYqetUyzL5Wz", + "outputId": "6a84d65e-113d-4281-dfc1-16e8b70f37e6" + } + }, + { + "cell_type": "markdown", + "source": [ + "Se nos concentrarmos em algumas métricas como precisão, sensibilidade, ppv, não estamos indo mal para começar 🥳!\n", + "\n", + "## 4. Explorando Mais a Fundo\n", + "\n", + "Vamos fazer uma pergunta sutil: Quais critérios são usados para definir um tipo de culinária como o resultado previsto?\n", + "\n", + "Bem, algoritmos de aprendizado de máquina estatísticos, como regressão logística, são baseados em `probabilidade`; então, o que realmente é previsto por um classificador é uma distribuição de probabilidade sobre um conjunto de resultados possíveis. A classe com a maior probabilidade é então escolhida como o resultado mais provável para as observações fornecidas.\n", + "\n", + "Vamos ver isso em ação fazendo tanto previsões de classe rígidas quanto probabilidades.\n" + ], + "metadata": { + "id": "43t7vz8vMJtW" + } + }, + { + "cell_type": "code", + "execution_count": 13, + "source": [ + "# Make hard class prediction and probabilities\n", + "results_prob <- cuisines_test %>%\n", + " select(cuisine) %>% \n", + " bind_cols(mr_fit %>% predict(new_data = cuisines_test)) %>% \n", + " bind_cols(mr_fit %>% predict(new_data = cuisines_test, type = \"prob\"))\n", + "\n", + "# Print out results\n", + "results_prob %>% \n", + " slice_head(n = 5)" + ], + "outputs": [ + { + "output_type": "display_data", + "data": { + "text/plain": [ + " cuisine .pred_class .pred_chinese .pred_indian .pred_japanese .pred_korean\n", + "1 indian thai 1.551259e-03 0.4587877 5.988039e-04 2.428503e-04\n", + "2 indian indian 2.637133e-05 0.9999488 6.648651e-07 2.259993e-05\n", + "3 indian indian 1.049433e-03 0.9909982 1.060937e-03 1.644947e-05\n", + "4 indian indian 6.237482e-02 0.4763035 9.136702e-02 3.660913e-01\n", + "5 indian indian 1.431745e-02 0.9418551 2.945239e-02 8.721782e-03\n", + " .pred_thai \n", + "1 5.388194e-01\n", + "2 1.577948e-06\n", + "3 6.874989e-03\n", + "4 3.863391e-03\n", + "5 5.653283e-03" + ], + "text/markdown": [ + "\n", + "A tibble: 5 × 7\n", + "\n", + "| cuisine <fct> | .pred_class <fct> | .pred_chinese <dbl> | .pred_indian <dbl> | .pred_japanese <dbl> | .pred_korean <dbl> | .pred_thai <dbl> |\n", + "|---|---|---|---|---|---|---|\n", + "| indian | thai | 1.551259e-03 | 0.4587877 | 5.988039e-04 | 2.428503e-04 | 5.388194e-01 |\n", + "| indian | indian | 2.637133e-05 | 0.9999488 | 6.648651e-07 | 2.259993e-05 | 1.577948e-06 |\n", + "| indian | indian | 1.049433e-03 | 0.9909982 | 1.060937e-03 | 1.644947e-05 | 6.874989e-03 |\n", + "| indian | indian | 6.237482e-02 | 0.4763035 | 9.136702e-02 | 3.660913e-01 | 3.863391e-03 |\n", + "| indian | indian | 1.431745e-02 | 0.9418551 | 2.945239e-02 | 8.721782e-03 | 5.653283e-03 |\n", + "\n" + ], + "text/latex": [ + "A tibble: 5 × 7\n", + "\\begin{tabular}{lllllll}\n", + " cuisine & .pred\\_class & .pred\\_chinese & .pred\\_indian & .pred\\_japanese & .pred\\_korean & .pred\\_thai\\\\\n", + " & & & & & & \\\\\n", + "\\hline\n", + "\t indian & thai & 1.551259e-03 & 0.4587877 & 5.988039e-04 & 2.428503e-04 & 5.388194e-01\\\\\n", + "\t indian & indian & 2.637133e-05 & 0.9999488 & 6.648651e-07 & 2.259993e-05 & 1.577948e-06\\\\\n", + "\t indian & indian & 1.049433e-03 & 0.9909982 & 1.060937e-03 & 1.644947e-05 & 6.874989e-03\\\\\n", + "\t indian & indian & 6.237482e-02 & 0.4763035 & 9.136702e-02 & 3.660913e-01 & 3.863391e-03\\\\\n", + "\t indian & indian & 1.431745e-02 & 0.9418551 & 2.945239e-02 & 8.721782e-03 & 5.653283e-03\\\\\n", + "\\end{tabular}\n" + ], + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "
A tibble: 5 × 7
cuisine.pred_class.pred_chinese.pred_indian.pred_japanese.pred_korean.pred_thai
<fct><fct><dbl><dbl><dbl><dbl><dbl>
indianthai 1.551259e-030.45878775.988039e-042.428503e-045.388194e-01
indianindian2.637133e-050.99994886.648651e-072.259993e-051.577948e-06
indianindian1.049433e-030.99099821.060937e-031.644947e-056.874989e-03
indianindian6.237482e-020.47630359.136702e-023.660913e-013.863391e-03
indianindian1.431745e-020.94185512.945239e-028.721782e-035.653283e-03
\n" + ] + }, + "metadata": {} + } + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 248 + }, + "id": "xdKNs-ZPMTJL", + "outputId": "68f6ac5a-725a-4eff-9ea6-481fef00e008" + } + }, + { + "cell_type": "markdown", + "source": [ + "Muito melhor!\n", + "\n", + "✅ Você pode explicar por que o modelo tem tanta certeza de que a primeira observação é tailandesa?\n", + "\n", + "## **🚀Desafio**\n", + "\n", + "Nesta lição, você usou seus dados limpos para construir um modelo de aprendizado de máquina capaz de prever uma culinária nacional com base em uma série de ingredientes. Reserve um tempo para explorar as [muitas opções](https://www.tidymodels.org/find/parsnip/#models) que o Tidymodels oferece para classificar dados e [outras maneiras](https://parsnip.tidymodels.org/articles/articles/Examples.html#multinom_reg-models) de ajustar uma regressão multinomial.\n", + "\n", + "#### AGRADECIMENTOS A:\n", + "\n", + "[`Allison Horst`](https://twitter.com/allison_horst/) por criar as ilustrações incríveis que tornam o R mais acolhedor e envolvente. Encontre mais ilustrações na sua [galeria](https://www.google.com/url?q=https://github.com/allisonhorst/stats-illustrations&sa=D&source=editors&ust=1626380772530000&usg=AOvVaw3zcfyCizFQZpkSLzxiiQEM).\n", + "\n", + "[Cassie Breviu](https://www.twitter.com/cassieview) e [Jen Looper](https://www.twitter.com/jenlooper) por criarem a versão original deste módulo em Python ♥️\n", + "\n", + "
\n", + "Eu até faria algumas piadas, mas não entendo muito de trocadilhos sobre comida 😅.\n", + "\n", + "
\n", + "\n", + "Feliz aprendizado,\n", + "\n", + "[Eric](https://twitter.com/ericntay), Gold Microsoft Learn Student Ambassador.\n" + ], + "metadata": { + "id": "2tWVHMeLMYdM" + } + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n---\n\n**Aviso Legal**: \nEste documento foi traduzido utilizando o serviço de tradução por IA [Co-op Translator](https://github.com/Azure/co-op-translator). Embora nos esforcemos para garantir a precisão, esteja ciente de que traduções automatizadas podem conter erros ou imprecisões. O documento original em seu idioma nativo deve ser considerado a fonte autoritativa. Para informações críticas, recomenda-se a tradução profissional realizada por humanos. Não nos responsabilizamos por quaisquer mal-entendidos ou interpretações equivocadas decorrentes do uso desta tradução.\n" + ] + } + ] +} \ No newline at end of file diff --git a/translations/pt-BR/4-Classification/2-Classifiers-1/solution/notebook.ipynb b/translations/pt-BR/4-Classification/2-Classifiers-1/solution/notebook.ipynb new file mode 100644 index 000000000..aea8ed106 --- /dev/null +++ b/translations/pt-BR/4-Classification/2-Classifiers-1/solution/notebook.ipynb @@ -0,0 +1,281 @@ +{ + "cells": [ + { + "source": [ + "# Construir Modelos de Classificação\n" + ], + "cell_type": "markdown", + "metadata": {} + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + " Unnamed: 0 cuisine almond angelica anise anise_seed apple \\\n", + "0 0 indian 0 0 0 0 0 \n", + "1 1 indian 1 0 0 0 0 \n", + "2 2 indian 0 0 0 0 0 \n", + "3 3 indian 0 0 0 0 0 \n", + "4 4 indian 0 0 0 0 0 \n", + "\n", + " apple_brandy apricot armagnac ... whiskey white_bread white_wine \\\n", + "0 0 0 0 ... 0 0 0 \n", + "1 0 0 0 ... 0 0 0 \n", + "2 0 0 0 ... 0 0 0 \n", + "3 0 0 0 ... 0 0 0 \n", + "4 0 0 0 ... 0 0 0 \n", + "\n", + " whole_grain_wheat_flour wine wood yam yeast yogurt zucchini \n", + "0 0 0 0 0 0 0 0 \n", + "1 0 0 0 0 0 0 0 \n", + "2 0 0 0 0 0 0 0 \n", + "3 0 0 0 0 0 0 0 \n", + "4 0 0 0 0 0 1 0 \n", + "\n", + "[5 rows x 382 columns]" + ], + "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
Unnamed: 0cuisinealmondangelicaaniseanise_seedappleapple_brandyapricotarmagnac...whiskeywhite_breadwhite_winewhole_grain_wheat_flourwinewoodyamyeastyogurtzucchini
00indian00000000...0000000000
11indian10000000...0000000000
22indian00000000...0000000000
33indian00000000...0000000000
44indian00000000...0000000010
\n

5 rows × 382 columns

\n
" + }, + "metadata": {}, + "execution_count": 1 + } + ], + "source": [ + "import pandas as pd\n", + "cuisines_df = pd.read_csv(\"../../data/cleaned_cuisines.csv\")\n", + "cuisines_df.head()" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "from sklearn.linear_model import LogisticRegression\n", + "from sklearn.model_selection import train_test_split, cross_val_score\n", + "from sklearn.metrics import accuracy_score,precision_score,confusion_matrix,classification_report, precision_recall_curve\n", + "from sklearn.svm import SVC\n", + "import numpy as np" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "0 indian\n", + "1 indian\n", + "2 indian\n", + "3 indian\n", + "4 indian\n", + "Name: cuisine, dtype: object" + ] + }, + "metadata": {}, + "execution_count": 3 + } + ], + "source": [ + "cuisines_label_df = cuisines_df['cuisine']\n", + "cuisines_label_df.head()" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + " almond angelica anise anise_seed apple apple_brandy apricot \\\n", + "0 0 0 0 0 0 0 0 \n", + "1 1 0 0 0 0 0 0 \n", + "2 0 0 0 0 0 0 0 \n", + "3 0 0 0 0 0 0 0 \n", + "4 0 0 0 0 0 0 0 \n", + "\n", + " armagnac artemisia artichoke ... whiskey white_bread white_wine \\\n", + "0 0 0 0 ... 0 0 0 \n", + "1 0 0 0 ... 0 0 0 \n", + "2 0 0 0 ... 0 0 0 \n", + "3 0 0 0 ... 0 0 0 \n", + "4 0 0 0 ... 0 0 0 \n", + "\n", + " whole_grain_wheat_flour wine wood yam yeast yogurt zucchini \n", + "0 0 0 0 0 0 0 0 \n", + "1 0 0 0 0 0 0 0 \n", + "2 0 0 0 0 0 0 0 \n", + "3 0 0 0 0 0 0 0 \n", + "4 0 0 0 0 0 1 0 \n", + "\n", + "[5 rows x 380 columns]" + ], + "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
almondangelicaaniseanise_seedappleapple_brandyapricotarmagnacartemisiaartichoke...whiskeywhite_breadwhite_winewhole_grain_wheat_flourwinewoodyamyeastyogurtzucchini
00000000000...0000000000
11000000000...0000000000
20000000000...0000000000
30000000000...0000000000
40000000000...0000000010
\n

5 rows × 380 columns

\n
" + }, + "metadata": {}, + "execution_count": 4 + } + ], + "source": [ + "cuisines_feature_df = cuisines_df.drop(['Unnamed: 0', 'cuisine'], axis=1)\n", + "cuisines_feature_df.head()" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [], + "source": [ + "X_train, X_test, y_train, y_test = train_test_split(cuisines_feature_df, cuisines_label_df, test_size=0.3)" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Accuracy is 0.8181818181818182\n" + ] + } + ], + "source": [ + "lr = LogisticRegression(multi_class='ovr',solver='liblinear')\n", + "model = lr.fit(X_train, np.ravel(y_train))\n", + "\n", + "accuracy = model.score(X_test, y_test)\n", + "print (\"Accuracy is {}\".format(accuracy))" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "ingredients: Index(['artemisia', 'black_pepper', 'mushroom', 'shiitake', 'soy_sauce',\n 'vegetable_oil'],\n dtype='object')\ncuisine: korean\n" + ] + } + ], + "source": [ + "# test an item\n", + "print(f'ingredients: {X_test.iloc[50][X_test.iloc[50]!=0].keys()}')\n", + "print(f'cuisine: {y_test.iloc[50]}')" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + " 0\n", + "korean 0.392231\n", + "chinese 0.372872\n", + "japanese 0.218825\n", + "thai 0.013427\n", + "indian 0.002645" + ], + "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
0
korean0.392231
chinese0.372872
japanese0.218825
thai0.013427
indian0.002645
\n
" + }, + "metadata": {}, + "execution_count": 8 + } + ], + "source": [ + "#rehsape to 2d array and transpose\n", + "test= X_test.iloc[50].values.reshape(-1, 1).T\n", + "# predict with score\n", + "proba = model.predict_proba(test)\n", + "classes = model.classes_\n", + "# create df with classes and scores\n", + "resultdf = pd.DataFrame(data=proba, columns=classes)\n", + "\n", + "# create df to show results\n", + "topPrediction = resultdf.T.sort_values(by=[0], ascending = [False])\n", + "topPrediction.head()" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + " precision recall f1-score support\n\n chinese 0.75 0.73 0.74 223\n indian 0.93 0.88 0.90 255\n japanese 0.78 0.78 0.78 253\n korean 0.87 0.86 0.86 236\n thai 0.76 0.84 0.80 232\n\n accuracy 0.82 1199\n macro avg 0.82 0.82 0.82 1199\nweighted avg 0.82 0.82 0.82 1199\n\n" + ] + } + ], + "source": [ + "y_pred = model.predict(X_test)\r\n", + "print(classification_report(y_test,y_pred))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n---\n\n**Aviso Legal**: \nEste documento foi traduzido utilizando o serviço de tradução por IA [Co-op Translator](https://github.com/Azure/co-op-translator). Embora nos esforcemos para garantir a precisão, esteja ciente de que traduções automatizadas podem conter erros ou imprecisões. O documento original em seu idioma nativo deve ser considerado a fonte autoritativa. Para informações críticas, recomenda-se a tradução profissional realizada por humanos. Não nos responsabilizamos por quaisquer mal-entendidos ou interpretações equivocadas decorrentes do uso desta tradução.\n" + ] + } + ], + "metadata": { + "interpreter": { + "hash": "70b38d7a306a849643e446cd70466270a13445e5987dfa1344ef2b127438fa4d" + }, + "kernelspec": { + "name": "python3", + "display_name": "Python 3.7.0 64-bit ('3.7')" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.7.0" + }, + "metadata": { + "interpreter": { + "hash": "70b38d7a306a849643e446cd70466270a13445e5987dfa1344ef2b127438fa4d" + } + }, + "coopTranslator": { + "original_hash": "9408506dd864f2b6e334c62f80c0cfcc", + "translation_date": "2025-08-29T23:41:17+00:00", + "source_file": "4-Classification/2-Classifiers-1/solution/notebook.ipynb", + "language_code": "br" + } + }, + "nbformat": 4, + "nbformat_minor": 4 +} \ No newline at end of file diff --git a/translations/pt-BR/4-Classification/3-Classifiers-2/README.md b/translations/pt-BR/4-Classification/3-Classifiers-2/README.md new file mode 100644 index 000000000..3aa31f8e5 --- /dev/null +++ b/translations/pt-BR/4-Classification/3-Classifiers-2/README.md @@ -0,0 +1,240 @@ +# Classificadores de culinária 2 + +Nesta segunda lição de classificação, você explorará mais maneiras de classificar dados numéricos. Você também aprenderá sobre as implicações de escolher um classificador em vez de outro. + +## [Quiz pré-aula](https://ff-quizzes.netlify.app/en/ml/) + +### Pré-requisito + +Assumimos que você completou as lições anteriores e possui um conjunto de dados limpo na sua pasta `data`, chamado _cleaned_cuisines.csv_, localizado na raiz desta pasta de 4 lições. + +### Preparação + +Carregamos seu arquivo _notebook.ipynb_ com o conjunto de dados limpo e o dividimos em dataframes X e y, prontos para o processo de construção do modelo. + +## Um mapa de classificação + +Anteriormente, você aprendeu sobre as várias opções disponíveis para classificar dados usando o guia de referência da Microsoft. O Scikit-learn oferece um guia semelhante, mas mais detalhado, que pode ajudar ainda mais a restringir seus estimadores (outro termo para classificadores): + +![Mapa de ML do Scikit-learn](../../../../4-Classification/3-Classifiers-2/images/map.png) +> Dica: [visite este mapa online](https://scikit-learn.org/stable/tutorial/machine_learning_map/) e clique nos caminhos para ler a documentação. + +### O plano + +Este mapa é muito útil quando você tem uma compreensão clara dos seus dados, pois pode 'percorrer' seus caminhos para tomar uma decisão: + +- Temos >50 amostras +- Queremos prever uma categoria +- Temos dados rotulados +- Temos menos de 100K amostras +- ✨ Podemos escolher um Linear SVC +- Se isso não funcionar, já que temos dados numéricos + - Podemos tentar um ✨ KNeighbors Classifier + - Se isso não funcionar, tentar ✨ SVC e ✨ Ensemble Classifiers + +Este é um caminho muito útil a seguir. + +## Exercício - dividir os dados + +Seguindo este caminho, devemos começar importando algumas bibliotecas para usar. + +1. Importe as bibliotecas necessárias: + + ```python + from sklearn.neighbors import KNeighborsClassifier + from sklearn.linear_model import LogisticRegression + from sklearn.svm import SVC + from sklearn.ensemble import RandomForestClassifier, AdaBoostClassifier + from sklearn.model_selection import train_test_split, cross_val_score + from sklearn.metrics import accuracy_score,precision_score,confusion_matrix,classification_report, precision_recall_curve + import numpy as np + ``` + +1. Divida seus dados de treinamento e teste: + + ```python + X_train, X_test, y_train, y_test = train_test_split(cuisines_feature_df, cuisines_label_df, test_size=0.3) + ``` + +## Classificador Linear SVC + +O agrupamento por Vetores de Suporte (SVC) é um membro da família de técnicas de ML chamada Máquinas de Vetores de Suporte (SVM). Neste método, você pode escolher um 'kernel' para decidir como agrupar os rótulos. O parâmetro 'C' refere-se à 'regularização', que regula a influência dos parâmetros. O kernel pode ser um dos [vários](https://scikit-learn.org/stable/modules/generated/sklearn.svm.SVC.html#sklearn.svm.SVC); aqui o configuramos como 'linear' para garantir que utilizamos o Linear SVC. A probabilidade, por padrão, é 'false'; aqui a configuramos como 'true' para obter estimativas de probabilidade. Configuramos o estado aleatório como '0' para embaralhar os dados e obter probabilidades. + +### Exercício - aplicar um Linear SVC + +Comece criando um array de classificadores. Você adicionará progressivamente a este array enquanto testamos. + +1. Comece com um Linear SVC: + + ```python + C = 10 + # Create different classifiers. + classifiers = { + 'Linear SVC': SVC(kernel='linear', C=C, probability=True,random_state=0) + } + ``` + +2. Treine seu modelo usando o Linear SVC e imprima um relatório: + + ```python + n_classifiers = len(classifiers) + + for index, (name, classifier) in enumerate(classifiers.items()): + classifier.fit(X_train, np.ravel(y_train)) + + y_pred = classifier.predict(X_test) + accuracy = accuracy_score(y_test, y_pred) + print("Accuracy (train) for %s: %0.1f%% " % (name, accuracy * 100)) + print(classification_report(y_test,y_pred)) + ``` + + O resultado é muito bom: + + ```output + Accuracy (train) for Linear SVC: 78.6% + precision recall f1-score support + + chinese 0.71 0.67 0.69 242 + indian 0.88 0.86 0.87 234 + japanese 0.79 0.74 0.76 254 + korean 0.85 0.81 0.83 242 + thai 0.71 0.86 0.78 227 + + accuracy 0.79 1199 + macro avg 0.79 0.79 0.79 1199 + weighted avg 0.79 0.79 0.79 1199 + ``` + +## Classificador K-Neighbors + +K-Neighbors faz parte da família de métodos de ML chamada "neighbors", que pode ser usada tanto para aprendizado supervisionado quanto não supervisionado. Neste método, um número pré-definido de pontos é criado e os dados são agrupados ao redor desses pontos, de forma que rótulos generalizados possam ser previstos para os dados. + +### Exercício - aplicar o classificador K-Neighbors + +O classificador anterior foi bom e funcionou bem com os dados, mas talvez possamos obter uma melhor precisão. Tente um classificador K-Neighbors. + +1. Adicione uma linha ao seu array de classificadores (adicione uma vírgula após o item Linear SVC): + + ```python + 'KNN classifier': KNeighborsClassifier(C), + ``` + + O resultado é um pouco pior: + + ```output + Accuracy (train) for KNN classifier: 73.8% + precision recall f1-score support + + chinese 0.64 0.67 0.66 242 + indian 0.86 0.78 0.82 234 + japanese 0.66 0.83 0.74 254 + korean 0.94 0.58 0.72 242 + thai 0.71 0.82 0.76 227 + + accuracy 0.74 1199 + macro avg 0.76 0.74 0.74 1199 + weighted avg 0.76 0.74 0.74 1199 + ``` + + ✅ Saiba mais sobre [K-Neighbors](https://scikit-learn.org/stable/modules/neighbors.html#neighbors) + +## Classificador de Vetores de Suporte + +Classificadores de Vetores de Suporte fazem parte da família de [Máquinas de Vetores de Suporte](https://wikipedia.org/wiki/Support-vector_machine), que são usadas para tarefas de classificação e regressão. SVMs "mapeiam exemplos de treinamento para pontos no espaço" para maximizar a distância entre duas categorias. Dados subsequentes são mapeados neste espaço para que sua categoria possa ser prevista. + +### Exercício - aplicar um Classificador de Vetores de Suporte + +Vamos tentar obter uma precisão um pouco melhor com um Classificador de Vetores de Suporte. + +1. Adicione uma vírgula após o item K-Neighbors e, em seguida, adicione esta linha: + + ```python + 'SVC': SVC(), + ``` + + O resultado é muito bom! + + ```output + Accuracy (train) for SVC: 83.2% + precision recall f1-score support + + chinese 0.79 0.74 0.76 242 + indian 0.88 0.90 0.89 234 + japanese 0.87 0.81 0.84 254 + korean 0.91 0.82 0.86 242 + thai 0.74 0.90 0.81 227 + + accuracy 0.83 1199 + macro avg 0.84 0.83 0.83 1199 + weighted avg 0.84 0.83 0.83 1199 + ``` + + ✅ Saiba mais sobre [Vetores de Suporte](https://scikit-learn.org/stable/modules/svm.html#svm) + +## Classificadores Ensemble + +Vamos seguir o caminho até o final, mesmo que o teste anterior tenha sido muito bom. Vamos tentar alguns 'Classificadores Ensemble', especificamente Random Forest e AdaBoost: + +```python + 'RFST': RandomForestClassifier(n_estimators=100), + 'ADA': AdaBoostClassifier(n_estimators=100) +``` + +O resultado é muito bom, especialmente para Random Forest: + +```output +Accuracy (train) for RFST: 84.5% + precision recall f1-score support + + chinese 0.80 0.77 0.78 242 + indian 0.89 0.92 0.90 234 + japanese 0.86 0.84 0.85 254 + korean 0.88 0.83 0.85 242 + thai 0.80 0.87 0.83 227 + + accuracy 0.84 1199 + macro avg 0.85 0.85 0.84 1199 +weighted avg 0.85 0.84 0.84 1199 + +Accuracy (train) for ADA: 72.4% + precision recall f1-score support + + chinese 0.64 0.49 0.56 242 + indian 0.91 0.83 0.87 234 + japanese 0.68 0.69 0.69 254 + korean 0.73 0.79 0.76 242 + thai 0.67 0.83 0.74 227 + + accuracy 0.72 1199 + macro avg 0.73 0.73 0.72 1199 +weighted avg 0.73 0.72 0.72 1199 +``` + +✅ Saiba mais sobre [Classificadores Ensemble](https://scikit-learn.org/stable/modules/ensemble.html) + +Este método de aprendizado de máquina "combina as previsões de vários estimadores base" para melhorar a qualidade do modelo. No nosso exemplo, usamos Random Trees e AdaBoost. + +- [Random Forest](https://scikit-learn.org/stable/modules/ensemble.html#forest), um método de média, constrói uma 'floresta' de 'árvores de decisão' com elementos aleatórios para evitar overfitting. O parâmetro n_estimators é configurado para o número de árvores. + +- [AdaBoost](https://scikit-learn.org/stable/modules/generated/sklearn.ensemble.AdaBoostClassifier.html) ajusta um classificador a um conjunto de dados e, em seguida, ajusta cópias desse classificador ao mesmo conjunto de dados. Ele foca nos pesos dos itens classificados incorretamente e ajusta o ajuste para o próximo classificador corrigir. + +--- + +## 🚀Desafio + +Cada uma dessas técnicas possui um grande número de parâmetros que você pode ajustar. Pesquise os parâmetros padrão de cada uma e pense sobre o que ajustar esses parâmetros significaria para a qualidade do modelo. + +## [Quiz pós-aula](https://ff-quizzes.netlify.app/en/ml/) + +## Revisão e Autoestudo + +Há muitos termos técnicos nestas lições, então reserve um momento para revisar [esta lista](https://docs.microsoft.com/dotnet/machine-learning/resources/glossary?WT.mc_id=academic-77952-leestott) de terminologia útil! + +## Tarefa + +[Exploração de parâmetros](assignment.md) + +--- + +**Aviso Legal**: +Este documento foi traduzido utilizando o serviço de tradução por IA [Co-op Translator](https://github.com/Azure/co-op-translator). Embora nos esforcemos para garantir a precisão, esteja ciente de que traduções automáticas podem conter erros ou imprecisões. O documento original em seu idioma nativo deve ser considerado a fonte oficial. Para informações críticas, recomenda-se a tradução profissional realizada por humanos. Não nos responsabilizamos por quaisquer mal-entendidos ou interpretações incorretas decorrentes do uso desta tradução. \ No newline at end of file diff --git a/translations/pt-BR/4-Classification/3-Classifiers-2/assignment.md b/translations/pt-BR/4-Classification/3-Classifiers-2/assignment.md new file mode 100644 index 000000000..dd67a7b63 --- /dev/null +++ b/translations/pt-BR/4-Classification/3-Classifiers-2/assignment.md @@ -0,0 +1,16 @@ +# Brincando com Parâmetros + +## Instruções + +Existem muitos parâmetros que são definidos por padrão ao trabalhar com esses classificadores. O Intellisense no VS Code pode ajudar você a explorá-los. Adote uma das Técnicas de Classificação de ML desta lição e reentreine os modelos ajustando vários valores de parâmetros. Construa um notebook explicando por que algumas mudanças ajudam na qualidade do modelo, enquanto outras a prejudicam. Seja detalhado em sua resposta. + +## Rubrica + +| Critérios | Exemplar | Adequado | Precisa de Melhorias | +| --------- | --------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------- | ----------------------------- | +| | Um notebook é apresentado com um classificador totalmente construído, seus parâmetros ajustados e mudanças explicadas em caixas de texto | Um notebook é parcialmente apresentado ou mal explicado | Um notebook contém erros ou falhas | + +--- + +**Aviso Legal**: +Este documento foi traduzido utilizando o serviço de tradução por IA [Co-op Translator](https://github.com/Azure/co-op-translator). Embora nos esforcemos para garantir a precisão, esteja ciente de que traduções automatizadas podem conter erros ou imprecisões. O documento original em seu idioma nativo deve ser considerado a fonte autoritativa. Para informações críticas, recomenda-se a tradução profissional realizada por humanos. Não nos responsabilizamos por quaisquer mal-entendidos ou interpretações equivocadas decorrentes do uso desta tradução. \ No newline at end of file diff --git a/translations/pt-BR/4-Classification/3-Classifiers-2/notebook.ipynb b/translations/pt-BR/4-Classification/3-Classifiers-2/notebook.ipynb new file mode 100644 index 000000000..c828422dd --- /dev/null +++ b/translations/pt-BR/4-Classification/3-Classifiers-2/notebook.ipynb @@ -0,0 +1,163 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + " Unnamed: 0 cuisine almond angelica anise anise_seed apple \\\n", + "0 0 indian 0 0 0 0 0 \n", + "1 1 indian 1 0 0 0 0 \n", + "2 2 indian 0 0 0 0 0 \n", + "3 3 indian 0 0 0 0 0 \n", + "4 4 indian 0 0 0 0 0 \n", + "\n", + " apple_brandy apricot armagnac ... whiskey white_bread white_wine \\\n", + "0 0 0 0 ... 0 0 0 \n", + "1 0 0 0 ... 0 0 0 \n", + "2 0 0 0 ... 0 0 0 \n", + "3 0 0 0 ... 0 0 0 \n", + "4 0 0 0 ... 0 0 0 \n", + "\n", + " whole_grain_wheat_flour wine wood yam yeast yogurt zucchini \n", + "0 0 0 0 0 0 0 0 \n", + "1 0 0 0 0 0 0 0 \n", + "2 0 0 0 0 0 0 0 \n", + "3 0 0 0 0 0 0 0 \n", + "4 0 0 0 0 0 1 0 \n", + "\n", + "[5 rows x 382 columns]" + ], + "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
Unnamed: 0cuisinealmondangelicaaniseanise_seedappleapple_brandyapricotarmagnac...whiskeywhite_breadwhite_winewhole_grain_wheat_flourwinewoodyamyeastyogurtzucchini
00indian00000000...0000000000
11indian10000000...0000000000
22indian00000000...0000000000
33indian00000000...0000000000
44indian00000000...0000000010
\n

5 rows × 382 columns

\n
" + }, + "metadata": {}, + "execution_count": 9 + } + ], + "source": [ + "import pandas as pd\n", + "cuisines_df = pd.read_csv(\"../data/cleaned_cuisines.csv\")\n", + "cuisines_df.head()" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "0 indian\n", + "1 indian\n", + "2 indian\n", + "3 indian\n", + "4 indian\n", + "Name: cuisine, dtype: object" + ] + }, + "metadata": {}, + "execution_count": 10 + } + ], + "source": [ + "cuisines_label_df = cuisines_df['cuisine']\n", + "cuisines_label_df.head()" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + " almond angelica anise anise_seed apple apple_brandy apricot \\\n", + "0 0 0 0 0 0 0 0 \n", + "1 1 0 0 0 0 0 0 \n", + "2 0 0 0 0 0 0 0 \n", + "3 0 0 0 0 0 0 0 \n", + "4 0 0 0 0 0 0 0 \n", + "\n", + " armagnac artemisia artichoke ... whiskey white_bread white_wine \\\n", + "0 0 0 0 ... 0 0 0 \n", + "1 0 0 0 ... 0 0 0 \n", + "2 0 0 0 ... 0 0 0 \n", + "3 0 0 0 ... 0 0 0 \n", + "4 0 0 0 ... 0 0 0 \n", + "\n", + " whole_grain_wheat_flour wine wood yam yeast yogurt zucchini \n", + "0 0 0 0 0 0 0 0 \n", + "1 0 0 0 0 0 0 0 \n", + "2 0 0 0 0 0 0 0 \n", + "3 0 0 0 0 0 0 0 \n", + "4 0 0 0 0 0 1 0 \n", + "\n", + "[5 rows x 380 columns]" + ], + "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
almondangelicaaniseanise_seedappleapple_brandyapricotarmagnacartemisiaartichoke...whiskeywhite_breadwhite_winewhole_grain_wheat_flourwinewoodyamyeastyogurtzucchini
00000000000...0000000000
11000000000...0000000000
20000000000...0000000000
30000000000...0000000000
40000000000...0000000010
\n

5 rows × 380 columns

\n
" + }, + "metadata": {}, + "execution_count": 11 + } + ], + "source": [ + "cuisines_feature_df = cuisines_df.drop(['Unnamed: 0', 'cuisine'], axis=1)\n", + "cuisines_feature_df.head()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n---\n\n**Aviso Legal**: \nEste documento foi traduzido utilizando o serviço de tradução por IA [Co-op Translator](https://github.com/Azure/co-op-translator). Embora nos esforcemos para garantir a precisão, esteja ciente de que traduções automatizadas podem conter erros ou imprecisões. O documento original em seu idioma nativo deve ser considerado a fonte autoritativa. Para informações críticas, recomenda-se a tradução profissional realizada por humanos. Não nos responsabilizamos por quaisquer mal-entendidos ou interpretações equivocadas decorrentes do uso desta tradução.\n" + ] + } + ], + "metadata": { + "interpreter": { + "hash": "70b38d7a306a849643e446cd70466270a13445e5987dfa1344ef2b127438fa4d" + }, + "kernelspec": { + "name": "python3", + "display_name": "Python 3.7.0 64-bit ('3.7')" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.7.0" + }, + "metadata": { + "interpreter": { + "hash": "70b38d7a306a849643e446cd70466270a13445e5987dfa1344ef2b127438fa4d" + } + }, + "coopTranslator": { + "original_hash": "15a83277036572e0773229b5f21c1e12", + "translation_date": "2025-08-29T23:47:26+00:00", + "source_file": "4-Classification/3-Classifiers-2/notebook.ipynb", + "language_code": "br" + } + }, + "nbformat": 4, + "nbformat_minor": 4 +} \ No newline at end of file diff --git a/translations/pt-BR/4-Classification/3-Classifiers-2/solution/Julia/README.md b/translations/pt-BR/4-Classification/3-Classifiers-2/solution/Julia/README.md new file mode 100644 index 000000000..c58234bae --- /dev/null +++ b/translations/pt-BR/4-Classification/3-Classifiers-2/solution/Julia/README.md @@ -0,0 +1,6 @@ + + +--- + +**Aviso Legal**: +Este documento foi traduzido utilizando o serviço de tradução por IA [Co-op Translator](https://github.com/Azure/co-op-translator). Embora nos esforcemos para garantir a precisão, esteja ciente de que traduções automatizadas podem conter erros ou imprecisões. O documento original em seu idioma nativo deve ser considerado a fonte autoritativa. Para informações críticas, recomenda-se a tradução profissional realizada por humanos. Não nos responsabilizamos por quaisquer mal-entendidos ou interpretações equivocadas decorrentes do uso desta tradução. \ No newline at end of file diff --git a/translations/pt-BR/4-Classification/3-Classifiers-2/solution/R/lesson_12-R.ipynb b/translations/pt-BR/4-Classification/3-Classifiers-2/solution/R/lesson_12-R.ipynb new file mode 100644 index 000000000..96c315d98 --- /dev/null +++ b/translations/pt-BR/4-Classification/3-Classifiers-2/solution/R/lesson_12-R.ipynb @@ -0,0 +1,650 @@ +{ + "nbformat": 4, + "nbformat_minor": 0, + "metadata": { + "colab": { + "name": "lesson_12-R.ipynb", + "provenance": [], + "collapsed_sections": [] + }, + "kernelspec": { + "name": "ir", + "display_name": "R" + }, + "language_info": { + "name": "R" + }, + "coopTranslator": { + "original_hash": "fab50046ca413a38939d579f8432274f", + "translation_date": "2025-08-29T23:51:48+00:00", + "source_file": "4-Classification/3-Classifiers-2/solution/R/lesson_12-R.ipynb", + "language_code": "br" + } + }, + "cells": [ + { + "cell_type": "markdown", + "metadata": { + "id": "jsFutf_ygqSx" + }, + "source": [ + "# Construir um modelo de classificação: Deliciosas culinárias asiáticas e indianas\n" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "HD54bEefgtNO" + }, + "source": [ + "## Classificadores de culinária 2\n", + "\n", + "Nesta segunda lição de classificação, exploraremos `mais maneiras` de classificar dados categóricos. Também aprenderemos sobre as implicações de escolher um classificador em vez de outro.\n", + "\n", + "### [**Quiz pré-aula**](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/23/)\n", + "\n", + "### **Pré-requisitos**\n", + "\n", + "Assumimos que você completou as lições anteriores, já que continuaremos com alguns conceitos que aprendemos antes.\n", + "\n", + "Para esta lição, precisaremos dos seguintes pacotes:\n", + "\n", + "- `tidyverse`: O [tidyverse](https://www.tidyverse.org/) é uma [coleção de pacotes R](https://www.tidyverse.org/packages) projetada para tornar a ciência de dados mais rápida, fácil e divertida!\n", + "\n", + "- `tidymodels`: O [tidymodels](https://www.tidymodels.org/) é um [framework de pacotes](https://www.tidymodels.org/packages/) para modelagem e aprendizado de máquina.\n", + "\n", + "- `themis`: O [pacote themis](https://themis.tidymodels.org/) fornece etapas extras de receitas para lidar com dados desbalanceados.\n", + "\n", + "Você pode instalá-los com o seguinte comando:\n", + "\n", + "`install.packages(c(\"tidyverse\", \"tidymodels\", \"kernlab\", \"themis\", \"ranger\", \"xgboost\", \"kknn\"))`\n", + "\n", + "Alternativamente, o script abaixo verifica se você possui os pacotes necessários para completar este módulo e os instala caso estejam ausentes.\n" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "vZ57IuUxgyQt" + }, + "source": [ + "suppressWarnings(if (!require(\"pacman\"))install.packages(\"pacman\"))\n", + "\n", + "pacman::p_load(tidyverse, tidymodels, themis, kernlab, ranger, xgboost, kknn)" + ], + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "z22M-pj4g07x" + }, + "source": [ + "## **1. Um mapa de classificação**\n", + "\n", + "Na nossa [lição anterior](https://github.com/microsoft/ML-For-Beginners/tree/main/4-Classification/2-Classifiers-1), tentamos responder à pergunta: como escolher entre vários modelos? Em grande parte, isso depende das características dos dados e do tipo de problema que queremos resolver (por exemplo, classificação ou regressão?).\n", + "\n", + "Anteriormente, aprendemos sobre as várias opções disponíveis para classificar dados usando o guia da Microsoft. O framework de Machine Learning do Python, Scikit-learn, oferece um guia semelhante, mas mais detalhado, que pode ajudar ainda mais a restringir seus estimadores (outro termo para classificadores):\n", + "\n", + "

\n", + " \n", + "

\n" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "u1i3xRIVg7vG" + }, + "source": [ + "> Dica: [visite este mapa online](https://scikit-learn.org/stable/tutorial/machine_learning_map/) e clique ao longo do caminho para ler a documentação.\n", + ">\n", + "> O [site de referência do Tidymodels](https://www.tidymodels.org/find/parsnip/#models) também oferece uma excelente documentação sobre diferentes tipos de modelos.\n", + "\n", + "### **O plano** 🗺️\n", + "\n", + "Este mapa é muito útil quando você tem uma compreensão clara dos seus dados, pois pode 'caminhar' pelos seus caminhos até chegar a uma decisão:\n", + "\n", + "- Temos \\>50 amostras\n", + "\n", + "- Queremos prever uma categoria\n", + "\n", + "- Temos dados rotulados\n", + "\n", + "- Temos menos de 100K amostras\n", + "\n", + "- ✨ Podemos escolher um Linear SVC\n", + "\n", + "- Se isso não funcionar, já que temos dados numéricos\n", + "\n", + " - Podemos tentar um ✨ KNeighbors Classifier\n", + "\n", + " - Se isso não funcionar, tente ✨ SVC e ✨ Ensemble Classifiers\n", + "\n", + "Este é um caminho muito útil para seguir. Agora, vamos direto ao ponto usando o framework de modelagem [tidymodels](https://www.tidymodels.org/): uma coleção consistente e flexível de pacotes R desenvolvidos para incentivar boas práticas estatísticas 😊.\n", + "\n", + "## 2. Divida os dados e lide com o conjunto de dados desequilibrado.\n", + "\n", + "Nas nossas lições anteriores, aprendemos que havia um conjunto de ingredientes comuns entre nossas culinárias. Além disso, havia uma distribuição bastante desigual no número de culinárias.\n", + "\n", + "Vamos lidar com isso da seguinte forma:\n", + "\n", + "- Eliminando os ingredientes mais comuns que criam confusão entre culinárias distintas, usando `dplyr::select()`.\n", + "\n", + "- Usando uma `recipe` que pré-processa os dados para prepará-los para modelagem, aplicando um algoritmo de `over-sampling`.\n", + "\n", + "Já vimos isso na lição anterior, então deve ser tranquilo 🥳!\n" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "6tj_rN00hClA" + }, + "source": [ + "# Load the core Tidyverse and Tidymodels packages\n", + "library(tidyverse)\n", + "library(tidymodels)\n", + "\n", + "# Load the original cuisines data\n", + "df <- read_csv(file = \"https://raw.githubusercontent.com/microsoft/ML-For-Beginners/main/4-Classification/data/cuisines.csv\")\n", + "\n", + "# Drop id column, rice, garlic and ginger from our original data set\n", + "df_select <- df %>% \n", + " select(-c(1, rice, garlic, ginger)) %>%\n", + " # Encode cuisine column as categorical\n", + " mutate(cuisine = factor(cuisine))\n", + "\n", + "\n", + "# Create data split specification\n", + "set.seed(2056)\n", + "cuisines_split <- initial_split(data = df_select,\n", + " strata = cuisine,\n", + " prop = 0.7)\n", + "\n", + "# Extract the data in each split\n", + "cuisines_train <- training(cuisines_split)\n", + "cuisines_test <- testing(cuisines_split)\n", + "\n", + "# Display distribution of cuisines in the training set\n", + "cuisines_train %>% \n", + " count(cuisine) %>% \n", + " arrange(desc(n))" + ], + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "zFin5yw3hHb1" + }, + "source": [ + "### Lidando com dados desbalanceados\n", + "\n", + "Dados desbalanceados frequentemente têm efeitos negativos no desempenho do modelo. Muitos modelos funcionam melhor quando o número de observações é igual e, por isso, tendem a ter dificuldades com dados desbalanceados.\n", + "\n", + "Existem basicamente duas maneiras de lidar com conjuntos de dados desbalanceados:\n", + "\n", + "- adicionar observações à classe minoritária: `Over-sampling`, por exemplo, usando um algoritmo SMOTE que gera novos exemplos sintéticos da classe minoritária utilizando os vizinhos mais próximos desses casos.\n", + "\n", + "- remover observações da classe majoritária: `Under-sampling`\n", + "\n", + "Na nossa aula anterior, demonstramos como lidar com conjuntos de dados desbalanceados usando um `recipe`. Um recipe pode ser pensado como um plano que descreve quais etapas devem ser aplicadas a um conjunto de dados para prepará-lo para análise. No nosso caso, queremos ter uma distribuição igual no número de nossas culinárias para o nosso `training set`. Vamos direto ao ponto.\n" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "cRzTnHolhLWd" + }, + "source": [ + "# Load themis package for dealing with imbalanced data\n", + "library(themis)\n", + "\n", + "# Create a recipe for preprocessing training data\n", + "cuisines_recipe <- recipe(cuisine ~ ., data = cuisines_train) %>%\n", + " step_smote(cuisine) \n", + "\n", + "# Print recipe\n", + "cuisines_recipe" + ], + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "KxOQ2ORhhO81" + }, + "source": [ + "Agora estamos prontos para treinar modelos 👩‍💻👨‍💻!\n", + "\n", + "## 3. Além dos modelos de regressão multinomial\n", + "\n", + "Na nossa aula anterior, exploramos os modelos de regressão multinomial. Agora, vamos conhecer alguns modelos mais flexíveis para classificação.\n", + "\n", + "### Máquinas de Vetores de Suporte\n", + "\n", + "No contexto de classificação, `Máquinas de Vetores de Suporte` é uma técnica de aprendizado de máquina que busca encontrar um *hiperplano* que \"melhor\" separa as classes. Vamos observar um exemplo simples:\n", + "\n", + "

\n", + " \n", + "

https://commons.wikimedia.org/w/index.php?curid=22877598
\n" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "C4Wsd0vZhXYu" + }, + "source": [ + "H1~ não separa as classes. H2~ separa, mas apenas com uma margem pequena. H3~ as separa com a margem máxima.\n", + "\n", + "#### Classificador Linear de Vetores de Suporte\n", + "\n", + "O agrupamento por Vetores de Suporte (SVC) é um membro da família de técnicas de aprendizado de máquina baseadas em Máquinas de Vetores de Suporte. No SVC, o hiperplano é escolhido para separar corretamente `a maioria` das observações de treinamento, mas `pode classificar erroneamente` algumas observações. Ao permitir que alguns pontos fiquem do lado errado, o SVM se torna mais robusto a outliers, o que resulta em uma melhor generalização para novos dados. O parâmetro que regula essa violação é chamado de `cost`, que tem um valor padrão de 1 (veja `help(\"svm_poly\")`).\n", + "\n", + "Vamos criar um SVC linear definindo `degree = 1` em um modelo SVM polinomial.\n" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "vJpp6nuChlBz" + }, + "source": [ + "# Make a linear SVC specification\n", + "svc_linear_spec <- svm_poly(degree = 1) %>% \n", + " set_engine(\"kernlab\") %>% \n", + " set_mode(\"classification\")\n", + "\n", + "# Bundle specification and recipe into a worklow\n", + "svc_linear_wf <- workflow() %>% \n", + " add_recipe(cuisines_recipe) %>% \n", + " add_model(svc_linear_spec)\n", + "\n", + "# Print out workflow\n", + "svc_linear_wf" + ], + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "rDs8cWNkhoqu" + }, + "source": [ + "Agora que capturamos as etapas de pré-processamento e a especificação do modelo em um *workflow*, podemos prosseguir para treinar o SVC linear e avaliar os resultados ao mesmo tempo. Para as métricas de desempenho, vamos criar um conjunto de métricas que avaliará: `accuracy`, `sensitivity`, `Positive Predicted Value` e `F Measure`.\n", + "\n", + "> `augment()` adicionará coluna(s) de previsões aos dados fornecidos.\n" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "81wiqcwuhrnq" + }, + "source": [ + "# Train a linear SVC model\n", + "svc_linear_fit <- svc_linear_wf %>% \n", + " fit(data = cuisines_train)\n", + "\n", + "# Create a metric set\n", + "eval_metrics <- metric_set(ppv, sens, accuracy, f_meas)\n", + "\n", + "\n", + "# Make predictions and Evaluate model performance\n", + "svc_linear_fit %>% \n", + " augment(new_data = cuisines_test) %>% \n", + " eval_metrics(truth = cuisine, estimate = .pred_class)" + ], + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "0UFQvHf-huo3" + }, + "source": [ + "#### Máquina de Vetores de Suporte\n", + "\n", + "A máquina de vetores de suporte (SVM) é uma extensão do classificador de vetores de suporte para acomodar um limite não linear entre as classes. Essencialmente, as SVMs utilizam o *truque do kernel* para ampliar o espaço de características e se adaptar a relações não lineares entre as classes. Uma função kernel popular e extremamente flexível usada pelas SVMs é a *função de base radial.* Vamos ver como ela se comporta com nossos dados.\n" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "-KX4S8mzhzmp" + }, + "source": [ + "set.seed(2056)\n", + "\n", + "# Make an RBF SVM specification\n", + "svm_rbf_spec <- svm_rbf() %>% \n", + " set_engine(\"kernlab\") %>% \n", + " set_mode(\"classification\")\n", + "\n", + "# Bundle specification and recipe into a worklow\n", + "svm_rbf_wf <- workflow() %>% \n", + " add_recipe(cuisines_recipe) %>% \n", + " add_model(svm_rbf_spec)\n", + "\n", + "\n", + "# Train an RBF model\n", + "svm_rbf_fit <- svm_rbf_wf %>% \n", + " fit(data = cuisines_train)\n", + "\n", + "\n", + "# Make predictions and Evaluate model performance\n", + "svm_rbf_fit %>% \n", + " augment(new_data = cuisines_test) %>% \n", + " eval_metrics(truth = cuisine, estimate = .pred_class)" + ], + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "QBFSa7WSh4HQ" + }, + "source": [ + "Muito melhor 🤩!\n", + "\n", + "> ✅ Por favor, veja:\n", + ">\n", + "> - [*Support Vector Machines*](https://bradleyboehmke.github.io/HOML/svm.html), Hands-on Machine Learning with R\n", + ">\n", + "> - [*Support Vector Machines*](https://www.statlearning.com/), An Introduction to Statistical Learning with Applications in R\n", + ">\n", + "> para leitura adicional.\n", + "\n", + "### Classificadores de Vizinhos Mais Próximos\n", + "\n", + "O algoritmo *K*-nearest neighbor (KNN) prevê cada observação com base em sua *semelhança* com outras observações.\n", + "\n", + "Vamos ajustar um ao nosso conjunto de dados.\n" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "k4BxxBcdh9Ka" + }, + "source": [ + "# Make a KNN specification\n", + "knn_spec <- nearest_neighbor() %>% \n", + " set_engine(\"kknn\") %>% \n", + " set_mode(\"classification\")\n", + "\n", + "# Bundle recipe and model specification into a workflow\n", + "knn_wf <- workflow() %>% \n", + " add_recipe(cuisines_recipe) %>% \n", + " add_model(knn_spec)\n", + "\n", + "# Train a boosted tree model\n", + "knn_wf_fit <- knn_wf %>% \n", + " fit(data = cuisines_train)\n", + "\n", + "\n", + "# Make predictions and Evaluate model performance\n", + "knn_wf_fit %>% \n", + " augment(new_data = cuisines_test) %>% \n", + " eval_metrics(truth = cuisine, estimate = .pred_class)" + ], + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "HaegQseriAcj" + }, + "source": [ + "Parece que este modelo não está apresentando um bom desempenho. Provavelmente, alterar os argumentos do modelo (veja `help(\"nearest_neighbor\")`) pode melhorar o desempenho do modelo. Certifique-se de testar isso.\n", + "\n", + "> ✅ Por favor, veja:\n", + ">\n", + "> - [Hands-on Machine Learning with R](https://bradleyboehmke.github.io/HOML/)\n", + ">\n", + "> - [An Introduction to Statistical Learning with Applications in R](https://www.statlearning.com/)\n", + ">\n", + "> para aprender mais sobre classificadores *K*-Nearest Neighbors.\n", + "\n", + "### Classificadores de conjunto\n", + "\n", + "Os algoritmos de conjunto funcionam combinando múltiplos estimadores base para produzir um modelo ideal, seja por:\n", + "\n", + "`bagging`: aplicando uma *função de média* a uma coleção de modelos base\n", + "\n", + "`boosting`: construindo uma sequência de modelos que se baseiam uns nos outros para melhorar o desempenho preditivo.\n", + "\n", + "Vamos começar experimentando um modelo de Random Forest, que constrói uma grande coleção de árvores de decisão e, em seguida, aplica uma função de média para obter um modelo geral melhor.\n" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "49DPoVs6iK1M" + }, + "source": [ + "# Make a random forest specification\n", + "rf_spec <- rand_forest() %>% \n", + " set_engine(\"ranger\") %>% \n", + " set_mode(\"classification\")\n", + "\n", + "# Bundle recipe and model specification into a workflow\n", + "rf_wf <- workflow() %>% \n", + " add_recipe(cuisines_recipe) %>% \n", + " add_model(rf_spec)\n", + "\n", + "# Train a random forest model\n", + "rf_wf_fit <- rf_wf %>% \n", + " fit(data = cuisines_train)\n", + "\n", + "\n", + "# Make predictions and Evaluate model performance\n", + "rf_wf_fit %>% \n", + " augment(new_data = cuisines_test) %>% \n", + " eval_metrics(truth = cuisine, estimate = .pred_class)" + ], + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "RGVYwC_aiUWc" + }, + "source": [ + "Bom trabalho 👏!\n", + "\n", + "Vamos também experimentar com um modelo de Árvore Reforçada.\n", + "\n", + "A Árvore Reforçada define um método de conjunto que cria uma série de árvores de decisão sequenciais, onde cada árvore depende dos resultados das árvores anteriores, na tentativa de reduzir o erro de forma incremental. Ela foca nos pesos dos itens classificados incorretamente e ajusta o ajuste para o próximo classificador corrigir.\n", + "\n", + "Existem diferentes maneiras de ajustar este modelo (veja `help(\"boost_tree\")`). Neste exemplo, ajustaremos Árvores Reforçadas usando o mecanismo `xgboost`.\n" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "Py1YWo-micWs" + }, + "source": [ + "# Make a boosted tree specification\n", + "boost_spec <- boost_tree(trees = 200) %>% \n", + " set_engine(\"xgboost\") %>% \n", + " set_mode(\"classification\")\n", + "\n", + "# Bundle recipe and model specification into a workflow\n", + "boost_wf <- workflow() %>% \n", + " add_recipe(cuisines_recipe) %>% \n", + " add_model(boost_spec)\n", + "\n", + "# Train a boosted tree model\n", + "boost_wf_fit <- boost_wf %>% \n", + " fit(data = cuisines_train)\n", + "\n", + "\n", + "# Make predictions and Evaluate model performance\n", + "boost_wf_fit %>% \n", + " augment(new_data = cuisines_test) %>% \n", + " eval_metrics(truth = cuisine, estimate = .pred_class)" + ], + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "zNQnbuejigZM" + }, + "source": [ + "> ✅ Por favor, veja:\n", + ">\n", + "> - [Machine Learning for Social Scientists](https://cimentadaj.github.io/ml_socsci/tree-based-methods.html#random-forests)\n", + ">\n", + "> - [Hands-on Machine Learning with R](https://bradleyboehmke.github.io/HOML/)\n", + ">\n", + "> - [An Introduction to Statistical Learning with Applications in R](https://www.statlearning.com/)\n", + ">\n", + "> - - Explora o modelo AdaBoost, que é uma boa alternativa ao xgboost.\n", + ">\n", + "> para aprender mais sobre classificadores Ensemble.\n", + "\n", + "## 4. Extra - comparando múltiplos modelos\n", + "\n", + "Nós ajustamos um bom número de modelos neste laboratório 🙌. Pode se tornar cansativo ou trabalhoso criar muitos fluxos de trabalho a partir de diferentes conjuntos de pré-processadores e/ou especificações de modelos e, em seguida, calcular as métricas de desempenho uma por uma.\n", + "\n", + "Vamos ver se conseguimos resolver isso criando uma função que ajusta uma lista de fluxos de trabalho no conjunto de treinamento e, em seguida, retorna as métricas de desempenho com base no conjunto de teste. Vamos usar `map()` e `map_dfr()` do pacote [purrr](https://purrr.tidyverse.org/) para aplicar funções a cada elemento de uma lista.\n", + "\n", + "> As funções [`map()`](https://purrr.tidyverse.org/reference/map.html) permitem substituir muitos loops `for` por um código que é mais conciso e mais fácil de ler. O melhor lugar para aprender sobre as funções [`map()`](https://purrr.tidyverse.org/reference/map.html) é o [capítulo de iteração](http://r4ds.had.co.nz/iteration.html) em R for Data Science.\n" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "Qzb7LyZnimd2" + }, + "source": [ + "set.seed(2056)\n", + "\n", + "# Create a metric set\n", + "eval_metrics <- metric_set(ppv, sens, accuracy, f_meas)\n", + "\n", + "# Define a function that returns performance metrics\n", + "compare_models <- function(workflow_list, train_set, test_set){\n", + " \n", + " suppressWarnings(\n", + " # Fit each model to the train_set\n", + " map(workflow_list, fit, data = train_set) %>% \n", + " # Make predictions on the test set\n", + " map_dfr(augment, new_data = test_set, .id = \"model\") %>%\n", + " # Select desired columns\n", + " select(model, cuisine, .pred_class) %>% \n", + " # Evaluate model performance\n", + " group_by(model) %>% \n", + " eval_metrics(truth = cuisine, estimate = .pred_class) %>% \n", + " ungroup()\n", + " )\n", + " \n", + "} # End of function" + ], + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "Fwa712sNisDA" + }, + "source": [] + }, + { + "cell_type": "code", + "metadata": { + "id": "3i4VJOi2iu-a" + }, + "source": [ + "# Make a list of workflows\n", + "workflow_list <- list(\n", + " \"svc\" = svc_linear_wf,\n", + " \"svm\" = svm_rbf_wf,\n", + " \"knn\" = knn_wf,\n", + " \"random_forest\" = rf_wf,\n", + " \"xgboost\" = boost_wf)\n", + "\n", + "# Call the function\n", + "set.seed(2056)\n", + "perf_metrics <- compare_models(workflow_list = workflow_list, train_set = cuisines_train, test_set = cuisines_test)\n", + "\n", + "# Print out performance metrics\n", + "perf_metrics %>% \n", + " group_by(.metric) %>% \n", + " arrange(desc(.estimate)) %>% \n", + " slice_head(n=7)\n", + "\n", + "# Compare accuracy\n", + "perf_metrics %>% \n", + " filter(.metric == \"accuracy\") %>% \n", + " arrange(desc(.estimate))\n" + ], + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "KuWK_lEli4nW" + }, + "source": [ + "O pacote [**workflowset**](https://workflowsets.tidymodels.org/) permite que os usuários criem e ajustem facilmente um grande número de modelos, mas é principalmente projetado para funcionar com técnicas de reamostragem, como `cross-validation` (validação cruzada), uma abordagem que ainda vamos abordar.\n", + "\n", + "## **🚀Desafio**\n", + "\n", + "Cada uma dessas técnicas possui um grande número de parâmetros que você pode ajustar, como, por exemplo, `cost` em SVMs, `neighbors` em KNN, `mtry` (Preditores Selecionados Aleatoriamente) em Random Forest.\n", + "\n", + "Pesquise os parâmetros padrão de cada uma e reflita sobre o que ajustar esses parâmetros significaria para a qualidade do modelo.\n", + "\n", + "Para saber mais sobre um modelo específico e seus parâmetros, use: `help(\"model\")`, por exemplo, `help(\"rand_forest\")`.\n", + "\n", + "> Na prática, geralmente *estimamos* os *melhores valores* para esses parâmetros treinando muitos modelos em um `conjunto de dados simulado` e medindo o desempenho de todos esses modelos. Esse processo é chamado de **tuning** (ajuste fino).\n", + "\n", + "### [**Quiz pós-aula**](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/24/)\n", + "\n", + "### **Revisão e Autoestudo**\n", + "\n", + "Há muitos termos técnicos nessas lições, então reserve um momento para revisar [esta lista](https://docs.microsoft.com/dotnet/machine-learning/resources/glossary?WT.mc_id=academic-77952-leestott) de terminologia útil!\n", + "\n", + "#### AGRADECIMENTOS A:\n", + "\n", + "[`Allison Horst`](https://twitter.com/allison_horst/) por criar as ilustrações incríveis que tornam o R mais acolhedor e envolvente. Encontre mais ilustrações na sua [galeria](https://www.google.com/url?q=https://github.com/allisonhorst/stats-illustrations&sa=D&source=editors&ust=1626380772530000&usg=AOvVaw3zcfyCizFQZpkSLzxiiQEM).\n", + "\n", + "[Cassie Breviu](https://www.twitter.com/cassieview) e [Jen Looper](https://www.twitter.com/jenlooper) por criarem a versão original deste módulo em Python ♥️\n", + "\n", + "Bons estudos,\n", + "\n", + "[Eric](https://twitter.com/ericntay), Embaixador Estudante Gold da Microsoft Learn.\n", + "\n", + "

\n", + " \n", + "

Arte por @allison_horst
\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n---\n\n**Aviso Legal**: \nEste documento foi traduzido utilizando o serviço de tradução por IA [Co-op Translator](https://github.com/Azure/co-op-translator). Embora nos esforcemos para garantir a precisão, esteja ciente de que traduções automatizadas podem conter erros ou imprecisões. O documento original em seu idioma nativo deve ser considerado a fonte autoritativa. Para informações críticas, recomenda-se a tradução profissional realizada por humanos. Não nos responsabilizamos por quaisquer mal-entendidos ou interpretações equivocadas decorrentes do uso desta tradução.\n" + ] + } + ] +} \ No newline at end of file diff --git a/translations/pt-BR/4-Classification/3-Classifiers-2/solution/notebook.ipynb b/translations/pt-BR/4-Classification/3-Classifiers-2/solution/notebook.ipynb new file mode 100644 index 000000000..c62ee20a9 --- /dev/null +++ b/translations/pt-BR/4-Classification/3-Classifiers-2/solution/notebook.ipynb @@ -0,0 +1,302 @@ +{ + "cells": [ + { + "source": [], + "cell_type": "markdown", + "metadata": {} + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + " Unnamed: 0 cuisine almond angelica anise anise_seed apple \\\n", + "0 0 indian 0 0 0 0 0 \n", + "1 1 indian 1 0 0 0 0 \n", + "2 2 indian 0 0 0 0 0 \n", + "3 3 indian 0 0 0 0 0 \n", + "4 4 indian 0 0 0 0 0 \n", + "\n", + " apple_brandy apricot armagnac ... whiskey white_bread white_wine \\\n", + "0 0 0 0 ... 0 0 0 \n", + "1 0 0 0 ... 0 0 0 \n", + "2 0 0 0 ... 0 0 0 \n", + "3 0 0 0 ... 0 0 0 \n", + "4 0 0 0 ... 0 0 0 \n", + "\n", + " whole_grain_wheat_flour wine wood yam yeast yogurt zucchini \n", + "0 0 0 0 0 0 0 0 \n", + "1 0 0 0 0 0 0 0 \n", + "2 0 0 0 0 0 0 0 \n", + "3 0 0 0 0 0 0 0 \n", + "4 0 0 0 0 0 1 0 \n", + "\n", + "[5 rows x 382 columns]" + ], + "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
Unnamed: 0cuisinealmondangelicaaniseanise_seedappleapple_brandyapricotarmagnac...whiskeywhite_breadwhite_winewhole_grain_wheat_flourwinewoodyamyeastyogurtzucchini
00indian00000000...0000000000
11indian10000000...0000000000
22indian00000000...0000000000
33indian00000000...0000000000
44indian00000000...0000000010
\n

5 rows × 382 columns

\n
" + }, + "metadata": {}, + "execution_count": 1 + } + ], + "source": [ + "import pandas as pd\n", + "cuisines_df = pd.read_csv(\"../../data/cleaned_cuisines.csv\")\n", + "cuisines_df.head()" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "0 indian\n", + "1 indian\n", + "2 indian\n", + "3 indian\n", + "4 indian\n", + "Name: cuisine, dtype: object" + ] + }, + "metadata": {}, + "execution_count": 2 + } + ], + "source": [ + "cuisines_label_df = cuisines_df['cuisine']\n", + "cuisines_label_df.head()" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + " almond angelica anise anise_seed apple apple_brandy apricot \\\n", + "0 0 0 0 0 0 0 0 \n", + "1 1 0 0 0 0 0 0 \n", + "2 0 0 0 0 0 0 0 \n", + "3 0 0 0 0 0 0 0 \n", + "4 0 0 0 0 0 0 0 \n", + "\n", + " armagnac artemisia artichoke ... whiskey white_bread white_wine \\\n", + "0 0 0 0 ... 0 0 0 \n", + "1 0 0 0 ... 0 0 0 \n", + "2 0 0 0 ... 0 0 0 \n", + "3 0 0 0 ... 0 0 0 \n", + "4 0 0 0 ... 0 0 0 \n", + "\n", + " whole_grain_wheat_flour wine wood yam yeast yogurt zucchini \n", + "0 0 0 0 0 0 0 0 \n", + "1 0 0 0 0 0 0 0 \n", + "2 0 0 0 0 0 0 0 \n", + "3 0 0 0 0 0 0 0 \n", + "4 0 0 0 0 0 1 0 \n", + "\n", + "[5 rows x 380 columns]" + ], + "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
almondangelicaaniseanise_seedappleapple_brandyapricotarmagnacartemisiaartichoke...whiskeywhite_breadwhite_winewhole_grain_wheat_flourwinewoodyamyeastyogurtzucchini
00000000000...0000000000
11000000000...0000000000
20000000000...0000000000
30000000000...0000000000
40000000000...0000000010
\n

5 rows × 380 columns

\n
" + }, + "metadata": {}, + "execution_count": 3 + } + ], + "source": [ + "cuisines_feature_df = cuisines_df.drop(['Unnamed: 0', 'cuisine'], axis=1)\n", + "cuisines_feature_df.head()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Experimente diferentes classificadores\n" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [], + "source": [ + "from sklearn.neighbors import KNeighborsClassifier\n", + "from sklearn.linear_model import LogisticRegression\n", + "from sklearn.svm import SVC\n", + "from sklearn.ensemble import RandomForestClassifier, AdaBoostClassifier\n", + "from sklearn.model_selection import train_test_split, cross_val_score\n", + "from sklearn.metrics import accuracy_score,precision_score,confusion_matrix,classification_report, precision_recall_curve\n", + "import numpy as np" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [], + "source": [ + "X_train, X_test, y_train, y_test = train_test_split(cuisines_feature_df, cuisines_label_df, test_size=0.3)" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [], + "source": [ + "\n", + "C = 10\n", + "# Create different classifiers.\n", + "classifiers = {\n", + " 'Linear SVC': SVC(kernel='linear', C=C, probability=True,random_state=0),\n", + " 'KNN classifier': KNeighborsClassifier(C),\n", + " 'SVC': SVC(),\n", + " 'RFST': RandomForestClassifier(n_estimators=100),\n", + " 'ADA': AdaBoostClassifier(n_estimators=100)\n", + " \n", + "}\n" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Accuracy (train) for Linear SVC: 76.4% \n", + " precision recall f1-score support\n", + "\n", + " chinese 0.64 0.66 0.65 242\n", + " indian 0.91 0.86 0.89 236\n", + " japanese 0.72 0.73 0.73 245\n", + " korean 0.83 0.75 0.79 234\n", + " thai 0.75 0.82 0.78 242\n", + "\n", + " accuracy 0.76 1199\n", + " macro avg 0.77 0.76 0.77 1199\n", + "weighted avg 0.77 0.76 0.77 1199\n", + "\n", + "Accuracy (train) for KNN classifier: 70.7% \n", + " precision recall f1-score support\n", + "\n", + " chinese 0.65 0.63 0.64 242\n", + " indian 0.84 0.81 0.82 236\n", + " japanese 0.60 0.81 0.69 245\n", + " korean 0.89 0.53 0.67 234\n", + " thai 0.69 0.75 0.72 242\n", + "\n", + " accuracy 0.71 1199\n", + " macro avg 0.73 0.71 0.71 1199\n", + "weighted avg 0.73 0.71 0.71 1199\n", + "\n", + "Accuracy (train) for SVC: 80.1% \n", + " precision recall f1-score support\n", + "\n", + " chinese 0.71 0.69 0.70 242\n", + " indian 0.92 0.92 0.92 236\n", + " japanese 0.77 0.78 0.77 245\n", + " korean 0.87 0.77 0.82 234\n", + " thai 0.75 0.86 0.80 242\n", + "\n", + " accuracy 0.80 1199\n", + " macro avg 0.80 0.80 0.80 1199\n", + "weighted avg 0.80 0.80 0.80 1199\n", + "\n", + "Accuracy (train) for RFST: 82.8% \n", + " precision recall f1-score support\n", + "\n", + " chinese 0.80 0.75 0.77 242\n", + " indian 0.90 0.91 0.90 236\n", + " japanese 0.82 0.78 0.80 245\n", + " korean 0.85 0.82 0.83 234\n", + " thai 0.78 0.89 0.83 242\n", + "\n", + " accuracy 0.83 1199\n", + " macro avg 0.83 0.83 0.83 1199\n", + "weighted avg 0.83 0.83 0.83 1199\n", + "\n", + "Accuracy (train) for ADA: 71.1% \n", + " precision recall f1-score support\n", + "\n", + " chinese 0.60 0.57 0.58 242\n", + " indian 0.87 0.84 0.86 236\n", + " japanese 0.71 0.60 0.65 245\n", + " korean 0.68 0.78 0.72 234\n", + " thai 0.70 0.78 0.74 242\n", + "\n", + " accuracy 0.71 1199\n", + " macro avg 0.71 0.71 0.71 1199\n", + "weighted avg 0.71 0.71 0.71 1199\n", + "\n" + ] + } + ], + "source": [ + "n_classifiers = len(classifiers)\n", + "\n", + "for index, (name, classifier) in enumerate(classifiers.items()):\n", + " classifier.fit(X_train, np.ravel(y_train))\n", + "\n", + " y_pred = classifier.predict(X_test)\n", + " accuracy = accuracy_score(y_test, y_pred)\n", + " print(\"Accuracy (train) for %s: %0.1f%% \" % (name, accuracy * 100))\n", + " print(classification_report(y_test,y_pred))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n---\n\n**Aviso Legal**: \nEste documento foi traduzido utilizando o serviço de tradução por IA [Co-op Translator](https://github.com/Azure/co-op-translator). Embora nos esforcemos para garantir a precisão, esteja ciente de que traduções automatizadas podem conter erros ou imprecisões. O documento original em seu idioma nativo deve ser considerado a fonte autoritativa. Para informações críticas, recomenda-se a tradução profissional realizada por humanos. Não nos responsabilizamos por quaisquer mal-entendidos ou interpretações equivocadas decorrentes do uso desta tradução.\n" + ] + } + ], + "metadata": { + "interpreter": { + "hash": "70b38d7a306a849643e446cd70466270a13445e5987dfa1344ef2b127438fa4d" + }, + "kernelspec": { + "name": "python3", + "display_name": "Python 3.7.0 64-bit ('3.7')" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.7.0" + }, + "metadata": { + "interpreter": { + "hash": "70b38d7a306a849643e446cd70466270a13445e5987dfa1344ef2b127438fa4d" + } + }, + "coopTranslator": { + "original_hash": "7ea2b714669c823a596d986ba2d5739f", + "translation_date": "2025-08-29T23:47:48+00:00", + "source_file": "4-Classification/3-Classifiers-2/solution/notebook.ipynb", + "language_code": "br" + } + }, + "nbformat": 4, + "nbformat_minor": 4 +} \ No newline at end of file diff --git a/translations/pt-BR/4-Classification/4-Applied/README.md b/translations/pt-BR/4-Classification/4-Applied/README.md new file mode 100644 index 000000000..674ad486d --- /dev/null +++ b/translations/pt-BR/4-Classification/4-Applied/README.md @@ -0,0 +1,320 @@ +# Construir um Aplicativo Web de Recomendação de Culinária + +Nesta lição, você irá construir um modelo de classificação usando algumas das técnicas aprendidas em lições anteriores e com o delicioso conjunto de dados de culinária utilizado ao longo desta série. Além disso, você criará um pequeno aplicativo web para usar um modelo salvo, aproveitando o runtime web do Onnx. + +Um dos usos práticos mais úteis do aprendizado de máquina é a construção de sistemas de recomendação, e você pode dar o primeiro passo nessa direção hoje! + +[![Apresentando este aplicativo web](https://img.youtube.com/vi/17wdM9AHMfg/0.jpg)](https://youtu.be/17wdM9AHMfg "ML Aplicado") + +> 🎥 Clique na imagem acima para assistir ao vídeo: Jen Looper constrói um aplicativo web usando dados de culinária classificados + +## [Quiz pré-aula](https://ff-quizzes.netlify.app/en/ml/) + +Nesta lição, você aprenderá: + +- Como construir um modelo e salvá-lo como um modelo Onnx +- Como usar o Netron para inspecionar o modelo +- Como usar seu modelo em um aplicativo web para inferência + +## Construa seu modelo + +Construir sistemas de aprendizado de máquina aplicados é uma parte importante para aproveitar essas tecnologias em sistemas empresariais. Você pode usar modelos dentro de seus aplicativos web (e assim utilizá-los em um contexto offline, se necessário) usando Onnx. + +Em uma [lição anterior](../../3-Web-App/1-Web-App/README.md), você construiu um modelo de regressão sobre avistamentos de OVNIs, o "pickleou" e o utilizou em um aplicativo Flask. Embora essa arquitetura seja muito útil, trata-se de um aplicativo Python full-stack, e seus requisitos podem incluir o uso de um aplicativo JavaScript. + +Nesta lição, você pode construir um sistema básico baseado em JavaScript para inferência. Primeiro, no entanto, você precisa treinar um modelo e convertê-lo para uso com Onnx. + +## Exercício - treinar modelo de classificação + +Primeiro, treine um modelo de classificação usando o conjunto de dados de culinária limpo que utilizamos. + +1. Comece importando bibliotecas úteis: + + ```python + !pip install skl2onnx + import pandas as pd + ``` + + Você precisará de '[skl2onnx](https://onnx.ai/sklearn-onnx/)' para ajudar a converter seu modelo Scikit-learn para o formato Onnx. + +1. Em seguida, trabalhe com seus dados da mesma forma que fez em lições anteriores, lendo um arquivo CSV usando `read_csv()`: + + ```python + data = pd.read_csv('../data/cleaned_cuisines.csv') + data.head() + ``` + +1. Remova as duas primeiras colunas desnecessárias e salve os dados restantes como 'X': + + ```python + X = data.iloc[:,2:] + X.head() + ``` + +1. Salve os rótulos como 'y': + + ```python + y = data[['cuisine']] + y.head() + + ``` + +### Inicie a rotina de treinamento + +Usaremos a biblioteca 'SVC', que tem boa precisão. + +1. Importe as bibliotecas apropriadas do Scikit-learn: + + ```python + from sklearn.model_selection import train_test_split + from sklearn.svm import SVC + from sklearn.model_selection import cross_val_score + from sklearn.metrics import accuracy_score,precision_score,confusion_matrix,classification_report + ``` + +1. Separe os conjuntos de treinamento e teste: + + ```python + X_train, X_test, y_train, y_test = train_test_split(X,y,test_size=0.3) + ``` + +1. Construa um modelo de classificação SVC como fez na lição anterior: + + ```python + model = SVC(kernel='linear', C=10, probability=True,random_state=0) + model.fit(X_train,y_train.values.ravel()) + ``` + +1. Agora, teste seu modelo chamando `predict()`: + + ```python + y_pred = model.predict(X_test) + ``` + +1. Imprima um relatório de classificação para verificar a qualidade do modelo: + + ```python + print(classification_report(y_test,y_pred)) + ``` + + Como vimos antes, a precisão é boa: + + ```output + precision recall f1-score support + + chinese 0.72 0.69 0.70 257 + indian 0.91 0.87 0.89 243 + japanese 0.79 0.77 0.78 239 + korean 0.83 0.79 0.81 236 + thai 0.72 0.84 0.78 224 + + accuracy 0.79 1199 + macro avg 0.79 0.79 0.79 1199 + weighted avg 0.79 0.79 0.79 1199 + ``` + +### Converta seu modelo para Onnx + +Certifique-se de fazer a conversão com o número correto de tensores. Este conjunto de dados possui 380 ingredientes listados, então você precisa anotar esse número em `FloatTensorType`: + +1. Converta usando um número de tensor de 380. + + ```python + from skl2onnx import convert_sklearn + from skl2onnx.common.data_types import FloatTensorType + + initial_type = [('float_input', FloatTensorType([None, 380]))] + options = {id(model): {'nocl': True, 'zipmap': False}} + ``` + +1. Crie o arquivo onx e salve como **model.onnx**: + + ```python + onx = convert_sklearn(model, initial_types=initial_type, options=options) + with open("./model.onnx", "wb") as f: + f.write(onx.SerializeToString()) + ``` + + > Nota: você pode passar [opções](https://onnx.ai/sklearn-onnx/parameterized.html) no seu script de conversão. Neste caso, passamos 'nocl' como True e 'zipmap' como False. Como este é um modelo de classificação, você tem a opção de remover ZipMap, que produz uma lista de dicionários (não necessário). `nocl` refere-se à inclusão de informações de classe no modelo. Reduza o tamanho do seu modelo configurando `nocl` como 'True'. + +Executar o notebook completo agora criará um modelo Onnx e o salvará nesta pasta. + +## Visualize seu modelo + +Modelos Onnx não são muito visíveis no Visual Studio Code, mas há um software gratuito muito bom que muitos pesquisadores utilizam para visualizar o modelo e garantir que ele foi construído corretamente. Baixe o [Netron](https://github.com/lutzroeder/Netron) e abra seu arquivo model.onnx. Você poderá ver seu modelo simples visualizado, com seus 380 inputs e o classificador listado: + +![Visualização no Netron](../../../../4-Classification/4-Applied/images/netron.png) + +Netron é uma ferramenta útil para visualizar seus modelos. + +Agora você está pronto para usar este modelo interessante em um aplicativo web. Vamos construir um aplicativo que será útil quando você olhar para sua geladeira e tentar descobrir quais combinações de ingredientes restantes podem ser usadas para cozinhar um prato específico, conforme determinado pelo seu modelo. + +## Construa um aplicativo web de recomendação + +Você pode usar seu modelo diretamente em um aplicativo web. Essa arquitetura também permite que você o execute localmente e até mesmo offline, se necessário. Comece criando um arquivo `index.html` na mesma pasta onde você armazenou seu arquivo `model.onnx`. + +1. Neste arquivo _index.html_, adicione a seguinte marcação: + + ```html + + +
+ Cuisine Matcher +
+ + ... + + + ``` + +1. Agora, dentro das tags `body`, adicione uma pequena marcação para mostrar uma lista de caixas de seleção refletindo alguns ingredientes: + + ```html +

Check your refrigerator. What can you create?

+
+
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+
+
+ +
+ ``` + + Note que cada caixa de seleção recebe um valor. Isso reflete o índice onde o ingrediente é encontrado de acordo com o conjunto de dados. Por exemplo, maçã, nesta lista alfabética, ocupa a quinta coluna, então seu valor é '4', já que começamos a contar a partir de 0. Você pode consultar a [planilha de ingredientes](../../../../4-Classification/data/ingredient_indexes.csv) para descobrir o índice de um determinado ingrediente. + + Continuando seu trabalho no arquivo index.html, adicione um bloco de script onde o modelo é chamado após o fechamento final de ``. + +1. Primeiro, importe o [Onnx Runtime](https://www.onnxruntime.ai/): + + ```html + + ``` + + > Onnx Runtime é usado para permitir a execução de seus modelos Onnx em uma ampla gama de plataformas de hardware, incluindo otimizações e uma API para uso. + +1. Uma vez que o Runtime esteja configurado, você pode chamá-lo: + + ```html + + ``` + +Neste código, várias coisas estão acontecendo: + +1. Você criou um array de 380 valores possíveis (1 ou 0) para serem configurados e enviados ao modelo para inferência, dependendo de quais caixas de seleção de ingredientes estão marcadas. +2. Você criou um array de caixas de seleção e uma forma de determinar se elas foram marcadas em uma função `init` que é chamada quando o aplicativo inicia. Quando uma caixa de seleção é marcada, o array `ingredients` é alterado para refletir o ingrediente escolhido. +3. Você criou uma função `testCheckboxes` que verifica se alguma caixa de seleção foi marcada. +4. Você usa a função `startInference` quando o botão é pressionado e, se alguma caixa de seleção estiver marcada, inicia a inferência. +5. A rotina de inferência inclui: + 1. Configurar um carregamento assíncrono do modelo + 2. Criar uma estrutura de Tensor para enviar ao modelo + 3. Criar 'feeds' que refletem o input `float_input` que você criou ao treinar seu modelo (você pode usar o Netron para verificar esse nome) + 4. Enviar esses 'feeds' ao modelo e aguardar uma resposta + +## Teste seu aplicativo + +Abra uma sessão de terminal no Visual Studio Code na pasta onde seu arquivo index.html está localizado. Certifique-se de que você tenha o [http-server](https://www.npmjs.com/package/http-server) instalado globalmente e digite `http-server` no prompt. Um localhost deve abrir e você poderá visualizar seu aplicativo web. Verifique qual culinária é recomendada com base em vários ingredientes: + +![Aplicativo web de ingredientes](../../../../4-Classification/4-Applied/images/web-app.png) + +Parabéns, você criou um aplicativo web de 'recomendação' com alguns campos. Dedique algum tempo para expandir este sistema! + +## 🚀Desafio + +Seu aplicativo web é muito básico, então continue expandindo-o usando ingredientes e seus índices do [ingredient_indexes](../../../../4-Classification/data/ingredient_indexes.csv). Quais combinações de sabores funcionam para criar um prato típico de uma determinada nacionalidade? + +## [Quiz pós-aula](https://ff-quizzes.netlify.app/en/ml/) + +## Revisão e Autoestudo + +Embora esta lição tenha apenas tocado na utilidade de criar um sistema de recomendação para ingredientes alimentares, esta área de aplicações de aprendizado de máquina é muito rica em exemplos. Leia mais sobre como esses sistemas são construídos: + +- https://www.sciencedirect.com/topics/computer-science/recommendation-engine +- https://www.technologyreview.com/2014/08/25/171547/the-ultimate-challenge-for-recommendation-engines/ +- https://www.technologyreview.com/2015/03/23/168831/everything-is-a-recommendation/ + +## Tarefa + +[Construa um novo sistema de recomendação](assignment.md) + +--- + +**Aviso Legal**: +Este documento foi traduzido utilizando o serviço de tradução por IA [Co-op Translator](https://github.com/Azure/co-op-translator). Embora nos esforcemos para garantir a precisão, esteja ciente de que traduções automáticas podem conter erros ou imprecisões. O documento original em seu idioma nativo deve ser considerado a fonte oficial. Para informações críticas, recomenda-se a tradução profissional realizada por humanos. Não nos responsabilizamos por quaisquer mal-entendidos ou interpretações incorretas decorrentes do uso desta tradução. \ No newline at end of file diff --git a/translations/pt-BR/4-Classification/4-Applied/assignment.md b/translations/pt-BR/4-Classification/4-Applied/assignment.md new file mode 100644 index 000000000..b350ba2e3 --- /dev/null +++ b/translations/pt-BR/4-Classification/4-Applied/assignment.md @@ -0,0 +1,16 @@ +# Construa um recomendador + +## Instruções + +Com base nos exercícios desta lição, você agora sabe como construir um aplicativo web em JavaScript usando o Onnx Runtime e um modelo Onnx convertido. Experimente criar um novo recomendador utilizando dados destas lições ou de outras fontes (dê os devidos créditos, por favor). Você pode criar, por exemplo, um recomendador de animais de estimação com base em diferentes atributos de personalidade, ou um recomendador de gêneros musicais baseado no humor de uma pessoa. Seja criativo! + +## Rubrica + +| Critério | Exemplário | Adequado | Precisa de Melhorias | +| --------- | ----------------------------------------------------------------------- | ------------------------------------- | --------------------------------- | +| | Um aplicativo web e um notebook são apresentados, ambos bem documentados e funcionando | Um dos dois está ausente ou com falhas | Ambos estão ausentes ou com falhas | + +--- + +**Aviso Legal**: +Este documento foi traduzido utilizando o serviço de tradução por IA [Co-op Translator](https://github.com/Azure/co-op-translator). Embora nos esforcemos para garantir a precisão, esteja ciente de que traduções automatizadas podem conter erros ou imprecisões. O documento original em seu idioma nativo deve ser considerado a fonte autoritativa. Para informações críticas, recomenda-se a tradução profissional realizada por humanos. Não nos responsabilizamos por quaisquer mal-entendidos ou interpretações equivocadas decorrentes do uso desta tradução. \ No newline at end of file diff --git a/translations/pt-BR/4-Classification/4-Applied/notebook.ipynb b/translations/pt-BR/4-Classification/4-Applied/notebook.ipynb new file mode 100644 index 000000000..cd80a38fb --- /dev/null +++ b/translations/pt-BR/4-Classification/4-Applied/notebook.ipynb @@ -0,0 +1,39 @@ +{ + "metadata": { + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": 3 + }, + "orig_nbformat": 4, + "coopTranslator": { + "original_hash": "2f3e0d9e9ac5c301558fb8bf733ac0cb", + "translation_date": "2025-08-29T23:46:55+00:00", + "source_file": "4-Classification/4-Applied/notebook.ipynb", + "language_code": "br" + } + }, + "nbformat": 4, + "nbformat_minor": 2, + "cells": [ + { + "source": [], + "cell_type": "markdown", + "metadata": {} + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n---\n\n**Aviso Legal**: \nEste documento foi traduzido utilizando o serviço de tradução por IA [Co-op Translator](https://github.com/Azure/co-op-translator). Embora nos esforcemos para garantir a precisão, esteja ciente de que traduções automatizadas podem conter erros ou imprecisões. O documento original em seu idioma nativo deve ser considerado a fonte autoritativa. Para informações críticas, recomenda-se a tradução profissional realizada por humanos. Não nos responsabilizamos por quaisquer mal-entendidos ou interpretações equivocadas decorrentes do uso desta tradução.\n" + ] + } + ] +} \ No newline at end of file diff --git a/translations/pt-BR/4-Classification/4-Applied/solution/notebook.ipynb b/translations/pt-BR/4-Classification/4-Applied/solution/notebook.ipynb new file mode 100644 index 000000000..eae35f6bc --- /dev/null +++ b/translations/pt-BR/4-Classification/4-Applied/solution/notebook.ipynb @@ -0,0 +1,290 @@ +{ + "metadata": { + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.7.0" + }, + "orig_nbformat": 2, + "kernelspec": { + "name": "python3", + "display_name": "Python 3.7.0 64-bit ('3.7')" + }, + "metadata": { + "interpreter": { + "hash": "70b38d7a306a849643e446cd70466270a13445e5987dfa1344ef2b127438fa4d" + } + }, + "interpreter": { + "hash": "70b38d7a306a849643e446cd70466270a13445e5987dfa1344ef2b127438fa4d" + }, + "coopTranslator": { + "original_hash": "49325d6dd12a3628fc64fa7ccb1a80ff", + "translation_date": "2025-08-29T23:47:11+00:00", + "source_file": "4-Classification/4-Applied/solution/notebook.ipynb", + "language_code": "br" + } + }, + "nbformat": 4, + "nbformat_minor": 2, + "cells": [ + { + "source": [], + "cell_type": "markdown", + "metadata": {} + }, + { + "cell_type": "code", + "execution_count": 58, + "metadata": {}, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Requirement already satisfied: skl2onnx in /Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages (1.8.0)\n", + "Requirement already satisfied: protobuf in /Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages (from skl2onnx) (3.8.0)\n", + "Requirement already satisfied: numpy>=1.15 in /Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages (from skl2onnx) (1.19.2)\n", + "Requirement already satisfied: onnx>=1.2.1 in /Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages (from skl2onnx) (1.9.0)\n", + "Requirement already satisfied: six in /Users/jenlooper/Library/Python/3.7/lib/python/site-packages (from skl2onnx) (1.12.0)\n", + "Requirement already satisfied: onnxconverter-common<1.9,>=1.6.1 in /Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages (from skl2onnx) (1.8.1)\n", + "Requirement already satisfied: scikit-learn>=0.19 in /Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages (from skl2onnx) (0.24.2)\n", + "Requirement already satisfied: scipy>=1.0 in /Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages (from skl2onnx) (1.4.1)\n", + "Requirement already satisfied: setuptools in /Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages (from protobuf->skl2onnx) (45.1.0)\n", + "Requirement already satisfied: typing-extensions>=3.6.2.1 in /Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages (from onnx>=1.2.1->skl2onnx) (3.10.0.0)\n", + "Requirement already satisfied: threadpoolctl>=2.0.0 in /Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages (from scikit-learn>=0.19->skl2onnx) (2.1.0)\n", + "Requirement already satisfied: joblib>=0.11 in /Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages (from scikit-learn>=0.19->skl2onnx) (0.16.0)\n", + "\u001b[33mWARNING: You are using pip version 20.2.3; however, version 21.1.2 is available.\n", + "You should consider upgrading via the '/Library/Frameworks/Python.framework/Versions/3.7/bin/python3.7 -m pip install --upgrade pip' command.\u001b[0m\n", + "Note: you may need to restart the kernel to use updated packages.\n" + ] + } + ], + "source": [ + "!pip install skl2onnx" + ] + }, + { + "cell_type": "code", + "execution_count": 59, + "metadata": {}, + "outputs": [], + "source": [ + "import pandas as pd \n" + ] + }, + { + "cell_type": "code", + "execution_count": 60, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + " Unnamed: 0 cuisine almond angelica anise anise_seed apple \\\n", + "0 0 indian 0 0 0 0 0 \n", + "1 1 indian 1 0 0 0 0 \n", + "2 2 indian 0 0 0 0 0 \n", + "3 3 indian 0 0 0 0 0 \n", + "4 4 indian 0 0 0 0 0 \n", + "\n", + " apple_brandy apricot armagnac ... whiskey white_bread white_wine \\\n", + "0 0 0 0 ... 0 0 0 \n", + "1 0 0 0 ... 0 0 0 \n", + "2 0 0 0 ... 0 0 0 \n", + "3 0 0 0 ... 0 0 0 \n", + "4 0 0 0 ... 0 0 0 \n", + "\n", + " whole_grain_wheat_flour wine wood yam yeast yogurt zucchini \n", + "0 0 0 0 0 0 0 0 \n", + "1 0 0 0 0 0 0 0 \n", + "2 0 0 0 0 0 0 0 \n", + "3 0 0 0 0 0 0 0 \n", + "4 0 0 0 0 0 1 0 \n", + "\n", + "[5 rows x 382 columns]" + ], + "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
Unnamed: 0cuisinealmondangelicaaniseanise_seedappleapple_brandyapricotarmagnac...whiskeywhite_breadwhite_winewhole_grain_wheat_flourwinewoodyamyeastyogurtzucchini
00indian00000000...0000000000
11indian10000000...0000000000
22indian00000000...0000000000
33indian00000000...0000000000
44indian00000000...0000000010
\n

5 rows × 382 columns

\n
" + }, + "metadata": {}, + "execution_count": 60 + } + ], + "source": [ + "data = pd.read_csv('../../data/cleaned_cuisines.csv')\n", + "data.head()" + ] + }, + { + "cell_type": "code", + "execution_count": 61, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + " almond angelica anise anise_seed apple apple_brandy apricot \\\n", + "0 0 0 0 0 0 0 0 \n", + "1 1 0 0 0 0 0 0 \n", + "2 0 0 0 0 0 0 0 \n", + "3 0 0 0 0 0 0 0 \n", + "4 0 0 0 0 0 0 0 \n", + "\n", + " armagnac artemisia artichoke ... whiskey white_bread white_wine \\\n", + "0 0 0 0 ... 0 0 0 \n", + "1 0 0 0 ... 0 0 0 \n", + "2 0 0 0 ... 0 0 0 \n", + "3 0 0 0 ... 0 0 0 \n", + "4 0 0 0 ... 0 0 0 \n", + "\n", + " whole_grain_wheat_flour wine wood yam yeast yogurt zucchini \n", + "0 0 0 0 0 0 0 0 \n", + "1 0 0 0 0 0 0 0 \n", + "2 0 0 0 0 0 0 0 \n", + "3 0 0 0 0 0 0 0 \n", + "4 0 0 0 0 0 1 0 \n", + "\n", + "[5 rows x 380 columns]" + ], + "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
almondangelicaaniseanise_seedappleapple_brandyapricotarmagnacartemisiaartichoke...whiskeywhite_breadwhite_winewhole_grain_wheat_flourwinewoodyamyeastyogurtzucchini
00000000000...0000000000
11000000000...0000000000
20000000000...0000000000
30000000000...0000000000
40000000000...0000000010
\n

5 rows × 380 columns

\n
" + }, + "metadata": {}, + "execution_count": 61 + } + ], + "source": [ + "X = data.iloc[:,2:]\n", + "X.head()" + ] + }, + { + "cell_type": "code", + "execution_count": 62, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + " cuisine\n", + "0 indian\n", + "1 indian\n", + "2 indian\n", + "3 indian\n", + "4 indian" + ], + "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
cuisine
0indian
1indian
2indian
3indian
4indian
\n
" + }, + "metadata": {}, + "execution_count": 62 + } + ], + "source": [ + "y = data[['cuisine']]\n", + "y.head()" + ] + }, + { + "cell_type": "code", + "execution_count": 63, + "metadata": {}, + "outputs": [], + "source": [ + "from sklearn.model_selection import train_test_split\n", + "from sklearn.svm import SVC\n", + "from sklearn.model_selection import cross_val_score\n", + "from sklearn.metrics import accuracy_score,precision_score,confusion_matrix,classification_report" + ] + }, + { + "cell_type": "code", + "execution_count": 64, + "metadata": {}, + "outputs": [], + "source": [ + "X_train, X_test, y_train, y_test = train_test_split(X,y,test_size=0.3)" + ] + }, + { + "cell_type": "code", + "execution_count": 65, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "SVC(C=10, kernel='linear', probability=True, random_state=0)" + ] + }, + "metadata": {}, + "execution_count": 65 + } + ], + "source": [ + "model = SVC(kernel='linear', C=10, probability=True,random_state=0)\n", + "model.fit(X_train,y_train.values.ravel())\n" + ] + }, + { + "cell_type": "code", + "execution_count": 66, + "metadata": {}, + "outputs": [], + "source": [ + "y_pred = model.predict(X_test)" + ] + }, + { + "cell_type": "code", + "execution_count": 67, + "metadata": {}, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + " precision recall f1-score support\n\n chinese 0.72 0.70 0.71 236\n indian 0.91 0.88 0.89 243\n japanese 0.80 0.75 0.77 240\n korean 0.80 0.81 0.81 230\n thai 0.76 0.85 0.80 250\n\n accuracy 0.80 1199\n macro avg 0.80 0.80 0.80 1199\nweighted avg 0.80 0.80 0.80 1199\n\n" + ] + } + ], + "source": [ + "print(classification_report(y_test,y_pred))" + ] + }, + { + "cell_type": "code", + "execution_count": 68, + "metadata": {}, + "outputs": [], + "source": [ + "from skl2onnx import convert_sklearn\n", + "from skl2onnx.common.data_types import FloatTensorType\n", + "\n", + "initial_type = [('float_input', FloatTensorType([None, 380]))]\n", + "options = {id(model): {'nocl': True, 'zipmap': False}}\n", + "onx = convert_sklearn(model, initial_types=initial_type, options=options)\n", + "with open(\"./model.onnx\", \"wb\") as f:\n", + " f.write(onx.SerializeToString())\n", + "\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n---\n\n**Aviso Legal**: \nEste documento foi traduzido utilizando o serviço de tradução por IA [Co-op Translator](https://github.com/Azure/co-op-translator). Embora nos esforcemos para garantir a precisão, esteja ciente de que traduções automatizadas podem conter erros ou imprecisões. O documento original em seu idioma nativo deve ser considerado a fonte autoritativa. Para informações críticas, recomenda-se a tradução profissional realizada por humanos. Não nos responsabilizamos por quaisquer mal-entendidos ou interpretações equivocadas decorrentes do uso desta tradução.\n" + ] + } + ] +} \ No newline at end of file diff --git a/translations/pt-BR/4-Classification/README.md b/translations/pt-BR/4-Classification/README.md new file mode 100644 index 000000000..809af1c6d --- /dev/null +++ b/translations/pt-BR/4-Classification/README.md @@ -0,0 +1,32 @@ +# Começando com classificação + +## Tópico regional: Deliciosas culinárias asiáticas e indianas 🍜 + +Na Ásia e na Índia, as tradições culinárias são extremamente diversas e muito deliciosas! Vamos analisar dados sobre culinárias regionais para tentar entender seus ingredientes. + +![Vendedor de comida tailandesa](../../../translated_images/pt-BR/thai-food.c47a7a7f9f05c218.webp) +> Foto por Lisheng Chang no Unsplash + +## O que você vai aprender + +Nesta seção, você irá expandir seus estudos anteriores sobre Regressão e aprender sobre outros classificadores que podem ser usados para entender melhor os dados. + +> Existem ferramentas úteis de baixo código que podem ajudar você a aprender a trabalhar com modelos de classificação. Experimente [Azure ML para esta tarefa](https://docs.microsoft.com/learn/modules/create-classification-model-azure-machine-learning-designer/?WT.mc_id=academic-77952-leestott) + +## Aulas + +1. [Introdução à classificação](1-Introduction/README.md) +2. [Mais classificadores](2-Classifiers-1/README.md) +3. [Outros classificadores](3-Classifiers-2/README.md) +4. [ML aplicado: crie um aplicativo web](4-Applied/README.md) + +## Créditos + +"Começando com classificação" foi escrito com ♥️ por [Cassie Breviu](https://www.twitter.com/cassiebreviu) e [Jen Looper](https://www.twitter.com/jenlooper) + +O conjunto de dados sobre deliciosas culinárias foi obtido de [Kaggle](https://www.kaggle.com/hoandan/asian-and-indian-cuisines). + +--- + +**Aviso Legal**: +Este documento foi traduzido utilizando o serviço de tradução por IA [Co-op Translator](https://github.com/Azure/co-op-translator). Embora nos esforcemos para garantir a precisão, esteja ciente de que traduções automatizadas podem conter erros ou imprecisões. O documento original em seu idioma nativo deve ser considerado a fonte autoritativa. Para informações críticas, recomenda-se a tradução profissional realizada por humanos. Não nos responsabilizamos por quaisquer mal-entendidos ou interpretações equivocadas decorrentes do uso desta tradução. \ No newline at end of file diff --git a/translations/pt-BR/5-Clustering/1-Visualize/README.md b/translations/pt-BR/5-Clustering/1-Visualize/README.md new file mode 100644 index 000000000..08d45f9f3 --- /dev/null +++ b/translations/pt-BR/5-Clustering/1-Visualize/README.md @@ -0,0 +1,338 @@ +# Introdução à clusterização + +Clusterização é um tipo de [Aprendizado Não Supervisionado](https://wikipedia.org/wiki/Aprendizado_n%C3%A3o_supervisionado) que parte do pressuposto de que um conjunto de dados não está rotulado ou que suas entradas não estão associadas a saídas predefinidas. Ele utiliza diversos algoritmos para analisar dados não rotulados e fornecer agrupamentos com base nos padrões identificados nos dados. + +[![No One Like You por PSquare](https://img.youtube.com/vi/ty2advRiWJM/0.jpg)](https://youtu.be/ty2advRiWJM "No One Like You por PSquare") + +> 🎥 Clique na imagem acima para assistir ao vídeo. Enquanto estuda aprendizado de máquina com clusterização, aproveite algumas faixas de Dance Hall nigeriano - esta é uma música muito bem avaliada de 2014 por PSquare. + +## [Quiz pré-aula](https://ff-quizzes.netlify.app/en/ml/) + +### Introdução + +[Clusterização](https://link.springer.com/referenceworkentry/10.1007%2F978-0-387-30164-8_124) é muito útil para exploração de dados. Vamos ver se ela pode ajudar a descobrir tendências e padrões no modo como o público nigeriano consome música. + +✅ Reserve um minuto para pensar sobre os usos da clusterização. Na vida real, clusterização acontece sempre que você tem uma pilha de roupas e precisa separar as peças de cada membro da família 🧦👕👖🩲. Em ciência de dados, clusterização ocorre ao tentar analisar as preferências de um usuário ou determinar as características de qualquer conjunto de dados não rotulado. De certa forma, clusterização ajuda a dar sentido ao caos, como uma gaveta de meias. + +[![Introdução ao ML](https://img.youtube.com/vi/esmzYhuFnds/0.jpg)](https://youtu.be/esmzYhuFnds "Introdução à Clusterização") + +> 🎥 Clique na imagem acima para assistir ao vídeo: John Guttag do MIT apresenta clusterização. + +No ambiente profissional, clusterização pode ser usada para determinar coisas como segmentação de mercado, identificando quais faixas etárias compram quais itens, por exemplo. Outro uso seria a detecção de anomalias, talvez para identificar fraudes em um conjunto de dados de transações com cartão de crédito. Ou você pode usar clusterização para identificar tumores em um lote de exames médicos. + +✅ Pense por um minuto sobre como você pode ter encontrado clusterização 'na prática', em um ambiente bancário, de e-commerce ou de negócios. + +> 🎓 Curiosamente, a análise de clusters teve origem nos campos de Antropologia e Psicologia na década de 1930. Consegue imaginar como ela pode ter sido usada? + +Alternativamente, você poderia usá-la para agrupar resultados de busca - por links de compras, imagens ou avaliações, por exemplo. Clusterização é útil quando você tem um grande conjunto de dados que deseja reduzir e sobre o qual quer realizar uma análise mais detalhada. Assim, a técnica pode ser usada para aprender sobre os dados antes de construir outros modelos. + +✅ Uma vez que seus dados estejam organizados em clusters, você pode atribuir a eles um Id de cluster. Essa técnica pode ser útil para preservar a privacidade de um conjunto de dados; você pode se referir a um ponto de dados pelo seu Id de cluster, em vez de usar dados identificáveis mais reveladores. Consegue pensar em outros motivos para usar um Id de cluster em vez de outros elementos do cluster para identificá-lo? + +Aprofunde seu entendimento sobre técnicas de clusterização neste [módulo de aprendizado](https://docs.microsoft.com/learn/modules/train-evaluate-cluster-models?WT.mc_id=academic-77952-leestott). + +## Começando com clusterização + +[Scikit-learn oferece uma ampla variedade](https://scikit-learn.org/stable/modules/clustering.html) de métodos para realizar clusterização. O tipo que você escolher dependerá do seu caso de uso. De acordo com a documentação, cada método tem diferentes benefícios. Aqui está uma tabela simplificada dos métodos suportados pelo Scikit-learn e seus casos de uso apropriados: + +| Nome do método | Caso de uso | +| :---------------------------- | :-------------------------------------------------------------------- | +| K-Means | propósito geral, indutivo | +| Propagação de afinidade | muitos clusters desiguais, indutivo | +| Mean-shift | muitos clusters desiguais, indutivo | +| Clusterização espectral | poucos clusters iguais, transdutivo | +| Clusterização hierárquica Ward| muitos clusters restritos, transdutivo | +| Clusterização aglomerativa | muitos clusters restritos, distâncias não euclidianas, transdutivo | +| DBSCAN | geometria não plana, clusters desiguais, transdutivo | +| OPTICS | geometria não plana, clusters desiguais com densidade variável, transdutivo | +| Misturas Gaussianas | geometria plana, indutivo | +| BIRCH | grande conjunto de dados com outliers, indutivo | + +> 🎓 Como criamos clusters tem muito a ver com como agrupamos os pontos de dados. Vamos explorar alguns vocabulários: +> +> 🎓 ['Transdutivo' vs. 'indutivo'](https://wikipedia.org/wiki/Transduction_(machine_learning)) +> +> Inferência transdutiva é derivada de casos de treinamento observados que mapeiam para casos de teste específicos. Inferência indutiva é derivada de casos de treinamento que mapeiam para regras gerais que só então são aplicadas aos casos de teste. +> +> Um exemplo: Imagine que você tem um conjunto de dados parcialmente rotulado. Alguns itens são 'discos', outros 'CDs', e alguns estão em branco. Sua tarefa é fornecer rótulos para os itens em branco. Se você escolher uma abordagem indutiva, treinaria um modelo procurando por 'discos' e 'CDs' e aplicaria esses rótulos aos dados não rotulados. Essa abordagem teria dificuldade em classificar itens que na verdade são 'fitas cassete'. Uma abordagem transdutiva, por outro lado, lida com esses dados desconhecidos de forma mais eficaz, agrupando itens semelhantes e aplicando um rótulo ao grupo. Nesse caso, os clusters poderiam refletir 'coisas musicais redondas' e 'coisas musicais quadradas'. +> +> 🎓 ['Geometria não plana' vs. 'plana'](https://datascience.stackexchange.com/questions/52260/terminology-flat-geometry-in-the-context-of-clustering) +> +> Derivado da terminologia matemática, geometria não plana vs. plana refere-se à medida de distâncias entre pontos por métodos geométricos 'planos' ([Euclidianos](https://wikipedia.org/wiki/Geometria_euclidiana)) ou 'não planos' (não Euclidianos). +> +>'Plana' neste contexto refere-se à geometria Euclidiana (partes da qual são ensinadas como 'geometria plana'), e 'não plana' refere-se à geometria não Euclidiana. O que a geometria tem a ver com aprendizado de máquina? Bem, como dois campos enraizados na matemática, deve haver uma maneira comum de medir distâncias entre pontos em clusters, e isso pode ser feito de forma 'plana' ou 'não plana', dependendo da natureza dos dados. [Distâncias Euclidianas](https://wikipedia.org/wiki/Dist%C3%A2ncia_euclidiana) são medidas como o comprimento de um segmento de linha entre dois pontos. [Distâncias não Euclidianas](https://wikipedia.org/wiki/Geometria_n%C3%A3o_euclidiana) são medidas ao longo de uma curva. Se seus dados, visualizados, parecem não existir em um plano, você pode precisar usar um algoritmo especializado para lidar com eles. +> +![Infográfico Geometria Plana vs Não Plana](../../../../5-Clustering/1-Visualize/images/flat-nonflat.png) +> Infográfico por [Dasani Madipalli](https://twitter.com/dasani_decoded) +> +> 🎓 ['Distâncias'](https://web.stanford.edu/class/cs345a/slides/12-clustering.pdf) +> +> Clusters são definidos por sua matriz de distâncias, ou seja, as distâncias entre pontos. Essa distância pode ser medida de algumas maneiras. Clusters Euclidianos são definidos pela média dos valores dos pontos e contêm um 'centroide' ou ponto central. As distâncias são medidas pela distância até esse centroide. Distâncias não Euclidianas referem-se a 'clustroids', o ponto mais próximo de outros pontos. Clustroids, por sua vez, podem ser definidos de várias maneiras. +> +> 🎓 ['Restrito'](https://wikipedia.org/wiki/Constrained_clustering) +> +> [Clusterização Restrita](https://web.cs.ucdavis.edu/~davidson/Publications/ICDMTutorial.pdf) introduz aprendizado 'semi-supervisionado' neste método não supervisionado. As relações entre pontos são marcadas como 'não pode vincular' ou 'deve vincular', então algumas regras são impostas ao conjunto de dados. +> +>Um exemplo: Se um algoritmo é liberado em um lote de dados não rotulados ou semi-rotulados, os clusters que ele produz podem ser de baixa qualidade. No exemplo acima, os clusters podem agrupar 'coisas musicais redondas', 'coisas musicais quadradas', 'coisas triangulares' e 'biscoitos'. Se forem dadas algumas restrições ou regras para seguir ("o item deve ser feito de plástico", "o item precisa ser capaz de produzir música"), isso pode ajudar a 'restringir' o algoritmo a fazer escolhas melhores. +> +> 🎓 'Densidade' +> +> Dados que são 'ruidosos' são considerados 'densos'. As distâncias entre pontos em cada um de seus clusters podem, ao serem examinadas, ser mais ou menos densas, ou 'aglomeradas', e assim esses dados precisam ser analisados com o método de clusterização apropriado. [Este artigo](https://www.kdnuggets.com/2020/02/understanding-density-based-clustering.html) demonstra a diferença entre usar clusterização K-Means vs. algoritmos HDBSCAN para explorar um conjunto de dados ruidoso com densidade de cluster desigual. + +## Algoritmos de clusterização + +Existem mais de 100 algoritmos de clusterização, e seu uso depende da natureza dos dados em questão. Vamos discutir alguns dos principais: + +- **Clusterização hierárquica**. Se um objeto é classificado por sua proximidade a um objeto próximo, em vez de um mais distante, os clusters são formados com base na distância de seus membros para outros objetos. A clusterização aglomerativa do Scikit-learn é hierárquica. + + ![Infográfico Clusterização Hierárquica](../../../../5-Clustering/1-Visualize/images/hierarchical.png) + > Infográfico por [Dasani Madipalli](https://twitter.com/dasani_decoded) + +- **Clusterização por centroide**. Este algoritmo popular requer a escolha de 'k', ou o número de clusters a serem formados, após o qual o algoritmo determina o ponto central de um cluster e reúne dados ao redor desse ponto. [Clusterização K-means](https://wikipedia.org/wiki/K-means_clustering) é uma versão popular de clusterização por centroide. O centro é determinado pela média mais próxima, daí o nome. A distância quadrada do cluster é minimizada. + + ![Infográfico Clusterização por Centroide](../../../../5-Clustering/1-Visualize/images/centroid.png) + > Infográfico por [Dasani Madipalli](https://twitter.com/dasani_decoded) + +- **Clusterização baseada em distribuição**. Baseada em modelagem estatística, a clusterização baseada em distribuição foca em determinar a probabilidade de um ponto de dados pertencer a um cluster e atribuí-lo de acordo. Métodos de mistura Gaussianas pertencem a este tipo. + +- **Clusterização baseada em densidade**. Pontos de dados são atribuídos a clusters com base em sua densidade, ou seu agrupamento ao redor uns dos outros. Pontos de dados distantes do grupo são considerados outliers ou ruídos. DBSCAN, Mean-shift e OPTICS pertencem a este tipo de clusterização. + +- **Clusterização baseada em grade**. Para conjuntos de dados multidimensionais, uma grade é criada e os dados são divididos entre as células da grade, criando assim clusters. + +## Exercício - agrupe seus dados + +Clusterização como técnica é muito auxiliada por uma boa visualização, então vamos começar visualizando nossos dados musicais. Este exercício nos ajudará a decidir qual dos métodos de clusterização devemos usar de forma mais eficaz para a natureza desses dados. + +1. Abra o arquivo [_notebook.ipynb_](https://github.com/microsoft/ML-For-Beginners/blob/main/5-Clustering/1-Visualize/notebook.ipynb) nesta pasta. + +1. Importe o pacote `Seaborn` para uma boa visualização de dados. + + ```python + !pip install seaborn + ``` + +1. Adicione os dados das músicas do arquivo [_nigerian-songs.csv_](https://github.com/microsoft/ML-For-Beginners/blob/main/5-Clustering/data/nigerian-songs.csv). Carregue um dataframe com alguns dados sobre as músicas. Prepare-se para explorar esses dados importando as bibliotecas e exibindo os dados: + + ```python + import matplotlib.pyplot as plt + import pandas as pd + + df = pd.read_csv("../data/nigerian-songs.csv") + df.head() + ``` + + Verifique as primeiras linhas de dados: + + | | nome | álbum | artista | gênero_principal_artista | data_lançamento | duração | popularidade | dançabilidade | acústica | energia | instrumentalidade | vivacidade | volume | discurso | tempo | assinatura_tempo | + | --- | ------------------------ | ---------------------------- | ------------------- | ------------------------ | ---------------- | ------- | ------------ | ------------- | -------- | ------- | ----------------- | ---------- | ------ | -------- | ------- | ---------------- | + | 0 | Sparky | Mandy & The Jungle | Cruel Santino | r&b alternativo | 2019 | 144000 | 48 | 0.666 | 0.851 | 0.42 | 0.534 | 0.11 | -6.699 | 0.0829 | 133.015 | 5 | + | 1 | shuga rush | EVERYTHING YOU HEARD IS TRUE | Odunsi (The Engine) | afropop | 2020 | 89488 | 30 | 0.71 | 0.0822 | 0.683 | 0.000169 | 0.101 | -5.64 | 0.36 | 129.993 | 3 | +| 2 | LITT! | LITT! | AYLØ | indie r&b | 2018 | 207758 | 40 | 0.836 | 0.272 | 0.564 | 0.000537 | 0.11 | -7.127 | 0.0424 | 130.005 | 4 | +| 3 | Confident / Feeling Cool | Enjoy Your Life | Lady Donli | nigerian pop | 2019 | 175135 | 14 | 0.894 | 0.798 | 0.611 | 0.000187 | 0.0964 | -4.961 | 0.113 | 111.087 | 4 | +| 4 | wanted you | rare. | Odunsi (The Engine) | afropop | 2018 | 152049 | 25 | 0.702 | 0.116 | 0.833 | 0.91 | 0.348 | -6.044 | 0.0447 | 105.115 | 4 | + +1. Obtenha algumas informações sobre o dataframe, chamando `info()`: + + ```python + df.info() + ``` + + A saída será semelhante a: + + ```output + + RangeIndex: 530 entries, 0 to 529 + Data columns (total 16 columns): + # Column Non-Null Count Dtype + --- ------ -------------- ----- + 0 name 530 non-null object + 1 album 530 non-null object + 2 artist 530 non-null object + 3 artist_top_genre 530 non-null object + 4 release_date 530 non-null int64 + 5 length 530 non-null int64 + 6 popularity 530 non-null int64 + 7 danceability 530 non-null float64 + 8 acousticness 530 non-null float64 + 9 energy 530 non-null float64 + 10 instrumentalness 530 non-null float64 + 11 liveness 530 non-null float64 + 12 loudness 530 non-null float64 + 13 speechiness 530 non-null float64 + 14 tempo 530 non-null float64 + 15 time_signature 530 non-null int64 + dtypes: float64(8), int64(4), object(4) + memory usage: 66.4+ KB + ``` + +1. Verifique novamente se há valores nulos, chamando `isnull()` e verificando se a soma é 0: + + ```python + df.isnull().sum() + ``` + + Tudo certo: + + ```output + name 0 + album 0 + artist 0 + artist_top_genre 0 + release_date 0 + length 0 + popularity 0 + danceability 0 + acousticness 0 + energy 0 + instrumentalness 0 + liveness 0 + loudness 0 + speechiness 0 + tempo 0 + time_signature 0 + dtype: int64 + ``` + +1. Descreva os dados: + + ```python + df.describe() + ``` + + | | release_date | length | popularity | danceability | acousticness | energy | instrumentalness | liveness | loudness | speechiness | tempo | time_signature | + | ----- | ------------ | ----------- | ---------- | ------------ | ------------ | -------- | ---------------- | -------- | --------- | ----------- | ---------- | -------------- | + | count | 530 | 530 | 530 | 530 | 530 | 530 | 530 | 530 | 530 | 530 | 530 | 530 | + | mean | 2015.390566 | 222298.1698 | 17.507547 | 0.741619 | 0.265412 | 0.760623 | 0.016305 | 0.147308 | -4.953011 | 0.130748 | 116.487864 | 3.986792 | + | std | 3.131688 | 39696.82226 | 18.992212 | 0.117522 | 0.208342 | 0.148533 | 0.090321 | 0.123588 | 2.464186 | 0.092939 | 23.518601 | 0.333701 | + | min | 1998 | 89488 | 0 | 0.255 | 0.000665 | 0.111 | 0 | 0.0283 | -19.362 | 0.0278 | 61.695 | 3 | + | 25% | 2014 | 199305 | 0 | 0.681 | 0.089525 | 0.669 | 0 | 0.07565 | -6.29875 | 0.0591 | 102.96125 | 4 | + | 50% | 2016 | 218509 | 13 | 0.761 | 0.2205 | 0.7845 | 0.000004 | 0.1035 | -4.5585 | 0.09795 | 112.7145 | 4 | + | 75% | 2017 | 242098.5 | 31 | 0.8295 | 0.403 | 0.87575 | 0.000234 | 0.164 | -3.331 | 0.177 | 125.03925 | 4 | + | max | 2020 | 511738 | 73 | 0.966 | 0.954 | 0.995 | 0.91 | 0.811 | 0.582 | 0.514 | 206.007 | 5 | + +> 🤔 Se estamos trabalhando com clustering, um método não supervisionado que não requer dados rotulados, por que estamos mostrando esses dados com rótulos? Na fase de exploração de dados, eles são úteis, mas não são necessários para os algoritmos de clustering funcionarem. Você poderia simplesmente remover os cabeçalhos das colunas e se referir aos dados pelo número da coluna. + +Observe os valores gerais dos dados. Note que a popularidade pode ser '0', o que indica músicas que não têm classificação. Vamos remover esses valores em breve. + +1. Use um gráfico de barras para descobrir os gêneros mais populares: + + ```python + import seaborn as sns + + top = df['artist_top_genre'].value_counts() + plt.figure(figsize=(10,7)) + sns.barplot(x=top[:5].index,y=top[:5].values) + plt.xticks(rotation=45) + plt.title('Top genres',color = 'blue') + ``` + + ![most popular](../../../../5-Clustering/1-Visualize/images/popular.png) + +✅ Se você quiser ver mais valores principais, altere o top `[:5]` para um valor maior ou remova-o para ver todos. + +Note que, quando o gênero principal é descrito como 'Missing', isso significa que o Spotify não o classificou, então vamos eliminá-lo. + +1. Elimine os dados ausentes filtrando-os: + + ```python + df = df[df['artist_top_genre'] != 'Missing'] + top = df['artist_top_genre'].value_counts() + plt.figure(figsize=(10,7)) + sns.barplot(x=top.index,y=top.values) + plt.xticks(rotation=45) + plt.title('Top genres',color = 'blue') + ``` + + Agora verifique novamente os gêneros: + + ![most popular](../../../../5-Clustering/1-Visualize/images/all-genres.png) + +1. De longe, os três principais gêneros dominam este conjunto de dados. Vamos nos concentrar em `afro dancehall`, `afropop` e `nigerian pop`, além de filtrar o conjunto de dados para remover qualquer coisa com valor de popularidade 0 (o que significa que não foi classificado com uma popularidade no conjunto de dados e pode ser considerado ruído para nossos propósitos): + + ```python + df = df[(df['artist_top_genre'] == 'afro dancehall') | (df['artist_top_genre'] == 'afropop') | (df['artist_top_genre'] == 'nigerian pop')] + df = df[(df['popularity'] > 0)] + top = df['artist_top_genre'].value_counts() + plt.figure(figsize=(10,7)) + sns.barplot(x=top.index,y=top.values) + plt.xticks(rotation=45) + plt.title('Top genres',color = 'blue') + ``` + +1. Faça um teste rápido para ver se os dados têm alguma correlação particularmente forte: + + ```python + corrmat = df.corr(numeric_only=True) + f, ax = plt.subplots(figsize=(12, 9)) + sns.heatmap(corrmat, vmax=.8, square=True) + ``` + + ![correlations](../../../../5-Clustering/1-Visualize/images/correlation.png) + + A única correlação forte é entre `energy` e `loudness`, o que não é muito surpreendente, dado que músicas altas geralmente são bastante energéticas. Fora isso, as correlações são relativamente fracas. Será interessante ver o que um algoritmo de clustering pode fazer com esses dados. + + > 🎓 Note que correlação não implica causalidade! Temos prova de correlação, mas nenhuma prova de causalidade. Um [site divertido](https://tylervigen.com/spurious-correlations) tem alguns visuais que enfatizam esse ponto. + +Há alguma convergência neste conjunto de dados em torno da popularidade percebida de uma música e sua capacidade de dança? Um FacetGrid mostra que há círculos concêntricos que se alinham, independentemente do gênero. Será que os gostos nigerianos convergem em um certo nível de capacidade de dança para este gênero? + +✅ Experimente diferentes pontos de dados (energia, loudness, speechiness) e mais ou diferentes gêneros musicais. O que você pode descobrir? Dê uma olhada na tabela `df.describe()` para ver a distribuição geral dos pontos de dados. + +### Exercício - distribuição de dados + +Esses três gêneros são significativamente diferentes na percepção de sua capacidade de dança, com base em sua popularidade? + +1. Examine a distribuição de dados dos nossos três principais gêneros para popularidade e capacidade de dança ao longo de um eixo x e y dado. + + ```python + sns.set_theme(style="ticks") + + g = sns.jointplot( + data=df, + x="popularity", y="danceability", hue="artist_top_genre", + kind="kde", + ) + ``` + + Você pode descobrir círculos concêntricos em torno de um ponto geral de convergência, mostrando a distribuição dos pontos. + + > 🎓 Note que este exemplo usa um gráfico KDE (Kernel Density Estimate) que representa os dados usando uma curva de densidade de probabilidade contínua. Isso nos permite interpretar os dados ao trabalhar com múltiplas distribuições. + + Em geral, os três gêneros se alinham vagamente em termos de sua popularidade e capacidade de dança. Determinar clusters nesses dados vagamente alinhados será um desafio: + + ![distribution](../../../../5-Clustering/1-Visualize/images/distribution.png) + +1. Crie um gráfico de dispersão: + + ```python + sns.FacetGrid(df, hue="artist_top_genre", height=5) \ + .map(plt.scatter, "popularity", "danceability") \ + .add_legend() + ``` + + Um gráfico de dispersão dos mesmos eixos mostra um padrão semelhante de convergência. + + ![Facetgrid](../../../../5-Clustering/1-Visualize/images/facetgrid.png) + +Em geral, para clustering, você pode usar gráficos de dispersão para mostrar clusters de dados, então dominar esse tipo de visualização é muito útil. Na próxima lição, usaremos esses dados filtrados e aplicaremos o clustering k-means para descobrir grupos nesses dados que parecem se sobrepor de maneiras interessantes. + +--- + +## 🚀Desafio + +Em preparação para a próxima lição, faça um gráfico sobre os vários algoritmos de clustering que você pode descobrir e usar em um ambiente de produção. Que tipos de problemas o clustering está tentando resolver? + +## [Quiz pós-aula](https://ff-quizzes.netlify.app/en/ml/) + +## Revisão e Autoestudo + +Antes de aplicar algoritmos de clustering, como aprendemos, é uma boa ideia entender a natureza do seu conjunto de dados. Leia mais sobre este tópico [aqui](https://www.kdnuggets.com/2019/10/right-clustering-algorithm.html) + +[Este artigo útil](https://www.freecodecamp.org/news/8-clustering-algorithms-in-machine-learning-that-all-data-scientists-should-know/) explica as diferentes maneiras como vários algoritmos de clustering se comportam, dados diferentes formatos de dados. + +## Tarefa + +[Pesquise outras visualizações para clustering](assignment.md) + +--- + +**Aviso Legal**: +Este documento foi traduzido utilizando o serviço de tradução por IA [Co-op Translator](https://github.com/Azure/co-op-translator). Embora nos esforcemos para garantir a precisão, esteja ciente de que traduções automatizadas podem conter erros ou imprecisões. O documento original em seu idioma nativo deve ser considerado a fonte autoritativa. Para informações críticas, recomenda-se a tradução profissional realizada por humanos. Não nos responsabilizamos por quaisquer mal-entendidos ou interpretações equivocadas decorrentes do uso desta tradução. \ No newline at end of file diff --git a/translations/pt-BR/5-Clustering/1-Visualize/assignment.md b/translations/pt-BR/5-Clustering/1-Visualize/assignment.md new file mode 100644 index 000000000..778990a7d --- /dev/null +++ b/translations/pt-BR/5-Clustering/1-Visualize/assignment.md @@ -0,0 +1,16 @@ +# Pesquise outras visualizações para agrupamento + +## Instruções + +Nesta lição, você trabalhou com algumas técnicas de visualização para entender como plotar seus dados em preparação para agrupá-los. Os gráficos de dispersão, em particular, são úteis para encontrar grupos de objetos. Pesquise diferentes maneiras e bibliotecas para criar gráficos de dispersão e documente seu trabalho em um notebook. Você pode usar os dados desta lição, de outras lições ou dados que você mesmo encontrar (por favor, credite a fonte, no entanto, em seu notebook). Plote alguns dados usando gráficos de dispersão e explique o que você descobriu. + +## Rubrica + +| Critério | Exemplar | Adequado | Precisa Melhorar | +| -------- | ------------------------------------------------------------- | ---------------------------------------------------------------------------------------- | ----------------------------------- | +| | Um notebook é apresentado com cinco gráficos de dispersão bem documentados | Um notebook é apresentado com menos de cinco gráficos de dispersão e é menos bem documentado | Um notebook incompleto é apresentado | + +--- + +**Aviso Legal**: +Este documento foi traduzido utilizando o serviço de tradução por IA [Co-op Translator](https://github.com/Azure/co-op-translator). Embora nos esforcemos para garantir a precisão, esteja ciente de que traduções automatizadas podem conter erros ou imprecisões. O documento original em seu idioma nativo deve ser considerado a fonte autoritativa. Para informações críticas, recomenda-se a tradução profissional realizada por humanos. Não nos responsabilizamos por quaisquer mal-entendidos ou interpretações equivocadas decorrentes do uso desta tradução. \ No newline at end of file diff --git a/translations/pt-BR/5-Clustering/1-Visualize/notebook.ipynb b/translations/pt-BR/5-Clustering/1-Visualize/notebook.ipynb new file mode 100644 index 000000000..b22e8827c --- /dev/null +++ b/translations/pt-BR/5-Clustering/1-Visualize/notebook.ipynb @@ -0,0 +1,50 @@ +{ + "metadata": { + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.8.3" + }, + "orig_nbformat": 2, + "kernelspec": { + "name": "python383jvsc74a57bd0e134e05457d34029b6460cd73bbf1ed73f339b5b6d98c95be70b69eba114fe95", + "display_name": "Python 3.8.3 64-bit (conda)" + }, + "coopTranslator": { + "original_hash": "40e0707e96b3e1899a912776006264f9", + "translation_date": "2025-08-29T23:25:24+00:00", + "source_file": "5-Clustering/1-Visualize/notebook.ipynb", + "language_code": "br" + } + }, + "nbformat": 4, + "nbformat_minor": 2, + "cells": [ + { + "source": [], + "cell_type": "markdown", + "metadata": {} + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n---\n\n**Aviso Legal**: \nEste documento foi traduzido utilizando o serviço de tradução por IA [Co-op Translator](https://github.com/Azure/co-op-translator). Embora nos esforcemos para garantir a precisão, esteja ciente de que traduções automatizadas podem conter erros ou imprecisões. O documento original em seu idioma nativo deve ser considerado a fonte autoritativa. Para informações críticas, recomenda-se a tradução profissional realizada por humanos. Não nos responsabilizamos por quaisquer mal-entendidos ou interpretações equivocadas decorrentes do uso desta tradução.\n" + ] + } + ] +} \ No newline at end of file diff --git a/translations/pt-BR/5-Clustering/1-Visualize/solution/Julia/README.md b/translations/pt-BR/5-Clustering/1-Visualize/solution/Julia/README.md new file mode 100644 index 000000000..c58234bae --- /dev/null +++ b/translations/pt-BR/5-Clustering/1-Visualize/solution/Julia/README.md @@ -0,0 +1,6 @@ + + +--- + +**Aviso Legal**: +Este documento foi traduzido utilizando o serviço de tradução por IA [Co-op Translator](https://github.com/Azure/co-op-translator). Embora nos esforcemos para garantir a precisão, esteja ciente de que traduções automatizadas podem conter erros ou imprecisões. O documento original em seu idioma nativo deve ser considerado a fonte autoritativa. Para informações críticas, recomenda-se a tradução profissional realizada por humanos. Não nos responsabilizamos por quaisquer mal-entendidos ou interpretações equivocadas decorrentes do uso desta tradução. \ No newline at end of file diff --git a/translations/pt-BR/5-Clustering/1-Visualize/solution/R/lesson_14-R.ipynb b/translations/pt-BR/5-Clustering/1-Visualize/solution/R/lesson_14-R.ipynb new file mode 100644 index 000000000..8796db237 --- /dev/null +++ b/translations/pt-BR/5-Clustering/1-Visualize/solution/R/lesson_14-R.ipynb @@ -0,0 +1,499 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "source": [ + "## **Música Nigeriana extraída do Spotify - uma análise**\n", + "\n", + "Clustering é um tipo de [Aprendizado Não Supervisionado](https://wikipedia.org/wiki/Aprendizado_n%C3%A3o_supervisionado) que presume que um conjunto de dados não possui rótulos ou que suas entradas não estão associadas a saídas predefinidas. Ele utiliza vários algoritmos para organizar dados não rotulados e fornecer agrupamentos com base em padrões identificados nos dados.\n", + "\n", + "[**Questionário pré-aula**](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/27/)\n", + "\n", + "### **Introdução**\n", + "\n", + "[Clustering](https://link.springer.com/referenceworkentry/10.1007%2F978-0-387-30164-8_124) é muito útil para a exploração de dados. Vamos ver se ele pode ajudar a descobrir tendências e padrões no modo como o público nigeriano consome música.\n", + "\n", + "> ✅ Reserve um minuto para pensar sobre os usos do clustering. Na vida real, o clustering acontece sempre que você tem uma pilha de roupas para lavar e precisa separar as peças de cada membro da família 🧦👕👖🩲. Na ciência de dados, o clustering ocorre ao tentar analisar as preferências de um usuário ou determinar as características de um conjunto de dados não rotulado. O clustering, de certa forma, ajuda a dar sentido ao caos, como organizar uma gaveta de meias.\n", + "\n", + "Em um ambiente profissional, o clustering pode ser usado para determinar coisas como segmentação de mercado, identificando, por exemplo, quais faixas etárias compram determinados itens. Outro uso seria a detecção de anomalias, talvez para identificar fraudes em um conjunto de dados de transações com cartão de crédito. Ou você poderia usar o clustering para identificar tumores em um lote de exames médicos.\n", + "\n", + "✅ Pense por um minuto sobre como você já encontrou clustering \"no mundo real\", em um banco, e-commerce ou ambiente de negócios.\n", + "\n", + "> 🎓 Curiosamente, a análise de clusters teve origem nos campos da Antropologia e Psicologia na década de 1930. Você consegue imaginar como ela pode ter sido usada?\n", + "\n", + "Alternativamente, você poderia usá-lo para agrupar resultados de busca - por links de compras, imagens ou avaliações, por exemplo. O clustering é útil quando você tem um grande conjunto de dados que deseja reduzir e no qual deseja realizar uma análise mais detalhada. Assim, a técnica pode ser usada para aprender sobre os dados antes de construir outros modelos.\n", + "\n", + "✅ Depois que seus dados são organizados em clusters, você atribui a eles um Id de cluster. Essa técnica pode ser útil para preservar a privacidade de um conjunto de dados; você pode se referir a um ponto de dados pelo Id do cluster, em vez de usar dados identificáveis mais reveladores. Consegue pensar em outros motivos para usar um Id de cluster em vez de outros elementos do cluster para identificá-lo?\n", + "\n", + "### Começando com clustering\n", + "\n", + "> 🎓 A forma como criamos clusters tem muito a ver com a maneira como agrupamos os pontos de dados. Vamos explorar alguns conceitos:\n", + ">\n", + "> 🎓 ['Transdutivo' vs. 'indutivo'](https://wikipedia.org/wiki/Transduction_(machine_learning))\n", + ">\n", + "> A inferência transdutiva é derivada de casos de treinamento observados que mapeiam para casos de teste específicos. A inferência indutiva é derivada de casos de treinamento que mapeiam para regras gerais, que só então são aplicadas aos casos de teste.\n", + ">\n", + "> Um exemplo: Imagine que você tem um conjunto de dados parcialmente rotulado. Alguns itens são 'discos', outros 'CDs' e alguns estão em branco. Sua tarefa é fornecer rótulos para os itens em branco. Se você escolher uma abordagem indutiva, treinaria um modelo procurando por 'discos' e 'CDs' e aplicaria esses rótulos aos dados não rotulados. Essa abordagem teria dificuldade em classificar itens que na verdade são 'fitas cassete'. Uma abordagem transdutiva, por outro lado, lida com esses dados desconhecidos de forma mais eficaz, agrupando itens semelhantes e, em seguida, aplicando um rótulo ao grupo. Nesse caso, os clusters poderiam refletir 'coisas musicais redondas' e 'coisas musicais quadradas'.\n", + ">\n", + "> 🎓 ['Geometria não plana' vs. 'plana'](https://datascience.stackexchange.com/questions/52260/terminology-flat-geometry-in-the-context-of-clustering)\n", + ">\n", + "> Derivado da terminologia matemática, geometria não plana vs. plana refere-se à medição de distâncias entre pontos por métodos geométricos 'planos' ([Euclidianos](https://wikipedia.org/wiki/Geometria_euclidiana)) ou 'não planos' (não Euclidianos).\n", + ">\n", + "> 'Plana', neste contexto, refere-se à geometria Euclidiana (partes da qual são ensinadas como geometria 'plana'), enquanto 'não plana' refere-se à geometria não Euclidiana. O que a geometria tem a ver com aprendizado de máquina? Bem, como ambos os campos têm raízes na matemática, deve haver uma maneira comum de medir distâncias entre pontos em clusters, e isso pode ser feito de forma 'plana' ou 'não plana', dependendo da natureza dos dados. [Distâncias Euclidianas](https://wikipedia.org/wiki/Dist%C3%A2ncia_euclidiana) são medidas como o comprimento de um segmento de linha entre dois pontos. [Distâncias não Euclidianas](https://wikipedia.org/wiki/Geometria_n%C3%A3o_euclidiana) são medidas ao longo de uma curva. Se seus dados, quando visualizados, parecem não existir em um plano, você pode precisar usar um algoritmo especializado para lidar com eles.\n", + "\n", + "

\n", + " \n", + "

Infográfico por Dasani Madipalli
\n", + "\n", + "\n", + "\n", + "> 🎓 ['Distâncias'](https://web.stanford.edu/class/cs345a/slides/12-clustering.pdf)\n", + ">\n", + "> Clusters são definidos por sua matriz de distâncias, ou seja, as distâncias entre pontos. Essa distância pode ser medida de algumas maneiras. Clusters Euclidianos são definidos pela média dos valores dos pontos e contêm um 'centróide' ou ponto central. As distâncias são, portanto, medidas pela distância até esse centróide. Distâncias não Euclidianas referem-se a 'clustroids', o ponto mais próximo de outros pontos. Clustroids, por sua vez, podem ser definidos de várias maneiras.\n", + ">\n", + "> 🎓 ['Com restrições'](https://wikipedia.org/wiki/Constrained_clustering)\n", + ">\n", + "> [Clustering com restrições](https://web.cs.ucdavis.edu/~davidson/Publications/ICDMTutorial.pdf) introduz aprendizado 'semi-supervisionado' neste método não supervisionado. As relações entre pontos são marcadas como 'não pode vincular' ou 'deve vincular', de modo que algumas regras são impostas ao conjunto de dados.\n", + ">\n", + "> Um exemplo: Se um algoritmo é liberado em um lote de dados não rotulados ou semi-rotulados, os clusters que ele produz podem ser de baixa qualidade. No exemplo acima, os clusters podem agrupar 'coisas musicais redondas', 'coisas musicais quadradas', 'coisas triangulares' e 'biscoitos'. Se forem dadas algumas restrições ou regras a serem seguidas (\"o item deve ser feito de plástico\", \"o item precisa ser capaz de produzir música\"), isso pode ajudar a 'restringir' o algoritmo para fazer escolhas melhores.\n", + ">\n", + "> 🎓 'Densidade'\n", + ">\n", + "> Dados que são 'ruidosos' são considerados 'densos'. As distâncias entre pontos em cada um de seus clusters podem, ao serem examinadas, ser mais ou menos densas, ou 'aglomeradas', e, portanto, esses dados precisam ser analisados com o método de clustering apropriado. [Este artigo](https://www.kdnuggets.com/2020/02/understanding-density-based-clustering.html) demonstra a diferença entre usar clustering K-Means e algoritmos HDBSCAN para explorar um conjunto de dados ruidoso com densidade de cluster desigual.\n", + "\n", + "Aprofunde seu entendimento sobre técnicas de clustering neste [módulo de aprendizado](https://docs.microsoft.com/learn/modules/train-evaluate-cluster-models?WT.mc_id=academic-77952-leestott)\n", + "\n", + "### **Algoritmos de clustering**\n", + "\n", + "Existem mais de 100 algoritmos de clustering, e seu uso depende da natureza dos dados em questão. Vamos discutir alguns dos principais:\n", + "\n", + "- **Clustering hierárquico**. Se um objeto é classificado por sua proximidade com um objeto próximo, em vez de um mais distante, os clusters são formados com base na distância de seus membros para outros objetos. O clustering hierárquico é caracterizado pela combinação repetida de dois clusters.\n", + "\n", + "

\n", + " \n", + "

Infográfico por Dasani Madipalli
\n", + "\n", + "\n", + "\n", + "- **Clustering por centróides**. Este algoritmo popular exige a escolha de 'k', ou o número de clusters a serem formados, após o qual o algoritmo determina o ponto central de um cluster e reúne dados ao redor desse ponto. [Clustering K-means](https://wikipedia.org/wiki/K-means_clustering) é uma versão popular do clustering por centróides, que separa um conjunto de dados em K grupos predefinidos. O centro é determinado pela média mais próxima, daí o nome. A distância quadrada do cluster é minimizada.\n", + "\n", + "

\n", + " \n", + "

Infográfico por Dasani Madipalli
\n", + "\n", + "\n", + "\n", + "- **Clustering baseado em distribuição**. Baseado em modelagem estatística, o clustering baseado em distribuição foca em determinar a probabilidade de um ponto de dados pertencer a um cluster e atribuí-lo de acordo.\n", + "\n", + "- **Clustering baseado em densidade**. Pontos de dados são atribuídos a clusters com base em sua densidade, ou seu agrupamento em torno uns dos outros. Pontos de dados distantes do grupo são considerados outliers ou ruídos. DBSCAN, Mean-shift e OPTICS pertencem a esse tipo de clustering.\n", + "\n", + "- **Clustering baseado em grade**. Para conjuntos de dados multidimensionais, uma grade é criada e os dados são divididos entre as células da grade, criando assim clusters.\n", + "\n", + "A melhor maneira de aprender sobre clustering é experimentando você mesmo, e é isso que você fará neste exercício.\n", + "\n", + "Vamos precisar de alguns pacotes para concluir este módulo. Você pode instalá-los com: `install.packages(c('tidyverse', 'tidymodels', 'DataExplorer', 'summarytools', 'plotly', 'paletteer', 'corrplot', 'patchwork'))`\n", + "\n", + "Alternativamente, o script abaixo verifica se você possui os pacotes necessários para completar este módulo e os instala para você caso algum esteja faltando.\n" + ], + "metadata": {} + }, + { + "cell_type": "code", + "execution_count": null, + "source": [ + "suppressWarnings(if(!require(\"pacman\")) install.packages(\"pacman\"))\r\n", + "\r\n", + "pacman::p_load('tidyverse', 'tidymodels', 'DataExplorer', 'summarytools', 'plotly', 'paletteer', 'corrplot', 'patchwork')\r\n" + ], + "outputs": [], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "## Exercício - agrupe seus dados\n", + "\n", + "A técnica de agrupamento é muito beneficiada por uma visualização adequada, então vamos começar visualizando nossos dados de música. Este exercício nos ajudará a decidir qual dos métodos de agrupamento devemos usar de forma mais eficaz para a natureza desses dados.\n", + "\n", + "Vamos começar importando os dados.\n" + ], + "metadata": {} + }, + { + "cell_type": "code", + "execution_count": null, + "source": [ + "# Load the core tidyverse and make it available in your current R session\r\n", + "library(tidyverse)\r\n", + "\r\n", + "# Import the data into a tibble\r\n", + "df <- read_csv(file = \"https://raw.githubusercontent.com/microsoft/ML-For-Beginners/main/5-Clustering/data/nigerian-songs.csv\")\r\n", + "\r\n", + "# View the first 5 rows of the data set\r\n", + "df %>% \r\n", + " slice_head(n = 5)\r\n" + ], + "outputs": [], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "Às vezes, podemos querer um pouco mais de informação sobre nossos dados. Podemos observar os `dados` e `sua estrutura` usando a função [*glimpse()*](https://pillar.r-lib.org/reference/glimpse.html):\n" + ], + "metadata": {} + }, + { + "cell_type": "code", + "execution_count": null, + "source": [ + "# Glimpse into the data set\r\n", + "df %>% \r\n", + " glimpse()\r\n" + ], + "outputs": [], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "Bom trabalho!💪\n", + "\n", + "Podemos observar que `glimpse()` fornece o número total de linhas (observações) e colunas (variáveis), seguido pelas primeiras entradas de cada variável em uma linha após o nome da variável. Além disso, o *tipo de dado* da variável é exibido logo após o nome da variável dentro de `< >`.\n", + "\n", + "`DataExplorer::introduce()` pode resumir essas informações de forma organizada:\n" + ], + "metadata": {} + }, + { + "cell_type": "code", + "execution_count": null, + "source": [ + "# Describe basic information for our data\r\n", + "df %>% \r\n", + " introduce()\r\n", + "\r\n", + "# A visual display of the same\r\n", + "df %>% \r\n", + " plot_intro()\r\n" + ], + "outputs": [], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "Incrível! Acabamos de aprender que nossos dados não possuem valores ausentes.\n", + "\n", + "Enquanto estamos nisso, podemos explorar estatísticas comuns de tendência central (por exemplo, [média](https://en.wikipedia.org/wiki/Arithmetic_mean) e [mediana](https://en.wikipedia.org/wiki/Median)) e medidas de dispersão (por exemplo, [desvio padrão](https://en.wikipedia.org/wiki/Standard_deviation)) usando `summarytools::descr()`\n" + ], + "metadata": {} + }, + { + "cell_type": "code", + "execution_count": null, + "source": [ + "# Describe common statistics\r\n", + "df %>% \r\n", + " descr(stats = \"common\")\r\n" + ], + "outputs": [], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "Vamos analisar os valores gerais dos dados. Observe que a popularidade pode ser `0`, o que indica músicas que não possuem classificação. Vamos remover esses casos em breve.\n", + "\n", + "> 🤔 Se estamos trabalhando com clustering, um método não supervisionado que não exige dados rotulados, por que estamos mostrando esses dados com rótulos? Na fase de exploração dos dados, eles são úteis, mas não são necessários para que os algoritmos de clustering funcionem.\n", + "\n", + "### 1. Explorar gêneros populares\n", + "\n", + "Vamos descobrir quais são os gêneros mais populares 🎶 contando o número de vezes que eles aparecem.\n" + ], + "metadata": {} + }, + { + "cell_type": "code", + "execution_count": null, + "source": [ + "# Popular genres\r\n", + "top_genres <- df %>% \r\n", + " count(artist_top_genre, sort = TRUE) %>% \r\n", + "# Encode to categorical and reorder the according to count\r\n", + " mutate(artist_top_genre = factor(artist_top_genre) %>% fct_inorder())\r\n", + "\r\n", + "# Print the top genres\r\n", + "top_genres\r\n" + ], + "outputs": [], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "Isso foi bem! Dizem que uma imagem vale mais que mil linhas de um data frame (na verdade, ninguém nunca diz isso 😅). Mas você entendeu a ideia, certo?\n", + "\n", + "Uma maneira de visualizar dados categóricos (variáveis de texto ou fator) é usando gráficos de barras. Vamos criar um gráfico de barras com os 10 principais gêneros:\n" + ], + "metadata": {} + }, + { + "cell_type": "code", + "execution_count": null, + "source": [ + "# Change the default gray theme\r\n", + "theme_set(theme_light())\r\n", + "\r\n", + "# Visualize popular genres\r\n", + "top_genres %>%\r\n", + " slice(1:10) %>% \r\n", + " ggplot(mapping = aes(x = artist_top_genre, y = n,\r\n", + " fill = artist_top_genre)) +\r\n", + " geom_col(alpha = 0.8) +\r\n", + " paletteer::scale_fill_paletteer_d(\"rcartocolor::Vivid\") +\r\n", + " ggtitle(\"Top genres\") +\r\n", + " theme(plot.title = element_text(hjust = 0.5),\r\n", + " # Rotates the X markers (so we can read them)\r\n", + " axis.text.x = element_text(angle = 90))\r\n" + ], + "outputs": [], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "Agora ficou muito mais fácil identificar que temos gêneros `missing` 🧐!\n", + "\n", + "> Uma boa visualização mostrará coisas que você não esperava ou levantará novas questões sobre os dados - Hadley Wickham e Garrett Grolemund, [R For Data Science](https://r4ds.had.co.nz/introduction.html)\n", + "\n", + "Observe que, quando o gênero principal é descrito como `Missing`, isso significa que o Spotify não o classificou, então vamos eliminá-lo.\n" + ], + "metadata": {} + }, + { + "cell_type": "code", + "execution_count": null, + "source": [ + "# Visualize popular genres\r\n", + "top_genres %>%\r\n", + " filter(artist_top_genre != \"Missing\") %>% \r\n", + " slice(1:10) %>% \r\n", + " ggplot(mapping = aes(x = artist_top_genre, y = n,\r\n", + " fill = artist_top_genre)) +\r\n", + " geom_col(alpha = 0.8) +\r\n", + " paletteer::scale_fill_paletteer_d(\"rcartocolor::Vivid\") +\r\n", + " ggtitle(\"Top genres\") +\r\n", + " theme(plot.title = element_text(hjust = 0.5),\r\n", + " # Rotates the X markers (so we can read them)\r\n", + " axis.text.x = element_text(angle = 90))\r\n" + ], + "outputs": [], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "A partir da pequena exploração de dados, aprendemos que os três principais gêneros dominam este conjunto de dados. Vamos nos concentrar em `afro dancehall`, `afropop` e `nigerian pop`, além de filtrar o conjunto de dados para remover qualquer coisa com um valor de popularidade igual a 0 (o que significa que não foi classificado com uma popularidade no conjunto de dados e pode ser considerado como ruído para nossos propósitos):\n" + ], + "metadata": {} + }, + { + "cell_type": "code", + "execution_count": null, + "source": [ + "nigerian_songs <- df %>% \r\n", + " # Concentrate on top 3 genres\r\n", + " filter(artist_top_genre %in% c(\"afro dancehall\", \"afropop\",\"nigerian pop\")) %>% \r\n", + " # Remove unclassified observations\r\n", + " filter(popularity != 0)\r\n", + "\r\n", + "\r\n", + "\r\n", + "# Visualize popular genres\r\n", + "nigerian_songs %>%\r\n", + " count(artist_top_genre) %>%\r\n", + " ggplot(mapping = aes(x = artist_top_genre, y = n,\r\n", + " fill = artist_top_genre)) +\r\n", + " geom_col(alpha = 0.8) +\r\n", + " paletteer::scale_fill_paletteer_d(\"ggsci::category10_d3\") +\r\n", + " ggtitle(\"Top genres\") +\r\n", + " theme(plot.title = element_text(hjust = 0.5))\r\n" + ], + "outputs": [], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "Vamos verificar se há alguma relação linear aparente entre as variáveis numéricas em nosso conjunto de dados. Essa relação é quantificada matematicamente pelo [estatístico de correlação](https://en.wikipedia.org/wiki/Correlation).\n", + "\n", + "O estatístico de correlação é um valor entre -1 e 1 que indica a força de uma relação. Valores acima de 0 indicam uma correlação *positiva* (valores altos de uma variável tendem a coincidir com valores altos da outra), enquanto valores abaixo de 0 indicam uma correlação *negativa* (valores altos de uma variável tendem a coincidir com valores baixos da outra).\n" + ], + "metadata": {} + }, + { + "cell_type": "code", + "execution_count": null, + "source": [ + "# Narrow down to numeric variables and fid correlation\r\n", + "corr_mat <- nigerian_songs %>% \r\n", + " select(where(is.numeric)) %>% \r\n", + " cor()\r\n", + "\r\n", + "# Visualize correlation matrix\r\n", + "corrplot(corr_mat, order = 'AOE', col = c('white', 'black'), bg = 'gold2') \r\n" + ], + "outputs": [], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "Os dados não são fortemente correlacionados, exceto entre `energy` e `loudness`, o que faz sentido, já que músicas altas geralmente são bem energéticas. `Popularity` tem uma correspondência com `release date`, o que também faz sentido, pois músicas mais recentes provavelmente são mais populares. Comprimento e energia parecem ter uma correlação também.\n", + "\n", + "Será interessante ver o que um algoritmo de clusterização pode fazer com esses dados!\n", + "\n", + "> 🎓 Observe que correlação não implica causalidade! Temos prova de correlação, mas nenhuma prova de causalidade. Um [site divertido](https://tylervigen.com/spurious-correlations) tem algumas visualizações que enfatizam esse ponto.\n", + "\n", + "### 2. Explorar a distribuição dos dados\n", + "\n", + "Vamos fazer algumas perguntas mais sutis. Os gêneros são significativamente diferentes na percepção de sua dançabilidade, com base em sua popularidade? Vamos examinar a distribuição dos dados dos nossos três principais gêneros em relação à popularidade e dançabilidade ao longo de um eixo x e y usando [gráficos de densidade](https://www.khanacademy.org/math/ap-statistics/density-curves-normal-distribution-ap/density-curves/v/density-curves).\n" + ], + "metadata": {} + }, + { + "cell_type": "code", + "execution_count": null, + "source": [ + "# Perform 2D kernel density estimation\r\n", + "density_estimate_2d <- nigerian_songs %>% \r\n", + " ggplot(mapping = aes(x = popularity, y = danceability, color = artist_top_genre)) +\r\n", + " geom_density_2d(bins = 5, size = 1) +\r\n", + " paletteer::scale_color_paletteer_d(\"RSkittleBrewer::wildberry\") +\r\n", + " xlim(-20, 80) +\r\n", + " ylim(0, 1.2)\r\n", + "\r\n", + "# Density plot based on the popularity\r\n", + "density_estimate_pop <- nigerian_songs %>% \r\n", + " ggplot(mapping = aes(x = popularity, fill = artist_top_genre, color = artist_top_genre)) +\r\n", + " geom_density(size = 1, alpha = 0.5) +\r\n", + " paletteer::scale_fill_paletteer_d(\"RSkittleBrewer::wildberry\") +\r\n", + " paletteer::scale_color_paletteer_d(\"RSkittleBrewer::wildberry\") +\r\n", + " theme(legend.position = \"none\")\r\n", + "\r\n", + "# Density plot based on the danceability\r\n", + "density_estimate_dance <- nigerian_songs %>% \r\n", + " ggplot(mapping = aes(x = danceability, fill = artist_top_genre, color = artist_top_genre)) +\r\n", + " geom_density(size = 1, alpha = 0.5) +\r\n", + " paletteer::scale_fill_paletteer_d(\"RSkittleBrewer::wildberry\") +\r\n", + " paletteer::scale_color_paletteer_d(\"RSkittleBrewer::wildberry\")\r\n", + "\r\n", + "\r\n", + "# Patch everything together\r\n", + "library(patchwork)\r\n", + "density_estimate_2d / (density_estimate_pop + density_estimate_dance)\r\n" + ], + "outputs": [], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "Vemos que há círculos concêntricos que se alinham, independentemente do gênero. Será que os gostos nigerianos convergem em um certo nível de dançabilidade para este gênero?\n", + "\n", + "De modo geral, os três gêneros se alinham em termos de popularidade e dançabilidade. Determinar agrupamentos nesses dados vagamente alinhados será um desafio. Vamos ver se um gráfico de dispersão pode ajudar nisso.\n" + ], + "metadata": {} + }, + { + "cell_type": "code", + "execution_count": null, + "source": [ + "# A scatter plot of popularity and danceability\r\n", + "scatter_plot <- nigerian_songs %>% \r\n", + " ggplot(mapping = aes(x = popularity, y = danceability, color = artist_top_genre, shape = artist_top_genre)) +\r\n", + " geom_point(size = 2, alpha = 0.8) +\r\n", + " paletteer::scale_color_paletteer_d(\"futurevisions::mars\")\r\n", + "\r\n", + "# Add a touch of interactivity\r\n", + "ggplotly(scatter_plot)\r\n" + ], + "outputs": [], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "Um gráfico de dispersão dos mesmos eixos mostra um padrão semelhante de convergência.\n", + "\n", + "De modo geral, para agrupamento, você pode usar gráficos de dispersão para mostrar clusters de dados, então dominar esse tipo de visualização é muito útil. Na próxima lição, vamos pegar esses dados filtrados e usar o agrupamento k-means para descobrir grupos nesses dados que parecem se sobrepor de maneiras interessantes.\n", + "\n", + "## **🚀 Desafio**\n", + "\n", + "Em preparação para a próxima lição, crie um gráfico sobre os vários algoritmos de agrupamento que você pode descobrir e usar em um ambiente de produção. Que tipos de problemas o agrupamento está tentando resolver?\n", + "\n", + "## [**Questionário pós-aula**](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/28/)\n", + "\n", + "## **Revisão e Autoestudo**\n", + "\n", + "Antes de aplicar algoritmos de agrupamento, como aprendemos, é uma boa ideia entender a natureza do seu conjunto de dados. Leia mais sobre este tópico [aqui](https://www.kdnuggets.com/2019/10/right-clustering-algorithm.html)\n", + "\n", + "Aprofunde seu entendimento sobre técnicas de agrupamento:\n", + "\n", + "- [Treine e avalie modelos de agrupamento usando Tidymodels e amigos](https://rpubs.com/eR_ic/clustering)\n", + "\n", + "- Bradley Boehmke & Brandon Greenwell, [*Hands-On Machine Learning with R*](https://bradleyboehmke.github.io/HOML/)*.*\n", + "\n", + "## **Tarefa**\n", + "\n", + "[Pesquise outras visualizações para agrupamento](https://github.com/microsoft/ML-For-Beginners/blob/main/5-Clustering/1-Visualize/assignment.md)\n", + "\n", + "## AGRADECIMENTOS A:\n", + "\n", + "[Jen Looper](https://www.twitter.com/jenlooper) por criar a versão original em Python deste módulo ♥️\n", + "\n", + "[`Dasani Madipalli`](https://twitter.com/dasani_decoded) por criar as ilustrações incríveis que tornam os conceitos de aprendizado de máquina mais interpretáveis e fáceis de entender.\n", + "\n", + "Feliz aprendizado,\n", + "\n", + "[Eric](https://twitter.com/ericntay), Gold Microsoft Learn Student Ambassador.\n" + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n---\n\n**Aviso Legal**: \nEste documento foi traduzido utilizando o serviço de tradução por IA [Co-op Translator](https://github.com/Azure/co-op-translator). Embora nos esforcemos para garantir a precisão, esteja ciente de que traduções automatizadas podem conter erros ou imprecisões. O documento original em seu idioma nativo deve ser considerado a fonte autoritativa. Para informações críticas, recomenda-se a tradução profissional realizada por humanos. Não nos responsabilizamos por quaisquer mal-entendidos ou interpretações equivocadas decorrentes do uso desta tradução.\n" + ] + } + ], + "metadata": { + "anaconda-cloud": "", + "kernelspec": { + "display_name": "R", + "language": "R", + "name": "ir" + }, + "language_info": { + "codemirror_mode": "r", + "file_extension": ".r", + "mimetype": "text/x-r-source", + "name": "R", + "pygments_lexer": "r", + "version": "3.4.1" + }, + "coopTranslator": { + "original_hash": "99c36449cad3708a435f6798cfa39972", + "translation_date": "2025-08-29T23:31:07+00:00", + "source_file": "5-Clustering/1-Visualize/solution/R/lesson_14-R.ipynb", + "language_code": "br" + } + }, + "nbformat": 4, + "nbformat_minor": 1 +} \ No newline at end of file diff --git a/translations/pt-BR/5-Clustering/1-Visualize/solution/notebook.ipynb b/translations/pt-BR/5-Clustering/1-Visualize/solution/notebook.ipynb new file mode 100644 index 000000000..23501d7a7 --- /dev/null +++ b/translations/pt-BR/5-Clustering/1-Visualize/solution/notebook.ipynb @@ -0,0 +1,874 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Defaulting to user installation because normal site-packages is not writeable\n", + "Requirement already satisfied: seaborn in /Users/jenniferlooper/Library/Python/3.8/lib/python/site-packages (0.11.2)\n", + "Requirement already satisfied: matplotlib>=2.2 in /Users/jenniferlooper/Library/Python/3.8/lib/python/site-packages (from seaborn) (3.5.0)\n", + "Requirement already satisfied: numpy>=1.15 in /Users/jenniferlooper/Library/Python/3.8/lib/python/site-packages (from seaborn) (1.21.4)\n", + "Requirement already satisfied: pandas>=0.23 in /Users/jenniferlooper/Library/Python/3.8/lib/python/site-packages (from seaborn) (1.3.4)\n", + "Requirement already satisfied: scipy>=1.0 in /Users/jenniferlooper/Library/Python/3.8/lib/python/site-packages (from seaborn) (1.7.2)\n", + "Requirement already satisfied: fonttools>=4.22.0 in /Users/jenniferlooper/Library/Python/3.8/lib/python/site-packages (from matplotlib>=2.2->seaborn) (4.28.1)\n", + "Requirement already satisfied: pyparsing>=2.2.1 in /Users/jenniferlooper/Library/Python/3.8/lib/python/site-packages (from matplotlib>=2.2->seaborn) (2.4.7)\n", + "Requirement already satisfied: kiwisolver>=1.0.1 in /Users/jenniferlooper/Library/Python/3.8/lib/python/site-packages (from matplotlib>=2.2->seaborn) (1.3.2)\n", + "Requirement already satisfied: pillow>=6.2.0 in /Users/jenniferlooper/Library/Python/3.8/lib/python/site-packages (from matplotlib>=2.2->seaborn) (8.4.0)\n", + "Requirement already satisfied: cycler>=0.10 in /Users/jenniferlooper/Library/Python/3.8/lib/python/site-packages (from matplotlib>=2.2->seaborn) (0.11.0)\n", + "Requirement already satisfied: packaging>=20.0 in /Users/jenniferlooper/Library/Python/3.8/lib/python/site-packages (from matplotlib>=2.2->seaborn) (21.2)\n", + "Requirement already satisfied: setuptools-scm>=4 in /Users/jenniferlooper/Library/Python/3.8/lib/python/site-packages (from matplotlib>=2.2->seaborn) (6.3.2)\n", + "Requirement already satisfied: python-dateutil>=2.7 in /Users/jenniferlooper/Library/Python/3.8/lib/python/site-packages (from matplotlib>=2.2->seaborn) (2.8.2)\n", + "Requirement already satisfied: pytz>=2017.3 in /Users/jenniferlooper/Library/Python/3.8/lib/python/site-packages (from pandas>=0.23->seaborn) (2021.3)\n", + "Requirement already satisfied: six>=1.5 in /Users/jenniferlooper/Library/Python/3.8/lib/python/site-packages (from python-dateutil>=2.7->matplotlib>=2.2->seaborn) (1.16.0)\n", + "Requirement already satisfied: tomli>=1.0.0 in /Users/jenniferlooper/Library/Python/3.8/lib/python/site-packages (from setuptools-scm>=4->matplotlib>=2.2->seaborn) (1.2.2)\n", + "Requirement already satisfied: setuptools in /Users/jenniferlooper/Library/Python/3.8/lib/python/site-packages (from setuptools-scm>=4->matplotlib>=2.2->seaborn) (59.1.1)\n", + "Note: you may need to restart the kernel to use updated packages.\n" + ] + } + ], + "source": [ + "!pip install seaborn" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [], + "source": [ + "import matplotlib.pyplot as plt\n", + "import pandas as pd" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "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", + "
namealbumartistartist_top_genrerelease_datelengthpopularitydanceabilityacousticnessenergyinstrumentalnesslivenessloudnessspeechinesstempotime_signature
0SparkyMandy & The JungleCruel Santinoalternative r&b2019144000480.6660.85100.4200.5340000.1100-6.6990.0829133.0155
1shuga rushEVERYTHING YOU HEARD IS TRUEOdunsi (The Engine)afropop202089488300.7100.08220.6830.0001690.1010-5.6400.3600129.9933
2LITT!LITT!AYLØindie r&b2018207758400.8360.27200.5640.0005370.1100-7.1270.0424130.0054
3Confident / Feeling CoolEnjoy Your LifeLady Donlinigerian pop2019175135140.8940.79800.6110.0001870.0964-4.9610.1130111.0874
4wanted yourare.Odunsi (The Engine)afropop2018152049250.7020.11600.8330.9100000.3480-6.0440.0447105.1154
\n", + "
" + ], + "text/plain": [ + " name album \\\n", + "0 Sparky Mandy & The Jungle \n", + "1 shuga rush EVERYTHING YOU HEARD IS TRUE \n", + "2 LITT! LITT! \n", + "3 Confident / Feeling Cool Enjoy Your Life \n", + "4 wanted you rare. \n", + "\n", + " artist artist_top_genre release_date length popularity \\\n", + "0 Cruel Santino alternative r&b 2019 144000 48 \n", + "1 Odunsi (The Engine) afropop 2020 89488 30 \n", + "2 AYLØ indie r&b 2018 207758 40 \n", + "3 Lady Donli nigerian pop 2019 175135 14 \n", + "4 Odunsi (The Engine) afropop 2018 152049 25 \n", + "\n", + " danceability acousticness energy instrumentalness liveness loudness \\\n", + "0 0.666 0.8510 0.420 0.534000 0.1100 -6.699 \n", + "1 0.710 0.0822 0.683 0.000169 0.1010 -5.640 \n", + "2 0.836 0.2720 0.564 0.000537 0.1100 -7.127 \n", + "3 0.894 0.7980 0.611 0.000187 0.0964 -4.961 \n", + "4 0.702 0.1160 0.833 0.910000 0.3480 -6.044 \n", + "\n", + " speechiness tempo time_signature \n", + "0 0.0829 133.015 5 \n", + "1 0.3600 129.993 3 \n", + "2 0.0424 130.005 4 \n", + "3 0.1130 111.087 4 \n", + "4 0.0447 105.115 4 " + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df = pd.read_csv(\"../../data/nigerian-songs.csv\")\n", + "df.head()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Obter informações sobre o dataframe\n" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "RangeIndex: 530 entries, 0 to 529\n", + "Data columns (total 16 columns):\n", + " # Column Non-Null Count Dtype \n", + "--- ------ -------------- ----- \n", + " 0 name 530 non-null object \n", + " 1 album 530 non-null object \n", + " 2 artist 530 non-null object \n", + " 3 artist_top_genre 530 non-null object \n", + " 4 release_date 530 non-null int64 \n", + " 5 length 530 non-null int64 \n", + " 6 popularity 530 non-null int64 \n", + " 7 danceability 530 non-null float64\n", + " 8 acousticness 530 non-null float64\n", + " 9 energy 530 non-null float64\n", + " 10 instrumentalness 530 non-null float64\n", + " 11 liveness 530 non-null float64\n", + " 12 loudness 530 non-null float64\n", + " 13 speechiness 530 non-null float64\n", + " 14 tempo 530 non-null float64\n", + " 15 time_signature 530 non-null int64 \n", + "dtypes: float64(8), int64(4), object(4)\n", + "memory usage: 66.4+ KB\n" + ] + } + ], + "source": [ + "df.info()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "name 0\n", + "album 0\n", + "artist 0\n", + "artist_top_genre 0\n", + "release_date 0\n", + "length 0\n", + "popularity 0\n", + "danceability 0\n", + "acousticness 0\n", + "energy 0\n", + "instrumentalness 0\n", + "liveness 0\n", + "loudness 0\n", + "speechiness 0\n", + "tempo 0\n", + "time_signature 0\n", + "dtype: int64" + ] + }, + "execution_count": 6, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df.isnull().sum()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Observe os valores gerais dos dados. Note que a popularidade pode ser '0' - e há muitas linhas com esse valor\n" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "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", + "
release_datelengthpopularitydanceabilityacousticnessenergyinstrumentalnesslivenessloudnessspeechinesstempotime_signature
count530.000000530.000000530.000000530.000000530.000000530.000000530.000000530.000000530.000000530.000000530.000000530.000000
mean2015.390566222298.16981117.5075470.7416190.2654120.7606230.0163050.147308-4.9530110.130748116.4878643.986792
std3.13168839696.82225918.9922120.1175220.2083420.1485330.0903210.1235882.4641860.09293923.5186010.333701
min1998.00000089488.0000000.0000000.2550000.0006650.1110000.0000000.028300-19.3620000.02780061.6950003.000000
25%2014.000000199305.0000000.0000000.6810000.0895250.6690000.0000000.075650-6.2987500.059100102.9612504.000000
50%2016.000000218509.00000013.0000000.7610000.2205000.7845000.0000040.103500-4.5585000.097950112.7145004.000000
75%2017.000000242098.50000031.0000000.8295000.4030000.8757500.0002340.164000-3.3310000.177000125.0392504.000000
max2020.000000511738.00000073.0000000.9660000.9540000.9950000.9100000.8110000.5820000.514000206.0070005.000000
\n", + "
" + ], + "text/plain": [ + " release_date length popularity danceability acousticness \\\n", + "count 530.000000 530.000000 530.000000 530.000000 530.000000 \n", + "mean 2015.390566 222298.169811 17.507547 0.741619 0.265412 \n", + "std 3.131688 39696.822259 18.992212 0.117522 0.208342 \n", + "min 1998.000000 89488.000000 0.000000 0.255000 0.000665 \n", + "25% 2014.000000 199305.000000 0.000000 0.681000 0.089525 \n", + "50% 2016.000000 218509.000000 13.000000 0.761000 0.220500 \n", + "75% 2017.000000 242098.500000 31.000000 0.829500 0.403000 \n", + "max 2020.000000 511738.000000 73.000000 0.966000 0.954000 \n", + "\n", + " energy instrumentalness liveness loudness speechiness \\\n", + "count 530.000000 530.000000 530.000000 530.000000 530.000000 \n", + "mean 0.760623 0.016305 0.147308 -4.953011 0.130748 \n", + "std 0.148533 0.090321 0.123588 2.464186 0.092939 \n", + "min 0.111000 0.000000 0.028300 -19.362000 0.027800 \n", + "25% 0.669000 0.000000 0.075650 -6.298750 0.059100 \n", + "50% 0.784500 0.000004 0.103500 -4.558500 0.097950 \n", + "75% 0.875750 0.000234 0.164000 -3.331000 0.177000 \n", + "max 0.995000 0.910000 0.811000 0.582000 0.514000 \n", + "\n", + " tempo time_signature \n", + "count 530.000000 530.000000 \n", + "mean 116.487864 3.986792 \n", + "std 23.518601 0.333701 \n", + "min 61.695000 3.000000 \n", + "25% 102.961250 4.000000 \n", + "50% 112.714500 4.000000 \n", + "75% 125.039250 4.000000 \n", + "max 206.007000 5.000000 " + ] + }, + "execution_count": 7, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df.describe()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "Text(0.5, 1.0, 'Top genres')" + ] + }, + "execution_count": 8, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "import seaborn as sns\n", + "\n", + "top = df['artist_top_genre'].value_counts()\n", + "plt.figure(figsize=(10,7))\n", + "sns.barplot(x=top[:5].index,y=top[:5].values)\n", + "plt.xticks(rotation=45)\n", + "plt.title('Top genres',color = 'blue')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Guia de Gêneros no Spotify\n", + "\n", + "## Introdução\n", + "\n", + "Este documento fornece uma visão geral dos gêneros musicais disponíveis no Spotify. Ele é projetado para ajudar os desenvolvedores e usuários a entenderem como os gêneros são classificados e utilizados na plataforma.\n", + "\n", + "## Gêneros Suportados\n", + "\n", + "Abaixo está uma lista de gêneros atualmente suportados no Spotify:\n", + "\n", + "- Pop\n", + "- Rock\n", + "- Hip-Hop\n", + "- Jazz\n", + "- Clássico\n", + "- Eletrônica\n", + "- Country\n", + "- Reggae\n", + "- Blues\n", + "- Funk\n", + "- Soul\n", + "- R&B\n", + "- Metal\n", + "- Punk\n", + "- Alternativo\n", + "- Indie\n", + "- Folk\n", + "- Gospel\n", + "- Latino\n", + "- K-Pop\n", + "- Afrobeat\n", + "- Dance\n", + "- House\n", + "- Techno\n", + "- Trance\n", + "- Drum and Bass\n", + "- Dubstep\n", + "- Trap\n", + "- Música Infantil\n", + "- Música de Filme\n", + "- Música de Teatro\n", + "- Música Tradicional\n", + "- Música Instrumental\n", + "- Música Ambiental\n", + "- Música Étnica\n", + "- Música Experimental\n", + "\n", + "[!NOTE] Esta lista pode ser atualizada periodicamente para refletir novos gêneros adicionados ao Spotify.\n", + "\n", + "## Gêneros Não Classificados\n", + "\n", + "Alguns gêneros podem não ser classificados no Spotify devido à sua natureza específica ou falta de dados suficientes. Esses gêneros não são exibidos na lista acima.\n", + "\n", + "[!TIP] Se você não encontrar um gênero específico, tente usar palavras-chave relacionadas para explorar músicas semelhantes.\n", + "\n", + "## Conclusão\n", + "\n", + "Compreender os gêneros disponíveis no Spotify pode melhorar significativamente a experiência do usuário, permitindo uma navegação mais eficiente e personalizada. Use esta lista como referência para explorar a vasta biblioteca musical da plataforma.\n" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "Text(0.5, 1.0, 'Top genres')" + ] + }, + "execution_count": 9, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "df = df[df['artist_top_genre'] != 'Missing']\n", + "top = df['artist_top_genre'].value_counts()\n", + "plt.figure(figsize=(10,7))\n", + "sns.barplot(x=top.index,y=top.values)\n", + "plt.xticks(rotation=45)\n", + "plt.title('Top genres',color = 'blue')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "Text(0.5, 1.0, 'Top genres')" + ] + }, + "execution_count": 10, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "df = df[(df['artist_top_genre'] == 'afro dancehall') | (df['artist_top_genre'] == 'afropop') | (df['artist_top_genre'] == 'nigerian pop')]\n", + "df = df[(df['popularity'] > 0)]\n", + "top = df['artist_top_genre'].value_counts()\n", + "plt.figure(figsize=(10,7))\n", + "sns.barplot(x=top.index,y=top.values)\n", + "plt.xticks(rotation=45)\n", + "plt.title('Top genres',color = 'blue')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "corrmat = df.corr()\n", + "f, ax = plt.subplots(figsize=(12, 9))\n", + "sns.heatmap(corrmat, vmax=.8, square=True);" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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OKvs+++/H25FAXz55ZcALFiwgJycHDl53mmA3GUnIyNzRFx22WXce++9fPPNN2g0GkaMGBEWj76YMWMGxcXFXHrppQQCAaZOncq1115LY2MjZrOZ559/nurqagoKCvjjH/+IwWDg8ccf584778Tv95OcnMwTTzwRPt+mTZv46KOP0Ov1/QZolTm1kAVJRkbmiCgoKODzzz/vtX3/lBR79uzpse+OO+7gjjvu6HWMXq/npZde6rW925uuL37961//KHIE/ZiQu+xkZGRkZE4K5BaSjIzMgJKamsrixYsP65jDLS9zaiC3kGRkZGRkTgpkQZKRkZGROSmQBUlGRkZG5qRAFiQZGRkZmZMCWZBkZGSOKU1NTdx6663H5FzPPfccixYtOibnkjn5kb3sZGRkjikJCQn861//Oibnuueee47JeWRODWRBkpGROSLWrl3LK6+8gk6no6ysjIKCAv7617/S3NzM9ddfz+LFi2lsbOTee+/FarWSn5/P+vXrWbZsGU6nk8cff5zS0lKCwSC33norF1xwQTgSeGdnJzNmzKC5uZlx48Yxd+5cnnnmGVavXo3VaiUqKooXXniBuLg4pkyZwtlnn83GjRtRKpU8++yzpKWl9bC1v3QVFRUVPProo3R2dmIwGHjooYcoKiriwQcfRBAESkpKcDgc3H777Vx88cUD8C3/uJAFSUbmFMW+bQn2rcdnPk7k8JlEFp1x0HKbN2/m66+/Jj4+nssvv5wVK1aQn58f3v/EE09w7rnncs0117BgwQK++OILAF566SWGDBnCU089hcPh4MorrwxHBW9qauKrr75CpVLx4IMPAlBVVUV5eTnvvfceCoWC+++/n88//5ybb76ZlpYWJk6cyCOPPMKTTz7Jf//73/Bx+9OdrmLx4sU88MADfP7559x3333cdtttzJ49my1btnDPPffw7bffhu147733aGtrY+7cuUyePJm4uLij/WqPiL6C1p6OyGNIMjIyR0xeXh6JiYkoFApycnKwWq099q9cuZI5c+YAcNZZZ2EymQBYtWoV7733HnPmzOGaa67B5XJRWloKwODBg3tE8gbIyMjggQce4MMPP+TJJ59ky5YtPVJdTJ06NWzPD23oZv90FU1NTTQ2NlJdXc3s2bMBGDFiBGazmfLycgDmzp2LWq0mMTGRUaNGsXHjxqP6ro6OH4cgyS0k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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "sns.set_theme(style=\"ticks\")\n", + "\n", + "# Show the joint distribution using kernel density estimation\n", + "g = sns.jointplot(\n", + " data=df,\n", + " x=\"popularity\", y=\"danceability\", hue=\"artist_top_genre\",\n", + " kind=\"kde\",\n", + ")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/Users/jenniferlooper/Library/Python/3.8/lib/python/site-packages/seaborn/axisgrid.py:337: UserWarning: The `size` parameter has been renamed to `height`; please update your code.\n", + " warnings.warn(msg, UserWarning)\n" + ] + }, + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 13, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "sns.FacetGrid(df, hue=\"artist_top_genre\", size=5) \\\n", + " .map(plt.scatter, \"popularity\", \"danceability\") \\\n", + " .add_legend()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n---\n\n**Aviso Legal**: \nEste documento foi traduzido utilizando o serviço de tradução por IA [Co-op Translator](https://github.com/Azure/co-op-translator). Embora nos esforcemos para garantir a precisão, esteja ciente de que traduções automáticas podem conter erros ou imprecisões. O documento original em seu idioma nativo deve ser considerado a fonte oficial. Para informações críticas, recomenda-se a tradução profissional feita por humanos. Não nos responsabilizamos por quaisquer mal-entendidos ou interpretações equivocadas decorrentes do uso desta tradução.\n" + ] + } + ], + "metadata": { + "interpreter": { + "hash": "31f2aee4e71d21fbe5cf8b01ff0e069b9275f58929596ceb00d14d90e3e16cd6" + }, + "kernelspec": { + "display_name": "Python 3.7.0 64-bit ('3.7')", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.8.9" + }, + "metadata": { + "interpreter": { + "hash": "70b38d7a306a849643e446cd70466270a13445e5987dfa1344ef2b127438fa4d" + } + }, + "orig_nbformat": 2, + "coopTranslator": { + "original_hash": "c61deff2839902ac8cb4ed411eb10fee", + "translation_date": "2025-08-29T23:26:27+00:00", + "source_file": "5-Clustering/1-Visualize/solution/notebook.ipynb", + "language_code": "br" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} \ No newline at end of file diff --git a/translations/pt-BR/5-Clustering/2-K-Means/README.md b/translations/pt-BR/5-Clustering/2-K-Means/README.md new file mode 100644 index 000000000..eed8917e1 --- /dev/null +++ b/translations/pt-BR/5-Clustering/2-K-Means/README.md @@ -0,0 +1,252 @@ +# K-Means clustering + +## [Pre-lecture quiz](https://ff-quizzes.netlify.app/en/ml/) + +Nesta lição, você aprenderá como criar clusters usando Scikit-learn e o conjunto de dados de música nigeriana que você importou anteriormente. Vamos abordar os fundamentos do K-Means para Clustering. Lembre-se de que, como você aprendeu na lição anterior, existem várias maneiras de trabalhar com clusters, e o método que você usa depende dos seus dados. Vamos experimentar o K-Means, pois é a técnica de clustering mais comum. Vamos começar! + +Termos que você aprenderá: + +- Pontuação de Silhouette +- Método do cotovelo +- Inércia +- Variância + +## Introdução + +[K-Means Clustering](https://wikipedia.org/wiki/K-means_clustering) é um método derivado do domínio de processamento de sinais. Ele é usado para dividir e particionar grupos de dados em 'k' clusters usando uma série de observações. Cada observação trabalha para agrupar um determinado ponto de dados mais próximo de sua 'média' mais próxima, ou o ponto central de um cluster. + +Os clusters podem ser visualizados como [diagramas de Voronoi](https://wikipedia.org/wiki/Voronoi_diagram), que incluem um ponto (ou 'semente') e sua região correspondente. + +![voronoi diagram](../../../../5-Clustering/2-K-Means/images/voronoi.png) + +> Infográfico por [Jen Looper](https://twitter.com/jenlooper) + +O processo de clustering K-Means [é executado em um processo de três etapas](https://scikit-learn.org/stable/modules/clustering.html#k-means): + +1. O algoritmo seleciona um número k de pontos centrais ao amostrar do conjunto de dados. Depois disso, ele entra em um loop: + 1. Ele atribui cada amostra ao centróide mais próximo. + 2. Ele cria novos centróides calculando o valor médio de todas as amostras atribuídas aos centróides anteriores. + 3. Em seguida, calcula a diferença entre os novos e antigos centróides e repete até que os centróides sejam estabilizados. + +Uma desvantagem de usar K-Means é o fato de que você precisará estabelecer 'k', ou seja, o número de centróides. Felizmente, o 'método do cotovelo' ajuda a estimar um bom valor inicial para 'k'. Você experimentará isso em breve. + +## Pré-requisito + +Você trabalhará no arquivo [_notebook.ipynb_](https://github.com/microsoft/ML-For-Beginners/blob/main/5-Clustering/2-K-Means/notebook.ipynb) desta lição, que inclui a importação de dados e a limpeza preliminar que você fez na última lição. + +## Exercício - preparação + +Comece revisando os dados das músicas. + +1. Crie um boxplot, chamando `boxplot()` para cada coluna: + + ```python + plt.figure(figsize=(20,20), dpi=200) + + plt.subplot(4,3,1) + sns.boxplot(x = 'popularity', data = df) + + plt.subplot(4,3,2) + sns.boxplot(x = 'acousticness', data = df) + + plt.subplot(4,3,3) + sns.boxplot(x = 'energy', data = df) + + plt.subplot(4,3,4) + sns.boxplot(x = 'instrumentalness', data = df) + + plt.subplot(4,3,5) + sns.boxplot(x = 'liveness', data = df) + + plt.subplot(4,3,6) + sns.boxplot(x = 'loudness', data = df) + + plt.subplot(4,3,7) + sns.boxplot(x = 'speechiness', data = df) + + plt.subplot(4,3,8) + sns.boxplot(x = 'tempo', data = df) + + plt.subplot(4,3,9) + sns.boxplot(x = 'time_signature', data = df) + + plt.subplot(4,3,10) + sns.boxplot(x = 'danceability', data = df) + + plt.subplot(4,3,11) + sns.boxplot(x = 'length', data = df) + + plt.subplot(4,3,12) + sns.boxplot(x = 'release_date', data = df) + ``` + + Esses dados estão um pouco ruidosos: ao observar cada coluna como um boxplot, você pode ver outliers. + + ![outliers](../../../../5-Clustering/2-K-Means/images/boxplots.png) + +Você poderia percorrer o conjunto de dados e remover esses outliers, mas isso tornaria os dados bastante reduzidos. + +1. Por enquanto, escolha quais colunas você usará para o exercício de clustering. Escolha aquelas com intervalos semelhantes e codifique a coluna `artist_top_genre` como dados numéricos: + + ```python + from sklearn.preprocessing import LabelEncoder + le = LabelEncoder() + + X = df.loc[:, ('artist_top_genre','popularity','danceability','acousticness','loudness','energy')] + + y = df['artist_top_genre'] + + X['artist_top_genre'] = le.fit_transform(X['artist_top_genre']) + + y = le.transform(y) + ``` + +1. Agora você precisa escolher quantos clusters deseja segmentar. Você sabe que há 3 gêneros musicais que extraímos do conjunto de dados, então vamos tentar 3: + + ```python + from sklearn.cluster import KMeans + + nclusters = 3 + seed = 0 + + km = KMeans(n_clusters=nclusters, random_state=seed) + km.fit(X) + + # Predict the cluster for each data point + + y_cluster_kmeans = km.predict(X) + y_cluster_kmeans + ``` + +Você verá um array impresso com clusters previstos (0, 1 ou 2) para cada linha do dataframe. + +1. Use esse array para calcular uma 'pontuação de silhouette': + + ```python + from sklearn import metrics + score = metrics.silhouette_score(X, y_cluster_kmeans) + score + ``` + +## Pontuação de Silhouette + +Procure uma pontuação de silhouette mais próxima de 1. Essa pontuação varia de -1 a 1, e se a pontuação for 1, o cluster é denso e bem separado de outros clusters. Um valor próximo de 0 representa clusters sobrepostos com amostras muito próximas do limite de decisão dos clusters vizinhos. [(Fonte)](https://dzone.com/articles/kmeans-silhouette-score-explained-with-python-exam) + +Nossa pontuação é **0.53**, bem no meio. Isso indica que nossos dados não são particularmente adequados para este tipo de clustering, mas vamos continuar. + +### Exercício - construir um modelo + +1. Importe `KMeans` e inicie o processo de clustering. + + ```python + from sklearn.cluster import KMeans + wcss = [] + + for i in range(1, 11): + kmeans = KMeans(n_clusters = i, init = 'k-means++', random_state = 42) + kmeans.fit(X) + wcss.append(kmeans.inertia_) + + ``` + + Há algumas partes aqui que merecem explicação. + + > 🎓 range: Estas são as iterações do processo de clustering. + + > 🎓 random_state: "Determina a geração de números aleatórios para a inicialização dos centróides." [Fonte](https://scikit-learn.org/stable/modules/generated/sklearn.cluster.KMeans.html#sklearn.cluster.KMeans) + + > 🎓 WCSS: "soma dos quadrados dentro do cluster" mede a distância média quadrada de todos os pontos dentro de um cluster até o centróide do cluster. [Fonte](https://medium.com/@ODSC/unsupervised-learning-evaluating-clusters-bd47eed175ce). + + > 🎓 Inércia: Os algoritmos K-Means tentam escolher centróides para minimizar a 'inércia', "uma medida de quão internamente coerentes os clusters são." [Fonte](https://scikit-learn.org/stable/modules/clustering.html). O valor é adicionado à variável wcss em cada iteração. + + > 🎓 k-means++: No [Scikit-learn](https://scikit-learn.org/stable/modules/clustering.html#k-means), você pode usar a otimização 'k-means++', que "inicializa os centróides para serem (geralmente) distantes uns dos outros, levando a resultados provavelmente melhores do que a inicialização aleatória." + +### Método do cotovelo + +Anteriormente, você presumiu que, como segmentou 3 gêneros musicais, deveria escolher 3 clusters. Mas será que é isso mesmo? + +1. Use o 'método do cotovelo' para ter certeza. + + ```python + plt.figure(figsize=(10,5)) + sns.lineplot(x=range(1, 11), y=wcss, marker='o', color='red') + plt.title('Elbow') + plt.xlabel('Number of clusters') + plt.ylabel('WCSS') + plt.show() + ``` + + Use a variável `wcss` que você construiu na etapa anterior para criar um gráfico mostrando onde está a 'curva' no cotovelo, que indica o número ideal de clusters. Talvez seja **3**! + + ![elbow method](../../../../5-Clustering/2-K-Means/images/elbow.png) + +## Exercício - exibir os clusters + +1. Tente o processo novamente, desta vez configurando três clusters, e exiba os clusters como um gráfico de dispersão: + + ```python + from sklearn.cluster import KMeans + kmeans = KMeans(n_clusters = 3) + kmeans.fit(X) + labels = kmeans.predict(X) + plt.scatter(df['popularity'],df['danceability'],c = labels) + plt.xlabel('popularity') + plt.ylabel('danceability') + plt.show() + ``` + +1. Verifique a precisão do modelo: + + ```python + labels = kmeans.labels_ + + correct_labels = sum(y == labels) + + print("Result: %d out of %d samples were correctly labeled." % (correct_labels, y.size)) + + print('Accuracy score: {0:0.2f}'. format(correct_labels/float(y.size))) + ``` + + A precisão deste modelo não é muito boa, e o formato dos clusters dá uma pista do porquê. + + ![clusters](../../../../5-Clustering/2-K-Means/images/clusters.png) + + Esses dados são muito desequilibrados, pouco correlacionados e há muita variância entre os valores das colunas para formar bons clusters. Na verdade, os clusters que se formam provavelmente são fortemente influenciados ou enviesados pelas três categorias de gênero que definimos acima. Isso foi um processo de aprendizado! + + Na documentação do Scikit-learn, você pode ver que um modelo como este, com clusters não muito bem demarcados, tem um problema de 'variância': + + ![problem models](../../../../5-Clustering/2-K-Means/images/problems.png) + > Infográfico do Scikit-learn + +## Variância + +Variância é definida como "a média das diferenças quadradas em relação à média" [(Fonte)](https://www.mathsisfun.com/data/standard-deviation.html). No contexto deste problema de clustering, refere-se a dados cujos números do conjunto tendem a divergir um pouco demais da média. + +✅ Este é um ótimo momento para pensar em todas as maneiras de corrigir esse problema. Ajustar os dados um pouco mais? Usar colunas diferentes? Usar um algoritmo diferente? Dica: Experimente [escalar seus dados](https://www.mygreatlearning.com/blog/learning-data-science-with-k-means-clustering/) para normalizá-los e testar outras colunas. + +> Experimente este '[calculador de variância](https://www.calculatorsoup.com/calculators/statistics/variance-calculator.php)' para entender melhor o conceito. + +--- + +## 🚀Desafio + +Passe algum tempo com este notebook ajustando os parâmetros. Você consegue melhorar a precisão do modelo limpando mais os dados (removendo outliers, por exemplo)? Você pode usar pesos para dar mais importância a determinadas amostras de dados. O que mais você pode fazer para criar clusters melhores? + +Dica: Experimente escalar seus dados. Há código comentado no notebook que adiciona escala padrão para fazer as colunas de dados se parecerem mais em termos de intervalo. Você descobrirá que, embora a pontuação de silhouette diminua, a 'curva' no gráfico do cotovelo se suaviza. Isso ocorre porque deixar os dados sem escala permite que dados com menos variância tenham mais peso. Leia um pouco mais sobre esse problema [aqui](https://stats.stackexchange.com/questions/21222/are-mean-normalization-and-feature-scaling-needed-for-k-means-clustering/21226#21226). + +## [Post-lecture quiz](https://ff-quizzes.netlify.app/en/ml/) + +## Revisão e Autoestudo + +Dê uma olhada em um Simulador de K-Means [como este](https://user.ceng.metu.edu.tr/~akifakkus/courses/ceng574/k-means/). Você pode usar esta ferramenta para visualizar pontos de dados de amostra e determinar seus centróides. Você pode editar a aleatoriedade dos dados, o número de clusters e o número de centróides. Isso ajuda você a ter uma ideia de como os dados podem ser agrupados? + +Além disso, veja [este material sobre K-Means](https://stanford.edu/~cpiech/cs221/handouts/kmeans.html) da Stanford. + +## Tarefa + +[Experimente diferentes métodos de clustering](assignment.md) + +--- + +**Aviso Legal**: +Este documento foi traduzido utilizando o serviço de tradução por IA [Co-op Translator](https://github.com/Azure/co-op-translator). Embora nos esforcemos para garantir a precisão, esteja ciente de que traduções automatizadas podem conter erros ou imprecisões. O documento original em seu idioma nativo deve ser considerado a fonte autoritativa. Para informações críticas, recomenda-se a tradução profissional realizada por humanos. Não nos responsabilizamos por quaisquer mal-entendidos ou interpretações equivocadas decorrentes do uso desta tradução. \ No newline at end of file diff --git a/translations/pt-BR/5-Clustering/2-K-Means/assignment.md b/translations/pt-BR/5-Clustering/2-K-Means/assignment.md new file mode 100644 index 000000000..97fd7fe2a --- /dev/null +++ b/translations/pt-BR/5-Clustering/2-K-Means/assignment.md @@ -0,0 +1,16 @@ +# Experimente diferentes métodos de agrupamento + +## Instruções + +Nesta lição, você aprendeu sobre o agrupamento K-Means. Às vezes, o K-Means não é adequado para seus dados. Crie um notebook usando dados destas lições ou de outra fonte (credite sua fonte) e mostre um método de agrupamento diferente que NÃO utilize K-Means. O que você aprendeu? + +## Rubrica + +| Critério | Exemplary | Adequado | Precisa Melhorar | +| --------- | --------------------------------------------------------------- | -------------------------------------------------------------------- | ---------------------------- | +| | Um notebook é apresentado com um modelo de agrupamento bem documentado | Um notebook é apresentado sem boa documentação e/ou incompleto | Trabalho incompleto é enviado | + +--- + +**Aviso Legal**: +Este documento foi traduzido utilizando o serviço de tradução por IA [Co-op Translator](https://github.com/Azure/co-op-translator). Embora nos esforcemos para garantir a precisão, esteja ciente de que traduções automatizadas podem conter erros ou imprecisões. O documento original em seu idioma nativo deve ser considerado a fonte autoritativa. Para informações críticas, recomenda-se a tradução profissional realizada por humanos. Não nos responsabilizamos por quaisquer mal-entendidos ou interpretações equivocadas decorrentes do uso desta tradução. \ No newline at end of file diff --git a/translations/pt-BR/5-Clustering/2-K-Means/notebook.ipynb b/translations/pt-BR/5-Clustering/2-K-Means/notebook.ipynb new file mode 100644 index 000000000..77e2957ab --- /dev/null +++ b/translations/pt-BR/5-Clustering/2-K-Means/notebook.ipynb @@ -0,0 +1,231 @@ +{ + "metadata": { + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.7.0" + }, + "orig_nbformat": 2, + "kernelspec": { + "name": "python37364bit8d3b438fb5fc4430a93ac2cb74d693a7", + "display_name": "Python 3.7.0 64-bit ('3.7')" + }, + "metadata": { + "interpreter": { + "hash": "70b38d7a306a849643e446cd70466270a13445e5987dfa1344ef2b127438fa4d" + } + }, + "coopTranslator": { + "original_hash": "3e5c8ab363e8d88f566d4365efc7e0bd", + "translation_date": "2025-08-29T23:32:42+00:00", + "source_file": "5-Clustering/2-K-Means/notebook.ipynb", + "language_code": "br" + } + }, + "nbformat": 4, + "nbformat_minor": 2, + "cells": [ + { + "source": [], + "cell_type": "markdown", + "metadata": {} + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Requirement already satisfied: seaborn in /Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages (0.11.1)\n", + "Requirement already satisfied: numpy>=1.15 in /Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages (from seaborn) (1.19.2)\n", + "Requirement already satisfied: pandas>=0.23 in /Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages (from seaborn) (1.1.2)\n", + "Requirement already satisfied: scipy>=1.0 in /Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages (from seaborn) (1.4.1)\n", + "Requirement already satisfied: matplotlib>=2.2 in /Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages (from seaborn) (3.1.0)\n", + "Requirement already satisfied: python-dateutil>=2.7.3 in /Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages (from pandas>=0.23->seaborn) (2.8.0)\n", + "Requirement already satisfied: pytz>=2017.2 in /Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages (from pandas>=0.23->seaborn) (2019.1)\n", + "Requirement already satisfied: cycler>=0.10 in /Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages (from matplotlib>=2.2->seaborn) (0.10.0)\n", + "Requirement already satisfied: kiwisolver>=1.0.1 in /Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages (from matplotlib>=2.2->seaborn) (1.1.0)\n", + "Requirement already satisfied: pyparsing!=2.0.4,!=2.1.2,!=2.1.6,>=2.0.1 in /Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages (from matplotlib>=2.2->seaborn) (2.4.0)\n", + "Requirement already satisfied: six>=1.5 in /Users/jenlooper/Library/Python/3.7/lib/python/site-packages (from python-dateutil>=2.7.3->pandas>=0.23->seaborn) (1.12.0)\n", + "Requirement already satisfied: setuptools in /Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages (from kiwisolver>=1.0.1->matplotlib>=2.2->seaborn) (45.1.0)\n", + "\u001b[33mWARNING: You are using pip version 20.2.3; however, version 21.1.2 is available.\n", + "You should consider upgrading via the '/Library/Frameworks/Python.framework/Versions/3.7/bin/python3.7 -m pip install --upgrade pip' command.\u001b[0m\n", + "Note: you may need to restart the kernel to use updated packages.\n" + ] + } + ], + "source": [ + "pip install seaborn" + ] + }, + { + "source": [ + "Comece de onde terminamos na última aula, com os dados importados e filtrados.\n" + ], + "cell_type": "markdown", + "metadata": {} + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + " name album \\\n", + "0 Sparky Mandy & The Jungle \n", + "1 shuga rush EVERYTHING YOU HEARD IS TRUE \n", + "2 LITT! LITT! \n", + "3 Confident / Feeling Cool Enjoy Your Life \n", + "4 wanted you rare. \n", + "\n", + " artist artist_top_genre release_date length popularity \\\n", + "0 Cruel Santino alternative r&b 2019 144000 48 \n", + "1 Odunsi (The Engine) afropop 2020 89488 30 \n", + "2 AYLØ indie r&b 2018 207758 40 \n", + "3 Lady Donli nigerian pop 2019 175135 14 \n", + "4 Odunsi (The Engine) afropop 2018 152049 25 \n", + "\n", + " danceability acousticness energy instrumentalness liveness loudness \\\n", + "0 0.666 0.8510 0.420 0.534000 0.1100 -6.699 \n", + "1 0.710 0.0822 0.683 0.000169 0.1010 -5.640 \n", + "2 0.836 0.2720 0.564 0.000537 0.1100 -7.127 \n", + "3 0.894 0.7980 0.611 0.000187 0.0964 -4.961 \n", + "4 0.702 0.1160 0.833 0.910000 0.3480 -6.044 \n", + "\n", + " speechiness tempo time_signature \n", + "0 0.0829 133.015 5 \n", + "1 0.3600 129.993 3 \n", + "2 0.0424 130.005 4 \n", + "3 0.1130 111.087 4 \n", + "4 0.0447 105.115 4 " + ], + "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
namealbumartistartist_top_genrerelease_datelengthpopularitydanceabilityacousticnessenergyinstrumentalnesslivenessloudnessspeechinesstempotime_signature
0SparkyMandy & The JungleCruel Santinoalternative r&b2019144000480.6660.85100.4200.5340000.1100-6.6990.0829133.0155
1shuga rushEVERYTHING YOU HEARD IS TRUEOdunsi (The Engine)afropop202089488300.7100.08220.6830.0001690.1010-5.6400.3600129.9933
2LITT!LITT!AYLØindie r&b2018207758400.8360.27200.5640.0005370.1100-7.1270.0424130.0054
3Confident / Feeling CoolEnjoy Your LifeLady Donlinigerian pop2019175135140.8940.79800.6110.0001870.0964-4.9610.1130111.0874
4wanted yourare.Odunsi (The Engine)afropop2018152049250.7020.11600.8330.9100000.3480-6.0440.0447105.1154
\n
" + }, + "metadata": {}, + "execution_count": 6 + } + ], + "source": [ + "\n", + "import matplotlib.pyplot as plt\n", + "import pandas as pd\n", + "import seaborn as sns\n", + "\n", + "\n", + "df = pd.read_csv(\"../data/nigerian-songs.csv\")\n", + "df.head()" + ] + }, + { + "source": [ + "Vamos focar apenas em 3 gêneros. Talvez possamos formar 3 clusters!\n" + ], + "cell_type": "markdown", + "metadata": {} + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "Text(0.5, 1.0, 'Top genres')" + ] + }, + "metadata": {}, + "execution_count": 7 + }, + { + "output_type": "display_data", + "data": { + "text/plain": "
", + "image/svg+xml": "\n\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n\n", + "image/png": "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\n" + }, + "metadata": { + "needs_background": "light" + } + } + ], + "source": [ + "df = df[(df['artist_top_genre'] == 'afro dancehall') | (df['artist_top_genre'] == 'afropop') | (df['artist_top_genre'] == 'nigerian pop')]\n", + "df = df[(df['popularity'] > 0)]\n", + "top = df['artist_top_genre'].value_counts()\n", + "plt.figure(figsize=(10,7))\n", + "sns.barplot(x=top.index,y=top.values)\n", + "plt.xticks(rotation=45)\n", + "plt.title('Top genres',color = 'blue')" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + " name album \\\n", + "1 shuga rush EVERYTHING YOU HEARD IS TRUE \n", + "3 Confident / Feeling Cool Enjoy Your Life \n", + "4 wanted you rare. \n", + "5 Kasala Pioneers \n", + "6 Pull Up Everything Pretty \n", + "\n", + " artist artist_top_genre release_date length popularity \\\n", + "1 Odunsi (The Engine) afropop 2020 89488 30 \n", + "3 Lady Donli nigerian pop 2019 175135 14 \n", + "4 Odunsi (The Engine) afropop 2018 152049 25 \n", + "5 DRB Lasgidi nigerian pop 2020 184800 26 \n", + "6 prettyboydo nigerian pop 2018 202648 29 \n", + "\n", + " danceability acousticness energy instrumentalness liveness loudness \\\n", + "1 0.710 0.0822 0.683 0.000169 0.1010 -5.640 \n", + "3 0.894 0.7980 0.611 0.000187 0.0964 -4.961 \n", + "4 0.702 0.1160 0.833 0.910000 0.3480 -6.044 \n", + "5 0.803 0.1270 0.525 0.000007 0.1290 -10.034 \n", + "6 0.818 0.4520 0.587 0.004490 0.5900 -9.840 \n", + "\n", + " speechiness tempo time_signature \n", + "1 0.3600 129.993 3 \n", + "3 0.1130 111.087 4 \n", + "4 0.0447 105.115 4 \n", + "5 0.1970 100.103 4 \n", + "6 0.1990 95.842 4 " + ], + "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
namealbumartistartist_top_genrerelease_datelengthpopularitydanceabilityacousticnessenergyinstrumentalnesslivenessloudnessspeechinesstempotime_signature
1shuga rushEVERYTHING YOU HEARD IS TRUEOdunsi (The Engine)afropop202089488300.7100.08220.6830.0001690.1010-5.6400.3600129.9933
3Confident / Feeling CoolEnjoy Your LifeLady Donlinigerian pop2019175135140.8940.79800.6110.0001870.0964-4.9610.1130111.0874
4wanted yourare.Odunsi (The Engine)afropop2018152049250.7020.11600.8330.9100000.3480-6.0440.0447105.1154
5KasalaPioneersDRB Lasgidinigerian pop2020184800260.8030.12700.5250.0000070.1290-10.0340.1970100.1034
6Pull UpEverything Prettyprettyboydonigerian pop2018202648290.8180.45200.5870.0044900.5900-9.8400.199095.8424
\n
" + }, + "metadata": {}, + "execution_count": 8 + } + ], + "source": [ + "df.head()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n---\n\n**Aviso Legal**: \nEste documento foi traduzido utilizando o serviço de tradução por IA [Co-op Translator](https://github.com/Azure/co-op-translator). Embora nos esforcemos para garantir a precisão, esteja ciente de que traduções automatizadas podem conter erros ou imprecisões. O documento original em seu idioma nativo deve ser considerado a fonte autoritativa. Para informações críticas, recomenda-se a tradução profissional realizada por humanos. Não nos responsabilizamos por quaisquer mal-entendidos ou interpretações equivocadas decorrentes do uso desta tradução.\n" + ] + } + ] +} \ No newline at end of file diff --git a/translations/pt-BR/5-Clustering/2-K-Means/solution/Julia/README.md b/translations/pt-BR/5-Clustering/2-K-Means/solution/Julia/README.md new file mode 100644 index 000000000..c58234bae --- /dev/null +++ b/translations/pt-BR/5-Clustering/2-K-Means/solution/Julia/README.md @@ -0,0 +1,6 @@ + + +--- + +**Aviso Legal**: +Este documento foi traduzido utilizando o serviço de tradução por IA [Co-op Translator](https://github.com/Azure/co-op-translator). Embora nos esforcemos para garantir a precisão, esteja ciente de que traduções automatizadas podem conter erros ou imprecisões. O documento original em seu idioma nativo deve ser considerado a fonte autoritativa. Para informações críticas, recomenda-se a tradução profissional realizada por humanos. Não nos responsabilizamos por quaisquer mal-entendidos ou interpretações equivocadas decorrentes do uso desta tradução. \ No newline at end of file diff --git a/translations/pt-BR/5-Clustering/2-K-Means/solution/R/lesson_15-R.ipynb b/translations/pt-BR/5-Clustering/2-K-Means/solution/R/lesson_15-R.ipynb new file mode 100644 index 000000000..192518acb --- /dev/null +++ b/translations/pt-BR/5-Clustering/2-K-Means/solution/R/lesson_15-R.ipynb @@ -0,0 +1,639 @@ +{ + "nbformat": 4, + "nbformat_minor": 0, + "metadata": { + "anaconda-cloud": "", + "kernelspec": { + "display_name": "R", + "language": "R", + "name": "ir" + }, + "language_info": { + "codemirror_mode": "r", + "file_extension": ".r", + "mimetype": "text/x-r-source", + "name": "R", + "pygments_lexer": "r", + "version": "3.4.1" + }, + "colab": { + "name": "lesson_14.ipynb", + "provenance": [], + "collapsed_sections": [], + "toc_visible": true + }, + "coopTranslator": { + "original_hash": "ad65fb4aad0a156b42216e4929f490fc", + "translation_date": "2025-08-29T23:39:22+00:00", + "source_file": "5-Clustering/2-K-Means/solution/R/lesson_15-R.ipynb", + "language_code": "br" + } + }, + "cells": [ + { + "cell_type": "markdown", + "metadata": { + "id": "GULATlQXLXyR" + }, + "source": [ + "## Explore o agrupamento K-Means usando R e os princípios de dados Tidy.\n", + "\n", + "### [**Questionário pré-aula**](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/29/)\n", + "\n", + "Nesta lição, você aprenderá como criar agrupamentos usando o pacote Tidymodels e outros pacotes do ecossistema R (vamos chamá-los de amigos 🧑‍🤝‍🧑), além do conjunto de dados de música nigeriana que você importou anteriormente. Vamos abordar os fundamentos do K-Means para agrupamento. Lembre-se de que, como você aprendeu na lição anterior, existem várias maneiras de trabalhar com agrupamentos, e o método que você usa depende dos seus dados. Vamos experimentar o K-Means, pois é a técnica de agrupamento mais comum. Vamos começar!\n", + "\n", + "Termos que você aprenderá:\n", + "\n", + "- Pontuação Silhouette\n", + "\n", + "- Método do Cotovelo\n", + "\n", + "- Inércia\n", + "\n", + "- Variância\n", + "\n", + "### **Introdução**\n", + "\n", + "O [agrupamento K-Means](https://wikipedia.org/wiki/K-means_clustering) é um método derivado do domínio do processamento de sinais. Ele é usado para dividir e particionar grupos de dados em `k agrupamentos` com base em semelhanças em suas características.\n", + "\n", + "Os agrupamentos podem ser visualizados como [diagramas de Voronoi](https://wikipedia.org/wiki/Voronoi_diagram), que incluem um ponto (ou 'semente') e sua região correspondente.\n", + "\n", + "

\n", + " \n", + "

Infográfico por Jen Looper
\n", + "\n", + "O agrupamento K-Means segue os seguintes passos:\n", + "\n", + "1. O cientista de dados começa especificando o número desejado de agrupamentos a serem criados.\n", + "\n", + "2. Em seguida, o algoritmo seleciona aleatoriamente K observações do conjunto de dados para servir como os centros iniciais dos agrupamentos (ou seja, centróides).\n", + "\n", + "3. Depois, cada uma das observações restantes é atribuída ao centróide mais próximo.\n", + "\n", + "4. Em seguida, as novas médias de cada agrupamento são calculadas e o centróide é movido para a nova média.\n", + "\n", + "5. Agora que os centros foram recalculados, cada observação é verificada novamente para ver se pode estar mais próxima de um agrupamento diferente. Todos os objetos são realocados novamente usando as médias atualizadas dos agrupamentos. As etapas de atribuição de agrupamento e atualização dos centróides são repetidas iterativamente até que as atribuições de agrupamento parem de mudar (ou seja, quando a convergência é alcançada). Normalmente, o algoritmo termina quando cada nova iteração resulta em um movimento insignificante dos centróides e os agrupamentos se tornam estáticos.\n", + "\n", + "
\n", + "\n", + "> Observe que, devido à randomização das k observações iniciais usadas como centróides iniciais, podemos obter resultados ligeiramente diferentes a cada vez que aplicamos o procedimento. Por essa razão, a maioria dos algoritmos utiliza vários *inícios aleatórios* e escolhe a iteração com o menor WCSS. Assim, é altamente recomendável sempre executar o K-Means com vários valores de *nstart* para evitar um *ótimo local indesejado.*\n", + "\n", + "
\n", + "\n", + "Esta breve animação usando a [arte](https://github.com/allisonhorst/stats-illustrations) de Allison Horst explica o processo de agrupamento:\n", + "\n", + "

\n", + " \n", + "

Arte por @allison_horst
\n", + "\n", + "Uma questão fundamental que surge no agrupamento é: como saber em quantos agrupamentos separar seus dados? Uma desvantagem do uso do K-Means é o fato de que você precisará estabelecer `k`, ou seja, o número de `centróides`. Felizmente, o `método do cotovelo` ajuda a estimar um bom valor inicial para `k`. Você experimentará isso em breve.\n", + "\n", + "### \n", + "\n", + "**Pré-requisito**\n", + "\n", + "Vamos continuar de onde paramos na [lição anterior](https://github.com/microsoft/ML-For-Beginners/blob/main/5-Clustering/1-Visualize/solution/R/lesson_14-R.ipynb), onde analisamos o conjunto de dados, criamos várias visualizações e filtramos o conjunto de dados para observações de interesse. Certifique-se de conferir!\n", + "\n", + "Vamos precisar de alguns pacotes para concluir este módulo. Você pode instalá-los com: `install.packages(c('tidyverse', 'tidymodels', 'cluster', 'summarytools', 'plotly', 'paletteer', 'factoextra', 'patchwork'))`\n", + "\n", + "Alternativamente, o script abaixo verifica se você possui os pacotes necessários para completar este módulo e os instala para você caso algum esteja faltando.\n" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "ah_tBi58LXyi" + }, + "source": [ + "suppressWarnings(if(!require(\"pacman\")) install.packages(\"pacman\"))\n", + "\n", + "pacman::p_load('tidyverse', 'tidymodels', 'cluster', 'summarytools', 'plotly', 'paletteer', 'factoextra', 'patchwork')\n" + ], + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "7e--UCUTLXym" + }, + "source": [ + "Vamos começar com tudo!\n", + "\n", + "## 1. Uma dança com dados: Reduza para os 3 gêneros musicais mais populares\n", + "\n", + "Este é um resumo do que fizemos na lição anterior. Vamos explorar e analisar alguns dados!\n" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "Ycamx7GGLXyn" + }, + "source": [ + "# Load the core tidyverse and make it available in your current R session\n", + "library(tidyverse)\n", + "\n", + "# Import the data into a tibble\n", + "df <- read_csv(file = \"https://raw.githubusercontent.com/microsoft/ML-For-Beginners/main/5-Clustering/data/nigerian-songs.csv\", show_col_types = FALSE)\n", + "\n", + "# Narrow down to top 3 popular genres\n", + "nigerian_songs <- df %>% \n", + " # Concentrate on top 3 genres\n", + " filter(artist_top_genre %in% c(\"afro dancehall\", \"afropop\",\"nigerian pop\")) %>% \n", + " # Remove unclassified observations\n", + " filter(popularity != 0)\n", + "\n", + "\n", + "\n", + "# Visualize popular genres using bar plots\n", + "theme_set(theme_light())\n", + "nigerian_songs %>%\n", + " count(artist_top_genre) %>%\n", + " ggplot(mapping = aes(x = artist_top_genre, y = n,\n", + " fill = artist_top_genre)) +\n", + " geom_col(alpha = 0.8) +\n", + " paletteer::scale_fill_paletteer_d(\"ggsci::category10_d3\") +\n", + " ggtitle(\"Top genres\") +\n", + " theme(plot.title = element_text(hjust = 0.5))\n" + ], + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "b5h5zmkPLXyp" + }, + "source": [ + "🤩 Isso foi ótimo!\n", + "\n", + "## 2. Mais exploração de dados.\n", + "\n", + "Quão limpos estão esses dados? Vamos verificar a presença de outliers usando boxplots. Vamos nos concentrar em colunas numéricas com menos outliers (embora você possa limpar os outliers, se preferir). Boxplots podem mostrar o intervalo dos dados e ajudar a escolher quais colunas usar. Observe que os boxplots não mostram a variância, um elemento importante para dados bem agrupáveis. Por favor, veja [esta discussão](https://stats.stackexchange.com/questions/91536/deduce-variance-from-boxplot) para leitura adicional.\n", + "\n", + "[Boxplots](https://en.wikipedia.org/wiki/Box_plot) são usados para representar graficamente a distribuição de dados `numéricos`, então vamos começar *selecionando* todas as colunas numéricas junto com os gêneros musicais populares.\n" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "HhNreJKLLXyq" + }, + "source": [ + "# Select top genre column and all other numeric columns\n", + "df_numeric <- nigerian_songs %>% \n", + " select(artist_top_genre, where(is.numeric)) \n", + "\n", + "# Display the data\n", + "df_numeric %>% \n", + " slice_head(n = 5)\n" + ], + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "uYXrwJRaLXyq" + }, + "source": [ + "Veja como o seletor `where` facilita isso 💁? Explore outras funções semelhantes [aqui](https://tidyselect.r-lib.org/).\n", + "\n", + "Como vamos criar um boxplot para cada característica numérica e queremos evitar o uso de loops, vamos reformular nossos dados para um formato *mais longo*, o que nos permitirá aproveitar os `facets` - subgráficos que exibem cada um um subconjunto dos dados.\n" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "gd5bR3f8LXys" + }, + "source": [ + "# Pivot data from wide to long\n", + "df_numeric_long <- df_numeric %>% \n", + " pivot_longer(!artist_top_genre, names_to = \"feature_names\", values_to = \"values\") \n", + "\n", + "# Print out data\n", + "df_numeric_long %>% \n", + " slice_head(n = 15)\n" + ], + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "-7tE1swnLXyv" + }, + "source": [ + "Muito mais longo! Agora é hora de alguns `ggplots`! Então, qual `geom` usaremos?\n" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "r88bIsyuLXyy" + }, + "source": [ + "# Make a box plot\n", + "df_numeric_long %>% \n", + " ggplot(mapping = aes(x = feature_names, y = values, fill = feature_names)) +\n", + " geom_boxplot() +\n", + " facet_wrap(~ feature_names, ncol = 4, scales = \"free\") +\n", + " theme(legend.position = \"none\")\n" + ], + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "EYVyKIUELXyz" + }, + "source": [ + "Fácil-gg!\n", + "\n", + "Agora podemos ver que esses dados estão um pouco ruidosos: ao observar cada coluna como um boxplot, é possível identificar valores atípicos. Você poderia percorrer o conjunto de dados e remover esses valores atípicos, mas isso tornaria os dados bem reduzidos.\n", + "\n", + "Por enquanto, vamos escolher quais colunas usaremos para o nosso exercício de agrupamento. Vamos selecionar as colunas numéricas com intervalos semelhantes. Poderíamos codificar o `artist_top_genre` como numérico, mas vamos descartá-lo por enquanto.\n" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "-wkpINyZLXy0" + }, + "source": [ + "# Select variables with similar ranges\n", + "df_numeric_select <- df_numeric %>% \n", + " select(popularity, danceability, acousticness, loudness, energy) \n", + "\n", + "# Normalize data\n", + "# df_numeric_select <- scale(df_numeric_select)\n" + ], + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "D7dLzgpqLXy1" + }, + "source": [ + "## 3. Computando agrupamento k-means em R\n", + "\n", + "Podemos calcular k-means em R usando a função integrada `kmeans`, veja `help(\"kmeans()\")`. A função `kmeans()` aceita um data frame com todas as colunas numéricas como seu argumento principal.\n", + "\n", + "O primeiro passo ao usar o agrupamento k-means é especificar o número de clusters (k) que serão gerados na solução final. Sabemos que há 3 gêneros musicais que extraímos do conjunto de dados, então vamos tentar com 3:\n" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "uC4EQ5w7LXy5" + }, + "source": [ + "set.seed(2056)\n", + "# Kmeans clustering for 3 clusters\n", + "kclust <- kmeans(\n", + " df_numeric_select,\n", + " # Specify the number of clusters\n", + " centers = 3,\n", + " # How many random initial configurations\n", + " nstart = 25\n", + ")\n", + "\n", + "# Display clustering object\n", + "kclust\n" + ], + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "hzfhscWrLXy-" + }, + "source": [ + "O objeto kmeans contém várias informações que estão bem explicadas em `help(\"kmeans()\")`. Por enquanto, vamos nos concentrar em algumas delas. Podemos ver que os dados foram agrupados em 3 clusters com tamanhos de 65, 110 e 111. A saída também contém os centros dos clusters (médias) para os 3 grupos em relação às 5 variáveis.\n", + "\n", + "O vetor de agrupamento é a atribuição de cluster para cada observação. Vamos usar a função `augment` para adicionar a atribuição de cluster ao conjunto de dados original.\n" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "0XwwpFGQLXy_" + }, + "source": [ + "# Add predicted cluster assignment to data set\n", + "augment(kclust, df_numeric_select) %>% \n", + " relocate(.cluster) %>% \n", + " slice_head(n = 10)\n" + ], + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "NXIVXXACLXzA" + }, + "source": [ + "Perfeito, acabamos de dividir nosso conjunto de dados em um conjunto de 3 grupos. Então, quão boa é nossa clusterização 🤷? Vamos dar uma olhada no `Silhouette score`.\n", + "\n", + "### **Silhouette score**\n", + "\n", + "[A análise de Silhouette](https://en.wikipedia.org/wiki/Silhouette_(clustering)) pode ser usada para estudar a distância de separação entre os clusters resultantes. Esse score varia de -1 a 1, e se o score estiver próximo de 1, o cluster é denso e bem separado dos outros clusters. Um valor próximo de 0 representa clusters sobrepostos com amostras muito próximas da fronteira de decisão dos clusters vizinhos. [fonte](https://dzone.com/articles/kmeans-silhouette-score-explained-with-python-exam).\n", + "\n", + "O método de silhouette médio calcula a média do silhouette das observações para diferentes valores de *k*. Um alto score médio de silhouette indica uma boa clusterização.\n", + "\n", + "A função `silhouette` no pacote de cluster é usada para calcular a largura média do silhouette.\n", + "\n", + "> O silhouette pode ser calculado com qualquer [métrica de distância](https://en.wikipedia.org/wiki/Distance \"Distance\"), como a [distância Euclidiana](https://en.wikipedia.org/wiki/Euclidean_distance \"Euclidean distance\") ou a [distância Manhattan](https://en.wikipedia.org/wiki/Manhattan_distance \"Manhattan distance\"), que discutimos na [lição anterior](https://github.com/microsoft/ML-For-Beginners/blob/main/5-Clustering/1-Visualize/solution/R/lesson_14-R.ipynb).\n" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "Jn0McL28LXzB" + }, + "source": [ + "# Load cluster package\n", + "library(cluster)\n", + "\n", + "# Compute average silhouette score\n", + "ss <- silhouette(kclust$cluster,\n", + " # Compute euclidean distance\n", + " dist = dist(df_numeric_select))\n", + "mean(ss[, 3])\n" + ], + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "QyQRn97nLXzC" + }, + "source": [ + "Nosso índice é **0,549**, bem no meio. Isso indica que nossos dados não são particularmente adequados para este tipo de agrupamento. Vamos verificar se conseguimos confirmar essa suspeita visualmente. O [pacote factoextra](https://rpkgs.datanovia.com/factoextra/index.html) fornece funções (`fviz_cluster()`) para visualizar agrupamentos.\n" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "7a6Km1_FLXzD" + }, + "source": [ + "library(factoextra)\n", + "\n", + "# Visualize clustering results\n", + "fviz_cluster(kclust, df_numeric_select)\n" + ], + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "IBwCWt-0LXzD" + }, + "source": [ + "A sobreposição nos clusters indica que nossos dados não são particularmente adequados para esse tipo de agrupamento, mas vamos continuar.\n", + "\n", + "## 4. Determinando o número ideal de clusters\n", + "\n", + "Uma pergunta fundamental que frequentemente surge no agrupamento K-Means é esta: sem rótulos de classe conhecidos, como você sabe em quantos clusters deve separar seus dados?\n", + "\n", + "Uma maneira de tentar descobrir é usar uma amostra de dados para `criar uma série de modelos de agrupamento` com um número crescente de clusters (por exemplo, de 1 a 10) e avaliar métricas de agrupamento, como o **Silhouette score.**\n", + "\n", + "Vamos determinar o número ideal de clusters calculando o algoritmo de agrupamento para diferentes valores de *k* e avaliando o **Within Cluster Sum of Squares** (WCSS). O total de soma de quadrados dentro dos clusters (WCSS) mede a compacidade do agrupamento, e queremos que ele seja o menor possível, com valores mais baixos indicando que os pontos de dados estão mais próximos.\n", + "\n", + "Vamos explorar o efeito de diferentes escolhas de `k`, de 1 a 10, nesse agrupamento.\n" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "hSeIiylDLXzE" + }, + "source": [ + "# Create a series of clustering models\n", + "kclusts <- tibble(k = 1:10) %>% \n", + " # Perform kmeans clustering for 1,2,3 ... ,10 clusters\n", + " mutate(model = map(k, ~ kmeans(df_numeric_select, centers = .x, nstart = 25)),\n", + " # Farm out clustering metrics eg WCSS\n", + " glanced = map(model, ~ glance(.x))) %>% \n", + " unnest(cols = glanced)\n", + " \n", + "\n", + "# View clustering rsulsts\n", + "kclusts\n" + ], + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "m7rS2U1eLXzE" + }, + "source": [ + "Agora que temos o total da soma dos quadrados dentro dos clusters (tot.withinss) para cada algoritmo de agrupamento com centro *k*, usamos o [método do cotovelo](https://en.wikipedia.org/wiki/Elbow_method_(clustering)) para encontrar o número ideal de clusters. O método consiste em plotar o WCSS como uma função do número de clusters e escolher o [cotovelo da curva](https://en.wikipedia.org/wiki/Elbow_of_the_curve \"Elbow of the curve\") como o número de clusters a ser utilizado.\n" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "o_DjHGItLXzF" + }, + "source": [ + "set.seed(2056)\n", + "# Use elbow method to determine optimum number of clusters\n", + "kclusts %>% \n", + " ggplot(mapping = aes(x = k, y = tot.withinss)) +\n", + " geom_line(size = 1.2, alpha = 0.8, color = \"#FF7F0EFF\") +\n", + " geom_point(size = 2, color = \"#FF7F0EFF\")\n" + ], + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "pLYyt5XSLXzG" + }, + "source": [ + "O gráfico mostra uma grande redução no WCSS (ou seja, maior *coerência*) à medida que o número de clusters aumenta de um para dois, e uma redução adicional perceptível de dois para três clusters. Depois disso, a redução é menos acentuada, resultando em um `cotovelo` 💪 no gráfico em torno de três clusters. Isso é uma boa indicação de que há dois a três clusters de pontos de dados razoavelmente bem separados.\n", + "\n", + "Agora podemos prosseguir e extrair o modelo de clustering onde `k = 3`:\n", + "\n", + "> `pull()`: usado para extrair uma única coluna\n", + ">\n", + "> `pluck()`: usado para indexar estruturas de dados como listas\n" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "JP_JPKBILXzG" + }, + "source": [ + "# Extract k = 3 clustering\n", + "final_kmeans <- kclusts %>% \n", + " filter(k == 3) %>% \n", + " pull(model) %>% \n", + " pluck(1)\n", + "\n", + "\n", + "final_kmeans\n" + ], + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "l_PDTu8tLXzI" + }, + "source": [ + "Ótimo! Vamos visualizar os clusters obtidos. Que tal adicionar um pouco de interatividade usando `plotly`?\n" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "dNcleFe-LXzJ" + }, + "source": [ + "# Add predicted cluster assignment to data set\n", + "results <- augment(final_kmeans, df_numeric_select) %>% \n", + " bind_cols(df_numeric %>% select(artist_top_genre)) \n", + "\n", + "# Plot cluster assignments\n", + "clust_plt <- results %>% \n", + " ggplot(mapping = aes(x = popularity, y = danceability, color = .cluster, shape = artist_top_genre)) +\n", + " geom_point(size = 2, alpha = 0.8) +\n", + " paletteer::scale_color_paletteer_d(\"ggthemes::Tableau_10\")\n", + "\n", + "ggplotly(clust_plt)\n" + ], + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "6JUM_51VLXzK" + }, + "source": [ + "Talvez esperássemos que cada cluster (representado por cores diferentes) tivesse gêneros distintos (representados por formas diferentes).\n", + "\n", + "Vamos dar uma olhada na precisão do modelo.\n" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "HdIMUGq7LXzL" + }, + "source": [ + "# Assign genres to predefined integers\n", + "label_count <- results %>% \n", + " group_by(artist_top_genre) %>% \n", + " mutate(id = cur_group_id()) %>% \n", + " ungroup() %>% \n", + " summarise(correct_labels = sum(.cluster == id))\n", + "\n", + "\n", + "# Print results \n", + "cat(\"Result:\", label_count$correct_labels, \"out of\", nrow(results), \"samples were correctly labeled.\")\n", + "\n", + "cat(\"\\nAccuracy score:\", label_count$correct_labels/nrow(results))\n" + ], + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "C50wvaAOLXzM" + }, + "source": [ + "A precisão deste modelo não é ruim, mas também não é excelente. Pode ser que os dados não sejam adequados para o agrupamento K-Means. Esses dados são muito desequilibrados, pouco correlacionados e há muita variância entre os valores das colunas para formar bons clusters. Na verdade, os clusters que se formam provavelmente são fortemente influenciados ou distorcidos pelas três categorias de gênero que definimos acima.\n", + "\n", + "Mesmo assim, foi um processo de aprendizado interessante!\n", + "\n", + "Na documentação do Scikit-learn, você pode ver que um modelo como este, com clusters não muito bem definidos, apresenta um problema de 'variância':\n", + "\n", + "

\n", + " \n", + "

Infográfico do Scikit-learn
\n", + "\n", + "\n", + "\n", + "## **Variância**\n", + "\n", + "Variância é definida como \"a média das diferenças quadradas em relação à média\" [fonte](https://www.mathsisfun.com/data/standard-deviation.html). No contexto deste problema de agrupamento, refere-se aos dados cujos números do nosso conjunto tendem a divergir um pouco demais da média.\n", + "\n", + "✅ Este é um ótimo momento para pensar em todas as maneiras de corrigir esse problema. Ajustar os dados um pouco mais? Usar colunas diferentes? Utilizar um algoritmo diferente? Dica: Experimente [escalar seus dados](https://www.mygreatlearning.com/blog/learning-data-science-with-k-means-clustering/) para normalizá-los e testar outras colunas.\n", + "\n", + "> Experimente este '[calculador de variância](https://www.calculatorsoup.com/calculators/statistics/variance-calculator.php)' para entender melhor o conceito.\n", + "\n", + "------------------------------------------------------------------------\n", + "\n", + "## **🚀Desafio**\n", + "\n", + "Dedique algum tempo a este notebook, ajustando os parâmetros. Você consegue melhorar a precisão do modelo limpando mais os dados (removendo outliers, por exemplo)? Você pode usar pesos para dar mais importância a determinadas amostras de dados. O que mais você pode fazer para criar clusters melhores?\n", + "\n", + "Dica: Experimente escalar seus dados. Há código comentado no notebook que adiciona escalonamento padrão para fazer com que as colunas de dados se assemelhem mais em termos de intervalo. Você verá que, embora a pontuação de silhueta diminua, o 'cotovelo' no gráfico suaviza. Isso ocorre porque deixar os dados sem escala permite que dados com menos variância tenham mais peso. Leia mais sobre esse problema [aqui](https://stats.stackexchange.com/questions/21222/are-mean-normalization-and-feature-scaling-needed-for-k-means-clustering/21226#21226).\n", + "\n", + "## [**Quiz pós-aula**](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/30/)\n", + "\n", + "## **Revisão e Autoestudo**\n", + "\n", + "- Dê uma olhada em um simulador de K-Means [como este](https://user.ceng.metu.edu.tr/~akifakkus/courses/ceng574/k-means/). Você pode usar esta ferramenta para visualizar pontos de dados de amostra e determinar seus centróides. Você pode editar a aleatoriedade dos dados, o número de clusters e o número de centróides. Isso ajuda você a ter uma ideia de como os dados podem ser agrupados?\n", + "\n", + "- Além disso, confira [este material sobre K-Means](https://stanford.edu/~cpiech/cs221/handouts/kmeans.html) de Stanford.\n", + "\n", + "Quer testar suas habilidades recém-adquiridas de agrupamento em conjuntos de dados que se adaptam bem ao K-Means? Veja:\n", + "\n", + "- [Treine e avalie modelos de agrupamento](https://rpubs.com/eR_ic/clustering) usando Tidymodels e amigos\n", + "\n", + "- [Análise de Cluster K-Means](https://uc-r.github.io/kmeans_clustering), Guia de Programação R para Análise de Negócios da UC\n", + "\n", + "- [Agrupamento K-Means com princípios de dados organizados](https://www.tidymodels.org/learn/statistics/k-means/)\n", + "\n", + "## **Tarefa**\n", + "\n", + "[Experimente diferentes métodos de agrupamento](https://github.com/microsoft/ML-For-Beginners/blob/main/5-Clustering/2-K-Means/assignment.md)\n", + "\n", + "## AGRADECIMENTOS A:\n", + "\n", + "[Jen Looper](https://www.twitter.com/jenlooper) por criar a versão original em Python deste módulo ♥️\n", + "\n", + "[`Allison Horst`](https://twitter.com/allison_horst/) por criar as ilustrações incríveis que tornam o R mais acolhedor e envolvente. Encontre mais ilustrações em sua [galeria](https://www.google.com/url?q=https://github.com/allisonhorst/stats-illustrations&sa=D&source=editors&ust=1626380772530000&usg=AOvVaw3zcfyCizFQZpkSLzxiiQEM).\n", + "\n", + "Feliz aprendizado,\n", + "\n", + "[Eric](https://twitter.com/ericntay), Embaixador Estudante Gold da Microsoft Learn.\n", + "\n", + "

\n", + " \n", + "

Arte por @allison_horst
\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n---\n\n**Aviso Legal**: \nEste documento foi traduzido utilizando o serviço de tradução por IA [Co-op Translator](https://github.com/Azure/co-op-translator). Embora nos esforcemos para garantir a precisão, esteja ciente de que traduções automáticas podem conter erros ou imprecisões. O documento original em seu idioma nativo deve ser considerado a fonte oficial. Para informações críticas, recomenda-se a tradução profissional realizada por humanos. Não nos responsabilizamos por quaisquer mal-entendidos ou interpretações equivocadas decorrentes do uso desta tradução.\n" + ] + } + ] +} \ No newline at end of file diff --git a/translations/pt-BR/5-Clustering/2-K-Means/solution/notebook.ipynb b/translations/pt-BR/5-Clustering/2-K-Means/solution/notebook.ipynb new file mode 100644 index 000000000..c113ab4fa --- /dev/null +++ b/translations/pt-BR/5-Clustering/2-K-Means/solution/notebook.ipynb @@ -0,0 +1,546 @@ +{ + "metadata": { + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.7.0" + }, + "orig_nbformat": 2, + "kernelspec": { + "name": "python37364bit8d3b438fb5fc4430a93ac2cb74d693a7", + "display_name": "Python 3.7.0 64-bit ('3.7')" + }, + "metadata": { + "interpreter": { + "hash": "70b38d7a306a849643e446cd70466270a13445e5987dfa1344ef2b127438fa4d" + } + }, + "coopTranslator": { + "original_hash": "e867e87e3129c8875423a82945f4ad5e", + "translation_date": "2025-08-29T23:33:55+00:00", + "source_file": "5-Clustering/2-K-Means/solution/notebook.ipynb", + "language_code": "br" + } + }, + "nbformat": 4, + "nbformat_minor": 2, + "cells": [ + { + "source": [], + "cell_type": "markdown", + "metadata": {} + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Requirement already satisfied: seaborn in /Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages (0.11.1)\n", + "Requirement already satisfied: pandas>=0.23 in /Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages (from seaborn) (1.1.2)\n", + "Requirement already satisfied: matplotlib>=2.2 in /Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages (from seaborn) (3.1.0)\n", + "Requirement already satisfied: scipy>=1.0 in /Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages (from seaborn) (1.4.1)\n", + "Requirement already satisfied: numpy>=1.15 in /Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages (from seaborn) (1.19.2)\n", + "Requirement already satisfied: python-dateutil>=2.7.3 in /Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages (from pandas>=0.23->seaborn) (2.8.0)\n", + "Requirement already satisfied: pytz>=2017.2 in /Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages (from pandas>=0.23->seaborn) (2019.1)\n", + "Requirement already satisfied: kiwisolver>=1.0.1 in /Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages (from matplotlib>=2.2->seaborn) (1.1.0)\n", + "Requirement already satisfied: cycler>=0.10 in /Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages (from matplotlib>=2.2->seaborn) (0.10.0)\n", + "Requirement already satisfied: pyparsing!=2.0.4,!=2.1.2,!=2.1.6,>=2.0.1 in /Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages (from matplotlib>=2.2->seaborn) (2.4.0)\n", + "Requirement already satisfied: six>=1.5 in /Users/jenlooper/Library/Python/3.7/lib/python/site-packages (from python-dateutil>=2.7.3->pandas>=0.23->seaborn) (1.12.0)\n", + "Requirement already satisfied: setuptools in /Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages (from kiwisolver>=1.0.1->matplotlib>=2.2->seaborn) (45.1.0)\n", + "\u001b[33mWARNING: You are using pip version 20.2.3; however, version 21.1.2 is available.\n", + "You should consider upgrading via the '/Library/Frameworks/Python.framework/Versions/3.7/bin/python3.7 -m pip install --upgrade pip' command.\u001b[0m\n", + "Note: you may need to restart the kernel to use updated packages.\n" + ] + } + ], + "source": [ + "pip install seaborn" + ] + }, + { + "source": [ + "Comece de onde terminamos na última aula, com os dados importados e filtrados.\n" + ], + "cell_type": "markdown", + "metadata": {} + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + " name album \\\n", + "0 Sparky Mandy & The Jungle \n", + "1 shuga rush EVERYTHING YOU HEARD IS TRUE \n", + "2 LITT! LITT! \n", + "3 Confident / Feeling Cool Enjoy Your Life \n", + "4 wanted you rare. \n", + "\n", + " artist artist_top_genre release_date length popularity \\\n", + "0 Cruel Santino alternative r&b 2019 144000 48 \n", + "1 Odunsi (The Engine) afropop 2020 89488 30 \n", + "2 AYLØ indie r&b 2018 207758 40 \n", + "3 Lady Donli nigerian pop 2019 175135 14 \n", + "4 Odunsi (The Engine) afropop 2018 152049 25 \n", + "\n", + " danceability acousticness energy instrumentalness liveness loudness \\\n", + "0 0.666 0.8510 0.420 0.534000 0.1100 -6.699 \n", + "1 0.710 0.0822 0.683 0.000169 0.1010 -5.640 \n", + "2 0.836 0.2720 0.564 0.000537 0.1100 -7.127 \n", + "3 0.894 0.7980 0.611 0.000187 0.0964 -4.961 \n", + "4 0.702 0.1160 0.833 0.910000 0.3480 -6.044 \n", + "\n", + " speechiness tempo time_signature \n", + "0 0.0829 133.015 5 \n", + "1 0.3600 129.993 3 \n", + "2 0.0424 130.005 4 \n", + "3 0.1130 111.087 4 \n", + "4 0.0447 105.115 4 " + ], + "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
namealbumartistartist_top_genrerelease_datelengthpopularitydanceabilityacousticnessenergyinstrumentalnesslivenessloudnessspeechinesstempotime_signature
0SparkyMandy & The JungleCruel Santinoalternative r&b2019144000480.6660.85100.4200.5340000.1100-6.6990.0829133.0155
1shuga rushEVERYTHING YOU HEARD IS TRUEOdunsi (The Engine)afropop202089488300.7100.08220.6830.0001690.1010-5.6400.3600129.9933
2LITT!LITT!AYLØindie r&b2018207758400.8360.27200.5640.0005370.1100-7.1270.0424130.0054
3Confident / Feeling CoolEnjoy Your LifeLady Donlinigerian pop2019175135140.8940.79800.6110.0001870.0964-4.9610.1130111.0874
4wanted yourare.Odunsi (The Engine)afropop2018152049250.7020.11600.8330.9100000.3480-6.0440.0447105.1154
\n
" + }, + "metadata": {}, + "execution_count": 11 + } + ], + "source": [ + "\n", + "import matplotlib.pyplot as plt\n", + "import pandas as pd\n", + "import seaborn as sns\n", + "\n", + "\n", + "df = pd.read_csv(\"../../data/nigerian-songs.csv\")\n", + "df.head()" + ] + }, + { + "source": [ + "Vamos focar apenas em 3 gêneros. Talvez possamos formar 3 clusters!\n" + ], + "cell_type": "markdown", + "metadata": {} + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "Text(0.5, 1.0, 'Top genres')" + ] + }, + "metadata": {}, + "execution_count": 12 + }, + { + "output_type": "display_data", + "data": { + "text/plain": "
", + "image/svg+xml": "\n\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n\n", + "image/png": "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\n" + }, + "metadata": { + "needs_background": "light" + } + } + ], + "source": [ + "df = df[(df['artist_top_genre'] == 'afro dancehall') | (df['artist_top_genre'] == 'afropop') | (df['artist_top_genre'] == 'nigerian pop')]\n", + "df = df[(df['popularity'] > 0)]\n", + "top = df['artist_top_genre'].value_counts()\n", + "plt.figure(figsize=(10,7))\n", + "sns.barplot(x=top.index,y=top.values)\n", + "plt.xticks(rotation=45)\n", + "plt.title('Top genres',color = 'blue')" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + " name album \\\n", + "1 shuga rush EVERYTHING YOU HEARD IS TRUE \n", + "3 Confident / Feeling Cool Enjoy Your Life \n", + "4 wanted you rare. \n", + "5 Kasala Pioneers \n", + "6 Pull Up Everything Pretty \n", + "\n", + " artist artist_top_genre release_date length popularity \\\n", + "1 Odunsi (The Engine) afropop 2020 89488 30 \n", + "3 Lady Donli nigerian pop 2019 175135 14 \n", + "4 Odunsi (The Engine) afropop 2018 152049 25 \n", + "5 DRB Lasgidi nigerian pop 2020 184800 26 \n", + "6 prettyboydo nigerian pop 2018 202648 29 \n", + "\n", + " danceability acousticness energy instrumentalness liveness loudness \\\n", + "1 0.710 0.0822 0.683 0.000169 0.1010 -5.640 \n", + "3 0.894 0.7980 0.611 0.000187 0.0964 -4.961 \n", + "4 0.702 0.1160 0.833 0.910000 0.3480 -6.044 \n", + "5 0.803 0.1270 0.525 0.000007 0.1290 -10.034 \n", + "6 0.818 0.4520 0.587 0.004490 0.5900 -9.840 \n", + "\n", + " speechiness tempo time_signature \n", + "1 0.3600 129.993 3 \n", + "3 0.1130 111.087 4 \n", + "4 0.0447 105.115 4 \n", + "5 0.1970 100.103 4 \n", + "6 0.1990 95.842 4 " + ], + "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
namealbumartistartist_top_genrerelease_datelengthpopularitydanceabilityacousticnessenergyinstrumentalnesslivenessloudnessspeechinesstempotime_signature
1shuga rushEVERYTHING YOU HEARD IS TRUEOdunsi (The Engine)afropop202089488300.7100.08220.6830.0001690.1010-5.6400.3600129.9933
3Confident / Feeling CoolEnjoy Your LifeLady Donlinigerian pop2019175135140.8940.79800.6110.0001870.0964-4.9610.1130111.0874
4wanted yourare.Odunsi (The Engine)afropop2018152049250.7020.11600.8330.9100000.3480-6.0440.0447105.1154
5KasalaPioneersDRB Lasgidinigerian pop2020184800260.8030.12700.5250.0000070.1290-10.0340.1970100.1034
6Pull UpEverything Prettyprettyboydonigerian pop2018202648290.8180.45200.5870.0044900.5900-9.8400.199095.8424
\n
" + }, + "metadata": {}, + "execution_count": 13 + } + ], + "source": [ + "df.head()" + ] + }, + { + "source": [ + "Quão limpa está esta base de dados? Verifique a presença de outliers usando boxplots. Vamos nos concentrar em colunas com menos outliers (embora você possa limpar os outliers). Boxplots podem mostrar o intervalo dos dados e ajudar a escolher quais colunas usar. Nota: Boxplots não mostram variância, um elemento importante para dados bem agrupáveis (https://stats.stackexchange.com/questions/91536/deduce-variance-from-boxplot)\n" + ], + "cell_type": "markdown", + "metadata": {} + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "" + ] + }, + "metadata": {}, + "execution_count": 14 + }, + { + "output_type": "display_data", + "data": { + "text/plain": "
", + "image/svg+xml": "\n\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n\n", + "image/png": "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AAA5ggoAAAAAAAAAAAAAACBHUAEAAAAAAAAAAAAAAOQIKgAAAAAAAAAAAAAAgBxBBQAAAAAAAAAAAAAAkCOoAAAAAAAAAAAAAAAAcgQVAAAAAAAAAAAAAABAjqACAAAAAAAAAAAAAADIEVQAAAAAAAAAAAAAAAA5ggoAAAAAAAAAAAAAACBHUAEAAAAAAAAAAAAAAOQIKgAAAAAAAAAAAAAAgBxBBQAAAAAAAAAAAAAAkCOoAAAAAAAAAAAAAAAAcgQVAAAAAAAAAAAAAABAjqACAAAAAAAAAAAAAADIEVQAAAAAAAAAAAAAAAA5ggoAAAAAAAAAAAAAACBHUAEAAAAAAAAAAAAAAOQIKgAAAAAAAAAAAAAAgBxBBQAAAAAAAAAAAAAAkCOoAAAAAAAAAAAAAAAAcgQVAAAAAAAAAAAAAABAjqACAAAAAAAAAAAAAADIEVQAAAAAAAAAAAAAAAA5ggoAAAAAAAAAAAAAACBHUAEAAAAAAAAAAAAAAOQIKgAAAAAAAAAAAAAAgBxBBQAAAAAAAAAAAAAAkCOoAAAAAAAAAAAAAAAAcgQVAAAAAAAAAAAAAABAjqACAAAAAAAAAAAAAADIEVQAAAAAAAAAAAAAAAA5ggoAAAAAAAAAAAAAACBHUAEAAAAAAAAAAAAAAOQIKgAAAAAAAAAAAAAAgBxBBQAAAAAAAAAAAAAAkCOoAAAAAAAAAAAAAAAAcgQVAAAAAAAAAAAAAABAjqACAAAAAAAAAAAAAADIEVQAAAAAAAAAAAAAAAA5ggoAAAAAAAAAAAAAACBHUAEAAAAAAAAAAAAAAOQIKgAAAAAAAAAAAAAAgBxBBQAAAAAAAAAAAAAAkCOoAAAAAAAAAAAAAAAAcgQVAAAAAAAAAAAAAABAjqACAAAAAAAAAAAAAADIEVQAAAAAAAAAAAAAAAA5ggoAAAAAAAAAAAAAACBHUAEAAAAAAAAAAAAAAOQIKgAAAAAAAAAAAAAAgBxBBQAAAAAAAAAAAAAAkCOoAAAAAAAAAAAAAAAAcgQVAAAAAAAAAAAAAABAjqACAAAAAAAAAAAAAADIEVQAAAAAAAAAAAAAAAA5ggoAAAAAAAAAAAAAACBHUAEAAAAAAAAAAAAAAOQIKgAAAAAAAAAAAAAAgBxBBQAAAAAAAAAAAAAAkCOoAAAAAAAAAAAAAAAAcgQVAAAAAAAAAAAAAABAjqACAAAAAAAAAAAAAADIEVQAAAAAAAAAAAAAAAA5ggoAAAAAAAAAAAAAACBHUAEAAAAAAAAAAAAAAOTMpx5g16xWq7FcLu9dOz4+HrOZ9gQAAHj5nHmAh/iOAAAAdo1zCgCwLX53AAD7zG+dzxNUfGS5XI7z8/N71y4uLsbJyclEEwEAADwfZx7gIb4jAACAXeOcAgBsi98dAMA+81vn8yQlAAAAAAAAAAAAAABAjqACAAAAAAAAAAAAAADIEVQAAAAAAAAAAAAAAAA5ggoAAAAAAAAAAAAAACBHUAEAAAAAAAAAAAAAAOQIKgAAAAAAAAAAAAAAgBxBBQAAAAAAAAAAAAAAkCOoAAAAAAAAAAAAAAAAcgQVAAAAAAAAAAAAAABAjqACAAAAAAAAAAAAAADIEVQAAAAAAAAAAAAAAAA5ggoAAAAAAAAAAAAAACBHUAEAAAAAAAAAAAAAAOQIKgAAAAAAAAAAAAAAgBxBBQAAAAAAAAAAAAAAkCOoAAAAAAAAAAAAAAAAcgQVAAAAAAAAAAAAAABAjqACAAAAAAAAAAAAAADIEVQAAAAAAAAAAAAAAAA5ggoAAAAAAAAAAAAAACBHUAEAAAAAAAAAAAAAAOQIKgAAAAAAAAAAAAAAgBxBBQAAAAAAAAAAAAAAkCOoAAAAAAAAAAAAAAAAcgQVAAAAAAAAAAAAAABAjqACAAAAAAAAAAAAAADIEVQAAAAAAAAAAAAAAAA5ggoAAAAAAAAAAAAAACBHUAEAAAAAAAAAAAAAAOQIKgAAAAAAAAAAAAAAgBxBBQAAAAAAAAAAAAAAkCOoAAAAAAAAAAAAAAAAcgQVAAAAAAAAAAAAAABAjqACAAAAAAAAAAAAAADIEVQAAAAAAAAAAAAAAAA5ggoAAAAAAAAAAAAAACBHUAEAAAAAAAAAAAAAAOQIKgAAAAAAAAAAAAAAgBxBBQAAAAAAAAAAAAAAkCOoAAAAAAAAAAAAAAAAcgQVAAAAAAAAAAAAAABAjqACAAAAAAAAAAAAAADIEVQAAAAAAAAAAAAAAAA5ggoAAAAAAAAAAAAAACBHUAEAAAAAAAAAAAAAAOQIKgAAAAAAAAAAAAAAgBxBBQAAAAAAAAAAAAAAkCOoAAAAAAAAAAAAAAAAcgQVAAAAAAAAAAAAAABAjqACAAAAAAAAAAAAAADIEVQAAAAAAAAAAAAAAAA5ggoAAAAAAAAAAAAAACBHUAEAAAAAAAAAAAAAAOQIKgAAAAAAAAAAAAAAgBxBBQAAAAAAAAAAAAAAkCOoAAAAAAAAAAAAAAAAcgQVAAAAAAAAAAAAAABAjqACAAAAAAAAAAAAAADIEVQAAAAAAAAAAAAAAAA5ggoAAAAAAAAAAAAAACBHUAEAAAAAAAAAAAAAAOQIKgAAAAAAAAAAAAAAgBxBBQAAAAAAAAAAAAAAkCOoAAAAAAAAAAAAAAAAcgQVAAAAAAAAAAAAAABAjqACAAAAAAAAAAAAAADIEVQAAAAAAAAAAAAAAAA5ggoAAAAAAAAAAAAAACBHUAEAAAAAAAAAAAAAAOQIKgAAAAAAAAAAAAAAgBxBBQAAAAAAAAAAAAAAkCOoAAAAAAAAAAAAAAAAcgQVAAAAAAAAAAAAAABAjqACAAAAAAAAAAAAAADIEVQAAAAAAAAAAAAAAAA5ggoAAAAAAAAAAAAAACBHUAEAAAAAAAAAAAAAAOQIKgAAAAAAAAAAAAAAgBxBBQAAAAAAAAAAAAAAkCOoAAAAAAAAAAAAAAAAcgQVAAAAAAAAAAAAAABAjqACAAAAAAAAAAAAAADIEVQAAAAAAAAAAAAAAAA5ggoAAAAAAAAAAAAAACBHUAEAAAAAAAAAAAAAAOQIKgAAAAAAAAAAAAAAgBxBBQAAAAAAAAAAAAAAkCOoAAAAAAAAAAAAAAAAcgQVAAAAAAAAAAAAAABAjqACAAAAAAAAAAAAAADIEVQAAAAAAAAAAAAAAAA5ggoAAAAAAAAAAAAAACBHUAEAAAAAAAAAAAAAAOQIKgAAAAAAAAAAAAAAgBxBBQAAAAAAAAAAAAAAkCOoAAAAAAAAAAAAAAAAcgQVAAAAAAAAAAAAAABAjqACAAAAAAAAAAAAAADIEVQAAAAAAAAAAAAAAAA5ggoAAAAAAAAAAAAAACBHUAEAAAAAAAAAAAAAAOQIKgAAAAAAAAAAAAAAgBxBBQAAAAAAAAAAAAAAkCOoAAAAAAAAAAAAAAAAcgQVAAAAAAAAAAAAAABAjqACAAAAAAAAAAAAAADIEVQAAAAAAAAAAAAAAAA5ggoAAAAAAAAAAAAAACBHUAEAAAAAAAAAAAAAAOQIKgAAAAAAAAAAAAAAgBxBBQAAAAAAAAAAAAAAkCOoAAAAAAAA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AAAAAAAgjqACAAAAAAAAAAAAAACII6gAAAAAAAAAAAAAAADiCCoAAAAAAAAAAAAAAIA4ggoAAAAAAAAAAAAAACCOoAIAAAAAAAAAAAAAAIgjqAAAAAAAAAAAAAAAAOIIKgAAAAAAAAAAAAAAgDiCCgAAAAAAAAAAAAAAII6gAgAAAAAAAAAAAAAAiCOoAAAAAAAAAAAAAAAA4ggqAAAAAAAAAAAAAACAOIIKAAAAAAAAAAAAAAAgjqACAAAAAAAAAAAAAACII6gAAAAAAAAAAAAAAADiCCoAAAAAAAAAAAAAAIA4ggoAAAAAAAAAAAAAACCOoAIAAAAAAAAAAAAAAIgjqAAAAAAAAAAAAAAAAOIIKgAAAAAAAAAAAAAAgDiCCgAAAAAAAAAAAAAAII6gAgAAAAAAAAAAAAAAiCOoAAAAAAAAAAAAAAAA4ggqAAAAAAAAAAAAAACAOIIKAAAAAAAAAAAAAAAgjqACAAAAAAAAAAAAAACII6gAAAAAAAAAAAAAAADiCCoAAAAAAAAAAAAAAIA4ggoAAAAAAAAAAAAAACCOoAIAAAAAAAAAAAAAAIgjqAAAAAAAAAAAAAAAAOIIKgAAAAAAAAAAAAAAgDiCCgAAAAAAAAAAAAAAII6gAgAAAAAAAAAAAAAAiCOoAAAAAAAAAAAAAAAA4ggqAAAAAAAAAAAAAACAOIIKAAAAAAAAAAAAAAAgjqACAAAAAAAAAAAAAACII6gAAAAAAAAAAAAAAADiCCoAAAAAAAAAAAAAAIA4ggoAAAAAAAAAAAAAACCOoAIAAAAAAAAAAAAAAIgjqAAAAAAAAAAAAAAAAOIIKgAAAAAAAAAAAAAAgDiCCgAAAAAAAAAAAAAAII6gAgAAAAAAAAAAAAAAiCOoAAAAAAAAAAAAAAAA4ggqAAAAAAAAAAAAAACAOIIKAAAAAAAAAAAAAAAgjqACAAAAAAAAAAAAAACII6gAAAAAAAAAAAAAAADiCCoAAAAAAAAAAAAAAIA4ggoAAAAAAAAAAAAAACCOoAIAAAAAAAAAAAAAAIgjqAAAAAAAAAAAAAAAAOIIKgAAAAAAAAAAAAAAgDiCCgAAAAAAAAAAAAAAII6gAgAAAAAAAAAAAAAAiCOoAAAAAAAAAAAAAAAA4ggqAAAAAAAAAAAAAACAOIIKAAAAAAAAAAAAAAAgjqACAAAAAAAAAAAAAACII6gAAAAAAAAAAAAAAADiCCoAAAAAAAAAAAAAAIA4ggoAAAAAAAAAAAAAACCOoAIAAAAAAAAAAAAAAIgjqAAAAAAAAAAAAAAAAOIIKgAAAAAAAAAAAAAAgDiCCgAAAAAAAAAAAAAAII6gAgAAAAAAAAAAAAAAiCOoAAAAAAAAAAAAAAAA4ggqAAAAAAAAAAAAAACAOIIKAAAAAAAAAAAAAAAgjqACAAAAAAAAAAAAAACII6gAAAAAAAAAAAAAAADiCCoAAAAAAAAAAAAAAIA4ggoAAAAAAAAAAAAAACCOoAIAAAAAAAAAAKrtqYAAACAASURBVAAAAIgjqAAAAAAAAAAAAAAAAOIIKgAAAAAAAAAAAAAAgDiCCgAAAAAAAAAAAAAAII6gAgAAAAAAAAAAAAAAiCOoAAAAAAAAAAAAAAAA4ggqAAAAAAAAAAAAAACAOIIKAAAAAAAAAAAAAAAgjqACAAAAAAAAAAAAAACII6gAAAAAAAAAAAAAAADiCCoAAAAAAAAAAAAAAIA4ggoAAAAAAAAAAAAAACCOoAIAAAAAAAAAAAAAAIgjqAAAAAAAAAAAAAAAAOIIKgAAAAAAAAAAAAAAgDiCCgAAAAAAAAAAAAAAII6gAgAAAAAAAAAAAAAAiCOoAAAAAAAAAAAAAAAA4ggqAAAAAAAAAAAAAACAOIIKAAAAAAAAAAAAAAAgjqACAAAAAAAAAAAAAACII6gAAAAAAAAAAAAAAADiCCoAAAAAAAAAAAAAAIA4ggoAAAAAAAAAAAAAACCOoAIAAAAAAAAAAAAAAIgjqAAAAAAAAAAAAAAAAOIIKgAAAAAAAAAAAAAAgDiCCgAAAAAAAAAAAAAAII6gAgAAAAAAAAAAAAAAiCOoAAAAAAAAAAAAAAAA4ggqAAAAAAAAAAAAAACAOIIKAAAAAAAAAAAAAAAgjqACAAAAAAAAAAAAAACII6gAAAAAAAAAAAAAAADiCCoAAAAAAAAAAAAAAIA4ggoAAAAAAAAAAAAAACCOoAIAAAAAAAAAAAAAAIgjqAAAAAAAAAAAAAAAAOIIKgAAAAAAAAAAAAAAgDirfQ9Qzfr6envy5Mkb1wAAAIbAPQ9wHXsEAABQjfsUAGBRvO4AAIbMa523E1T8ycrKStvY2Oh7DAAAgFvhnge4jj0CAACoxn0KALAoXncAAEPmtc7brfQ9AAAAAAAAAAAAAAAAwKIJKgAAAAAAAAAAAAAAgDiCCgAAAAAAAAAAAAAAII6gAgAAAAAAAAAAAAAAiCOoAAAAAAAAAAAAAAAA4ggqAAAAAAAAAAAAAACAOIIKAAAAAAAAAAAAAAAgjqACAAAAAAAAAAAAAACII6gAAAAAAAAAAAAAAADiCCoAAAAAAAAAAAAAAIA4ggoAAAAAAAAAAAAAACCOoAIAAAAAAAAAAAAAAIgjqAAAAAAAAAAAAAAAAOIIKgAAAAAAAAAAAAAAgDiCCgAAAAAAAAAAAAAAII6gAgAAAAAAAAAAAAAAiCOoAAAAAAAAAAAAAAAA4ggqAAAAAAAAAAAAAACAOIIKAAAAAAAAAAAAAAAgjqACAAAAAAAAAAAAAACII6gAAAAAAAAAAAAAAADiCCoAAAAAAAAAAAAAAIA4ggoAAAAAAAAAAAAAACCOoAIAAAAAAAAAAAAAAIgjqAAAAAAAAAAAAAAAAOIIKgAAAAAAAAAAAAAAgDiCCgAAAAAAAAAAAAAAII6gAgAAAAAAAAAAAAAAiCOoAAAAAAAAAAAAAAAA4ggqAAAAAAAAAAAAAACAOIIKAAAAAAAAAAAAAAAgjqACAAAAAAAAAAAAAACII6gAAAAAAAAAAAAAAADiCCoAAAAAAAAAAAAAAIA4ggoAAAAAAAAAAAAAACCOoAIAAAAAAAAAAAAAAIgjqAAAAAAAAAAAAAAAAOIIKgAAAAAAAAAAAAAAgDiCCgAAAAAAAAAAAAAAII6gAgAAAAAAAAAAAAAAiCOoAAAAAAAAAAAAAAAA4ggqAAAAAAAAAAAAAACAOIIKAAAAAAAAAAAAAAAgjqACAAAAAAAAAAAAAACII6gAAAAAAAAAAAAAAADiCCoAAAAAAAAAAAAAAIA4ggoAAAAAAAAAAAAAACCOoAIAAAAAAAAAAAAAAIgjqAAAAAAAAAAAAAAAAOIIKgAAAAAAAAAAAAAAgDiCCgAAAAAAAAAAAAAAII6gAgAAAAAAAAAAAAAAiCOoAAAAAAAAAAAAAAAA4ggqAAAAAAAAAAAAAACAOIIKAAAAAAAAAAAAAAAgjqACAAAAAAAAAAAAAACII6gAAAAAAAAAAAAAAADiCCoAAAAAAAAAAAAAAIA4ggoAAAAAAAAAAAAAACCOoAIAAAAAAAAAAAAAAIgjqAAAAAAAAAAAAAAAAOIIKgAAAAAAAAAAAAAAgDiCCgAAAAAAAAAAAAAAII6gAgAAAAAAAAAAAAAAiCOoAAAAAAAAAAAAAAAA4ggqAAAAAAAAAAAAAACAOIIKAAAAAAAAAAAAAAAgjqACAAAAAAAAAAAAAACII6gAAAAAAAAAAAAAAADiCCoAAAAAAAAAAAAAAIA4ggoAAAAAAAAAAAAAACCOoAIAAAAAAAAAAAAAAIgjqAAAAAAAAAAAAAAAAOIIKgAAAAAAAAAAAAAAgDiCCgAAAAAAAAAAAAAAII6gAgAAAAAAAAAAAAAAiCOoAAAAAAAAAAAAAAAA4ggqAAAAAAAAAAAAAACAOIIKAAAAAAAAAAAAAAAgjqACAAAAAAAAAAAAAACII6gAAAAAAAAAAAAAAADiCCoAAAAAAAAAAAAAAIA4ggoAAAAAAAAAAAAAACCOoAIAAAAAAAAAAAAAAIgjqAAAAAAAAAAAAAAAAOIIKgAAAAAAAAAAAAAAgDiCCgAAAAAAAAAAAAAAII6gAgAAAAAAAAAAAAAAiCOoAAAAAAAAAAAAAAAA4ggqAAAAAAAAAAAAAACAOIIKAAAAAAAAAAAAAAAgjqACAAAAAAAAAAAAAACII6gAAAAAAAAAAAAAAADiCCoAAAAAAAAAAAAAAIA4ggoAAAAAAAAAAAAAACCOoAIAAAAAAAAAAAAAAIgjqAAAAAAAAAAAAAAAAOIIKgAAAAAAAAAAAAAAgDiCCgAAAAAAAAAAAAAAII6gAgAAAAAAAAAAAAAAiCOoAAAAAAAAAAAAAAAA4ggqAAAAAAAAAAAAAACAOIIKAAAAAAAAAAAAAAAgjqACAAAAAAAAAAAAAACII6gAAAAAAAAAAAAAAADiCCoAAAAAAAAAAAAAAIA4ggoAAAAAAAAAAAAAACCOoAIAAAAAAAAAAAAAAIgjqAAAAAAAAAAAAAAAAOIIKgAAAAAAAAAAAAAAgDiCCgAAAAAAAAAAAAAAII6gAgAAAAAAAAAAAAAAiCOoAAAAAAAAAAAAAAAA4ggqAAAAAAAAAAAAAACAOIIKAAAAAAAAAAAAAAAgjqACAAAAAAAAAAAAAACII6gAAAAAAAAAAAAAAADiCCoAAAAAAAAAAAAAAIA4ggoAAAAAAAAAAAAAACCOoAIAAAAAAAAAAAAAAIgjqAAAAAAAAAAAAAAAAOIIKgAAAAAAAAAAAAAA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AAAAAAAAAAAAADmCCgAAAAAAAAAAAAAAIEdQAQAAAAAAAAAAAAAA5AgqAAAAAAAAAAAAAACAHEEFAAAAAAAAAAAAAACQI6gAAAAAAAAAAAAAAAByBBUAAAAAAAAAAAAAAECOoAIAAAAAAAAAAAAAAMgRVAAAAAAAAAAAAAAAADmCCgAAAAAAAAAAAAAAIEdQAQAAAAAAAAAAAAAA5AgqAAAAAAAAAAAAAACAHEEFAAAAAAAAAAAAAACQI6gAAAAAAAAAAAAAAAByBBUAAAAAAAAAAAAAAECOoAIAAAAAAAAAAAAAAMgRVAAAAAAAAAAAAAAAADmCCgAAAAAAAAAAAAAAIEdQAQAAAAAAAAAAAAAA5AgqAAAAAAAAAAAAAACAHEEFAAAAAAAAAAAAAACQI6gAAAAAAAAAAAAAAAByBBUAAAAAAAAAAAAAAECOoAIAAAAAAAAAAAAAAMgRVAAAAAAAAAAAAAAAADmCCgAAAAAAAAAAAAAAIEdQAQAAAAAAAAAAAAAA5AgqAAAAAAAAAAAAAACAHEEFAAAAAAAAAAAAAACQI6gAAAAAAAAAAAAAAAByBBUAAAAAAAAAAAAAAECOoAIAAAAAAAAAAAAAAMgRVAAAAAAAAAAAAAAAADmCCgAAAAAAAAAAAAAAIEdQAQAAAAAAAAAAAAAA5AgqAAAAAAAAAAAAAACAHEEFAAAAAAAAAAAAAACQI6gAAAAAAAAAAAAAAAByBBUAAAAAAAAAAAAAAECOoAIAAAAAAAAAAAAAAMgRVAAAAAAAAAAAAAAAADmCCgAAAAAAAAAAAAAAIEdQAQAAAAAAAAAAAAAA5AgqAAAAAAAAAAAAAACAHEEFAAAAAAAAAAAAAACQI6gAAAAAAAAAAAAAAAByBBUAAAAAAAAAAAAAAECOoAIAAAAAAAAAAAAAAMgRVAAAAAAAAAAAAAAAADmCCgAAAAAAAAAAAAAAIEdQAQAAAAAAAAAAAAAA5AgqAAAAAAAAAAAAAACAHEEFAAAAAAAAAAAAAACQI6gAAAAAAAAAAAAAAAByBBUAAAAAAAAAAAAAAECOoAIAAAAAAAAAAAAAAMgRVAAAAAAAAAAAAAAAADmCCgAAAAAAAAAAAAAAIEdQAQAAAAAAAAAAAAAA5AgqAAAAAAAAAAAAAACAHEEFAAAAAAAAAAAAAACQI6gAAAAAAAAAAAAAAAByBBUAAAAAAAAAAAAAAECOoAIAAAAAAAAAAAAAAMgRVAAAAAAAAAAAAAAAADmCCgAAAAAAAAAAAAAAIEdQAQAAAAAAAAAAAAAA5AgqAAAAAAAAAAAAAACAHEEFAAAAAAAAAAAAAACQI6gAAAAAAAAAAAAAAAByBBUAAAAAAAAAAAAAAECOoAIAAAAAAAAAAAAAAMgRVAAAAAAAAAAAAAAAADmCCgAAAAAAAAAAAAAAIEdQAQAAAAAAAAAAAAAA5AgqAAAAAAAAAAAAAACAHEEFAAAAAAAAAAAAAACQI6gAAAAAAAAAAAAAAAByBBUAAAAAAAAAAAAAAECOoAIAAAAAAAAAAAAAAMgRVAAAAAAAAAAAAAAAADmCCgAAAAAAAAAAAAAAIEdQAQAAAAAAAAAAAAAA5AgqAAAAAAAAAAAAAACAHEEFAAAAAAAAAAAAAACQI6gAAAAAAAAAAAAAAAByBBUAAAAAAAAAAAAAAECOoAIAAAAAAAAAAAAAAMgRVAAAAAAAAAAAAAAAADmCCgAAAAAAAAAAAAAAIEdQAQAAAAAAAAAAAAAA5AgqAAAAAAAAAAAAAACAHEEFAAAAAAAAAAAAAACQI6gAAAAAAAAAAAAAAAByBBUAAAAAAAAAAAAAAECOoAIAAAAAAAAAAAAAAMiZTz3Aulkulx+dvXnzZjx//nzMZvoTAAAAYHstl8uxWCyune3t7dmJAHwmn68AAAAA28W+B4BN47vr0wQVN1xcXHx0dnx8PE5OTsb+/v4EEwEAAACsxmKxGEdHR9fO7EQAPp/PVwAAAIDtYt8DwKbx3fVpkhIAAAAAAAAAAAAAACBHUAEAAAAAAAAAAAAAAOQIKgAAAAAAAAAAAAAAgBxBBQAAAAAAAAAAAAAAkCOoAAAAAAAAAAAAAAAAcgQVAAAAAAAAAAAAAABAjqACAAAAAAAAAAAAAADIEVQAAAAAAAAAAAAAAAA5ggoAAAAAAAAAAAAAACBHUAEAAAAAAAAAAAAAAOQIKgAAAAAAAAAAAAAAgBxBBQAAAAAAAAAAAAAAkCOoAAAAAAAAAAAAAAAAcgQVAAAAAAAAAAAAAABAjqACAAAAAAAAAAAAAADIEVQAAAAAAAAAAAAAAAA5ggoAAAAAAAAAAAAAACBHUAEAAAAAAAAAAAAAAOQIKgAAAAAAAAAAAAAAgBxBBQAAAAAAAAAAAAAAkCOoAAAAAAAAAAAAAAAAcgQVAAAAAAAAAAAAAABAjqACAAAAAAAAAAAAAADIEVQAAAAAAAAAAAAAAAA5ggoAAAAAAAAAAAAAACBHUAEAAAAAAAAAAAAAAOQIKgAAAAAAAAAAAAAAgBxBBQAAAAAAAAAAAAAAkCOoAAAAAAAAAAAAAAAAcgQVAAAAAAAAAAAAAABAjqACAAAAAAAAAAAAAADIEVQAAAAAAAAAAAAAAAA5ggoAAAAAAAAAAAAAACBHUAEAAAAAAAAAAAAAAOQIKgAAAAAAAAAAAAAAgBxBBQAAAAAAAAAAAAAAkCOoAAAAAAAAAAAAAAAAcgQVAAAAAAAAAAAAAABAjqACAAAAAAAAAAAAAADIEVQAAAAAAAAAAAAAAAA5ggoAAAAAAAAAAAAAACBHUAEAAAAAAAAAAAAAAOQIKgAAAAAAAAAAAAAAgBxBBQAAAAAAAAAAAAAAkCOoAAAAAAAAAAAAAAAAcgQVAAAAAAAAAAAAAABAjqACAAAAAAAAAAAAAADIEVQAAAAAAAAAAAAAAAA5ggoAAAAAAAAAAAAAACBHUAEAAAAAAAAAAAAAAOQIKgAAAAAAAAAAAAAAgBxBBQAAAAAAAAAAAAAAkCOoAAAAAAAAAAAAAAAAcgQVAAAAAAAAAAAAAABAjqACAAAAAAAAAAAAAADIEVQAAAAAAAAAAAAAAAA5ggoAAAAAAAAAAAAAACBHUAEAAAAAAAAAAAAAAOQIKgAAAAAAAAAAAAAAgBxBBQAAAAAAAAAAAAAAkCOoAAAAAAAAAAAAAAAAcgQVAAAAAAAAAAAAAABAjqACAAAAAAAAAAAAAADIEVQAAAAAAAAAAAAAAAA5ggoAAAAAAAAAAAAAACBHUAEAAAAAAAAAAAAAAOQIKgAAAAAAAAAAAAAAgBxBBQAAAAAAAAAAAAAAkCOoAAAAAAAAAAAAAAAAcgQVAAAAAAAAAAAAAABAjqACAAAAAAAAAAAAAADIEVQAAAAAAAAAAAAAAAA5ggoAAAAAAAAAAAAAACBHUAEAAAAAAAAAAAAAAOQIKgAAAAAAAAAAAAAAgBxBBQAAAAAAAAAAAAAAkCOoAAAAAAAAAAAAAAAAcgQVAAAAAAAAAAAAAABAjqACAAAAAAAAAAAAAADIEVQAAAAAAAAAAAAAAAA5ggoAAAAAAAAAAAAAACBHUAEAAAAAAAAAAAAAAOQIKgAAAAAAAAAAAAAAgBxBBQAAAAAAAAAAAAAAkCOoAAAAAAAAAAAAAAAAcgQVAAAAAAAAAAAAAABAjqACAAAAAAAAAAAAAADIEVQAAAAAAAAAAAAAAAA5ggoAAAAAAAAAAAAAACBHUAEAAAAAAAAAAAAAAOQIKgAAAAAAAAAAAAAAgBxBBQAAAAAAAAAAAAAAkCOoAAAAAAAAAAAAAAAAcgQVAAAAAAAAAAAAAABAjqACAAAAAAAAAAAAAADIEVQAAAAAAAAAAAAAAAA5ggoAAAAAAAAAAAAAACBHUAEAAAAAAAAAAAAAAOQIKgAAAAAAAAAAAAAAgBxBBQAAAAAAAAAAAAAAkCOoAPibvfuJjeuq/wZ87Lj5ya/SNEZq+6LWYovUIL1ITXYNKxYsQIioiaNEqhDQFJImFFg6RaLuFikhEW1ZISVK0qqoArGhK9JVky4imggQC6SGqmoiZJpatX6uY78bbDnj8Z07M/fM3Lnf55EQ9vjc8+/eOb33jD8xAAAAAAAAAAAAABCOQAUAAAAAAAAAAAAAABCOQAUAAAAAAAAAAAAAABCOQAUAAAAAAAAAAAAAABCOQAUAAAAAAAAAAAAAABCOQAUAAAAAAAAAAAAAABCOQAUAAAAAAAAAAAAAABCOQAUAAAAAAAAAAAAAABCOQAUAAAAAAAAAAAAAABCOQAUAAAAAAAAAAAAAABCOQAUAAAAAAAAAAAAAABCOQAUAAAAAAAAAAAAAABCOQAUAAAAAAAAAAAAAABCOQAUAAAAAAAAAAAAAABCOQAUAAAAAAAAAAAAAABCOQAUAAAAAAAAAAAAAABCOQAUAAAAAAAAAAAAAABCOQAUAAAAAAAAAAAAAABCOQAUAAAAAAAAAAAAAABCOQAUAAAAAAAAAAAAAABCOQEVJH330UfrHP/6RlpaW0sLCwvrrCwsLaWlpKS0tLa2/tvZ962vtbCy3VZnW8v0oe3y/7Qyr7rrJMdatrqvWtiLNM0TlfQ5EYb3Lx9wCADRT0X1eu591W77b9te+n5+f37L8Vsd02mevuu/dau1n0++xo4wzl17nzXx3VsUc1WWec/UjR70bPzMdRXU550A9WSMgJu/9wSrz+3WDOied2nFtAECzCVSU9MMf/jD94Ac/SN/97nfTgQMH0vz8fJqfn08HDhxIzz//fHrhhRfS4uJiWlxcTC+88EI6efLkfa/99Kc/TYuLi/fVuVb2hRdeSPPz823LtJbvVKZI2eP7bWdYdddNjrFurHOrr3O1DdSL9zkQhfUuH3MLANBMRfd57X7Wbflu21/7/p///Gfav39/+uijjzaVX9snbz1m4775IPrerdZ+ltnnH2Xtzgvl9XpNenbrrIo5qss85+pHjnrXPifdKixXd3U550A9WSMgJu/9wWrdD+j2ub/qvhS149oAgOYTqOjShx9+mD777LN06tSpNDs7mz777LP097//Pd28eTNduHAhnT9/Pt28eTP99a9/ve+1999/P124cOG+utbK3rx5M83OzrYt01q+U5kiZY/vt51h1V03Oca6sc6tvs7VNlAv3udAFNa7fMwtAEAzFd3ntftZt+W7bX/t+x/96EdpZWUlnThxYlP5tX3y1mM27psPou/dau1nmX3+UdbuvFBer9ekZ7fOqpijusxzrn7kqHftc9JTp05VVucg1eWcA/VkjYCYvPcHq3U/oNvn/qr7UtSOawMAmk+gokc3btxIN2/evO+1ixcvposXL2567dKlSymllC5fvpxu3bqVUkrp1q1b66+nlNbr2lhmo1u3bqXLly8XlilS9vh+26miD02QY6wb67x06dL69bPx68uXL6erV6+GmWeIKtJ6CsRmvcvH3AIANFPRfV67n3Vbvtv2N+5Vrv0rjnfu3El//OMf18tv3Ce/dOnSfT3bnlAAACAASURBVMes7Zu37oHm6Hu3Nrax1s9O+/yjrN14mzjOXHq9Jj27dVbFHNVlnnP1I0e9V69eXV8Lbty4ka5evdp3nYNUl3MO1JM1AmLy3h+s1v2Adr9fN6hz0qkd1wYAxCBQUaF79+6llZWVTa/du3cvpZTS559/ns6cOZNWVlbS6dOn11/faK3M6urq+murq6vpzJkzaXl5ecsyRcoe3287VfShCXKMtbXO5eXl9etn49eff/55mpubCzHPEFWk9RSIzXqXj7kFAGimovu8dj87ffp0On36dOnyne4Z2x2zca9yo1/+8pdpeXl50z758vJy22Na90Cr7nu3Wtto1bR77K3G27Rx5tLrNenZrbMq5qgu85yrHznqXVlZSXNzc/e9Njc3t+kz0rqqyzkH6skaATF57w/W6urqpv2A1t+vK3rur7ovRefetQEAcQhUDNi1a9fSq6++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OAIVAAAAAAAAAAAAAABAOAIVAAAAAAAAAAAAAABAOAIVAAAAAAAAAAAAAABAOAIVAAAAAAAAAAAAAABAOAIVAAAAAAAAAAAAAABAOAIVAAAAAAAAAAAAAABAOAIVAAAAAAAAAAAAAABAOAIVAAAAAAAAAAAAAABAOAIVAAAAAAAAAAAAAABAOAIVAAAAAAAAAAAAAABAOAIVAAAAAAAAAAAAAABAOAIVAAAAAAAAAAAAAABAOAIVAAAAAAAAAAAAAABAOAIVAAAAAAAAAAAAAABAOAIVAAAAAAAAAAAAAABAOAIVAAAAAAAAAAAAAABAOAIVAAAAAAAAAAAAAABAOAIVAAAAAAAAAAAAAABAOAIVAAAAAAAAAAAAAABAOAIVAAAAAAAAAAAAAABAOAIVAAAAAAAAAAAAAABAOAIVAAAAAAAAAAAAAABAOAIVAAAAAAAAAAAAAABAOAIVAAAAAAAAAAAAAABAOAIVAAAAAAAAAAAAAABAOAIVAAAAAAAAAAAAAABAOAIVAAAAAAAAAAAAAABAOAIVAAAAAAAAAAAAAABAOAIVAAAAAAAAAAAAAABAOAIVAAAAAAAAAAAAAABAOAIVAAAAAAAAAAAAAABAOAIVAAAAAAAAAAAAAABAOAIVAAAAAAAAAAAAAABAOAIVAAAAAAAAAAAAAABAOAIVAAAAAAAAAAAAAABAOAIVAAAAAAAAAAAAAABAOAIVAAAAAAAAAAAAAABAOAIVAAAAAAAAAAAAAABAOAIVAAAAAAAAAAAAAABAOAIVAAAAAAAAAAAAAABAOAIVAAAAAAAAAAAAAABAOAIVAAAAAAAAAAAAAABAOAIVAAAAAAAAAAAAAABAOAIVAAAAAAAAAAAAAABAOAIVAAAAAAAAAAAAAABAOAIVAAAAAAAAAAAAAABAOAIVAAAAAAAAAAAAAABAOAIVAAAAAAAAAAAAAABAOAIVAAAAAAAAAAAAAABAOAIVAAAAAAAAAAAAAABAOAIVAAAAAAAAAAAAAABAOAIVAAAAAAAAAAAAAABAOAIVAAAAAAAAAAAAAABAOAIVAAAAAAAAAAAAAABAOAIVAAAAAAAAAAAAAABAOAIVAAAAAAAAAAAAAABAOAIVAAAAAAAAAAAAAABAOAIVAAAAAAAAAAAAAABAOAIVAAAAAAAAAAAAAABAOAIVAAAAAAAAAAAAAABAOAIVAAAAAAAAAAAAAABAOAIVAAAAAAAAAAAAAABAOAIVAAAAAAAAAAAAAABAOAIVAAAAAAAAAAAAAABAOAIVAAAAAAAAAAAAAABAOAIVAAAAAAAAAAAAAABAOAIVAAAAAAAAAAAAAABAOAIVAAAAAAAAAAAAAABAOAIVAAAAAAAAAAAAAABAOAIVAAAAAAAAAAAAAABAOBPD7kDd7NixY9Nrp0+fTjt37hxCbwAAAAAGZ+fOnemtt97a9BoA/bG+AgAAADSL/R4ARo3/dm1NoKLF+PjmP9qxa9eutq8DAAAANMn4+HjatWvXsLsB0DjWVwAAAIBmsd8DwKjx366tSQkAAAAAAAAAAAAAAADhCFQAAAAAAAAAAAAAAADhCFQAAAAAAAAAAAAAAADhCFQAAAAAAAAAAAAAAADhCFQAAAAAAAAAAAAAAADhCFQAAAAAAAAAAAAAAADhCFQAAAAAAAAAAAAAAADhCFQAAAAAAAAAAAAAAADhCFQAAAAAAAAAAAAAAADhCFQAAAAAAAAAAAAAAADhCFQAAAAAAAAAAAAAAADhCFQAAAAAAAAAAAAAAADhCFQAAAAAAAAAAAAAAADhCFQAAAAAAAAAAAAAAADhCFQAAAAAAAAAAAAAAADhCFQAAAAAAAAAAAAAAADhCFQAAAAAAAAAAAAAAADhCFQAAAAAAAAAAAAAAADhCFQAAAAAAAAAAAAAAADhCFQAAAAAAAAAAAAAAADhCFQAAAAAAAAAAAAAAADhCFQAAAAAAAAAAAAAAADhCFQAAAAAAAAAAAAAAADhCFQAAAAAAAAAAAAAAADhCFQAAAAAAAAAAAAAAADhCFQAAAAAAAAAAAAAAADhCFQAAAAAAAAAAAAAAADhCFQAAAAAAAAAAAAAAADhCFQAAAAAAAAAAAAAAADhCFQAAAAAAAAAAAAAAADhCFQAAAAAAAAAAAAAAADhCFQAAAAAAAAAAAAAAADhCFQAAAAAAAAAAAAAAADhCFQAAAAAAAAAAAAAAADhCFQAAAAAAAAAAAAAAADhCFQAAAAAAAAAAAAAAADhCFQAAAAAAAAAAAAAAADhCFQAAAAAAAAAAAAAAADhCFQAAAAAAAAAAAAAAADhCFQAAAAAAAAAAAAAAADhCFQAAAAAAAAAAAAAAADhCFQAAAAAAAAAAAAAAADhCFQAAAAAAAAAAAAAAADhCFQAAAAAAAAAAAAAAADhCFQAAAAAAAAAAAAAAADhCFQAAAAAAAAAAAAAAADhCFQAAAAAAAAAAAAAAADhCFQAAAAAAAAAAAAAAADhCFQAAAAAAAAAAAAAAADhCFQAAAAAAAAAAAAAAADhCFQAAAAAAAAAAAAAAADhCFQAAAAAAAAAAAAAAADhCFQAAAAAAAAAAAAAAADhCFQAAAAAAAAAAAAAAADhCFQAAAAAAAAAAAAAAADhCFQAAAAAAAAAAAAAAADhCFQAAAAAAAAAAAAAAADhCFQAAAAAAAAAAAAAAADhCFQAAAAAAAAAAAAAAADhCFQAAAAAAAAAAAAAAADhCFQAAAAAAAAAAAAAAADhCFQAAAAAAAAAAAAAAADhCFQAAAAAAAAAAAAAAADhCFQAAAAAAAAAAAAAAADhCFQAAAAAAAAAAAAAAADhCFQAAAAAAAAAAAAAAADhCFQAAAAAAAAAAAAAAADhCFQAAAAAAAAAAAAAAADhCFQAAAAAAAAAAAAAAADhCFQAAAAAAAAAAAAAAADhCFQAAAAAAAAAAAAAAADhCFQAAAAAAAAAAAAAAADhCFQAAAAAAAAAAAAAAADhCFQAAAAAAAAAAAAAAADhCFQAAAAAAAAAAAAAAADhCFQAAAAAAAAAAAAAAADhCFQAAAAAAAAAAAAAAADhCFQAAAAAAAAAAAAAAADhCFQAAAAAAAAAAAAAAADhCFQAAAAAAAAAAAAAAADhCFQAAAAAAAAAAAAAAADhCFQAAAAAAAAAAAAAAADhCFQAAAAAAAAAAAAAAADhCFQAAAAAAAAAAAAAAADhCFQAAAAAAAAAAAAAAADhCFQAAAAAAAAAAAAAAADhCFQAAAAAAAAAWz1K/gAAIABJREFUAAAAAADhCFQAAAAAAAAAAAAAAADhCFQAAAAAAAAAAAAAAADhCFQAAAAAAAAAAAAAAADhCFQAAAAAAAAAAAAAAADhCFQAAAAAAAAAAAAAAADhCFQAAAAAAAAAAAAAAADhCFQAAAAAAAAAAAAAAADhCFQAAAAAAAAAAAAAAADhCFQAAAAAAAAAAAAAAADhCFQAAAAAAAAAAAAAAADhCFQAAAAAAAAAAAAAAADhCFQAAAAAAAAAAAAAAADhCFQAAAAAAAAAAAAAAADhCFQAAAAAAAAAAAAAAADhCFQAAAAAAAAAAAAAAADhCFQA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AAAAAAAoR1ABAAAAAAAAAAAAAACUI6gAAAAAAAAAAAAAAADKEVQAAAAAAAAAAAAAAADlCCoAAAAAAAAAAAAAAIByBBUAAAAAAAAAAAAAAEA5ggoAAAAAAAAAAAAAAKAcQQUAAAAAAAAAAAAAAFCOoAIAAAAAAAAAAAAAAChHUAEAAAAAAAAAAAAAAJQjqAAAAAAAAAAAAAAAAMoRVAAAAAAAAAAAAAAAAOUIKgAAAAAAAAAAAAAAgHIEFQAAAAAAAAAAAAAAQDmCCgAAAAAAAAAAAAAAoBxBBQAAAAAAAAAAAAAAUI6gAgAAAAAAAAAAAAAAKEdQAQAAAAAAAAAAAAAAlCOoAAAAAAAAAAAAAAAAyhFUAAAAAAAAAAAAAAAA5QgqAAAAAAAAAAAAAACAcgQVAAAAAAAAAAAAAABAOYIKAAAAAAAAAAAAAACgHEEFAAAAAAAAAAAAAABQjqACAAAAAAAAAAAAAAAoR1ABAAAAAAAAAAAAAACUI6gAAAAAAAAAAAAAAADKEVQAAAAAAAAAAAAAAADlCCoAAAAAAAAAAAAAAIByBBUAAAAAAAAAAAAAAEA5ggoAAAAAAAAAAAAAAKAcQQUAAAAAAAAAAAAAAFCOoAIAAAAAAAAAAAAAAChHUAEAAAAAAAAAAAAAAJQjqAAAAAAAAAAAAAAAAMoRVAAAAAAAAAAAAAAAAOUIKgAAAAAAAAAAAAAAgHIEFQAAAAAAAAAAAAAAQDmCCgAAAAAAAAAAAAAAoBxBBQAAAAAAAAAAAAAAUI6gAgAAAAAAAAAAAAAAKEdQAQAAAAAAAAAAAAAAlCOoAAAAAAAAAAAAAAAAyhFUAAAAAAAAAAAAAAAA5QgqAAAAAAAAAAAAAACAcgQVAAAAAAAAAAAAAABAOYIKAAAAAAAAAAAAAACgHEEFAAAAAAAAAAAAAABQjqACAAAAAAAAAAAAAAAoR1ABAAAAAAAAAAAAAACUI6gAAAAAAAAAAAAAAADKEVQAAAAAAAAAAAAAAADlCCoAAAAAAAAAAAAAAIByBBUAAAAAAAAAAAAAAEA5ggoAAAAAAAAAAAAAAKAcQQUAAAAAAAAAAAAAAFCOoAIAAAAAAAAAAAAAAChHUAEAAAAAAAAAAAAAAJQjqAAAAAAAAAAAAAAAAMoRVAAAAAAAAAAAAAAAAOUIKgAAAAAAAAAAAAAAgHIE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gHAEKgAAAAAAAAAAAAAAgHAEKgAAAAAAAAAAAAAAgHAEKgAAAAAAAAAAAAAAgHAEKgAAAAAAAAAAAAAAgHAEKgAAAAAAAAAAAAAAgHAEKgAAAAAAAAAAAAAAgHAEKgAAAAAAAAAAAAAAgHAEKgAAAAAAAAAAAAAAgHAEKgAAAAAAAAAAAAAAgHAEKgAAAAAAAAAAAAAAgHAEKgAAAAAAAAAAAAAAgHAEKgAAAAAAAAAAAAAAgHAEKgAAAAAAAAAAAAAAgHAEKgAAAAAAAAAAAAAAgHAEKgAAAAAAAAAAAAAAgHAEKgAAAAAAAAAAAAAAgHAEKgAAAAAAAAAAAAAAgHAEKgAAAAAAAAAAAAAAgHAEKgAAAAAAAAAAAAAAgHAEKgAAAAAAAAAAAAAAgHAEKgAAAAAAAAAAAAAAgHAEKgAAAAAAAAAAAAAAgHAEKgAAAAAAAAAAAAAAgHAEKgAAAAAAAAAAAAAAgHAEKgAAAAAAAAAAAAAAgHAEKgAAAAAAAAAAAAAAgHAEKgAAAAAAAAAAAAAAgHAEKgAAAAAAAAAAAAAAgHAEKgAAAAAAAAAAAAAAgHAEKgAAAAAAAAAAAAAAgHAEKgAAAAAAAAAAAAAAgHAEKgAAAAAAAAAAAAAAgHAEKgAAAAAAAAAAAAAAgHAEKgAAAAAAAAAAAAAAgHAEKgAAAAAAAAAAAAAAgHAEKgAAAAAAAAAAAAAAgHAEKgAAAAAAAAAAAAAAgHAEKgAAAAAAAAAAAAAAgHAEKgAAAAAAAAAAAAAAgHAEKgAAAAAAAAAAAAAAgHAEKgAAAAAAAAAAAAAAgHAEKgAAAAAAAAAAAAAAgHAEKgAAAAAAAAAAAAAAgHAEKgAAAAAAAAAAAAAAgHAEKgAAAAAAAAAAAAAAgHAEKgAAAAAAAAAAAAAAgHAEKgAAAAAAAAAAAAAAgHAEKgAAAAAAAAAAAAAAgHAEKgAAAAAAAAAAAAAAgHAEKgAAAAAAAAAAAAAAgHAEKgAAAAAAAAAAAAAAgHAEKgAAAAAAAAAAAAAAgHAEKgAAAAAAAAAAAAAAgHAEKgAAAAAAAAAAAAAAgHAEKgAAAAAAAAAAAAAAgHAEKgAAAAAAAAAAAAAAgHAEKgAAAAAAAAAAAAAAgHAEKgAAAAAAAAAAAAAAgHAEKgAAAAAAAAAAAAAAgHAEKgAAAAAAAAAAAAAA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AAAAAAAAAAAAAAAA4ShUAAAAAAAAAAAAAAAA4ShUAAAAAAAAAAAAAAAA4ShUAAAAAAAAAAAAAAAA4ShUAAAAAAAAAAAAAAAA4ShUAAAAAAAAAAAAAAAA4ShUAAAAAAAAAAAAAAAA4ShUAAAAAAAAAAAAAAAA4ShUAAAAAAAAAAAAAAAA4ShUAAAAAAAAAAAAAAAA4ShUAAAAAAAAAAAAAAAA4ShUAAAAAAAAAAAAAAAA4ShUAAAAAAAAAAAAAAAA4ShUAAAAAAAAAAAAAAAA4ShUAAAAAAAAAAAAAAAA4ShUAAAAAAAAAAAAAAAA4ShUAAAAAAAAAAAAAAAA4ShUAAAAAAAAAAAAAAAA4ShUAAAAAAAAAAAAAAAA4ShUAAAAAAAAAAAAAAAA4ShUAAAAAAAAAAAAAAAA4ShUAAAAAAAAAAAAAAAA4ShUAAAAAAAAAAAAAAAA4ShUAAAAAAAAAAAAAAAA4ShUAAAAAAAAAAAAAAAA4ShUAAAAAAAAAAAAAAAA4ShUAAAAAAAAAAAAAAAA4ShUAAAAAAAAAAAAAAAA4ShUAAAAAAAAAAAAAAAA4ShUAAAAAAAAAAAAAAAA4ShUAAAAAAAAAAAAAAAA4ShUAAAAAAAAAAAAAAAA4ShUAAAAAAAAAAAAAAAA4ShUAAAAAAAAAAAAAAAA4ShUAAAAAAAAAAAAAAAA4ShUAAAAAAAAAAAAAAAA4ShUAAAAAAAAAAAAAAAA4ShUAAAAAAAAAAAAAAAA4ShUAAAAAAAAAAAAAAAA4ShUAAAAAAAAAAAAAAAA4ShUAAAAAAAAAAAAAAAA4ShUAAAAAAAAAAAAAAAA4ShUAAAAAAAAAAAAAAAA4ShUAAAAAAAAAAAAAAAA4ShUAAAAAAAAAAAAAAAA4ShUAAAAAAAAAAAAAAAA4ShUAAAAAAAAAAAAAAAA4ShUAAAAAAAAAAAAAAAA4ShUAAAAAAAAAAAAAAAA4ShUAAAAAAAAAAAAAAAA4ShUAAAAAAAAAAAAAAAA4ShUAAAAAAAAAAAAAAAA4ShUAAAAAAAAAAAAAAAA4ShUAAAAAAAAAAAAAAAA4ShUAAAAAAAAAAAAAAAA4ShUAAAAAAAAAAAAAAAA4ShUAAAAAAAAAAAAAAAA4ShUAAAAAAAAAAAAAAAA4ShUAAAAAAAAAAAAAAAA4ShUAAAAAAAAAAAAAAAA4ShU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AAAA4ShUAAAAAAAAAAAAAAAA4ShUAAAAAAAAAAAAAAAA4ShUAAAAAAAAAAAAAAAA4ShUAAAAAAAAAAAAAAAA4ShUAAAAAAAAAAAAAAAA4ShUAAAAAAAAAAAAAAAA4ShUAAAAAAAAAAAAAAAA4ShUAAAAAAAAAAAAAAAA4ShUAAAAAAAAAAAAAAAA4ShUAAAAAAAAAAAAAAAA4ShUAAAAAAAAAAAAAAAA4ShUAAAAAAAAAAAAAAAA4ShUAAAAAAAAAAAAAAAA4ShUAAAAAAAAAAAAAAAA4ShUAAAAAAAAAAAAAAAA4ShUAAAAAAAAAAAAAAAA4ShUAAAAAAAAAAAAAAAA4ShUAAAAAAAAAAAAAAAA4ShUAAAAAAAAAAAAAAAA4ShUAAAAAAAAAAAAAAAA4ShUAAAAAAAAAAAAAAAA4ShUAAAAAAAAAAAAAAAA4ShUAAAAAAAAAAAAAAAA4ShUAAAAAAAAAAAAAAAA4ShUAAAAAAAAAAAAAAAA4ShUAAAAAAAAAAAAAAAA4ShUAAAAAAAAAAAAAAAA4ShUAAAAAAAAAAAAAAAA4ShUAAAAAAAAAAAAAAAA4ShUAAAAAAAAAAAAAAAA4ShUAAAAAAAAAAAAAAAA4ShUAAAAAAAAAAAAAAAA4ShUAAAAAAAAAAAAAAAA4ShUAAAAAAAAAAAAAAAA4ShUAAAAAAAAAAAAAAAA4ShUAAAAAAAAAAAAAAAA4ShUAAAAAAAAAAAAAAAA4ShUAAAAAAAAAAAAAAAA4ShUAAAAAAAAAAAAAAAA4ShUAAAAAAAAAAAAAAAA4ShUAAAAAAAAAAAAAAAA4ShUAAAAAAAAAAAAAAAA4ShUAAAAAAAAAAAAAAAA4ShUAAAAAAAAAAAAAAAA4ShUAAAAAAAAAAAAAAAA4ShUAAAAAAAAAAAAAAAA4ShUAAAAAAAAAAAAAAAA4ShUAAAAAAAAAAAAAAAA4ShUAAAAAAAAAAAAAAAA4ShUAAAAAAAAAAAAAAAA4ShUAAAAAAAAAAAAAAAA4ShUAAAAAAAAAAAAAAAA4ShUAAAAAAAAAAAAAAAA4ShUAAAAAAAAAAAAAAAA4ShUAAAAAAAAAAAAAAAA4ShUAAAAAAAAAAAAAAAA4ShUAAAAAAAAAAAAAAAA4ShUAAAAAAAAAAAAAAAA4ShUAAAAAAAAAAAAAAAA4ShUAAAAAAAAAAAAAAAA4ShUAAAAAAAAAAAAAAAA4ShUAAAAAAAAAAAAAAAA4ShUAAAAAAAAAAAAAAAA4ShUAAAAAAAAAAAAAAAA4ShUAAAAAAAAAAAAAAAA4ShUAAAAAAAAAAAAAAAA4ShUAAAAAAAAAAAAAAAA4ShUAAAAAAAAAAAAAAAA4ShUAAAAAAAAAAAAAAAA4ShUAAAAAAAAAAAAAAAA4ShUAAAAAAAAAAAAAAAA4ShUAAAAAAAAAAAAAAAA4ShUAAAAAAAAAAAAAAAA4ShUAAAAAAAAAAAAAAAA4ShUAAAAAAAAAAAAAAAA4ShUAADA/7F379HWnHV9wL+/NxcgJCFyUVpAwkVcICqsJkgQ4VVRqwsERClasa9KEVpslaqwrNrUeqOWBVphRbyQIF6gSCJFQaAYigISoBZSCBclUeSSIBJCQhJCpn/MnJz9npy9z97n7LNvz+ez1qx37/fMfp6Z+T3zPDOz5zcbAAAAAAAAAACA5kioAAAAAAAAAAAAAAAAmiOhAgAAAAAAAAAAAAAAaI6ECgAAAAAAAAAAAAAAoDkSKgAAAAAAAAAAAAAAgOZIqAAAAAAAAAAAAAAAAJojoQIAAAAAAAAAAAAAAGiOhAoAAAAAAAAAAAAAAKA5EioAAAAAAAAAAAAAAIDmSKgAAAAAAAAAAAAAAACaI6ECAAAAAAAAAAAAAABojoQKAAAAAAAAAAAAAACgORIqAAAAAAAAAAAAAACA5kioAAAAAAAAAAAAAAAAmiOhAgAAAAAAAAAAAAAAaI6ECgAAAAAAAAAAAAAAoDkSKgAAAAAAAAAAAAAAgOZIqAAAAAAAAAAAAAAAAJojoQIAAAAAAAAAAAAAAGiOhAoAAAAAAAAAAAAAAKA5EioAAAAAAAAAAAAAAIDmSKgAAAAAAAAAAAAAAACaI6ECAAAAAAAAAAAAAABojoQKAAAAAAAAAAAAAACgOScuewEAVtnpp5+eiy666Fb/BwCwrhzfADBvxhYAMB4CAADL57wEAJjEscJ4EioAJjhy5EjOOOOMZS8GAMDcOL4BYN6MLQBgPAQAAJbPeQkAMIljhfGOLHsBAAAAAAAAAAAAAAAAFk1CBQAAAAAAAAAAAAAA0BwJFQAAAAAAAAAAAAAAQHMkVAAAAAAAAAAAAAAAAM2RUAEAAAAAAAAAAAAAADRHQgUAAAAAAAAAAAAAANAcCRUAAAAAAAAAAAAAAEBzJFQAAAAAAAAAAAAAAADNkVABAAAAAAAAAAAAAAA0R0IFAAAAAAAAAAAAAADQHAkVAAAAAAAAAAAAAABAcyRUAAAAAAAAAAAAAAAAzZFQAQAAAAAAAAAAAAAANEdCBQAAAAAAAAAAAAAA0BwJFQAAAAAAAAAAAAAAQHMkVAAAAAAAAAAAAAAAAM2RUAEAAAAAAAAAAAAAADRHQgUAAAAAAAAAAAAAANAcCRUAAAAAAAAAAAAAAEBzJFQAAAAAAAAAAAAAAADNkVABAAAAAAAAAAAAAAA0R0IFAAAAAAAAAAAAAADQHAkVAAAAAAAAAAAAAABAcyRUAAAAAAAAAAAAAAAAzZFQAQAAAAAAAAAAAAAANEdCBQAAAAAAAAAAAAAA0BwJFQAAAAAAAAAAAAAAQHMkVAAAAAAAAAAAAAAAAM2RUAEAAAAAAAAAAAAAADRHQgUAAAAAAAAAAAAAANAcCRUAAAAAAAAAAAAAAEBzJFQAAAAAAAAAAAAAAADNkVABAAAAAAAAAAAAAAA0R0IFAAAAAAAAAAAAAADQHAkVAAAAAAAAAAAAAABAcyRUAAAAAAAAAAAAAAAAzZFQAQAAAAAAAAAAAAAANEdCBQAAAAAAAAAAAAAA0BwJFQAAAAAAAAAAAAAAQHMkVAAAAAAAAAAAAAAAAM2RUAEAAAAAAAAAAAAAADRHQgUAAAAAAAAAAAAAANAcCRUAAAAAAAAAAAAAAEBzJFQAAAAAAAAAAAAAAADNkVABAAAAAAAAAAAAAAA0R0IFAAAAAAAAAAAAAADQHAkVAAAAAAAAAAAAAABAcyRUAAAAAAAAAAAAAAAAzZFQAQAAAAAAAAAAAAAANEdCBQAAAAAAAAAAAAAA0BwJFQAAAAAAAAAAAAAAQHMkVAAAAAAAAAAAAAAAAM2RUAEAAAAAAAAAAAAAADRHQgUAAAAAAAAAAAAAANAcCRUAAAAAAAAAAAAAAEBzJFQAAAAAAAAAAAAAAADNkVABAAAAAAAAAAAAAAA0R0IFAAAAAAAAAAAAAADQHAkVAAAAAAAAAAAAAABAcyRUAAAAAAAAAAAAAAAAzZFQAQAAAAAAAAAAAAAANEdCBQAAAAAAAAAAAAAA0BwJFQAAAAAAAAAAAAAAQHMkVAAAAAAAAAAAAAAAAM2RUAEAAAAAAAAAAAAAADRHQgUAAAAAAAAAAAAAANAcCRUAAAAAAAAAAAAAAEBzJFQAAAAAAAAAAAAAAADNkVABAAAAAAAAAAAAAAA0R0IFAAAAAAAAAAAAAADQHAkVAAAAAAAAAAAAAABAcyRUAAAAAAAAAAAAAAAAzZFQAQAAAAAAAAAAAAAANEdCBQAAAAAAAAAAAAAA0BwJFQAAAAAAAAAAAAAAQHMkVAAAAAAAAAAAAAAAAM2RUAEAAAAAAAAAAAAAADRHQgUAAAAAAAAAAAAAANAcCRUAAAAAAAAAAAAAAEBzJFQAAAAAAAAAAAAAAADNkVABAAAAAAAAAAAAAAA0R0IFAAAAAAAAAAAAAADQHAkVAAAAAAAAAAAAAABAcyRUAAAAAAAAAAAAAAAAzZFQAQAAAAAAAAAAAAAANEdCBQAAAAAAAAAAAAAA0BwJFQAAAAAAAAAAAAAAQHMkVAAAAAAAAAAAAAAAAM2RUAEAAAAAAAAAAAAAADRHQgUAAAAAAAAAAAAAANAcCRUAAAAAAAAAAAAAAEBzJFQAAAAAAAAAAAAAAADNkVABAAAAAAAAAAAAAAA0R0IFAAAAAAAAAAAAAADQHAkVAAAAAAAAAAAAAABAcyRUAAAAAAAAAAAAAAAAzZFQAQAAAAAAAAAAAAAANEdCBQAAAAAAAAAAAAAA0BwJFQAAAAAAAAAAAAAAQHMkVAAAAAAAAAAAAAAAAM2RUAEAAAAAAAAAAAAAADRHQgUAAAAAAAAAAAAAANAcCRUAAAAAAAAAAAAAAEBzJFQAAAAAAAAAAAAAAADNkVABAAAAAAAAAAAAAAA0R0IFAAAAAAAAAAAAAADQHAkVAAAAAAAAAAAAAABAcyRUAAAAAAAAAAAAAAAAzZFQAQAAAAAAAAAAAAAANEdCBQAAAAAAAAAAAAAA0BwJFQAAAAAAAAAAAAAAQHMkVAAAAAAAAAAAAAAAAM2RUAEAAAAAAAAAAAAAADRHQgUAAAAAAAAAAAAAANAcCRUAAAAAAAAAAAAAAEBzJFQAAAAAAAAAAAAAAADNkVABAAAAAAAAAAAAAAA0R0IFAAAAAAAAAAAAAADQHAkVAAAAAAAAAAAAAABAcyRUAAAAAAAAAAAAAAAAzZFQAQAAAAAAAAAAAAAANEdCBQAAAAAAAAAAAAAA0BwJFQAAAAAAAAAAAAAAQHMkVAAAAAAAAAAAAAAAAM2RUAEA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\n" + }, + "metadata": { + "needs_background": "light" + } + } + ], + "source": [ + "plt.figure(figsize=(20,20), dpi=200)\n", + "\n", + "plt.subplot(4,3,1)\n", + "sns.boxplot(x = 'popularity', data = df)\n", + "\n", + "plt.subplot(4,3,2)\n", + "sns.boxplot(x = 'acousticness', data = df)\n", + "\n", + "plt.subplot(4,3,3)\n", + "sns.boxplot(x = 'energy', data = df)\n", + "\n", + "plt.subplot(4,3,4)\n", + "sns.boxplot(x = 'instrumentalness', data = df)\n", + "\n", + "plt.subplot(4,3,5)\n", + "sns.boxplot(x = 'liveness', data = df)\n", + "\n", + "plt.subplot(4,3,6)\n", + "sns.boxplot(x = 'loudness', data = df)\n", + "\n", + "plt.subplot(4,3,7)\n", + "sns.boxplot(x = 'speechiness', data = df)\n", + "\n", + "plt.subplot(4,3,8)\n", + "sns.boxplot(x = 'tempo', data = df)\n", + "\n", + "plt.subplot(4,3,9)\n", + "sns.boxplot(x = 'time_signature', data = df)\n", + "\n", + "plt.subplot(4,3,10)\n", + "sns.boxplot(x = 'danceability', data = df)\n", + "\n", + "plt.subplot(4,3,11)\n", + "sns.boxplot(x = 'length', data = df)\n", + "\n", + "plt.subplot(4,3,12)\n", + "sns.boxplot(x = 'release_date', data = df)" + ] + }, + { + "source": [], + "cell_type": "markdown", + "metadata": {} + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": {}, + "outputs": [], + "source": [ + "from sklearn.preprocessing import LabelEncoder, StandardScaler\n", + "le = LabelEncoder()\n", + "\n", + "# scaler = StandardScaler()\n", + "\n", + "X = df.loc[:, ('artist_top_genre','popularity','danceability','acousticness','loudness','energy')]\n", + "\n", + "y = df['artist_top_genre']\n", + "\n", + "X['artist_top_genre'] = le.fit_transform(X['artist_top_genre'])\n", + "\n", + "# X = scaler.fit_transform(X)\n", + "\n", + "y = le.transform(y)\n", + "\n" + ] + }, + { + "source": [], + "cell_type": "markdown", + "metadata": {} + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "array([2, 1, 2, 2, 2, 2, 2, 2, 2, 1, 2, 2, 1, 2, 0, 2, 1, 1, 0, 1, 0, 0,\n", + " 0, 1, 0, 2, 0, 0, 2, 2, 1, 1, 0, 2, 2, 2, 2, 1, 1, 0, 2, 0, 2, 0,\n", + " 2, 0, 0, 1, 1, 2, 1, 0, 0, 2, 2, 2, 2, 1, 1, 0, 1, 2, 2, 1, 2, 2,\n", + " 1, 2, 1, 2, 2, 1, 1, 1, 1, 1, 2, 1, 2, 2, 0, 2, 1, 1, 1, 2, 2, 2,\n", + " 2, 1, 2, 2, 2, 2, 1, 1, 2, 1, 1, 2, 1, 2, 1, 2, 1, 2, 2, 1, 2, 0,\n", + " 1, 1, 2, 1, 1, 2, 2, 2, 2, 2, 2, 2, 0, 1, 1, 1, 1, 0, 1, 2, 1, 2,\n", + " 1, 2, 2, 2, 0, 2, 1, 1, 1, 2, 1, 0, 1, 2, 2, 1, 1, 1, 0, 1, 2, 2,\n", + " 2, 1, 1, 0, 1, 2, 1, 1, 1, 1, 2, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 2,\n", + " 0, 1, 0, 0, 1, 0, 0, 2, 0, 0, 1, 1, 2, 0, 2, 2, 0, 2, 2, 1, 1, 0,\n", + " 1, 1, 0, 0, 1, 0, 2, 0, 1, 0, 2, 0, 0, 2, 2, 2, 1, 1, 1, 1, 1, 0,\n", + " 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 2, 2, 1, 1, 0, 1, 1, 1, 0, 2, 2, 2,\n", + " 1, 1, 0, 0, 1, 1, 2, 0, 0, 0, 0, 0, 2, 0, 0, 2, 1, 1, 1, 2, 2, 2,\n", + " 1, 2, 1, 2, 1, 1, 1, 0, 2, 2, 2, 1, 2, 1, 0, 1, 2, 1, 1, 1, 2, 1],\n", + " dtype=int32)" + ] + }, + "metadata": {}, + "execution_count": 16 + } + ], + "source": [ + "\n", + "from sklearn.cluster import KMeans\n", + "\n", + "nclusters = 3 \n", + "seed = 0\n", + "\n", + "km = KMeans(n_clusters=nclusters, random_state=seed)\n", + "km.fit(X)\n", + "\n", + "# Predict the cluster for each data point\n", + "\n", + "y_cluster_kmeans = km.predict(X)\n", + "y_cluster_kmeans" + ] + }, + { + "source": [ + "Esses números não significam muito para nós, então vamos obter uma 'pontuação de silhueta' para verificar a precisão. Nossa pontuação está no meio.\n" + ], + "cell_type": "markdown", + "metadata": {} + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "0.5466747351275563" + ] + }, + "metadata": {}, + "execution_count": 17 + } + ], + "source": [ + "from sklearn import metrics\n", + "score = metrics.silhouette_score(X, y_cluster_kmeans)\n", + "score" + ] + }, + { + "source": [], + "cell_type": "markdown", + "metadata": {} + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": {}, + "outputs": [], + "source": [ + "from sklearn.cluster import KMeans\n", + "wcss = []\n", + "\n", + "for i in range(1, 11):\n", + " kmeans = KMeans(n_clusters = i, init = 'k-means++', random_state = 42)\n", + " kmeans.fit(X)\n", + " wcss.append(kmeans.inertia_)" + ] + }, + { + "source": [ + "Use esse modelo para decidir, usando o Método do Cotovelo, o melhor número de clusters para construir\n" + ], + "cell_type": "markdown", + "metadata": {} + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": {}, + "outputs": [ + { + "output_type": "stream", + "name": "stderr", + "text": [ + "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/seaborn/_decorators.py:43: FutureWarning: Pass the following variables as keyword args: x, y. From version 0.12, the only valid positional argument will be `data`, and passing other arguments without an explicit keyword will result in an error or misinterpretation.\n FutureWarning\n" + ] + }, + { + "output_type": "display_data", + "data": { + "text/plain": "
", + "image/svg+xml": "\n\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n\n", + "image/png": "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\n" + }, + "metadata": { + "needs_background": "light" + } + } + ], + "source": [ + "plt.figure(figsize=(10,5))\n", + "sns.lineplot(range(1, 11), wcss,marker='o',color='red')\n", + "plt.title('Elbow')\n", + "plt.xlabel('Number of clusters')\n", + "plt.ylabel('WCSS')\n", + "plt.show()" + ] + }, + { + "source": [ + "Looks like 3 is a good number after all. Fit the model again and create a scatterplot of your clusters. They do group in bunches, but they are pretty close together." + ], + "cell_type": "code", + "metadata": {}, + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "code", + "execution_count": 21, + "metadata": {}, + "outputs": [ + { + "output_type": "display_data", + "data": { + "text/plain": "
", + "image/svg+xml": "\n\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n\n", + "image/png": "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\n" + }, + "metadata": { + "needs_background": "light" + } + } + ], + "source": [ + "from sklearn.cluster import KMeans\n", + "kmeans = KMeans(n_clusters = 3)\n", + "kmeans.fit(X)\n", + "labels = kmeans.predict(X)\n", + "plt.scatter(df['popularity'],df['danceability'],c = labels)\n", + "plt.xlabel('popularity')\n", + "plt.ylabel('danceability')\n", + "plt.show()" + ] + }, + { + "source": [ + "A precisão deste modelo não é ruim, mas também não é ótima. Pode ser que os dados não se adaptem bem ao agrupamento K-Means. Você pode tentar um método diferente.\n" + ], + "cell_type": "markdown", + "metadata": {} + }, + { + "cell_type": "code", + "execution_count": 811, + "metadata": {}, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Result: 109 out of 286 samples were correctly labeled.\nAccuracy score: 0.38\n" + ] + } + ], + "source": [ + "labels = kmeans.labels_\n", + "\n", + "correct_labels = sum(y == labels)\n", + "\n", + "print(\"Result: %d out of %d samples were correctly labeled.\" % (correct_labels, y.size))\n", + "\n", + "print('Accuracy score: {0:0.2f}'. format(correct_labels/float(y.size)))" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n---\n\n**Aviso Legal**: \nEste documento foi traduzido utilizando o serviço de tradução por IA [Co-op Translator](https://github.com/Azure/co-op-translator). Embora nos esforcemos para garantir a precisão, esteja ciente de que traduções automatizadas podem conter erros ou imprecisões. O documento original em seu idioma nativo deve ser considerado a fonte autoritativa. Para informações críticas, recomenda-se a tradução profissional realizada por humanos. Não nos responsabilizamos por quaisquer mal-entendidos ou interpretações equivocadas decorrentes do uso desta tradução.\n" + ] + } + ] +} \ No newline at end of file diff --git a/translations/pt-BR/5-Clustering/2-K-Means/solution/tester.ipynb b/translations/pt-BR/5-Clustering/2-K-Means/solution/tester.ipynb new file mode 100644 index 000000000..4c66dfe34 --- /dev/null +++ b/translations/pt-BR/5-Clustering/2-K-Means/solution/tester.ipynb @@ -0,0 +1,343 @@ +{ + "metadata": { + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.7.0" + }, + "orig_nbformat": 2, + "kernelspec": { + "name": "python3", + "display_name": "Python 3.7.0 64-bit ('3.7')" + }, + "metadata": { + "interpreter": { + "hash": "70b38d7a306a849643e446cd70466270a13445e5987dfa1344ef2b127438fa4d" + } + }, + "interpreter": { + "hash": "70b38d7a306a849643e446cd70466270a13445e5987dfa1344ef2b127438fa4d" + }, + "coopTranslator": { + "original_hash": "6f92868513e59d321245137c1c4c5311", + "translation_date": "2025-08-29T23:34:34+00:00", + "source_file": "5-Clustering/2-K-Means/solution/tester.ipynb", + "language_code": "br" + } + }, + "nbformat": 4, + "nbformat_minor": 2, + "cells": [ + { + "source": [], + "cell_type": "markdown", + "metadata": {} + }, + { + "cell_type": "code", + "execution_count": 104, + "metadata": {}, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Requirement already satisfied: seaborn in /Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages (0.11.1)\n", + "Requirement already satisfied: pandas>=0.23 in /Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages (from seaborn) (1.1.2)\n", + "Requirement already satisfied: matplotlib>=2.2 in /Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages (from seaborn) (3.1.0)\n", + "Requirement already satisfied: numpy>=1.15 in /Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages (from seaborn) (1.19.2)\n", + "Requirement already satisfied: scipy>=1.0 in /Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages (from seaborn) (1.4.1)\n", + "Requirement already satisfied: pytz>=2017.2 in /Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages (from pandas>=0.23->seaborn) (2019.1)\n", + "Requirement already satisfied: python-dateutil>=2.7.3 in /Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages (from pandas>=0.23->seaborn) (2.8.0)\n", + "Requirement already satisfied: kiwisolver>=1.0.1 in /Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages (from matplotlib>=2.2->seaborn) (1.1.0)\n", + "Requirement already satisfied: pyparsing!=2.0.4,!=2.1.2,!=2.1.6,>=2.0.1 in /Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages (from matplotlib>=2.2->seaborn) (2.4.0)\n", + "Requirement already satisfied: cycler>=0.10 in /Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages (from matplotlib>=2.2->seaborn) (0.10.0)\n", + "Requirement already satisfied: six>=1.5 in /Users/jenlooper/Library/Python/3.7/lib/python/site-packages (from python-dateutil>=2.7.3->pandas>=0.23->seaborn) (1.12.0)\n", + "Requirement already satisfied: setuptools in /Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages (from kiwisolver>=1.0.1->matplotlib>=2.2->seaborn) (45.1.0)\n", + "\u001b[33mWARNING: You are using pip version 20.2.3; however, version 21.1.2 is available.\n", + "You should consider upgrading via the '/Library/Frameworks/Python.framework/Versions/3.7/bin/python3.7 -m pip install --upgrade pip' command.\u001b[0m\n", + "Note: you may need to restart the kernel to use updated packages.\n" + ] + } + ], + "source": [ + "pip install seaborn" + ] + }, + { + "source": [ + "Comece de onde terminamos na última aula, com os dados importados e filtrados.\n" + ], + "cell_type": "markdown", + "metadata": {} + }, + { + "cell_type": "code", + "execution_count": 105, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + " name album \\\n", + "0 Sparky Mandy & The Jungle \n", + "1 shuga rush EVERYTHING YOU HEARD IS TRUE \n", + "2 LITT! LITT! \n", + "3 Confident / Feeling Cool Enjoy Your Life \n", + "4 wanted you rare. \n", + "\n", + " artist artist_top_genre release_date length popularity \\\n", + "0 Cruel Santino alternative r&b 2019 144000 48 \n", + "1 Odunsi (The Engine) afropop 2020 89488 30 \n", + "2 AYLØ indie r&b 2018 207758 40 \n", + "3 Lady Donli nigerian pop 2019 175135 14 \n", + "4 Odunsi (The Engine) afropop 2018 152049 25 \n", + "\n", + " danceability acousticness energy instrumentalness liveness loudness \\\n", + "0 0.666 0.8510 0.420 0.534000 0.1100 -6.699 \n", + "1 0.710 0.0822 0.683 0.000169 0.1010 -5.640 \n", + "2 0.836 0.2720 0.564 0.000537 0.1100 -7.127 \n", + "3 0.894 0.7980 0.611 0.000187 0.0964 -4.961 \n", + "4 0.702 0.1160 0.833 0.910000 0.3480 -6.044 \n", + "\n", + " speechiness tempo time_signature \n", + "0 0.0829 133.015 5 \n", + "1 0.3600 129.993 3 \n", + "2 0.0424 130.005 4 \n", + "3 0.1130 111.087 4 \n", + "4 0.0447 105.115 4 " + ], + "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
namealbumartistartist_top_genrerelease_datelengthpopularitydanceabilityacousticnessenergyinstrumentalnesslivenessloudnessspeechinesstempotime_signature
0SparkyMandy & The JungleCruel Santinoalternative r&b2019144000480.6660.85100.4200.5340000.1100-6.6990.0829133.0155
1shuga rushEVERYTHING YOU HEARD IS TRUEOdunsi (The Engine)afropop202089488300.7100.08220.6830.0001690.1010-5.6400.3600129.9933
2LITT!LITT!AYLØindie r&b2018207758400.8360.27200.5640.0005370.1100-7.1270.0424130.0054
3Confident / Feeling CoolEnjoy Your LifeLady Donlinigerian pop2019175135140.8940.79800.6110.0001870.0964-4.9610.1130111.0874
4wanted yourare.Odunsi (The Engine)afropop2018152049250.7020.11600.8330.9100000.3480-6.0440.0447105.1154
\n
" + }, + "metadata": {}, + "execution_count": 105 + } + ], + "source": [ + "\n", + "import matplotlib.pyplot as plt\n", + "import pandas as pd\n", + "import seaborn as sns\n", + "import numpy as np\n", + "\n", + "df = pd.read_csv(\"../../data/nigerian-songs.csv\")\n", + "df.head()" + ] + }, + { + "source": [ + "Vamos focar apenas em 3 gêneros. Talvez consigamos formar 3 clusters!\n" + ], + "cell_type": "markdown", + "metadata": {} + }, + { + "cell_type": "code", + "execution_count": 106, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "Text(0.5, 1.0, 'Top genres')" + ] + }, + "metadata": {}, + "execution_count": 106 + }, + { + "output_type": "display_data", + "data": { + "text/plain": "
", + "image/svg+xml": "\n\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n\n", + "image/png": "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\n" + }, + "metadata": { + "needs_background": "light" + } + } + ], + "source": [ + "df = df[(df['artist_top_genre'] == 'afro dancehall') | (df['artist_top_genre'] == 'afropop') | (df['artist_top_genre'] == 'nigerian pop')]\n", + "df = df[(df['popularity'] > 0)]\n", + "top = df['artist_top_genre'].value_counts()\n", + "plt.figure(figsize=(10,7))\n", + "sns.barplot(x=top.index,y=top.values)\n", + "plt.xticks(rotation=45)\n", + "plt.title('Top genres',color = 'blue')" + ] + }, + { + "cell_type": "code", + "execution_count": 107, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + " name album \\\n", + "1 shuga rush EVERYTHING YOU HEARD IS TRUE \n", + "3 Confident / Feeling Cool Enjoy Your Life \n", + "4 wanted you rare. \n", + "5 Kasala Pioneers \n", + "6 Pull Up Everything Pretty \n", + "\n", + " artist artist_top_genre release_date length popularity \\\n", + "1 Odunsi (The Engine) afropop 2020 89488 30 \n", + "3 Lady Donli nigerian pop 2019 175135 14 \n", + "4 Odunsi (The Engine) afropop 2018 152049 25 \n", + "5 DRB Lasgidi nigerian pop 2020 184800 26 \n", + "6 prettyboydo nigerian pop 2018 202648 29 \n", + "\n", + " danceability acousticness energy instrumentalness liveness loudness \\\n", + "1 0.710 0.0822 0.683 0.000169 0.1010 -5.640 \n", + "3 0.894 0.7980 0.611 0.000187 0.0964 -4.961 \n", + "4 0.702 0.1160 0.833 0.910000 0.3480 -6.044 \n", + "5 0.803 0.1270 0.525 0.000007 0.1290 -10.034 \n", + "6 0.818 0.4520 0.587 0.004490 0.5900 -9.840 \n", + "\n", + " speechiness tempo time_signature \n", + "1 0.3600 129.993 3 \n", + "3 0.1130 111.087 4 \n", + "4 0.0447 105.115 4 \n", + "5 0.1970 100.103 4 \n", + "6 0.1990 95.842 4 " + ], + "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
namealbumartistartist_top_genrerelease_datelengthpopularitydanceabilityacousticnessenergyinstrumentalnesslivenessloudnessspeechinesstempotime_signature
1shuga rushEVERYTHING YOU HEARD IS TRUEOdunsi (The Engine)afropop202089488300.7100.08220.6830.0001690.1010-5.6400.3600129.9933
3Confident / Feeling CoolEnjoy Your LifeLady Donlinigerian pop2019175135140.8940.79800.6110.0001870.0964-4.9610.1130111.0874
4wanted yourare.Odunsi (The Engine)afropop2018152049250.7020.11600.8330.9100000.3480-6.0440.0447105.1154
5KasalaPioneersDRB Lasgidinigerian pop2020184800260.8030.12700.5250.0000070.1290-10.0340.1970100.1034
6Pull UpEverything Prettyprettyboydonigerian pop2018202648290.8180.45200.5870.0044900.5900-9.8400.199095.8424
\n
" + }, + "metadata": {}, + "execution_count": 107 + } + ], + "source": [ + "df.head()" + ] + }, + { + "cell_type": "code", + "execution_count": 108, + "metadata": {}, + "outputs": [], + "source": [ + "from sklearn.preprocessing import StandardScaler\n", + "\n", + "scaler = StandardScaler()\n", + "\n", + "# X = df.loc[:, ('danceability','energy')]\n", + "\n", + "\n", + "\n", + "\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": 110, + "metadata": {}, + "outputs": [ + { + "output_type": "error", + "ename": "ValueError", + "evalue": "Unknown label type: 'continuous'", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mValueError\u001b[0m Traceback (most recent call last)", + "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m\u001b[0m\n\u001b[1;32m 20\u001b[0m \u001b[0;31m# we create an instance of SVM and fit out data. We do not scale our\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 21\u001b[0m \u001b[0;31m# data since we want to plot the support vectors\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 22\u001b[0;31m \u001b[0mls30\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34m(\u001b[0m\u001b[0mLabelSpreading\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mfit\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mX\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0my_30\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0my_30\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m'Label Spreading 30% data'\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 23\u001b[0m \u001b[0mls50\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34m(\u001b[0m\u001b[0mLabelSpreading\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mfit\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mX\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0my_50\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0my_50\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m'Label Spreading 50% data'\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 24\u001b[0m \u001b[0mls100\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34m(\u001b[0m\u001b[0mLabelSpreading\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mfit\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mX\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0my\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0my\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m'Label Spreading 100% data'\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/sklearn/semi_supervised/_label_propagation.py\u001b[0m in \u001b[0;36mfit\u001b[0;34m(self, X, y)\u001b[0m\n\u001b[1;32m 228\u001b[0m \u001b[0mX\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0my\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_validate_data\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mX\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0my\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 229\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mX_\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mX\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 230\u001b[0;31m \u001b[0mcheck_classification_targets\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0my\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 231\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 232\u001b[0m \u001b[0;31m# actual graph construction (implementations should override this)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/sklearn/utils/multiclass.py\u001b[0m in \u001b[0;36mcheck_classification_targets\u001b[0;34m(y)\u001b[0m\n\u001b[1;32m 181\u001b[0m if y_type not in ['binary', 'multiclass', 'multiclass-multioutput',\n\u001b[1;32m 182\u001b[0m 'multilabel-indicator', 'multilabel-sequences']:\n\u001b[0;32m--> 183\u001b[0;31m \u001b[0;32mraise\u001b[0m \u001b[0mValueError\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m\"Unknown label type: %r\"\u001b[0m \u001b[0;34m%\u001b[0m \u001b[0my_type\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 184\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 185\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;31mValueError\u001b[0m: Unknown label type: 'continuous'" + ] + } + ], + "source": [ + "from sklearn.svm import SVC\n", + "from sklearn.semi_supervised import LabelSpreading\n", + "from sklearn.semi_supervised import SelfTrainingClassifier\n", + "from sklearn import datasets\n", + "\n", + "X = df[['danceability','acousticness']].values\n", + "y = df['energy'].values\n", + "\n", + "# X = scaler.fit_transform(X)\n", + "\n", + "# step size in the mesh\n", + "h = .02\n", + "\n", + "rng = np.random.RandomState(0)\n", + "y_rand = rng.rand(y.shape[0])\n", + "y_30 = np.copy(y)\n", + "y_30[y_rand < 0.3] = -1 # set random samples to be unlabeled\n", + "y_50 = np.copy(y)\n", + "y_50[y_rand < 0.5] = -1\n", + "# we create an instance of SVM and fit out data. We do not scale our\n", + "# data since we want to plot the support vectors\n", + "ls30 = (LabelSpreading().fit(X, y_30), y_30, 'Label Spreading 30% data')\n", + "ls50 = (LabelSpreading().fit(X, y_50), y_50, 'Label Spreading 50% data')\n", + "ls100 = (LabelSpreading().fit(X, y), y, 'Label Spreading 100% data')\n", + "\n", + "# the base classifier for self-training is identical to the SVC\n", + "base_classifier = SVC(kernel='rbf', gamma=.5, probability=True)\n", + "st30 = (SelfTrainingClassifier(base_classifier).fit(X, y_30),\n", + " y_30, 'Self-training 30% data')\n", + "st50 = (SelfTrainingClassifier(base_classifier).fit(X, y_50),\n", + " y_50, 'Self-training 50% data')\n", + "\n", + "rbf_svc = (SVC(kernel='rbf', gamma=.5).fit(X, y), y, 'SVC with rbf kernel')\n", + "\n", + "# create a mesh to plot in\n", + "x_min, x_max = X[:, 0].min() - 1, X[:, 0].max() + 1\n", + "y_min, y_max = X[:, 1].min() - 1, X[:, 1].max() + 1\n", + "xx, yy = np.meshgrid(np.arange(x_min, x_max, h),\n", + " np.arange(y_min, y_max, h))\n", + "\n", + "color_map = {-1: (1, 1, 1), 0: (0, 0, .9), 1: (1, 0, 0), 2: (.8, .6, 0)}\n", + "\n", + "classifiers = (ls30, st30, ls50, st50, ls100, rbf_svc)\n", + "for i, (clf, y_train, title) in enumerate(classifiers):\n", + " # Plot the decision boundary. For that, we will assign a color to each\n", + " # point in the mesh [x_min, x_max]x[y_min, y_max].\n", + " plt.subplot(3, 2, i + 1)\n", + " Z = clf.predict(np.c_[xx.ravel(), yy.ravel()])\n", + "\n", + " # Put the result into a color plot\n", + " Z = Z.reshape(xx.shape)\n", + " plt.contourf(xx, yy, Z, cmap=plt.cm.Paired)\n", + " plt.axis('off')\n", + "\n", + " # Plot also the training points\n", + " colors = [color_map[y] for y in y_train]\n", + " plt.scatter(X[:, 0], X[:, 1], c=colors, edgecolors='black')\n", + "\n", + " plt.title(title)\n", + "\n", + "plt.suptitle(\"Unlabeled points are colored white\", y=0.1)\n", + "plt.show()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n---\n\n**Aviso Legal**: \nEste documento foi traduzido utilizando o serviço de tradução por IA [Co-op Translator](https://github.com/Azure/co-op-translator). Embora nos esforcemos para garantir a precisão, esteja ciente de que traduções automatizadas podem conter erros ou imprecisões. O documento original em seu idioma nativo deve ser considerado a fonte autoritativa. Para informações críticas, recomenda-se a tradução profissional realizada por humanos. Não nos responsabilizamos por quaisquer mal-entendidos ou interpretações equivocadas decorrentes do uso desta tradução.\n" + ] + } + ] +} \ No newline at end of file diff --git a/translations/pt-BR/5-Clustering/README.md b/translations/pt-BR/5-Clustering/README.md new file mode 100644 index 000000000..e03dc0bf9 --- /dev/null +++ b/translations/pt-BR/5-Clustering/README.md @@ -0,0 +1,33 @@ +# Modelos de clustering para aprendizado de máquina + +Clustering é uma tarefa de aprendizado de máquina que busca encontrar objetos que se assemelham entre si e agrupá-los em grupos chamados clusters. O que diferencia o clustering de outras abordagens no aprendizado de máquina é que tudo acontece automaticamente. Na verdade, é justo dizer que é o oposto do aprendizado supervisionado. + +## Tópico regional: modelos de clustering para o gosto musical do público nigeriano 🎧 + +O público diversificado da Nigéria tem gostos musicais igualmente variados. Usando dados extraídos do Spotify (inspirado por [este artigo](https://towardsdatascience.com/country-wise-visual-analysis-of-music-taste-using-spotify-api-seaborn-in-python-77f5b749b421)), vamos analisar algumas músicas populares na Nigéria. Este conjunto de dados inclui informações sobre a pontuação de 'dançabilidade', 'acousticness', volume, 'speechiness', popularidade e energia de várias músicas. Será interessante descobrir padrões nesses dados! + +![Um toca-discos](../../../translated_images/pt-BR/turntable.f2b86b13c53302dc.webp) + +> Foto por Marcela Laskoski no Unsplash + +Nesta série de lições, você descobrirá novas maneiras de analisar dados usando técnicas de clustering. O clustering é particularmente útil quando seu conjunto de dados não possui rótulos. Se ele tiver rótulos, então técnicas de classificação, como as que você aprendeu em lições anteriores, podem ser mais úteis. Mas, em casos onde você deseja agrupar dados não rotulados, o clustering é uma ótima maneira de descobrir padrões. + +> Existem ferramentas de baixo código úteis que podem ajudá-lo a aprender a trabalhar com modelos de clustering. Experimente [Azure ML para esta tarefa](https://docs.microsoft.com/learn/modules/create-clustering-model-azure-machine-learning-designer/?WT.mc_id=academic-77952-leestott) + +## Lições + +1. [Introdução ao clustering](1-Visualize/README.md) +2. [Clustering com K-Means](2-K-Means/README.md) + +## Créditos + +Estas lições foram escritas com 🎶 por [Jen Looper](https://www.twitter.com/jenlooper) com revisões úteis de [Rishit Dagli](https://rishit_dagli) e [Muhammad Sakib Khan Inan](https://twitter.com/Sakibinan). + +O conjunto de dados [Nigerian Songs](https://www.kaggle.com/sootersaalu/nigerian-songs-spotify) foi obtido no Kaggle, extraído do Spotify. + +Exemplos úteis de K-Means que ajudaram na criação desta lição incluem esta [exploração de íris](https://www.kaggle.com/bburns/iris-exploration-pca-k-means-and-gmm-clustering), este [notebook introdutório](https://www.kaggle.com/prashant111/k-means-clustering-with-python) e este [exemplo hipotético de ONG](https://www.kaggle.com/ankandash/pca-k-means-clustering-hierarchical-clustering). + +--- + +**Aviso Legal**: +Este documento foi traduzido utilizando o serviço de tradução por IA [Co-op Translator](https://github.com/Azure/co-op-translator). Embora nos esforcemos para garantir a precisão, esteja ciente de que traduções automatizadas podem conter erros ou imprecisões. O documento original em seu idioma nativo deve ser considerado a fonte autoritativa. Para informações críticas, recomenda-se a tradução profissional realizada por humanos. Não nos responsabilizamos por quaisquer mal-entendidos ou interpretações equivocadas decorrentes do uso desta tradução. \ No newline at end of file diff --git a/translations/pt-BR/6-NLP/1-Introduction-to-NLP/README.md b/translations/pt-BR/6-NLP/1-Introduction-to-NLP/README.md new file mode 100644 index 000000000..80c880285 --- /dev/null +++ b/translations/pt-BR/6-NLP/1-Introduction-to-NLP/README.md @@ -0,0 +1,170 @@ +# Introdução ao processamento de linguagem natural + +Esta lição aborda um breve histórico e conceitos importantes do *processamento de linguagem natural*, um subcampo da *linguística computacional*. + +## [Quiz pré-aula](https://ff-quizzes.netlify.app/en/ml/) + +## Introdução + +O PLN, como é comumente conhecido, é uma das áreas mais conhecidas onde o aprendizado de máquina foi aplicado e utilizado em softwares de produção. + +✅ Você consegue pensar em algum software que usa todos os dias e que provavelmente possui algum PLN embutido? E os programas de processamento de texto ou aplicativos móveis que você utiliza regularmente? + +Você aprenderá sobre: + +- **A ideia de linguagens**. Como as linguagens se desenvolveram e quais foram as principais áreas de estudo. +- **Definição e conceitos**. Você também aprenderá definições e conceitos sobre como os computadores processam texto, incluindo análise sintática, gramática e identificação de substantivos e verbos. Há algumas tarefas de codificação nesta lição, e vários conceitos importantes são introduzidos, que você aprenderá a programar nas próximas lições. + +## Linguística computacional + +A linguística computacional é uma área de pesquisa e desenvolvimento que, ao longo de muitas décadas, estuda como os computadores podem trabalhar com, e até mesmo entender, traduzir e se comunicar em linguagens. O processamento de linguagem natural (PLN) é um campo relacionado que se concentra em como os computadores podem processar linguagens 'naturais', ou humanas. + +### Exemplo - ditado no celular + +Se você já ditou algo para o seu celular em vez de digitar ou fez uma pergunta a um assistente virtual, sua fala foi convertida em texto e depois processada ou *analisada* a partir da linguagem que você falou. As palavras-chave detectadas foram então processadas em um formato que o celular ou assistente pudesse entender e executar. + +![compreensão](../../../../6-NLP/1-Introduction-to-NLP/images/comprehension.png) +> A verdadeira compreensão linguística é difícil! Imagem por [Jen Looper](https://twitter.com/jenlooper) + +### Como essa tecnologia é possível? + +Isso é possível porque alguém escreveu um programa de computador para fazer isso. Algumas décadas atrás, alguns escritores de ficção científica previram que as pessoas falariam principalmente com seus computadores, e os computadores sempre entenderiam exatamente o que elas queriam dizer. Infelizmente, isso se revelou um problema mais difícil do que muitos imaginavam, e, embora seja um problema muito mais compreendido hoje, ainda há desafios significativos para alcançar um processamento de linguagem natural 'perfeito' no que diz respeito a entender o significado de uma frase. Isso é particularmente difícil quando se trata de compreender humor ou detectar emoções como sarcasmo em uma frase. + +Neste momento, você pode estar se lembrando das aulas escolares em que o professor abordava as partes da gramática em uma frase. Em alguns países, os alunos aprendem gramática e linguística como uma disciplina dedicada, mas em muitos, esses tópicos são incluídos como parte do aprendizado de uma língua: seja sua língua materna no ensino fundamental (aprendendo a ler e escrever) e talvez uma segunda língua no ensino médio. Não se preocupe se você não é um especialista em diferenciar substantivos de verbos ou advérbios de adjetivos! + +Se você tem dificuldade em diferenciar o *presente simples* do *presente contínuo*, você não está sozinho. Isso é desafiador para muitas pessoas, até mesmo falantes nativos de uma língua. A boa notícia é que os computadores são muito bons em aplicar regras formais, e você aprenderá a escrever código que pode *analisar* uma frase tão bem quanto um humano. O maior desafio que você examinará mais tarde é entender o *significado* e o *sentimento* de uma frase. + +## Pré-requisitos + +Para esta lição, o principal pré-requisito é ser capaz de ler e entender o idioma desta lição. Não há problemas matemáticos ou equações para resolver. Embora o autor original tenha escrito esta lição em inglês, ela também foi traduzida para outros idiomas, então você pode estar lendo uma tradução. Há exemplos onde são usados vários idiomas diferentes (para comparar as diferentes regras gramaticais de diferentes línguas). Estes *não* são traduzidos, mas o texto explicativo é, então o significado deve ser claro. + +Para as tarefas de codificação, você usará Python, e os exemplos utilizam Python 3.8. + +Nesta seção, você precisará e usará: + +- **Compreensão de Python 3**. Compreensão da linguagem de programação Python 3, esta lição utiliza entrada, loops, leitura de arquivos e arrays. +- **Visual Studio Code + extensão**. Usaremos o Visual Studio Code e sua extensão Python. Você também pode usar um IDE de Python de sua escolha. +- **TextBlob**. [TextBlob](https://github.com/sloria/TextBlob) é uma biblioteca simplificada de processamento de texto para Python. Siga as instruções no site do TextBlob para instalá-lo em seu sistema (instale também os corpora, conforme mostrado abaixo): + + ```bash + pip install -U textblob + python -m textblob.download_corpora + ``` + +> 💡 Dica: Você pode executar Python diretamente em ambientes do VS Code. Confira a [documentação](https://code.visualstudio.com/docs/languages/python?WT.mc_id=academic-77952-leestott) para mais informações. + +## Conversando com máquinas + +A história de tentar fazer os computadores entenderem a linguagem humana remonta a décadas, e um dos primeiros cientistas a considerar o processamento de linguagem natural foi *Alan Turing*. + +### O 'teste de Turing' + +Quando Turing estava pesquisando *inteligência artificial* na década de 1950, ele considerou se um teste de conversação poderia ser dado a um humano e a um computador (via correspondência digitada), onde o humano na conversa não soubesse se estava conversando com outro humano ou com um computador. + +Se, após um certo tempo de conversa, o humano não conseguisse determinar se as respostas vinham de um computador ou não, então o computador poderia ser considerado como *pensante*? + +### A inspiração - 'o jogo da imitação' + +A ideia para isso veio de um jogo de festa chamado *O Jogo da Imitação*, onde um interrogador está sozinho em uma sala e tem a tarefa de determinar quais das duas pessoas (em outra sala) são, respectivamente, homem e mulher. O interrogador pode enviar bilhetes e deve tentar pensar em perguntas cujas respostas escritas revelem o gênero da pessoa misteriosa. Claro, os jogadores na outra sala tentam enganar o interrogador respondendo de forma a confundi-lo, enquanto também dão a impressão de responder honestamente. + +### Desenvolvendo Eliza + +Na década de 1960, um cientista do MIT chamado *Joseph Weizenbaum* desenvolveu [*Eliza*](https://wikipedia.org/wiki/ELIZA), uma 'terapeuta' computadorizada que fazia perguntas ao humano e dava a impressão de entender suas respostas. No entanto, embora Eliza pudesse analisar uma frase e identificar certos elementos gramaticais e palavras-chave para dar uma resposta razoável, não se podia dizer que ela *entendia* a frase. Se Eliza recebesse uma frase no formato "**Eu estou** triste", ela poderia reorganizar e substituir palavras na frase para formar a resposta "Há quanto tempo **você está** triste". + +Isso dava a impressão de que Eliza entendia a declaração e estava fazendo uma pergunta de acompanhamento, enquanto, na realidade, ela estava apenas mudando o tempo verbal e adicionando algumas palavras. Se Eliza não conseguisse identificar uma palavra-chave para a qual tivesse uma resposta, ela daria uma resposta aleatória que poderia ser aplicável a muitas declarações diferentes. Eliza podia ser facilmente enganada, por exemplo, se um usuário escrevesse "**Você é** uma bicicleta", ela poderia responder "Há quanto tempo **eu sou** uma bicicleta?", em vez de uma resposta mais razoável. + +[![Conversando com Eliza](https://img.youtube.com/vi/RMK9AphfLco/0.jpg)](https://youtu.be/RMK9AphfLco "Conversando com Eliza") + +> 🎥 Clique na imagem acima para assistir a um vídeo sobre o programa original ELIZA + +> Nota: Você pode ler a descrição original de [Eliza](https://cacm.acm.org/magazines/1966/1/13317-elizaa-computer-program-for-the-study-of-natural-language-communication-between-man-and-machine/abstract) publicada em 1966 se tiver uma conta ACM. Alternativamente, leia sobre Eliza na [Wikipedia](https://wikipedia.org/wiki/ELIZA). + +## Exercício - programando um bot de conversação básico + +Um bot de conversação, como Eliza, é um programa que solicita a entrada do usuário e parece entender e responder de forma inteligente. Diferentemente de Eliza, nosso bot não terá várias regras que dão a aparência de uma conversa inteligente. Em vez disso, nosso bot terá apenas uma habilidade: manter a conversa com respostas aleatórias que podem funcionar em quase qualquer conversa trivial. + +### O plano + +Seus passos ao construir um bot de conversação: + +1. Imprimir instruções orientando o usuário sobre como interagir com o bot. +2. Iniciar um loop: + 1. Aceitar a entrada do usuário. + 2. Se o usuário pedir para sair, então sair. + 3. Processar a entrada do usuário e determinar a resposta (neste caso, a resposta será uma escolha aleatória de uma lista de possíveis respostas genéricas). + 4. Imprimir a resposta. +3. Voltar ao passo 2. + +### Construindo o bot + +Vamos criar o bot a seguir. Começaremos definindo algumas frases. + +1. Crie este bot você mesmo em Python com as seguintes respostas aleatórias: + + ```python + random_responses = ["That is quite interesting, please tell me more.", + "I see. Do go on.", + "Why do you say that?", + "Funny weather we've been having, isn't it?", + "Let's change the subject.", + "Did you catch the game last night?"] + ``` + + Aqui está um exemplo de saída para guiá-lo (a entrada do usuário está nas linhas que começam com `>`): + + ```output + Hello, I am Marvin, the simple robot. + You can end this conversation at any time by typing 'bye' + After typing each answer, press 'enter' + How are you today? + > I am good thanks + That is quite interesting, please tell me more. + > today I went for a walk + Did you catch the game last night? + > I did, but my team lost + Funny weather we've been having, isn't it? + > yes but I hope next week is better + Let's change the subject. + > ok, lets talk about music + Why do you say that? + > because I like music! + Why do you say that? + > bye + It was nice talking to you, goodbye! + ``` + + Uma possível solução para a tarefa está [aqui](https://github.com/microsoft/ML-For-Beginners/blob/main/6-NLP/1-Introduction-to-NLP/solution/bot.py). + + ✅ Pare e reflita + + 1. Você acha que as respostas aleatórias 'enganariam' alguém a pensar que o bot realmente as entendeu? + 2. Quais recursos o bot precisaria para ser mais eficaz? + 3. Se um bot pudesse realmente 'entender' o significado de uma frase, ele precisaria 'lembrar' o significado de frases anteriores em uma conversa também? + +--- + +## 🚀Desafio + +Escolha um dos elementos de "pare e reflita" acima e tente implementá-lo em código ou escreva uma solução no papel usando pseudocódigo. + +Na próxima lição, você aprenderá sobre várias outras abordagens para analisar linguagem natural e aprendizado de máquina. + +## [Quiz pós-aula](https://ff-quizzes.netlify.app/en/ml/) + +## Revisão e autoestudo + +Confira as referências abaixo como oportunidades de leitura adicional. + +### Referências + +1. Schubert, Lenhart, "Computational Linguistics", *The Stanford Encyclopedia of Philosophy* (Spring 2020 Edition), Edward N. Zalta (ed.), URL = . +2. Princeton University "About WordNet." [WordNet](https://wordnet.princeton.edu/). Princeton University. 2010. + +## Tarefa + +[Procure por um bot](assignment.md) + +--- + +**Aviso Legal**: +Este documento foi traduzido utilizando o serviço de tradução por IA [Co-op Translator](https://github.com/Azure/co-op-translator). Embora nos esforcemos para garantir a precisão, esteja ciente de que traduções automáticas podem conter erros ou imprecisões. O documento original em seu idioma nativo deve ser considerado a fonte oficial. Para informações críticas, recomenda-se a tradução profissional realizada por humanos. Não nos responsabilizamos por quaisquer mal-entendidos ou interpretações equivocadas decorrentes do uso desta tradução. \ No newline at end of file diff --git a/translations/pt-BR/6-NLP/1-Introduction-to-NLP/assignment.md b/translations/pt-BR/6-NLP/1-Introduction-to-NLP/assignment.md new file mode 100644 index 000000000..8da1349f4 --- /dev/null +++ b/translations/pt-BR/6-NLP/1-Introduction-to-NLP/assignment.md @@ -0,0 +1,16 @@ +# Procure um bot + +## Instruções + +Bots estão em todos os lugares. Sua tarefa: encontre um e adote-o! Você pode encontrá-los em sites, aplicativos bancários e ao telefone, por exemplo, quando liga para empresas de serviços financeiros em busca de conselhos ou informações sobre contas. Analise o bot e veja se consegue confundi-lo. Se conseguir confundir o bot, por que acha que isso aconteceu? Escreva um breve relatório sobre sua experiência. + +## Rubrica + +| Critérios | Exemplário | Adequado | Precisa Melhorar | +| --------- | ----------------------------------------------------------------------------------------------------------- | ------------------------------------------ | --------------------- | +| | Um relatório completo de uma página é escrito, explicando a arquitetura presumida do bot e detalhando sua experiência com ele | O relatório está incompleto ou não foi bem pesquisado | Nenhum relatório foi enviado | + +--- + +**Aviso Legal**: +Este documento foi traduzido utilizando o serviço de tradução por IA [Co-op Translator](https://github.com/Azure/co-op-translator). Embora nos esforcemos para garantir a precisão, esteja ciente de que traduções automatizadas podem conter erros ou imprecisões. O documento original em seu idioma nativo deve ser considerado a fonte autoritativa. Para informações críticas, recomenda-se a tradução profissional realizada por humanos. Não nos responsabilizamos por quaisquer mal-entendidos ou interpretações equivocadas decorrentes do uso desta tradução. \ No newline at end of file diff --git a/translations/pt-BR/6-NLP/2-Tasks/README.md b/translations/pt-BR/6-NLP/2-Tasks/README.md new file mode 100644 index 000000000..f9ff04874 --- /dev/null +++ b/translations/pt-BR/6-NLP/2-Tasks/README.md @@ -0,0 +1,219 @@ +# Tarefas e técnicas comuns de processamento de linguagem natural + +Para a maioria das tarefas de *processamento de linguagem natural*, o texto a ser processado deve ser dividido, examinado e os resultados armazenados ou cruzados com regras e conjuntos de dados. Essas tarefas permitem que o programador derive o _significado_, a _intenção_ ou apenas a _frequência_ de termos e palavras em um texto. + +## [Quiz pré-aula](https://ff-quizzes.netlify.app/en/ml/) + +Vamos explorar técnicas comuns usadas no processamento de texto. Combinadas com aprendizado de máquina, essas técnicas ajudam a analisar grandes volumes de texto de forma eficiente. Antes de aplicar ML a essas tarefas, no entanto, vamos entender os problemas enfrentados por um especialista em PLN. + +## Tarefas comuns em PLN + +Existem diferentes maneiras de analisar um texto com o qual você está trabalhando. Há tarefas que você pode realizar e, por meio delas, é possível compreender o texto e tirar conclusões. Normalmente, essas tarefas são realizadas em sequência. + +### Tokenização + +Provavelmente, a primeira coisa que a maioria dos algoritmos de PLN precisa fazer é dividir o texto em tokens, ou palavras. Embora isso pareça simples, lidar com pontuação e delimitadores de palavras e frases em diferentes idiomas pode ser complicado. Pode ser necessário usar vários métodos para determinar as demarcações. + +![tokenization](../../../../6-NLP/2-Tasks/images/tokenization.png) +> Tokenizando uma frase de **Orgulho e Preconceito**. Infográfico por [Jen Looper](https://twitter.com/jenlooper) + +### Embeddings + +[Word embeddings](https://wikipedia.org/wiki/Word_embedding) são uma maneira de converter seus dados textuais em valores numéricos. Os embeddings são feitos de forma que palavras com significados semelhantes ou usadas juntas fiquem agrupadas. + +![word embeddings](../../../../6-NLP/2-Tasks/images/embedding.png) +> "Tenho o maior respeito pelos seus nervos, eles são meus velhos amigos." - Word embeddings para uma frase de **Orgulho e Preconceito**. Infográfico por [Jen Looper](https://twitter.com/jenlooper) + +✅ Experimente [esta ferramenta interessante](https://projector.tensorflow.org/) para explorar word embeddings. Clicar em uma palavra mostra clusters de palavras semelhantes: 'brinquedo' agrupa-se com 'disney', 'lego', 'playstation' e 'console'. + +### Parsing e Marcação de Partes do Discurso + +Cada palavra que foi tokenizada pode ser marcada como uma parte do discurso - um substantivo, verbo ou adjetivo. A frase `a rápida raposa vermelha pulou sobre o cachorro marrom preguiçoso` pode ser marcada como raposa = substantivo, pulou = verbo. + +![parsing](../../../../6-NLP/2-Tasks/images/parse.png) + +> Fazendo parsing de uma frase de **Orgulho e Preconceito**. Infográfico por [Jen Looper](https://twitter.com/jenlooper) + +Parsing é reconhecer quais palavras estão relacionadas umas às outras em uma frase - por exemplo, `a rápida raposa vermelha pulou` é uma sequência de adjetivo-substantivo-verbo que é separada da sequência `cachorro marrom preguiçoso`. + +### Frequência de Palavras e Frases + +Um procedimento útil ao analisar um grande corpo de texto é construir um dicionário de cada palavra ou frase de interesse e com que frequência ela aparece. A frase `a rápida raposa vermelha pulou sobre o cachorro marrom preguiçoso` tem uma frequência de 2 para a palavra "a". + +Vamos observar um exemplo de texto onde contamos a frequência das palavras. O poema The Winners de Rudyard Kipling contém o seguinte verso: + +```output +What the moral? Who rides may read. +When the night is thick and the tracks are blind +A friend at a pinch is a friend, indeed, +But a fool to wait for the laggard behind. +Down to Gehenna or up to the Throne, +He travels the fastest who travels alone. +``` + +Como as frequências de frases podem ser sensíveis ou não a maiúsculas e minúsculas, conforme necessário, a frase `um amigo` tem uma frequência de 2, `o` tem uma frequência de 6 e `viaja` tem uma frequência de 2. + +### N-grams + +Um texto pode ser dividido em sequências de palavras de um comprimento definido, uma única palavra (unigrama), duas palavras (bigrama), três palavras (trigrama) ou qualquer número de palavras (n-gramas). + +Por exemplo, `a rápida raposa vermelha pulou sobre o cachorro marrom preguiçoso` com um n-grama de 2 produz os seguintes n-gramas: + +1. a rápida +2. rápida raposa +3. raposa vermelha +4. vermelha pulou +5. pulou sobre +6. sobre o +7. o cachorro +8. cachorro marrom +9. marrom preguiçoso + +Pode ser mais fácil visualizar isso como uma janela deslizante sobre a frase. Aqui está para n-gramas de 3 palavras, o n-grama está em negrito em cada frase: + +1. **a rápida raposa** vermelha pulou sobre o cachorro marrom preguiçoso +2. a **rápida raposa vermelha** pulou sobre o cachorro marrom preguiçoso +3. a rápida **raposa vermelha pulou** sobre o cachorro marrom preguiçoso +4. a rápida raposa **vermelha pulou sobre** o cachorro marrom preguiçoso +5. a rápida raposa vermelha **pulou sobre o** cachorro marrom preguiçoso +6. a rápida raposa vermelha pulou **sobre o cachorro** marrom preguiçoso +7. a rápida raposa vermelha pulou sobre **o cachorro marrom** preguiçoso +8. a rápida raposa vermelha pulou sobre o **cachorro marrom preguiçoso** + +![n-grams sliding window](../../../../6-NLP/2-Tasks/images/n-grams.gif) + +> Valor de N-grama de 3: Infográfico por [Jen Looper](https://twitter.com/jenlooper) + +### Extração de Frases Nominais + +Na maioria das frases, há um substantivo que é o sujeito ou objeto da frase. Em inglês, muitas vezes é identificável por ter 'a', 'an' ou 'the' antes dele. Identificar o sujeito ou objeto de uma frase extraindo a 'frase nominal' é uma tarefa comum em PLN ao tentar entender o significado de uma frase. + +✅ Na frase "Não consigo fixar a hora, ou o local, ou o olhar ou as palavras, que lançaram a base. Faz muito tempo. Eu já estava no meio antes de perceber que tinha começado.", você consegue identificar as frases nominais? + +Na frase `a rápida raposa vermelha pulou sobre o cachorro marrom preguiçoso`, há 2 frases nominais: **rápida raposa vermelha** e **cachorro marrom preguiçoso**. + +### Análise de Sentimento + +Uma frase ou texto pode ser analisado para determinar o sentimento, ou quão *positivo* ou *negativo* ele é. O sentimento é medido em *polaridade* e *objetividade/subjetividade*. A polaridade é medida de -1.0 a 1.0 (negativo a positivo) e de 0.0 a 1.0 (mais objetivo a mais subjetivo). + +✅ Mais tarde, você aprenderá que existem diferentes maneiras de determinar o sentimento usando aprendizado de máquina, mas uma delas é ter uma lista de palavras e frases categorizadas como positivas ou negativas por um especialista humano e aplicar esse modelo ao texto para calcular uma pontuação de polaridade. Você consegue ver como isso funcionaria em algumas circunstâncias e menos em outras? + +### Flexão + +A flexão permite que você pegue uma palavra e obtenha sua forma singular ou plural. + +### Lematização + +Um *lema* é a raiz ou palavra-base para um conjunto de palavras, por exemplo, *voou*, *voa*, *voando* têm como lema o verbo *voar*. + +Também existem bancos de dados úteis disponíveis para pesquisadores de PLN, notavelmente: + +### WordNet + +[WordNet](https://wordnet.princeton.edu/) é um banco de dados de palavras, sinônimos, antônimos e muitos outros detalhes para cada palavra em vários idiomas. É incrivelmente útil ao tentar construir tradutores, verificadores ortográficos ou ferramentas de linguagem de qualquer tipo. + +## Bibliotecas de PLN + +Felizmente, você não precisa construir todas essas técnicas sozinho, pois existem excelentes bibliotecas Python disponíveis que tornam o PLN muito mais acessível para desenvolvedores que não são especializados em processamento de linguagem natural ou aprendizado de máquina. As próximas lições incluem mais exemplos dessas bibliotecas, mas aqui você aprenderá alguns exemplos úteis para ajudá-lo na próxima tarefa. + +### Exercício - usando a biblioteca `TextBlob` + +Vamos usar uma biblioteca chamada TextBlob, pois ela contém APIs úteis para lidar com esses tipos de tarefas. TextBlob "se apoia nos ombros gigantes do [NLTK](https://nltk.org) e do [pattern](https://github.com/clips/pattern), e funciona bem com ambos." Ela possui uma quantidade considerável de ML embutida em sua API. + +> Nota: Um [Guia Rápido](https://textblob.readthedocs.io/en/dev/quickstart.html#quickstart) útil está disponível para TextBlob e é recomendado para desenvolvedores Python experientes. + +Ao tentar identificar *frases nominais*, o TextBlob oferece várias opções de extratores para encontrá-las. + +1. Dê uma olhada no `ConllExtractor`. + + ```python + from textblob import TextBlob + from textblob.np_extractors import ConllExtractor + # import and create a Conll extractor to use later + extractor = ConllExtractor() + + # later when you need a noun phrase extractor: + user_input = input("> ") + user_input_blob = TextBlob(user_input, np_extractor=extractor) # note non-default extractor specified + np = user_input_blob.noun_phrases + ``` + + > O que está acontecendo aqui? [ConllExtractor](https://textblob.readthedocs.io/en/dev/api_reference.html?highlight=Conll#textblob.en.np_extractors.ConllExtractor) é "Um extrator de frases nominais que usa chunk parsing treinado com o corpus de treinamento ConLL-2000." ConLL-2000 refere-se à Conferência de 2000 sobre Aprendizado Computacional de Linguagem Natural. Cada ano, a conferência hospedava um workshop para resolver um problema desafiador de PLN, e em 2000 foi o chunking de frases nominais. Um modelo foi treinado no Wall Street Journal, com "as seções 15-18 como dados de treinamento (211727 tokens) e a seção 20 como dados de teste (47377 tokens)". Você pode conferir os procedimentos usados [aqui](https://www.clips.uantwerpen.be/conll2000/chunking/) e os [resultados](https://ifarm.nl/erikt/research/np-chunking.html). + +### Desafio - melhorando seu bot com PLN + +Na lição anterior, você construiu um bot de perguntas e respostas muito simples. Agora, você tornará Marvin um pouco mais simpático analisando sua entrada para detectar o sentimento e imprimindo uma resposta correspondente. Você também precisará identificar uma `noun_phrase` e perguntar sobre ela. + +Seus passos para construir um bot conversacional melhor: + +1. Imprima instruções orientando o usuário sobre como interagir com o bot. +2. Inicie o loop: + 1. Aceite a entrada do usuário. + 2. Se o usuário pedir para sair, encerre. + 3. Processe a entrada do usuário e determine a resposta de sentimento apropriada. + 4. Se uma frase nominal for detectada no sentimento, pluralize-a e peça mais informações sobre esse tópico. + 5. Imprima a resposta. +3. Volte ao passo 2. + +Aqui está o trecho de código para determinar o sentimento usando TextBlob. Observe que há apenas quatro *gradientes* de resposta de sentimento (você pode adicionar mais, se quiser): + +```python +if user_input_blob.polarity <= -0.5: + response = "Oh dear, that sounds bad. " +elif user_input_blob.polarity <= 0: + response = "Hmm, that's not great. " +elif user_input_blob.polarity <= 0.5: + response = "Well, that sounds positive. " +elif user_input_blob.polarity <= 1: + response = "Wow, that sounds great. " +``` + +Aqui está um exemplo de saída para guiá-lo (a entrada do usuário está nas linhas que começam com >): + +```output +Hello, I am Marvin, the friendly robot. +You can end this conversation at any time by typing 'bye' +After typing each answer, press 'enter' +How are you today? +> I am ok +Well, that sounds positive. Can you tell me more? +> I went for a walk and saw a lovely cat +Well, that sounds positive. Can you tell me more about lovely cats? +> cats are the best. But I also have a cool dog +Wow, that sounds great. Can you tell me more about cool dogs? +> I have an old hounddog but he is sick +Hmm, that's not great. Can you tell me more about old hounddogs? +> bye +It was nice talking to you, goodbye! +``` + +Uma possível solução para a tarefa está [aqui](https://github.com/microsoft/ML-For-Beginners/blob/main/6-NLP/2-Tasks/solution/bot.py). + +✅ Verificação de Conhecimento + +1. Você acha que as respostas simpáticas poderiam 'enganar' alguém a pensar que o bot realmente os entende? +2. Identificar a frase nominal torna o bot mais 'crível'? +3. Por que extrair uma 'frase nominal' de uma frase seria algo útil? + +--- + +Implemente o bot na verificação de conhecimento anterior e teste-o com um amigo. Ele consegue enganá-lo? Você consegue tornar seu bot mais 'crível'? + +## 🚀Desafio + +Escolha uma tarefa na verificação de conhecimento anterior e tente implementá-la. Teste o bot com um amigo. Ele consegue enganá-lo? Você consegue tornar seu bot mais 'crível'? + +## [Quiz pós-aula](https://ff-quizzes.netlify.app/en/ml/) + +## Revisão e Autoestudo + +Nas próximas lições, você aprenderá mais sobre análise de sentimento. Pesquise essa técnica interessante em artigos como os do [KDNuggets](https://www.kdnuggets.com/tag/nlp). + +## Tarefa + +[Faça um bot responder](assignment.md) + +--- + +**Aviso Legal**: +Este documento foi traduzido utilizando o serviço de tradução por IA [Co-op Translator](https://github.com/Azure/co-op-translator). Embora nos esforcemos para garantir a precisão, esteja ciente de que traduções automatizadas podem conter erros ou imprecisões. O documento original em seu idioma nativo deve ser considerado a fonte autoritativa. Para informações críticas, recomenda-se a tradução profissional realizada por humanos. Não nos responsabilizamos por quaisquer mal-entendidos ou interpretações equivocadas decorrentes do uso desta tradução. \ No newline at end of file diff --git a/translations/pt-BR/6-NLP/2-Tasks/assignment.md b/translations/pt-BR/6-NLP/2-Tasks/assignment.md new file mode 100644 index 000000000..16a697e99 --- /dev/null +++ b/translations/pt-BR/6-NLP/2-Tasks/assignment.md @@ -0,0 +1,16 @@ +# Faça um Bot responder + +## Instruções + +Nas últimas lições, você programou um bot básico com quem pode conversar. Esse bot dá respostas aleatórias até que você diga 'tchau'. Você consegue fazer as respostas um pouco menos aleatórias e ativar respostas específicas quando você disser coisas como 'por quê' ou 'como'? Pense um pouco sobre como o aprendizado de máquina pode tornar esse tipo de trabalho menos manual enquanto você expande seu bot. Você pode usar as bibliotecas NLTK ou TextBlob para facilitar suas tarefas. + +## Critérios de Avaliação + +| Critério | Exemplar | Adequado | Precisa Melhorar | +| -------- | -------------------------------------------- | ------------------------------------------------ | ----------------------- | +| | Um novo arquivo bot.py é apresentado e documentado | Um novo arquivo bot é apresentado, mas contém erros | Um arquivo não é apresentado | + +--- + +**Aviso Legal**: +Este documento foi traduzido utilizando o serviço de tradução por IA [Co-op Translator](https://github.com/Azure/co-op-translator). Embora nos esforcemos para garantir a precisão, esteja ciente de que traduções automatizadas podem conter erros ou imprecisões. O documento original em seu idioma nativo deve ser considerado a fonte autoritativa. Para informações críticas, recomenda-se a tradução profissional realizada por humanos. Não nos responsabilizamos por quaisquer mal-entendidos ou interpretações equivocadas decorrentes do uso desta tradução. \ No newline at end of file diff --git a/translations/pt-BR/6-NLP/3-Translation-Sentiment/README.md b/translations/pt-BR/6-NLP/3-Translation-Sentiment/README.md new file mode 100644 index 000000000..b32420687 --- /dev/null +++ b/translations/pt-BR/6-NLP/3-Translation-Sentiment/README.md @@ -0,0 +1,191 @@ +# Tradução e análise de sentimentos com ML + +Nas lições anteriores, você aprendeu como construir um bot básico usando `TextBlob`, uma biblioteca que incorpora aprendizado de máquina nos bastidores para realizar tarefas básicas de PLN, como extração de frases nominais. Outro desafio importante na linguística computacional é a _tradução_ precisa de uma frase de um idioma falado ou escrito para outro. + +## [Quiz pré-aula](https://ff-quizzes.netlify.app/en/ml/) + +A tradução é um problema muito difícil, agravado pelo fato de que existem milhares de idiomas, cada um com regras gramaticais muito diferentes. Uma abordagem é converter as regras gramaticais formais de um idioma, como o inglês, em uma estrutura independente de idioma e, em seguida, traduzi-la convertendo de volta para outro idioma. Essa abordagem envolve as seguintes etapas: + +1. **Identificação**. Identificar ou marcar as palavras no idioma de entrada como substantivos, verbos, etc. +2. **Criar tradução**. Produzir uma tradução direta de cada palavra no formato do idioma de destino. + +### Exemplo de frase, Inglês para Irlandês + +Em 'inglês', a frase _I feel happy_ tem três palavras na seguinte ordem: + +- **sujeito** (I) +- **verbo** (feel) +- **adjetivo** (happy) + +No entanto, no idioma 'irlandês', a mesma frase tem uma estrutura gramatical muito diferente - emoções como "*feliz*" ou "*triste*" são expressas como estando *sobre* você. + +A frase em inglês `I feel happy` em irlandês seria `Tá athas orm`. Uma tradução *literal* seria `Felicidade está sobre mim`. + +Um falante de irlandês traduzindo para o inglês diria `I feel happy`, e não `Happy is upon me`, porque ele entende o significado da frase, mesmo que as palavras e a estrutura da frase sejam diferentes. + +A ordem formal da frase em irlandês é: + +- **verbo** (Tá ou é) +- **adjetivo** (athas, ou feliz) +- **sujeito** (orm, ou sobre mim) + +## Tradução + +Um programa de tradução ingênuo pode traduzir apenas palavras, ignorando a estrutura da frase. + +✅ Se você aprendeu um segundo (ou terceiro ou mais) idioma como adulto, pode ter começado pensando no seu idioma nativo, traduzindo um conceito palavra por palavra na sua cabeça para o segundo idioma e, em seguida, falando sua tradução. Isso é semelhante ao que programas de tradução ingênuos fazem. É importante superar essa fase para alcançar a fluência! + +A tradução ingênua leva a traduções ruins (e às vezes hilárias): `I feel happy` traduz literalmente para `Mise bhraitheann athas` em irlandês. Isso significa (literalmente) `eu sinto feliz` e não é uma frase válida em irlandês. Mesmo que o inglês e o irlandês sejam idiomas falados em duas ilhas vizinhas, eles são muito diferentes, com estruturas gramaticais distintas. + +> Você pode assistir a alguns vídeos sobre as tradições linguísticas irlandesas, como [este aqui](https://www.youtube.com/watch?v=mRIaLSdRMMs) + +### Abordagens de aprendizado de máquina + +Até agora, você aprendeu sobre a abordagem de regras formais para o processamento de linguagem natural. Outra abordagem é ignorar o significado das palavras e _usar aprendizado de máquina para detectar padrões_. Isso pode funcionar na tradução se você tiver muitos textos (um *corpus*) ou textos (*corpora*) nos idiomas de origem e de destino. + +Por exemplo, considere o caso de *Orgulho e Preconceito*, um romance inglês bem conhecido escrito por Jane Austen em 1813. Se você consultar o livro em inglês e uma tradução humana do livro em *francês*, poderá detectar frases em um idioma que são traduzidas _idiomaticamente_ para o outro. Você fará isso em breve. + +Por exemplo, quando uma frase em inglês como `I have no money` é traduzida literalmente para o francês, pode se tornar `Je n'ai pas de monnaie`. "Monnaie" é um falso cognato complicado em francês, pois 'money' e 'monnaie' não são sinônimos. Uma tradução melhor que um humano poderia fazer seria `Je n'ai pas d'argent`, porque transmite melhor o significado de que você não tem dinheiro (em vez de 'troco', que é o significado de 'monnaie'). + +![monnaie](../../../../6-NLP/3-Translation-Sentiment/images/monnaie.png) + +> Imagem por [Jen Looper](https://twitter.com/jenlooper) + +Se um modelo de ML tiver traduções humanas suficientes para construir um modelo, ele pode melhorar a precisão das traduções identificando padrões comuns em textos que foram previamente traduzidos por falantes humanos especialistas em ambos os idiomas. + +### Exercício - tradução + +Você pode usar `TextBlob` para traduzir frases. Experimente a famosa primeira linha de **Orgulho e Preconceito**: + +```python +from textblob import TextBlob + +blob = TextBlob( + "It is a truth universally acknowledged, that a single man in possession of a good fortune, must be in want of a wife!" +) +print(blob.translate(to="fr")) + +``` + +`TextBlob` faz um trabalho muito bom na tradução: "C'est une vérité universellement reconnue, qu'un homme célibataire en possession d'une bonne fortune doit avoir besoin d'une femme!". + +Pode-se argumentar que a tradução do TextBlob é muito mais precisa, de fato, do que a tradução francesa de 1932 do livro por V. Leconte e Ch. Pressoir: + +"C'est une vérité universelle qu'un célibataire pourvu d'une belle fortune doit avoir envie de se marier, et, si peu que l'on sache de son sentiment à cet egard, lorsqu'il arrive dans une nouvelle résidence, cette idée est si bien fixée dans l'esprit de ses voisins qu'ils le considèrent sur-le-champ comme la propriété légitime de l'une ou l'autre de leurs filles." + +Nesse caso, a tradução informada por ML faz um trabalho melhor do que o tradutor humano, que adicionou palavras desnecessárias à boca do autor original para 'clareza'. + +> O que está acontecendo aqui? E por que o TextBlob é tão bom em tradução? Bem, nos bastidores, ele está usando o Google Translate, uma IA sofisticada capaz de analisar milhões de frases para prever as melhores sequências para a tarefa em questão. Não há nada manual acontecendo aqui, e você precisa de uma conexão com a internet para usar `blob.translate`. + +✅ Experimente mais frases. Qual é melhor, ML ou tradução humana? Em quais casos? + +## Análise de sentimentos + +Outra área onde o aprendizado de máquina pode funcionar muito bem é a análise de sentimentos. Uma abordagem não baseada em ML para sentimentos é identificar palavras e frases que são 'positivas' e 'negativas'. Em seguida, dado um novo texto, calcular o valor total das palavras positivas, negativas e neutras para identificar o sentimento geral. + +Essa abordagem é facilmente enganada, como você pode ter visto na tarefa do Marvin - a frase `Great, that was a wonderful waste of time, I'm glad we are lost on this dark road` é uma frase sarcástica e de sentimento negativo, mas o algoritmo simples detecta 'great', 'wonderful', 'glad' como positivas e 'waste', 'lost' e 'dark' como negativas. O sentimento geral é influenciado por essas palavras conflitantes. + +✅ Pare um segundo e pense em como transmitimos sarcasmo como falantes humanos. A inflexão do tom desempenha um papel importante. Tente dizer a frase "Well, that film was awesome" de diferentes maneiras para descobrir como sua voz transmite significado. + +### Abordagens de ML + +A abordagem de ML seria reunir manualmente textos negativos e positivos - tweets, resenhas de filmes ou qualquer coisa onde o humano tenha dado uma pontuação *e* uma opinião escrita. Em seguida, técnicas de PLN podem ser aplicadas às opiniões e pontuações, para que padrões surjam (por exemplo, resenhas de filmes positivas tendem a ter a frase 'Oscar worthy' mais do que resenhas negativas, ou resenhas positivas de restaurantes dizem 'gourmet' muito mais do que 'disgusting'). + +> ⚖️ **Exemplo**: Se você trabalhasse no escritório de um político e houvesse uma nova lei sendo debatida, os eleitores poderiam escrever para o escritório com e-mails a favor ou contra a nova lei. Digamos que você seja encarregado de ler os e-mails e classificá-los em 2 pilhas, *a favor* e *contra*. Se houvesse muitos e-mails, você poderia se sentir sobrecarregado tentando ler todos. Não seria ótimo se um bot pudesse ler todos para você, entendê-los e dizer em qual pilha cada e-mail deveria estar? +> +> Uma maneira de conseguir isso é usar aprendizado de máquina. Você treinaria o modelo com uma parte dos e-mails *contra* e uma parte dos e-mails *a favor*. O modelo tenderia a associar frases e palavras ao lado contra e ao lado a favor, *mas não entenderia nenhum conteúdo*, apenas que certas palavras e padrões eram mais propensos a aparecer em um e-mail *contra* ou *a favor*. Você poderia testá-lo com alguns e-mails que não usou para treinar o modelo e ver se ele chegava à mesma conclusão que você. Então, uma vez satisfeito com a precisão do modelo, você poderia processar e-mails futuros sem precisar ler cada um. + +✅ Esse processo soa como processos que você usou em lições anteriores? + +## Exercício - frases sentimentais + +O sentimento é medido com uma *polaridade* de -1 a 1, onde -1 é o sentimento mais negativo e 1 é o mais positivo. O sentimento também é medido com uma pontuação de 0 - 1 para objetividade (0) e subjetividade (1). + +Dê outra olhada em *Orgulho e Preconceito* de Jane Austen. O texto está disponível aqui no [Project Gutenberg](https://www.gutenberg.org/files/1342/1342-h/1342-h.htm). O exemplo abaixo mostra um programa curto que analisa o sentimento das primeiras e últimas frases do livro e exibe sua polaridade de sentimento e pontuação de subjetividade/objetividade. + +Você deve usar a biblioteca `TextBlob` (descrita acima) para determinar o `sentimento` (você não precisa escrever seu próprio calculador de sentimentos) na seguinte tarefa. + +```python +from textblob import TextBlob + +quote1 = """It is a truth universally acknowledged, that a single man in possession of a good fortune, must be in want of a wife.""" + +quote2 = """Darcy, as well as Elizabeth, really loved them; and they were both ever sensible of the warmest gratitude towards the persons who, by bringing her into Derbyshire, had been the means of uniting them.""" + +sentiment1 = TextBlob(quote1).sentiment +sentiment2 = TextBlob(quote2).sentiment + +print(quote1 + " has a sentiment of " + str(sentiment1)) +print(quote2 + " has a sentiment of " + str(sentiment2)) +``` + +Você verá a seguinte saída: + +```output +It is a truth universally acknowledged, that a single man in possession of a good fortune, must be in want # of a wife. has a sentiment of Sentiment(polarity=0.20952380952380953, subjectivity=0.27142857142857146) + +Darcy, as well as Elizabeth, really loved them; and they were + both ever sensible of the warmest gratitude towards the persons + who, by bringing her into Derbyshire, had been the means of + uniting them. has a sentiment of Sentiment(polarity=0.7, subjectivity=0.8) +``` + +## Desafio - verificar polaridade de sentimentos + +Sua tarefa é determinar, usando a polaridade de sentimentos, se *Orgulho e Preconceito* tem mais frases absolutamente positivas do que absolutamente negativas. Para esta tarefa, você pode assumir que uma pontuação de polaridade de 1 ou -1 é absolutamente positiva ou negativa, respectivamente. + +**Passos:** + +1. Baixe uma [cópia de Orgulho e Preconceito](https://www.gutenberg.org/files/1342/1342-h/1342-h.htm) do Project Gutenberg como um arquivo .txt. Remova os metadados no início e no final do arquivo, deixando apenas o texto original. +2. Abra o arquivo em Python e extraia o conteúdo como uma string. +3. Crie um TextBlob usando a string do livro. +4. Analise cada frase do livro em um loop. + 1. Se a polaridade for 1 ou -1, armazene a frase em um array ou lista de mensagens positivas ou negativas. +5. No final, imprima todas as frases positivas e negativas (separadamente) e o número de cada uma. + +Aqui está uma [solução de exemplo](https://github.com/microsoft/ML-For-Beginners/blob/main/6-NLP/3-Translation-Sentiment/solution/notebook.ipynb). + +✅ Verificação de Conhecimento + +1. O sentimento é baseado nas palavras usadas na frase, mas o código *entende* as palavras? +2. Você acha que a polaridade de sentimento é precisa ou, em outras palavras, você *concorda* com as pontuações? + 1. Em particular, você concorda ou discorda da polaridade **positiva** absoluta das seguintes frases? + * “What an excellent father you have, girls!” said she, when the door was shut. + * “Your examination of Mr. Darcy is over, I presume,” said Miss Bingley; “and pray what is the result?” “I am perfectly convinced by it that Mr. Darcy has no defect. + * How wonderfully these sort of things occur! + * I have the greatest dislike in the world to that sort of thing. + * Charlotte is an excellent manager, I dare say. + * “This is delightful indeed! + * I am so happy! + * Your idea of the ponies is delightful. + 2. As próximas 3 frases foram pontuadas com um sentimento positivo absoluto, mas, ao ler com atenção, elas não são frases positivas. Por que a análise de sentimentos achou que eram frases positivas? + * Happy shall I be, when his stay at Netherfield is over!” “I wish I could say anything to comfort you,” replied Elizabeth; “but it is wholly out of my power. + * If I could but see you as happy! + * Our distress, my dear Lizzy, is very great. + 3. Você concorda ou discorda da polaridade **negativa** absoluta das seguintes frases? + - Everybody is disgusted with his pride. + - “I should like to know how he behaves among strangers.” “You shall hear then—but prepare yourself for something very dreadful. + - The pause was to Elizabeth’s feelings dreadful. + - It would be dreadful! + +✅ Qualquer aficionado por Jane Austen entenderá que ela frequentemente usa seus livros para criticar os aspectos mais ridículos da sociedade da Regência Inglesa. Elizabeth Bennett, a personagem principal de *Orgulho e Preconceito*, é uma observadora social perspicaz (como a autora), e sua linguagem é frequentemente muito sutil. Até mesmo Mr. Darcy (o interesse amoroso na história) observa o uso brincalhão e provocador da linguagem por Elizabeth: "Eu tive o prazer de sua companhia por tempo suficiente para saber que você encontra grande diversão em ocasionalmente professar opiniões que, na verdade, não são suas." + +--- + +## 🚀Desafio + +Você pode melhorar o Marvin extraindo outros recursos da entrada do usuário? + +## [Quiz pós-aula](https://ff-quizzes.netlify.app/en/ml/) + +## Revisão e Autoestudo +Existem muitas maneiras de extrair sentimentos de um texto. Pense nas aplicações empresariais que podem fazer uso dessa técnica. Reflita sobre como isso pode dar errado. Leia mais sobre sistemas sofisticados e prontos para empresas que analisam sentimentos, como o [Azure Text Analysis](https://docs.microsoft.com/azure/cognitive-services/Text-Analytics/how-tos/text-analytics-how-to-sentiment-analysis?tabs=version-3-1?WT.mc_id=academic-77952-leestott). Teste algumas das frases de Orgulho e Preconceito mencionadas acima e veja se ele consegue detectar nuances. + +## Tarefa + +[Licença poética](assignment.md) + +--- + +**Aviso Legal**: +Este documento foi traduzido utilizando o serviço de tradução por IA [Co-op Translator](https://github.com/Azure/co-op-translator). Embora nos esforcemos para garantir a precisão, esteja ciente de que traduções automáticas podem conter erros ou imprecisões. O documento original em seu idioma nativo deve ser considerado a fonte oficial. Para informações críticas, recomenda-se a tradução profissional feita por humanos. Não nos responsabilizamos por quaisquer mal-entendidos ou interpretações equivocadas decorrentes do uso desta tradução. \ No newline at end of file diff --git a/translations/pt-BR/6-NLP/3-Translation-Sentiment/assignment.md b/translations/pt-BR/6-NLP/3-Translation-Sentiment/assignment.md new file mode 100644 index 000000000..86d5084c6 --- /dev/null +++ b/translations/pt-BR/6-NLP/3-Translation-Sentiment/assignment.md @@ -0,0 +1,16 @@ +# Licença Poética + +## Instruções + +Neste [notebook](https://www.kaggle.com/jenlooper/emily-dickinson-word-frequency), você encontrará mais de 500 poemas de Emily Dickinson previamente analisados quanto ao sentimento usando o serviço de análise de texto do Azure. Usando este conjunto de dados, analise-o utilizando as técnicas descritas na lição. O sentimento sugerido de um poema corresponde à decisão do serviço mais sofisticado do Azure? Por que, na sua opinião? Algo te surpreendeu? + +## Rubrica + +| Critério | Exemplary | Adequado | Precisa de Melhorias | +| --------- | -------------------------------------------------------------------------- | ------------------------------------------------------- | ------------------------ | +| | Um notebook é apresentado com uma análise sólida da amostra de saída do autor | O notebook está incompleto ou não realiza a análise | Nenhum notebook é apresentado | + +--- + +**Aviso Legal**: +Este documento foi traduzido utilizando o serviço de tradução por IA [Co-op Translator](https://github.com/Azure/co-op-translator). Embora nos esforcemos para garantir a precisão, esteja ciente de que traduções automatizadas podem conter erros ou imprecisões. O documento original em seu idioma nativo deve ser considerado a fonte autoritativa. Para informações críticas, recomenda-se a tradução profissional realizada por humanos. Não nos responsabilizamos por quaisquer mal-entendidos ou interpretações equivocadas decorrentes do uso desta tradução. \ No newline at end of file diff --git a/translations/pt-BR/6-NLP/3-Translation-Sentiment/solution/Julia/README.md b/translations/pt-BR/6-NLP/3-Translation-Sentiment/solution/Julia/README.md new file mode 100644 index 000000000..c58234bae --- /dev/null +++ b/translations/pt-BR/6-NLP/3-Translation-Sentiment/solution/Julia/README.md @@ -0,0 +1,6 @@ + + +--- + +**Aviso Legal**: +Este documento foi traduzido utilizando o serviço de tradução por IA [Co-op Translator](https://github.com/Azure/co-op-translator). Embora nos esforcemos para garantir a precisão, esteja ciente de que traduções automatizadas podem conter erros ou imprecisões. O documento original em seu idioma nativo deve ser considerado a fonte autoritativa. Para informações críticas, recomenda-se a tradução profissional realizada por humanos. Não nos responsabilizamos por quaisquer mal-entendidos ou interpretações equivocadas decorrentes do uso desta tradução. \ No newline at end of file diff --git a/translations/pt-BR/6-NLP/3-Translation-Sentiment/solution/R/README.md b/translations/pt-BR/6-NLP/3-Translation-Sentiment/solution/R/README.md new file mode 100644 index 000000000..c58234bae --- /dev/null +++ b/translations/pt-BR/6-NLP/3-Translation-Sentiment/solution/R/README.md @@ -0,0 +1,6 @@ + + +--- + +**Aviso Legal**: +Este documento foi traduzido utilizando o serviço de tradução por IA [Co-op Translator](https://github.com/Azure/co-op-translator). Embora nos esforcemos para garantir a precisão, esteja ciente de que traduções automatizadas podem conter erros ou imprecisões. O documento original em seu idioma nativo deve ser considerado a fonte autoritativa. Para informações críticas, recomenda-se a tradução profissional realizada por humanos. Não nos responsabilizamos por quaisquer mal-entendidos ou interpretações equivocadas decorrentes do uso desta tradução. \ No newline at end of file diff --git a/translations/pt-BR/6-NLP/3-Translation-Sentiment/solution/notebook.ipynb b/translations/pt-BR/6-NLP/3-Translation-Sentiment/solution/notebook.ipynb new file mode 100644 index 000000000..aed1df079 --- /dev/null +++ b/translations/pt-BR/6-NLP/3-Translation-Sentiment/solution/notebook.ipynb @@ -0,0 +1,100 @@ +{ + "metadata": { + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": 3 + }, + "orig_nbformat": 4, + "coopTranslator": { + "original_hash": "27de2abc0235ebd22080fc8f1107454d", + "translation_date": "2025-08-30T00:14:49+00:00", + "source_file": "6-NLP/3-Translation-Sentiment/solution/notebook.ipynb", + "language_code": "br" + } + }, + "nbformat": 4, + "nbformat_minor": 2, + "cells": [ + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "from textblob import TextBlob\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# You should download the book text, clean it, and import it here\n", + "with open(\"pride.txt\", encoding=\"utf8\") as f:\n", + " file_contents = f.read()\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "book_pride = TextBlob(file_contents)\n", + "positive_sentiment_sentences = []\n", + "negative_sentiment_sentences = []" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "for sentence in book_pride.sentences:\n", + " if sentence.sentiment.polarity == 1:\n", + " positive_sentiment_sentences.append(sentence)\n", + " if sentence.sentiment.polarity == -1:\n", + " negative_sentiment_sentences.append(sentence)\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "print(\"The \" + str(len(positive_sentiment_sentences)) + \" most positive sentences:\")\n", + "for sentence in positive_sentiment_sentences:\n", + " print(\"+ \" + str(sentence.replace(\"\\n\", \"\").replace(\" \", \" \")))\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "print(\"The \" + str(len(negative_sentiment_sentences)) + \" most negative sentences:\")\n", + "for sentence in negative_sentiment_sentences:\n", + " print(\"- \" + str(sentence.replace(\"\\n\", \"\").replace(\" \", \" \")))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n---\n\n**Aviso Legal**: \nEste documento foi traduzido utilizando o serviço de tradução por IA [Co-op Translator](https://github.com/Azure/co-op-translator). Embora nos esforcemos para garantir a precisão, esteja ciente de que traduções automatizadas podem conter erros ou imprecisões. O documento original em seu idioma nativo deve ser considerado a fonte autoritativa. Para informações críticas, recomenda-se a tradução profissional realizada por humanos. Não nos responsabilizamos por quaisquer mal-entendidos ou interpretações equivocadas decorrentes do uso desta tradução.\n" + ] + } + ] +} \ No newline at end of file diff --git a/translations/pt-BR/6-NLP/4-Hotel-Reviews-1/README.md b/translations/pt-BR/6-NLP/4-Hotel-Reviews-1/README.md new file mode 100644 index 000000000..b32dedfb3 --- /dev/null +++ b/translations/pt-BR/6-NLP/4-Hotel-Reviews-1/README.md @@ -0,0 +1,408 @@ +# Análise de sentimento com avaliações de hotéis - processando os dados + +Nesta seção, você usará as técnicas das lições anteriores para realizar uma análise exploratória de dados em um grande conjunto de dados. Depois de entender bem a utilidade das várias colunas, você aprenderá: + +- como remover colunas desnecessárias +- como calcular novos dados com base nas colunas existentes +- como salvar o conjunto de dados resultante para uso no desafio final + +## [Quiz pré-aula](https://ff-quizzes.netlify.app/en/ml/) + +### Introdução + +Até agora, você aprendeu como os dados textuais são bem diferentes dos dados numéricos. Se o texto foi escrito ou falado por um humano, ele pode ser analisado para encontrar padrões, frequências, sentimentos e significados. Esta lição apresenta um conjunto de dados real com um desafio real: **[515K Hotel Reviews Data in Europe](https://www.kaggle.com/jiashenliu/515k-hotel-reviews-data-in-europe)**, que inclui uma [licença CC0: Domínio Público](https://creativecommons.org/publicdomain/zero/1.0/). Ele foi extraído de fontes públicas do Booking.com. O criador do conjunto de dados foi Jiashen Liu. + +### Preparação + +Você precisará de: + +* Capacidade de executar notebooks .ipynb usando Python 3 +* pandas +* NLTK, [que você deve instalar localmente](https://www.nltk.org/install.html) +* O conjunto de dados disponível no Kaggle [515K Hotel Reviews Data in Europe](https://www.kaggle.com/jiashenliu/515k-hotel-reviews-data-in-europe). Ele tem cerca de 230 MB descompactado. Baixe-o para a pasta raiz `/data` associada a estas lições de NLP. + +## Análise exploratória de dados + +Este desafio assume que você está construindo um bot de recomendação de hotéis usando análise de sentimento e pontuações de avaliações de hóspedes. O conjunto de dados que você usará inclui avaliações de 1493 hotéis diferentes em 6 cidades. + +Usando Python, um conjunto de dados de avaliações de hotéis e a análise de sentimento do NLTK, você pode descobrir: + +* Quais são as palavras e frases mais frequentemente usadas nas avaliações? +* As *tags* oficiais que descrevem um hotel têm correlação com as pontuações das avaliações (por exemplo, há mais avaliações negativas para um hotel específico por *Família com crianças pequenas* do que por *Viajante solo*, talvez indicando que ele é melhor para *Viajantes solo*)? +* As pontuações de sentimento do NLTK "concordam" com a pontuação numérica do avaliador? + +#### Conjunto de dados + +Vamos explorar o conjunto de dados que você baixou e salvou localmente. Abra o arquivo em um editor como VS Code ou até mesmo Excel. + +Os cabeçalhos no conjunto de dados são os seguintes: + +*Hotel_Address, Additional_Number_of_Scoring, Review_Date, Average_Score, Hotel_Name, Reviewer_Nationality, Negative_Review, Review_Total_Negative_Word_Counts, Total_Number_of_Reviews, Positive_Review, Review_Total_Positive_Word_Counts, Total_Number_of_Reviews_Reviewer_Has_Given, Reviewer_Score, Tags, days_since_review, lat, lng* + +Aqui estão agrupados de uma forma que pode ser mais fácil de examinar: +##### Colunas do hotel + +* `Hotel_Name`, `Hotel_Address`, `lat` (latitude), `lng` (longitude) + * Usando *lat* e *lng*, você poderia plotar um mapa com Python mostrando as localizações dos hotéis (talvez codificado por cores para avaliações negativas e positivas) + * Hotel_Address não parece ser útil para nós, e provavelmente será substituído por um país para facilitar a classificação e pesquisa + +**Colunas de meta-avaliação do hotel** + +* `Average_Score` + * De acordo com o criador do conjunto de dados, esta coluna é a *Pontuação média do hotel, calculada com base no último comentário do último ano*. Este parece ser um método incomum de calcular a pontuação, mas é o dado extraído, então podemos aceitá-lo por enquanto. + + ✅ Com base nas outras colunas deste conjunto de dados, você consegue pensar em outra maneira de calcular a pontuação média? + +* `Total_Number_of_Reviews` + * O número total de avaliações que este hotel recebeu - não está claro (sem escrever algum código) se isso se refere às avaliações no conjunto de dados. +* `Additional_Number_of_Scoring` + * Isso significa que uma pontuação foi dada, mas nenhuma avaliação positiva ou negativa foi escrita pelo avaliador. + +**Colunas de avaliação** + +- `Reviewer_Score` + - Este é um valor numérico com no máximo 1 casa decimal entre os valores mínimos e máximos 2.5 e 10 + - Não é explicado por que 2.5 é a menor pontuação possível +- `Negative_Review` + - Se um avaliador não escreveu nada, este campo terá "**No Negative**" + - Note que um avaliador pode escrever uma avaliação positiva na coluna de avaliação negativa (por exemplo, "não há nada de ruim neste hotel") +- `Review_Total_Negative_Word_Counts` + - Contagens mais altas de palavras negativas indicam uma pontuação mais baixa (sem verificar a sentimentalidade) +- `Positive_Review` + - Se um avaliador não escreveu nada, este campo terá "**No Positive**" + - Note que um avaliador pode escrever uma avaliação negativa na coluna de avaliação positiva (por exemplo, "não há nada de bom neste hotel") +- `Review_Total_Positive_Word_Counts` + - Contagens mais altas de palavras positivas indicam uma pontuação mais alta (sem verificar a sentimentalidade) +- `Review_Date` e `days_since_review` + - Uma medida de frescor ou desatualização pode ser aplicada a uma avaliação (avaliações mais antigas podem não ser tão precisas quanto as mais recentes porque a administração do hotel mudou, ou reformas foram feitas, ou uma piscina foi adicionada etc.) +- `Tags` + - Estas são descrições curtas que um avaliador pode selecionar para descrever o tipo de hóspede que ele era (por exemplo, solo ou família), o tipo de quarto que teve, a duração da estadia e como a avaliação foi enviada. + - Infelizmente, usar essas tags é problemático, veja a seção abaixo que discute sua utilidade. + +**Colunas do avaliador** + +- `Total_Number_of_Reviews_Reviewer_Has_Given` + - Isso pode ser um fator em um modelo de recomendação, por exemplo, se você puder determinar que avaliadores mais prolíficos com centenas de avaliações eram mais propensos a serem negativos do que positivos. No entanto, o avaliador de qualquer avaliação específica não é identificado com um código único e, portanto, não pode ser vinculado a um conjunto de avaliações. Há 30 avaliadores com 100 ou mais avaliações, mas é difícil ver como isso pode ajudar no modelo de recomendação. +- `Reviewer_Nationality` + - Algumas pessoas podem pensar que certas nacionalidades são mais propensas a dar uma avaliação positiva ou negativa devido a uma inclinação nacional. Tenha cuidado ao construir essas visões anedóticas em seus modelos. Estes são estereótipos nacionais (e às vezes raciais), e cada avaliador foi um indivíduo que escreveu uma avaliação com base em sua experiência. Ela pode ter sido filtrada por muitas lentes, como suas estadias anteriores em hotéis, a distância percorrida e seu temperamento pessoal. Pensar que sua nacionalidade foi a razão para uma pontuação de avaliação é difícil de justificar. + +##### Exemplos + +| Average Score | Total Number Reviews | Reviewer Score | Negative
Review | Positive Review | Tags | +| -------------- | ---------------------- | ---------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------- | ----------------------------------------------------------------------------------------- | +| 7.8 | 1945 | 2.5 | Este não é atualmente um hotel, mas um canteiro de obras. Fui atormentado desde cedo pela manhã e durante todo o dia com ruídos de construção inaceitáveis enquanto descansava após uma longa viagem e trabalhava no quarto. Pessoas estavam trabalhando o dia todo, ou seja, com martelos nas salas adjacentes. Pedi para trocar de quarto, mas nenhum quarto silencioso estava disponível. Para piorar, fui cobrado a mais. Saí à noite, pois tinha um voo muito cedo e recebi uma conta apropriada. Um dia depois, o hotel fez outra cobrança sem meu consentimento, excedendo o preço reservado. É um lugar terrível. Não se puna reservando aqui. | Nada. Lugar terrível. Fique longe. | Viagem de negócios. Casal. Quarto duplo padrão. Ficou 2 noites. | + +Como você pode ver, este hóspede não teve uma estadia feliz neste hotel. O hotel tem uma boa pontuação média de 7.8 e 1945 avaliações, mas este avaliador deu 2.5 e escreveu 115 palavras sobre como sua estadia foi negativa. Se ele não escreveu nada na coluna Positive_Review, você poderia deduzir que não houve nada positivo, mas ele escreveu 7 palavras de alerta. Se apenas contarmos palavras em vez do significado ou sentimento das palavras, podemos ter uma visão distorcida da intenção do avaliador. Estranhamente, sua pontuação de 2.5 é confusa, porque se a estadia no hotel foi tão ruim, por que dar qualquer ponto? Investigando o conjunto de dados de perto, você verá que a menor pontuação possível é 2.5, não 0. A maior pontuação possível é 10. + +##### Tags + +Como mencionado acima, à primeira vista, a ideia de usar `Tags` para categorizar os dados faz sentido. Infelizmente, essas tags não são padronizadas, o que significa que em um determinado hotel, as opções podem ser *Quarto individual*, *Quarto duplo* e *Quarto twin*, mas no próximo hotel, elas são *Quarto individual deluxe*, *Quarto queen clássico* e *Quarto king executivo*. Estes podem ser a mesma coisa, mas há tantas variações que a escolha se torna: + +1. Tentar alterar todos os termos para um único padrão, o que é muito difícil, porque não está claro qual seria o caminho de conversão em cada caso (por exemplo, *Quarto individual clássico* mapeia para *Quarto individual*, mas *Quarto queen superior com vista para o jardim ou cidade* é muito mais difícil de mapear) + +1. Podemos adotar uma abordagem de NLP e medir a frequência de certos termos como *Solo*, *Viajante de negócios* ou *Família com crianças pequenas* conforme se aplicam a cada hotel, e incluir isso no modelo de recomendação. + +As tags geralmente (mas nem sempre) são um único campo contendo uma lista de 5 a 6 valores separados por vírgulas alinhados a *Tipo de viagem*, *Tipo de hóspede*, *Tipo de quarto*, *Número de noites* e *Tipo de dispositivo usado para enviar a avaliação*. No entanto, como alguns avaliadores não preenchem cada campo (podem deixar um em branco), os valores nem sempre estão na mesma ordem. + +Como exemplo, pegue *Tipo de grupo*. Há 1025 possibilidades únicas neste campo na coluna `Tags`, e infelizmente apenas algumas delas se referem a um grupo (algumas são o tipo de quarto etc.). Se você filtrar apenas os que mencionam família, os resultados contêm muitos tipos de *Quarto familiar*. Se você incluir o termo *com*, ou seja, contar os valores *Família com*, os resultados são melhores, com mais de 80.000 dos 515.000 resultados contendo a frase "Família com crianças pequenas" ou "Família com crianças mais velhas". + +Isso significa que a coluna tags não é completamente inútil para nós, mas exigirá algum trabalho para torná-la útil. + +##### Pontuação média do hotel + +Há uma série de peculiaridades ou discrepâncias com o conjunto de dados que não consigo entender, mas são ilustradas aqui para que você esteja ciente delas ao construir seus modelos. Se você descobrir, por favor, nos avise na seção de discussão! + +O conjunto de dados possui as seguintes colunas relacionadas à pontuação média e ao número de avaliações: + +1. Hotel_Name +2. Additional_Number_of_Scoring +3. Average_Score +4. Total_Number_of_Reviews +5. Reviewer_Score + +O único hotel com mais avaliações neste conjunto de dados é o *Britannia International Hotel Canary Wharf* com 4789 avaliações de um total de 515.000. Mas se olharmos para o valor `Total_Number_of_Reviews` deste hotel, ele é 9086. Você poderia deduzir que há muitas mais pontuações sem avaliações, então talvez devêssemos adicionar o valor da coluna `Additional_Number_of_Scoring`. Esse valor é 2682, e somando-o a 4789 obtemos 7471, que ainda está 1615 abaixo do `Total_Number_of_Reviews`. + +Se você pegar a coluna `Average_Score`, poderia deduzir que é a média das avaliações no conjunto de dados, mas a descrição do Kaggle é "*Pontuação média do hotel, calculada com base no último comentário do último ano*". Isso não parece muito útil, mas podemos calcular nossa própria média com base nas pontuações das avaliações no conjunto de dados. Usando o mesmo hotel como exemplo, a pontuação média do hotel é dada como 7.1, mas a pontuação calculada (média da pontuação dos avaliadores *no* conjunto de dados) é 6.8. Isso é próximo, mas não o mesmo valor, e só podemos supor que as pontuações dadas nas avaliações `Additional_Number_of_Scoring` aumentaram a média para 7.1. Infelizmente, sem uma maneira de testar ou provar essa suposição, é difícil usar ou confiar em `Average_Score`, `Additional_Number_of_Scoring` e `Total_Number_of_Reviews` quando são baseados em, ou se referem a, dados que não temos. + +Para complicar ainda mais, o hotel com o segundo maior número de avaliações tem uma pontuação média calculada de 8.12 e a `Average_Score` do conjunto de dados é 8.1. Essa pontuação correta é uma coincidência ou o primeiro hotel é uma discrepância? + +Na possibilidade de que esses hotéis possam ser um caso atípico, e que talvez a maioria dos valores se alinhe (mas alguns não por algum motivo), escreveremos um pequeno programa a seguir para explorar os valores no conjunto de dados e determinar o uso correto (ou não uso) dos valores. +> 🚨 Uma nota de cautela +> +> Ao trabalhar com este conjunto de dados, você escreverá código que calcula algo a partir do texto sem precisar ler ou analisar o texto diretamente. Essa é a essência do NLP, interpretar significado ou sentimento sem que um humano precise fazê-lo. No entanto, é possível que você acabe lendo algumas das avaliações negativas. Eu recomendo que não faça isso, porque não é necessário. Algumas delas são bobas ou irrelevantes, como avaliações negativas de hotéis do tipo "O clima não estava bom", algo que está fora do controle do hotel ou de qualquer pessoa. Mas há um lado sombrio em algumas avaliações também. Às vezes, as avaliações negativas são racistas, sexistas ou preconceituosas em relação à idade. Isso é lamentável, mas esperado em um conjunto de dados extraído de um site público. Alguns avaliadores deixam comentários que você pode achar desagradáveis, desconfortáveis ou perturbadores. É melhor deixar o código medir o sentimento do que lê-los você mesmo e se sentir incomodado. Dito isso, é uma minoria que escreve tais coisas, mas elas existem mesmo assim. +## Exercício - Exploração de dados +### Carregar os dados + +Chega de examinar os dados visualmente, agora você vai escrever algum código e obter algumas respostas! Esta seção utiliza a biblioteca pandas. Sua primeira tarefa é garantir que você pode carregar e ler os dados do CSV. A biblioteca pandas possui um carregador rápido de CSV, e o resultado é colocado em um dataframe, como nas lições anteriores. O CSV que estamos carregando tem mais de meio milhão de linhas, mas apenas 17 colunas. O pandas oferece várias maneiras poderosas de interagir com um dataframe, incluindo a capacidade de realizar operações em cada linha. + +A partir daqui, nesta lição, haverá trechos de código, algumas explicações sobre o código e discussões sobre o que os resultados significam. Use o _notebook.ipynb_ incluído para o seu código. + +Vamos começar carregando o arquivo de dados que você usará: + +```python +# Load the hotel reviews from CSV +import pandas as pd +import time +# importing time so the start and end time can be used to calculate file loading time +print("Loading data file now, this could take a while depending on file size") +start = time.time() +# df is 'DataFrame' - make sure you downloaded the file to the data folder +df = pd.read_csv('../../data/Hotel_Reviews.csv') +end = time.time() +print("Loading took " + str(round(end - start, 2)) + " seconds") +``` + +Agora que os dados estão carregados, podemos realizar algumas operações com eles. Mantenha este código no topo do seu programa para a próxima parte. + +## Explorar os dados + +Neste caso, os dados já estão *limpos*, o que significa que estão prontos para trabalhar e não possuem caracteres em outros idiomas que possam atrapalhar algoritmos que esperam apenas caracteres em inglês. + +✅ Você pode ter que trabalhar com dados que exigem algum processamento inicial para formatá-los antes de aplicar técnicas de NLP, mas não desta vez. Se fosse necessário, como você lidaria com caracteres que não estão em inglês? + +Reserve um momento para garantir que, uma vez que os dados estejam carregados, você possa explorá-los com código. É muito fácil querer focar nas colunas `Negative_Review` e `Positive_Review`. Elas estão preenchidas com texto natural para seus algoritmos de NLP processarem. Mas espere! Antes de mergulhar no NLP e na análise de sentimentos, você deve seguir o código abaixo para verificar se os valores fornecidos no conjunto de dados correspondem aos valores que você calcula com pandas. + +## Operações com dataframe + +A primeira tarefa desta lição é verificar se as seguintes afirmações estão corretas, escrevendo algum código que examine o dataframe (sem alterá-lo). + +> Como muitas tarefas de programação, há várias maneiras de realizar isso, mas um bom conselho é fazer da maneira mais simples e fácil possível, especialmente se isso for mais fácil de entender quando você voltar a este código no futuro. Com dataframes, há uma API abrangente que frequentemente terá uma maneira eficiente de fazer o que você deseja. + +Trate as seguintes perguntas como tarefas de codificação e tente respondê-las sem olhar para a solução. + +1. Imprima a *forma* do dataframe que você acabou de carregar (a forma é o número de linhas e colunas). +2. Calcule a contagem de frequência para as nacionalidades dos revisores: + 1. Quantos valores distintos existem na coluna `Reviewer_Nationality` e quais são eles? + 2. Qual nacionalidade de revisor é a mais comum no conjunto de dados (imprima o país e o número de avaliações)? + 3. Quais são as 10 nacionalidades mais frequentes e suas contagens de frequência? +3. Qual foi o hotel mais avaliado para cada uma das 10 nacionalidades de revisores mais frequentes? +4. Quantas avaliações existem por hotel (contagem de frequência de hotel) no conjunto de dados? +5. Embora haja uma coluna `Average_Score` para cada hotel no conjunto de dados, você também pode calcular uma pontuação média (obtendo a média de todas as pontuações dos revisores no conjunto de dados para cada hotel). Adicione uma nova coluna ao seu dataframe com o cabeçalho `Calc_Average_Score` que contém essa média calculada. +6. Algum hotel tem o mesmo valor (arredondado para 1 casa decimal) em `Average_Score` e `Calc_Average_Score`? + 1. Tente escrever uma função Python que receba uma Series (linha) como argumento e compare os valores, imprimindo uma mensagem quando os valores não forem iguais. Em seguida, use o método `.apply()` para processar cada linha com a função. +7. Calcule e imprima quantas linhas têm valores "No Negative" na coluna `Negative_Review`. +8. Calcule e imprima quantas linhas têm valores "No Positive" na coluna `Positive_Review`. +9. Calcule e imprima quantas linhas têm valores "No Positive" na coluna `Positive_Review` **e** valores "No Negative" na coluna `Negative_Review`. + +### Respostas em código + +1. Imprima a *forma* do dataframe que você acabou de carregar (a forma é o número de linhas e colunas). + + ```python + print("The shape of the data (rows, cols) is " + str(df.shape)) + > The shape of the data (rows, cols) is (515738, 17) + ``` + +2. Calcule a contagem de frequência para as nacionalidades dos revisores: + + 1. Quantos valores distintos existem na coluna `Reviewer_Nationality` e quais são eles? + 2. Qual nacionalidade de revisor é a mais comum no conjunto de dados (imprima o país e o número de avaliações)? + + ```python + # value_counts() creates a Series object that has index and values in this case, the country and the frequency they occur in reviewer nationality + nationality_freq = df["Reviewer_Nationality"].value_counts() + print("There are " + str(nationality_freq.size) + " different nationalities") + # print first and last rows of the Series. Change to nationality_freq.to_string() to print all of the data + print(nationality_freq) + + There are 227 different nationalities + United Kingdom 245246 + United States of America 35437 + Australia 21686 + Ireland 14827 + United Arab Emirates 10235 + ... + Comoros 1 + Palau 1 + Northern Mariana Islands 1 + Cape Verde 1 + Guinea 1 + Name: Reviewer_Nationality, Length: 227, dtype: int64 + ``` + + 3. Quais são as 10 nacionalidades mais frequentes e suas contagens de frequência? + + ```python + print("The highest frequency reviewer nationality is " + str(nationality_freq.index[0]).strip() + " with " + str(nationality_freq[0]) + " reviews.") + # Notice there is a leading space on the values, strip() removes that for printing + # What is the top 10 most common nationalities and their frequencies? + print("The next 10 highest frequency reviewer nationalities are:") + print(nationality_freq[1:11].to_string()) + + The highest frequency reviewer nationality is United Kingdom with 245246 reviews. + The next 10 highest frequency reviewer nationalities are: + United States of America 35437 + Australia 21686 + Ireland 14827 + United Arab Emirates 10235 + Saudi Arabia 8951 + Netherlands 8772 + Switzerland 8678 + Germany 7941 + Canada 7894 + France 7296 + ``` + +3. Qual foi o hotel mais avaliado para cada uma das 10 nacionalidades de revisores mais frequentes? + + ```python + # What was the most frequently reviewed hotel for the top 10 nationalities + # Normally with pandas you will avoid an explicit loop, but wanted to show creating a new dataframe using criteria (don't do this with large amounts of data because it could be very slow) + for nat in nationality_freq[:10].index: + # First, extract all the rows that match the criteria into a new dataframe + nat_df = df[df["Reviewer_Nationality"] == nat] + # Now get the hotel freq + freq = nat_df["Hotel_Name"].value_counts() + print("The most reviewed hotel for " + str(nat).strip() + " was " + str(freq.index[0]) + " with " + str(freq[0]) + " reviews.") + + The most reviewed hotel for United Kingdom was Britannia International Hotel Canary Wharf with 3833 reviews. + The most reviewed hotel for United States of America was Hotel Esther a with 423 reviews. + The most reviewed hotel for Australia was Park Plaza Westminster Bridge London with 167 reviews. + The most reviewed hotel for Ireland was Copthorne Tara Hotel London Kensington with 239 reviews. + The most reviewed hotel for United Arab Emirates was Millennium Hotel London Knightsbridge with 129 reviews. + The most reviewed hotel for Saudi Arabia was The Cumberland A Guoman Hotel with 142 reviews. + The most reviewed hotel for Netherlands was Jaz Amsterdam with 97 reviews. + The most reviewed hotel for Switzerland was Hotel Da Vinci with 97 reviews. + The most reviewed hotel for Germany was Hotel Da Vinci with 86 reviews. + The most reviewed hotel for Canada was St James Court A Taj Hotel London with 61 reviews. + ``` + +4. Quantas avaliações existem por hotel (contagem de frequência de hotel) no conjunto de dados? + + ```python + # First create a new dataframe based on the old one, removing the uneeded columns + hotel_freq_df = df.drop(["Hotel_Address", "Additional_Number_of_Scoring", "Review_Date", "Average_Score", "Reviewer_Nationality", "Negative_Review", "Review_Total_Negative_Word_Counts", "Positive_Review", "Review_Total_Positive_Word_Counts", "Total_Number_of_Reviews_Reviewer_Has_Given", "Reviewer_Score", "Tags", "days_since_review", "lat", "lng"], axis = 1) + + # Group the rows by Hotel_Name, count them and put the result in a new column Total_Reviews_Found + hotel_freq_df['Total_Reviews_Found'] = hotel_freq_df.groupby('Hotel_Name').transform('count') + + # Get rid of all the duplicated rows + hotel_freq_df = hotel_freq_df.drop_duplicates(subset = ["Hotel_Name"]) + display(hotel_freq_df) + ``` + | Hotel_Name | Total_Number_of_Reviews | Total_Reviews_Found | + | :----------------------------------------: | :---------------------: | :-----------------: | + | Britannia International Hotel Canary Wharf | 9086 | 4789 | + | Park Plaza Westminster Bridge London | 12158 | 4169 | + | Copthorne Tara Hotel London Kensington | 7105 | 3578 | + | ... | ... | ... | + | Mercure Paris Porte d Orleans | 110 | 10 | + | Hotel Wagner | 135 | 10 | + | Hotel Gallitzinberg | 173 | 8 | + + Você pode notar que os resultados *contados no conjunto de dados* não correspondem ao valor em `Total_Number_of_Reviews`. Não está claro se este valor no conjunto de dados representa o número total de avaliações que o hotel teve, mas nem todas foram coletadas, ou algum outro cálculo. `Total_Number_of_Reviews` não é usado no modelo devido a essa falta de clareza. + +5. Embora haja uma coluna `Average_Score` para cada hotel no conjunto de dados, você também pode calcular uma pontuação média (obtendo a média de todas as pontuações dos revisores no conjunto de dados para cada hotel). Adicione uma nova coluna ao seu dataframe com o cabeçalho `Calc_Average_Score` que contém essa média calculada. Imprima as colunas `Hotel_Name`, `Average_Score` e `Calc_Average_Score`. + + ```python + # define a function that takes a row and performs some calculation with it + def get_difference_review_avg(row): + return row["Average_Score"] - row["Calc_Average_Score"] + + # 'mean' is mathematical word for 'average' + df['Calc_Average_Score'] = round(df.groupby('Hotel_Name').Reviewer_Score.transform('mean'), 1) + + # Add a new column with the difference between the two average scores + df["Average_Score_Difference"] = df.apply(get_difference_review_avg, axis = 1) + + # Create a df without all the duplicates of Hotel_Name (so only 1 row per hotel) + review_scores_df = df.drop_duplicates(subset = ["Hotel_Name"]) + + # Sort the dataframe to find the lowest and highest average score difference + review_scores_df = review_scores_df.sort_values(by=["Average_Score_Difference"]) + + display(review_scores_df[["Average_Score_Difference", "Average_Score", "Calc_Average_Score", "Hotel_Name"]]) + ``` + + Você também pode se perguntar sobre o valor de `Average_Score` e por que ele às vezes é diferente da pontuação média calculada. Como não podemos saber por que alguns valores correspondem, mas outros têm uma diferença, é mais seguro, neste caso, usar as pontuações das avaliações que temos para calcular a média nós mesmos. Dito isso, as diferenças geralmente são muito pequenas. Aqui estão os hotéis com a maior diferença entre a média do conjunto de dados e a média calculada: + + | Average_Score_Difference | Average_Score | Calc_Average_Score | Hotel_Name | + | :----------------------: | :-----------: | :----------------: | ------------------------------------------: | + | -0.8 | 7.7 | 8.5 | Best Western Hotel Astoria | + | -0.7 | 8.8 | 9.5 | Hotel Stendhal Place Vend me Paris MGallery | + | -0.7 | 7.5 | 8.2 | Mercure Paris Porte d Orleans | + | -0.7 | 7.9 | 8.6 | Renaissance Paris Vendome Hotel | + | -0.5 | 7.0 | 7.5 | Hotel Royal Elys es | + | ... | ... | ... | ... | + | 0.7 | 7.5 | 6.8 | Mercure Paris Op ra Faubourg Montmartre | + | 0.8 | 7.1 | 6.3 | Holiday Inn Paris Montparnasse Pasteur | + | 0.9 | 6.8 | 5.9 | Villa Eugenie | + | 0.9 | 8.6 | 7.7 | MARQUIS Faubourg St Honor Relais Ch teaux | + | 1.3 | 7.2 | 5.9 | Kube Hotel Ice Bar | + + Com apenas 1 hotel tendo uma diferença de pontuação maior que 1, isso significa que provavelmente podemos ignorar a diferença e usar a pontuação média calculada. + +6. Calcule e imprima quantas linhas têm valores "No Negative" na coluna `Negative_Review`. + +7. Calcule e imprima quantas linhas têm valores "No Positive" na coluna `Positive_Review`. + +8. Calcule e imprima quantas linhas têm valores "No Positive" na coluna `Positive_Review` **e** valores "No Negative" na coluna `Negative_Review`. + + ```python + # with lambdas: + start = time.time() + no_negative_reviews = df.apply(lambda x: True if x['Negative_Review'] == "No Negative" else False , axis=1) + print("Number of No Negative reviews: " + str(len(no_negative_reviews[no_negative_reviews == True].index))) + + no_positive_reviews = df.apply(lambda x: True if x['Positive_Review'] == "No Positive" else False , axis=1) + print("Number of No Positive reviews: " + str(len(no_positive_reviews[no_positive_reviews == True].index))) + + both_no_reviews = df.apply(lambda x: True if x['Negative_Review'] == "No Negative" and x['Positive_Review'] == "No Positive" else False , axis=1) + print("Number of both No Negative and No Positive reviews: " + str(len(both_no_reviews[both_no_reviews == True].index))) + end = time.time() + print("Lambdas took " + str(round(end - start, 2)) + " seconds") + + Number of No Negative reviews: 127890 + Number of No Positive reviews: 35946 + Number of both No Negative and No Positive reviews: 127 + Lambdas took 9.64 seconds + ``` + +## Outra maneira + +Outra maneira de contar itens sem Lambdas e usar sum para contar as linhas: + + ```python + # without lambdas (using a mixture of notations to show you can use both) + start = time.time() + no_negative_reviews = sum(df.Negative_Review == "No Negative") + print("Number of No Negative reviews: " + str(no_negative_reviews)) + + no_positive_reviews = sum(df["Positive_Review"] == "No Positive") + print("Number of No Positive reviews: " + str(no_positive_reviews)) + + both_no_reviews = sum((df.Negative_Review == "No Negative") & (df.Positive_Review == "No Positive")) + print("Number of both No Negative and No Positive reviews: " + str(both_no_reviews)) + + end = time.time() + print("Sum took " + str(round(end - start, 2)) + " seconds") + + Number of No Negative reviews: 127890 + Number of No Positive reviews: 35946 + Number of both No Negative and No Positive reviews: 127 + Sum took 0.19 seconds + ``` + + Você pode ter notado que há 127 linhas que têm valores "No Negative" e "No Positive" nas colunas `Negative_Review` e `Positive_Review`, respectivamente. Isso significa que o revisor deu ao hotel uma pontuação numérica, mas optou por não escrever uma avaliação positiva ou negativa. Felizmente, isso é uma pequena quantidade de linhas (127 de 515738, ou 0,02%), então provavelmente não vai distorcer nosso modelo ou resultados em nenhuma direção específica, mas você pode não ter esperado que um conjunto de dados de avaliações tivesse linhas sem avaliações, então vale a pena explorar os dados para descobrir linhas como esta. + +Agora que você explorou o conjunto de dados, na próxima lição você filtrará os dados e adicionará alguma análise de sentimentos. + +--- +## 🚀Desafio + +Esta lição demonstra, como vimos em lições anteriores, o quão importante é entender seus dados e suas peculiaridades antes de realizar operações com eles. Dados baseados em texto, em particular, exigem uma análise cuidadosa. Explore vários conjuntos de dados ricos em texto e veja se você consegue descobrir áreas que poderiam introduzir viés ou sentimentos distorcidos em um modelo. + +## [Quiz pós-aula](https://ff-quizzes.netlify.app/en/ml/) + +## Revisão e Autoestudo + +Faça [este Caminho de Aprendizado sobre NLP](https://docs.microsoft.com/learn/paths/explore-natural-language-processing/?WT.mc_id=academic-77952-leestott) para descobrir ferramentas para experimentar ao construir modelos baseados em fala e texto. + +## Tarefa + +[NLTK](assignment.md) + +--- + +**Aviso Legal**: +Este documento foi traduzido utilizando o serviço de tradução por IA [Co-op Translator](https://github.com/Azure/co-op-translator). Embora nos esforcemos para garantir a precisão, esteja ciente de que traduções automáticas podem conter erros ou imprecisões. O documento original em seu idioma nativo deve ser considerado a fonte oficial. Para informações críticas, recomenda-se a tradução profissional realizada por humanos. Não nos responsabilizamos por quaisquer mal-entendidos ou interpretações equivocadas decorrentes do uso desta tradução. \ No newline at end of file diff --git a/translations/pt-BR/6-NLP/4-Hotel-Reviews-1/assignment.md b/translations/pt-BR/6-NLP/4-Hotel-Reviews-1/assignment.md new file mode 100644 index 000000000..4ffa0ed12 --- /dev/null +++ b/translations/pt-BR/6-NLP/4-Hotel-Reviews-1/assignment.md @@ -0,0 +1,10 @@ +# NLTK + +## Instruções + +NLTK é uma biblioteca renomada para uso em linguística computacional e processamento de linguagem natural (NLP). Aproveite esta oportunidade para ler o '[livro do NLTK](https://www.nltk.org/book/)' e experimentar seus exercícios. Nesta tarefa não avaliada, você terá a chance de conhecer esta biblioteca mais a fundo. + +--- + +**Aviso Legal**: +Este documento foi traduzido utilizando o serviço de tradução por IA [Co-op Translator](https://github.com/Azure/co-op-translator). Embora nos esforcemos para garantir a precisão, esteja ciente de que traduções automatizadas podem conter erros ou imprecisões. O documento original em seu idioma nativo deve ser considerado a fonte autoritativa. Para informações críticas, recomenda-se a tradução profissional realizada por humanos. Não nos responsabilizamos por quaisquer mal-entendidos ou interpretações equivocadas decorrentes do uso desta tradução. \ No newline at end of file diff --git a/translations/pt-BR/6-NLP/4-Hotel-Reviews-1/notebook.ipynb b/translations/pt-BR/6-NLP/4-Hotel-Reviews-1/notebook.ipynb new file mode 100644 index 000000000..e69de29bb diff --git a/translations/pt-BR/6-NLP/4-Hotel-Reviews-1/solution/Julia/README.md b/translations/pt-BR/6-NLP/4-Hotel-Reviews-1/solution/Julia/README.md new file mode 100644 index 000000000..b60688ffc --- /dev/null +++ b/translations/pt-BR/6-NLP/4-Hotel-Reviews-1/solution/Julia/README.md @@ -0,0 +1,6 @@ + + +--- + +**Aviso Legal**: +Este documento foi traduzido utilizando o serviço de tradução por IA [Co-op Translator](https://github.com/Azure/co-op-translator). Embora nos esforcemos para garantir a precisão, esteja ciente de que traduções automatizadas podem conter erros ou imprecisões. O documento original em seu idioma nativo deve ser considerado a fonte autoritativa. Para informações críticas, recomenda-se a tradução profissional realizada por humanos. Não nos responsabilizamos por quaisquer mal-entendidos ou interpretações incorretas decorrentes do uso desta tradução. \ No newline at end of file diff --git a/translations/pt-BR/6-NLP/4-Hotel-Reviews-1/solution/R/README.md b/translations/pt-BR/6-NLP/4-Hotel-Reviews-1/solution/R/README.md new file mode 100644 index 000000000..c58234bae --- /dev/null +++ b/translations/pt-BR/6-NLP/4-Hotel-Reviews-1/solution/R/README.md @@ -0,0 +1,6 @@ + + +--- + +**Aviso Legal**: +Este documento foi traduzido utilizando o serviço de tradução por IA [Co-op Translator](https://github.com/Azure/co-op-translator). Embora nos esforcemos para garantir a precisão, esteja ciente de que traduções automatizadas podem conter erros ou imprecisões. O documento original em seu idioma nativo deve ser considerado a fonte autoritativa. Para informações críticas, recomenda-se a tradução profissional realizada por humanos. Não nos responsabilizamos por quaisquer mal-entendidos ou interpretações equivocadas decorrentes do uso desta tradução. \ No newline at end of file diff --git a/translations/pt-BR/6-NLP/4-Hotel-Reviews-1/solution/notebook.ipynb b/translations/pt-BR/6-NLP/4-Hotel-Reviews-1/solution/notebook.ipynb new file mode 100644 index 000000000..5881f48d2 --- /dev/null +++ b/translations/pt-BR/6-NLP/4-Hotel-Reviews-1/solution/notebook.ipynb @@ -0,0 +1,174 @@ +{ + "metadata": { + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": 3 + }, + "orig_nbformat": 4, + "coopTranslator": { + "original_hash": "2d05e7db439376aa824f4b387f8324ca", + "translation_date": "2025-08-30T00:14:37+00:00", + "source_file": "6-NLP/4-Hotel-Reviews-1/solution/notebook.ipynb", + "language_code": "br" + } + }, + "nbformat": 4, + "nbformat_minor": 2, + "cells": [ + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# EDA\n", + "import pandas as pd\n", + "import time" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "def get_difference_review_avg(row):\n", + " return row[\"Average_Score\"] - row[\"Calc_Average_Score\"]" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Load the hotel reviews from CSV\n", + "print(\"Loading data file now, this could take a while depending on file size\")\n", + "start = time.time()\n", + "df = pd.read_csv('../../data/Hotel_Reviews.csv')\n", + "end = time.time()\n", + "print(\"Loading took \" + str(round(end - start, 2)) + \" seconds\")\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# What shape is the data (rows, columns)?\n", + "print(\"The shape of the data (rows, cols) is \" + str(df.shape))\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# value_counts() creates a Series object that has index and values\n", + "# in this case, the country and the frequency they occur in reviewer nationality\n", + "nationality_freq = df[\"Reviewer_Nationality\"].value_counts()\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# What reviewer nationality is the most common in the dataset?\n", + "print(\"The highest frequency reviewer nationality is \" + str(nationality_freq.index[0]).strip() + \" with \" + str(nationality_freq[0]) + \" reviews.\")\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# What is the top 10 most common nationalities and their frequencies?\n", + "print(\"The top 10 highest frequency reviewer nationalities are:\")\n", + "print(nationality_freq[0:10].to_string())\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# How many unique nationalities are there?\n", + "print(\"There are \" + str(nationality_freq.index.size) + \" unique nationalities in the dataset\")\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# What was the most frequently reviewed hotel for the top 10 nationalities - print the hotel and number of reviews\n", + "for nat in nationality_freq[:10].index:\n", + " # First, extract all the rows that match the criteria into a new dataframe\n", + " nat_df = df[df[\"Reviewer_Nationality\"] == nat] \n", + " # Now get the hotel freq\n", + " freq = nat_df[\"Hotel_Name\"].value_counts()\n", + " print(\"The most reviewed hotel for \" + str(nat).strip() + \" was \" + str(freq.index[0]) + \" with \" + str(freq[0]) + \" reviews.\") \n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# How many reviews are there per hotel (frequency count of hotel) and do the results match the value in `Total_Number_of_Reviews`?\n", + "# First create a new dataframe based on the old one, removing the uneeded columns\n", + "hotel_freq_df = df.drop([\"Hotel_Address\", \"Additional_Number_of_Scoring\", \"Review_Date\", \"Average_Score\", \"Reviewer_Nationality\", \"Negative_Review\", \"Review_Total_Negative_Word_Counts\", \"Positive_Review\", \"Review_Total_Positive_Word_Counts\", \"Total_Number_of_Reviews_Reviewer_Has_Given\", \"Reviewer_Score\", \"Tags\", \"days_since_review\", \"lat\", \"lng\"], axis = 1)\n", + "# Group the rows by Hotel_Name, count them and put the result in a new column Total_Reviews_Found\n", + "hotel_freq_df['Total_Reviews_Found'] = hotel_freq_df.groupby('Hotel_Name').transform('count')\n", + "# Get rid of all the duplicated rows\n", + "hotel_freq_df = hotel_freq_df.drop_duplicates(subset = [\"Hotel_Name\"])\n", + "print()\n", + "print(hotel_freq_df.to_string())\n", + "print(str(hotel_freq_df.shape))" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# While there is an `Average_Score` for each hotel according to the dataset, \n", + "# you can also calculate an average score (getting the average of all reviewer scores in the dataset for each hotel)\n", + "# Add a new column to your dataframe with the column header `Calc_Average_Score` that contains that calculated average. \n", + "df['Calc_Average_Score'] = round(df.groupby('Hotel_Name').Reviewer_Score.transform('mean'), 1)\n", + "# Add a new column with the difference between the two average scores\n", + "df[\"Average_Score_Difference\"] = df.apply(get_difference_review_avg, axis = 1)\n", + "# Create a df without all the duplicates of Hotel_Name (so only 1 row per hotel)\n", + "review_scores_df = df.drop_duplicates(subset = [\"Hotel_Name\"])\n", + "# Sort the dataframe to find the lowest and highest average score difference\n", + "review_scores_df = review_scores_df.sort_values(by=[\"Average_Score_Difference\"])\n", + "print(review_scores_df[[\"Average_Score_Difference\", \"Average_Score\", \"Calc_Average_Score\", \"Hotel_Name\"]])\n", + "# Do any hotels have the same (rounded to 1 decimal place) `Average_Score` and `Calc_Average_Score`?\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n---\n\n**Aviso Legal**: \nEste documento foi traduzido utilizando o serviço de tradução por IA [Co-op Translator](https://github.com/Azure/co-op-translator). Embora nos esforcemos para garantir a precisão, esteja ciente de que traduções automatizadas podem conter erros ou imprecisões. O documento original em seu idioma nativo deve ser considerado a fonte autoritativa. Para informações críticas, recomenda-se a tradução profissional realizada por humanos. Não nos responsabilizamos por quaisquer mal-entendidos ou interpretações equivocadas decorrentes do uso desta tradução.\n" + ] + } + ] +} \ No newline at end of file diff --git a/translations/pt-BR/6-NLP/5-Hotel-Reviews-2/README.md b/translations/pt-BR/6-NLP/5-Hotel-Reviews-2/README.md new file mode 100644 index 000000000..8958a2004 --- /dev/null +++ b/translations/pt-BR/6-NLP/5-Hotel-Reviews-2/README.md @@ -0,0 +1,380 @@ +# Análise de sentimento com avaliações de hotéis + +Agora que você explorou o conjunto de dados em detalhes, é hora de filtrar as colunas e usar técnicas de NLP no conjunto de dados para obter novos insights sobre os hotéis. + +## [Quiz pré-aula](https://ff-quizzes.netlify.app/en/ml/) + +### Operações de filtragem e análise de sentimento + +Como você provavelmente percebeu, o conjunto de dados tem alguns problemas. Algumas colunas estão preenchidas com informações inúteis, outras parecem incorretas. Mesmo que estejam corretas, não está claro como foram calculadas, e as respostas não podem ser verificadas de forma independente por seus próprios cálculos. + +## Exercício: um pouco mais de processamento de dados + +Limpe os dados um pouco mais. Adicione colunas que serão úteis mais tarde, altere os valores em outras colunas e elimine algumas colunas completamente. + +1. Processamento inicial de colunas + + 1. Elimine `lat` e `lng` + + 2. Substitua os valores de `Hotel_Address` pelos seguintes valores (se o endereço contiver o nome da cidade e do país, altere para apenas a cidade e o país). + + Estas são as únicas cidades e países no conjunto de dados: + + Amsterdam, Netherlands + + Barcelona, Spain + + London, United Kingdom + + Milan, Italy + + Paris, France + + Vienna, Austria + + ```python + def replace_address(row): + if "Netherlands" in row["Hotel_Address"]: + return "Amsterdam, Netherlands" + elif "Barcelona" in row["Hotel_Address"]: + return "Barcelona, Spain" + elif "United Kingdom" in row["Hotel_Address"]: + return "London, United Kingdom" + elif "Milan" in row["Hotel_Address"]: + return "Milan, Italy" + elif "France" in row["Hotel_Address"]: + return "Paris, France" + elif "Vienna" in row["Hotel_Address"]: + return "Vienna, Austria" + + # Replace all the addresses with a shortened, more useful form + df["Hotel_Address"] = df.apply(replace_address, axis = 1) + # The sum of the value_counts() should add up to the total number of reviews + print(df["Hotel_Address"].value_counts()) + ``` + + Agora você pode consultar dados a nível de país: + + ```python + display(df.groupby("Hotel_Address").agg({"Hotel_Name": "nunique"})) + ``` + + | Hotel_Address | Hotel_Name | + | :--------------------- | :--------: | + | Amsterdam, Netherlands | 105 | + | Barcelona, Spain | 211 | + | London, United Kingdom | 400 | + | Milan, Italy | 162 | + | Paris, France | 458 | + | Vienna, Austria | 158 | + +2. Processar colunas de meta-avaliação dos hotéis + + 1. Elimine `Additional_Number_of_Scoring` + + 1. Substitua `Total_Number_of_Reviews` pelo número total de avaliações para aquele hotel que realmente estão no conjunto de dados + + 1. Substitua `Average_Score` pela nossa própria pontuação calculada + + ```python + # Drop `Additional_Number_of_Scoring` + df.drop(["Additional_Number_of_Scoring"], axis = 1, inplace=True) + # Replace `Total_Number_of_Reviews` and `Average_Score` with our own calculated values + df.Total_Number_of_Reviews = df.groupby('Hotel_Name').transform('count') + df.Average_Score = round(df.groupby('Hotel_Name').Reviewer_Score.transform('mean'), 1) + ``` + +3. Processar colunas de avaliação + + 1. Elimine `Review_Total_Negative_Word_Counts`, `Review_Total_Positive_Word_Counts`, `Review_Date` e `days_since_review` + + 2. Mantenha `Reviewer_Score`, `Negative_Review` e `Positive_Review` como estão + + 3. Mantenha `Tags` por enquanto + + - Faremos algumas operações adicionais de filtragem nas tags na próxima seção e, em seguida, as tags serão eliminadas + +4. Processar colunas de avaliadores + + 1. Elimine `Total_Number_of_Reviews_Reviewer_Has_Given` + + 2. Mantenha `Reviewer_Nationality` + +### Colunas de tags + +A coluna `Tag` é problemática, pois é uma lista (em formato de texto) armazenada na coluna. Infelizmente, a ordem e o número de subseções nesta coluna nem sempre são os mesmos. É difícil para um humano identificar as frases corretas de interesse, porque há 515.000 linhas e 1427 hotéis, e cada um tem opções ligeiramente diferentes que um avaliador poderia escolher. É aqui que o NLP se destaca. Você pode escanear o texto e encontrar as frases mais comuns, e contá-las. + +Infelizmente, não estamos interessados em palavras isoladas, mas em frases compostas (por exemplo, *Viagem de negócios*). Executar um algoritmo de distribuição de frequência de frases compostas em tantos dados (6762646 palavras) pode levar um tempo extraordinário, mas sem olhar para os dados, parece que isso é uma despesa necessária. É aqui que a análise exploratória de dados é útil, porque você viu uma amostra das tags como `[' Business trip ', ' Solo traveler ', ' Single Room ', ' Stayed 5 nights ', ' Submitted from a mobile device ']`, você pode começar a perguntar se é possível reduzir significativamente o processamento necessário. Felizmente, é - mas primeiro você precisa seguir alguns passos para determinar as tags de interesse. + +### Filtrando tags + +Lembre-se de que o objetivo do conjunto de dados é adicionar sentimento e colunas que ajudarão você a escolher o melhor hotel (para você ou talvez para um cliente que lhe pediu para criar um bot de recomendação de hotéis). Você precisa se perguntar se as tags são úteis ou não no conjunto de dados final. Aqui está uma interpretação (se você precisasse do conjunto de dados para outros motivos, tags diferentes poderiam permanecer/ser removidas da seleção): + +1. O tipo de viagem é relevante e deve permanecer +2. O tipo de grupo de hóspedes é importante e deve permanecer +3. O tipo de quarto, suíte ou estúdio em que o hóspede ficou é irrelevante (todos os hotéis têm basicamente os mesmos quartos) +4. O dispositivo no qual a avaliação foi enviada é irrelevante +5. O número de noites que o avaliador ficou *poderia* ser relevante se você atribuísse estadias mais longas ao fato de eles gostarem mais do hotel, mas é algo incerto e provavelmente irrelevante + +Em resumo, **mantenha 2 tipos de tags e remova as outras**. + +Primeiro, você não quer contar as tags até que estejam em um formato melhor, o que significa remover os colchetes e aspas. Você pode fazer isso de várias maneiras, mas deve escolher a mais rápida, pois pode levar muito tempo para processar muitos dados. Felizmente, o pandas tem uma maneira fácil de realizar cada uma dessas etapas. + +```Python +# Remove opening and closing brackets +df.Tags = df.Tags.str.strip("[']") +# remove all quotes too +df.Tags = df.Tags.str.replace(" ', '", ",", regex = False) +``` + +Cada tag se torna algo como: `Business trip, Solo traveler, Single Room, Stayed 5 nights, Submitted from a mobile device`. + +Em seguida, encontramos um problema. Algumas avaliações, ou linhas, têm 5 colunas, outras 3, outras 6. Isso é resultado de como o conjunto de dados foi criado e difícil de corrigir. Você quer obter uma contagem de frequência de cada frase, mas elas estão em ordens diferentes em cada avaliação, então a contagem pode estar errada, e um hotel pode não receber uma tag que merecia. + +Em vez disso, você usará a ordem diferente a seu favor, porque cada tag é composta por várias palavras, mas também separada por uma vírgula! A maneira mais simples de fazer isso é criar 6 colunas temporárias com cada tag inserida na coluna correspondente à sua ordem na tag. Você pode então mesclar as 6 colunas em uma grande coluna e executar o método `value_counts()` na coluna resultante. Ao imprimir isso, você verá que havia 2428 tags únicas. Aqui está uma pequena amostra: + +| Tag | Count | +| ------------------------------ | ------ | +| Leisure trip | 417778 | +| Submitted from a mobile device | 307640 | +| Couple | 252294 | +| Stayed 1 night | 193645 | +| Stayed 2 nights | 133937 | +| Solo traveler | 108545 | +| Stayed 3 nights | 95821 | +| Business trip | 82939 | +| Group | 65392 | +| Family with young children | 61015 | +| Stayed 4 nights | 47817 | +| Double Room | 35207 | +| Standard Double Room | 32248 | +| Superior Double Room | 31393 | +| Family with older children | 26349 | +| Deluxe Double Room | 24823 | +| Double or Twin Room | 22393 | +| Stayed 5 nights | 20845 | +| Standard Double or Twin Room | 17483 | +| Classic Double Room | 16989 | +| Superior Double or Twin Room | 13570 | +| 2 rooms | 12393 | + +Algumas das tags comuns, como `Submitted from a mobile device`, não são úteis para nós, então pode ser inteligente removê-las antes de contar a ocorrência de frases, mas é uma operação tão rápida que você pode deixá-las e ignorá-las. + +### Removendo tags de duração da estadia + +Remover essas tags é o primeiro passo, reduzindo ligeiramente o número total de tags a serem consideradas. Note que você não as remove do conjunto de dados, apenas escolhe removê-las da consideração como valores a serem contados/mantidos no conjunto de dados de avaliações. + +| Length of stay | Count | +| ---------------- | ------ | +| Stayed 1 night | 193645 | +| Stayed 2 nights | 133937 | +| Stayed 3 nights | 95821 | +| Stayed 4 nights | 47817 | +| Stayed 5 nights | 20845 | +| Stayed 6 nights | 9776 | +| Stayed 7 nights | 7399 | +| Stayed 8 nights | 2502 | +| Stayed 9 nights | 1293 | +| ... | ... | + +Há uma enorme variedade de quartos, suítes, estúdios, apartamentos e assim por diante. Todos significam basicamente a mesma coisa e não são relevantes para você, então remova-os da consideração. + +| Type of room | Count | +| ----------------------------- | ----- | +| Double Room | 35207 | +| Standard Double Room | 32248 | +| Superior Double Room | 31393 | +| Deluxe Double Room | 24823 | +| Double or Twin Room | 22393 | +| Standard Double or Twin Room | 17483 | +| Classic Double Room | 16989 | +| Superior Double or Twin Room | 13570 | + +Finalmente, e isso é ótimo (porque não exigiu muito processamento), você ficará com as seguintes tags *úteis*: + +| Tag | Count | +| --------------------------------------------- | ------ | +| Leisure trip | 417778 | +| Couple | 252294 | +| Solo traveler | 108545 | +| Business trip | 82939 | +| Group (combined with Travellers with friends) | 67535 | +| Family with young children | 61015 | +| Family with older children | 26349 | +| With a pet | 1405 | + +Você poderia argumentar que `Travellers with friends` é o mesmo que `Group` mais ou menos, e seria justo combinar os dois como acima. O código para identificar as tags corretas está no [notebook de Tags](https://github.com/microsoft/ML-For-Beginners/blob/main/6-NLP/5-Hotel-Reviews-2/solution/1-notebook.ipynb). + +O passo final é criar novas colunas para cada uma dessas tags. Então, para cada linha de avaliação, se a coluna `Tag` corresponder a uma das novas colunas, adicione 1, caso contrário, adicione 0. O resultado final será uma contagem de quantos avaliadores escolheram este hotel (em agregado) para, por exemplo, negócios vs lazer, ou para trazer um animal de estimação, e isso é informação útil ao recomendar um hotel. + +```python +# Process the Tags into new columns +# The file Hotel_Reviews_Tags.py, identifies the most important tags +# Leisure trip, Couple, Solo traveler, Business trip, Group combined with Travelers with friends, +# Family with young children, Family with older children, With a pet +df["Leisure_trip"] = df.Tags.apply(lambda tag: 1 if "Leisure trip" in tag else 0) +df["Couple"] = df.Tags.apply(lambda tag: 1 if "Couple" in tag else 0) +df["Solo_traveler"] = df.Tags.apply(lambda tag: 1 if "Solo traveler" in tag else 0) +df["Business_trip"] = df.Tags.apply(lambda tag: 1 if "Business trip" in tag else 0) +df["Group"] = df.Tags.apply(lambda tag: 1 if "Group" in tag or "Travelers with friends" in tag else 0) +df["Family_with_young_children"] = df.Tags.apply(lambda tag: 1 if "Family with young children" in tag else 0) +df["Family_with_older_children"] = df.Tags.apply(lambda tag: 1 if "Family with older children" in tag else 0) +df["With_a_pet"] = df.Tags.apply(lambda tag: 1 if "With a pet" in tag else 0) + +``` + +### Salve seu arquivo + +Finalmente, salve o conjunto de dados como está agora com um novo nome. + +```python +df.drop(["Review_Total_Negative_Word_Counts", "Review_Total_Positive_Word_Counts", "days_since_review", "Total_Number_of_Reviews_Reviewer_Has_Given"], axis = 1, inplace=True) + +# Saving new data file with calculated columns +print("Saving results to Hotel_Reviews_Filtered.csv") +df.to_csv(r'../data/Hotel_Reviews_Filtered.csv', index = False) +``` + +## Operações de análise de sentimento + +Nesta seção final, você aplicará análise de sentimento às colunas de avaliação e salvará os resultados em um conjunto de dados. + +## Exercício: carregar e salvar os dados filtrados + +Note que agora você está carregando o conjunto de dados filtrado que foi salvo na seção anterior, **não** o conjunto de dados original. + +```python +import time +import pandas as pd +import nltk as nltk +from nltk.corpus import stopwords +from nltk.sentiment.vader import SentimentIntensityAnalyzer +nltk.download('vader_lexicon') + +# Load the filtered hotel reviews from CSV +df = pd.read_csv('../../data/Hotel_Reviews_Filtered.csv') + +# You code will be added here + + +# Finally remember to save the hotel reviews with new NLP data added +print("Saving results to Hotel_Reviews_NLP.csv") +df.to_csv(r'../data/Hotel_Reviews_NLP.csv', index = False) +``` + +### Removendo stop words + +Se você fosse executar a análise de sentimento nas colunas de avaliação negativa e positiva, isso poderia levar muito tempo. Testado em um laptop de teste poderoso com CPU rápida, levou de 12 a 14 minutos, dependendo de qual biblioteca de análise de sentimento foi usada. Esse é um tempo (relativamente) longo, então vale a pena investigar se isso pode ser acelerado. + +Remover stop words, ou palavras comuns em inglês que não alteram o sentimento de uma frase, é o primeiro passo. Ao removê-las, a análise de sentimento deve ser mais rápida, mas não menos precisa (já que as stop words não afetam o sentimento, mas elas desaceleram a análise). + +A avaliação negativa mais longa tinha 395 palavras, mas após remover as stop words, ficou com 195 palavras. + +Remover as stop words também é uma operação rápida, removê-las de 2 colunas de avaliação em mais de 515.000 linhas levou 3,3 segundos no dispositivo de teste. Pode levar um pouco mais ou menos tempo para você, dependendo da velocidade da CPU do seu dispositivo, RAM, se você tem um SSD ou não, e outros fatores. A relativa rapidez da operação significa que, se ela melhorar o tempo de análise de sentimento, então vale a pena fazer. + +```python +from nltk.corpus import stopwords + +# Load the hotel reviews from CSV +df = pd.read_csv("../../data/Hotel_Reviews_Filtered.csv") + +# Remove stop words - can be slow for a lot of text! +# Ryan Han (ryanxjhan on Kaggle) has a great post measuring performance of different stop words removal approaches +# https://www.kaggle.com/ryanxjhan/fast-stop-words-removal # using the approach that Ryan recommends +start = time.time() +cache = set(stopwords.words("english")) +def remove_stopwords(review): + text = " ".join([word for word in review.split() if word not in cache]) + return text + +# Remove the stop words from both columns +df.Negative_Review = df.Negative_Review.apply(remove_stopwords) +df.Positive_Review = df.Positive_Review.apply(remove_stopwords) +``` + +### Realizando análise de sentimento + +Agora você deve calcular a análise de sentimento para as colunas de avaliação negativa e positiva e armazenar o resultado em 2 novas colunas. O teste da análise de sentimento será compará-lo com a pontuação do avaliador para a mesma avaliação. Por exemplo, se a análise de sentimento indicar que a avaliação negativa teve um sentimento de 1 (sentimento extremamente positivo) e a avaliação positiva também teve um sentimento de 1, mas o avaliador deu ao hotel a menor pontuação possível, então ou o texto da avaliação não corresponde à pontuação, ou o analisador de sentimento não conseguiu reconhecer o sentimento corretamente. Você deve esperar que algumas pontuações de sentimento estejam completamente erradas, e muitas vezes isso será explicável, por exemplo, a avaliação pode ser extremamente sarcástica: "Claro que eu AMEI dormir em um quarto sem aquecimento", e o analisador de sentimento pode interpretar isso como um sentimento positivo, mesmo que um humano lendo saiba que foi sarcasmo. +O NLTK oferece diferentes analisadores de sentimento para você experimentar, e é possível substituí-los para verificar se a análise de sentimento é mais ou menos precisa. Aqui, utilizamos a análise de sentimento VADER. + +> Hutto, C.J. & Gilbert, E.E. (2014). VADER: A Parsimonious Rule-based Model for Sentiment Analysis of Social Media Text. Eighth International Conference on Weblogs and Social Media (ICWSM-14). Ann Arbor, MI, junho de 2014. + +```python +from nltk.sentiment.vader import SentimentIntensityAnalyzer + +# Create the vader sentiment analyser (there are others in NLTK you can try too) +vader_sentiment = SentimentIntensityAnalyzer() +# Hutto, C.J. & Gilbert, E.E. (2014). VADER: A Parsimonious Rule-based Model for Sentiment Analysis of Social Media Text. Eighth International Conference on Weblogs and Social Media (ICWSM-14). Ann Arbor, MI, June 2014. + +# There are 3 possibilities of input for a review: +# It could be "No Negative", in which case, return 0 +# It could be "No Positive", in which case, return 0 +# It could be a review, in which case calculate the sentiment +def calc_sentiment(review): + if review == "No Negative" or review == "No Positive": + return 0 + return vader_sentiment.polarity_scores(review)["compound"] +``` + +Mais tarde, no seu programa, quando estiver pronto para calcular o sentimento, você pode aplicá-lo a cada avaliação da seguinte forma: + +```python +# Add a negative sentiment and positive sentiment column +print("Calculating sentiment columns for both positive and negative reviews") +start = time.time() +df["Negative_Sentiment"] = df.Negative_Review.apply(calc_sentiment) +df["Positive_Sentiment"] = df.Positive_Review.apply(calc_sentiment) +end = time.time() +print("Calculating sentiment took " + str(round(end - start, 2)) + " seconds") +``` + +Isso leva aproximadamente 120 segundos no meu computador, mas o tempo pode variar dependendo do computador. Se você quiser imprimir os resultados e verificar se o sentimento corresponde à avaliação: + +```python +df = df.sort_values(by=["Negative_Sentiment"], ascending=True) +print(df[["Negative_Review", "Negative_Sentiment"]]) +df = df.sort_values(by=["Positive_Sentiment"], ascending=True) +print(df[["Positive_Review", "Positive_Sentiment"]]) +``` + +A última coisa a fazer com o arquivo antes de usá-lo no desafio é salvá-lo! Também é recomendável reorganizar todas as suas novas colunas para que sejam fáceis de trabalhar (para um humano, é uma mudança estética). + +```python +# Reorder the columns (This is cosmetic, but to make it easier to explore the data later) +df = df.reindex(["Hotel_Name", "Hotel_Address", "Total_Number_of_Reviews", "Average_Score", "Reviewer_Score", "Negative_Sentiment", "Positive_Sentiment", "Reviewer_Nationality", "Leisure_trip", "Couple", "Solo_traveler", "Business_trip", "Group", "Family_with_young_children", "Family_with_older_children", "With_a_pet", "Negative_Review", "Positive_Review"], axis=1) + +print("Saving results to Hotel_Reviews_NLP.csv") +df.to_csv(r"../data/Hotel_Reviews_NLP.csv", index = False) +``` + +Você deve executar todo o código do [notebook de análise](https://github.com/microsoft/ML-For-Beginners/blob/main/6-NLP/5-Hotel-Reviews-2/solution/3-notebook.ipynb) (depois de executar o [notebook de filtragem](https://github.com/microsoft/ML-For-Beginners/blob/main/6-NLP/5-Hotel-Reviews-2/solution/1-notebook.ipynb) para gerar o arquivo Hotel_Reviews_Filtered.csv). + +Para revisar, os passos são: + +1. O arquivo do conjunto de dados original **Hotel_Reviews.csv** é explorado na lição anterior com o [notebook de exploração](https://github.com/microsoft/ML-For-Beginners/blob/main/6-NLP/4-Hotel-Reviews-1/solution/notebook.ipynb) +2. O arquivo Hotel_Reviews.csv é filtrado pelo [notebook de filtragem](https://github.com/microsoft/ML-For-Beginners/blob/main/6-NLP/5-Hotel-Reviews-2/solution/1-notebook.ipynb), resultando no **Hotel_Reviews_Filtered.csv** +3. O arquivo Hotel_Reviews_Filtered.csv é processado pelo [notebook de análise de sentimento](https://github.com/microsoft/ML-For-Beginners/blob/main/6-NLP/5-Hotel-Reviews-2/solution/3-notebook.ipynb), resultando no **Hotel_Reviews_NLP.csv** +4. Use o arquivo Hotel_Reviews_NLP.csv no Desafio de NLP abaixo + +### Conclusão + +Quando você começou, tinha um conjunto de dados com colunas e informações, mas nem tudo podia ser verificado ou utilizado. Você explorou os dados, filtrou o que não era necessário, converteu tags em algo útil, calculou suas próprias médias, adicionou algumas colunas de sentimento e, com sorte, aprendeu coisas interessantes sobre o processamento de texto natural. + +## [Questionário pós-aula](https://ff-quizzes.netlify.app/en/ml/) + +## Desafio + +Agora que você analisou o sentimento do seu conjunto de dados, veja se consegue usar as estratégias aprendidas neste curso (talvez clustering?) para identificar padrões relacionados ao sentimento. + +## Revisão e Autoestudo + +Faça [este módulo do Learn](https://docs.microsoft.com/en-us/learn/modules/classify-user-feedback-with-the-text-analytics-api/?WT.mc_id=academic-77952-leestott) para aprender mais e usar ferramentas diferentes para explorar o sentimento em textos. + +## Tarefa + +[Experimente um conjunto de dados diferente](assignment.md) + +--- + +**Aviso Legal**: +Este documento foi traduzido utilizando o serviço de tradução por IA [Co-op Translator](https://github.com/Azure/co-op-translator). Embora nos esforcemos para garantir a precisão, esteja ciente de que traduções automáticas podem conter erros ou imprecisões. O documento original em seu idioma nativo deve ser considerado a fonte oficial. Para informações críticas, recomenda-se a tradução profissional feita por humanos. Não nos responsabilizamos por quaisquer mal-entendidos ou interpretações equivocadas decorrentes do uso desta tradução. \ No newline at end of file diff --git a/translations/pt-BR/6-NLP/5-Hotel-Reviews-2/assignment.md b/translations/pt-BR/6-NLP/5-Hotel-Reviews-2/assignment.md new file mode 100644 index 000000000..f5c7fce50 --- /dev/null +++ b/translations/pt-BR/6-NLP/5-Hotel-Reviews-2/assignment.md @@ -0,0 +1,16 @@ +# Experimente um conjunto de dados diferente + +## Instruções + +Agora que você aprendeu a usar o NLTK para atribuir sentimento a textos, experimente um conjunto de dados diferente. Você provavelmente precisará realizar algum processamento nos dados, então crie um notebook e documente seu raciocínio. O que você descobre? + +## Rubrica + +| Critério | Exemplares | Adequado | Precisa de Melhorias | +| -------- | ---------------------------------------------------------------------------------------------------------------- | ----------------------------------------- | ----------------------- | +| | Um notebook completo e um conjunto de dados são apresentados com células bem documentadas explicando como o sentimento é atribuído | O notebook está faltando boas explicações | O notebook apresenta falhas | + +--- + +**Aviso Legal**: +Este documento foi traduzido utilizando o serviço de tradução por IA [Co-op Translator](https://github.com/Azure/co-op-translator). Embora nos esforcemos para garantir a precisão, esteja ciente de que traduções automatizadas podem conter erros ou imprecisões. O documento original em seu idioma nativo deve ser considerado a fonte autoritativa. Para informações críticas, recomenda-se a tradução profissional realizada por humanos. Não nos responsabilizamos por quaisquer mal-entendidos ou interpretações equivocadas decorrentes do uso desta tradução. \ No newline at end of file diff --git a/translations/pt-BR/6-NLP/5-Hotel-Reviews-2/notebook.ipynb b/translations/pt-BR/6-NLP/5-Hotel-Reviews-2/notebook.ipynb new file mode 100644 index 000000000..e69de29bb diff --git a/translations/pt-BR/6-NLP/5-Hotel-Reviews-2/solution/1-notebook.ipynb b/translations/pt-BR/6-NLP/5-Hotel-Reviews-2/solution/1-notebook.ipynb new file mode 100644 index 000000000..d08397733 --- /dev/null +++ b/translations/pt-BR/6-NLP/5-Hotel-Reviews-2/solution/1-notebook.ipynb @@ -0,0 +1,172 @@ +{ + "metadata": { + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.7.0" + }, + "orig_nbformat": 4, + "kernelspec": { + "name": "python3", + "display_name": "Python 3.7.0 64-bit ('3.7')" + }, + "interpreter": { + "hash": "70b38d7a306a849643e446cd70466270a13445e5987dfa1344ef2b127438fa4d" + }, + "coopTranslator": { + "original_hash": "033cb89c85500224b3c63fd04f49b4aa", + "translation_date": "2025-08-30T00:15:03+00:00", + "source_file": "6-NLP/5-Hotel-Reviews-2/solution/1-notebook.ipynb", + "language_code": "br" + } + }, + "nbformat": 4, + "nbformat_minor": 2, + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "import pandas as pd\n", + "import time\n", + "import ast" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "def replace_address(row):\n", + " if \"Netherlands\" in row[\"Hotel_Address\"]:\n", + " return \"Amsterdam, Netherlands\"\n", + " elif \"Barcelona\" in row[\"Hotel_Address\"]:\n", + " return \"Barcelona, Spain\"\n", + " elif \"United Kingdom\" in row[\"Hotel_Address\"]:\n", + " return \"London, United Kingdom\"\n", + " elif \"Milan\" in row[\"Hotel_Address\"]: \n", + " return \"Milan, Italy\"\n", + " elif \"France\" in row[\"Hotel_Address\"]:\n", + " return \"Paris, France\"\n", + " elif \"Vienna\" in row[\"Hotel_Address\"]:\n", + " return \"Vienna, Austria\" \n", + " else:\n", + " return row.Hotel_Address\n", + " " + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [], + "source": [ + "# Load the hotel reviews from CSV\n", + "start = time.time()\n", + "df = pd.read_csv('../../data/Hotel_Reviews.csv')\n" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [], + "source": [ + "# dropping columns we will not use:\n", + "df.drop([\"lat\", \"lng\"], axis = 1, inplace=True)\n" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [], + "source": [ + "# Replace all the addresses with a shortened, more useful form\n", + "df[\"Hotel_Address\"] = df.apply(replace_address, axis = 1)\n" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [], + "source": [ + "# Drop `Additional_Number_of_Scoring`\n", + "df.drop([\"Additional_Number_of_Scoring\"], axis = 1, inplace=True)\n", + "# Replace `Total_Number_of_Reviews` and `Average_Score` with our own calculated values\n", + "df.Total_Number_of_Reviews = df.groupby('Hotel_Name').transform('count')\n", + "df.Average_Score = round(df.groupby('Hotel_Name').Reviewer_Score.transform('mean'), 1)\n" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [], + "source": [ + "# Process the Tags into new columns\n", + "# The file Hotel_Reviews_Tags.py, identifies the most important tags\n", + "# Leisure trip, Couple, Solo traveler, Business trip, Group combined with Travelers with friends, \n", + "# Family with young children, Family with older children, With a pet\n", + "df[\"Leisure_trip\"] = df.Tags.apply(lambda tag: 1 if \"Leisure trip\" in tag else 0)\n", + "df[\"Couple\"] = df.Tags.apply(lambda tag: 1 if \"Couple\" in tag else 0)\n", + "df[\"Solo_traveler\"] = df.Tags.apply(lambda tag: 1 if \"Solo traveler\" in tag else 0)\n", + "df[\"Business_trip\"] = df.Tags.apply(lambda tag: 1 if \"Business trip\" in tag else 0)\n", + "df[\"Group\"] = df.Tags.apply(lambda tag: 1 if \"Group\" in tag or \"Travelers with friends\" in tag else 0)\n", + "df[\"Family_with_young_children\"] = df.Tags.apply(lambda tag: 1 if \"Family with young children\" in tag else 0)\n", + "df[\"Family_with_older_children\"] = df.Tags.apply(lambda tag: 1 if \"Family with older children\" in tag else 0)\n", + "df[\"With_a_pet\"] = df.Tags.apply(lambda tag: 1 if \"With a pet\" in tag else 0)\n" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [], + "source": [ + "# No longer need any of these columns\n", + "df.drop([\"Review_Date\", \"Review_Total_Negative_Word_Counts\", \"Review_Total_Positive_Word_Counts\", \"days_since_review\", \"Total_Number_of_Reviews_Reviewer_Has_Given\"], axis = 1, inplace=True)\n" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Saving results to Hotel_Reviews_Filtered.csv\n", + "Filtering took 23.74 seconds\n" + ] + } + ], + "source": [ + "# Saving new data file with calculated columns\n", + "print(\"Saving results to Hotel_Reviews_Filtered.csv\")\n", + "df.to_csv(r'../../data/Hotel_Reviews_Filtered.csv', index = False)\n", + "end = time.time()\n", + "print(\"Filtering took \" + str(round(end - start, 2)) + \" seconds\")\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n---\n\n**Aviso Legal**: \nEste documento foi traduzido utilizando o serviço de tradução por IA [Co-op Translator](https://github.com/Azure/co-op-translator). Embora nos esforcemos para garantir a precisão, esteja ciente de que traduções automatizadas podem conter erros ou imprecisões. O documento original em seu idioma nativo deve ser considerado a fonte autoritativa. Para informações críticas, recomenda-se a tradução profissional realizada por humanos. Não nos responsabilizamos por quaisquer mal-entendidos ou interpretações equivocadas decorrentes do uso desta tradução.\n" + ] + } + ] +} \ No newline at end of file diff --git a/translations/pt-BR/6-NLP/5-Hotel-Reviews-2/solution/2-notebook.ipynb b/translations/pt-BR/6-NLP/5-Hotel-Reviews-2/solution/2-notebook.ipynb new file mode 100644 index 000000000..7da8660dc --- /dev/null +++ b/translations/pt-BR/6-NLP/5-Hotel-Reviews-2/solution/2-notebook.ipynb @@ -0,0 +1,137 @@ +{ + "metadata": { + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.7.0" + }, + "orig_nbformat": 4, + "kernelspec": { + "name": "python3", + "display_name": "Python 3.7.0 64-bit ('3.7')" + }, + "interpreter": { + "hash": "70b38d7a306a849643e446cd70466270a13445e5987dfa1344ef2b127438fa4d" + }, + "coopTranslator": { + "original_hash": "341efc86325ec2a214f682f57a189dfd", + "translation_date": "2025-08-30T00:15:16+00:00", + "source_file": "6-NLP/5-Hotel-Reviews-2/solution/2-notebook.ipynb", + "language_code": "br" + } + }, + "nbformat": 4, + "nbformat_minor": 2, + "cells": [ + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [], + "source": [ + "# Load the hotel reviews from CSV (you can )\n", + "import pandas as pd \n", + "\n", + "df = pd.read_csv('../../data/Hotel_Reviews_Filtered.csv')\n" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [], + "source": [ + "# We want to find the most useful tags to keep\n", + "# Remove opening and closing brackets\n", + "df.Tags = df.Tags.str.strip(\"[']\")\n", + "# remove all quotes too\n", + "df.Tags = df.Tags.str.replace(\" ', '\", \",\", regex = False)\n" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [], + "source": [ + "# removing this to take advantage of the 'already a phrase' fact of the dataset \n", + "# Now split the strings into a list\n", + "tag_list_df = df.Tags.str.split(',', expand = True)\n" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [], + "source": [ + "# Remove leading and trailing spaces\n", + "df[\"Tag_1\"] = tag_list_df[0].str.strip()\n", + "df[\"Tag_2\"] = tag_list_df[1].str.strip()\n", + "df[\"Tag_3\"] = tag_list_df[2].str.strip()\n", + "df[\"Tag_4\"] = tag_list_df[3].str.strip()\n", + "df[\"Tag_5\"] = tag_list_df[4].str.strip()\n", + "df[\"Tag_6\"] = tag_list_df[5].str.strip()\n" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [], + "source": [ + "# Merge the 6 columns into one with melt\n", + "df_tags = df.melt(value_vars=[\"Tag_1\", \"Tag_2\", \"Tag_3\", \"Tag_4\", \"Tag_5\", \"Tag_6\"])\n" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "The shape of the tags with no filtering: (2514684, 2)\n", + " index count\n", + "0 Leisure trip 338423\n", + "1 Couple 205305\n", + "2 Solo traveler 89779\n", + "3 Business trip 68176\n", + "4 Group 51593\n", + "5 Family with young children 49318\n", + "6 Family with older children 21509\n", + "7 Travelers with friends 1610\n", + "8 With a pet 1078\n" + ] + } + ], + "source": [ + "# Get the value counts\n", + "tag_vc = df_tags.value.value_counts()\n", + "# print(tag_vc)\n", + "print(\"The shape of the tags with no filtering:\", str(df_tags.shape))\n", + "# Drop rooms, suites, and length of stay, mobile device and anything with less count than a 1000\n", + "df_tags = df_tags[~df_tags.value.str.contains(\"Standard|room|Stayed|device|Beds|Suite|Studio|King|Superior|Double\", na=False, case=False)]\n", + "tag_vc = df_tags.value.value_counts().reset_index(name=\"count\").query(\"count > 1000\")\n", + "# Print the top 10 (there should only be 9 and we'll use these in the filtering section)\n", + "print(tag_vc[:10])" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n---\n\n**Aviso Legal**: \nEste documento foi traduzido utilizando o serviço de tradução por IA [Co-op Translator](https://github.com/Azure/co-op-translator). Embora nos esforcemos para garantir a precisão, esteja ciente de que traduções automáticas podem conter erros ou imprecisões. O documento original em seu idioma nativo deve ser considerado a fonte oficial. Para informações críticas, recomenda-se a tradução profissional realizada por humanos. Não nos responsabilizamos por quaisquer mal-entendidos ou interpretações incorretas decorrentes do uso desta tradução.\n" + ] + } + ] +} \ No newline at end of file diff --git a/translations/pt-BR/6-NLP/5-Hotel-Reviews-2/solution/3-notebook.ipynb b/translations/pt-BR/6-NLP/5-Hotel-Reviews-2/solution/3-notebook.ipynb new file mode 100644 index 000000000..6f14216b6 --- /dev/null +++ b/translations/pt-BR/6-NLP/5-Hotel-Reviews-2/solution/3-notebook.ipynb @@ -0,0 +1,260 @@ +{ + "metadata": { + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.7.0" + }, + "orig_nbformat": 4, + "kernelspec": { + "name": "python3", + "display_name": "Python 3.7.0 64-bit ('3.7')" + }, + "interpreter": { + "hash": "70b38d7a306a849643e446cd70466270a13445e5987dfa1344ef2b127438fa4d" + }, + "coopTranslator": { + "original_hash": "705bf02633759f689abc37b19749a16d", + "translation_date": "2025-08-30T00:15:29+00:00", + "source_file": "6-NLP/5-Hotel-Reviews-2/solution/3-notebook.ipynb", + "language_code": "br" + } + }, + "nbformat": 4, + "nbformat_minor": 2, + "cells": [ + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "output_type": "stream", + "name": "stderr", + "text": [ + "[nltk_data] Downloading package vader_lexicon to\n[nltk_data] /Users/jenlooper/nltk_data...\n" + ] + }, + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "True" + ] + }, + "metadata": {}, + "execution_count": 9 + } + ], + "source": [ + "import time\n", + "import pandas as pd\n", + "import nltk as nltk\n", + "from nltk.corpus import stopwords\n", + "from nltk.sentiment.vader import SentimentIntensityAnalyzer\n", + "nltk.download('vader_lexicon')\n" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [], + "source": [ + "vader_sentiment = SentimentIntensityAnalyzer()\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [], + "source": [ + "# There are 3 possibilities of input for a review:\n", + "# It could be \"No Negative\", in which case, return 0\n", + "# It could be \"No Positive\", in which case, return 0\n", + "# It could be a review, in which case calculate the sentiment\n", + "def calc_sentiment(review): \n", + " if review == \"No Negative\" or review == \"No Positive\":\n", + " return 0\n", + " return vader_sentiment.polarity_scores(review)[\"compound\"] \n" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [], + "source": [ + "# Load the hotel reviews from CSV\n", + "df = pd.read_csv(\"../../data/Hotel_Reviews_Filtered.csv\")\n" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [], + "source": [ + "# Remove stop words - can be slow for a lot of text!\n", + "# Ryan Han (ryanxjhan on Kaggle) has a great post measuring performance of different stop words removal approaches\n", + "# https://www.kaggle.com/ryanxjhan/fast-stop-words-removal # using the approach that Ryan recommends\n", + "start = time.time()\n", + "cache = set(stopwords.words(\"english\"))\n", + "def remove_stopwords(review):\n", + " text = \" \".join([word for word in review.split() if word not in cache])\n", + " return text\n" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [], + "source": [ + "# Remove the stop words from both columns\n", + "df.Negative_Review = df.Negative_Review.apply(remove_stopwords) \n", + "df.Positive_Review = df.Positive_Review.apply(remove_stopwords)\n" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": {}, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Removing stop words took 5.77 seconds\n" + ] + } + ], + "source": [ + "end = time.time()\n", + "print(\"Removing stop words took \" + str(round(end - start, 2)) + \" seconds\")\n" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": {}, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Calculating sentiment columns for both positive and negative reviews\n", + "Calculating sentiment took 201.07 seconds\n" + ] + } + ], + "source": [ + "# Add a negative sentiment and positive sentiment column\n", + "print(\"Calculating sentiment columns for both positive and negative reviews\")\n", + "start = time.time()\n", + "df[\"Negative_Sentiment\"] = df.Negative_Review.apply(calc_sentiment)\n", + "df[\"Positive_Sentiment\"] = df.Positive_Review.apply(calc_sentiment)\n", + "end = time.time()\n", + "print(\"Calculating sentiment took \" + str(round(end - start, 2)) + \" seconds\")\n" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": {}, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + " Negative_Review Negative_Sentiment\n", + "186584 So bad experience memories I hotel The first n... -0.9920\n", + "129503 First charged twice room booked booking second... -0.9896\n", + "307286 The staff Had bad experience even booking Janu... -0.9889\n", + "452092 No WLAN room Incredibly rude restaurant staff ... -0.9884\n", + "201293 We usually traveling Paris 2 3 times year busi... -0.9873\n", + "... ... ...\n", + "26899 I would say however one night expensive even d... 0.9933\n", + "138365 Wifi terribly slow I speed test network upload... 0.9938\n", + "79215 I find anything hotel first I walked past hote... 0.9938\n", + "278506 The property great location There bakery next ... 0.9945\n", + "339189 Guys I like hotel I wish return next year Howe... 0.9948\n", + "\n", + "[515738 rows x 2 columns]\n", + " Positive_Review Positive_Sentiment\n", + "137893 Bathroom Shower We going stay twice hotel 2 ni... -0.9820\n", + "5839 I completely disappointed mad since reception ... -0.9780\n", + "64158 get everything extra internet parking breakfas... -0.9751\n", + "124178 I didnt like anythig Room small Asked upgrade ... -0.9721\n", + "489137 Very rude manager abusive staff reception Dirt... -0.9703\n", + "... ... ...\n", + "331570 Everything This recently renovated hotel class... 0.9984\n", + "322920 From moment stepped doors Guesthouse Hotel sta... 0.9985\n", + "293710 This place surprise expected good actually gre... 0.9985\n", + "417442 We celebrated wedding night Langham I commend ... 0.9985\n", + "132492 We arrived super cute boutique hotel area expl... 0.9987\n", + "\n", + "[515738 rows x 2 columns]\n" + ] + } + ], + "source": [ + "df = df.sort_values(by=[\"Negative_Sentiment\"], ascending=True)\n", + "print(df[[\"Negative_Review\", \"Negative_Sentiment\"]])\n", + "df = df.sort_values(by=[\"Positive_Sentiment\"], ascending=True)\n", + "print(df[[\"Positive_Review\", \"Positive_Sentiment\"]])\n" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": {}, + "outputs": [], + "source": [ + "# Reorder the columns (This is cosmetic, but to make it easier to explore the data later)\n", + "df = df.reindex([\"Hotel_Name\", \"Hotel_Address\", \"Total_Number_of_Reviews\", \"Average_Score\", \"Reviewer_Score\", \"Negative_Sentiment\", \"Positive_Sentiment\", \"Reviewer_Nationality\", \"Leisure_trip\", \"Couple\", \"Solo_traveler\", \"Business_trip\", \"Group\", \"Family_with_young_children\", \"Family_with_older_children\", \"With_a_pet\", \"Negative_Review\", \"Positive_Review\"], axis=1)\n" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": {}, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Saving results to Hotel_Reviews_NLP.csv\n" + ] + } + ], + "source": [ + "print(\"Saving results to Hotel_Reviews_NLP.csv\")\n", + "df.to_csv(r\"../../data/Hotel_Reviews_NLP.csv\", index = False)\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n---\n\n**Aviso Legal**: \nEste documento foi traduzido utilizando o serviço de tradução por IA [Co-op Translator](https://github.com/Azure/co-op-translator). Embora nos esforcemos para garantir a precisão, esteja ciente de que traduções automáticas podem conter erros ou imprecisões. O documento original em seu idioma nativo deve ser considerado a fonte oficial. Para informações críticas, recomenda-se a tradução profissional realizada por humanos. Não nos responsabilizamos por quaisquer mal-entendidos ou interpretações equivocadas decorrentes do uso desta tradução.\n" + ] + } + ] +} \ No newline at end of file diff --git a/translations/pt-BR/6-NLP/5-Hotel-Reviews-2/solution/Julia/README.md b/translations/pt-BR/6-NLP/5-Hotel-Reviews-2/solution/Julia/README.md new file mode 100644 index 000000000..c58234bae --- /dev/null +++ b/translations/pt-BR/6-NLP/5-Hotel-Reviews-2/solution/Julia/README.md @@ -0,0 +1,6 @@ + + +--- + +**Aviso Legal**: +Este documento foi traduzido utilizando o serviço de tradução por IA [Co-op Translator](https://github.com/Azure/co-op-translator). Embora nos esforcemos para garantir a precisão, esteja ciente de que traduções automatizadas podem conter erros ou imprecisões. O documento original em seu idioma nativo deve ser considerado a fonte autoritativa. Para informações críticas, recomenda-se a tradução profissional realizada por humanos. Não nos responsabilizamos por quaisquer mal-entendidos ou interpretações equivocadas decorrentes do uso desta tradução. \ No newline at end of file diff --git a/translations/pt-BR/6-NLP/5-Hotel-Reviews-2/solution/R/README.md b/translations/pt-BR/6-NLP/5-Hotel-Reviews-2/solution/R/README.md new file mode 100644 index 000000000..c58234bae --- /dev/null +++ b/translations/pt-BR/6-NLP/5-Hotel-Reviews-2/solution/R/README.md @@ -0,0 +1,6 @@ + + +--- + +**Aviso Legal**: +Este documento foi traduzido utilizando o serviço de tradução por IA [Co-op Translator](https://github.com/Azure/co-op-translator). Embora nos esforcemos para garantir a precisão, esteja ciente de que traduções automatizadas podem conter erros ou imprecisões. O documento original em seu idioma nativo deve ser considerado a fonte autoritativa. Para informações críticas, recomenda-se a tradução profissional realizada por humanos. Não nos responsabilizamos por quaisquer mal-entendidos ou interpretações equivocadas decorrentes do uso desta tradução. \ No newline at end of file diff --git a/translations/pt-BR/6-NLP/README.md b/translations/pt-BR/6-NLP/README.md new file mode 100644 index 000000000..3f0aa6743 --- /dev/null +++ b/translations/pt-BR/6-NLP/README.md @@ -0,0 +1,29 @@ +# Introdução ao processamento de linguagem natural + +O processamento de linguagem natural (PLN) é a capacidade de um programa de computador entender a linguagem humana como ela é falada e escrita — referida como linguagem natural. É um componente da inteligência artificial (IA). O PLN existe há mais de 50 anos e tem raízes no campo da linguística. Todo o campo é direcionado a ajudar as máquinas a entender e processar a linguagem humana. Isso pode ser usado para realizar tarefas como correção ortográfica ou tradução automática. Ele possui uma variedade de aplicações no mundo real em diversos campos, incluindo pesquisa médica, motores de busca e inteligência empresarial. + +## Tópico regional: Línguas e literatura europeias e hotéis românticos da Europa ❤️ + +Nesta seção do currículo, você será introduzido a um dos usos mais difundidos do aprendizado de máquina: o processamento de linguagem natural (PLN). Derivado da linguística computacional, esta categoria de inteligência artificial é a ponte entre humanos e máquinas por meio de comunicação vocal ou textual. + +Nestas lições, aprenderemos os fundamentos do PLN construindo pequenos bots conversacionais para entender como o aprendizado de máquina ajuda a tornar essas conversas cada vez mais 'inteligentes'. Você viajará no tempo, conversando com Elizabeth Bennett e Mr. Darcy do clássico romance de Jane Austen, **Orgulho e Preconceito**, publicado em 1813. Depois, você aprofundará seu conhecimento aprendendo sobre análise de sentimentos por meio de avaliações de hotéis na Europa. + +![Livro Orgulho e Preconceito e chá](../../../translated_images/pt-BR/p&p.279f1c49ecd88941.webp) +> Foto por Elaine Howlin no Unsplash + +## Lições + +1. [Introdução ao processamento de linguagem natural](1-Introduction-to-NLP/README.md) +2. [Tarefas e técnicas comuns de PLN](2-Tasks/README.md) +3. [Tradução e análise de sentimentos com aprendizado de máquina](3-Translation-Sentiment/README.md) +4. [Preparando seus dados](4-Hotel-Reviews-1/README.md) +5. [NLTK para análise de sentimentos](5-Hotel-Reviews-2/README.md) + +## Créditos + +Estas lições de processamento de linguagem natural foram escritas com ☕ por [Stephen Howell](https://twitter.com/Howell_MSFT) + +--- + +**Aviso Legal**: +Este documento foi traduzido utilizando o serviço de tradução por IA [Co-op Translator](https://github.com/Azure/co-op-translator). Embora nos esforcemos para garantir a precisão, esteja ciente de que traduções automatizadas podem conter erros ou imprecisões. O documento original em seu idioma nativo deve ser considerado a fonte autoritativa. Para informações críticas, recomenda-se a tradução profissional realizada por humanos. Não nos responsabilizamos por quaisquer mal-entendidos ou interpretações equivocadas decorrentes do uso desta tradução. \ No newline at end of file diff --git a/translations/pt-BR/6-NLP/data/README.md b/translations/pt-BR/6-NLP/data/README.md new file mode 100644 index 000000000..36633220d --- /dev/null +++ b/translations/pt-BR/6-NLP/data/README.md @@ -0,0 +1,6 @@ +Baixe os dados de avaliação do hotel para esta pasta. + +--- + +**Aviso Legal**: +Este documento foi traduzido utilizando o serviço de tradução por IA [Co-op Translator](https://github.com/Azure/co-op-translator). Embora nos esforcemos para garantir a precisão, esteja ciente de que traduções automatizadas podem conter erros ou imprecisões. O documento original em seu idioma nativo deve ser considerado a fonte autoritativa. Para informações críticas, recomenda-se a tradução profissional realizada por humanos. Não nos responsabilizamos por quaisquer mal-entendidos ou interpretações equivocadas decorrentes do uso desta tradução. \ No newline at end of file diff --git a/translations/pt-BR/7-TimeSeries/1-Introduction/README.md b/translations/pt-BR/7-TimeSeries/1-Introduction/README.md new file mode 100644 index 000000000..48a063c95 --- /dev/null +++ b/translations/pt-BR/7-TimeSeries/1-Introduction/README.md @@ -0,0 +1,190 @@ +# Introdução à previsão de séries temporais + +![Resumo de séries temporais em um sketchnote](../../../../sketchnotes/ml-timeseries.png) + +> Sketchnote por [Tomomi Imura](https://www.twitter.com/girlie_mac) + +Nesta lição e na próxima, você aprenderá um pouco sobre previsão de séries temporais, uma parte interessante e valiosa do repertório de um cientista de ML que é um pouco menos conhecida do que outros tópicos. A previsão de séries temporais é como uma espécie de "bola de cristal": com base no desempenho passado de uma variável, como preço, você pode prever seu valor potencial futuro. + +[![Introdução à previsão de séries temporais](https://img.youtube.com/vi/cBojo1hsHiI/0.jpg)](https://youtu.be/cBojo1hsHiI "Introdução à previsão de séries temporais") + +> 🎥 Clique na imagem acima para assistir a um vídeo sobre previsão de séries temporais + +## [Quiz pré-aula](https://ff-quizzes.netlify.app/en/ml/) + +É um campo útil e interessante com valor real para os negócios, dado sua aplicação direta em problemas de precificação, inventário e questões de cadeia de suprimentos. Embora técnicas de aprendizado profundo tenham começado a ser usadas para obter mais insights e prever melhor o desempenho futuro, a previsão de séries temporais continua sendo um campo amplamente informado por técnicas clássicas de ML. + +> O currículo útil de séries temporais da Penn State pode ser encontrado [aqui](https://online.stat.psu.edu/stat510/lesson/1) + +## Introdução + +Suponha que você gerencie uma rede de parquímetros inteligentes que fornecem dados sobre com que frequência eles são usados e por quanto tempo ao longo do tempo. + +> E se você pudesse prever, com base no desempenho passado do parquímetro, seu valor futuro de acordo com as leis de oferta e demanda? + +Prever com precisão quando agir para alcançar seu objetivo é um desafio que pode ser abordado com previsão de séries temporais. Não deixaria as pessoas felizes serem cobradas mais caro em horários de pico quando estão procurando uma vaga, mas seria uma maneira eficaz de gerar receita para limpar as ruas! + +Vamos explorar alguns dos tipos de algoritmos de séries temporais e começar um notebook para limpar e preparar alguns dados. Os dados que você analisará foram retirados da competição de previsão GEFCom2014. Eles consistem em 3 anos de valores horários de carga elétrica e temperatura entre 2012 e 2014. Dado os padrões históricos de carga elétrica e temperatura, você pode prever valores futuros de carga elétrica. + +Neste exemplo, você aprenderá como prever um passo de tempo à frente, usando apenas dados históricos de carga. Antes de começar, no entanto, é útil entender o que está acontecendo nos bastidores. + +## Algumas definições + +Ao encontrar o termo "séries temporais", você precisa entender seu uso em vários contextos diferentes. + +🎓 **Séries temporais** + +Em matemática, "uma série temporal é uma série de pontos de dados indexados (ou listados ou representados graficamente) em ordem temporal. Mais comumente, uma série temporal é uma sequência tomada em pontos sucessivos igualmente espaçados no tempo." Um exemplo de série temporal é o valor de fechamento diário do [Dow Jones Industrial Average](https://wikipedia.org/wiki/Time_series). O uso de gráficos de séries temporais e modelagem estatística é frequentemente encontrado em processamento de sinais, previsão do tempo, previsão de terremotos e outros campos onde eventos ocorrem e pontos de dados podem ser plotados ao longo do tempo. + +🎓 **Análise de séries temporais** + +A análise de séries temporais é a análise dos dados de séries temporais mencionados acima. Os dados de séries temporais podem assumir formas distintas, incluindo "séries temporais interrompidas", que detectam padrões na evolução de uma série temporal antes e depois de um evento interruptor. O tipo de análise necessário para a série temporal depende da natureza dos dados. Os dados de séries temporais podem assumir a forma de séries de números ou caracteres. + +A análise a ser realizada utiliza uma variedade de métodos, incluindo domínio de frequência e domínio de tempo, linear e não linear, e mais. [Saiba mais](https://www.itl.nist.gov/div898/handbook/pmc/section4/pmc4.htm) sobre as muitas maneiras de analisar esse tipo de dado. + +🎓 **Previsão de séries temporais** + +A previsão de séries temporais é o uso de um modelo para prever valores futuros com base em padrões exibidos por dados previamente coletados conforme ocorreram no passado. Embora seja possível usar modelos de regressão para explorar dados de séries temporais, com índices de tempo como variáveis x em um gráfico, esses dados são melhor analisados usando tipos especiais de modelos. + +Os dados de séries temporais são uma lista de observações ordenadas, diferente de dados que podem ser analisados por regressão linear. O mais comum é o ARIMA, um acrônimo que significa "Autoregressive Integrated Moving Average" (Média Móvel Integrada Autoregressiva). + +[Modelos ARIMA](https://online.stat.psu.edu/stat510/lesson/1/1.1) "relacionam o valor presente de uma série a valores passados e erros de previsão passados." Eles são mais apropriados para analisar dados no domínio do tempo, onde os dados são ordenados ao longo do tempo. + +> Existem vários tipos de modelos ARIMA, sobre os quais você pode aprender [aqui](https://people.duke.edu/~rnau/411arim.htm) e que você abordará na próxima lição. + +Na próxima lição, você construirá um modelo ARIMA usando [Séries Temporais Univariadas](https://itl.nist.gov/div898/handbook/pmc/section4/pmc44.htm), que se concentra em uma variável que muda seu valor ao longo do tempo. Um exemplo desse tipo de dado é [este conjunto de dados](https://itl.nist.gov/div898/handbook/pmc/section4/pmc4411.htm) que registra a concentração mensal de CO2 no Observatório Mauna Loa: + +| CO2 | YearMonth | Year | Month | +| :----: | :-------: | :---: | :---: | +| 330.62 | 1975.04 | 1975 | 1 | +| 331.40 | 1975.13 | 1975 | 2 | +| 331.87 | 1975.21 | 1975 | 3 | +| 333.18 | 1975.29 | 1975 | 4 | +| 333.92 | 1975.38 | 1975 | 5 | +| 333.43 | 1975.46 | 1975 | 6 | +| 331.85 | 1975.54 | 1975 | 7 | +| 330.01 | 1975.63 | 1975 | 8 | +| 328.51 | 1975.71 | 1975 | 9 | +| 328.41 | 1975.79 | 1975 | 10 | +| 329.25 | 1975.88 | 1975 | 11 | +| 330.97 | 1975.96 | 1975 | 12 | + +✅ Identifique a variável que muda ao longo do tempo neste conjunto de dados. + +## Características dos dados de séries temporais a considerar + +Ao observar dados de séries temporais, você pode notar que eles possuem [certas características](https://online.stat.psu.edu/stat510/lesson/1/1.1) que você precisa levar em conta e mitigar para entender melhor seus padrões. Se você considerar os dados de séries temporais como potencialmente fornecendo um "sinal" que deseja analisar, essas características podem ser vistas como "ruído". Muitas vezes, será necessário reduzir esse "ruído" compensando algumas dessas características usando técnicas estatísticas. + +Aqui estão alguns conceitos que você deve conhecer para trabalhar com séries temporais: + +🎓 **Tendências** + +Tendências são definidas como aumentos e diminuições mensuráveis ao longo do tempo. [Leia mais](https://machinelearningmastery.com/time-series-trends-in-python). No contexto de séries temporais, trata-se de como usar e, se necessário, remover tendências de sua série temporal. + +🎓 **[Sazonalidade](https://machinelearningmastery.com/time-series-seasonality-with-python/)** + +Sazonalidade é definida como flutuações periódicas, como picos de vendas durante feriados, por exemplo. [Veja](https://itl.nist.gov/div898/handbook/pmc/section4/pmc443.htm) como diferentes tipos de gráficos exibem sazonalidade nos dados. + +🎓 **Outliers** + +Outliers estão distantes da variância padrão dos dados. + +🎓 **Ciclo de longo prazo** + +Independentemente da sazonalidade, os dados podem exibir um ciclo de longo prazo, como uma recessão econômica que dura mais de um ano. + +🎓 **Variância constante** + +Ao longo do tempo, alguns dados exibem flutuações constantes, como o uso de energia durante o dia e a noite. + +🎓 **Mudanças abruptas** + +Os dados podem exibir uma mudança abrupta que pode precisar de análise adicional. O fechamento repentino de negócios devido à COVID, por exemplo, causou mudanças nos dados. + +✅ Aqui está um [exemplo de gráfico de séries temporais](https://www.kaggle.com/kashnitsky/topic-9-part-1-time-series-analysis-in-python) mostrando o gasto diário de moeda em jogos ao longo de alguns anos. Você consegue identificar alguma das características listadas acima nesses dados? + +![Gasto de moeda em jogos](../../../../7-TimeSeries/1-Introduction/images/currency.png) + +## Exercício - começando com dados de uso de energia + +Vamos começar criando um modelo de séries temporais para prever o uso futuro de energia com base no uso passado. + +> Os dados neste exemplo foram retirados da competição de previsão GEFCom2014. Eles consistem em 3 anos de valores horários de carga elétrica e temperatura entre 2012 e 2014. +> +> Tao Hong, Pierre Pinson, Shu Fan, Hamidreza Zareipour, Alberto Troccoli e Rob J. Hyndman, "Probabilistic energy forecasting: Global Energy Forecasting Competition 2014 and beyond", International Journal of Forecasting, vol.32, no.3, pp 896-913, julho-setembro, 2016. + +1. Na pasta `working` desta lição, abra o arquivo _notebook.ipynb_. Comece adicionando bibliotecas que ajudarão você a carregar e visualizar os dados. + + ```python + import os + import matplotlib.pyplot as plt + from common.utils import load_data + %matplotlib inline + ``` + + Observe que você está usando os arquivos da pasta `common` incluída, que configuram seu ambiente e lidam com o download dos dados. + +2. Em seguida, examine os dados como um dataframe chamando `load_data()` e `head()`: + + ```python + data_dir = './data' + energy = load_data(data_dir)[['load']] + energy.head() + ``` + + Você pode ver que há duas colunas representando data e carga: + + | | load | + | :-----------------: | :----: | + | 2012-01-01 00:00:00 | 2698.0 | + | 2012-01-01 01:00:00 | 2558.0 | + | 2012-01-01 02:00:00 | 2444.0 | + | 2012-01-01 03:00:00 | 2402.0 | + | 2012-01-01 04:00:00 | 2403.0 | + +3. Agora, plote os dados chamando `plot()`: + + ```python + energy.plot(y='load', subplots=True, figsize=(15, 8), fontsize=12) + plt.xlabel('timestamp', fontsize=12) + plt.ylabel('load', fontsize=12) + plt.show() + ``` + + ![gráfico de energia](../../../../7-TimeSeries/1-Introduction/images/energy-plot.png) + +4. Agora, plote a primeira semana de julho de 2014, fornecendo-a como entrada para o `energy` no padrão `[de data]:[até data]`: + + ```python + energy['2014-07-01':'2014-07-07'].plot(y='load', subplots=True, figsize=(15, 8), fontsize=12) + plt.xlabel('timestamp', fontsize=12) + plt.ylabel('load', fontsize=12) + plt.show() + ``` + + ![julho](../../../../7-TimeSeries/1-Introduction/images/july-2014.png) + + Um gráfico bonito! Observe esses gráficos e veja se consegue determinar alguma das características listadas acima. O que podemos deduzir ao visualizar os dados? + +Na próxima lição, você criará um modelo ARIMA para gerar algumas previsões. + +--- + +## 🚀Desafio + +Faça uma lista de todas as indústrias e áreas de estudo que você consegue pensar que se beneficiariam da previsão de séries temporais. Você consegue pensar em uma aplicação dessas técnicas nas artes? Em Econometria? Ecologia? Varejo? Indústria? Finanças? Onde mais? + +## [Quiz pós-aula](https://ff-quizzes.netlify.app/en/ml/) + +## Revisão e Autoestudo + +Embora não os abordemos aqui, redes neurais às vezes são usadas para aprimorar métodos clássicos de previsão de séries temporais. Leia mais sobre elas [neste artigo](https://medium.com/microsoftazure/neural-networks-for-forecasting-financial-and-economic-time-series-6aca370ff412) + +## Tarefa + +[Visualize mais séries temporais](assignment.md) + +--- + +**Aviso Legal**: +Este documento foi traduzido utilizando o serviço de tradução por IA [Co-op Translator](https://github.com/Azure/co-op-translator). Embora nos esforcemos para garantir a precisão, esteja ciente de que traduções automatizadas podem conter erros ou imprecisões. O documento original em seu idioma nativo deve ser considerado a fonte autoritativa. Para informações críticas, recomenda-se a tradução profissional realizada por humanos. Não nos responsabilizamos por quaisquer mal-entendidos ou interpretações equivocadas decorrentes do uso desta tradução. \ No newline at end of file diff --git a/translations/pt-BR/7-TimeSeries/1-Introduction/assignment.md b/translations/pt-BR/7-TimeSeries/1-Introduction/assignment.md new file mode 100644 index 000000000..758015106 --- /dev/null +++ b/translations/pt-BR/7-TimeSeries/1-Introduction/assignment.md @@ -0,0 +1,16 @@ +# Visualize algumas séries temporais adicionais + +## Instruções + +Você começou a aprender sobre previsão de séries temporais ao observar o tipo de dados que requerem esse modelo especial. Você já visualizou alguns dados relacionados à energia. Agora, procure outros dados que possam se beneficiar da previsão de séries temporais. Encontre três exemplos (experimente [Kaggle](https://kaggle.com) e [Azure Open Datasets](https://azure.microsoft.com/en-us/services/open-datasets/catalog/?WT.mc_id=academic-77952-leestott)) e crie um notebook para visualizá-los. Anote quaisquer características especiais que eles possuam (sazonalidade, mudanças abruptas ou outras tendências) no notebook. + +## Rubrica + +| Critério | Exemplar | Adequado | Necessita Melhorar | +| -------- | ----------------------------------------------------- | --------------------------------------------------- | --------------------------------------------------------------------------------------- | +| | Três conjuntos de dados são plotados e explicados no notebook | Dois conjuntos de dados são plotados e explicados no notebook | Poucos conjuntos de dados são plotados ou explicados no notebook ou os dados apresentados são insuficientes | + +--- + +**Aviso Legal**: +Este documento foi traduzido utilizando o serviço de tradução por IA [Co-op Translator](https://github.com/Azure/co-op-translator). Embora nos esforcemos para garantir a precisão, esteja ciente de que traduções automatizadas podem conter erros ou imprecisões. O documento original em seu idioma nativo deve ser considerado a fonte autoritativa. Para informações críticas, recomenda-se a tradução profissional realizada por humanos. Não nos responsabilizamos por quaisquer mal-entendidos ou interpretações equivocadas decorrentes do uso desta tradução. \ No newline at end of file diff --git a/translations/pt-BR/7-TimeSeries/1-Introduction/solution/Julia/README.md b/translations/pt-BR/7-TimeSeries/1-Introduction/solution/Julia/README.md new file mode 100644 index 000000000..c58234bae --- /dev/null +++ b/translations/pt-BR/7-TimeSeries/1-Introduction/solution/Julia/README.md @@ -0,0 +1,6 @@ + + +--- + +**Aviso Legal**: +Este documento foi traduzido utilizando o serviço de tradução por IA [Co-op Translator](https://github.com/Azure/co-op-translator). Embora nos esforcemos para garantir a precisão, esteja ciente de que traduções automatizadas podem conter erros ou imprecisões. O documento original em seu idioma nativo deve ser considerado a fonte autoritativa. Para informações críticas, recomenda-se a tradução profissional realizada por humanos. Não nos responsabilizamos por quaisquer mal-entendidos ou interpretações equivocadas decorrentes do uso desta tradução. \ No newline at end of file diff --git a/translations/pt-BR/7-TimeSeries/1-Introduction/solution/R/README.md b/translations/pt-BR/7-TimeSeries/1-Introduction/solution/R/README.md new file mode 100644 index 000000000..c58234bae --- /dev/null +++ b/translations/pt-BR/7-TimeSeries/1-Introduction/solution/R/README.md @@ -0,0 +1,6 @@ + + +--- + +**Aviso Legal**: +Este documento foi traduzido utilizando o serviço de tradução por IA [Co-op Translator](https://github.com/Azure/co-op-translator). Embora nos esforcemos para garantir a precisão, esteja ciente de que traduções automatizadas podem conter erros ou imprecisões. O documento original em seu idioma nativo deve ser considerado a fonte autoritativa. Para informações críticas, recomenda-se a tradução profissional realizada por humanos. Não nos responsabilizamos por quaisquer mal-entendidos ou interpretações equivocadas decorrentes do uso desta tradução. \ No newline at end of file diff --git a/translations/pt-BR/7-TimeSeries/1-Introduction/solution/notebook.ipynb b/translations/pt-BR/7-TimeSeries/1-Introduction/solution/notebook.ipynb new file mode 100644 index 000000000..1a00901a9 --- /dev/null +++ b/translations/pt-BR/7-TimeSeries/1-Introduction/solution/notebook.ipynb @@ -0,0 +1,170 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Configuração de Dados\n", + "\n", + "Neste notebook, demonstramos como:\n", + "- configurar dados de séries temporais para este módulo\n", + "- visualizar os dados\n", + "\n", + "Os dados neste exemplo são retirados da competição de previsão GEFCom2014. Consistem em 3 anos de valores horários de carga elétrica e temperatura entre 2012 e 2014.\n", + "\n", + "Tao Hong, Pierre Pinson, Shu Fan, Hamidreza Zareipour, Alberto Troccoli e Rob J. Hyndman, \"Probabilistic energy forecasting: Global Energy Forecasting Competition 2014 and beyond\", International Journal of Forecasting, vol.32, no.3, pp 896-913, julho-setembro, 2016.\n" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [], + "source": [ + "import os\n", + "import matplotlib.pyplot as plt\n", + "from common.utils import load_data\n", + "%matplotlib inline" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Carregar os dados do csv em um dataframe do Pandas\n" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + " load\n", + "2012-01-01 00:00:00 2698.0\n", + "2012-01-01 01:00:00 2558.0\n", + "2012-01-01 02:00:00 2444.0\n", + "2012-01-01 03:00:00 2402.0\n", + "2012-01-01 04:00:00 2403.0" + ], + "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
load
2012-01-01 00:00:002698.0
2012-01-01 01:00:002558.0
2012-01-01 02:00:002444.0
2012-01-01 03:00:002402.0
2012-01-01 04:00:002403.0
\n
" + }, + "metadata": {}, + "execution_count": 7 + } + ], + "source": [ + "data_dir = './data'\n", + "energy = load_data(data_dir)[['load']]\n", + "energy.head()\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Plote todos os dados de carga disponíveis (janeiro de 2012 a dezembro de 2014)\n" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "output_type": "display_data", + "data": { + "text/plain": "
", + "image/svg+xml": "\n\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n\n", + "image/png": "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\n" + }, + "metadata": { + "needs_background": "light" + } + } + ], + "source": [ + "energy.plot(y='load', subplots=True, figsize=(15, 8), fontsize=12)\n", + "plt.xlabel('timestamp', fontsize=12)\n", + "plt.ylabel('load', fontsize=12)\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "output_type": "display_data", + "data": { + "text/plain": "
", + "image/svg+xml": "\n\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n\n", + "image/png": "iVBORw0KGgoAAAANSUhEUgAAA4kAAAHiCAYAAABFgonlAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjAsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+17YcXAAAgAElEQVR4nOzdeXhb5ZU/8O+r3bYkO7bl3YljZ3dCnJBASCCQFkqBgUDpBrRMZ6YLMJ2l26/TTjtDmelMp09nOtNOaUt31tKFtRToQAkpSUhIiJPY2Z14X+VFkiVL1vL+/pBkjHESL5Ku7r3fz/P4IbF07z1Gsa1z3/OeI6SUICIiIiIiIgIAg9IBEBERERERUfZgkkhEREREREQTmCQSERERERHRBCaJRERERERENIFJIhEREREREU1gkkhEREREREQTTEoHoITi4mJZU1OjdBhERERERESKOHDggFtK6ZruMV0miTU1Ndi/f7/SYRARERERESlCCNF2rsdYbkpEREREREQTmCQSERERERHRBCaJRERERERENEGXexKJiIiIiIgAIBwOo7OzE8FgUOlQ0sJms6Gqqgpms3nGxzBJJCIiIiIi3ers7ITD4UBNTQ2EEEqHk1JSSgwODqKzsxOLFy+e8XEsNyUiIiIiIt0KBoMoKirSXIIIAEIIFBUVzXqVlEkiERERERHpmhYTxKS5fG1MEomIiIiIiBRkt9tTcp57770X3/rWt+Z9HiaJRERERERENIFJIhERERERURaQUuILX/gCVq9ejTVr1uDxxx8HAIyOjuLd73431q9fjzVr1uDpp5+eOObrX/86li1bhssvvxwnTpxISRzsbkpERERERATga88242i3N6XnXFXhxD/fWD+j5z7xxBNobGzEoUOH4Ha7sXHjRmzduhUulwtPPvkknE4n3G43Nm3ahJtuuglvvvkmfvnLX6KxsRGRSATr16/HxRdfPO+YuZJIRERERESUBV577TXcdtttMBqNKC0txZVXXok33ngDUkp8+ctfxkUXXYSrr74aXV1d6Ovrw5/+9CfccsstyM3NhdPpxE033ZSSOLiSSEREREREBMx4xS/THnnkEQwMDODAgQMwm82oqamZ9ViL2eBKIhERERERURa44oor8PjjjyMajWJgYAA7d+7EJZdcAo/Hg5KSEpjNZrzy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\n" + }, + "metadata": { + "needs_background": "light" + } + } + ], + "source": [ + "energy['2014-07-01':'2014-07-07'].plot(y='load', subplots=True, figsize=(15, 8), fontsize=12)\n", + "plt.xlabel('timestamp', fontsize=12)\n", + "plt.ylabel('load', fontsize=12)\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n---\n\n**Aviso Legal**: \nEste documento foi traduzido utilizando o serviço de tradução por IA [Co-op Translator](https://github.com/Azure/co-op-translator). Embora nos esforcemos para garantir a precisão, esteja ciente de que traduções automatizadas podem conter erros ou imprecisões. O documento original em seu idioma nativo deve ser considerado a fonte autoritativa. Para informações críticas, recomenda-se a tradução profissional realizada por humanos. Não nos responsabilizamos por quaisquer mal-entendidos ou interpretações equivocadas decorrentes do uso desta tradução.\n" + ] + } + ], + "metadata": { + "kernel_info": { + "name": "python3" + }, + "kernelspec": { + "name": "python37364bit8d3b438fb5fc4430a93ac2cb74d693a7", + "display_name": "Python 3.7.0 64-bit ('3.7')" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.7.0" + }, + "nteract": { + "version": "nteract-front-end@1.0.0" + }, + "metadata": { + "interpreter": { + "hash": "70b38d7a306a849643e446cd70466270a13445e5987dfa1344ef2b127438fa4d" + } + }, + "coopTranslator": { + "original_hash": "dddca9ad9e34435494e0933c218e1579", + "translation_date": "2025-08-29T23:21:07+00:00", + "source_file": "7-TimeSeries/1-Introduction/solution/notebook.ipynb", + "language_code": "br" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} \ No newline at end of file diff --git a/translations/pt-BR/7-TimeSeries/1-Introduction/working/notebook.ipynb b/translations/pt-BR/7-TimeSeries/1-Introduction/working/notebook.ipynb new file mode 100644 index 000000000..4dc93de59 --- /dev/null +++ b/translations/pt-BR/7-TimeSeries/1-Introduction/working/notebook.ipynb @@ -0,0 +1,63 @@ +{ + "cells": [ + { + "source": [ + "# Configuração de Dados\n", + "\n", + "Neste notebook, demonstramos como:\n", + "\n", + "configurar dados de séries temporais para este módulo \n", + "visualizar os dados \n", + "Os dados neste exemplo foram retirados da competição de previsão GEFCom2014. Eles consistem em 3 anos de valores horários de carga elétrica e temperatura entre 2012 e 2014.\n", + "\n", + "1Tao Hong, Pierre Pinson, Shu Fan, Hamidreza Zareipour, Alberto Troccoli e Rob J. Hyndman, \"Probabilistic energy forecasting: Global Energy Forecasting Competition 2014 and beyond\", International Journal of Forecasting, vol.32, no.3, pp 896-913, julho-setembro, 2016. \n" + ], + "cell_type": "markdown", + "metadata": {} + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n---\n\n**Aviso Legal**: \nEste documento foi traduzido utilizando o serviço de tradução por IA [Co-op Translator](https://github.com/Azure/co-op-translator). Embora nos esforcemos para garantir a precisão, esteja ciente de que traduções automatizadas podem conter erros ou imprecisões. O documento original em seu idioma nativo deve ser considerado a fonte autoritativa. Para informações críticas, recomenda-se a tradução profissional realizada por humanos. Não nos responsabilizamos por quaisquer mal-entendidos ou interpretações equivocadas decorrentes do uso desta tradução.\n" + ] + } + ], + "metadata": { + "kernel_info": { + "name": "python3" + }, + "kernelspec": { + "name": "python37364bit8d3b438fb5fc4430a93ac2cb74d693a7", + "display_name": "Python 3.7.0 64-bit ('3.7')" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.7.0" + }, + "nteract": { + "version": "nteract-front-end@1.0.0" + }, + "metadata": { + "interpreter": { + "hash": "70b38d7a306a849643e446cd70466270a13445e5987dfa1344ef2b127438fa4d" + } + }, + "coopTranslator": { + "original_hash": "5e2bbe594906dce3aaaa736d6dac6683", + "translation_date": "2025-08-29T23:21:43+00:00", + "source_file": "7-TimeSeries/1-Introduction/working/notebook.ipynb", + "language_code": "br" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} \ No newline at end of file diff --git a/translations/pt-BR/7-TimeSeries/2-ARIMA/README.md b/translations/pt-BR/7-TimeSeries/2-ARIMA/README.md new file mode 100644 index 000000000..ce6ddf07f --- /dev/null +++ b/translations/pt-BR/7-TimeSeries/2-ARIMA/README.md @@ -0,0 +1,396 @@ +# Previsão de séries temporais com ARIMA + +Na lição anterior, você aprendeu um pouco sobre previsão de séries temporais e carregou um conjunto de dados mostrando as flutuações de carga elétrica ao longo de um período de tempo. + +[![Introdução ao ARIMA](https://img.youtube.com/vi/IUSk-YDau10/0.jpg)](https://youtu.be/IUSk-YDau10 "Introdução ao ARIMA") + +> 🎥 Clique na imagem acima para assistir a um vídeo: Uma breve introdução aos modelos ARIMA. O exemplo é feito em R, mas os conceitos são universais. + +## [Quiz pré-aula](https://ff-quizzes.netlify.app/en/ml/) + +## Introdução + +Nesta lição, você descobrirá uma maneira específica de construir modelos com [ARIMA: *A*uto*R*egressive *I*ntegrated *M*oving *A*verage](https://wikipedia.org/wiki/Autoregressive_integrated_moving_average). Os modelos ARIMA são particularmente adequados para ajustar dados que apresentam [não-estacionariedade](https://wikipedia.org/wiki/Stationary_process). + +## Conceitos gerais + +Para trabalhar com ARIMA, há alguns conceitos que você precisa conhecer: + +- 🎓 **Estacionariedade**. No contexto estatístico, estacionariedade refere-se a dados cuja distribuição não muda ao serem deslocados no tempo. Dados não estacionários, por sua vez, apresentam flutuações devido a tendências que precisam ser transformadas para serem analisadas. A sazonalidade, por exemplo, pode introduzir flutuações nos dados e pode ser eliminada por meio de um processo de 'diferença sazonal'. + +- 🎓 **[Diferença](https://wikipedia.org/wiki/Autoregressive_integrated_moving_average#Differencing)**. Diferençar dados, novamente no contexto estatístico, refere-se ao processo de transformar dados não estacionários para torná-los estacionários, removendo sua tendência não constante. "A diferença remove as mudanças no nível de uma série temporal, eliminando tendência e sazonalidade e, consequentemente, estabilizando a média da série temporal." [Artigo de Shixiong et al](https://arxiv.org/abs/1904.07632) + +## ARIMA no contexto de séries temporais + +Vamos detalhar as partes do ARIMA para entender melhor como ele nos ajuda a modelar séries temporais e fazer previsões com base nelas. + +- **AR - de AutoRegressivo**. Modelos autoregressivos, como o nome sugere, olham 'para trás' no tempo para analisar valores anteriores em seus dados e fazer suposições sobre eles. Esses valores anteriores são chamados de 'lags'. Um exemplo seria dados que mostram vendas mensais de lápis. O total de vendas de cada mês seria considerado uma 'variável evolutiva' no conjunto de dados. Este modelo é construído como "a variável evolutiva de interesse é regredida em seus próprios valores defasados (ou seja, anteriores)." [wikipedia](https://wikipedia.org/wiki/Autoregressive_integrated_moving_average) + +- **I - de Integrado**. Diferentemente dos modelos semelhantes 'ARMA', o 'I' no ARIMA refere-se ao seu aspecto *[integrado](https://wikipedia.org/wiki/Order_of_integration)*. Os dados são 'integrados' quando etapas de diferenciação são aplicadas para eliminar a não-estacionariedade. + +- **MA - de Média Móvel**. O aspecto de [média móvel](https://wikipedia.org/wiki/Moving-average_model) deste modelo refere-se à variável de saída que é determinada observando os valores atuais e passados dos lags. + +Resumindo: ARIMA é usado para ajustar um modelo ao formato especial de dados de séries temporais da forma mais precisa possível. + +## Exercício - construir um modelo ARIMA + +Abra a pasta [_/working_](https://github.com/microsoft/ML-For-Beginners/tree/main/7-TimeSeries/2-ARIMA/working) nesta lição e encontre o arquivo [_notebook.ipynb_](https://github.com/microsoft/ML-For-Beginners/blob/main/7-TimeSeries/2-ARIMA/working/notebook.ipynb). + +1. Execute o notebook para carregar a biblioteca Python `statsmodels`; você precisará dela para modelos ARIMA. + +1. Carregue as bibliotecas necessárias. + +1. Agora, carregue várias outras bibliotecas úteis para plotar dados: + + ```python + import os + import warnings + import matplotlib.pyplot as plt + import numpy as np + import pandas as pd + import datetime as dt + import math + + from pandas.plotting import autocorrelation_plot + from statsmodels.tsa.statespace.sarimax import SARIMAX + from sklearn.preprocessing import MinMaxScaler + from common.utils import load_data, mape + from IPython.display import Image + + %matplotlib inline + pd.options.display.float_format = '{:,.2f}'.format + np.set_printoptions(precision=2) + warnings.filterwarnings("ignore") # specify to ignore warning messages + ``` + +1. Carregue os dados do arquivo `/data/energy.csv` em um dataframe do Pandas e dê uma olhada: + + ```python + energy = load_data('./data')[['load']] + energy.head(10) + ``` + +1. Plote todos os dados de energia disponíveis de janeiro de 2012 a dezembro de 2014. Não deve haver surpresas, pois vimos esses dados na última lição: + + ```python + energy.plot(y='load', subplots=True, figsize=(15, 8), fontsize=12) + plt.xlabel('timestamp', fontsize=12) + plt.ylabel('load', fontsize=12) + plt.show() + ``` + + Agora, vamos construir um modelo! + +### Criar conjuntos de dados de treinamento e teste + +Agora que seus dados estão carregados, você pode separá-los em conjuntos de treinamento e teste. Você treinará seu modelo no conjunto de treinamento. Como de costume, após o modelo terminar o treinamento, você avaliará sua precisão usando o conjunto de teste. Você precisa garantir que o conjunto de teste cubra um período posterior ao conjunto de treinamento para garantir que o modelo não obtenha informações de períodos futuros. + +1. Aloque um período de dois meses de 1º de setembro a 31 de outubro de 2014 para o conjunto de treinamento. O conjunto de teste incluirá o período de dois meses de 1º de novembro a 31 de dezembro de 2014: + + ```python + train_start_dt = '2014-11-01 00:00:00' + test_start_dt = '2014-12-30 00:00:00' + ``` + + Como esses dados refletem o consumo diário de energia, há um forte padrão sazonal, mas o consumo é mais semelhante ao consumo em dias mais recentes. + +1. Visualize as diferenças: + + ```python + energy[(energy.index < test_start_dt) & (energy.index >= train_start_dt)][['load']].rename(columns={'load':'train'}) \ + .join(energy[test_start_dt:][['load']].rename(columns={'load':'test'}), how='outer') \ + .plot(y=['train', 'test'], figsize=(15, 8), fontsize=12) + plt.xlabel('timestamp', fontsize=12) + plt.ylabel('load', fontsize=12) + plt.show() + ``` + + ![dados de treinamento e teste](../../../../7-TimeSeries/2-ARIMA/images/train-test.png) + + Portanto, usar uma janela de tempo relativamente pequena para treinar os dados deve ser suficiente. + + > Nota: Como a função que usamos para ajustar o modelo ARIMA utiliza validação dentro da amostra durante o ajuste, omitiremos os dados de validação. + +### Preparar os dados para treinamento + +Agora, você precisa preparar os dados para treinamento realizando filtragem e escalonamento dos dados. Filtre seu conjunto de dados para incluir apenas os períodos de tempo e colunas necessários e escale para garantir que os dados sejam projetados no intervalo 0,1. + +1. Filtre o conjunto de dados original para incluir apenas os períodos de tempo mencionados por conjunto e apenas a coluna necessária 'load' mais a data: + + ```python + train = energy.copy()[(energy.index >= train_start_dt) & (energy.index < test_start_dt)][['load']] + test = energy.copy()[energy.index >= test_start_dt][['load']] + + print('Training data shape: ', train.shape) + print('Test data shape: ', test.shape) + ``` + + Você pode ver a forma dos dados: + + ```output + Training data shape: (1416, 1) + Test data shape: (48, 1) + ``` + +1. Escale os dados para estar no intervalo (0, 1). + + ```python + scaler = MinMaxScaler() + train['load'] = scaler.fit_transform(train) + train.head(10) + ``` + +1. Visualize os dados originais vs. escalonados: + + ```python + energy[(energy.index >= train_start_dt) & (energy.index < test_start_dt)][['load']].rename(columns={'load':'original load'}).plot.hist(bins=100, fontsize=12) + train.rename(columns={'load':'scaled load'}).plot.hist(bins=100, fontsize=12) + plt.show() + ``` + + ![original](../../../../7-TimeSeries/2-ARIMA/images/original.png) + + > Os dados originais + + ![escalonados](../../../../7-TimeSeries/2-ARIMA/images/scaled.png) + + > Os dados escalonados + +1. Agora que você calibrou os dados escalonados, pode escalar os dados de teste: + + ```python + test['load'] = scaler.transform(test) + test.head() + ``` + +### Implementar ARIMA + +É hora de implementar o ARIMA! Agora você usará a biblioteca `statsmodels` que instalou anteriormente. + +Agora você precisa seguir várias etapas: + + 1. Defina o modelo chamando `SARIMAX()` e passando os parâmetros do modelo: parâmetros p, d e q, e parâmetros P, D e Q. + 2. Prepare o modelo para os dados de treinamento chamando a função `fit()`. + 3. Faça previsões chamando a função `forecast()` e especificando o número de passos (o `horizon`) para prever. + +> 🎓 Para que servem todos esses parâmetros? Em um modelo ARIMA, há 3 parâmetros usados para ajudar a modelar os principais aspectos de uma série temporal: sazonalidade, tendência e ruído. Esses parâmetros são: + +`p`: o parâmetro associado ao aspecto autoregressivo do modelo, que incorpora valores *passados*. +`d`: o parâmetro associado à parte integrada do modelo, que afeta a quantidade de *diferença* (🎓 lembre-se de diferença 👆?) a ser aplicada a uma série temporal. +`q`: o parâmetro associado à parte de média móvel do modelo. + +> Nota: Se seus dados tiverem um aspecto sazonal - como este -, usamos um modelo ARIMA sazonal (SARIMA). Nesse caso, você precisa usar outro conjunto de parâmetros: `P`, `D` e `Q`, que descrevem as mesmas associações que `p`, `d` e `q`, mas correspondem aos componentes sazonais do modelo. + +1. Comece definindo seu valor de horizonte preferido. Vamos tentar 3 horas: + + ```python + # Specify the number of steps to forecast ahead + HORIZON = 3 + print('Forecasting horizon:', HORIZON, 'hours') + ``` + + Selecionar os melhores valores para os parâmetros de um modelo ARIMA pode ser desafiador, pois é um pouco subjetivo e demorado. Você pode considerar usar uma função `auto_arima()` da biblioteca [`pyramid`](https://alkaline-ml.com/pmdarima/0.9.0/modules/generated/pyramid.arima.auto_arima.html). + +1. Por enquanto, tente algumas seleções manuais para encontrar um bom modelo. + + ```python + order = (4, 1, 0) + seasonal_order = (1, 1, 0, 24) + + model = SARIMAX(endog=train, order=order, seasonal_order=seasonal_order) + results = model.fit() + + print(results.summary()) + ``` + + Uma tabela de resultados é impressa. + +Você construiu seu primeiro modelo! Agora precisamos encontrar uma maneira de avaliá-lo. + +### Avaliar seu modelo + +Para avaliar seu modelo, você pode realizar a chamada validação `walk forward`. Na prática, modelos de séries temporais são re-treinados cada vez que novos dados ficam disponíveis. Isso permite que o modelo faça a melhor previsão em cada etapa de tempo. + +Começando no início da série temporal usando esta técnica, treine o modelo no conjunto de dados de treinamento. Em seguida, faça uma previsão para o próximo passo de tempo. A previsão é avaliada em relação ao valor conhecido. O conjunto de treinamento é então expandido para incluir o valor conhecido e o processo é repetido. + +> Nota: Você deve manter a janela do conjunto de treinamento fixa para um treinamento mais eficiente, de modo que toda vez que adicionar uma nova observação ao conjunto de treinamento, remova a observação do início do conjunto. + +Este processo fornece uma estimativa mais robusta de como o modelo se comportará na prática. No entanto, isso tem o custo computacional de criar tantos modelos. Isso é aceitável se os dados forem pequenos ou se o modelo for simples, mas pode ser um problema em escala. + +A validação walk-forward é o padrão ouro para avaliação de modelos de séries temporais e é recomendada para seus próprios projetos. + +1. Primeiro, crie um ponto de dados de teste para cada passo do HORIZON. + + ```python + test_shifted = test.copy() + + for t in range(1, HORIZON+1): + test_shifted['load+'+str(t)] = test_shifted['load'].shift(-t, freq='H') + + test_shifted = test_shifted.dropna(how='any') + test_shifted.head(5) + ``` + + | | | load | load+1 | load+2 | + | ---------- | -------- | ---- | ------ | ------ | + | 2014-12-30 | 00:00:00 | 0.33 | 0.29 | 0.27 | + | 2014-12-30 | 01:00:00 | 0.29 | 0.27 | 0.27 | + | 2014-12-30 | 02:00:00 | 0.27 | 0.27 | 0.30 | + | 2014-12-30 | 03:00:00 | 0.27 | 0.30 | 0.41 | + | 2014-12-30 | 04:00:00 | 0.30 | 0.41 | 0.57 | + + Os dados são deslocados horizontalmente de acordo com seu ponto de horizonte. + +1. Faça previsões em seus dados de teste usando esta abordagem de janela deslizante em um loop do tamanho do comprimento dos dados de teste: + + ```python + %%time + training_window = 720 # dedicate 30 days (720 hours) for training + + train_ts = train['load'] + test_ts = test_shifted + + history = [x for x in train_ts] + history = history[(-training_window):] + + predictions = list() + + order = (2, 1, 0) + seasonal_order = (1, 1, 0, 24) + + for t in range(test_ts.shape[0]): + model = SARIMAX(endog=history, order=order, seasonal_order=seasonal_order) + model_fit = model.fit() + yhat = model_fit.forecast(steps = HORIZON) + predictions.append(yhat) + obs = list(test_ts.iloc[t]) + # move the training window + history.append(obs[0]) + history.pop(0) + print(test_ts.index[t]) + print(t+1, ': predicted =', yhat, 'expected =', obs) + ``` + + Você pode observar o treinamento ocorrendo: + + ```output + 2014-12-30 00:00:00 + 1 : predicted = [0.32 0.29 0.28] expected = [0.32945389435989236, 0.2900626678603402, 0.2739480752014323] + + 2014-12-30 01:00:00 + 2 : predicted = [0.3 0.29 0.3 ] expected = [0.2900626678603402, 0.2739480752014323, 0.26812891674127126] + + 2014-12-30 02:00:00 + 3 : predicted = [0.27 0.28 0.32] expected = [0.2739480752014323, 0.26812891674127126, 0.3025962399283795] + ``` + +1. Compare as previsões com a carga real: + + ```python + eval_df = pd.DataFrame(predictions, columns=['t+'+str(t) for t in range(1, HORIZON+1)]) + eval_df['timestamp'] = test.index[0:len(test.index)-HORIZON+1] + eval_df = pd.melt(eval_df, id_vars='timestamp', value_name='prediction', var_name='h') + eval_df['actual'] = np.array(np.transpose(test_ts)).ravel() + eval_df[['prediction', 'actual']] = scaler.inverse_transform(eval_df[['prediction', 'actual']]) + eval_df.head() + ``` + + Saída + | | | timestamp | h | prediction | actual | + | --- | ---------- | --------- | --- | ---------- | -------- | + | 0 | 2014-12-30 | 00:00:00 | t+1 | 3,008.74 | 3,023.00 | + | 1 | 2014-12-30 | 01:00:00 | t+1 | 2,955.53 | 2,935.00 | + | 2 | 2014-12-30 | 02:00:00 | t+1 | 2,900.17 | 2,899.00 | + | 3 | 2014-12-30 | 03:00:00 | t+1 | 2,917.69 | 2,886.00 | + | 4 | 2014-12-30 | 04:00:00 | t+1 | 2,946.99 | 2,963.00 | + + Observe a previsão dos dados horários, comparada à carga real. Quão precisa é essa previsão? + +### Verificar a precisão do modelo + +Verifique a precisão do seu modelo testando seu erro percentual absoluto médio (MAPE) em todas as previsões. +> **🧮 Mostre-me a matemática** +> +> ![MAPE](../../../../7-TimeSeries/2-ARIMA/images/mape.png) +> +> [MAPE](https://www.linkedin.com/pulse/what-mape-mad-msd-time-series-allameh-statistics/) é usado para mostrar a precisão da previsão como uma razão definida pela fórmula acima. A diferença entre o valor real e o previsto é dividida pelo valor real. "O valor absoluto nesta fórmula é somado para cada ponto previsto no tempo e dividido pelo número de pontos ajustados n." [wikipedia](https://wikipedia.org/wiki/Mean_absolute_percentage_error) +1. Expressar a equação em código: + + ```python + if(HORIZON > 1): + eval_df['APE'] = (eval_df['prediction'] - eval_df['actual']).abs() / eval_df['actual'] + print(eval_df.groupby('h')['APE'].mean()) + ``` + +1. Calcular o MAPE de um passo: + + ```python + print('One step forecast MAPE: ', (mape(eval_df[eval_df['h'] == 't+1']['prediction'], eval_df[eval_df['h'] == 't+1']['actual']))*100, '%') + ``` + + MAPE da previsão de um passo: 0.5570581332313952 % + +1. Imprimir o MAPE da previsão de múltiplos passos: + + ```python + print('Multi-step forecast MAPE: ', mape(eval_df['prediction'], eval_df['actual'])*100, '%') + ``` + + ```output + Multi-step forecast MAPE: 1.1460048657704118 % + ``` + + Um número baixo é o ideal: considere que uma previsão com um MAPE de 10 está errada em 10%. + +1. Mas, como sempre, é mais fácil visualizar esse tipo de medida de precisão, então vamos plotar: + + ```python + if(HORIZON == 1): + ## Plotting single step forecast + eval_df.plot(x='timestamp', y=['actual', 'prediction'], style=['r', 'b'], figsize=(15, 8)) + + else: + ## Plotting multi step forecast + plot_df = eval_df[(eval_df.h=='t+1')][['timestamp', 'actual']] + for t in range(1, HORIZON+1): + plot_df['t+'+str(t)] = eval_df[(eval_df.h=='t+'+str(t))]['prediction'].values + + fig = plt.figure(figsize=(15, 8)) + ax = plt.plot(plot_df['timestamp'], plot_df['actual'], color='red', linewidth=4.0) + ax = fig.add_subplot(111) + for t in range(1, HORIZON+1): + x = plot_df['timestamp'][(t-1):] + y = plot_df['t+'+str(t)][0:len(x)] + ax.plot(x, y, color='blue', linewidth=4*math.pow(.9,t), alpha=math.pow(0.8,t)) + + ax.legend(loc='best') + + plt.xlabel('timestamp', fontsize=12) + plt.ylabel('load', fontsize=12) + plt.show() + ``` + + ![um modelo de série temporal](../../../../7-TimeSeries/2-ARIMA/images/accuracy.png) + +🏆 Um gráfico muito bom, mostrando um modelo com ótima precisão. Parabéns! + +--- + +## 🚀Desafio + +Explore as formas de testar a precisão de um modelo de série temporal. Tocamos no MAPE nesta lição, mas existem outros métodos que você poderia usar? Pesquise sobre eles e faça anotações. Um documento útil pode ser encontrado [aqui](https://otexts.com/fpp2/accuracy.html) + +## [Quiz pós-aula](https://ff-quizzes.netlify.app/en/ml/) + +## Revisão & Estudo Autônomo + +Esta lição aborda apenas os fundamentos de Previsão de Séries Temporais com ARIMA. Reserve um tempo para aprofundar seu conhecimento explorando [este repositório](https://microsoft.github.io/forecasting/) e seus diversos tipos de modelos para aprender outras formas de construir modelos de séries temporais. + +## Tarefa + +[Um novo modelo ARIMA](assignment.md) + +--- + +**Aviso Legal**: +Este documento foi traduzido utilizando o serviço de tradução por IA [Co-op Translator](https://github.com/Azure/co-op-translator). Embora nos esforcemos para garantir a precisão, esteja ciente de que traduções automatizadas podem conter erros ou imprecisões. O documento original em seu idioma nativo deve ser considerado a fonte autoritativa. Para informações críticas, recomenda-se a tradução profissional realizada por humanos. Não nos responsabilizamos por quaisquer mal-entendidos ou interpretações equivocadas decorrentes do uso desta tradução. \ No newline at end of file diff --git a/translations/pt-BR/7-TimeSeries/2-ARIMA/assignment.md b/translations/pt-BR/7-TimeSeries/2-ARIMA/assignment.md new file mode 100644 index 000000000..3279f9e29 --- /dev/null +++ b/translations/pt-BR/7-TimeSeries/2-ARIMA/assignment.md @@ -0,0 +1,16 @@ +# Um novo modelo ARIMA + +## Instruções + +Agora que você construiu um modelo ARIMA, crie um novo com dados frescos (experimente um destes [conjuntos de dados da Duke](http://www2.stat.duke.edu/~mw/ts_data_sets.html)). Anote seu trabalho em um notebook, visualize os dados e seu modelo, e teste sua precisão usando MAPE. + +## Rubrica + +| Critério | Exemplar | Adequado | Precisa Melhorar | +| --------- | ------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------- | ----------------------------------- | +| | Um notebook é apresentado com um novo modelo ARIMA construído, testado e explicado com visualizações e precisão declarada. | O notebook apresentado não está anotado ou contém erros | Um notebook incompleto é apresentado | + +--- + +**Aviso Legal**: +Este documento foi traduzido utilizando o serviço de tradução por IA [Co-op Translator](https://github.com/Azure/co-op-translator). Embora nos esforcemos para garantir a precisão, esteja ciente de que traduções automáticas podem conter erros ou imprecisões. O documento original em seu idioma nativo deve ser considerado a fonte oficial. Para informações críticas, recomenda-se a tradução profissional feita por humanos. Não nos responsabilizamos por quaisquer mal-entendidos ou interpretações equivocadas decorrentes do uso desta tradução. \ No newline at end of file diff --git a/translations/pt-BR/7-TimeSeries/2-ARIMA/solution/Julia/README.md b/translations/pt-BR/7-TimeSeries/2-ARIMA/solution/Julia/README.md new file mode 100644 index 000000000..c58234bae --- /dev/null +++ b/translations/pt-BR/7-TimeSeries/2-ARIMA/solution/Julia/README.md @@ -0,0 +1,6 @@ + + +--- + +**Aviso Legal**: +Este documento foi traduzido utilizando o serviço de tradução por IA [Co-op Translator](https://github.com/Azure/co-op-translator). Embora nos esforcemos para garantir a precisão, esteja ciente de que traduções automatizadas podem conter erros ou imprecisões. O documento original em seu idioma nativo deve ser considerado a fonte autoritativa. Para informações críticas, recomenda-se a tradução profissional realizada por humanos. Não nos responsabilizamos por quaisquer mal-entendidos ou interpretações equivocadas decorrentes do uso desta tradução. \ No newline at end of file diff --git a/translations/pt-BR/7-TimeSeries/2-ARIMA/solution/R/README.md b/translations/pt-BR/7-TimeSeries/2-ARIMA/solution/R/README.md new file mode 100644 index 000000000..c58234bae --- /dev/null +++ b/translations/pt-BR/7-TimeSeries/2-ARIMA/solution/R/README.md @@ -0,0 +1,6 @@ + + +--- + +**Aviso Legal**: +Este documento foi traduzido utilizando o serviço de tradução por IA [Co-op Translator](https://github.com/Azure/co-op-translator). Embora nos esforcemos para garantir a precisão, esteja ciente de que traduções automatizadas podem conter erros ou imprecisões. O documento original em seu idioma nativo deve ser considerado a fonte autoritativa. Para informações críticas, recomenda-se a tradução profissional realizada por humanos. Não nos responsabilizamos por quaisquer mal-entendidos ou interpretações equivocadas decorrentes do uso desta tradução. \ No newline at end of file diff --git a/translations/pt-BR/7-TimeSeries/2-ARIMA/solution/notebook.ipynb b/translations/pt-BR/7-TimeSeries/2-ARIMA/solution/notebook.ipynb new file mode 100644 index 000000000..d11f7e5f2 --- /dev/null +++ b/translations/pt-BR/7-TimeSeries/2-ARIMA/solution/notebook.ipynb @@ -0,0 +1,1125 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "source": [ + "# Previsão de séries temporais com ARIMA\n", + "\n", + "Neste notebook, demonstramos como:\n", + "- preparar dados de séries temporais para treinar um modelo de previsão de séries temporais ARIMA\n", + "- implementar um modelo ARIMA simples para prever os próximos passos do HORIZON (tempo *t+1* até *t+HORIZON*) na série temporal\n", + "- avaliar o modelo\n", + "\n", + "Os dados neste exemplo são retirados da competição de previsão GEFCom2014. Consistem em 3 anos de valores horários de carga elétrica e temperatura entre 2012 e 2014. A tarefa é prever valores futuros da carga elétrica. Neste exemplo, mostramos como prever um passo no tempo à frente, usando apenas dados históricos de carga.\n", + "\n", + "Tao Hong, Pierre Pinson, Shu Fan, Hamidreza Zareipour, Alberto Troccoli e Rob J. Hyndman, \"Probabilistic energy forecasting: Global Energy Forecasting Competition 2014 and beyond\", International Journal of Forecasting, vol.32, no.3, pp 896-913, julho-setembro, 2016.\n" + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "## Instalar Dependências\n", + "Comece instalando algumas das dependências necessárias. Essas bibliotecas, com suas respectivas versões, são conhecidas por funcionar com a solução:\n", + "\n", + "* `statsmodels == 0.12.2`\n", + "* `matplotlib == 3.4.2`\n", + "* `scikit-learn == 0.24.2`\n" + ], + "metadata": {} + }, + { + "cell_type": "code", + "execution_count": 16, + "source": [ + "!pip install statsmodels" + ], + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "/bin/sh: pip: command not found\n" + ] + } + ], + "metadata": {} + }, + { + "cell_type": "code", + "execution_count": 17, + "source": [ + "import os\n", + "import warnings\n", + "import matplotlib.pyplot as plt\n", + "import numpy as np\n", + "import pandas as pd\n", + "import datetime as dt\n", + "import math\n", + "\n", + "from pandas.plotting import autocorrelation_plot\n", + "from statsmodels.tsa.statespace.sarimax import SARIMAX\n", + "from sklearn.preprocessing import MinMaxScaler\n", + "from common.utils import load_data, mape\n", + "from IPython.display import Image\n", + "\n", + "%matplotlib inline\n", + "pd.options.display.float_format = '{:,.2f}'.format\n", + "np.set_printoptions(precision=2)\n", + "warnings.filterwarnings(\"ignore\") # specify to ignore warning messages\n" + ], + "outputs": [], + "metadata": {} + }, + { + "cell_type": "code", + "execution_count": 18, + "source": [ + "energy = load_data('./data')[['load']]\n", + "energy.head(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", + "
load
2012-01-01 00:00:002,698.00
2012-01-01 01:00:002,558.00
2012-01-01 02:00:002,444.00
2012-01-01 03:00:002,402.00
2012-01-01 04:00:002,403.00
2012-01-01 05:00:002,453.00
2012-01-01 06:00:002,560.00
2012-01-01 07:00:002,719.00
2012-01-01 08:00:002,916.00
2012-01-01 09:00:003,105.00
\n", + "
" + ], + "text/plain": [ + " load\n", + "2012-01-01 00:00:00 2,698.00\n", + "2012-01-01 01:00:00 2,558.00\n", + "2012-01-01 02:00:00 2,444.00\n", + "2012-01-01 03:00:00 2,402.00\n", + "2012-01-01 04:00:00 2,403.00\n", + "2012-01-01 05:00:00 2,453.00\n", + "2012-01-01 06:00:00 2,560.00\n", + "2012-01-01 07:00:00 2,719.00\n", + "2012-01-01 08:00:00 2,916.00\n", + "2012-01-01 09:00:00 3,105.00" + ] + }, + "metadata": {}, + "execution_count": 18 + } + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "Plote todos os dados de carga disponíveis (janeiro de 2012 a dezembro de 2014)\n" + ], + "metadata": {} + }, + { + "cell_type": "code", + "execution_count": 19, + "source": [ + "energy.plot(y='load', subplots=True, figsize=(15, 8), fontsize=12)\n", + "plt.xlabel('timestamp', fontsize=12)\n", + "plt.ylabel('load', fontsize=12)\n", + "plt.show()" + ], + "outputs": [ + { + "output_type": "display_data", + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + } + } + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "## Criar conjuntos de dados de treinamento e teste\n", + "\n", + "### Dividir os dados em treinamento e teste\n", + "\n", + "Para treinar e avaliar um modelo de aprendizado de máquina, é importante dividir os dados em dois conjuntos: um para treinamento e outro para teste. Isso ajuda a garantir que o modelo seja avaliado em dados que ele não viu durante o treinamento.\n", + "\n", + "### Escolher a proporção de divisão\n", + "\n", + "A proporção de divisão entre os conjuntos de treinamento e teste pode variar dependendo do tamanho do conjunto de dados e do problema específico. Uma divisão comum é 80% para treinamento e 20% para teste, mas outras proporções, como 70/30 ou 90/10, também podem ser usadas.\n", + "\n", + "### Garantir aleatoriedade na divisão\n", + "\n", + "Certifique-se de que os dados sejam divididos de forma aleatória para evitar viés. Isso pode ser feito usando funções como @@INLINE_CODE_1@@ ou bibliotecas como @@INLINE_CODE_2@@.\n", + "\n", + "### Manter a consistência\n", + "\n", + "Se você estiver trabalhando com múltiplos experimentos ou comparando diferentes modelos, é importante usar a mesma divisão de dados para garantir consistência nos resultados.\n", + "\n", + "### Validar os conjuntos de dados\n", + "\n", + "Depois de dividir os dados, verifique se os conjuntos de treinamento e teste representam bem o problema. Por exemplo, certifique-se de que ambos os conjuntos contenham uma distribuição semelhante de classes, se estiver lidando com um problema de classificação.\n", + "\n", + "### Exemplo de código\n", + "\n", + "Aqui está um exemplo de como dividir os dados usando @@INLINE_CODE_3@@:\n", + "\n", + "@@CODE_BLOCK_1@@\n", + "\n", + "### Considerações finais\n", + "\n", + "Dividir os dados corretamente é um passo crucial no processo de aprendizado de máquina. Uma divisão mal feita pode levar a resultados enganosos e prejudicar a performance do modelo.\n" + ], + "metadata": {} + }, + { + "cell_type": "code", + "execution_count": 20, + "source": [ + "train_start_dt = '2014-11-01 00:00:00'\n", + "test_start_dt = '2014-12-30 00:00:00' " + ], + "outputs": [], + "metadata": {} + }, + { + "cell_type": "code", + "execution_count": 21, + "source": [ + "energy[(energy.index < test_start_dt) & (energy.index >= train_start_dt)][['load']].rename(columns={'load':'train'}) \\\n", + " .join(energy[test_start_dt:][['load']].rename(columns={'load':'test'}), how='outer') \\\n", + " .plot(y=['train', 'test'], figsize=(15, 8), fontsize=12)\n", + "plt.xlabel('timestamp', fontsize=12)\n", + "plt.ylabel('load', fontsize=12)\n", + "plt.show()" + ], + "outputs": [ + { + "output_type": "display_data", + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAA4kAAAITCAYAAACqpFnEAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjAsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+17YcXAAAgAElEQVR4nOy9e5wtV1Xv+5tVtR792u8kEoMkIGAUJEjwwEE9IHh5eHzCiYr40XPPJSjnw8XrkQN6RRHPOXJ8AKLyFHzw1vBSQQnEhMBNQtgJeZNkJ+wk+5Gd/eze/V6rqub9Y9aomlVdtXqO2btXr+4e388nn97pXnNVrVr1mGOO3/gNpbWGIAiCIAiCIAiCIABAsNE7IAiCIAiCIAiCIIwOEiQKgiAIgiAIgiAIORIkCoIgCIIgCIIgCDkSJAqCIAiCIAiCIAg5EiQKgiAIgiAIgiAIORIkCoIgCIIgCIIgCDnRRu/ARrBv3z598cUXb/RuCIIgCIIgCIIgbAi33HLLSa31eXV/25ZB4sUXX4z9+/dv9G4IgiAIgiAIgiBsCEqph5v+JnJTQRAEQRAEQRAEIUeCREEQBEEQBEEQBCFHgkRBEARBEARBEAQhZ1vWJAqCIAiCIAiCsL3p9/s4fPgwlpaWNnpX1pVut4uLLroIrVbLeYwEiYIgCIIgCIIgbDsOHz6MqakpXHzxxVBKbfTurAtaa5w6dQqHDx/GJZdc4jxO5KaCIAiCIAiCIGw7lpaWsHfv3i0bIAKAUgp79+5lZ0slSBQEQRAEQRAEYVuylQNEwuczSpAoCIIgCIIgCIIwZKanp/Hud7+bPe5lL3sZpqen12GPCiRIFARBEARBEARBGDJNQWIcxwPHfeELX8CuXbvWa7cAiHGNIAiCIAiCIAjC0HnTm96EBx98EJdddhlarRa63S52796Ne++9F/fffz9++qd/GocOHcLS0hJe//rX48orrwQAXHzxxdi/fz/m5ubw0pe+FD/0Qz+EG264Ad/5nd+Jz33ucxgbG1vzvkmQKAiCIAiCIAjCtub3/+lu3HP07Dl9z++9cAd+7ye+r/Hvb3vb23DXXXfhtttuw3XXXYcf//Efx1133ZW7kH7oQx/Cnj17sLi4iGc/+9l4+ctfjr1795be48CBA/j4xz+OD3zgA7jiiivwqU99Cq961avWvO8SJAqCIAiCIAiCIGwwP/iDP1hqU/Gud70Ln/nMZwAAhw4dwoEDB1YEiZdccgkuu+wyAMCznvUsPPTQQ+dkXyRIFARBEARBEARhWzMo4zcsJiYm8n9fd911+PKXv4wbb7wR4+PjeP7zn1/bxqLT6eT/DsMQi4uL52RfxLhGEARBEARBEARhyExNTWF2drb2bzMzM9i9ezfGx8dx77334qabbhrqvkkmURAEQRAEQRAEYcjs3bsXz3ve8/C0pz0NY2NjuOCCC/K/veQlL8F73/teXHrppXjqU5+K5zznOUPdN6W1HuoGR4HLL79c79+/f6N3QxAEQRAEQRCEDeJb3/oWLr300o3ejaFQ91mVUrdorS+ve73ITQVBEARBEARBEIQcCRIFQRAEQdi2/Je/+Qae/pYvbvRuCIIgjBRDDxKVUk9WSi0ppT6S/f/zlVKpUmrO+u+XrdfvUUp9Rik1r5R6WCn1ysr7vTL7/bxS6rNKqT3D/kyCIAiCIGxOrrn3OGaX4o3eDUEQhJFiIzKJfwngG5XfHdVaT1r//W3l9T0AFwD4RQDvUUp9HwBkP98H4Jeyvy8AePd6fwBBEARBELYW29GjQRAEoYmhBolKqZ8HMA3gGsfXTwB4OYA3a63ntNZfA/CPMEEhYILGf9JaX6+1ngPwZgA/q5SaOvd7LwiCIAjCVmWpn270LgiCIIwMQwsSlVI7ALwVwG/U/Pl8pdRjSqmDSql3ZMEhADwFQKy1vt967e0AqNvl92X/DwDQWj8Ik3V8Ss32r1RK7VdK7T9x4sQ5+ESCIAiCIGwVphd7G70LgiAII8MwM4l/AOCDWuvDld/fC+AyAI8D8KMAngXg7dnfJgGcrbx+BsCU9feZAX/P0Vq/X2t9udb68vPOO8/7QwiCIAiCsPU4M9/f6F0QBGGbMT09jXe/269S7p3vfCcWFhbO8R4VDCVIVEpdBuBFAN5R/ZvW+pjW+h6tdaq1Pgjgv8NITAFgDsCOypAdAGYd/y4IgiAIgrAqkkkUBGHYjHKQGK3bO5d5PoCLATyilAJMBjBUSn2v1voHKq/VKILX+wFESqkna60PZL97BoC7s3/fnf0/AEAp9UQAnWycIAiCIAjCQAIFpBqYWZBMoiAIw+VNb3oTHnzwQVx22WX4sR/7MZx//vn4+7//eywvL+NnfuZn8Pu///uYn5/HFVdcgcOHDyNJErz5zW/GY489hqNHj+IFL3gB9u3bh2uvvfac79uwgsT3A/iE9f+/CRM0/ppS6gUAvg3gEQAXAXgbgM8BgNZ6Xin1aQBvVUr9XzCy1J8C8O+z9/kogBuVUj8M4FaYmsdPa60lkygIgiAIwqpMtCPMLseYXpQgURC2Nf/yJuDYnef2Pb/j6cBL39b457e97W246667cNttt+Hqq6/GVVddhZtvvhlaa/zkT/4krr/+epw4cQIXXnghPv/5zwMAZmZmsHPnTrz97W/Htddei3379p3bfc4YitxUa72QyUqPaa2PwchEl7TWJwA8E8ANAOazn3cC+L+t4a8FMAbgOICPA/g1rfXd2fveDeBXYYLF4zC1iK8dxmcSBEEQBGHzE4UKALDUTzZ4TwRB2M5cffXVuPrqq/HMZz4TP/ADP4B7770XBw4cwNOf/nR86Utfwhvf+EZ89atfxc6dO4eyP8PKJJbQWr/F+vfbURjV1L32NICfHvD3jwH42LncP0EQBEEQtgdZGQx6sbTAEIRtzYCM3zDQWuO3fuu38JrXvGbF32699VZ84QtfwO/8zu/ghS98IX73d3933fdnqH0SBUEQBEEQRonAxIhYliBREIQhMzU1hdlZUyX34he/GB/60IcwNzcHADhy5AiOHz+Oo0ePYnx8HK961avwhje8AbfeeuuKsevBhmQSBUEQBEEQRoFUm5+SSRQEYdjs3bsXz3ve8/C0pz0NL33pS/HKV74Sz33ucwEAk5OT+MhHPoIHHngAb3jDGxAEAVqtFt7znvcAAK688kq85CUvwYUXXripjWsEQRAEQRBGjn5igsNeIkGiIAjD52MfK1fNvf71ry/9/5Oe9CS8+MUvXjHuda97HV73utet236J3FQQBEEQhG1LHiRKJlEQBCFHgkRBEARBELYtcWL0plKTKAiCUCBBoiAIgiAI2xKtNeKsKFEyiYIgCAUSJAqCIAiCsC3pZ1lEAFiOpU+iIGxHtNarv2iT4/MZJUgUBEEQBGFb0rfMaiSTKAjbj263i1OnTm3pQFFrjVOnTqHb7bLGibupIAiCIAjbktjKJIq7qSBsPy666CIcPnwYJ06c2Ohd4bF0FujPA1OPc3p5t9vFRRddxNqEBImCIAiCIGxL+qlkEgVhO9NqtXDJJZds9G7wectO8/P3pgGl1mUTIjcVBEEQBGFbInJTQRA2Ncuz6/bWEiQKgiAIgrAtEbmpIAibmvn1k8lKkCgIgiAIwrakJ5lEQRA2I91d5ufCqXXbhASJgiAIgiBsSyiTGAUKyxIkCoKwWRjLgsT5k+u2CQkSBUEQBEHYllBN4ng7lEyiIAibh7Hd5ueCBImCIAiCIAjnFAoSJzuRZBIFQdg8UJAomURBEARBEIRzS5wauel4J0IvTlhjj04vYn45Xo/dEgRBGEzYNj/7i+u2CQkSBUEQBEHYllBN4ng7ZLub/vu3/Rt+4QM3rcduCYIgDCbNFrXipXXbhASJgiAIgiBsS1JtgsRu5FeTeMfhmXO9S4IgCKujKUhcXrdNSJAoCIIgCMK2JMnkpp1WgFQDaapXGVEeJwiCsCGkmdRdMomCIAiCIAjnliTLJHaiEADQT92yieKEKgjChkL3KskkCoIgCIIgnFtSK5MIFDWKq7HU55ncCIIg1LHUT3DVLYehNVOdMIRMYrRu7ywIgiAIgjDC5HLTiBkkMp1QBUEQ6nj3dQ/iXdccwHg7xMue/jj3gVKTKAiCIAiCsD6knnLT5b7ITQVBWDvLmSrh4Ml53kCpSRQEQRAEoY5/vesYzsz3Nno3NjXU9UIyiYIgbAT7JjsAgJNzzIxg6plJnH4EWDjt9FIJEgVBEARhk3F2qY9f/cgt+JW/vnmjd2VTkxvXZDWJfcdeiUuSSRQE4Rywa7wFADg5x1zw8+2T+M6nA+/8fqeXSpAoCIIgCJsMynjdeUT69K2F3Lgmk5vGjq0tlsW4RhCEc8jJWWZGkGoSEw81SW/W6WUSJAqCIAjCJiPOMl7Srq+gn6S4/zG3yQ+x0rjGMZMoLTAEQTgHUF00X24qNYmCIAiCIFToOQYz24m3f+l+/B/vuJ5lAFENEvvSAkMQhCFCt/JF7j3FtyaRgQSJgiAIgrDJcDVY2U7cc/QsAODgyTnnMVST2G2R3NTR3VQyiYIgnAPoHpRwZSG+NYkMJEgUBEEQhE2GazCzndgz0QYAnJ7vO4+RTKIgCBsJ1UW71kPnSJ9EQRAEQRCq9OJiQsFegd6i7B43QeL0gruRQ94nkTKJjjJe27gmleMvCIIndP/mZxKlJlEQBEEQhAp2JnFZevYBAHZnVvKnGb0jVxjXOE7U7BYYUh8qCIIv6VrlpkkPWCdliQSJgiAIgrDJsPv5LUvPPgBAKwv0zjAyiTQxo5pE1z6JdmAux18QBF+8M4naWhxMHCWnzGBSgkRBEARB2GTYtXOSyTLQJIuTSczlpnkLDLeJWi+WTK4gCGuHjGvYdeapdd9xlZym7vXagASJgiAIgrDpsDNePXHaBFDUBi4xMnt0GAu5qdtYW5bK2Z4gCIJN6l2TmADRmPl34hj8ub4uQ4JEQRAEQdhk2BkvyWQZKHBzlYwCdiaR5KZuEzV7QtcXp1lBEDyh25WXcU2LgkRH9QSZ3TgiQaIgCIIgbDJsian07DNQwMfJrObGNS3/TKL0rBQEwReSm6aa6ZSsE6A1bv7t2gZDgkRBEARB2NrYgckw5KZxkmKxN9oZSwr4lhiZVRrTDnl9EkuZRKkJFQTBEzswZNWXlzKJjjJSO0jUq9/rJEgUBEEQhE1Gf8iZxNd/4jZc+rv/uu7bWQu0Is+pEUy1hlJAm2lcYweJ7CbYgiAIGbFPkEiKB67c1A4mHbKKEiQKgiAIwiZj2MY1n7/zUQDAqTlHWdMGQCvynBrNJNUIlUIUKAC+clPJJAqC4EeqPVQhFOCxaxKtINFBoipBoiAIgiBsMvpDlpueP9UBANz/2Ny6b8uX2MfdVGsEgULElpsW23AdI9Rz6PQCrr33+EbvhiBsCLYqwfleTj0S2UGi3Vtx9TESJAqCsClZ7CV455fvF2dHYVtiZ7yGITd94nkTAIADx2fXfVu+FC0w3O8JaZZJbIVZJtExK1jKJIq76Zr4lb++Gf/5b77B+t6Gzen5Hv7y2gf4DpSCsApeQWKeScyMa3zkppJJFARhq/I3NzyEd375AP72hoc2elcEYejYk4lesv6T670TJpN4cs69Uf2woZpETtAcpxphoBAFQf7/LqTibnrOoMzvPY+e3eA9aeZPrr4Pf/zF+/Clex7b6F0Rthi23NTZBCutZBJjD7lpIkGiIAhbFDKaODq9tMF7IgjDJ/ZZfV7T9sw2RjnbQ/OrXpw6W8mnWZBImUTXSVos7qbnjEsftwMAcOfhmQ3ek2a6WR/Nh0/Nb/CeCFsNO5PovMBVDRJ9+iQ6BJYSJAqCsCnZN9kGAJxgGmn8fw+cxB/88z3rsUuCMDTiIbubUrZslNtgpB6TrUSbIFEphTBQ4m66AZyX1bsenV5kjbv67mO4+eDp9dilFVy4qwsAOMLcR0FYjZJxjeuCU16TSHJTx3lQYgWJkkkUBGGrQn3NTszygsRf/Kuv44NfOzjSGRFBWI3esPskZoHQ4ghfN3EpSHTbzyQFAmWyiFGgWJlEbvZRqKdwpeUdxys/fAuueN+N67FLKyD32yNnJEgUzi1rq0nk9km0axIlkygIwhaF6o9OMoPEnWMtAMDhITzse3GKV37gJtz6yJl135awvRh6JnETyE3tFXlXh1MjNzX/boUBqyaRJIhiZrI2fGpJhw2dF6fmeTW5n7rlMH77M3euxy4JWwR7jYlfk8g0rrHlpunqgaUEiYIgbEpoYnaSKTd93E4jGzp0ZuGc71OVgyfnccODp/DGq+5Y920J24t+kqLbMo/wYUyuqc3DKAeJiU8mURt3UwBQqhxoDiJONTotEySKcc3aSPJM4uieW3T+a8fzg/hv/3A7Pvb1R9Zjl4QtglefxGoLDAenUgAVuakEiYIgbFFoYsHtUZYHiafXP0ikDEXCnFgIwmr0E412GKAdBkORmyabQG6aeGYSg0xKGAbK2fAmSXUepPelBcaaiD3lpsOEMve+SeNRXlwRNhY/uWk1k+gqN43r/92ABImCIGxK6MbKlXrtHjeGN4/OrL8rKu2a68RTEFzpJylaYYB2NJwgkSbJXOOaWx4+jW+fmFuPXVqBfZ25TsrJuAYAQqWcg4A4TdGVTOI5Ia9J9AykuNk9H/qezxuCq3gZJp++9TAuftPnMb+8etAgnHvsxa2+6/lFQWLUzd7E8fyyJaYSJAqCsFUhiQa3kTWtWg/jgUiTd8kkCueaONFohQE6UTAUmV4hN+Vdby9/z4340T/9ynrs0gpinyAxteWmyvlaTVOgk7XhEeOatUH3cN9M4jCy27RI4uw+mUELEMeZtfPD5P3XfxsA8JC099gQ0lQX95L1Nq6xXydyU0EQtio0IeQu7CZ5kLj+EwuavIsaTTjX9NM06+8XDCVIoetmlGVzdibRVYaealtu6p6VKmUSmTehmQXHCd02gU7fZeYCBDE9hONJ3zE3a7973BilcV24fZhZ7OMFf3Id7j7K6zdJZm5yXm4MiRUkOi96U01i1AFUwDCuse7fkkkUBGGr4ivhpAn1Qm/9M4m0Mi7uh8K5hprAR6F7b7+1QHV3m6Um0TVwtjOJgVLO16pdkxgzgvTbD03jGW+9Gp+/41HnMVudJM8kup9bdjA/s7j+wQ2dT9wgcVdW3jCMTOI3Dp7GwZPz+JMv3scaRyUY00M4jsJKUq3zBaee672cArwgAsK2u3FNSW4qmURBELYovoFXLjcdQlPwZZGbCutEolFkEoewCEGBKCdIHHYtbpLqvH+qqywwSZFnEgNWTaJGJ2uBwTHPuvfYWQDAtfcddx6z1aHDx5Gb2vf/YQSJdP5zpd0TbXOODKO8YaobAQBml3jb2pVlO08z23sI54Yk1ei0uHLT7HUqBMKOp9xUMomCIGxRfJMnvjWJj5xawPGzPLMbWnUehrGCsL1ItUaggFaoWJksX2gbHLnp0pBbGpgVeV6dYKqLPolB4B7YJqlGFCiEgWLVRbczWdkwzIY2C4lHTaIdmA+zTyj3e6MFCF8pLYdWdm5xg8Qdmdx0lM11tjKJRt5z1flekmcSQyBsefZJlCBREIQtSmLdTDlZRZrscoPEH/nja/GD/+sa1hiRmwrrRZpqBEohCoZTkxjnNYmpcyA1jLpfmzgpZFs+clPjbsoIEkOFKODJfVuhn9nNLQ+fxus+/s0t6ZScZ+kYCxB2ptjXFZUDBaVc45rcuXUICyb0nJld8susSpC4MaR2JtH1XkI1iUFo5KbO7qZ2kChyU0EQtij2s5qzukuT3YUhyE17EiQK60SS1SS2QsWSOx6fXcJv/sPt7FYWJedQxwkvdxtrxa7t8TGuCZRyViiY4x9kxkHuxz/KtsXNSL3mw7fgn24/uiUn8hSYczKC9vHjBm4+0OJiP9GsQL2f8D+bL7TwwM0k0riZRWmBsREkJek6N5MYAWHk1ydR3E0FQdiq2Cv+rCBxqMY1mbupxIjCOcbITRWiMGDJHd/xpQO46pbD+OxtR1jbsycvrtfbQn+4k85Sg3sf45rAPZMYpxqhgjEOYhz/nmdGigxQTm3BurE45QdSPucjMbccs0sA7EUSzncXe5jy+JJnEpkqGcrk9oYsDxcMiS6k6+5BYvZdqdAEiqnjdyfupoIgbAdsiddy4v5wW2sLDE5NFtWhSCZRONeUMomx+/k1lmXa5pjZhiTVGM9MOJyDxCFnEhONIpPouI9xdhwBIFC8msQwCDK5r/vxp2PHzSztGhteK4Vh4yPJ9A0Spxd6eNrvfRHvuuYB9x1E5XnjoVwZRk2ir8uxb72lcG5IrXu583dIwV4QmUBRuwaJUpMoCMI2IPHMJPYtl0af4O3RGXfzGlpxFndT4VyTaJP5Mu6m7uf/JDkgemQbKEh0nSTbctNhmDel6epy05mFfqkeOS0FicyaxHxix5dJsvvtTZhMIjdIvPngadz07VOsMcOGAql+op3vyXaQyAna5rLv/sM3PczYw7KhCE+5Mny5KX+c3z7e8vAZfO3ASa9tCgWJzoLEIHDPUuc1iYF/JlHkpoIgbFXsFX/OQ9uehPhITh9jOJzS6vFWNJsQNhatM7kj0zhlqmOCRG4msZ+mGG+bsa6TUTuTOJS6sdTuN7Zye8txgme89Wr8n3/zjfx3NEEDqE+i+7bCMOtTybi+SdLn25Sd22/vivfdiJ9//02sMcPGvie7ZhN7sd/9n9YATs/zjqO96MCSmybDl5v6juMGiS9/zw141Qe/7rVNoYBMyFpRwMgkZvdvFRrzGtcgUYvcVBCEbUApk8h4aNtZFx9jDc6YXiaDjVP3FXJBcCGhiUXIczfNyu8wt+zugJimGlqjkJs6B4nFJGSpt/5BYppqdKPmmsQv3fMYAODrB0+XxgTkbhoo54xnkqYIPdxle7kBCu94kCvq8VleG57NQClIdJRlluSmnPt/9lru7dg3k9j3DMB88O2XSsdE5KYbA0neI5+axCACVMCUmyrr34ORIFEQhE1Jcg4yiT7ZDU4zcXvCM4yVZGH7kKS6kJsyzmOarM4x5Ka0sDLGrEm0F1SG0TMx0UVbirpjctZyb6TG4eVMors03J7YcRaAcrkp895Dn4ebAd4M+NyTfeWmnKxveXtre95waxJnFvus+ncAJdkzR71SSGLlGbURFPXljPpmuwUGV24aROY/kZsKgrBV8Q0S40R729ADPOOaci8vWaUVzh2pNq6cfLkj3yafJpETTLmpvaAyjHYYaSm7uvKY2L1V7zl6Nvsd8kyicTd131YUGHdZH+MaV2MdYpi1bcPGDsxdzy373sqrSfc7fnHit+DX95SbPuP3r8YV77uRNWbtDqx+x2YY9cZbGbqXm3ZGHpnEIHTKCppxcTamJX0SBUHYungHiWmaZ0RcJ3f2Q9A3kziMTIqwfbBXnzk1iTR55ARtNPkcYxrX2Nfo0DKJmZlM3T3Bvt7vPjoDwDRip7YZgVLOGRiqSWwxW2Ask9yUmdGi13OzS5sBe+HO9Z7cL7mNMs5laxwnuIlTv8XFtQT3dxyeYb2+5MDKWJSk69tXbroVFy6GSele7novyVtgBEx308QElWHLKfsoQaIgCJuSUh0Ly0igcGl0XbWzJyRLjIevPXnhjBOE1SjcTRUra5BnsjzMN7gtMOxrdBiZxDgxEtx2VC/Bpf2Z6ka451GTSVzqJ3lbkJDpbhoq09vMR27KzWhR5nHJc0I+yvVmqS4Mh1ydYu1MLHeRkOD1ZeS3gLG3N4zjX/5s/MDZN9ibZzolC2XS7F4ehUHJkGnwoOyYk3TUNbjUWZAYhCI3FQRh6+LbAiNOde7S6Dq5th++nJX8cnC59TIAwsZRuJsGrBYMNHnsMbKPlGko3E0dAynPa9SXQrZVHyTS5/j+i3bi3kdnARhlAAUoSrk7RFJmybcmkS03JUmg533Ex8l5WBhXWjMd9alJ9GmBBPDuyXGSYiJzBmYtSg7RuMa3l2MuifU8tzj1zcJKzIIT0OaoEko1iUGz3HTuBHD7JwtbX5GbCoKwHfBtgREnKbvhtu/EoiS3kyBROIeQu2nEacAMv0xW3zOTaF+jw5gkk2wrCtXAmsQnnTeJQ2cWoLXGUr+Qnxt309W3Q58rDAIEilcTSseSU8dov943kzg/hEyuL2mq0Ykok+h2XEo1iUwlCcFRd5jFRX4mnc6nYZjCeGcSSW7qWa/JqW8WVkImZBHHhMzOJA6Sm978fuAzVwI3vTsbl5jXhy1xNxUEYfTRWuNPr74Pdx3h1V/41iT27Ye9aybReh1r9Tn1m5AI24s/+eJ9+B//fA9rDE0s2iGjATP8gsQkzyTyZNqx5zXqS6oLx9e6Y0L78117xrHQS3B6vmcyiVFRk+jibkrvE2V9EjlOkra7Ka8mbm3ZnlGWBMapRqfV3LqkDgqax1ohq/6u760KSTFJmUTnxUU/aauvEYxvWQSdz/3Er1XTKJ9bm4GScY2z3JRqEsndtOE76M2Zn49kJkh5JjEEEgkSBUEYcZbjFH/+bw/gP72X5+SWpBqtMDMSYE541zLZ5RjX2PVNYlwjNPEX1z6Av/raQZzJ2jK44O1uSpksD4ketwXGRmQSoyxwrvt8JvsKPH7POADg2yfnAQDd7HMZd9PVjyVNpAOl2JlE+17FykDGfNmiHWyM8kTe9LfkmYnRvXuiE3lnElmtMxKrTMFxnP39cgJZ3566vu2dYk/pLiFy07VRaoHBNa6h+sImE5o50xsWi9PFuCAUuakgCJsDWs3lSl0Sy+zA9cGmtVkpHcvH8SYkAH+FtpNlKXwzAML24dZHzji/NpdWBkEma3OU6eWZLPeJKE0+qQWGa01WqSYxGYbczm6BUZ9JjIIAF+0eAwA8cNysslOAEii3/nKU1aOaRFezG6B8r2JJfj0yiXaQMr88uvefONWW4zTPFGm8HbLLDQieKiTFRIf3vKFtTbRDLMeJ8zXq28ux1KaD85zydIolJEhcG7YCwvmeUO2TqBvGzR03PxdOF+PI3VSMawRBGHU4mTmbcrDHW9nlTkjshygrk5jq3OxA5KZCE1mbPtY5Qo547Yhkem4Ty+U1yE3JXMQ1Czl0uWm+Il+f3TZb/koAACAASURBVIuTFGGg8LidJkh8iDKJJXdTl+2Yn2Fg3E05NaF29spZWobiHsSpSbSP+ShP5BPLuMbVuMM3SLRbj3BNyMbyTKLbuNzwqRMh1e7BX6m/LqcnY+oX7NnZK86CKyH19muDnJJbnPryUk3iIOMayiSeKcbljqjSAkMQhBGHrPG5dRip9qkt9KutKtWWeK4+y4NUaIL6r3Emdmnubkr95dzOZZ+aRMqU5Zl7x7FDl5vqQrZVN9mNU40oVNg11kKggCPTiwCAsbaZCinl5lRKk+oo9G+BAfDUEz4OlH3PrJkvWmvcd2yWPS7RhdzUVd1RLFyEzHYP1jFhnJNpqjHOPP/pecOtZbQDBU4GOPG83nwkuL01SlSFgsJwi1FfXqpJHCA3na0JEvM6RskkCoIw4vhmEuOkkJu6TpxolXqsxast8TUESFNLoicPUqGBKMgkyYxzpHA3zTIwTFdIn0wiN3OfpEWWdDjGNWZ7g/okRoFCECjsHm/jaBYkUoASBnCSjtLCVrcVGrkvR25q7ZePw6xvJtH3PsvhM988ghe/83pce+9x5zFUApD3SXTMJNL3NNYKvdo9AHwTMlKguEo5i7pJ5nPK2sc5hnOor1FOkupckeAacNvnljzb1kaqTX1zOwwYmUSSm2ZZwTp30zQBlmeAqAvEi0B/MatJjERuKgjC5oAe1Ipmk46k2kyS21HgXCPlm0m0Jy6cyZbJJJLcVDKJQj2UDeScI2lKdSxZJtFxcl1kEt3rGCkIakUBAuV+3aS6kIQPYyKpS30Sa+SmqUaYBeR7Jto4Or0EwDKuUW71hTSR7rZCBMxMov1aTpBIUsUk1c59Me1jvjiEFhgHshrPex496zyGDgfX3dSWQPOCbc92RtrUlyvF6a9bqeV1XZS0a0kZ/S1LGcF1d271M8kRVmIyieY54FWTqMJ6uWmSGaFNfYf5uThdMa4Rd1NBEEacxZ65KXLlpiTR6DRIy+qo1iS6mnfQA7EVKubEoghIpSbR8PCpeQmYK4QhyU0Zq/9WQATw5aZmjNv5n/cFVM1SzjriNC2Mm4bkbhoo1TjZShKdB+S7J9o4djYLEsm4xjHgo3vWWCtExAwS7Yk8K0i0gxsPSeAwMom0IMA1hAEKKbPrOZlYEmiO0YuvuQvVu7YZ5z/15eTLTf2ydLGv3NRy/HaWm9qyackkrolE230SGTWJKjDSiSAsCqVLb5wFiZMXmJ+LpwvjmqAhsKwgQaIgCBuKt9yUHtoRb9IKFJMZd+Makg1FvCAxTdEKA7TDQFpgwEy0/sMfX4fXfPiWjd6VkSKvSWTZ5Jughsa6ypRKxinMrA1db64TySQFojBgXaNrgcx8muoE6Z4BAHsn2vnvx6xMosta1VKeSQxMb0VmJrGQ4PrJVF3vQcOuSSTzGU7Wkua2RQsMXr1rJ2JI9FANpHiZRO75TxP+8TxIdP3e/DKCcZJighnsme2leZDoLFuXIPGckWbGNa5ydzMoMRlEoDngIzlpHiSeKYxrRlVuqpR6slJqSSn1Eet3r1RKPayUmldKfVYptcf62x6l1Geyvz2slHpl5f0axwqCMPr4Bomp9ggSK/3euC6NE21eT64kNRPrTiuQ7BmKie5X7j+xwXsyWtC8gG1cE4CdSbRf5xwk6qIvYLvBpn16oZe3lMj3MZv8dMLAy1qfg873McsI1ky2kjRFlGVt91hBIgU3oYJTfSEFQV6ZxDRlL1IBJgDgZmV7Q5ab5plEjpFMnknk1dbSoetEIdMAiF9frrWGzurGOpG7uUhhXMN14fYzN4pTzQ5IgbJTuLMiQYxrzhm0ABFyFpx0VlsImGCxriZxRSbxjGVcM7py078E8A36H6XU9wF4H4BfAnABgAUA7668vpf97RcBvCcb4zJWEIQRZ4ncTZnjyDa6zXho0ypdO+TVltgGBJwHYpKmCJVCtxWK3BRicNAELUJwjk+ayU0p6HGV3PnUEtktH5oWZa78u1vword/pfQ3mvx0WuufSaSPHygz2arrd2hnEi/ZN5H/vuiT6FaTSAtbVJPIkjt6TMgBE3BMMuubh21c08k+F8lxXbBdSgFOdjvNthk412gCfn0S7Ux6JwqdM/5Jbq7j727K6ndoyUa57VW4x9/XpVcoYy9ABEH9fasWqi0EmttZ1AaJqdUCY8SCRKXUzwOYBnCN9etfBPBPWuvrtdZzAN4M4GeVUlNKqQkALwfwZq31nNb6awD+ESYoHDh2WJ9JEIS14Z1JzLJ0vBqR4mHfYthNF4Y3ETNI1AhDhW4rYMmGtiqbZcX50OkFPP0tX1yRGVsv6LzkSZk1VBYQ2e+xGmlmwAG4139RZsPYtNcHRd8+aY7VNx85U9rHIDCLMuu9QJBamcSwIZMYJxqtzLjmPz3r8ZjqRHjy+ZO4aLfpm2gmaatva8kKEqPALbC094HbSoReO9nNgg3HwGHYQSKdi5xM4ooenIyaRLqPO9dxoTCFiQLlvJ90LuWLJEyZ9rinKyrAbWWRoh3yzKUAY3pVmLm5LjZJJvFcYM9JQlV/36qlFCQ2tMDI5abnm5+53DQEwmi05KZKqR0A3grgNyp/+j4At9P/aK0fhMkcPiX7L9Za32+9/vZszGpjBUHYBPjXJKZsuWk+kcwMb1xXW/0ziZncLgqlJhH+9v/D5ot3H8PsUoyPfv3hoWwv74HH7NsWZu0cAPcgMU5Sttw61ZWJTM22Ln+CqfT4xkOn89+ZlhMBOi3edeMD7aNSymQEazZnZxJ3jrdw3Ruejy+8/ofzNiKBGlwTdHR6EX/wz/fkjenH2iHCQLEyWYmd7WHW0o0x20T41DGuBZrgLjGkrf6ZROSZdK5sNwp46g463CS37rkGlxWjNFcJqG/dZD/RiMLAGKC4thJJTSYrb0EictOhYi9AhA0LcLWQbBRolpvGy+bn2C4jL12wjWtaI9cn8Q8AfFBrfbjy+0kAM5XfzQCYyv5W9VKmv602toRS6kql1H6l1P4TJ6QeRhBGBaqV0ZrncJpkJhW8lV3zM1QKrYZeanXQ6jO7JlHrbEISiNwU5cnELKP/17CZyjI2w9pHmkyy3U2DIpPoms1KUs02CbGvm6Z6P5oIn5zrlfYxUGBl+32hXQoyA4i6QNauSQSAvZOdvKYTQKPhDfHaj96KD37tIG552GRLu1Gw6pgqdr891yCdeglyW/fQMVdqODWJeUacaQgDFCUArkFKqk2WuhUEbLlvFJrWMa7bKibyYC1KJvlzg2cmY58X3PKGKFBoBcq5tjN3/GZmt0t9Ekd4wW/UsRcgmmTyOUduBW77uPm3XZPYmEnM7sVhBxjfUzauGSW5qVLqMgAvAvCOmj/PAdhR+d0OALOr/G21sSW01u/XWl+utb78vPPO430AQRDWDXuFm51JUTwpWyHtMO0sfNxN+4l2rhtIEmNt3Y3CdTfu2AyU2y+M7sRistMCAMwurb7Sula01kVNIqtPIgVEzEyiFaRwZXNBgIH1fgBwZsEKEhPbEZJ3/p+YXWYtGjnJTa1MYh1KKQw6jLcdmgZgMoqACYyjhm01kaQpO2tGGccJZisF+t6mOtFQ5Ka0PU5ASsFMECi0gsC5LRGpNFphgCR1vyf3kxStwGTbONsCkPfl5dbAj7eZ7qZraGURhbwFUNrHDlPuW5LEygKoN/YCRNN9K+cDLwA++6vm3yQbBVZ3Nw1bwNjuirtpBCQjEiQCeD6AiwE8opQ6BuA3AbxcKXUrgLsBPINeqJR6IoAOgPuz/yKl1JOt93pGNgarjBUEAcCdh2fYPQiHiT154fXXMo2xfVZ2wyDg9XuruKI6T67zTKIY1wCbxzad4ohhZBLtua1r/zuAMonI2yk4q5S0ZvekK8lNm9pLZNfEmYUisDaZRJ4jJGBqQp/9P7+M91//becxtnFN0BDIGvlrc5AYDjCuse+hD59aAGAMb1x7KxK2bNS9Kbt53Rjze6PAfbITse8/X7rnMRyfXWKNKWpreQZMAPXgZGT3UuotZ75PV3llnJhAqsmlt3YfS8Y1/OfNGLMmsdwnkRdwR4FCFLjXadI+diKe3NSupRPjGn+SpFiAoBY8qy54mBetLjfNM4ltK0hMTX/FEZObvh/AkwBclv33XgCfB/BiAB8F8BNKqR/OjGreCuDTWutZrfU8gE8DeKtSakIp9TwAPwXgw9n7No4d0ucShJHmhgdO4if+4mv42xse2uhdaaRsyc/IHKRmksx6aNuyoTBwlskULTD4GZggl5tKJrGXJNa/R3diQSv5wwgS7foyTiaRMimUGXOVm5oghdc2I58QUgDWkKUDTCsMIs0yG9w+iYfOmCDs2vuOO48pahL9M4mDahKnreD30ZkltKMg71PJChIT7R3s+daSTnZ5/V37SYpX/91+/ML7b3IeA/gZMNGhC/Nm4u6fzRjXZEEiw4QpCgNPuSmzT2jubsqUm9oOxMyFo4AbbGu/mlA6J8dboXONprAS+9yiBaxVlQn9hUomMQJ0ihVNXmuDRKtP4qjITbXWC1rrY/QfjEx0SWt9Qmt9N4BfhQn4jsPUE77WGv5aAGPZ3z4O4NeyMXAYKwjbmqMzZiX4jsPV0t3RwW4o7WrIAJSbG7Nlc5nhQeK82lpeyeesJEeBQqcVSpAIv0buGwFNwochN7UDDNdJpM4DIp67adWkghtsDGxUn32fp+fLNYnUpoblbuohfEita3twJrF52jMoK3h8drn0/3QvCDKJqqtaI7FrEpmZLG7rjNiSqXLkpvT+D56Ydx4DFOcgp0aQxihlen72HcfG2b2Vakpdg6J+otHKA1LHTLotN2UoUGjcONu4xs/dVFuOr67fAT0D2e6y1sLFKKtCRh06jtFqJmR2zeHybGFAAxQ/q3WJJblpVpNItYyBm9w0Yn2ac4TW+i2V//8YgI81vPY0gJ8e8F6NYwVhu9NmNl/eCEqZREZvpzSTm4bKPWizZXOuPdEA+4FobpnuTZHNym43ErkpsHnkpjRJOzuUTCI/SLSlXjSxcKnJ8jWpKGUSA4W6eWSRSeyXxgVMiZ4vhdy0CNxW7GOSIuw0T3tI7lVHVXo5s2g+Z2RN7GxTnCbiNGUHiXRsua0zKCMx2Ylw5Myi0xiAdx+u2x4ns2rfk1uhcl+4yO6t5EzrnElMKJPIWFystsBYd7mpX01ikmp0IrMAyv1s3pnEdjjSqpBRp7oAZ/+uxOyx4t9LZ4uMIGDko0AmObXub6VM4i7jbjp1QeZuGo2U3FQQhDXywj+9Du+65gBrTCcPEkc3i2WvmrrWlZhxmXGNT03iANlc07aAYkWYs5JM7qaj/B0Mi81iXEOGFq4T1rVgZ7Nd5aYl23RXiRKKyUeX2YKh3MurPiClie3ccpx/zySJbUchLyPi/MqCct1kfaASpzqXJ9YxyKn0+FmTSXzXLzwTAPLG9hSku2Ru0lQj1cjdZbkZKTIX4d7vuq2Qdb35TvppeyyXauuezMqAZdLhVkByU8dMIkmgmfWP9j46t5cgU5goRKA4clNPCbouDICcXWLpHIm4EnTzuu4Q2ttsZexza6AqZO6x4t/LsyZrqCy5KbBSPmoHieN7gHgRWJ4bPbmpIAhr58ET83j7l3ieTO1w9DOJJbkpoyaRshQst7ncpbFZNte0LYCfgaEaKDGuMdjHbZTPSQoOOa6VvvhkEm3b9IAhN61mErkOiIOuG/t304u9/Hdcsw/AL0gp9UlsqEmk/WlCDahJJLnpC7/nfNzwph/FVb/2XADlTOJqFFmbTCLpev/R1e+Nd98yQaL7uey7gEPb41w39rnFzYAFypabussrI7bcFPk+NvXgrN1W9jpzDbg7XNvnBeda0NosnLYi9xYYeQuSiFknm1iZxBG+l486SWVOAqD+/Fo8U/x7ecYEiXYLDGB1uSkALJzMjGuyFhirXKsSJArCFoYewCM9IfdssJ7qwgLdNeNjZ2CaZHODxo1xM4lajGuI47NLeOT0Qv7/nEnrsKHsNkc250viMSG0DZgo5nGZl6+sP3LNGpiflIGvCwLs7MqZeTM5IXMRbk0iyfIUVpdvEqU+iQPadAyqSRzkbnpybhljrRATnQgX7hrD93yH6b7FyeRWG8e7Zntyd2V2w/kiS8QJNtYcJHLkptaCRxS414mnWcBPEl9+cMmXZJo2Be6fzx7XablfA3RejLVCVnuJhCS4Ab9OP8qMU7jn1ng7kiBxDdjuvmGuSqg5nqUgkWoSs3sZBYtVh9OqcQ0RRMbdFFg1m7ghNYmCIAwHmogPK0j85DceQT/ReNVznuA8piQ35TSqz2RDYcOktWkMQBNJtzouoJhcjzObItvmCnGq83qY7ciL33F9qT3CKE8s6LpxlSOvBbu9AXeCxu2TWM1IcV2Bg6yXV924JNW59Jt6JcapRrelsl6m7osk9FrlHiM69UlcLZPYVMsIAGfme9gz0V7x+/z4OwQ3lCGiMgDXTGIuE/YMEsfaoXNACvhfm7Q9zgJQecGDUSeusxpByiS6SkDTwtxlftmt5rh6vbk+b2zDmxYjc1n0xeTJtFOSm4bumUQ7S9piuMvaC6dSk+hPXX157fllB4krahKbMokVuSlBfRKBItvYwPacrQjCJsO3zyE9OIc1IX/jp+7E73z2LtYY2ySBNbnIVk2b5G9aa9x88HTp2Ln0e6vdlsfkmpwkA6XyzA2nD95Www4QgRGvSbRq6tabYkU+dM6Ia11MPnO5qcM9wrffXt4nbsAkOU40zpvsACjaYJC5SKfFk5v6LGoVxjVFv7HqfTNO04F9Ege5m55e6GHv5Mog0dm2HkWGqBUGCBRDIukpd7eDy1S7n8/eNYmagkTeYh9gudIyArBAIV9048grw4AXtK0wPGOWKVB7g8S1l2P2uolOxFpcoWNiFiX5WdJWqNhS5vE2L5AVypSk/MpVblqtScxCuYFyUzuTGDbXMVaQIFEQNgH2M8n1AQUUN/JRNk3pJWmxss6ZXGQP+yCon1h8+tYjuOJ9N+Ifbz9ajHGQzdVuK3v45sYRDvtJ7x1lNYkAz4RgK1EntR3lIJEmWKle//20nSvZbqOlOhaG3NHTXTMKgsZJcpym2DdlgkRaEEh01gImNFI718UuryAx2yfqkwisDIqSZPU+iUD9otzp+R52j68MEgfa1lfIj2OY1cS5TuQ9jWuqmUtncxdPKXiRSeTV0QHFuez6eDMBf8CXm6aF3NSnTygnk5hYizlhoJwzx3kmsR3x3E01SXCD3Hxr1THZORgGASuTaEugOV4CQhl7TjJwwWnhNNAaB6CApWkgXgYic791k5tWMomOclMJEgVhE2CvCp5l9G7L5aYjbJoSp2ku43TtkQUU0rGo4eF7Ys4YTdxp9YgsisTNpMR10koGNO3QPZNoF6STm+F2zSQePrOw4nejvPpsT5LXez9tSWA/0U7nZGKvPrMyWVSj5tenj66bpkb1lEkkuWmSIjeXMttzDBI9FlNKNYkNxyROB7epGOQueHq+h701clOWcY0VbLcCvrlIKwwQetSNcWWqa61JdD2P7TEmk8io96Nzi5lJTK1MIru/LilQuBn4PJPIG8fN0qVUbxlwnFvNz9xd1ssUaXTv5aNOseBnLTjVfQeLZ4DxfUB3pwkYe3NAe9L8LZebVt1NKZNYlZuGIjcVhK2EfeOuyvYGjzM375GekMca41n/QU7LAbLXb5KW7R43K2VnKn3bgCIjwnloh9ZklxMkRoFCK8oK0rfpw/S+Y3MrfjfKEwv7+11vwyHbJRBwC6RSa2LHcTeljHtuwOTRJ85cNytfEycak50Q3VaAM/MUJKYIlXF25GzPT25aBLJBg2yLFnuayHtO1hzK0/M97K4JEn3cZSNPd2WqwfNxNwXcg3Tf1i9rMWEKVLMqpA4T7BVBOqedBTcgKpmLcBQoFaM0tpstN0hMC8dXbrAXBibD7dO7M041S+EkFKSlbLP5XWNN4vhuE+wtngZ680B7wvyt0d20B0CZv7fGgKhrfq9EbioIWwr74cKZtFJmrjfCctN+UjSXdq2jAIpMYpO0jAJPqo8CKiYJDHdTckXMg8Rk5fH8i387gN/69B24+eDpyrYUwoBpVJFqPHB8ZWC1WbnuvuPY0S37pI2ycY19HnImaV89cAKv/8Q3WduqTuQ5UuYwKKSVLvPWYmKXZfYcm6bb2Z6m2ipjJBVg93i7kJtWFldcM4R0zDnGQS6TrThJB7qb5sFlZdxSP8FCL6k1rqHMpMu1TRmCoiaOL3dshfXGQYPGceWm9jno0/PQbMv1Xmd+hllNlrNxTRbsUU0iJysYBp5yU2Zwn1avG+eg1PzstkJWVj3VyB1f2e1tlFmAcD+OabaP2bnFeHYLBSXjmkELTr05oD1lZKML1SCR5KaV7yDpmSwiOYCR5LQkN5VMoiBseuybBmfSSquro9xuoJekrCwKQe0lmqVl5rOftoJE+6HNcjfNahIHZRL/5Or78fGbD+GK992IfpKWJoQcSRoA/OW1D+BFb/8K7j121un1o843HjqN5z5pb+l3o5xJtIMnzqLML33wZnzutqOsjDGdp/k14GiKBBQSPYAnd+TKFlOHSXI/MaYwO7otzC5RCwyUM/CumcTsmHMWEkp9EhuCvSTVA41rKLisjiP5bL27aZC/92rQd21qEhlyUzuTGPGCS/u+5VOTyHre2EEio00QULibOgdg2f2fKzfNyxQYQbptLsLJdpaDy4C1SBgoE9xzTISSVENlxjXceldauHA9jnYmEeD1OBYK6koHas+veAmI2sD4XiuTSHJTunHVyE1D657VGjM/o7YxswGARDKJgrDpsSednJVFegAMw8rflzjR7P5fQDHha5KW0UR/ukZuynY3zbIkrSxrsFowe9O3T1UyiSSJctve/oeNk9mjM0tOrx915pYT7J3s4KcuuzD/3ShnEvul642/nwse1yjHudJe/We5myaWBJqTSbHkdkGDuQi1pJnsRpjLWgvEaZo1EqdMIk9uypkg0z4FypabVoLELLBoomkl/9ScCRLrjGsG1TFWia37T8QJGnR5Is9pXRIFQR5IubdgKN5/scdz16x7j9X2EciC+6DB2bFuXJ5JpHuy6/aKWkZ32a75mctNnWWjxbiIE1za/UUZ95+idzC/3jVgZiATK5AFRnvRb5SxnaOjQfOEuGfkouN7gPlTWWaxkkmsk5uGloJn/qT5ufe7RW4qCFsJezLBWdmlh+AIx4joW5lE1web1tr0hBrgCEYrqTOLVpBYmVy7PrTjrNYjbMhQAMDFe8fxI085DwBwx+GZFfbngHsmMWdI35tp17F+G1vqJxhrhXjnz12Gg3/4MgBwdt9bK4fPLLAmukDZQInjDEyqnoVl9zFxNUhk1Lty3U2LYCNgGXcUxjUmA9+cSQww2YkwtxRn4zIZGzeTmB1z7gQZKDelru5nqgf3XiwykOXfUyaxrgUGp0+lHaRHoXKW18drkKkGAdiBlP06TqBuP6e45xZ9b5wsHfUEBNxNz9JUI1TwkpsGWZlCqt1kuFXDJ86iQJDV8nKNa9hZ0pKUOXA+jlSCwZX7CmXq5Ka110CyXLiUnj0MQAOdLJMYNBjX2L0UAWA5M/E7/3utIFHkpoKw6Vmr3NS10J745zuO4rl/eI230QqrcXOS5vWDPi0AmhzBSO5kZ15dZHP120tzswl7+6XtJRr7Jts4f6qDgyfnV9imA7yay2HyxN/+Al79d7esy3trrbGYBYlKKSiqfRlSJvGH/ve1+JW/vpk1pl8yrnHfT1pEWOi5NekGyu6mgNtEPq2RKLn1SSyClDazcTZtp6mXIGX2J7sRZrNMopH2oTCucfzOKTjkmXaYn0o1N6XW2eS7CUoyVgPu0/MDMoke7qZhEBhXZm62R5HclKGAyBYEAEZNonXcfSS/Zlt8SSanLVGRNeO1T1qL3DQsLRQ6bMvKAHP6JOb9RaOA5SeQpOb8bwX8fod5nSaj3tUYKbmpa7YD/STFc/7XNfjCnY86j6m2SQEa7iXU8mLc6ndImURyN622wKgGia3s9XueaMlNJUgUzhHfevQs2+lvqZ/g7/cfWtcsxXbAfpj5GNckzEzR737ubjw6s8RyUrVhrT4nujCu8XBbJEf7Ort7oNx2ouo2594nsZy1qbuJx2mKVhDg4r0TePjUPMqZRPe6pY3iy996bF3et59oJGnxHQO8Vfy1QOf81zMzIVdKclPGJI2CkwVG5nJFJtHFuKbG3dStT2Ka72crDBjGNUUA3GQu0k81wlBhysokmuCyMHxyPZYUHLIaieeTrWJfq3NyrYtAsI6mmiAKEge2wHAK0ouaRE5GkD4HjeP1BISH3NRzUdJDblrIhHmN6qmdScQMgPM2EZnc1KnlTGlxsfw7m8NnFvCK99yAB0/MlV6T90lkyFvDQKHTCljHX5PjaxiwgmaAn6WOE53J1vk9jrcqZxf7OHZ2Cb/9mTudx9jGTU2LWwBMkBi2gZ3fVfyuXckkVo1rdFoEkADw6muAV3zIBIjSJ3HzsBwnePuX7mdLoobJ3HKMl/7ZV/Hrn7iNNe7PrjmA/37VHfji3eszAd0u+GYS7ZVLzkofTVg5Aan9sOXIxPpJionc3ZS/+tkUuNFEyg6Qy8Y1ylmGm2S1VQODxMRMWp6wdxwPnVqoZDvB+nz5e45wUOkK3dfI4AAAy3xjLfgev36q88DGL5PIWf2vGtes3GetNQ48Npufx7ZtfRHYrL6tUk1ixHNApHO4KQOfpBotkptWMokUpLjeu3K5KWuCbH4OcjdNtYZCc5SoGuo7z8z3EChg51hrxZh8YueQJbLb4nCUDBRcGgdKnkwyCoO1yU2ZLRi44+zWJWFDvWvTtuxyA86zw86AObnSljL3zQt+f/gv92L/w2fwtzc8lO8jUDiOskx5FNAJTZDo3HOyEgC7jin20V1umqQpwlCxs9TbAc68yXaqF4ndvAAAIABJREFUHliWkiybmsS93138Ls8kknFN5TtIkyKABIDzLwWe9nLz7yaJagUJEkeAq245jHddcwB//m8HNnpXGqFVomvvO84aR/2yaCVW8KNck8jIUlgPCk52j2ytZ5fcZXM+9Shaa8Spxpiv3NSSllVX/+Oa1fCytKn+Znzw5Dw+d9uR8ntVTHLqVvr6SYpWGOBxu8ZwYnY5f2iuJZM4DEnmemf5F7MH5ljLziQOR27qO3HpxymmOuac5FxvFLDNM+SmeYP7vHfhyu296VN34sfecT2uu+8EgKpxjXmNk9yxaoDC7C0HoNbdUWudT76nui0s9BIkqc7HdVru/UWB4l7iU5NY7pNY2U+4ZRKrl8Sp+R52j7drTW+Kid3q+1gyrmFMyNdiXBMo/kTetybRq0+ifS9vuCfXjssk0JxMOo0LAl4GMneqXqWX3R2HpwEY4zLA+r4V0900+2wdhroAoMxxJhtlupuyHb+1zg2wAKDnqErYytCx5CwsVheu7fcpEfeM3HTvE4vfVYPEWrlpiFpEbrp5oMnT0enFDd6TZmhVitvkmGu9LdRTCnhYWTr+yi5Q1EdRRsBtW5ZEz3Efaf/GmDba9PwzRhr1N1Z7f/LMRvYSCi7rbsav+quv4/WfuK20GkgP7UEmIfkkOQsuzmZtAErupswgkROg+OKbbZtfjnHF+27Etx4d3KYjDxLbxeOmHQ0pSPScuPSTFJNZX0fO9UYxBEcVssLdtGafb88mn7dkrrd0bnZbYeMiyaBtsWsS08IVtM7dkc6hVuZuCphrLk3LbQpcnx/0/pwaXrsFRl3GX2sNrYtsYR1NAffMYr82iwjAurY5mcQArUAxJIHIximWAUpSkQS6Zpd6npnEtbTACAKemViSOtRx1W0vLdcyuhyTUplCw/NmOU5w5IyZwx3LXKntzxaxauCLmkTA/TvQuliU1NrtmNgLEFzH79A6t0a13n6Y+DxL6/wVagP13LjGrklcTW6alOWmNtIncfOwO6tzODXC2TbfGwDdQEbZ7n4z4Nvc2x7HChKzCSv1O3PBnpC7Bjc0Se22AijFr0kcZCZjP/wLt0VL2tQwIaHj+/Cphfx3caLzZs9A/cOgnxYtAIDCVTUKbHdTt89H81jOiqQv3IUf4u6jZ3HzwdN406fuGPg6CpjsTGLEmOiuBV/HvX6qMbmWTCJjcYWOw/gA4xp637uOGnc6krOOt0OvFgx5TaJzc+/CuKZuIlm4bwb5IsnccpxnG7iTXXp/15oxs4/mZylwsMbSP93cTcvbTFKdP8uqcIKUkrogZAR7ltw0DNzr9ijbljuAOh5/+16+3sY1tikMJ0hMMylzfv473k5IFdJmSHBL2Z6Gifyh0wtINXDJvgmcXYoRJ2lu5gR4uJta1w1ncSVQQCsa/NkOnV7I72vV+mZnx++kGmzLHM+nV2StcU31O0gTkxWMOub/f+6jwFNfZuSjgCU3rWYSk7JxjU1T24zqy5w+hbCu0DPr5NwIB4mezlV5kCg3kDVhT0BYxjWemUSqH+NkEu3veLWH2kIvxs0HT+cPllYYoBUEzm0RYsuAo2mSFtdmEldfNf2uPabhLJkPAMUkOQgUVIMkJ07SvCYLKIJE++bPvY6GkUnk9N20oaDmW8dmB75usb+yJpFjGrQW7IkLx1ihH6f598iqScy+50WPPondAS0w6Ly568gMtNZ5kDjWDlnupoldk8iobYutya6ZSFb/TtexlUlcik3rmMBqgcEMEgH3YEPnk616uSn9a7C7ab3hDX2OQWOcatusTG4UcMxFzM/8vsVoE2Fne5zdTS3Jc538uQkf4xp6Gd0n2XLTvBzLPbhky01pUTJsnsgfPGkWFZ/5+F0AgOnFfqkvJ8/d1ARtbWaQSMFlK2j+bEv9BD/8R9fijVeZxT27vQc7kxgWfSpFbuqXTKk6rgM1C07xsvlJQeKl/xH4hY8DnSnz/6ohk1itSbSh/okiNx19aOXm5NzyBu9JM76rRNzJwUZxz9GzI+3O5es2l5QykO4Pe8r6nGXUJPYZQeJrPnwLrnjfjTiSSaxbkTFXcP0OckewAatv9v5QbWVV2lG3avr4PeMAgG9bQaI9SQ5rbNrT1PRttDOJ05kzbGQ9SLk1ib5ZPt9tuE60gOK+tdq1vVRTkxgFakXLkvXAPgc4Tr2JZyaRAob5NfRJrLvX0uTj5FwPj51dxmLfnM/j7YjnbupZ20YmIWZs3YJM8b6TeSaxn0v7OIEsUH5/14nXaplE2/20iab9tDNCTWNcMp55C5KQmUmsyB2dM4nVINFxnO/iYppqlksvjQGKHoSua0d0TjY50jaRZK0zBjYur46xMolN19vcsrm/XLzP1IlNL/Ty8x/gZRITMq7JWse4LuSRc2shW1z5Glr8/OxtR/MxtH+cxTvqk9iWTGKOj3u5XafcqApJstgg7NS/SVNNok6Kv1URuenmga6tUyMcJPpKw0jSMcqZxIdOzuNl7/oq3vYv9270rjRSdjf1M67hBByUJZrzDBIHTSzSVOOrB04CAG7NaqxaAbNJtOUI1vTQtidEttsiUPS7qrup00Pv2NmlYnt2TVbNw76fZ1IKuZ2dSeTY5AOFNI5TD+eLfV6wDFcc7wmLVtaL4PRDWwv2+XSWIZ1OtXE3DZSf5JfTJ5HO2+6AyXWcaly022S47zoyU5ab5pPk1bdl18RxHGYp2ADqs8BF8BPkiySzS3Ge7eEaN9nv796mw7xOWZlEe3t2zWIT9KcVJljW56/S1G5j0D5GQYAo4PQ7LGSqfplEntzUvn9zyxu6TJOicgDsfo90MROr3V46WIFSR7Vur2579KzdO2nKh84s9PNWFgBYNYmU7cxl2kyDqaa2UADwwPG50v/bvVPDNSxASE2i3zzZNiFrziRmKsNoZQseM7gpkxg3y03JuEbkpqMPnRBDKNHxxneViO5Rrg+njYAmXBS4jCK+NYl2oMQJ1EmKw6lJLE8smm88C9aqKBlxtMIgc2RzfEBZNVCNmURrf+hzVFtn1Pc7NL+zHXmrtSXVB6n9vhNZkEjOvu0wGGibXvv5stcNRW5qbYMjL3adTNS5m3LqqtaCLYGioN0Fkol1opD1HdA1xmqBkZ23FEQ3yU2fduFOACYTYAfeTWYrdRSr1mDb5OeZxJqJZN7/L1ClRRKtzXa4xk2px31LW5MtOib2LcGlJrGp3iwdkElsCizrKGoSefLDct2YW0BqxvnVjfnWsqfp4Ix47RirJrFp4a4OWrjjupumWS9BTgbSPv5N2R56n32TJttzer6Xt7IAzLPKuU9itriSy00dF6pSvXoAbAeJcZKuqLd0D9LTkimSyE09axJtdVNDTbRzJnG1Fhg29HuRm44+rjKJKtfddxyv/rv953hv6ilnpDg1ceakXRrCZNcXuhFzMg2AWdG/4n03smoEfbGPP2d7sWN2rwrduDgtMFxrEhesQOTmrMl5txWixWkAXJNJrHNc3D1uVstOZfW+qdZQymQTlFppdQ8U56wdJNqZBDORqY4pVmNJbndk2mQid4y1WNImwK9PnC/2BMS35ckgqV1dTWK0ATWJZxlBIsnEuq2AlUmka9PnWutGNLleeVz6SYpd4y20QoXpxX5Rk9gK83PZ5TlS1L8ErJrENK0Y1zRkUaKgkFsfzc7/yU5UZNIZNZAEtyl7U20P7bJTTWJ1IT/rkzp4zOrHn2TIE50ok9fzguYwZJqLeMpN7UPOWVyM0zRv5cI5twBzT2bJTXVFyswMnBXjeysZnjXVwKflIHF6oVfKwLMyido8Z3K5qcP9pAj2it6ddZ/txGyhWDs13ysFKWqVBYhvPXoW33zELOyuyFKPsFpsWPhkU0t1ymHDuZzXJHbr32SQ3LTRuMZNbtowWhgmvlLO//w334DWZmJiT8DWA/sG0E80Oo5nDhmRLDBqdIYN3Ug5k0gAeMs/3o39D5/BnUdm8OyL9ziPO3R6AbNLMb73wh3OY8p9EjkPbWtF3mPcepjkULYqChSOZlbh5+/oIAoVQ35VrH7SBLR6f+4lKXZPtLEcp3g0247d762uthAoJrzVTGIrk1EFNRkACm5bYYCpfJJs6i13jrXYNu30HQ8nk1h8FlYT4NJEXqMd1U+i6T3H2xXjmiFkEu37FjeTGDIziVrr/FhyJkx0/6EWIb2a7cWpcc7dOdbKP0fLamS9WgbmzHzPuAdbExJWn0RdTI4DZSbyWut8om3X2tEiCZ3/U90IIaNxOVA9t3gZKXuSXFeTOCCR2LjglKQ6X0yswpH70ne3c6xlMrmOk8pyvz1eU3bTOD4LEhk1qJ3INHJnLXhoq5UL814+qHdt0zgaY7bNk3IWGUGHbdXJTWuyzQCwN3Orn8mMa2yZNieTrhTy/qIu9yA7IzuoKbt9jz8xu1x211xlAeKlf/ZVAMBDb/vxXO4r7qYFSWW+1XTPsKm2gAFqgs08SGyQm+ZBYk0msakFhvRJ3Dz4yq7oYTzNMGTwxZ68s1wCs9dyap2GDV3Y8wyJGFBkRjg90QDgh//oWrzsXV9ljbFXmzh1ar6ZRBrHkra6ZhKz4/WcJ+7Nf3fBVBetwL1Gim6sUWBL2VYGbu0wwHfs7OKxrL7Qdpvjyk1JMlqXBbMnyRN5JtFMknd0rUyia5CYfcfDqEm0Jw0+GTBg8CSmriaRIytbC3YQxDFhSlMzaeJkEntJmmdBfBqQU9ag7hyJkxRREGDHWAszC30s9pKSfHeQ4cRiL8Ez/+BL+Pn331S0Ugh4fRKNSYj5d90k2V60mWib858WZqa6LVabjurruPcEZUkC+e6m5fci4lQ3juPIfWcW+2iFCmOtkGXelE/kA54zMEkyI2a2J9F6oPy5eXtp/lx0DUjt3rUcuSM5eapcgsuQcioF6mjC6S9K/XXrxtF1S5n0hV5SMnziyYtpkcq9vjOpCTbqzknbefnUfG+Fu6bLeZykusgkZvvo64C/lXBVQDw6s4g3XnUHTs0tl6XMTRng1eSmJB2tbYHRZFwjLTA2Db6TpTxIXFz/1hmlGgWfIHGEM4m+x58ehkORm2bHf7zNq5GKU42JtrtkxR5nxjAyibFbQEo95J77pCJIPH9HJ5ObOsqo8prEZmlNPzHZl8ft7OLRGROw2W5zTe6mdKzPLPTzB6jJQCIft1JummUSgwCtMEC3FWBmsQ+lTCYlz2w4ThJ85ab7HzqNf9h/iDVmuVRL6hskNo/L5aZRuSZxOJnEYhssuanlLuh6DdjHwDUjDhTHkVbkmxYuoqDIJC70Yoy3CznHIMOJq+85BgC499jsykwioyWFLTcFqpmbIkgMMsk1XXM7uhG7JjHROpexudY62XLSukC2CCKb36NpkjbI3XSQtI948MQc/vBfvoX3fuVB7BxrQSkTuLnKP9P8ewvY5iKRR5BYcill3RP4NYnaDoCVapSuL8dJ6W8lVQgzcA6DQm7KMa4ZlIGk92lHATpRgMVesuK6YfVJtGpJ3eSm5udAAxQAi/00L8M4aWUSBzl+m/cvfn90ehFxYtxNWyNuTviV+0/gtR+9ZSjbsucvg87/6+47gU/uP4TXfvTW0gJQY3Z7NeOaphYYA+WmFCRKJnHk8a3NGWYmMS5lEt33ly4UTt+wYeMr9yUXt2F8NjrmY+2QffzHs/OE1e8q+944E4RyTeIA45oss/SsJ+xGGCjsHm+h2wozuSlXWtb80O4nKVphgAt2dPHY2eX8NeXawma5aZLqvE41tjKJZlx5Y7ZkCgCecoHpXzTVMQEiO5PoKTd9xXtvxBuuGtzcfuW21p5JHLRQsthP0ImCUp+5oQWJ1ufhBIk0uWNlEu0g0aMBOU22miTQURhgVx4kJiX5bhis7F0IAP9272N4/SduW7Ffud29ax2XZVxT10uQtk1/M0FiVpPYjQbK32q3l+p8Ec69BYYlN61xvKT50yB308aaxKS4/pvGDHqMv/pv9+N9X/m2eS8r4HNV5ayQm3ICIlX0zeN83+0ogFLcrHjhbspxzgWK9hJ158hDJ+fxg//zGvzyX38jb01Uctxl1GnSuDzbzMwkUgayTpJMrxlvh5jvxaXrJgrcg/siSHR/bhQOrM2tXABgqZfgot2mzdOp+eWycc0AhccpS1lz8OR8lqXGwJ6Mo8Avf+hmfOHOY0NdzAcGXzekUpq2FqJNltr8fcV5EmdO69yaxDQWuelWwD4hOFLOiaHKTYv94gQptAo8yn0S15pJ9JUEcmTGtI9jrZBVHB0nRSbRpyaRJzd1yyxRTeLeiTaefP4kLthhbnxRGDCMFezVz/Lviv0xze3Pn+ri+OwStNYlt7kgm1hXV67tc52uLdvdMKzNJGYTv+yh/qwn7AaAPNuzWk3ib3zyNnz06w/n/0/Hz6f9Ahf7/OVmqYtxzfu51EtKUlOAt/K/FnxrEknKxskk2tczZ8JELyXZVt19oZ+maGU1iYfPLOCf73g0zzIAJjtWd2792TUPlP7/WLZYEgVmsus6sS4b12T7XVfvl11bk90onwhNdfk1uXaQyDWuKfXOs4bqPNvZ/B5Bw34OzCQ6yE3tY0WLFT7GNZRtY7mbZgsC5hxhZI6VkSRzF45INu3TAqNp8eiT+w9hZrGP6+8/gZf+2Vdxer63MkjkyE0DW9rnMCY//s0OlPbnGG9Hudw0v244fTHTausYhtxUDXZ8XYoT7J1soxMFODnXK7fAGLB4R8oAwGQSE51lEkdcbkrJFK7nhA/VOv0mjmflL3GaluYy9H2vOE+SLEBfTW5avZ8PdDelTOLgMgwJEkcA+wHCWbUjg4wZptz0riMzuPfYWdaYkgGKh9x0VFeZAP8gkWQ1vpnEBY4pTPaQ6LZCZ0MAwHxvY1mg4pMl8qljXG0c9ZCb6ET47Zddije8+KkATE9N9zoWa2LR8NCOM7np7vEW+onGfFX+05A1sM+HIpOYWpPklavWFLjTxP3fXWKMjKjXYuPNP+PT3zyC//czd+X/P8zr5pzITQcEs4v9cv0cMMQWGNnxCxS3T6IZ02FkEn3v43QutcP6bE+aamhtjtnOsRbOZAsX9z02m7+m7pwEgGdctLP0/4dOLwAoZHPOQZu2g8RsP637UCH1ND8nLWezqW5k6gQ5hisluaN79gUwgWp9IGt+DjauMT+rC0eJ1rn5zsoxq2ekOlGAx+8ZK+1HKwycgwY7+xgGjGDb+t4irtwxMC0YuPcEqnd1fU7Zmawmx2m6vzzniXuwHKe4/dB05Zx0y4prba4l2hbt86r76GBcU7RlUhhrh0Zuqv36JCa63MrCRb5ebWVh3mfluMVMhbBvsoOTc8srAuCmXTx+tnBFnVnsW865oy03naz0LV5PSjWJA66b45nD7NxyXDauqblvmV9QkNiqf8O8BUZdTeJq7qYSJI48pZ5QjBsyGQRwT/7/+Odfw0veyTNOKWUSGZksGjfKmUT78wyy8q9CshpfGcM8oyddbpPfClnZ5lTrXJbGqklM+JlE+8Y2KPuS28C3I/zIU87DCy+9AEAmv2KsdAPZ6ltY/9Amuenu8ay58XyvMrFA/bi0yL6eXYzz15QnJCsDUvMZzGue9937Sn93zaQcs1xY6TP4wBlnf1fr8X0v9GqCROU+YV0LNLnaMdZiZfwpk2Iyibxz0myXH2xHDRO7vrUAsXO8qEn59Rc9Of93U8BH991PXPkcAMBDp+bz1wcDAnWtNZb6CU7OkUzb7pOIFftZbVS/Y6yYzNBiJqcmK041W7ZY7pNYY1xjTcaaaDLYsevfqrjUJJ6a6+HyJ5QdsM3xYEppA14WPl7lvtVEcf67O+Ca/TTncTvimJAh378mx+lUa+wca+GPX/EMAMaVczlO0c2yWIFiykaDASYhteOyfbSMa5rMy0huWhjX0OcziwIucwytTQ183qjeJUi0FmryGuCacYv9BN0oNPXNC/1KANz8jJpdLuaZ04t9JNQnccTlphMd8+wZSpDoWJOYB4lLcVnK3JQBpuCvKSvY5G6qk+JvVYLA/E3kpqNP1TbXFbLXHe2aRH6wMWzs5zRn4kqyGt9MIqdxeV6T2ApZN+M4KYJEbr8rwL9GzcW4ZrxTvuG1IkZzb1vH3zCx6yfG/GJXVqQ/vdBHkhSTpqY+WXGSYs9kYWMOIJPWNE+2cuOa7KE+1W3hZ5/5nXjjS74HQBEA1F07dtBvT8oBdxv5Kpxm7v6ZRLdxdS16ht0CY7ITsXq1kk1+txVg2fH6tu8jPsY1ZOe/olG9tQDxuJ1FTcqvv+gp+b+bDCfmlmM8cd8ELnv8LgQKuPvoWShl7iNNE/K7jszgkt/6Ar7nzf+Ky//Hl/N9oIzBoB6EFEa94Knn5X+j+yTH3THVhWxxLXLTsnFNto8DahKLe0L599Q4vI4mRQKRpBpnFnq4aLfJJP7c5Y8HALQC0/LHJWiw73dqgLlLFVvuGAXumcskLRxwOc8A6kPL6cFZ1CQ2Z8Tp+O/N7suPnF6A1oWT6GoB8D/sP2T6FtYpUBiZxCBAY30tffYgMEFi1bgmb9Xk8BXQokyxAOogN01rPltdTWI/Qbcd5iZY1QC4aQGCFkyVMs/SOCmkzIEaYblp1zz/h5NJdKtJpF6V870kv74GZanzbF9TVrCxJnFAJhEw2UTJJI4+9rXlI/fiBBs2HPmVffJzgpQ8kziiq0yA/2ejuQZnQm7DySTGudzU3QEUKNf2cDMpAK9GzX4gDTqP53sJ2lFQqqkCaNLkOCG0JDLNzY2zTGLWt+pMNkmwHfGq+w2Yh92eLGND10iSWK0zarI2VeMaAHj7z12GX3v+k/L9bKoJsq8NamafZxI9F1c4bVl826TYX9VqxjUrahIZRhNrwQ4SOec/NepmZRKtz8Ptk6gUCklmzfkImJrdJ+wdr32Ppkzi/HKMiU6EbivExfsmABRmSk0T8ruPzpT+f6mfYCkuAv26zJntLAoAL3/WRbjs8bvww08uMurcTCLXJdMONmqNayjbOeA9Gt1NrcWlKvTrpvN5eqGHVJsa7IN/+DL871d8PwDzfdr7PYi4EgC4LrD4ZhJNf0WzEM0KEtPClZNjQkbnv2qotyQZ63g7wng7xMEsIz6VBQCDsqsPHJ/DG666A//t728vOYCqmnOkibpsz8rnTbGQON6OsNAvG9c0tWoCjJHJV+4/seLz0vu5LDrZmfJBypWlfoqxVhEklrLUA2o7Z7Nn4eN3j2Nm0dSERtbC0TBqzH2YzBajh5FMca1JnLXm3o/NLqEVmqx9Y3Y7d91qqi9saoERN2cfARNASpA4+pTkph4BmK/c8aGT84xtuZ38K8eNvtzUviB9zF18g3ROWxDa1lg7dG7ADGQudaGxqeadW1kmyzNoWC2TONFeeePiGDnYxfZ1E0J6TRCo3O77zEIvzxABzdKyOE2xd9IUiJ+tySTWrbZWjWvqaKoJsoMXenjQ+/tKeDjZ7bLhkPs410xitacfwDNxWAt0Hk51I7aUljKJrvdXX0WILWWsM+Ao6l0VLt47UfseTe6m88tJLrd6aua4uzO7Hpom5NWs77GZJSz2iiCx7rqxJ5qA6Q362f/6PHz4v/y7/DWsmqxU543EnWvbaibJ57JPYtO1nWcfGz4buULuneyUspgc4xSSLfrUdtL3FTHlraFS/CBRm/PDtFdx/66Lhbv6oM02Dto72c7nLlRvNsi45vAZU4d777FZK5NoHX+Hj1c2Sqv/vu2eiGPtEAvLSSWT2xy4vfajt+CXP3Rznu3S2XGkhQSX761kXNMQbGit8xrxnWOtTDZqBcADgr3ZpRidKMD5Ux2cmaeaxCA/LsOoMfdhw2oSBzy7l/opdmRZ8Eenl7Cj28qv7er7ALDkpg0h26AWGE2BJQCEkchNNwOJZ5BCF7evA+JjViHyatjZBk5N3GYwrrEDE+6qKcDLCNqwahKzfey2QvQdH75AxUjA49zykR+GgVrV3ZRkQjatMHAOgJNVJoRA8aDdlWUFpxf6pZrEoGGSEKcaU5ltf55JTMu1jHWBJX2GJpomd/axml2Kc6MSwP+6IXMgF3yDG1d308V+uiLw4PR6WwsUAE92Il5WPDWTLU4m0ZYAsmoStbVwUVfvak1Qv2NHvQW6qpGpAtm1lk2SSO441aHsS/2EvLpQc3RmEctxmgf6dQ6geU3igDxdyJI7WplE5+NvfpZqEq3N2S0ymhjkbtqUSVwt2Ds1lwWJE+UeZ6ohIK2jdN8aYC5SJU7T3HCHW5NYGNcwFo60aYvQbqhlPDK9iFe85wbcdaTIVqcapYW7erlpEYDtm+zg7qPGeM+WmzYdx4dPmSBxoVfUfwVWKwuX478UJ1lLkGZTmFImsWVqEqvmOvS6KofPGOdQkiHSceS0TqrPdpZf0090pi4KsGuc5KZWAKwUtK73Zji71MdUt4Vd4ya4NPeWYuFoGIt+Pvh6d/hQqklsuG9RoL5vyixEH51Zyuu2m0pn/OWmqchNtwK+kzRqF+CbSfSdELq2KQCKVeBRziQmjpPdKnRMvOWmjIk8bavLbIFBK7DcFWEK1nhBovk53hrcNmB2qZ9PVG1YEqXK6iew8qFNMqZdY0UmsbRqXWPAASBvErxjrJXXYZRlW8GqxjV1NNUE2d/L3HJckS36PXhZctNUZ/LfwcF9FTsoGVS3t1QnNx2SPCmXm3Zb7ExiGBh3U9dJMn2eDqO2Fihne+rqBPN618D0mvyjl38/Pvdfn1d6TdPxnO/Feauk86e6+WvzbdWcj3R/+dirTRbw6PRSKRtcV+9EbzMgSWcyiYya47X0SRzobjooSMz+uMJcUOvcoXjlmPL2q5yaNxN/UicQTUqGOlZbpGqCMntAlklkZGXzFhiMBQ+ti/5+dZPk+46dxf6Hz+An/+JrpW3RMVQNQUpqZXL3ThTHcYc1uW7aTTJrml2K8wXuMODJTRetvqRNE3n7O5roRHlQavdJBFB7DVA/Wj7xAAAgAElEQVTd/PHZwrgsUGpgLXsVbZ3fTXJTUph0WyF2jLXQi1Ms9OKS3L1uHACcXYqxoxth51gbMws98xzP5L7DqjH3gfaKSjnWk8ShJpGeQ/uy+8HR6cXc6IuO/4ognYK/1eSm1XFp3Jx9BDK5qWQSRx5fuSmdkEueARinuXrfYYWkdlz22jjVIytH8K0lWqsDJUemmmRyI5+MYOgRJPq0wKDjONYOB46bXarPJHImMXUuddWHlNbIiv8DTHUj07i2krWpG2dcURV2dKPCuMaepKmVE8KqcU0dzZnE4jqcXeqXF428M4m8msQoyLJmDFWCcyaxl2CsVT4uISNgWAv9JEWgsoULj5rEFqOOznYg5sq07ex2o3FNNkm+4tmPxzMev6v0mtVqEgHgvGzlms63Jtkc3esfnzXcfuzsUqmutP66KTI0TXBqElNttcBwDmyQ78Mgd9NBxjWN7qaJbvxsTdlHgjKJeyqZRJ67piVJHrDAshwn+Mw3D+P+rD2KLdMMQ2Ym0VNuOqgmkXY71cU9syw3ba73o9e85Se/N//9ZIeClObjSJnEONWYph6VAc+4Zn45yTNSjXWr1jNirB1isZ9ktZ10/JvbIO3MggRqM0HjBmUfq7g8EymhMJYZ1wDA6fl+yZQNqA+cZ5diTI21sG+yjRNzy1jqp5jqrJ7J3WiKns9+i/k+2wKaF3jpOUT345nFfk0msTIol5uukkms1iSuKjdtAYlkEkceX7kpnYTcTCKt2nFkiyW5qUcLDGB0zWt8J+VrDRJZRjLZSjan1xWQyY3oYc90RQXM8XAN7ul14+3BEr3ZbEWySothm17n5NbkNgcAu8fbKzKJTXUbVJC/d7JTyH/SsrtpNZitM66p0lSTVZWblnqS+hrXMO4JJJMy5winJtExSKzrk9jgrHmu6SUpojBgZQSpl5pZWQ+gtaMDYnYIui338xgoZ1JqjWuyN44GLEAMcjedXBEkZtmUplrebN+N4U2AmcU+FvtJXiNYd93YAVoTUejublpqgeF4DZT7JK68J1TNdepokoAOqklsyj4Sp+Z7UAp5bXSxLV5NXEmS2XA+/uNtR/H/fPJ2/PKHbobWujSO426apshko9wFj2wxs+F5Y2//geNzKz9bg3TXDrYu2l2YN+Vy0wFmPpRJBICT2f28VKbQcEg+dcth/M5n78RiL8FiPy4WSRom8kZ9QO7WEfqJxtxSXMrk0uetkgeJWSaRFqlUlk10KfGptrKgfbLJg8SWHSQu5+dwMOCcPPv/s/feQbdlV33g74R775df6he6X7ekDpJaCSGU0BiQhMCWisIYCxFcDBhmbMAe12AzpgjWmMwUEpjgGRMNA7YZwxQYDLKEJIJQtpAsulupWy11fvm9L990zp4/9ll773POWjvc773PUs1bVV3f63vvvmffE/Zea/1+67f2Z9hYKnH3yTXje1Jwk1JvfNhGa85hsNnawjX88WhvPr1uSwc2CJGVWAmLtsCo5wG66U0k8fPCWrStJOGIxYJEos1MUmoLIzIk7LjPgyBx0ZpEWoBTFx9yRFID0jxPC6T0OJ1BHhZptSWxUs7dOQIaSfEGiRNLU3GNJOGjjtXaEP1IIqAdtKt7Wu67K1zDoYJlnuPs0WU8cW0fSilM57Vx0jlHnp6PgUe4JhcCfPe6bI3dupn0BAS1xQnRTX/yv3wcb3vgHAAKinOMynwhBVwgrG661KGbanpS9KEWtnmlMMi1clxqv0O3B2dUJl85SGLis+3Wm3WHuiJNknFO8ryqMZ7VBgGhIJGulYSAmeMVGdaXdC+1qVOTyDnJtIf5qJyxSCLV5I4S1U25PolsL0fPd8SgRF2jl6Wkx+WdCY6tDHtBvkR356ybpJLGvO/hywCApzbHuO+JTUyaWjqaZzSS2ARlet9ITHjkMpLoHv89D10C0PQEbH6bGKQL6rIGgRHOSVUrPHZlz4g2kYiQDsD6cyJ7+8fO43t+96P4d+9/FL/+3s80SCLV5PLjtAKu/vfZo7r+95Ere+bzPnVT8snObVJS0iYRSo/I19XdKV7z03+OX3jng61epRySDlhfZVDkZj14anPcojIDEpKoEa+7T62Z1wzdNKC4+6o3/Rl+5V0Pi+/fSDOsqEPYcNoCj/zxaP2986QVIaP7OGvuy766KdFNJeEaX03iTXXTz3tbFEmk7FIykpgvfiwgtQXGwVGRG20L000N2paWQaMFfBEFxJTeWnpcbaT8F+15GOsk0MIWQhJ3xhbdcG1Q5NGiSK4AgYQI1koZh/DoyhDX9qa6Po4QkYCU+W1Hl/HU5j7GsxrzWpk5c0puNG+pbkm/xyMpbSTR0k1Te2ICmo4M+OmmO5M5fukvHsZ3/NZf6bnXtaUkJ/XSDD83Va0D7JVB+3qXh0RPIpRiaVBgPKvietJFJCCkYwHAUpl23driFn3HLqbeVSOJ7dfoviJEjmpgjjVCTlJARPfAINc07YtN704TJDJOMv0rWJOYGGwDB+uT2KabNu/7SnQYwRvA3ycxF5JNZFd2pz2qqZ5HAt20I1wjiYv81SNXce8ZHRA9dGGnhSRrJDF+fdXCTWlrAil8Dgu+LpfWjJPrI/zqX37G/DbTJiKi3s81QwEV0NUnr+1jVim86Gmank19aNtIYn/c+x++jOVBgXvPrOPdD15qahLteeTGuXWrdxzXaOe1vZl5zYckUqKQyhu0KirM8aQyjIcv7eDTF3fx02//lEnatOr0pQRQnuFpzRw/c2m3pa4szVG3zihxTytIDPepnFU1Pnt5Dz/+lo+z799oW6R0ZvFjOcl14XjUr/fE6tCwCzacpDmLiofoplILDBXok1gMcFPd9PPA3DU4JWtn6aZpNz8tWklN2Z2bNqVP3zziobme9rsfegzv/fSlpDGLCtcsgiQqpczmkkzjaTK09P8xRoIrwwQkxR2XMk8T3AwLUchEKaVrG7iaRMGx8B3LrS3p3s59JHGKHadGS1Q3rTSydvbYMmaVwsOXNC3KrRvoZnZdBUrJJCTFvS47k3nrPKYkBACLZPrUTf/68WvtubtoW0rdXkSQaGtg+jWJKSrJixrR1EZljlrFIYIuLdGqC4bnqkxwky5c4zrJonCNj26aMcFl5548vjrET3ztC/Cr3/oSMwZgAqLKouIbSwNDgVvuCHe06aaq9R5nseqmdP+PygVbYLh00+Q5tucA0JotP9tBuunOtKds6o6LozL3++11hyml8OS1fbzoacfMcV0kOb1PYhMkprbAyBvhGhZJ1K+95t5TOLc1xu5krtkdvd/GBWD2/P/I1zwP955ZbymHcr+NVEO/4PYmSGzopkVLAbc/7uruFCfWhjh7dBmb+zPsTudGuIbuke69TGwfwNbzAu1AihsH2D2AFM9deq1GEvlr4Pb+u9KgpNL9T3ME9N53ZmPJIMU9uq8wx9Egx5HlAU41KGQLSRQegD2n1VfKXna9jM73YfifMTWJxPJZHhRGzMplVnEJP6tuugDdVEIfgZtI4ueLLdqnb1G6aarzD7SdwKQ+fbUyi+thPKT//P/9a/y9X/lA0phF1WUXqUmsatveIClD22waRFmKdULrejF103llr1uquuPyoBR/G6FyLN20yOJbYDgOcC5QZDT1Sf/76MoQ13Zn2JvOHaeJHzevtXDN7Q1liEQgXGeL6z9F70km1iQ2gdmxlQG2HbrpqCQkJX5jpeP7xjzwhJaPp0xyVSsURYM2L5A48ql57js1MK6lyPgfxAiBp3MZkyhx6b6LIImjQYGqVkkiIV7hGof+KRlHQaTvcZ3rv/fyp5maLhFJdxQg15dKI6axVMrCNUZZ0fM7Y1U56dkqc0Kk0pBEiW4XczkyJnComPPomqGbCge4tDsxKK5rPpGQrrntFaTjXd2bYVYp3H1yFVmm200AMH0yfbTFrtFzkyx41tSBDwSBNUpAUDuWpzbHLdRMqtN06xYB4Fte8Qy89bu/zPy/tJ5s7uvA6a6G2nexERGidg/03V27sqfRX2o4vz+tsDJqi4t0n1NNCSbUfmjWvCMd5UrfHkCK5/o8hmtJ3SDxsaYfpIuScnX6QBMk5xluP66vg2UJyPfkZF6ZxM0zT2s00Q2ApWTHjpOwvNSc/8M0OgcpSfKDHgvwJU7166NBjqtNYP+Ku0+Y93Mv3VQKEov258jqyk83LW62wPi8sEWFU8ihPpQWGI4TmIYkuip18cd76MIO3v6x89GfP4i1H+y036bH3Hj6raGbNo5ibDBFiGAqbWhe2wx07DxbwjUCIkXN4qU+iUqlOZJ5npmNuer8Pv01hCQOsT2ZY3N/ZpFExkmoa4sa3NYEiZ88t9OaMxfsuVQ3yWQkUT+/t6yNNN2Ugu1hGt1OGwWJ8pjzWxoZoqnOGucmtScaCa4MPXWylDXt9kksE5QWD2JUI0WiK75WHWQu3TSpT9mCNMkW3Y4J9mi99SUguJqgELotoQazWmFQaNEMjSQ2QaKpyeo7kpbKeXAk0Z231EqBM1uTeAAFViZIpPlIvy2kUirSTQUklzO3rleiqRLie+bIEo4sD0yQ6NLkk9RNF6Cgq0ZwZSCMo+MTHfPc5tiItAC2TpMVE/PSrfnzT/TNs0eXUeYZSzflLtvV3SmOrQxxZEXX5O5O51jpBlIckthMMcsynN7QiYEjDaXQ1/KEKIgGSaxVS/BGYl1cc3r/PXZlzxzHR9t1fwMhnsea+9OHbk/mtalvveekDhKJJukT1NtzVNx3JnP81SNX8HPveJD97I2ww6SbRtUkzu2e+K++4QvxPV/5LLzszuPmfZ5u2nxXiG7KBZch4ZqbdNPPfXNviJQAzCCJiTc/LQCpQYNRm0us21teAEn8ip/5C/yD3/xQ9OcPYouqSdYLLD5ucJfWg1A1TlO64h8JEKQGpRZJjA9IAX9N4nazYXDqpoSUxNxf9JEW3bT36NhN+8Sa3gTPb01MZp1z7uj6DIoctx3V6mOEJK45waWUofX4MSjznG37QNflxNpQI4kVBRvpzxs5wj4qJ9GSKAtdNfVW2iFPS5KUee5Fe1zJdddCQgfXyyyS2ASJEfcyPdd5o25K3xMep/8ulWnXrXaQRFaAxrknJePQbat2yI8Tm4I3wk0AsLFsn9Nen8QWShdz/8epm7rnf1DGK3K6dcrcmmCRRvk7OHXHEJJo0cf+e7OqxrW9mVl/+GOFf9/eZN6qv3PnRUaI76n1JRxdHhiq5epITm5J1uqTuEALjJGwJtC1JCTxyc39FmrGJSBoXCi4534bBYlHVwY4e2wZn720az7vQ4AvN4H90WWdXNwez7Ey6vRJZBgobk06JRUJSfS1SjFIYkPNdGtQy0JuDbW5Z5E5ChLz3K/cDdhnn2ijRIeW1gQSbyNGxkvvPI71UYlb1ofmt0lJErfV1950jtf/m/fhX73jUwurwqeaaYFxCMermvp+QPavxw7d9MuedRL/5DXPbL2vUfFukBhJN3VrEpXS9FNfC4z8JpL4eWEu/zypTtBpVJ/Sg3ARjvasUqZwOwVtq9RiSOJhWrtPZboCaBKS6JzzRfodpqgt0ueIbhob7Cml9PUepQWJdB6HZS46g9TQlqtJHCTUytL3a+Ga9vHNfJTd0J9/9oh5nZwmztlyRULWlwbYWCrxyXPtIJHLyJv/9TigoZrEW9ZG2BnPzX21yHNjKNCe+4MU/rYakRxSDhwUeTKVPM918CIFlxLdtMjjaHYHNepBmEI3tagwDogkRgY3qtMnUUASk9VNjUPIj5GClFll2z24tPAeJY0JEn0PQAySNa/qFr22zOORLHPdcn5NcGtNJeOo6/Y8BoJ05rcRneyEh24aI1yz6zRzlxx5QnxPrY9wZGWIJxr6obtuxfephBWzWqAFhrQm0PU/e1QjWE9dG7eSJNI9WddyCxJADlI292co8gxroxJ33bKKB5u2G0UuB3uAgyQ2SZI95vz36aZttJlExI4uNwGYpwaSGBw7Bkm08xsUHrpp02MvyyyVs5UkCSCJpHAaQjtp3aRk21e94FZ86I1fYXxCXwsSV0Rtb1qZdYzaS91oWySZDwDX9qYmyRBr81rZJKGwJ7pIImdcyYGmkWZyhivL9PtuTWJI7AYAips1iZ8XVrk31oKiMAsJriQFpFYCPUVwYl4frCbxMAqdF0US6TQk0XYXpBYTJY3QhJhjkpR8nqcJENAUVxLpppT95PoIkhm66YivSQTingGXkiY5TW7/uefdtmE+t9qlzblBonFQ9Xk+e2zF0rZcJbcercOiGJIVApLSChKntk9iarAB2IDChzQTkqiU7n01rxUGRdODM5HJUOY5BiUvUgG0i/RdK/K8qc+9sc831aVaJDGCbsrdWxHnpTbXLQ1JrOra9klknK0Y4Zos6zONavM7EpHEujbHWndUiJe6qsAu3bT5G0YS+fOolMI3/vL78Dd/9l0tJHF4ULopK1wjf4cVobHjQkgifSfn/FNCxidcE4Pu7TtBihRIXW6olCfWhji6PMBWk5CjcWXzzMVY7dBN57WKSkKb859n4ppAa9vysMCxlQEu7oxbSRJJlEeXTXiCdCFIubY3w5HlAbIsw90nrSpnkecO3bQ9bjyrsDutcHx1gKMr9rqtDNsCNH1RmLYCLu0hR1fCNYlUp0aCY93eqT7hmuOrQ6wNS2w1e6ur7tsLEjv7FCGJNGtJzI18FVpHM6fOm8ZJy10bSawMtfVcU/Zwo82CImllWV/4I2/HC3/4T5LGVLXCsNT3VqgmkdbTrmlWSOfFOkAbBTSa6NYkGvQxIFxzk256uPYb7/kMPv7UVtKYWinTEyopAHMcl5S6xMVoksrU9aQKtSxCNyU7jGLjlnBQkpNcN2Pi5zhtIYlp14xqdIA0ZCNVuIau72qqcE2Npm5SRqR2PEgibaoxzwAttMuDQnS26trSmAZFbihOXSTR3ettKwuq2Vg27/laYFj0KRAkMpdt4khiU+AGOEHiAkkI3/1xeWdinIire1NTt1omiIQAbQq09AzsNetSt0+izapHH24hM3TTZu2KUYJu1bua5y1+HF23FFVgF0nsNel2kDXJOIpSCEmUUIN5Zeu/nnvbhnmdxFcKxpFUkUkS6b585PIe3v/wFTx8cddQ0ss8S+oL66qX+hRYQ2gngNY1oGvvqwnNBHXHyzueIDEJSZwb4RQpAJgZR74wgQngrHcJSGKlFIrM9l2N2eNcuq+EANOeWeYZTqyNcGl72gqIDAWUoUl6bv/mueGRRKJ7un3pWkhiZ5pUF7i+NDAIG6DFaOj3AQySqNr3CCGJlCDzXW+rblrZ30t0U0/y7lrz+9aWSoN6ucmtHgW9hvkMYGsRbd0z/ZYOkmjEVnj0y9fSyFXa3pvMcbwJvM9vHk6QaGoSD6lPYpHnorov4NTplwKSmDHodj33C9AA+n0XSQyJ3QAN3fRmkHio9kP/+WN43c/9ZdKYeaXMguKjifXGNVkLwELYMUY3YBq1tcaAbv7IOSqlFf6WE4UcXAs1Bb8e5i7AaUpu+u8iYjeLHMutSYwJpFy56xQBAhqXiiQSauPb1Hx005RngGiMozJ3nNb2OIU2O4PEI2wLDP06Ry0jh/yL77KqY2tOcNl1tmJQCglJtDWJ2gm/2tQKHoRuKo1RSuHy7hR33qIdJq2mamsSY51IOlaRZxjknppEEUlsz/dGWUXCNUQ3jUimuQqAC6mbJtYktlsA9B07E+wFArDuFC0iym/z5LR2/ZFZpcw68+pnn8LL7zyO/+lL7sQzmnuGcySNroJnjj4k0UUbnmhq6WxT9kj0y0nUcI68pZvK30HT59RNve1tsowVQLm8a9E9bow7b5/tTysjnOKr2wP0eb71SD+5FVsTCjjCNUVCLW8zHQpSOPTRZYDcsjbEpZ1Jq72HTzk0hCRKdNONJkg8sWopv26ZgtQmoiwynG3Ey77iOafxd150Vr8uUNDdejTAqsq664n+XH/+lCicVrUuH1L2OvtUaccNwrw2Kk1y0UUSe3NU7XvZ+BNOgO+eg+78aG3rWu5JQOw4LTB2pxWOrerrcf6QkMTDFK6pGmV0X+I0SDfNOLppoLYQ0EiiW5MYSzet/HTTAH5501IspS7QNaLp+VSsOJtXNdZGJa7Mp9H9zZRyWjAkqptSjUjsHOl0HARJ3J9VOJY8Ks1iGqD6xpHcvc+JIHMdxzTnv27ukfjMrus0DIsiiTYK2OsWi+YSalM2NRTKESQgI0rMOkM3NcI1EcebzCosDXK9kTYf725SSrWdVsrm0+LMbYjGIWzee81zTuFH/uhjACxti6sZoP/t/l7XJEoU1QRSxvtaI0ZAdJRFhJGkZ3Q8qzGZ13ja8RU8dGEHW+OZqUFLebYBq5yrqWX82ie2wEhAUQ5ipBKYVFvYQkTiKdD0WyhxF1//5ReucZFNyTKG7ti9l7tmUJsukljX5lnM8wz/zz/84tZ9bZ8be6/QsX2iMIWnKbhbt0SCK2UApe6aOwcOEYypSeTqxmKCxDzj93+LJPZrEqXzz9mu09/VCge1P1PVuv1Enmf4wjuYGuwEOjk9N6ZXZVSQ2D7/HLJKtO0yz3DL2gj3P7GJ46tDhm7KBYnysYs8A5dP3tqf4UiDXNH6CujgyDJJ5KTMs06v4wM/8BqcWh/1xHW4pIx7j/zw334+TqyN8CXPvKUZZz/Xtcms1n1q5zX2pvMWulp6knCzusbaoMTaUolPX9T1lnnmC7bbqPgLmlr913/R2dbr3fPfrUnsWiHc/4BFZgFgfzo3pSYXdw6nJvEwW2CQwJJPzI1qFYdSwM0K18TQTTtIYkjsBkBMn8SbQeJ1tBTRB9cslTCN7jWrFY4STTWxvxyQTjctC4LR4zYaK8DRIFILIImLtveYV7WhL4aMejsplU6lJZtVNYoQHQBdumkitS/LMCwbZzfiGrhIQgrd1G1lkTJPyj6XxkHriw0QYsC1wDB004h7eX9WtWg8nJNcK9Uilh1rnAWqi+Q2xK5D/vQTq3jT130BPvLYNadvVd8BUlFOMl9bQsEWnROiDaUi8FSDCsj3B53/W49o5VbqyzgcFCgTnm2gSVxk/nVrX1A3TQnaDmJW8Cke3TOoWJ6mbkpfTahlrEPuyvtzAhxRgiuZD0nkx8nqpu12A93Eh2k54wZg5rPiFL1I4q5DSXu8EVzRqswybatr7nniaIsxgawvceRvwSDQTXcnrQRQd0z3WJK1hVOaeTHBDc3xRU+zqVVSqE1pO0M18Cl00y7dl1vG20jiCJd2prj7ZB9J5GrpSg+SmGVC8DWvjd6Dew2OrQzlY3Wem9MbS6336Tbw9UkEdCuSn/jaF5j/l4Rr6lphWtW47cgSntwcY2cyN/s9oGv1petGz+raqOwhufxva8/ljuMr+Oz/8VW9OfaQxFkgSPQ8224LjN1pZZ7nw0D2AOtPLHq8WVV768Fdc3156XjTqmpdo64VTMmBppsG5tCjmzb/vkk3/dyxFAfLNaISpjtpyhFJiF/8yVKFawaJgaylLaYhUq7tLxgk7iWMI+GOIs+SAzey2HPZFq5JudZo9QSMUwCljCgM3TQG7aZxy4k1iYSI+BRYt8dzrA4LdoEcJgjX7E+rFjrF0Y1ItIfsNc85DcD2eOI2RPoKd3ZveMkdrc2eq3+JQimEjZTonkTBpdYUS6ZPYmxSJnw/En2bHJ/t8cwignkenWzS80YwuSX1SUwR7TiI1UbwKYE2aihZbjAb8bw140ZlfLLDzDECSfTxFDgkKxQkyuqmfqeIQ0SiahILWYBjn0ESc2IlJKBfepwObLvnhP7lVzfto0ShfpP0nRwofqVRyeRQYK4mumsXtsbY3Ju1BOAy4bq5SNbpjSX84jd/Ef7kn36ZSVoUCcI1tN8Mk5BE+7sk9WKaY5ZlOLk+ws5kjsu7U9teyIMk+ntw8nRT95wc7dQXSkH6oskVLinKjuscj9bq4w0leW9aGeEgGic9A7MmGe6Wb2SZ3BbKlqDwc5TOiaWb8gGHhBwDOjBcHhTIMh0w0l6xqL+cavRTFg0SUxRO68aX97FrNJ3ftwYxgo2qiqCbZgLd1DOuGATppjeDxOtoKVQt1zQnn6SO42mjrihMStaabCG6qadnj3SsReimVAsRIzTBWUotY9Vk43zFxuy4Bc4lff/SILX/lKbblJ5A6r9+9gq+8Ef+xEhLm82uyE0AliJ4s7yIAEeWeVtZbI9nLIoIICoAJkl5t7k0gKbvXvuzdYMQk732+WfwwR98DV7e1BlaJbd+kJjakyu6JpE5/RSkkRNIaF8qkuiuHdIzSojNmQ2LJM4rXUdRJDa4rxpa4tBTNzYWW2Dwju71NnISbYuh8PFcRCSlJpF+yyhRqdpFDbhEQmwCoudYO8JV0hj3c2TzSGe3jcDrvwsjiQ7aQHV8tCYnt8Bwz2Uykth8lkUSPYGzgGRd2pkawZPeGAERJDu/NcbLfuKd+Mf/4cMA0Go3ADC1q1UbyXrt82/Fs06vm//3NTzvGu03wyJ+D6Dfn2Uear0TtFEf2o89uWWCHKlO00XbOZOO5waJLSTRobh2T3+3bq9rnCgSHSsmAdG93rS+U6uMncnc9KkE4BWCm1U1hkVugmyad1Hw62ut/PeydG9NQ3RTz7M9q2qMBjlWBgX2ppX5rpSE5EGMjhOr0tu1a04vypARK81Hk5/Oa+PfcpZzIlj/HemmN4PE62iLqicZSlRCzYCRyS/TxC0WQb8ATaUdFPlCSOLSAsI1lGlZlG66lxIkKpfum4bkkkU78s33rw7LJHVTQzf10OYeeGIT1/ZmuP+Jzdb8ykTaHK3dqQhw1yHnjrUzmbd6r7kWcsh/5u2fwot+9O148Pw2xrOqpQ7GZd+6NYmAbjTdOx5LN+V/I43rB4nNPIJIYv9ckgNEgRSJ+ywlCtfMI+5Hei5OboyQZcBWQzfVSGIik0GRmq1HyW1WwVXlJTs0ukjtVbgAACAASURBVKmyAij6eDF0UxskpvQltTWJaUrVLkrCBXsxwU3G0k318SUERkJzZ1XtDYh8CPyi6qZ0Xw7LHFd3Z2beKftN9zx1BSAsJTwtALbKj+lI1pXdKStaQ/MD5PXudz/0GADg3Q9dAoB+n0QmAAjN0efIP+eNb8XvNMe05Q3xSKJygisuAae/17aJeO6tuh5uWtUmcWhowh6UlDNJ3dRtSr/iJBUHRe5VUqXfwR5LQnJVOJBlxzX/T7TgvUllBLdoHiLdtEnouHtq4SCJ3ectqHgsIolNkCi0bciFIB2wzITlYdmim6a0WzqIue2LFvHRSUguxqiWd1jkorbCrKrFekRASHjUVVjdtNsCQ0UI1+TlTbrpYdridFPbAy/aIazaKF20mIzzsWQkkTbtSMeOFqRF+iQOSLV1gdYeQDszHTLjJKe2AHCpu5G/jZzUlVGRtGCRA+ALpKj/3YMXtlvHcoU7YhqYd5HE1CDR1+9wezxvZT1d84mZKKXw8+98EADw0IUdXZPYQxL7TpOfotc/ly6KJBkfJMagFHwvKeoBRud7Z9KpSYw9/875lp5RkiNfG5VYG5bYHs8MZUlT+1KQ9NrU+0n3//60bqhG7RNzWMI1um7SBqVpdNPMqb+LGNdBEpNQmwgkMYSAcc29gTCS2I2b50E6FIckhpF0H5JIQeKZjSWTudeCW2lBYpbZILB7Lm0gK38H1wMyRriGC9IB3W7mOCNa436f1Cv0yU6LgJUAJXPe6dPXNY0k8ufywfN6Tf2pt35Sf3eTuDDMlRi6tZNcKZjzqOdog7a7T66aZ6VLN+XElLzqvpzYB9oofW8NCtQkBp+bzuHmVZgS6zveRhPo7UzmqGs7Py1cIwSJDXrcRRIpx8PVPwLy/ibdW1a4RqabSmv5rFHvXx0V2JvOzXfd6AQhmXsPLlLytJVAN43xJadzP52f9DFaFkM37dYkEkLoG3eTbnq4ltLPzDW3B148kki0RRKuiRvnPjBJIjnkSObxCqzdmsSkILF5iFJqEtuLQRpKtwjd1L1W8ZTA5pwMyuQgPRQkXmqCxIcuaJUztyeSGZfQFHyUGiQ2yQ6fAI0vi+aTCH/0yp7597mtsVCT2B6jEBL7aD7njIt5jLj6C4NSeMLSMudl4YnuTPRZ6pVl6aZxz/asRTf1I4nLgwLrS6URrikbhzCpBU9zT/oc+fG8YilKkkDC9TYSk7BU5vhgzyclz1lX3TSFcUHH0VSj9vsK4cQF3yex9o6TBVDSkcS4HoS5B0mcI8uAk+sjk7k3SOI8Pth2f2uRdemm+m/oPALtNSFE26Vjcc/2tf0ZjjKiNe6xpGfgwtYY955Zx0ufcQzroxLPOt2tpW5/PoS2+RApYp+c3tABLSUuBikMFDq/DpLIBUR0Hssix11NfbhFEgUKaA1DoUz5bbXnnEhBuvv8cyahnXUASfTRVAGYVh27RDdtHkEtXCOjUoMiM2MB4Jb1obi+hlFS+i3t18mf8u3dfiQxM/uNRRIPh266aInVImPcGni5JjGAJHL3ckyfxF4LjGbeQbqpPwi+qW56HW2RPoCApUSUCTWJBklMpHIuXJNY6+xymUDJdDPrWZYG9S9Sk9j+bfHOJ9US+DJ20jh6oGOPR9dtZVTgwnYaaun2/+IbN+taHgoS3SbQKU3B3UzqsMzjhWsc2jTA00mqWolZNJ9E+Hs/fdn8+9zWGPuzGsdX7eKXZby6qQ814APuSIe8cxpjUIqQuqmhmzYo+GiQHmyQyXRT/d2roxLrS4O+cM0C6LZvQ5wLG2JKrd9BrK71fWXu/4jfR9fSvZdj+stZddN4xxqwlFg6ptReJVTvJDmfUn2h5LROK4WlQToior9THBaoSaywOixxZHlgEoNFlmFQpiCJaKFN3VY1sQJAQPu3hWi7NI5Fsiq5vtO3lgPAhe0JTm8s4de+9SWolXXQpR6jXVXarvlqEj/21BYAm9Aln6TwrOVds+JFcisFYk2QHW965hGKJiUuqgCSmOe8cJCLXALA97/uXiNgk3uCbUB+brKMV9Oe134kUaKu0/9vNIHy3nRu9nvAL1xDdNMzjgLridWRTNsNMGVuhLopAQzHVoa4ujc1fmBKQvIgNq+1wON4Vi9EN01jfFkxN2mc24eWM7kFRihI7KqbNn5b5qudGQDVzSDx0OwgNYnUkysVNSB102gFuBaSmIIa6OxyiiS5zVrlGHooaZzRhpiCJLq/LUm5tcluDhMcEkAvuMuDAjuTeUJNaEM3Hcb3LQR0ADb0NI4HbE+uBy/sGGEjwC+Jzc7RoduNElpnuCq9AI++6AXbv0H1VUoVfuqtn8Dzz27g6u4M5zbHmHTophzdRSl4OXqckxbjkHPKfXHjeEoaCcAMmhYzO+M23TSaylyFn21CEleGBTaWS2ztzzW9MM9RFnp+dcDZMcerLQVdCr6kDfGwgsRK2d8GxDkmFklAkpNs1E0TEWBdx4LmmH1HPpbK3EdfQogIv5bMq4Cwgpdu6r//pftkfzbH8rBoqTSmC9e0haq6iL+l7YYDYE6UxxekSHRTX52aJJxCdr5BErutnHyIlB9ty0UmCZVnkOiZTq7YtTxl32jRTbtBSieQJTEeQzf1/bZAkM4F265yMAB8xyvvbo1x503WbSzPGUdvDYnrhOitJKyzPZm36ulDwjVlnuPWo/1aey6QDSaOBP8ihm4q3SPTud4DjiwP8PjVfStcc4hI4sqwxHg2xWQBjYvYHuR0rDzT/uuOUPI0CdBN2SBRRQjX5DnfAsOLJN5sgXGotmhNImXkh2V8Jp8eyOUD9ElMUZcyDbdT0E4XkUqotwSscE3KQ91CUhIDsKLIvDUb0vFSRXnoHlkZlknno5vZ5TZEqkncHs9xcXvSokmlCIW4dQvU4DfGSKWXqGrcvezbSKXAYVYpXN2b4W899wzOHl3GU5vjpk+iXb66NYluVlsyLuCOUillFvG4ZuJ+JBHQ9HHaXG6IcM3EBom3rI1wcWeij19YcZfYfq8kuDIoc7Gdy7ShGnXNdx9fT3NZAgBQxbSOMeJFaU5yV900ZU2m81HknCKh/huqSZQEOFKft7kH/QJ4uiP91FAgK51GjSQWBlECGrqpp5F41+q6TTftHi+ml6lBidw1oY5bSzgk0YcuSWgPAPzOf30M57cmvR59dCxunE7ayC5dWchIIq3xF0gZu6GbGlXgGMEnJ5i2wUb7M11kj5BLSvjJTeADVFqB7ujWJHaN2qR06aYhBVCa5yJ0X/f73XGA9gnyzAqX0efLPBODe6IuUt9b1zjk3iSORQo6vy5PA3RTqU8ooNfBYZEZJJF8oEMTrqmVTbguEJhOEtk1IcEtrUjrv09Y4ZpgC4wu3TQSSQzYzSBRsKpW+Nd/+iAuNRS+GHOdYqkYXToWiYtE90RrPreUmLV2KaApWfx5XeuMfMIcTSa7CYAXqklMUCltifIkIonUFDyVpmr6VCaIuwB6c5xV8ZLM5AD5EJire1PcdXIVgEYT6R5JbgreQhLjEc8Y4RqqY+NMkggnZ3tQ5rj92DIev7LXBIlFa6z702KRve7xYpzdrEFt3Gc8RjlRajDtBs7LgwI7jZOwPEylkrs1iSEkscTpjSWc3xyDFAd9NGH+eCooLjITsqY+RPx6Wkzvzt4Yx5FKSa7Qs0WOVAq7Q2rbAMBATYsgG/SdnEl0x1ld99Cr1jiGEhiHJMrrz950juVhaRQegQZJLOPr9CfzuqW+mHeCPWVe96Pk3eDSBunpdFNSO2THeBIlb7n/KQDAq559KnrcQWoSaY3fm1bYbZq5U5AOIKmWPctgkHGONuomILoK2qK4S6jej6FpA/2gtDeOCS7tvikOQ54LaGfgGdWfa79ukrlFhtVGTAxwgkRPrThRjF3VbjNH5rdZ9e7AmsAkINw5cb9NWstJ3fTYygCb+zMjRniYdNNFdDHIUntnG8VvwZcM1SR2fRkADd00EK6JdNNATWLAbgaJgv3Fpy7gzX/yKfzUWz8RPcYNTFJUlGzdTHzW1LTAWLAmcVSm1d9RdjmFktmtbUt52GitXVRtNLXfYZGn1b/QOHP+Ixc8+n6zaCVc7zKXaTyAvkbPuXUDgK5LtBnRxZzdPKOaxEThmlxGUnyOjCQRTottmWd4+olVPLk5xrW9WadPYjoiyG2IJBISQ0lrj/Mfi+bPXrfa1umsDAvsTrvCNenIvZT535vOMWpoy6c3lrA9mWNzf6bFXYq04MbUMnoo6FJjdkmi/Xqb2bQDwjUfefQqvud3PorN/VkrwZDUOkbZtVUfazHhmkVqEjMmAREKEr3qpgHURo/rB2BeJNGDNkwrTad3pfyPrw6TFL+n87pVM9UNimLWBKAveBPDSpBaANC6LR3H/X7Xnry2j7/53NN48dOPRY87iLqpW3d+rVFzdJHEFOEmX3lDN2gjpJR+k6Wbtr87CkmUgvRAcCkj8H7xJg7t9CHwRnFUQvfyDCujwiCJ9CxxawKgr7+uSbRlKM8/u2HneAAkUWLKSOfSV+86m+vzcnRlCKVsovKw6Kb1AkGi+2yliiCGkMSQuimbcIqhm/ZaYETQTSOQxJs1iYI9fHEXgOXMx5jrgIxnlQkgQkZ1MwXihVrmnWAjOvuvKNtdYH8a3yaCnL20Xo42Ozgs0+im9FGJxsaPcR/sBYLEBeimhlqWrPiq76tpVUfdJ7T4+JDEea1w25ElrC+VeOjCDl5wu+5D1R4XQRtqPmJrEtOEawpvTaKsnCg5CBTwDMscJ9etnPwtjrR8F0mx9M80+o8VoIkZZ1/rKitylgsbqYskuvdCKkvAZRf4+iTSmnHmCCkZ6my1TSTE0/sGg9yb3CLBq65J6ofX2/rPDT/Pb/jl92M6r/G655/BqpHjT+vn2A0SUxSnWz3RJCqz5zs42lxIlVMWCWmLi/THMUmSWLRTRERqDPIMx1dsT8Fb1kdJLTAm87pVM9VtSm0RQf/3dGu5TJAeCDZ6WhMOk4YdIyBLSik8fnUfX3LPyaRxMUhirfiaY3e/pBYkhSP4FMVAcZKLUiuFbrnBd77ybozKAl/34tubsWDHBRHBnG8v5PZJZMdljJKqCYjEYb17C7DUdskkKiet22WeYXVU4lqj7kuJLZZdALu+UELnw2/8yp7it9gDUghmJbTTJqr43yYhuYD2cdYHJY6ttgOSw2iBQYH0cmKQ6E4tBdxQSu8bvvKqWVWbPYYztp1LPV+gBQbRonx0U76Ha+trg5/4/6k91kjuc1xvyVzKYVLrhtoiMLHBRg9JTHDsAO3IpDyklBFNQTtdJDG5B2Hze1LGtEV5EummeZ4kt67nqJIdeUIcUzNbJEnu6y9Hzt09p9bw4IXt1vlPQhKdTTIFSTRCJrmMSPkcGUndlK7loMjx9BOr5vWvf8kd5t9ZL/tPr8vzZWurIlCDjHFkahWmsRUMRQloO0CuGA9RmVPovjROSuS4ySu33olaYNB8Yqz13FSKRUSkrGnpuY+vpxkpfw8FGrBJniu7U5s1z9KSK1bdNNyW6ONPbeHTF6lVjdMnkUGkYhIXktMKhIOUPnKp/A4yc+1iAjBWkKExYqrcfmzZvLY+Ks29FWOTTruVrlJsDCWcGxfHSuADG0AO0qX17ureDHvTCmedcxEzzodauvPgAo5pK0i0LUgskhhfk5h7GC9dddOlQYHvetXdjnJrf1xdKyglo1h6nET3DScu+mgbJbcDlEDmuQkdS3+/hNLpfoeXd3WJE63/Ek3YBJfNw3p8ddjuHczMMYQkSvdWSARLQnIBqknMcXSlHZAcBpJIP8P0fI72r+3nkuimjr6IiCQ2rAnJWFZClLpppyaRAsabdNMbY49f3QcQzjq65t4UKUW5VkpeFoDoWrcFRiqSmBwkVprWkJLZbdUkJqqb0ti05t7296T2trF94tIWhGSRCoMAl0nzpODK10uQ6Eb3nFzDQxd2WzSWJJVGZ0MYlXm0uhcVbfvaDcSo/fWcLSfT+pxb1/FNL7sDf/CP/waOrAxaY91hMY61FOy577HzZDb7rrIiZ2XO1wFXDk1sxdnkyzxP6t1pkSwZSXSD9FMOKusG9ynHKzKYInxuPZHqL/JcHnM9jX5v1gR80nNK6+il3UmLWnUgJNFzHn/g9+/DD/3hA3qODtohOZ+APyHM1bEsKlxTK+Xt98nd/1GBbDNHLpkwq3Uy4fZjK+a1rKkTr2rFPjddm8zaNYkagbHvx8yR3u+yBGg+vjGp9V9W3bQ97tzmGICcoJZUoMNIokydnsxrHF/VTjwFia2a3MQWGDF9EjnjEhAmaZlYkwuEKbh86xj7neLxmOetDgSyUoLX1vvp9Z9UyimZJ4nykK/CMTWAprxBYBcEKehdNkPtHychuYCmmw6KvLXfAIeDJPaYW4kJVyCdlZZnmTe5NQuqR/dLAKDqCLqpVJPoc2ZuCtcsbIQEpgQbLrycXBPXZLvjkUT9uUV7qQ0b4ZpYgR29iWdehTTpWLbfXkrgpv8uSjdNRRIpkE26bpVFElPquIBFkEQ0TYqbYzOLOG1Szzy9hks7E7PZtBGReGdXO8nxAkfufQzwdZqVR7hGyrTSczUsc4zKAj/5d78AL7zjaOszedYP2gA/RY8TT4kVoHGPoceFE0pi3ZJzTlp0oUQE3g1SpA3KDUiOu3Rdp01E9L1cWSQR4O/lmdC7Tao/vd5Gzw3gr5uh6315Z2quUZb43Nh67/CacHlnahKRLtrBZeQNKu45Nkc3DUn5S+0GiDIlGSv4ZJ4bzziBTg5YAY4zncBoUBICHH4GJvO285VnfJ1yKO/bXUtikdzu7woiiZJwUPNblwb8RfCq0nppwu15uTaZV7hlrQkS96dmfoRSpQieuS0wkmmjzLgQRRJomCQ9BF61nn/peH20rS2iw49j9uCALxVucN8gid0gUUASibkmI9VM4iICEWTnGAjUSybYNvOsagzKHLceWe68fnhB4nJHIClk7jOSCjiYfVsYp9k1oQRENwMx92cJAb34LtICI2A3g0TB6CKlBCnuTZ+SJaEMoG4vkRZs2BYYceMoQzFKGFc1dI8yzxtKrDxmazzDL7zzQcyquqWIlSpcQw/34nTTlPNfW0psCt3UQRJTxUXShWvqlnBNb2Nz6o/uObUGAPjk+W39WpEmQOBSUnRSID4B0VZS7Y+j5r+ciZlWgySGFMEcx45eT6wRMZSpACICtLN9KqImsSxkmXY6J0tskBj5bDcf81FdXAU+6stFczPCNQnXu8z995YoXJMQfB3E9O/V/5bqqZVS2Gvqs1t009wRYUpA4Ak59bEStsYzPHlt3/QzpVPEZeRJTCk1SKE1ItTMvS9SEZkk4ZIrPgRSoLIBlobYRZ1T0O1ppyax61xHI4l51gq4o+imOVMTGhmkc5RMPX+53QAg1ZKGrxt3/qfzGres6aSRSzdNa51kjyOqlAaQPY4pE6JIAn2KMGDXw9C4/nm070nGismouH3DJybjtsZadoJEqUwB0KrfnPFUWv3XF1gCMpLoQ8UlgGPa1BsfW+nUJB4C3ZT2stSew66a70LqpqXc3zWobspRd2PopnmBG9EC46ZwjWDkmCUhUgsiieRIDfJ4ahl9zsjkJyhQApYSVdUKId0UOpZWN/XP8f/804fwS+96GGePLeNMU/NU5jlGnuai7DwXCBIPKlyTSjed1ypdpGJB+gOhDfLma7Ot95xcBwB88tyWfq0J7oG4GjB3Q/DJpvfGKdUkEij7zwdEqUiirUkMOclpyIbP2fU5hDSN1JpEnwLiSnN93GbiFCRGq8sSkjUoxKDGbS7tXoelQWEEEKJb3Kh2704OFZw2WeSuHWaQaJDEgq/5nla1cSgv7UxadLMiQbiD7p1BAJFVSmGrUVG9tjdrobtcbVVU4iLzBBsSapD3HXKaXwwC746zSRl5nK+eeu700/zNb38ZTjSoVqiW1LXJvMKxVVv31BeuCa8JQB/NpdMaouBy7A7AhyTqv93TEaQJC4nCeV1jNPAIYnie00krSCQGinutY2oS7drpS/j5gi+uBCBEkaT3RJXS4L7Rfm0ehSTyvXK9+4ZwTtyyEFfQxEUSpQQcYBMp3PH64kb6BTHY8yCJ4fPBv0f+rZt4kn7T9Ta6bVdGiUGic41S1E0pweZtCyUkTsnYcxmlbtqlm96sSbyhRjdTShZh1goSU5AsjSQMCj9K1x0DILkFAy0SKQiYyVgVOrPuG0PzeuLqfotrny5ckx4kLipcQ9mfZLpprRxqWVpw3+0PFTXHPFzXUOYZzh5bRpFneOSyFl9qSZnHICKdmqyUvpgU2EjH8jV8lgIHV7hGMq2caP/fMC1ikMQWJU3/9TmEXCY/piaxyPvZfzo+OYRuM/EizzBcqCYxx6yuWSr5XKB/Pu34SnILDFMnKyAb9F1c/YVvzPU0Eq4B9PrFOSbjqT2/l3cskpiqbtoNmqUxO5O5uc+e3NxvNYHnsv9RCQ8GbQjJ1kvqpgrhgLQ7LkRjA2QHFCCGgZ7Qlz3rJJ53m1ZmtvdkHN3UJ1xjnu3Ac5p1nDQVcf67YwC0mDScyW0iGkc+GNz3g41QIAXwz9xkXmNjucSgyLC5b/v0+RJ+XWu1wBBq513WhG+O7nWrDJMkhOz1j0XvyeN44SZ3LtI8OQVQH7XVd04AHcyujaxDvzzMzfyVYujklR3HGYtuB4I9Trmb/t+PyMqJtHmlDG2c7DX3nkpSkl/U+khiXMDX0rdI8UEbP21Q5KgVf04mMS0wehcgQt201wLj+iCJN4NEwcgxSwkaXGpqCpQ+qxwkK5Z+6CycpQfq75pV4IuvNaDvLpu6JZ8TSV/32NW9Ftc+WbiG6L5JaqP23ynHIgpk6Le5RjSxJVMTGu9Y55k9/ymZrfbmK2Ujdc+kU+sjPNHUPNG9xY2T5gjAKO5G1yQ2m6RVyWSEazyOjBQA07n1LaxZtniNVFvcwmbDJeMRyDCSWOR8HbBbp7PhUkDztN6dtfNsK2GDkhT4nnFixVy3WDSdKNCSSiZAWdP+8XzUt+tp7v1WCHRTV4l6azxrBTyp6qZFpkVyfGvy1tgyKs5tjjXa2tzbnHCNqUkM3JNd359+q/i8CdctlPDIsoyp9wvP0RekzBpKWtd8ipxd67bA6KNL4aBBj+N/WyjhJAcboZY/aQiYNC6kbupF/Jtzt7E0wFVG3TR135CoxV11U3GOzrBQsK3fY+i35vzLc+aYMvOYoJQJwOoAAm/6JPaum00KuC3X6F4uhWtA40rhB/KKx/5gzyC53Xu59q8JRZ57eqDa9e3X//5L8eY3vBBHlgdJ4o6LGs1pkb7UZLHCfXQ8N1HO7d0huinL3qrrOLop1wLjZk3ijTFy3lNpo/bf8Q/AvK4xMFLyaTexCdwS6Y60AMXM0zrpDdrmcZgubGtltocv7rbQrcOoSVxUuIYy+WkiIfqvre2MRRI1kkaLROyiRXOUHK0uRenWI7pROoAOuhFPGypyTbdL6ZtXZA76wiKJck2KlGk1SYpABtrdtOlf/hoRO2/zG4yzm5ZtjUISBeEOt05no0M3TUG3Y/r0SUH6HcdXkpQMgWbfCiCJErXmMFtgWOEafu2iesSjKwNsj+ctJJ2uWay6Kd1TvjV5q0FqAOCRy3vYHs+NsiQvXBOJiCQjibzzGZPwKPN2/Tz9K7WWkUy6L/OEe3Iyq1rOV5feHRPs0fttUarm/Hv75snsDilI8fUS1ONkhEiPa78eRBI99zK1D1lfKrHpqJsaVkjU/a//Zpk/APYjgs3nmISfN7hk6+9inhtOpZSut38ch8B79w0hMUbHK/MMawzdVFKCNn6ZZz/lflscktg/l8EgXbhH3D3g1feewte9+PamldqNDxJpuT9QTeJCvmQmjp0J7BoytlWQim2BkUg3LW7STRc2urgptW1uXWAKlE49onzqe/0x1nEeBCigrtHNN0xBEp2MlUY75TEXtnWPnyt709Zmt2iQmHIe3QcrGUlssj/JPekMbTc2SK+b2s7FkETJ0erWUbhKYm6j9LiMsP5LEuixaA9liX0CKF4kkbKYnQWSnsUQj59TN/UhglxwE4ckghkXh1AAUnZdj1136aYZ3ZOR95YJEuWsKaG9ZF/xnNMAtENiRFoSkUQfjVDqk5hCfz6IuUI9A0E4iJDEU+sjbI9nLecyzzO23i94LM+a7AaJ9z+xCQCmHozLIhvn23Nsrt41hMBI6poxCY+8UzuZ8txwp3JWKRYRCSUT/vNHn8SzfvC/YGcyx7Rq003zrF3vF1uTqM+lO86+LlnG1ag57A7OgvTDQDKNRxL94l7u97vznDW929aXBlbdNE9D0pWy95tMpY1UN3XG2edRPjb9tpbgUOA86nH+0g3J+H6mcTWJEnJZ5JmpnQOs3oQUuHX7JHYtyxg/IVATKq0JlUPb50xq0wHoZ7vLJhkkJJ8PYpXj72ZZvL/lzi1Nld/2SQT6WiFVrRodkMQgMZpu6gaJES0wbiKJi5tFEv3OwcXtCX7t3Z+BUqqDJKYFKYMiT2pU36oTTKBJWiQxoSaxRW31t8642ASJ1/ZmrSAxpQckYBe31Ob2ZCnZH1tLtwAim9gCg6jFyUFi1an/CjgWbo+tk+ujYJ0U9115nlZgbvj4zbG4Z8dHiQqpm3qFa3K+t5lvgeSy3TFIIufIhEQLAOsschlvgyQu28xenkg3Var9bHP3JKG9ZL/0P74Yn/yx1wIIC650rWqQRE7tlYxzEAAZabjeFkM3HTdB4umNJdQK2G7ooHQ9u6iZ71hWJEdekx94csv8+z4TJGokkastpP8NKSd2T2UIkaLXu2u5Uv6aXKDvFNqkTBil4GsSeVpyaN363373o5hWNR69vKf7JEapm4pT1O93qIRRCSemJi6MJLa/vztOOpeZeXbar8ciiVISblQW2FguDd20yNKQ9G5yBeAYLwF1U2YPiEX2uIBD1gAAIABJREFU3Dm4cw6dEy5odr+TPR7zvNUqXLeaBRD/FpLYrONSgtcmT+XnO1VcJxfurdpZ29hxZg/on0suKAqp5F8vc6/lsMgxSWwVBySKICrLSgP6PpDRVyj9z0DvcYtRN+3VJEbQTW+qmy5u9ACGVEP/yW9/GO9/+Ape+ayTrSAoiW5a1aZIPB61IeQojabqZlaAuAy5Kxziqs0NmRv9yq7OQl7bm5px9NtSHEJa4JOCvQWRRFdwJfk8FjpDFZNppWMNitzQDaZVZCF1k8njUCygX390+zGLJK6PSpNhjrne3WbivsX8rx65gloBL33GcYN2Sr216lq3Ugln1oWFNVTs3UH26HV5TH9js+0G5HG8I+MPLPU4/Ze7dnROXOEaAEnCNabeeCCLfXQdSZ14aGpfkltgNEii8Lvou1i6qamRjTrUwlYre52l53tvqp/Bk02zZ1e4g/76ar5//p0P4hV3n2i1QdHtjPgxP/uOTwEAVocFHrywAwC4pTn2wsI1jPNpgkRhoHWs26+HEBEAvR5sLtXQN0Z/lrlPhB5/oZo4cuAu7050TaLTW1BSNw11Suyrm9L59yNS3T3frRNnxyxck9jMi2GTxARg3XNJNVejMsf6aGDpprlF0mMcehdxlRVYA8EGsweYfJ/n2C4rhJzaqOCS8UtikESOXRDTBol7vt1gdtWpSSQkUWyVEtgXOXZBKJEg3VtBwRsHgcydK0X0/u4cBwn72kGsy2aLrS9cuE9ijU6Q2B5rwB0P4s8hwFHqpou0wLiJJC5uFByGgpSHL+4C0Nlo15FIyZLMak037aIhXdufVnjksj7ezEH3knqpdZDEGIdw7mxavoJcpRS2xzOsDAvUCrjaSGlTL7UUMR/apA+jJpEWTuLJSyhpa0xlN6BBnkery87rukNHiEVt9Bw50Qh6H7COxZ0n18x7blPw1D6JRQBFef2/eR/e8IvvA9Cvm5QWyFCNTi9IdFBzyYpeHVHznVHIhn0tBUlsOzJ+0QJ9vBgkcdAcQ7+XVidLz7aPbio7MilKhoCljklOjGZX8NQaGnOjKUdVbXsQSnWC+1Oim2r0nYJEozia95UMyR66sIOfefun8L/+9kdajpSUXNmdzLE1nuO7XnU3XnrncfP6yYZuSntAq742JkhhKEqxtW19umlEm4h8gefNQ0ueNzT8rsXS5EkAyKduShYMgLOuuql93TdGqhMXW5AI5yNINxWCbWKbiHMUxpHE/7CpSaR1w63lja3JBfT5ldcEv3AKN8fY8w+02Qyh80/jpOcmtSYxJlGY5577pEM3XSrbdFMpuJRbrPT9yVh10/49GXi2BWG8mcACSmEoHcTc+vJRWUSDDvQ7dJlUfAsM2m+kmkTXb5SsL7gFHfAF6aYFjyR6axJvBokLm0ESAzfV1lg7FFv7s9Zn02oStXCNlMUBgMev7uFVb/4zvPJNf254zQA1wY7nd9ODmSZc09QkuvVmnAM0rVArLacP6J5jgEWkUpQMDd104SAx/li0cA6NKmdEIOUUm2tqWeT5b1oQUJAYS3/o9rfroVGdrPWdJ1Zb71tnK164Js+zpo6LH+P2vdwa235vA+E8hjLrkvNDCZvrXZPIobJxjbN5RyacRW6Ox2z2tMmSChvVlKbQtGtnYwP4Z7SqZQn6FAVcOp7bXkVSpeWU3KQx19uq1nPDO7v7hm6qAzViQ9D9poNE/hl42wPnAAC3H1tpOVJSQPrUphb2evbpdbz5DS80r5uaRIbupRAObKgFgxtcVrVGBCXHVUJ7FNIRkdg2HTSvrkmtWaTESve1J65pJWefumkMJZbm2aWS63GeMZxDHpkUk8eFEMj263PPsw3INZCExo7KvKWuvDIghoF8/7vmMlAkcZ1gL0Hmt7ktacRxTMIjlCSh46UG6fSdbCJHnqL5zkpAnLvCNd1+tt093/avFu4Tpt5y0URCsN5SYgEJe3dZ+MuWrpe5dNNRgi4Grd0rwyKZbupTNzVBa+Bc9msSK/8DAGiksXZ6kd9sgXHjjDLgQBhqHjfw9eb+rOXMxTdJV6iVXohdyL5rr37zn+P8ViMKszttt6UIUAK7xwPSWmAQHWt1VFi6KbNpkCDD0080QeJ205SXkMSEIJE+mxLsuRt7knBN1aZJxvWOtNnWlF6CtJGPClltq6oVfvSPPoaHGioavUb3h+4J5d/Yzjp0UyBNKKSNJMrX7b7HN1v/pjnKmU+6Z0OZ9fbrIalvgDZE+//GafVs2xwqG4fa0DHaxws58nKW1tLEbjuyjG99xdPxG9/2UgBIElOir/XVG1e1HAD4kB7OKLgN0YS5622TFlGHWthq57kZCGwGqkkkuun5LR3IUVafzew2RomwQZmZmlx9LB4BfmpTBzO3HlnCLWsjvOufvxo/9XVf4IhU6M91A7CYoA1oC7VUyi9kIt2PsYgIJ1wTajivv7/vgLp9Ettz1H99zcQBmHY/XXXTVrBHifUgksjXKYfUZXs96YLBHs1LSPiJNYn8uGBNoiCcRU4wIYlk7v2fpm6aiddaiyKF11Y2AeHrXcusQTFBIsfectEn3/H4eteI5IqnBvVuhwFkxkj7aaBWnws2QgI0Pgp0FALZDWQlumkCs+kg5l7LFPFEOtcrgyLJl1TN/S0h6eae9Lbz6tc3Q9VhJDEv2lC6uSkP1gLjZk0iYy5EHAtPbzZIIhXLR6uUOs595txYg851dYOQi9uT1riD1CTGjKPgb2Np4G2UToIPT29QrIsOksgVUUvmbn5JSKKD7iXJFiurbqqPGbEhNl9P41KQ3FYLDGYBuv+JTfzauz+Dt3/sPN71va+GUjqR4FLZpADMraP6qdd/AZ5z60br9ZgAwN1cfQjw5d2J+ffjV/dMcbso9d381LC0ezfY8G+GgN7c3ADA1LFEBG5dlVL9fZ4xzO+LcazJWeRqYOic5HmGH/6a55v3hmVCTaKhm8r3sU8C3Vczxhk1qhdpwp6aGTvmxkaJ7rmVxGRoLaU2FOcatI+QFB/ddKdZ867tzXDrEeuAScciJJGQ4qedWMHTmqQawF8DfW/5f6dNXNiaIC2k4xnjQQ2Cz43oJHvGBGhznJS/D0l099jHru4BQI9u2nq2QXMMBMALoKScKm2oT5/kWNMzUUjOv3DdQuqm0rmcO468q65MqFYsC8iiNvK1VoF7mWVpNH9D59+dAxAb7DHBdqC/KM3Tfbxj0GYax4m7AHrNWB31XXJpP7VJV0ndlBfl8VIdBZTaV6YA8PX9gLx3u4y0rq97Pc20CsyQ1KvbBImj0iQCY8eRKrx7/O73epViGQRYB4kBTK8rXBNTkxjRAuNmkMiY61z5HLSJw1W+1gSJK4MC25N5PP3QQUnovgj5aBe2x478cSZSmzhzudbu//uMgr+N5YFTt8QgiQ319nm36cDkU+e39RwJ7Yydo4o7/71xzfcvJWZ/yJG0ojzxSGKRparL1i26KTfPDz1yFQDw6JU9jGeVOeduIBHqkwgAX//SO8y/TQ+8qIywdYp8NYnuebq4PcF4XmNpkIeRRE/mkxtngo0AKsIHe2GHMLVxNk839Tvkeo76L0fDldDVlASQVTeVe3e6iHRvfgsgiW4LDDG45+imAmp8Pa2rUljmOfbm897n6PdSkPjktX2MSkut1wERP9HdqQ0SXQdM13H1x5xvgsTTR0bs93HXQEUkIFw1SdrUJTEY37HoeDGoeGqbiJB6sa8FBk9RtRN49LIOEl0krN/KIhzs0Tj3cDF9KrOMo5tS4i5VuEb/9dWaAVxwGYkkSjV4Wdbq00qN3Ys8TvPApZvSp/s9PyPRZobdEVNf3kquRCCJHEvAUgJ98+wq4Oq/qUlJoI8cv+OffRmeuDZujQG4gKP9Pnesri8Zqkmk+XPBpW9cKZSYuIw311xG2jJuXJToUsyHZR4NHtDavTIsosVuAPsMWg0IgW7qS94xwX1UkNgVromhm95EEhcz13H3CYvsTuwFISRxeaiDxFj6oStAQzd0dxHpBhJtJDEPiou45gZS7vG7n/kPH3wUUAp/+okLeOWzTgLQG7BPuMbSTVdx9ugyHm8oQPqh0UFwKJPlzlGan2R0/pYG8cgeHc99sOOypvqvRtvihYOoBQb9x6mbPvCEpXF+4DNX8MV3HTfHor8+hTTOUmrAqtZvk+st3Wfj0s4U+9MKy4NClPoO0X+CtBom2CDrOmmxDmEX4Y5Tkuxv2rVSwbYBco9Lq27atRSpcDpvpPAo0k0Tzz9nrlKtNI6OP2SSAhKKcj3NZRYAcp0gnd+TayNkma6tpoCR5ir5FtsGSZy2aKHSsSbz2ogocMadlxi1UbpfVecZWIQiFnUvd7LdsQqs+rPt1300dJ/AkevwPdkE3yQ+BDQZeSbYCCP+3TUBzTh5TJ5xdNPm+4SB0npQdVgh4jjmPPoVOfnn1GXFuDWJqw3dVCOJ4f3UDTbpke+hZoF72QbA7pj2e5xlTOAcou3SuH5wr5H0oHANizbHoNT94wH2et9zah33nFo374cDDuk+4emOMWtC715W/mDbtmXh/ZJuYtgkrQ+hTy6QXvJE45YH8WI3AIyatpQQsyi1r3SGYd2pKgJJFIRrDtgC42ZNImOuc+W7QXYd4Y7N/Rmmc2WEJ+Jl660jIy3iVCPzL77qOQA0jdNkaAq9IHNiN5zRQ7I0kJHEjzx6FW/8T/fjjX/wAP7skxdNsLe+VJqHnQuKDOK4VOIFZ4+Y13W9XzyS1QoSk1pZ6L/DQnasdyZz/NAfPoBv+/UP4uGLO+Z4ZZ4nISkuvTNFOEhTiXMzTw5J3JtWeNrxFQzLHO956JJDmWiCRG+xvRxsAJE1iU4mVTtM/P1Fz8b6qMT5rTH2ZxWWKfvMzDGkxkbBZXeDmlayE0nWfQaiRSo6m3ZUbRWTkVcIoy/SM+BDEjUCv2hNYv+aEUWUsxS6qZsRlcb56KYmQLmBUGJXpVBK5riJs+MrOjikdZzmKp0T2gN2pxXGs9qi/Vw2GIs1E48J2jg0l5SUJeMCSyDuXu7RTc13hlEiKQnEqpsWPIrijnONxIeAxajk9D7bpy+AZIn1R8GkTPv1UHCTm+u2WADQd+TtXnZsxSZHCEmMZSq5wZyPbupHm+lzaQkIi0Da17rPPz+Or+307TX0ndzzHaxJzPnjAfLeLQYcEckEtrYwgjbavSe1crk4jD3/dDxujpZuemPLDej5J+2IVD95dVTq8rEEf77I5SA4BkksmMQFVO0P9oC+cE1UC4ybdNOFzHXcfbTFnU6QOK9rs7BG1yQ6ClUK+t/dxf9C06D+7lNrWBuVuLg9MbUD1F4iliJmHCJSN2V2X1KKI3vkyh5GZY5RWXjpP0Q3XV8a4M6TVl1zWORiAMzOccHaQoukFOL5f/eDl/Ab7/0sAOBLn3kRd51cA4l5+NT3pGNZtC3u/FPdKkABQH/crKqxvlRiWK7gsSt7vYWF7e0UqKOQJKo5q53NlWgh3f5HNE8AuM1BjZcbhNov9R1QKRV+m0/dtOvIW6dVHNIcr0sbbV4P0EGAft1YTEAKdKmEyuvcaWXBuHur2wJDQhLFeySBAupeS2nczHNPWpGu8LEWNZf+BkB0ElwU/uT6CJd3p61+Zb4MtLsHnNsamwBdCixDzcQ5hdkY+ieHLlV1gGon3I+x9NZUtFNucSMLU0koCmDXhfWl0iQoT21YJHERKjnNk6u39A3LBIfc/Q294xhkVRgn9kkUgu1AcCPWijvPiYugU6IkuibROOQAaj6w0cI18nf4+iR6gxQmcWd+VyC4587/ouq+UckVie4r7DmSyFcMUt1DH4NJquZzzHWLoTKLVPJukNj8f2zrsEXNUI4zQhIjg71m3iQoNq1qr3CeOV7DJvFRwoGQD8T4aUpF0k3djDcpdX2eIIlZlv27LMueyrJsK8uyT2VZ9j83rz8jyzKVZdmO898bnXGjLMv+bTPuXJZl/6zzva/JsuwTWZbtZVn2Z1mWPf2gcyW1r7VR6UUEXSRxZzw3dFMgHkl0e8BJiz8FqktlgSPLutlt1WSJSUkplrZlkUQ9z64cMwDj8P/iN38RAODtHztvaj2kOgrAIonrSyVuPbLUfF7XP5qFLmKetTPHlJpE6yTnYubn4rbl+lPwTT26pNoqzlyqR5JwUK1M4MUVsQN6QRoUOW49soQnr+23aDxAAEmU2hsYZyt+s6c+ie73u2aDxCU8ekXXBJFjUWT93xbTpLhg6Dizqm6JIXDWLdKPqWMB+ghAjCMpoj0hJJERruFqSdtj4ikyvR6oAmoWEg6KeUZbDAhBNdGXITciRTfQSeiKBBQC4l85dEdSOHX7leUM2kC2M56b831ha2xVSjNGoQ7xSGLb2Q3fx1wtUTD7zwRtMQER0H++Q6qVNIY+65pJAvmSCdz605xgah+yNMhbLQS6SKJVyfRbF4GJqonjaIsBOmCIli/WJBpkyb7m0r8lM+MEJLfIM5xwgkS3BUxan0QXSWx/RiGANjN+QgyVk1uTQ8E2fSe3boWRxP4zqr/PO4zd821S3F+72l27bDKXPxaxgFpjlD8AJsVvDqWOovuKaHq/BQbA+5/X07p005R6e8CKl8UrjOtyDokBESNcw9JN6xi6aUe45jrVJB4m3fQnATxDKbUB4G8D+LEsy17svH9UKbXW/Pejzus/BOCZAJ4O4NUAvjfLstcCQJZltwD4PQBvBHAcwIcA/MeDTpSc39WRn49MWeSVYYGdyRyzucKw0DU6sciSW9ibMwsk4KqPZTi6MtCopdNXShcoxx2P6F3GkRSQxGMrA5w9alX3Lu3YdhYAv2mPZxWyTH83qfe5dXT6+OF5upTYWsWhX+6chqVco3lhe4I8A85sLOFCQ+Otaz9Fhp2js7GmCAdRuw0ayznk80rfR2ePLuPJzbFzjzjjehQlP/XE/raE2pI88waXhBSdObJsGpAvexQhQ/QYfUyGtljXXhQR0Ituux5L/w06u4Ijme5cR2SfSbjGeQbmAUemSKhJpOlQTSK3dvmEC6S+eZzNnXtEcv7tBt0fb+jPNzBINDRtem48FFBAX1eqaXORREmEBtB7ACXELmxPzP2fZXywHXJAOZGKWqlgZMPVEvmoxXqO/SCF/pWaXIlBO6X11Ye4+dZk2qdvWdOBzXJHJrEX7DV/Y4LZ9vm33ydZl5Gg5xxe73y0/BAC6V5rqfardSzBv6ic4O7Ict9p1HXR4X3DPU+SSE4IcaZz7A5TEeefu09iHHKuTcS8DusmLJJIoHmmIomicE0guMwYRKqq/b00AZ4qHwouxQSQUG/sa6V2Pc29txepSSS12RRV1MJBEjkkF/DTTbkWZ4sJ1yj7umSfS0iiUuoBpRRpyarmv7sjhn4rgB9VSl1VSn0cwK8A+PvNe38XwANKqd9VSo2hA8oXZll270HmSjfE6qj01sSRcM2ZjSXsjOcaAWpQs1hkyV3cuV5XQLtp6pHlAa7tz1rUEqn+xXe80aBo/b9rT1zdx9ljyzi+Nuy9JwWyAFrCJRZJzMzv08eL2Gw6aGfsuWwjiUKQuDXBibURbj261EYS80ThGocSWwo90TibOwEPV8QO6N9bFhluPbKMi9sT09ybKMZsk9zAhliYRSv+t7XEfJjzSYg7oS+ApWdwTlM8ktgJEucqGCR2M7sxjgW9z9Uy+rxyjtpX13Gqie1jRCCJKfWuHbop9wxQQoSzlPvfnbc0zt5HHiQxMrm1iHUbF0uoLKGrWZaZmrZWvz0m4QFox3BnMsdtR3VCbF6rVpJEorb60B6pV24sldk9ZBWJ7rECHN5RfSe5VvEKrAvVrnLnsrm/CUm84/hK6/28E+xZR947zV6AH5M44uu/9F+vmAyD9oTWcl9PwNRAyv3/ssjY4MhHed+dzPGrf/kwZlXdaoEhifLo+0ScoqU7Jt6TXAAcovvSexzaFkQSBSpz6vPmzlPWE5DAg3Bw2QUP5gFEUH8ff0/G1bv2x7nvk6VoJBzE2gKDKTWJeiD5M5OIIJFalbnJdY5urecTr9SuvzwiSOwK10TVJBYIrfaHKlyTZdn/lWXZHoBPAHgKwFuctx/JsuzxLMt+vUEIkWXZMQC3Avio87mPAnhe8+/nue8ppXYBfNp53z32P8yy7ENZln3o4sWL3nnSpqXppvJNRXTT0xtLGkmsagyLDMMiXu3ScrZzdoHU89H/30YSLUe627PHezwHpXOP79r2eIajy0Mj4gAA3/HKuwD40Yb9WWWcpDNNkHiqcbqSHFC1WJBoahLLQnSsL2yPcWp9hNPrSzi/NW71IExRXHSRlEGgBca8qs294tLNuCJ2QP/eQZHj1qP6HD54QQvskPLcQtnnPOO57o198tw2fvYdn2pq5GCOU3oyfnqeGY6v2GxUy0kWaGV+JJHbRP0CHADntMY5hBIFxe8Qto8BAArhzZerN7PXTXYQYhNAtgWGzBKgwnrOkoRrnPtfZkDIWdPUdhsp9kd//SSe8X1/jKt7bfaDP3DTn3n2Ga0qSP0MgbbytGvjWY1a2Z6HALA0dJB0Dkms/A4oRwkMKUICwj2p/LW1dDw2uRI4YB9JDM9Rql31oWB+JgPV8Ov/f+kzjnfm2KffAnHqpnx7g0CwJzAnUhHIeKVq+5pCeL2TnrlQgOmjvH//792HH/vjj+O9n77MJxc740KMCx8FOqZO3L1uLookGYe2hSjhNM9uTS4QkVzh9sXaf+2knrJuvR07jilDikH8WVRc+dcEju4OyIlhK4B4OEhikTesnMj9xijllylBov5L9Y9A37/27Ylk3RY8+ssj6KZd4RpTkxjqzeVHEw81SFRK/SMA6wC+FJomOgFwCcBLoemkL27e//fNkLXm76bzNZvNZ+h9973u++6xf1kp9RKl1EtOnjzpnadBEoclplUtUjmJbnrmyBK2xzPj3Kdk/y1KKAunuMIdR5YHuLbXRhJT1E2NcI0HSSRKwrKj8Pf9r9PKqr5gb39Wme89sTrE97722fi/v+1lzRzjkSz6vUtGyj/tt4XopqfWRzi1McL5rXEr05UirlM7i5+PjgYAb/yDB/C8f/k2fODhy5jOa5NF44rYAWBaaeSMlOYeaXqAERXI2yfRQyUpPYvkV//rd+Nn3/EgLu9OWwIEXrrXXN/vxxixAw7djpkjF1xSEO+zRRBBM082uExzZKKQFOYZuJ41iW6SBOApMj66qa/eWDpWq09igvOZkjRKtTe97ZMAgPubVjJG3VSghbsUUOrx+tlLu+b9XLgG1CPRVdQ0wk0cZQhhB9TQ9Dr3cujeyphrEKKIAXxtYYxxzcRj2mYAXBLUllz05udJXNA1+dovOovveOVd+Kdf+aze2K4CMRDjJEv1zb4xHLtD//Wudxy1z0G2OaOXuTYdiyCJLitGGic9p39831MAdGLZfd4l4Y5ahYK2vsJ1Sk2iG3MsvN9EBIl9lJpe9w4TkMTae72l5EoIKe3OEQgL0NDxeghwreBjqUrPqb0GfJ/EG1luADh1mw0FOr50Sf8lfyaGblo560TofISEa1i6aVDdtCtcE4EkAsG6xENXN1VKVQDenWXZNwP4LqXUz0PXEgLA+SzL/hcAT2VZtg5gp3l9A8DY+fd28++d5v9dc99fyCamJlGfnlmlMCz7T0gXSZzOKUhMQBJrCgDl2h6X131keYgtqkksbIY8mm5akSMpSxDPa1vL8tUvvA0vv9NmaKXFHwAmMyvck2UZ/tGr7jHvLULlXPKoNPrG+eimu5M51k+u4ejyoNXP0s1+xsT3rkx5WWTYn8m/66OPXQMAvPWBc9ibVlgbWQVQ1pGsagxLjRoDMKIwG8u2vYQso+3fELnzX9fKLIKPXdlr0Z0GntoxSoocdRBnQlJ8GdMQ3Y5zYkIZ2i5tKHbTzvNObzmqYws4MjQve7wwksIJ14RrSXV/0RDdR3+v/jss5WumxUzSnBHOXFGOMN20fzwSSLgRQSI1P/7Ueb0N0O8S21I4dcJ33qLzkq96tk0kSkk4WpdOrPWDRBFJbESyJOPW15jsP4cu1cpfj0Xj+Ocm5Ei2z0kcQtFHewB7DwyY8yJl5AHbHmljaWCSmN3jsZTAYDDL91wNBWDSvu1v+cCvkzHiRlxw76dyCv5Fh+Hx3u/78tZz4uvVOmioqJe2J0bZPc/tGeb6JIasn7jTf31XjUuuRFFwGZqw6//Ic+wG6c2xQsFlztXqhymx+nNSwCEFiTzdMaqXI/OMhmpr6ftdk1BxSze9sUiiuwf5kuS9cc3nLN2038+6ay67xqxb0jVLXEvi6KYd4Rqim4aCywCS+N+zBUYJvibRJPyUUlezLHsKwAsBvL15/YUAHmj+/QB0zSIAIMuy1eY76f2FbDzVJ5ec8llVt2pUyHamcwzLHMdWBqiVVvccFDkGeXxNoi1uz9mNXh+fNtEcR1cGmFY1ticz86Bx9RBkv/yuT+OeU2v48ntPA9AbV5ZZR5KTIHYXhF/4phe13vMFUhpJFGhzCS0YumhnfNGw/jss5RrBWRNcbywPoJRt26Gd3eZ7Ijay2ln8BoUfSbzQKKre9/gmdidzk3yQCqlnlUYbCTl87EobSeSCvZgMldSqg2h5APDY1f3W5uOrSZxWCsMyx1FH7MBVN5VrL9KcJoUwStelDcU7u1JTZM8YJkuokUTvoQyS4l6DmJpEgHre+Rf7rrop2wLDhyQm1AmapsAOapDaAkAKpA5iu5M5rjT384cf0ckZWkdKX+BGrIw8wwd/4DWtpuJlnntr4taXSvNMLreQ9P78wkgiFwDEoNT02fa9HLone89NBG2R5tlF0mNEO4D++uptleJjMjSvcQlcM0eOEhhKrPcCAHrdnzjq9ZbzJEnssbiEn79NinXI7WuGWRaFJPrnSTW27jhpf1sblRjPpri0M8Xtx2w9uphMjrlPeucyHOzxbYnC55+9brXyKqLSd3bvfyBMNy3G0Ln8AAAgAElEQVRYPYE6GDToz3XGBX6fxMoJJ04ZJDEQXMrqprxwjWmBcUjqpiRcE824a87bcoIPGkO3DokUAdROR69XmYbVmzdShWsiWmAAnxt00yzLTmVZ9o1Zlq1lWVZkWfa3AHwTgHdmWfbyLMuenWVZnmXZCQA/D+DPlVJEI/1NAP8iy7JjjSDNPwDwG817vw/g+VmWvT7LsiUA/zuAv1ZKfeIg8x03WYONRihEukGm8xpLZY61pj3Elb0phmWGgacFQ9dMAJhnIq/bpaQea9Clt9x3LogkKqXwE2/5BL79Nz6ET57TWfV5rTDIcxNgcs2sfVkjXyBFwjX8uHg1QxskpikgWuEO3qmj7y7zzFxbEoUp8zS6qZsh8/VJ3J9WRhn2/ic3cXVvamTaJbrprKGbUlD4aCdI5JICMaIwOovZv97UugTQASk5l5lTk8g5CboGN281YPapm8Zk1rnWAbH1ThxFKbkmq/nrDRJNJr87x7Dz484NCNdp+vqSds0g6R6adlWF1U3j7n+7JknOZ1BMKWHTjrW3PXAO03mN244s4X0PXwZgs8FFnrPJjq6YzKmNJRNYAvoeYoNEBwGjZ3ppYB1lrkzBpbZyxgnXqAgkXUa3Y5BExtmNQAV7NO1IJLFfTiEL15h9iqObemiqZo4LJo64YMOP0vWvt9QjrnUsJnERQrKMn9Bat8LBvbR3h2ogyyITnXl6/eL2pFUDKAvXxPTT7NJNYb5XMs4pjxEO4nQBopDEznND538x4ZrwHIH+dQshpRxzIn5NaL8WUkqWwANpfzMtMG4Ak8S1bluW1NINt09i7Jgiy8S91FK7w+JlZmiMAA3QF665TnTTw6pJVAC+C8DjAK4CeDOA71ZK/SGAuwC8FZoiej90neI3OWP/JbQYzSMA/gLAm5RSbwUApdRFAK8H8OPN974cwDcedLL7U6KxWCSRM0IYyUFQSl/8Ms+8TUI/+JkrpubFbCSFiyTym2iZ5/jK554xr/salwM2AAKAX3/PZwDYAFCCw93PcCYt/kC7JrFrKQ7oosI1FkkpMK8V66Tpnoi56fvoilv46l+kOdI46Xc9cU0HeK97/hkjdOEiiVKfxGGZtYLEMs86ARifsfNlTaX6NjdIfKLpy2h6y3mCFE2vznBs1RGuMXRTX32CLyPM1LFEKofyPdEiHMKWIxnOWnNOWgzaw6HpoXNC5z8m49pXNxWQRE/Q1p2fZO3Nt318c6wQkpjFb9qx9sCTW1geFPg5hwFB7SyK3FODnejIA+11mdBb3zMKhNVNubp0TeUMIYl9J82nZEvWdVpjpfw5xctYJDElwWXQd5ZxEX52WEqmd5Z9dCkmuOQSfjEURE6kIoRkcb3sYgIpae8OBRss/a0x2psv7Uxac5Ap6JFruXvdzPw8YxiUOkY4iEfbYltg2P+PTUBwTJmqrr3Ho/WCqxME/P00u5ctBvHn9uAg3VRgoUj7m08Q73qaEeEL+Gldo99h6Kaz+BYwWSbvpTHCNb1zGStA0xOuoZsyhCT6CaWHEiQqpS4qpV6plDqqlNpQSr1AKfUrzXu/rZS6Uym1qpS6VSn1LUqpc87YiVLq25txp5VSP9P57ncope5VSi0rpV6llPrsInO8vDPBM77vj/GnnziP8Yzopg2SKAWJc4UytwEHoLOhg0JGEt9y31P4+l96H17903+OT53fNg+Jr5k7bYbDIsfx1SG+5gtvA6Az3gBfowYA57cm5t8ff2oLAEx/RZ9DWCnZafKNG898SKKMSPWOb5DEVLppc55KOUtFgj90ba/tOXTTlEDWyZBJQTqg6ZsA8IaX3G5ec4NEnsama/2WBoX5LUeWByYI4dRso9pLCJs9UW4BTdernE3SRwuhmkRqzQHA1KX46KZe+hUTOMcoh3briOifIYdEog3FZK3TFSj791eoTnOQkHGlS+ulm3o2e6m5N9lkXuE/feQJjGdV634Tnc+Ak8wp2R7UZlWNpUFumAIAsDJykEQxcPM7aSzd0VGdHpog0VWcXiAg5YK9GCSdcdJi6KZdpzX2cvQc+Ui0H+gjzn51U5nxQvf3UPC4ZOGaUDDbCcAigpSMpY3Sb/AnxTgkK6oFQyLaac6lsC77xLOk57QVJDrnySLi7c/HrOXdgNsc2oeSMmuQGyBIljHBfQQojiJD7/4HImjazL4Yut6S6F9MP00ucRETpPfqhpU/2WHoppEJIKN1cKPppiaZT0nyNF/S0E1j+oQ610NMkgT2e4Ch7kYHiQUdpPn7+YUkfs7bx5og6hf/4mHsz+LoprOqxqDMsDayJ3lQZl56xrsfugRAL0Rvvf+cCTbKPBN53S61CwBONkIJp9ZtewnOITnfNIu/++QqzjX/ruoahROQSs3cRcfOM248q1qKqK6ZvjExohgmSJSdXc5c4RpAQA0qHdjTtXWRRE5+XpyjiyQKQTqge04CwHNvPWJeW2+CRKmWdNbMEYBBqd1ehJyQRkwAVuQ8LXbbCRL3plWjZEZIohykUJAIAB/8gdfgF77pRWa+PgXWEG0lVREP6DtbsYjIIs4WVzscg/bwlCi/g7ZIcsXUG3N9EgNZcqnhPAD84O/fj+/+j/8Nv/W+R/i61e49GaDbSa0lDmKzpjXQmpO4ozpZuSbR32C66xC64wD9jJB4zbJTk7uYumn/eseg1HxNVjqSSJFUOk01QhBDUDd16/K54wD9YANw90WZbtoNtoEFkKzmn6F6v+6tFYtkcUGb7x6xc7T/H6UAKp7/ULAhl7PQGnNpZ2r8pGGZ2/pmBkkMRWBZ1hYTUxE1idya7AYI4jjmOY1PSnL3iHcYmxgLKY5K180tC+GME+WJXUu44MarbhpAqbvPtiljudHCNQ5KzpXASNYNEqOEaxyfMNTbMoq6a5DEBLqp+3lVA8giMuU3g8QoI0SpqhUmswpZ1lY35WzaOMnkGAM6q+lrrn7f45v4G/ecwAvOHsF7HrrkKJc6dNPO0C6thhwSOm6W8cEXBYkvvOOorhmoFWa1DkDomeV8tDoCSQz1SeyN89S2dc0EiUbdNM6R7DvJTPa5URck9JeuewtdZU7KY1f28IO/fx++//fuw7yqe06yhCQ+fnUfgyLDqfWRcVZDSOK0ST4AljL83V9h5d05IQ2336ZknGoZAGw1dNNT6yPsTyu4amu+mkQSrgE0qv3VL7zNvOdTYPU6ydwGFRFILFpb1b0GKmIcTb9Lbw1mn5n7K6RuavrERTwDrpR9mfPiWS6VmDMfKv7hR68C0HV/7rWUas1CfcpSakRibVYpDDtrsqWb6mvNNZheCEl0kne3NqwOSppIa0JIlITrVakQI0DDJS5UsCa36zgtiojoJEn4WO4xyHyIm01AcEhiOAnhrlsxzzYg15v5fp9E0fPNT4/r003jauI6NZAmuJfHSPtbSOBFah3j7ssXtyfYawT/lgeFvJdGJtNSa0lNCYAb3EegNmz9XQRNuys4ZESRIpIynLqsv0ykr4oNhNfyrJMkaSYa9Zx2z0mYbtpffwAPkmjoptd3/e9az0+LRBLpXKe0wHADUqmdXYxwTY/RRkhisAUGZWYoSIzorQgEkUQvGTXLst+CZWmIppT6lvBMPrftyWsa8alqhfG8xlJZeIMNen1Y9Ommw0KWjP70xR1840ufhiu7E3zksWstypLE66bjE0TffeC4hQfQCzcAvODsEfzeh5/ApZ2Jaebso1b66mZ8gdT+VK5JXESAI7UmsVuTJWX/XbopBWGt3k7MuH/7ns/g33/gUQDAd77yrh7dTlp7Hr+6h9uOLiPPM6wMS+xNK6yO3FrS/ph5c18BwPe97l4oBbz2+bYWNc899V++PolMHRFgaxLPHFnC3nTeoo75rttsXvupXlwWGYEAjEOXVIQAjVjHEs4Iu9cgBoHk6JU3GkmMem5q66hwjp1SSqNLgSCdSwBVtcLjV/Qa+dePb5pnsoUkdp3PCITiegvXzCudBFp1GA0rToN7oI8cBtUkJeEaIzqW48wRHSRe3rHrCbcmhBxCjpIZV5Oo/3bRvfD93x8DRKANeR9ti3GQARlJ5OZq15/+97n9g9nj5W2VwDR2gf3/GCTRJybmrUlkardj1DX7DAj7umTS+Q/RFos8F2vnAc1yubg9wfntsU6SF7bVAJfwiwtSuHvSM4ZB0mNQmyyTETrvHDsJ15hAFtB78HjeT6bF1Ptx7RRC43h1U/8cNejAXbe0IF3/P58EPawWGG6iMk24Rv9NKXlikUQh4e1N5nfBoli6KYckhgJL4MA1iQ9Bi8Z8GrpJ/d8BUEAL0OQAvgbAtfAsPveNgsSre9Mm2MlNkDgR6aaqhyTqPoky93kyr7EyLLAyKrE7qVqUGZHXXemFlW4e+ku0SgmRmsx1k9bbj60AAM5tjk3W3FuTWCuRouGvSayDwjUxDylt/sl005qCRJ5uR/SYMs96wjVlIT/YQHuRuLY3i27S+vjVfZxtJMUpOLTqpjw9o1bW8fnOV96N73pVu1MMJ3gTVZMo0Ia29jWaenJthL1p1dp8fAJHMwfx7FqW9bORMVLmEpIY49gxifUIatniSnqp9V/c/RVy0Og+iHluamW/Z1D02Qz0FeFemv3Xz2+NMa1qPP/sBqZVjccbGjUJdXV/F2DXsUVqnRY1er5dCqKL3LvzItOBmx9tYGn5jgP05feeAgDcc3qteY1HwEPUVo5aFuu00mftuDhqWRs1o9fDx+srqfrHcAqsgL92zI8kkiqqfH/psao5rn49qgdk4m/TtdTt1+rA/a+PxQeXPicS8NBNA3N0P2vGhoLETFj/mz2RWmY8dmXPURLuJ9Lo2CExsUwMgOUxnF9i9ugQ3bRzPhTikiTtREL4/AN8YiwU7PkEh0LjFg3SObQ5JgERK0pl/IobXJPo3tsp+00XqJBigPYY/df11RcSrqGAm85ldG1hE4eQeE19CEiiUuqH6d9Zlr0NwFcppf7See1LALwxPIvPfXtqU1Mzn7o2NrRJA4l7kMRBkRknBNAbVlnk2J32Ocx1rVDVOrBcHRbYncxbMtkSr3vWKHKSfcNL78AnntrCd75SBw8s+gJLo6LaRU051Zl2n0hF5dmk5GywwrSqg8I1UaIwPSQxLfsjCdfQ/xZ5bnpOUnLAp8gG6ACY7Ore1Fn8ci/d9OL2BC+78zgAK+oy9AT3brsTyfhmt2F1U0m4Zns8x+qwwNpSif1Z1cpsSmIHNFe39qt9LD6LSfOXjGs2HJP97NK9XPVNn4l9Er3H6t8nSvnPvTSucu4jdn4eJ7lrleMAcEFiiNqq58ivCY9c1iq9X/rMk7j/iS18+qJWZ85z2fm01BoBSbwhQWLdQ5YoaSQGs3VI3ZRHUuYOC+QVd5/EB3/wNTi1rhFFqY5rXiusRMmft++tcPa/k31GpEMo3P+hqLQv+BR2/iW6qe++9CUX7Vop1CQ6Ca6ySHPk+6I84fVHcpBTHfm4msQuJdl+n2RBJFGkhUvCTfr8nz26hI8+plW43T65QD8ho7AIlbm5boF9o3u82FrGXpAYkxToJHgNkhhD706ku4uCQypcOrBITWLBJHjj6ab8HtAdm5L8PIi1Vejl1mi9cc3nfCKIXXOBAxFJrCPuya5YnVmTY4VrHCQx1CMRuK41iV8M4P2d1z4A4BUJ3/E5a0S5m1Y1zm2OtbJkc7G8wjWFRRwBfVMN8oyF0d0altWRdshJSXVU5mKQMm/qbMjWRiXe9IYX4tiq7k8nIUREoyJHfnc6x8xFicRx8qYozZEKe91z4Ron/y8ZOTqL0k0lmnA3AHv68RV8pmlFUuY5K/5ANm7qVAFgc3/WylK6VKauXdmd4nhznf6Hu08AgFED5YI9ovBINE6ADy5jC6K5zN3OZIa1pRIrQ41u1871p+vNXYPJvO+Qm2MJWUwgJArDBZdx9X5dxxqIcAjzrkPSvB7hkPSofREOAtBBEiP7JMYkSlxnlqX7UmlD4B7hnlGqb37FXfoefvjiTjO/3Js4AnzOp5xcWdS4IDHr3MucSqCfAso7M13hFAoQATlxFw5IGUQkAkmkr0wNLnvzdLLh4XHOMBXn/AN96qivJi7PM5b+BrT7VHJWdp7TyPi31zogLknFOOQxQSJzn8wDzdW5cZZq7h8D+Oqk5PMo1c4DwK1HNJL46JW9Vlsud16ADr5UTJDC3FtAXADcVpwOj+u2O6FxQeS+s3bFJiW7CDDN2V+nrP+yYjKBdlLdyxaH+HMIsJ82LYouCloJPq2D62mxjK+u0ed8IojSGLdOX1KkjemT2KtJjKab1vZvFJJ4/VpgfATAT2RZtgwAzd8fB/DfEr7jc9ZI0RQAHrmyi9EgpiZR9RySMqcWGFzmrQliityIKVxsalhWR6UTpLTHUZ2NZJJjR84PqWluj+eoKmVqGyWRinktH09CDUIbtk8lkzs+sFifxDyzc+A4/IB1Hu44vmLahLQpuP3vHs+q/4+9d421LcvKw7611t7nnHvuvdX16mr65Wrc3XQDbTcCxLOJTUMEthTkOIEIS8QojuNECkqIHVsxWIqFJVs4TqQosWKTOH+sOAgpOCFxlETmkcSY4E4cFAgY6AYaupuuoqpuVd17z2PvvVZ+zDVfY445xzf3PdWpNndKV/uevffcc+6155pzjPF94xtBnOKVBwJJrDjbD6/3uNgd8Mwd5yT+e3/og/jvv+cj+MJnb4cxC9qokWcD1Bww99iut1RXUz3ZjDg/mXBxvc8kuZs5iYd6TqJm/MTDvjpF9bstsA9tmaS/ENfDj6fmvzR2xmiQx+d6kJS8lte6jmqGbkcJjMy51xCKYIy356jtCS+tubsfeudbMA6OWuY/yzI+6zS2m0cS9/PS2IPWeR7KeVpiMq2cRFVwpYEkWk4DgCLfiUG/AC0nsd2vRBLzz6v3k44sQ9Fb31usE/fYFqDRrn8UfVPnKIICy9JWgwzzLL4bVzZgXnLqOhW4G0qaaioc1h6vL7hVQ3ssWuxYuf7ennn7mo+7LMjUzeVewjrp0klhEOBacAWwaKr69egVrmG3sWks1/++EZR3fco9wfez1tYxqRuanXCYDXVTC0kUnb0NyrLEjm1xP3M2aK1+tmz+PUwJqlcf7vAPP/5SUTsbUJztBFyotaLuMF0CQwjXzAcb2gZuFEn8bgBfD+DVYRg+C5ej+BEAn/eiNYBzAp5djfnffPkCt7ZjWCAW3TRtT98+cSUwlAjJPkGyfO2uF193Efpb20mNBgNORdJSrdTWcKC2rk7ig6t9ZqTURCrmxiFVjQYbBuFGHNitFvngbSRXNk+TjPQMQbcLKrHu9eefOQ+vuRs7fo5sl/sD3rYehvcudsWGoG0iXsTimRVJ3EwjPvTOWApDM8hjnk07sbkYjzBkaonbPgfm/GTCw90BF7sDznzZgIrD7ea6VJHjNpLYjkjq9B/rYCsNZIBAN45AEjXkjHFkVSSRVTel7pv4OVpuYUAMWihpZU94+cEVpnHAk7e2ePr2aRJcGU3jsy6I8cbQTWv0w7os+WzQvep0fkB38GvfzRTJURERzrBz743POefGRqR6c9tiv/S+4fYfoLz+Qbim5qRUHO7rhO7bHG9930w4275fNyK7vi4RSMBCYPTr0QoK+/Hkb+0/r9Zqe4lFi62tf38uP/fEWdhnz1MnUaBm/hModdNOB1gLsIf/N4bTEGAG7SxtLntvBfQzf56NEjyV382xV/rOUhYV1wJ+luAZgCLgUctJ/FyVwEgDlRtlj6z2W21JP+3W+fvtf+On8Z0/9DP47TVlbRxi6lgBVISATNueB5Iz4FFKYFB005Pmy7STuCzLry/L8nUA3gfg2wC8b1mWrzu2eP2brT28PuD5Z26Hv8+2UzDUa0mr1wrd7v1vu6PmAwGRnpGK3bzw2hXOTyaMYz0nbq84o2mrqu+tDuH5yYRhAO5f7bMDqCZS0aK7jBVHyhJOiflYTAkM93hMCYyUDy77xXIj7nUv6OOfqyWIA0659fbJBnfPNrj3cBeKO3tqgbaHeOXUp2+fli9CN8j9wduu23bc5m8ZrrdOJiwLcO/hdaANWTmJrehzgQiS0e6StkXWNlOcRMsslOqmPQIQUvCGyX8EajmJbUOXOUwPczTUa6qJ6WfWxqsFPJ46P8E4Dnj2zkmouzoNQzVwZKsmvjHCNX6vTINAbrxKbg9hpNWCK4B+4Nf2BLZOogxcMIqEgAyUMEGS/tw2oNyDFrIPoF1/99grcLRf95+aQS+DAkz9O0ARTpkZsY/1vZlzQyp5Kk4blZM49/1utfPNFK4ZK+kz63NnmzGccalwXU05l0G3ex3gsXL93Xjta3KcuEt5r1lj+dfV37uTSgt4dM84S5XvxqLiaVsWq9zGOqdKAEiurVbw+SZbWHMN+1prh9ld92Hwgjf6+fvgao9f/qxLvfj7v/iCG2sYIk2+Yie3AL4iNYsugeGFa3pLYNwc3dSNuyyfBPCzAH5rGIZxGJhZvPnbxe6QGRW3kpzEmpPi1B3zr//80+eOHmPQTb2IyQuvX4X/t6icbUW8Sk2uVelvGAbcOdngvkASR2URe5l8C0lki6b61rMp+M/yBw7LW/e0MY8kyN9AUvve9kR03qxNxCm3jnjq/AT3Hl4Hx8IjkFof7yR6uqlsLSSxNyfxGGqZb16W/3y93i/dvy7KBlQRyEZOYg1Zak1Tp5vy6qbeMGCorW68440tiaQwBqHsx0Tx0/e12rK0841T9LvWtDxZwNFNPSL+1rvxvrlztlENNMBO0tei+I/a9klO4v/yvX8Av/QD3xpeq0nJM3QvXbgmDzrlffQ9waS2VmijjGEHlDlg3cJN/v/EWi7FXYw5Vilp9RIYfqz6/tP63fKgwLzYwSZAc1IYJz13SF0/G8mtU/v6+nH53kYwp3H9WzmJJ5sx7AklkqjN0Q549OYWquwOMigptyCW3q1/t3Y/FUlc+gNH7m9rL9dyEpk8ZeUeNfaSGr2ytrYi3fRzhCQOfU5iqjFQ238AhNqgAPCx33h5fb/7W6PJz8a9BiT2RTfd1AvX7GM/qgTGDdFNh2F4xzAMPzoMw0sA9gB2yb/P+3Z5fcCTt05CuYKzEy4n0RvzT527C72ZRmw3o+pYpnRTX8frxdevYt08xUDw428NeFrjWacO4Z2zDe5fOjVV/1na5s8iGzXhlJuo9+bfc+ukk266UiKiYS2Ea8QcU6GJFEms0U3PthOevn2Clx5cZxGympMekMRz3UnUkthjbmebbiovozOACNSsZrhOQwhWvPzgOjjoMSex/A2c4pk+lra2KNrQWFJWqO8m6EaMsp02T8rYCusknSNnEAI1JLEWXOFzEtODXFuTLJKo002vQ7Dj2TvRSXzmzoktXFNzgCt1Ox+lpdT8k82YIRveadACXBYFVM+Jy4NOaasqThPlNtyc4nPHrH///27hGvF5bD9mjtY6aZ0dteBWUwBCBAWYexQ4PicRyOmmziBv9xuGslYuhyRKcRd7v/MfWdsXmsI1yhrxJTBOpjGk6vgzxH+e5rRRjpQIdlj9amJiQPs3kL81QAYl5foPomDNbmrwzl7HtfumTZNXz4Ajg8mHuU2b1ujufs7jUPb1SNsbXQJDq13IgA5poGYzDkUeu2/XyUb9mYRu6h/rpco6fm+2BIYUrrmhEhg9KODfAHAN4JsA3Afw5QD+OwD/esdnvCnbsix4uDvg1kksivzFX3A30Jba6qbuPT/xZ/4gfvbPfxMAYDsOqmOZ5pv5PMEX70cksUrbUgRy0lYXSYh0wNunm5VumtfAq9FGW7L1gBJpIlUaa0bhJ168Hw4DP6fTTrqpj8jVUEs/R3+DPpcgIq1kY8AFEc62E567e4oXXrvKKFK13E5PU67WjlSS2P1aa9KLtYNtsRVAa7klTvF2DHmyv3P/KtBN/TWpBT1qm52kcQJ8tLuQTSe+m6R7MUqebi79AhD+Ky+iH4skpuMxlMz0fa2WOgXammSENLToM5Cr9HqD8GQz4u7ppm7ELPl3KMfiixuzbX+YcVKp3VnNyTIct7GGJDYCOjWU1HRIVTo/g9K5x2MQyGMpgb05iVVhNuPMmcZRdVIsg1cGBTyzxmrSAViM3C83lnvsFfPRauXOhJNYQ9taww3DUNBUAZ+T3nYA9HSDdf1vRrz1Tkk31XI7AZgCX4UoT/J8dY5KACJek05Hambp1vFvH5Sk6isqQZK2kIkevD4sRsBPAQ8oUR7FTnC2VaNPJQDRqvm5XYVk3ogW2AN+b+lEEtMczBaSeJUIXr74usvT97a9RpNna3dm8wxIokU3lSUwFjIn8ebopl8H4F9ZluX/BrAsy/JzAP4EgD/d8RlvyrY7uPqFt7ZT2L6+4vmnA5W0LVzj3vPk+QmeW9UvN9NY4fB7o2II6OFhXgKqWKNttdRGXb9SWc31S5DEU083jZ+lRTospbN6raV2Ll3L2P0nv/06PvrXfgr/2U99ws1hfU93CYw1+uM3JRml2ok5PpMgIre2U3UzBoDLvaObPvfEKV54/TKjSGmOjZtPW5TkJoVrFnComXb9Q6mUdXObl0gbapUumRuH1DSU65GJJGs5IsvS3lTdZ+bzpOk/0kieiah1xSBhkcT0NziIPFnZgmND3ANp7lSLJdAyeGuo+MPrfVgfb1v3OZ+zUau5yqz/G6ebNoySqMKaX0vLcashKVZ9v2qeuFEDFSgdAFY4pcxJtI1d3bBudlPQHo7GBihOkXHm1CL5acCz1g+I95tVV843GWCZl+PUZemcxE76odaPCW75fqWzYYiSVM6N64MzRrfTiPc+dweAU/72rUbJNAMeRwQu9FxeIihZcaSsH1wikPT1H/TrzwiZaA6HmTpQ9AHx3fop0LV819Y9upn0XNdHbf/x3/8VvPfP/z3sDnMI5qcgACue6N+/mer1FT2S+OR5ROP8/zVVYEq4Rq7lYDhZRpCPXvfmJHTY2G4AACAASURBVN4ckniAo5kCwL1hGN4K4AGAd3Z8xpuy+fIXt042+Ev//Ifw7V/xLnzle56KdRI7SmAAWNVNtchbiSQCMfJQu9GuD/XcLyDJExRDHhIaw92zCpJYQxsMZKNMUI4Rm2Y/5bq8dN9FYH7s5z6dzeF0M2IYOkpgrIddrQaPpPal3/FD73yLkZN4wK3thOfunuGVhztc7qJxL/PhfGPEfGoGk6UkpuV/UQaJZriuEXZfvxGIUubB4TaQatlUZ+/I4sY96o6Bxr8+323sJvO3xjp0GoTaYW/WSezI5U0PNu2gD2qjRkReWyPpvvFFb7sLIC8bVKMotcZ7I4RrNDEx3yKbIX9+P89tx61iJIegnyZcUwncmeqmyh7Ul5MYn6PW5Fj2ST+vNV56SWYK7dfPDubMUYNbhjMlgwLzbCOCvp9EiXgnPT7H7FuDZsgTAaeauinlgCnOhrUml0VjvazrfxrwbR9+B4B8nzoGEfTj5d/NPfbSTSlWiHpOEdfRjyeDku1uhZowsOZEE8EOLTDfdNzEdQT4POUi5cOYo8aSAaJtobVaaZtHbX/nZz8JAPjHn7wX9ppxqOdNai11it3+o9ugV6sd+K6nboXnnlrTizTmVgzU1seW9V2juqm1KIVwzQ2VwGjjjHn7PwD8YQA/CuB/AvDDAC4AfKzjM96U7WJNPr21nfDBL3gCf/XbPwwAGAf3IzF007SdVJHEWHz5C544w+9962184sUHAVWsHqKHGdvmDeoeZdQmRRJvn2zw2dcusRnHYPhrIhUWbbTmyD5KTuJrly728JlXL7LPHscB22msOumyRSTRoy/5WP76p9/t3/zG9+EdT95ykaZKxG5ZFlcWYjuFBP3APx9zGkOKpIacrAa6WuYMrK8ZTopmWDCbv44kLjjdjrh7FreDIidR+Q0OjYNDQztn4tCu1YBkapsB8d6hjd3CILGNLS3/iDEIN8ohJcWUyj4dOYkJTaqFJFo5iTUEzM//S97xRPF6Lf+lNZ5bjzcbSd7PdSXoGEnuQxLrjnOdPZEG7tKXzTqJfg8Sxq6NUmMdL3cuGYM8DcKxNpsU5qGQxAYikr6uzVFDnNO6oFpTkUTGSRTnYs/+04sAa/cAQ68fhlIkZ32l2U+jwLHqmodlwZh8vl83p5sR7376HH/ru78SH3pHWuIpD0Cw7I4SpfP97Dl27+VJMGcI+/qC0TCu43jumgSH1LDJ1bqMhJMO6MI1TVZIsiaDIjfa1wOolGUxUPjavX1oBOBqVQAetX3pO96Cz7x6iZ/++O+E4LlXKQX4gKu/ZjUhSiACSO9+6hw//6nXAEQkUQtupUI6tTbKeT6KcM3nGEn8LgA/tf7/3wbwEwB+HsAf6/iMN2WLSGJ+OTxEzdBN07YZR8xLecOkdNNhGPAdX/luAMC9h077p3aj7Q+2uimg0718v+eeOMWn711mZQs0ZCnC4Zazlz9vilQ0jN17Dx1F5ZX1OoRk42FYHW7OcvFqXzX0SxNI+DPf8gH8sa/+PQAUmH9t14cZy4KQkwg4hza9jum8W+OlTXWIZvZgKw3yXtTMN5+TmDqJQd20gWS1jOuWuqn13Uon0TaaJN2LcUjdPI/IY/EOqejHXH8gv5Yscs8cps64Wec41nNC24ZFJZcuydvzwjVf9u4n4zwVR8pCSd8IJHHX2CvrEXmbtqgKdzS+n5aj5v9mDMKyTmK1C4C4XqWYBoNI5XPkgyulkmd7jrVIvhVgrCEOFt1UGtdpEKXVxkHmGx+n3MpekwLtgW3IS5pkRM3seWqKiy0kfaqkHMjUiI9+8G0h5cbPUat3SOXtdSOCKObIBiXTMXw/Zv0D8cxnlVtV4Roj2FGj81t5gpO2J5CBI42Cy6D2qjJ/7b6e6s7XozQ/3AuvX2WBoVoJJK1lwjUNgTWPJL7n2Vg+L9VzqFcBIAIe0km0lEqLOomHz21O4rIs95ZleXn9/8WyLD+wLMufW5blM+xnvFnbw2vned/alhdrUugBgDs4WnRToDTsZHmDb/7i5wAAv/Dp18JY7rPzz9vNdQoV0MoTjDfIh975Fty/2uNXX7wfNv1JMSStvCWJ2Mh+x+QkeucQcNc1NZy3U91Jl83LFtcKtbaKX6dzlBudp5aebka8Y1W//eTLDzNqH4CComE5AFoSO+OkqGUiFk5dU9vsPAUuo5sW6qalYTEvfQ5A+LPlJA7l+vfPt5pEuOmotZhnV1Hwol+7o3bYSwq0bNuKgaa1VN1UE8Sw6J+AgSQm983Hvv+b8V/9ya8W/cr5APXfTtt/HrXVAneAEqFdm+W4jaNOt9uHoJ9ONwV0o4lSN5VIYrXHOl4V3W73kygdH1wp8/aYPkB5dljqmu4eVZgMhsEr9y6Xw9WcopunuAcYIRONbsqgq8Og7K2EIS+de8aRAnRU1kISa2eAlT8vz7fF2A/CHAe5JrngYvpe+f9qP8WeOYbeHc5tazzVcWhT0AE9UHIw9hLpyPp59geO7IBTQC0Ve7IFHOxumEkCAK+vzLQHV3vMczyXayWQtJaWF9k0BHZ8Xu6XvD2ya8J4CnPrkCCbtVbYF91I4hz7MSUwbgpJHIZhOwzDXxyG4deGYbgchuET69+6vv/nUbsMSGJ5QZ1BXhehOdmUl3BbQV9SuikAvPetd/BHv/yd+I/+JU9vde9TkUQmYqo4bj5f5ve909FAliVu+qNiSFpR3ZZCmpuLlQ9UXst7FzHZ/XI3Z1L9PZQEH/2pXf8gWV+ZY01d1q+Ps+2Ed67c89965SIgKnGDrDjOjfE0Jc/0M9V+FQeMiSKrAhzr+jpPlOluecXdmmGdoL21sYp9laCA6hRcPifRXxc2sl4UBacMO2+Q9/UDysP+ptVN0zyKOt20/hkaAunGz+XWn71zmsvda5Fu40CcKsb/o7SWErRG9wUIx63i3BzmGcOg/3a1ckbHIIlcTlz8/NCPdNw0cREmULLPxiIM68b1N4WDlPVvCneIe4cVrnGKx8k4DJJYQW04JLHPIAcaNHmL7qg5AEs738x/N7kHRSXuyvlWoM3ukQl4qOyORs9aoDydvzqWGvA7ht5tn21+npqd1kJy/eeqojDNgGsZOGJR8QI8IFFLDaiol3e6eSYJALx+5UCH+5d7h4CGM7GNJP7FH/sFfOff/Bk8vN4HwMH1q8/T3wNfmCCJvk2TztRridb48fx7AYAvgSGEa9gSGDeYk/iDAL4KwJ8C8BsAngfwFwA8AeB7Oz7nTdcurt0PfUspVVCjusQoWnnH+U1TIlkp3RRwG9F/+B1fFl6v1ekzI0YSnl6bL5IOOIc0fqd6ncTooLWj3d3Uyoaxe+9BRBJfu9xlvO3tNIYEeat5lbYp0E0lkthWYK2py/qN4GQz4omzLZ442+C1yz3e8eRZ9t2q5UQqm7KWxE4hiSpFicuJ05FEhxKlhkJEEnWlWDPfUo2Qu0dLSKAUVuAQQeAI+k+BpNiHqO8no89MP/n9bHVT/fprzUVN4zi1HME2/arcR4DjZPIZ1b6bTkmp5YkDjYCH9d0SNDc9InaNfnpx78WmSCr9epCsYk0SqsAS/XKf1+6XOrPjOFDqyr7fMeqa6r61tGlbMijACtekdC/vjL1hOaEKvZtDsvIgVRROYZzLviB0Lbgi7RnZtDIpfg7tOeasnJ46ifl9wwVc3Rj5eGxQIJ43+fOt8bTgnRW8qPZrOvfxfb5xiL8muGXkJFaYE20kkWeJ9bT7K5LohBpTRLAeSACA//If/DoA4Kd/9aWcbjo2hGtW27AGMKlIopm36u+39Qm6BIYQrlkWjm46tt3AHifx2wF8eFmWl9a//8kwDP8XgJ/D57mT6CFjDRXUogFAm2rhkUIpuGLRM+KGpSEp9fnXoP79PON0pdCebEY8sxaCj0hivU5iuyaOVoPNlrsHdAP0lYcRSXztYpc5IF100/XG9je3NKwjksgbdunfvt+7njrH//uZ1/D2tzhUsS7/7GgkdSSl3FSjAmjtW9aRxGPyIdw8yyCEz8+dxmGlRNWUYmsOtx6xBtqRZM2IXGBTOTdiY/UfYZmEg3BUmOsIeOMu78ciiel1odWEK4fUqw93eO1yh3c/fZ7ljUzjUAhuMZS0WuBoMQzyWuDIUnFjlObY5qnqNlNA7gvtotStfla5jfRns+6ZtN8hW1sLJVsPlI4D49zI/EfX7L3EzdMJd/BBkvKcYoQ7aqV7mJzEfuGadV6LFyXhnG03pxyRsoaT+4+cQ32OuiqziVwqZ4BF25180Lt2LrbophqSSDhEaYA97FsMAt9JnQ6OlKRkNmeopDfMtiML6E66C6YR16T3d1OvCecA9zr3LUHD2ne7dTKFVJ6bbIFu6hHBdfiacJls96/2WYCnhSR6J/FkGvE/f+8/k/0etTPRCghE5F4aM73CNQd7QQLA1CaD9gjX1EYjZvHmbruG81BDEq8FdTRtXom05qRUOfwVuqOjP9TnX1e/yg/FUN8syUmsJ9YaSKLhSBV9KpQVIN7UwIokJlTGbrrpOITvV6V/Gk66doimr7/n2XMAUcCj1s8SxKgpeQIW/1+nqTLRfzXgoeRE3DmNFATtHrDoxVqEnHJSKtfE/G5iY2XKbQClo84oCwJaMWuunxSOOBiBi23Ib9YPqW/8az+Jb/jBn3CfNYuDrYYkGgGgWuCoWbuzSoeyjP+bMxIsZKNW85OlgKqFohtIuuwT7pmWSIgSTFvAI3uHDIEhkQ1BmwYxnkRu5gWUQaIHGO11Ug1uGXtJOkfGQAN0VgKL5KZLhEUgtTJIvarMrJqzljs8N9Yx0KYSpq9r/TRng3HANOXWZnBRsZ0Y6rQmFthD7/bdWCddzS082Ai3Rks+GL9bELNKr8lsB45KKvP6PHOvidu0Fcg5P9kEPZCbbN6evH8pSr41KMnpc8FJTBDIWrqHdxJPtyO+6G138b7nImNvGsv6rhb66/sBiV2ysHRTKVxD5iQadNMeJ/FHAPzYMAzfMgzDFw/D8K0A/u76/Od1awoQVNCXWCNLcSwD3TTvd92gqALReNOQFIZXbylLPXPHRQzONlF9qZc26vvVnYbad3O5jLUb1NMbX7vYh/eMo5dJ1m9Q2fzhWsstDDmhlTnWi4L7a+J+oG/7sCsNemdVA9USxAGsdSrbv1u1TmIzKKAYFgQlrRqRT2jJ7183uY+879msXzW/rTKkjnauh7aREye/m3PcyI3VCwl4QbBOdHUh+gAlIsjksfh5zprj0LhvAF2E4TAveHktXr0/zBmaqdJ2CUra0YpslTXSjD6PJW36UZp3OOtMDT0nxQzm+PtbCfr1lPyh9laFNkrVNlPODhY1mMU69s+3x8vXJRtcqSHVTce5yoBooxsyKGDl3vmmiZKw118GnKjAXRHMYejF/ahZbTxauKYSdGrtXVnQIszddrilKJLVT0sViY6bfW9nCDyREyrvb4bK719flnw8i8oPVBDg2UASgyOb39/U2lLYBa0p+utf1Io+1PfW2ycTHl4f1NeObZe7Q7Cz718dcnXThgjcvYTN9sDXEyeQRM/WOZ0Uuuk4VlLH2te/qOcb1E07hWvYnMS3f1nz5R666Z8F8P0A/lMA7wDwKQD/NYAf6PiMN2Vr5apV87g8AqAhiT76L6LkJt1UoQwB9qHRokmmC/JT91wdwq/6wqcA6A6wvxYWjaFwpAy5e/9arSj707dP8Kl7F3j1QuQkbvqRxJqzHZHEPoNESvl/y5e+Df/5v/yV+Jr3PhP6AHnEzn0vI9emgggCBNp2RB6L9rv5efo1+8N/6msxIOfYa+pekRKsr2WZ6wR0IIkKAsny+P367VE3zQ7Emc9JlMIdTD+5n/g1WzNKWnkUv/LC6+H/L7x+VSbbF8Em1yxWQomYtYMrQD0Hsu0Q1fNDfGuplZbvre/JQFk3zzcrIl9HEucm1Q5AJSDQUiSMc/LNIVLVLq6fQvfinJsKamPtJeLMsSTy034aImsjzuU6MUsAiKAAiyRKh69H7TL/3WznfqjcNwy9OC93Qv5uyrW0frtWkARo6RCUVEc3d3uOGUpKpGBo678rt1CyQohzw4/hHvPPq7XUudwkjCcGXdKCroxwU2/gSMvTB2x2E2DboGk7P9ngky8/bE+msz24ciji2XYM6qZ+bq2z9JXCSUSCJNbLsF3tnZN7ulVS1UbleixtfRFAuZasuumxJTCe/9rmy00ncRiGj4qnfnL9NyDaHB8B8OP2TN68LaKCek6injTvD/zy87xRI50bnm7a5wDU6vvJ/JyPfuA5fOLFX8NH3v/Wde66shpgR7ur1JNOtMHP2zuJmXDNOOCkIyfxsLhrUdSZWduOiORrCqASARiGAd/8JW9LvpcfXzE+O68Hg4Clkvx5kVz7oLHqjT19u+SnyxwR3wfgDQSAow3pYj68uuksDm3G2JX5KLQAR6dBDpSBGba4uva73U9o2p++d5FdJ00UhglA1GijgH1v66qhrT5j00n81L0LfP1f+XH84L/4+0NN2VaLJYYqyEbYX9N8p4UuS6EJg2lMEiAJHCmGfJMlUDV2+5ANPza1/gWS7uZooA0Cue+hcmoId1OAZhpCPbK0sXTTkJNoII9hjgLNZdCXWKcyPkc56cr9Brpf1mWdR7NbgRIBbbQHKANwvvn7qHZNS+Vcfo56PyJQXjhE3DqWlGvauUwCCW6O7X5pwMkb39Y+6fv10uR1xV37HpCBCyq4WwmktfKAz98AJNGjiM/cPsWn7l3gOsk3lznKaXs5EU+8f3XIAlCttIjrJCdRNu18c6yt9nco6aa9JTASdVNDlIZp1if8F5Xnw560/v/3PvJM/n9s+0MdSdQUioC4iWk3TohYi+jDrjEOUHf2rENKM0j856Q36J/7Qx/Ev/EH34s7p5vQr4YkWhGqmgPQUjPcVIzC/bzgmTW/77WLXYh2DUNfTqITrtENJve3/26tOZY88nBNDOOzV1q/Ke5CGJJeNML3Y6LdOnW6LsABOGS8pBfP2Vy0ORbrOJlHrenOJU//8fPkcxKVEgC2HYlJoKvM9dfGs2pk1ZQFgZgPAQCffvVS5CRquU7u0RSuWeS+ZQdXXL/8uTSKq/dpI4mfePE+AODv/uNPUU7i3kISA90omeM6PEMB1Sj21p5QrC3YzjYgjd1++htAUsskkh6iK81uRc7lPNtov59ngSQaTspYOYMt+qhGCWRA6ZBfGOimNpW2VricctrkfUOgPcNQQ+n6nQ3LmdIEUACYgivSTogqpcaaHGr9Gn2UfZJB4CN7Kz7H5CRKJD06Uu3xJJXZfwblJCr2nRXwk2OxgaNuuqlyHV3f+pq8fbrpchL3hxk//LHfxHd85burQIs/A95ya4tP3bvA65f7eCZWQBgAIW0DKOmmm2nAZUVh/3rv1LS1fUhXeOdTB8Kex5bAkMI184HLSTRa00lcluULH3mEz4MWECbNSaygX60Dv4YkhtqKhnCK5oA1o89VJDE3QLfTGJwxAIXUdPoZvYIrj4ok3tqOmMbB1UlMok+bacQDciOJdFP9Olr0GECnQ9momX79TdU+jVq5PrLIsZfkZwzCVgmMY/LN/Gu1OVZz4ozDphS8IYw0EZhhHKIwTzEem5MoxUXYnMQeJLEV/fRUFwD4zZcfZhFwzahgKGkaAhl/65ZwTemUUutKoT8f26ycYw0RYYNiQHl/t4Irmropg4iEvGiBJLLrv5tadgRqkI2XOGAaE0c2dX1ZSGJr32rMU+Yk0mindIAZRGp9uTv/S3XauNy2fYaIu0fr22m0cItuXaNp9wqz9cxRXkf/fKvJ/WQhgivht+5khUS6qe/DOcAa64hZl7UzuL2/5nPz82Xy+yUiDlgMlDintLXSNxySyAvX/J+/8Qq+70d/Hs8/fRsfef+z6nv8GfDkuRNjefVil9iS9bPU01S304D716VwTS2YebWfm/b8Mfe2P2fDGcCWwJB003kPbE7r7ydbj3DNP7XNI4naIVdDv9K8uaJPRZGQzUnUI4u2EaM5RVauzbHCNaUhaect1erNeGPr1nbCxe6QbX4n04DdnkMSvSS0pcbWuiaac0OXKZDXnzCSl0UWZbcjwlowgc01qCG5bSOhnpNYV3fUcwsBxkkpHWfG2AXyPCJrLN8vPxDf2JxEec9ZlKFhGAqRCt9SCt7HX7if3TcabZQJQGgIJJOTeJwR0y6B0es/BrqpUsoI0CPJzH5Xy2Vp0SQ1Y5BVdywcN/Drvzcnbhzz8ybuP+3x5JljyfGHeSrry14n9TOYKwIf85SpOoniuzlno91HDwqQqI0SFGaCAvnvls+j2U853xj7oqiVayHAo+4kHsXuAHcP5Oq+XOH4dIzwf6ufcIp6HOC0n/9/S7gJ0APzVn1RtSwLOJRau/7tc6N/j7x9usHusBSlmmrt4c45P69e7Krv8WfyU+cubea1xEmsMb6A1Lk8UYRr6jmJ1/u5ft7UUHuLbip/N5puKuokzvsbQRIfO4lIaUrlYm7lcQH6phwKYCvCNcNQdzYGsfH4Ns9o7j41NU+T7qhtPI3vFfoplEAp7qL3ayNZZ9sxOonrd9pOIy2TP6+f03LagDYltuU416J9tc3nMM+cIIaIYqafqfZTDcL+wvFxnkcUSicc55I2zTnAx0jCTyJKyDikbi79hrWfZ5rbxkQIY784nnWP+j46kujGf+eTt/CrL95fjdIh9KmWwDAoSlV131ZwRUMoDISoRuX37WI1ClhnMdJi+RI3LAMCUPaThrqpLq2fv1ZrMi+3J7dK5h9R1D5l/zHRBvH9LGpxNp6yvtrCNTpFbF5IVc5OJHEQ+zmL7Pk5+UYhiSpzwv7daoY8FShU9gULyU3H8I25v1VKrGXrrsHT2M892qUbtMAp+bulJgbxu8k9oSe9wY3HBwp9v1I/wmYqAWVZFoZKmwWuCZ0Ez4CQoouHuV5y43wVx2PRRB8UvX9VdxK9s/eWFUm89zA6iTVHNu331Pk2OIkcknjA6UZ3xKr3GrGOgeS86c5JTOok3kBO4mMnEVGFVEP4pDHoW6CbNpBE2W13aFNyagIJgJ3Hlc7JN8b41zZ+oF+4hjEkN+OgRmS8BPTZdsLl7pBFyHpKYPhDq+a0McIRGh3KQiBj5Lns159/RMxRiVovTNRacTYY4Y7NWIoHWTWy9LzV9TXDSSxpklz9Kfdeb9hxh7bMZZkJ1MCPJwueU0iiuHesMilAHXG7XJ2oD73zCfzqC/ezA0jNCSWi3ZpwE+tI9dZJ1FD7tHnjYQF3/0emhj6mVifRqlMJ1PfllhFaQ/sBDhHJBW/61UYBvgSDhnayCExwwAyHIfSr0B3bTkopJc/0k0ahhTzKfiGQT0T//cd25ySO5XnD/m6LsraYoEDBsKGFa/rtCxWRMgIQ41BB4Jn7RgZO211UxJ/Zy2MOng+S5M/XxyvPfEvd1/cr6m6b+yuKsdjv1muTaP0Ad+bU5nj7xDkwbDqRT69I62rL5q/Rk7eck/jC65e4fRJLvgFlsA8Arn2/85MoXOPP0qkuXNNi60ndAoClm4rzhi2B4esdHlYn+oaEax47iWjnqmmCDEAbSZE0F9+sw6ZNN63302gFgKPRvhG5hY9iSNYO+82UOInJ4bOdRpqO4KPZ0TgQry/MHOvOZc2RktST7Hu1rqMSxYxR02o3tVA3E7X29FYZxQSOoxL61/Q5NkR5GnN0yEb+3AICJQ33XDQI0+etfqmSIZ9bmCCJjYhp2U8YCJaTWEHcPJL4nmdu4+H1wSXpr0u0WYPTiv7XAkCdCDyDULRyEh9c9Snf+WtUr5NYGruxwH3juw1lP6DtpNTQfqCfbsesfy1vkkXAtDnawjW5E8zUaQUawYTO/Yfpp9VJfMNyEpVAIbcn95e8cnPU6abWt9NQkXmxnT1AT9+w7YRkjusj4+wdQ1OVTgqL5AIKAt+eYsIU8H04R1YGsC3bIu2nIYkM3TrSphcuT3MsUzD8860m6b6Ap8Tq7/dlti46kcSmkzh7RNDRTefF0VoBDkl88lZEEkMuYwNJbNW4nAY9sMgG/MJ5QyOJq5M4eyfxMd30xprPSdQ2vI2BJOp003Lj8X+3IXv3qBlbx6qbmuUe5IHN1DtsGJIW/aeWEzetOYmXuznPSdz0lMDwSGL8O20MbaVWx8vPX2vaQZN+r+pYrbwlA20DNJpktYvrJxwiP8f0M7W2mfpzEv1Bs4jDF7Bz4rTakUxkHcgRQT+PVpPGdU9uYRrZdYY81y9dJxYl2ffR7hsfWX3mjjsQX3pwHagvrZzQ1vfTnD2KSn4EQjEqyHbaLq576aZczndvTmJNuMaX3Gn1yRFBzpIfh+MQwWI8sl8uwLSeaywikjhg7H1TqOBatMVRj+QzdEcgDxyxaCcg2QWcs9G7J2voC6uKKnPN0nlU+yl7Cc14UYKn7eufG8lMuoGfY06R9P2a3VSl3l6nDSDVTUU9U9oBFmhWPH/b/TZKKTZTXVZ8N97ZRoHIAhzdV6Ob1tVN3VnFBgMZJNGzzjzd1I0T1fz9nIp+a8D1Lbe2LuUp2dtr6R5Aew/Scql7yhmFvZxVNw1Iolc33XN1Eo322EmEUzfdjHpBaw3mB2IESXOKQsT6IDd/m9ctb1Dfr9dpANoS7X7uNbppb2SXzfer5Xc6uumIi+tD5hRvRr4ExmGNZteuIyulreUW+vnXvpf/Htr3qo6lUsTy12pzBPrzLyaNbhfQlz7n3ioMruVDYD20TSddi74RimzpvBhqcdovFbw5JreQiVr7fhLJMpHEmpO4izWhAODF169CdLZWbxKwiyLXFI97qetMcKtFN33g6aadTmLN6fZ7U47k2uqm1aBf4/7WWAKskSavJbX+BbLh/m+j2yXd1D1aK7kQrqEdsHJfZpwUje11MNBLeW+3nPp8jtqe0O4T97u+Pbkm1NVbJoKmO2pnvuns1e0Lk12gOhvNKSp54ms/LBHg8QAAIABJREFU4gyQAVdGyAcQlMyZDwqkKF36fHU8cS0ju8lGErVALVMCxnc7Nm+VpqBra7nhRJ1tfU4i6yTaOYmSbgog0E1rAo9A1Au5c7ZxNui8BMZWC0lsiTdpudQM46KwJ1l1U08tPazlPB7TTW+uebqj1lpUF0CnCWtRXf83E2kqE9nbh1Rt8T+KIElr869RHwC0ndKxrEEIuBt0Gle66f6QCUL05CS6yGYyVhVJMebYiyQqB43vx0Roe2sStahsrab1s5w9P88aklgX81nfJ5DE3hxBYHXAyAK0h2AQ2sEOQDu0qTKJBVWSUST085FOup2TWCK5gDs0p3HAU7fjgXhr6/Mvyv2AcQC0g83nbFsBJ20veRS6qTceLvecEeH3iVrAoxUkYZBErVZotU6oxhKAfW+7vkoAwhT7cI9HCadojix937i/LaXF0K9y5ljrREMS0/1e77cKyPmyOInhZ80RiHsqdx3do9yTGSdd3gKUKuego22MfdEbzKyVDnBOSnuOcj365805KvcNgwrKGqhmsEMN5vA5iTGQAG6OYz4eiyRqdqGZ8y3W5Eze2zUxK8YB1sTLav1ON3qpuLT9xksP8IufeQ1AdBKbSOIcVUp980hiTaUacDmJ22kMZTlSBHQa6zZoiy2m5VKzecrZPFm66bR+5/lxTuKNt91hrgrK1PLoWsI1tURv5rAZVPqJ4dgoUWRGkERyz91nEE5KE0lsOUW6sRuRxAkX10K4ZjPgmkQS93PMwdRKALAO2DH5d0AZIT/MRk6oFsUkHdl0XgCfkyjH81RrqwSApFxb10TPkeKLUhcOGPvd1s08rmPWKXV/L4Rh58eTzgaDpMj1xamblmsL8MpqI+6cRifRK8ZNwxB+W98YSpq233GOFEoEcjEoqmOZI5s2L1xz/4rLWdmTdFM1J5FAUspc5brzptMP89dqrUCJiPUvHSLfzzY+S0aCm4PdD0gMUMNg9a0qXGMwJ9RArUE3HcUc2XvUT6WHShsUUZNpcs6GgjZQwTT93GAMUGnvtiiBQAwgaikmfUgit7acA3yMc1kGXFnnvlQFbs9RnsE9cwSSYGag8tsK173BFQ0RBzhnOx2qh+4rTeUWclarJ+7bZ169wB/4qz+J7/yhnwEAXK1Cba3zwO9/5ydTKE1xZ3USR2X/9213cPUOz082mBcXmMzVTfU5tvZYvQYqwfiSZwftJCp008c5iTfTWgpFrTw6oF42A9A2f4620pvsKg/D9P9tlVJ9ju4zjUO7OGg42pYG9Xta7K3thKv9nOU6nExjYezWWnq4apsqY6RpqpxR2IiX1vf9qE1cOUhbv7eGVDMKfBpyaTl7/jUZSbNyEtU5osNp60REpAM8E98LKI0E5joCa+1IYZBTVLYjkEStTiXgIqvOSYzRQo8kagEghpKmBVes9Q/ozmWrkDKgBwTS9nDNVXlI5qywJTDynFD7u9WKibfzUcqxjkV7loVBROKc0vF6xT7ifO1+6fvd3mtMEp462mfs1s5gq+xGoBd3UmL9e4JyZUeQSuZgc05b33kPaGweLiimiWlYdXKPEW4Cyu/Ws7Yy55IIXPt5yvqidHAxvd+InEQpVNTjAKfjMWryQC0Nwz6307l1OdvavsWo0nbYvJaT+I9+/RUArowFAFyuSOJrTXXTmHJwtjqJUrhGC0ruDzO2qw0KAA+u9mHdb6Z6TmIbSez/zdJ59pfA8HUSHwvX3HjbzzM2DUU8LScxblyKk1jh8FNRhFGTxOaQxPTGZgvHlxzy9bXmePpBk85F7TfWcxK34xhyElOa5nYaMS86RUD7HN9Poz4wRppWpiM4UjWRloqxy9B9Zb9HE67hNh8NSWnmJCpJ857+VRuzVtybMX6AHJWiEEhxTQLdtNe5JK4jsEbyJZJI9JOBEjYnUQuuXO1mnG4m3D1LnMQVSaypGAJ2AKKKJFp1EpXxmkaMQv9Mm89JfECq33lj42RTD/gBOdrG1ncFdCSlZ/0z9zZQ5h8xwRUtD9s5KfZYyxLntoTnm93K+20mgySFc0PkxNXODWt9KXsClzcp9wTG+I9z8o0SqRComevH0oTz3zqde3U8bV8w2Ax1zYM63RooA97RtmhOUUEg3SOnyimvf3us4+uL+vcu2SPrlPr3h3OUOAPU60/sWyFPv8ORlUEqgAxuKTZXbY7eSbyuUDl/7cUHAIAnVxGagCRe1nMSrwMzagy/xTlZAmOz0k3dGPvw/lZOopWXfhRQJM+bUALDcPiGwTmKvgTG4zqJN9dc/cJ6RLiVk6jdAHUkkUva7s1l1MbjkERdbAKw8pZ06sM4tDc7DbZfliUYCbfWnMR5iQa3FW1algX/z2+9GuYQ6KZKxDoYaY1vpxkxFpU23tT586z6nrYhtzaSqmw3e0CpSGILSWmom9Y2SOWaLMT613O57INN5huEII6JJObXZF7YnMSYb7AsizMkSZRin13/maqTqCOJB5xucyTxPBWuKe5t99hkJSgHGyPuUsuZsUSK/Pu0drEK87AlcPw8a6hgpEDHz2P2ybC2OoJAtdxagDOSS9pcu4/vVzopdh8gpc2RjqwSXKHopqPCQiH2ydoZbAUlgTwnkQoAiUDVstjCQVoJDNZJ1wxJzk7I+wCcIa+qcDf6afVF3d/2nqCKIpkBj1ysis3lLRxnQiREO0upmsPi3Ajfrd2tzIFf1xhzBhSqwJZwU3G2+etor+VFWVvMtexRNw05iZX9/dd+5z6AeE2ZnMR9kpfuh5V0Uw1J9HRTH2R9cB3pprU0KaAdKKkhiWw5r2DyBiSROATGrUASHzuJN9L2hzqSWC3k27hxak7iwhwayiZuRRa1aBgrSHIMkqjllVhKZ36eNZQuy0nMkET3WMtL/KH/7RP45/6T/x0f+/WXM0OlLVxTn6PuABuomeLY+O/GCGJodRK5nMS0H5/vpyGJN52TqNVyZIw0PZervx9D6wDK6OIC+zD0/fbCQGBzstJDyqIk+7H0nERHN72t0E115VD7sK/RAQE74KTtJYwRX6Ob+sgxq26826/zNJR68/Vvi/LUhGtaCFg0PuNzXWiPMNKYPFkNXeqladOOrKTNEYi466cjshbiXKWbtvZXsQfxSOL6+SmSaDG91MAdh2TNS05TpZDEUeat5nOvNS3gdDCQxJjLJc+AdvkeKYpE57sK+4JFEvX7xh4LyM9Sd/3b/UJt6nBu8A6YG8+9P+w/FAIsrv9iCTeVZyLTxkEi4n7uVj/dKardoxFJrDiJLz0EEJ3DqG5q10ncTCPe88xtADm7xr1HdxJTuikQbZg2kli3M7QSTz3odvgN2BIYADBtk5zEx0jijbXd3K9u2sp5qi1GKrJ7BEStHlCzvSFrDilLSes96AGjlMI04HTNSUwN54AkVqJNP/Kx3wIAvC4KoEqlM/fdEF6rNS3STddJlN/t0F8nkbn+miPFHGxa8KJVIzTtV3XujZzEPNeDN1plRNjygGV5gwOLvhTOpW1YuPHioX0gjZ/QL/m9D429J52jpu7onMSYoA8At05i/kUNSTxW3dfMP9L2LUP9ENAju0A0HuYFVF6yV7Y7aVhO8vuxDrA2z1bwonVv24hIiUAya1ITCmHQFyAGqlhHVjNAjxF88p9hB6n0QG3LuB6GIb9PDeQxnSOQ5nJ1CKAUezKHGkjkxpqlDAj0UJn1s7vep1YCZm8E/aRSsv8fcwb00kbd54rrT4ylqQL3pG6E+4YsQVIyXvLPq85T2DORgdUWJkzHAnlvSxuURRK1VCkXuNff7wGAWhDQ00qjk7jmqF8fqudBULgeB3z9+54J7weU65H1m1d10+hUpXUSD/NSoKRAm/KraXCw6SxZYJ4tgQE4pzBFEhnH0prLI3/CPwVtb6ib1gr5+te1PoBOG+UihPlzVj8tGjY35pf2qyGJlpNYyMGTiEirvERIGr6OfPBIN9UNyV95wVESQn3FcGPrRp353SqRbqCONtSQYxNJVJ09e0PW1hdXAFhxEhkkUc1JXK9JZcxaLUeGDgWU6BJ72Kd0Uy63MD/sGYPQ9/OOsx+TFa7JcuLmBeeUsl35vFc3TVsQrhlirllUXuQCEPU6iQ3na+g/EGvS+r75OpCAcxhrbA/fgsBO432bMS/DQ6mbNu5vE0lUjC0r4iEdKcbZAHIEZlkWirkinVkt91Vrkk7LKKkCOgulRUkDfJBEcRLnNgIM5AEuC3lM5+jnBfC0Uf9e3zgn3T0elgUjosPIlCBR0R4KbSv3ciYnsaz7TJTYUoIklgc8KAjkMQGIvhz4tB9BGxXOJa0cKs63iHzZzqWWg9rD1OhRKQXi2cEiueOIwpFq3dvb9eyqpRPskvN1d5iz8+DB1QFvOS/XbBSuGfE9H30/zjYT/siXvRNA3S53c3AlMDzqCCBjpfl5yN+ppeDt9p78uzEUaMAHXdc/WOEaYEUSH5fAuPHWUjd1qFn5fDAMG3TTclNleN2ac2MUwFbUTWdiP1bppiwlrdgM2knUgB4RTiWgb5+6G/T1y30YvxVtSj/r9ctdFinWhGtYURjNGPTz15qG5AJrlMmoGyn7cWhPPi+A23w0Bywigi0joeTkW0GIWr4lEyEHSuPaOtiOVzJE1s8VUja7ZVFCJiCj9fPzpPJRNCRxNwcU0Y9dJOmL6w9YdOvSQd+RaHNx31j7loEkXiX1ET2VtNX8PFsiTJICRDnANSexQV889vq714+rwZnmYbNOg3SIepwNQNxvpCHfTTetlmBoC6cAOb3YQh59k/mFPXXzSifFDgrr/aw5lg4pwOXEaYg/JbDWGRgu0c74fHOOYg9iWDL+c8t+/WfiQvxuJd3UP9+eo2QltOxIOc8UrIjpHu0+6XuDk0iglmm/GLhudlMDQK2Ax4kBAKQ239V+DogiALxWEa9JBRvPthO+55veHxw/DUxJx9puonANEK9fKy2iZfdOCuBzIJlKWdB16aCbjluHIAKPcxJvsjm6aV3GVi3keySSyGwimnNjIXtyPMYhGgcNtYyvNeeoGExUUXCxIfhru52GkGD8yoPrYOidNAqufubVi/D/1y8F3VQxRhYct9FZaEPNSbQcgJoCKNA+7DU11S6UrhdJVO4BqyxCTRCAUXEDlO9mCkes8+o1COWBCHssP8+9OOhZA1TmhHIIfPn8bl4C0v7WO6cAgLNtXcmNUeBr1Qm18mtLVoJRAqNx+AJ5rsrVwS6DEahGBpKo527zEXnfGCTxWLSnl7bo+3WjBoHumBuELAKTIfdUUKaCJBpMBqC/BIPrOyZ5kyTav74lzUk0g1vrkpMlMKzh/PzTS8I6N3oAwnZKy7SIdoC3JdxkBo4Um8S8JkOZb8kiiTK4SCOJvddfOHsMA8jPEcjTIgBbuEYyzKL92WZ3pGOxiGC0J5E99tJU/di1r2aJEmZO4u6Ay108A2p5iZFuWl6XFpLohGvynMSUbuq/i2wt8SaNhcgylbL7m1U3BYBpVTedZwAL18doj51EeLpp5bBXjB8gRiM0wzAgiYXRRG7iWjSmZWxpqI3/PAOR0qKKgEFJq6BttrGrU7bca9FJ/O3XLsP/W3TT33w5dxJTpFajxLK5BnXhDqtOYv685QBoUWTmsK+hFOzB1puTKCl66WdUi4n7DVmI8hwzRxeNbHYLv02gv5FGqzSSWUMyRcXDIdrZz43HqZtqSGLa9613nZPogysy1wwgRanC76YEEpq11Eoj0lK8bB2+gENK/aVhFE4jksij4v66HoOktNAzNbd2ad8zad+i3iHDNDpiTcrvxpwbab8UTT9GuAlw66Z2/qZzUUUxCCTRrwuWEisdAIuOmfXJnA0iuLW+3Isc1/LGjglCz8uRdOsGkg6sAddsju7RuibDIMqykEh6mcvIMbeAfuZKzZGigyvrPH2w1bpP5bkRg1v2HHsRQf8dJFPGDDiNuSqq79tyoqZxqO7t1/s5OG0eSfSgQU3hNK2TqI3n3lOeN/uDE148V+imMo80bS02g8ZCtO61tG90Ev3iYpHEXUQTHzuJN9NadFOphudblNgv+9Q2VVZIoEcgwc2hjJAwN7Ymk78Qm52Wf2TllQC6UmyKZN1Z673NC3DnbBueB3Qj8TdfeRj+H5HEdY7Kd6OcFKWfn2PtWh6rbqrVtwyHfWvzr1Kb6n3cPBUnkUESlWKysV/NcXaPvcZPzIeIzzGRZKncyioZankbVG7VmOc6ARwlaiPQdBpJVPaglO71de91SfqnG48kuveoSGJrLAUB4yiZY3kgzjZqmX6+bFf7OQSLapSktO0PM4bBMniR5yQSdRKrdW8bgQhpRLr/e0PeMlw145pYy0PqJHJOg1bKws3BHguIgbEDwRLwnyt/bkvgq41ktcfbTHnuMOPISirhTIwj+wDreUOqosoAby8iGAJABCJVBjPbgaqacc3k3GviOqwDlgYuGPRlGI5QN1XORHfeWGMhnyMRgEvHi0JR9vnrPzcPLi7h+VafdIweRDDvx+5bus3b6redhiqSeH2Yg014tZ9xvZ/x9PkJAOD+lU433TXsGS0gk461FUrhPthYC1L556paFUOJJLLCeCqS2JOT6Cmqj+mmN9N281yNPtcMtKZwzSNEPjVqmWUk606De7Roo7VagqYCovLdjjF2I5KY13vz/w81mpQb+9WHbqO4e7rB/atdZqho321eFtPW0tXf3CFa+w2q6qZGBLqdt0QEBToNC208LidRpxenn1nMsWL8sEWK82tCRNan/Joc2ARxMU/WkExpi9a1SJs8FKmcRIXGE/qu3/vf/ZYP4O/8ya/B73vXWwBUrn/P2uqmZPYHxSwk8Xo/4+4aLKKQxHmpCpD5Jmt+xvVvG8kqklLdE+J7fItISruVOd8ddRKDAJOfB2kQCnVT27l0j5Fu2kGJ1RBZBhGRTgrhmG7GMaje9lBigXgNmYBT7JPvW+yenNNUSRX0zgAQUC9n1LouNZqelZM4FXmT7rGb7jizStUoHGc2J/dYEbhe4RoZvGP2Vt8v1yCw+0madi8FvdcB1lJ15kVn2/m2ncZqCYzdYcHd4CQesJ9nPHXbOYktJNHVSCzHHIZB1fxwYzm6aYokPnErKoUDDSexdgaMZXkbxgcAxLUMJTCIm2DcOBQxIImPncQbaQ5q1n+Amvx26+ZuIYm2kyI3OvvGVqNhhEVSQ9uMblUFVmsNa7lt3mDejINwEqNKI6DfoH5zeebOiaObJjes6twvXBRTV387wog0jJ9jEeBq3h4bNe10AKRhDQCHQ5umV8uTpaPIhdHEGbuxdiFvWAN5ZJczJOM1iUgi4VwKVNZCUXyf6gG19t1MI752RRPd/MpAAqtu6vol4xi/tR9Po5v2qvT6tiwLrvaHYCRc72e88uA6y0OWbbefm6I1fkzNAT6ObopqFFkPHHHrRO5dh5mLPjsxkz6DUBqtbCkF+dtZNdvCHBUWCq2uKaPyREBnmyKJDac+Hy/Oy4/D0hZLRIpzUlJK4OKiacYcRU6i+Dy2nx+bQhIVe8ZKp9ByElmULkXAjglAUMwVlc3DM1dmcd/QTmkSlPRzb44nWFhMLmOp0svd2zJVhN9LBlXdtPXdTqaxKkp4mBfcXW3Cq92Mw7zgqXMXNKw6iXO7Xnet7rkvgTEMQ1h/PkDZyp3fN+4djabK2yXJ2dFTAsMjid5JZPoY7bGTCLdAakiKVhATSCI5jYiF7qT0GTEMIqg5G+E1g46wLGX00+o3Kd+NidpNYz23bRoj3RQA7pzmN6j23bza1VO3T3D/ap9FfDVjhM1JLGg1hIobUG4i+8Nslg0A8lxG6veuIMfHIYmcAyClnAMFt+YkanMk0AbNuF7AU5SC0WocTrGfe+xXaUzQxw4kcTOO3UiipBr51jqgtIPN/7f19TSaalrLtDVHTZWZCa5o++t+XhztfDUSrg8zvv+//Xl87V/+cfzDj7+kft5+rguQ+SbTB1ImgzXPku7YzkdJPx/oo3vJXF5qTSp00977LawRYiwgN0BZdVMteEo56fL6EwjfZhqDc8nuCX7P9nseM44ugNJfODuiNna/3uCin6eco3V21IIklkEu2Ty0I6s5N0yQZJBOac+ZGJ+zhAKBhF4c5rg+b8xRXkveSdQZQD0IMM8uQNaP3be0c2o2AlzbaVSVq/0ZmdJNd4cFT523kURny7dsZR1w2B2Wgk34xJmNJM6NPeXYgDcAfOMHnsOXvOMJ90evuunhOqKPN4AkPq6TCDsaoMHT1s2toS9sTqKakN7s49+bj5W+prV08fsbi3VKj8m3nBSHO43k310dQyBuDq28pav9ASebEXfPtnj5wRWWJfLIa5RYykA7EknsNZL10iXl96yO14vSKddyR+RkaXm5Vi7FsdLu6sY625LkMm/mQG7GGt2UE6AZgxHpvyJjJKfIBrCuLaJGli6/Xf+OmrPNOA5aACLsdYYhqSGJDGqpsgT2uZFwvZ/xy7/9OgDgb/6vH89Q09DnUE8bCGOOOd2uB0nsKd2gKhAHxLk5RUzjkFGwaBGm5DcIRmtn4IgpgST7sTUZ5Rx9o9U1RUSecQI2SdCPZwnkwQsmcKSzQniHyHfrcaS0AARTF1NNNzCYJOl7076Wk6JRYhkbKH1/+lyrTWMugsKdN/ncAK7kRumA9d03vcrY8vdm+sX7BtlcewMXPfnNZapU+97ZbvScRP+ctwmv9gcc5gW3TydsxqGak7hXnL201VI3rvfx7PBL4YlbAkmsBDNNJ1EEypl98q/8C78//hEcPhJJnPd9fYz2GEmEd5JqOYnO2ZMwulVzJqX+pH2YaIwaIWxtxhVkyX9etV8l0gHYwinld+tHSdM5b6YRZ9s4qKebykLgabvezzjdjLh7usFnX7sCEOvE1TYsJtJ3Y5Hu2cjJanw3K5fUfX4+x16DMP1/K/qm0R0tmqr23RbwyIbMpTMPqPX1XGyCNwh7VRrdWkYYCyDrKybIBuDQKEb+XFVka/RVkUT/eQwFVNlLLDS9l12wCWOVr3mWQBSumcP1/Qe/+pIauPP5KK2mqcsCBuI55Iadb609r3UdzZSDsQwUskhiKclv9JHr36utG+Ol8vUsGiLn6JuFpvuzL70H2DFTejfLEvDfLRWmsmvLIbzXNy4ojDA33yd9vtpvzPOd6NIlwnHjWAL5e30zfzfBVIqOrD1HQKQAEHtr6ZTa61izL3rSG2QuLyPel47HnL+As0PnuW/9x0BtHszszdOkHeABhZ1s5Q2fTCOuVCfRfY4PEl7uZnfeTSPunG0adNP2eVqrVrA7zDjZ5P2e8HTTRjCzqd6q2uXcWs5ajwiNpJs+zkm8mdZaWMGQEevDiuRIFUP/GYwhn47FUMRauW1MJF+TyW/NsuZIWZu/hkilkfz02hR004oheboZcfdsgxdfv1r7eQSyjPxTzsZY5ltaOTM14Rorct3KJWURYN96op9pP0ul1PUrAyWeNmw6KUciidmaBHfYTwlKdFh4o9WNFw0ZjpI2ZDS2dO5Wv90hXktG3VTW9vOtlRPXqsFJra3OvWQadeOfGUurQ+sRgVS4xhsG14cZv/PgqujTUqlOx9TXP2NsKUZy7fqrTjpvbKW/N6scmn431iCURjKLGqSiGD1062rOdytIpZxv7Jie3h1olcw9OuXrksll1EpgMOe9XFts3pgcj6cSDrqz0egn99a0b0+uPp3v6h3uZE1SKLVCpTXPm0qA3RrPvyzRNisAVEMS7QB77qQzZ44MJtOI4JEOsEo3NRx1RzetI4nennPCNa5Uzt2zDe5X6aZtJLF2lu6U1CBGuIZBEmcRzGf2yawF4RoCFXxcAuONaa1cqZohYx1SGmpG5SgMpfHvnmc2g7JfUxVVyT9iDBm9liODZI1KTqIeyQ9000p5CcAZjidTrop6fhpv7BLZIIq5D4ox2BA2Sufei6RIWgfQhwB3J9sr4zE5iVqgxEISR6UP46TXSjewkeRcbMLuI6XreZGQuL56cxKBeF2onEQluOL61oNbtTqVAJqGjJoTSkSSa3TT1v3WyqW+2ruDMQjXHGa8drHD88+cAwA+fe+y6MPQTSXlnTG2NCfF961dE/+0FvDrFRdhlUNTFgotNiEMybBEzIBfzNtjv1eYo7AJLYRPy11lAzOe3h3QcGKO/veOpTNs51JDpLjzfljfi+yR3ic7EUh5n7J7l1uT+XP7Rk5u+pky39L6BUq6o/29APeeR1X8Do6sMVaNgm7NM1JA3cVkgrRAiQAzv1v1+hMOKZCyC7i1paYhGefwyUYXrolBwihc40Xe7pxu8VpD3dRSqlZz4BXdiSfObF2MVqBE8x0YdLto8wHAEPOTWm3aAofH6qY33hjaVlkDrG04TaNWI4WIxoz9Cel6UXai37E0VS1iNDMHVElZ2QtE6sPvfhKAVhRcdxJPt1NAGwDg9klURT2mTqK20Zk5icHRyJ+3nBuJYvk+ACkuIn5vGklMJsrkJOqbnRuvXhYkvi+fox2NBDQE0t5Y0yg5L1wjo6asuEXukKZzb/Zb17U/GJlC3bW86HYU0z1m9wDp7Ml+zJ6gGf8s3VRTQJd008vdAQ+uD/jA2+4CAD5zr1Q53R/sEhjSAduF/YdR1xRO4lJX9Gzd24zjcAxFKaVW0oiU2EtYtGcb1vGSoCH2HMdBcbaX/iAcm8vltAFSSqw9R596konymPUOEd7rm0tvIK+/MOSZcyodz18aezxHAQ37JLH/A/7MV5BEQ8wKiHsri6RrYkrU/i+DK4yTPupOOk/JjGMx/YrceTLYIc8A5syJ5737AVgKelWUx7wmeX1j17d9nm6nUa2BWyKJjm66nVYksVYn0QjoawJrgLv/ZKqCzEnUA7X1AFeNldPrI2Le84jguHFIoldEfewk3kxrRQpDVLHYIN1jK4ogjR9K3GWoOYn2ZtCtinq0k6KgdFRtodHMbfuh7/oKfNfXPI8v/z1PZc9XhWtioWzSAAAgAElEQVRWjrpv5ycRSVTpn53X343djk75/E0tb5X53dLNhzHSdNluvraTWiidoHtJwRVOuTVfk+wcpZAAs7FmjhtxPdx47rFf3TQaWwGlIKzk7ZT/5gyS6Iry6gdUFUl8hABQ2c82LqaxRPut+83Po003dffzyw+uAQAf/ALnJH5KcRJ3hxnbTftaVnMSiTqJqnCNZSAo15+hXEtqJbO2Uuey39iV/dpjeUdqP8/9dFNh7C4LmoESTbgm5E5axvXk6N1Mbr8cz9dXtFSqAf33XhY7+C+vfz8CLJx7Y7wY0FyyR2sP2ij2jLV3yb2VzXeNZ4D7my0bUOo5dNTl7bz+o/xu5L0d6j4n+z/AOekZkk78bjJ4zez/ab8yJ7HZrUCpGeXc7TSodRL9cx4AuNofAtp397Sek7gz2CSa7Qrkwdpv+/A7ACSpSw0btBUoqacFdXqJy4F39oqcxMd00xtpTdqWYjQB8Sat3Tha5I3btPpVy2pCJoCdWwgIuimx2Unuv5+n9d00lcZAt1hvtOeeOMMP/JEP4Wwr6iQqUP/1fl7VTeMNdHsVvNHpb4BFJNE2ERpJLJxSi+6rOencZizHmwlH6vicxNKZdcp29bFG9bvZUTSd7shtrNMUAwOskyjHsxT7fNsk904PkpLT9BYK8dQCHkAbhdQDR/Y8WzRVaw/S8pQ5kZzyNU839Qf179x3TuK7nj7HZhzw0uo0pm1nBC78mHt1/dv3d9ovRPJr54Ya7LADQL5vavzT6388gm4q9gTWkAyO1GHpQtIlU0bu/2ofZX8NjqlllK/XkkUefR8gEa4hrn9dzZl00iUCTJxTwPEIZOmkGPfNVNoz+7l9f8vfjc+Jc4+p42ZdD6A8u4/JSaQDOYEm3Hf9i5xEMsAiz1O/NpuaB5O+ttg9IaKk+Ryqc6zYrlZO4rWWk7iWxciFa1xQwiGJjTqJRsCvphTu7/v/4Ns/jH/0fd8crkNLuKY/UHiEcM184Osdjl7d9HGdxBttLUNNRn5881zr2iGgIYnMpjWOudHEcOT9/i7RF8BApBRDnss/0vLvOLrjYRYCKCEnrm3sSpQOcNEmr27q2+31/zqtgKOfaLlHveqmTPStJm5xnAKobZBoEXmmUPpW0K+AVSSks7bcshD5KEpQgFGlBfJoay/dNKOWkcau78dSjQCdpmciiWM/kthSPG4ZXDWaqr1vlXvJwZD7buUbX+1yJPGl+06o5omzDU43umHBqJtKQ5Kh26nfzYjkt/LEKXERaaCRdOteZ68qd2+Mlaqb9iDpVSn/Rt+NQN/Zfq6vy3k6Jm8430vafVQ1Z8K5LJy99Xk64HfIfzfeAVidjXAdjX4Km4E9FwNtdH2+N1C4EIFTAEXeHnP9I93Uz5EM5BzpAMtyIoy6suun36fNnFAR3GIp6P7l3nxXp2ZbBiVba6u2l18Huqlzci52Lmi4mVzJs2adRMMu0WzX1F442Yx4693TrA9QcRKX3jOYC15nbe5BEjcrknhzdRIfO4loG5S1BWJRgNxizBc/e2hoyF7T2TiWIhYOtvhcNCTrTat1xURbNSdlbxhpcTMuX7vazaFOom+3E7ppMUdCAEJDRNiIqSZ33zLIa5TAYymZxziXjAR6LSexaVhrRjJFSfbXMj63gDSSEwf/sHDUMumUss5lpKEvtMEK5DQ95tr7z9WEolpzbeUptyhpR69JxblflrZxPQWDqWUkuHvbI4dPnG1xUjEsLKqRH1Nd/50siIAeW+dGJ5Lr+0oDjcmlSwOMbFkWmTsZDXl7TY6D2797kHRppO1nO0g1jWWQiqWPbtc8zWPyhn0dVEZdVmNbcCUw8v1u6aRkFnRHC4GUzg2LJFaCp8y5EdFO7jeQ59u8kDmJIjDcc/27adqj7OeDK33rxNs1jHhZOh5z5kjwoBftjKVLOOdS2lyH2e63UVKQgJiTeLaZsJ0GPFiRw2kccPu0rm7q6iS2HefCljeupWZvAZEqX01VUwAmtk5iPtDe5q2HyZ4Ah+vHTuJNt5bDt1E2f8A2Jp1RkT/HbloqRYwwyDUk0UIEAZ1uauUtHZPvNyrX0sqJa6qbHkq66flpIlxzTE6ogtosREDAfZe8j5tHeyw/r3SOPG00Psd+N9evNJIZdVNp3FFR5CXfIO0Dyj0erW6a1DazqGjZPBMEhis3EA3XA3GP+pZS2R4FSTQPtqP3BH1Nsvd2T9RUo8n75n/HW6sQ1b2H1+Hv080U6Khp2x3q9W59K3MS3XczqVRjRRW18v1agSMmmCONQVq4o5d+KAKFbL09YEXp5rkr30+mKjB5aloQlKWPulJUfbUcJXLp9hI2uNUXXPHT6aUJF2gbuN9N0slZJHEzlrVarfztkkoLbo6F49ZObfDNObLxb4buW+btkcGV4Eghe7R+N6lu2oskytIZbRu0FGBi5igDpz17iVZOzbKdtJx07ySebEacbqbgJG6nwQUJ13QN2Zxd0ihXpgQ7zJrPyZmt9evTBbBZCUXryUncnAH7KzzOSbzhNs8MktW5QSpIIpujoCJSnbRRZrN7FOEarbD0MXRH9karqptuRrzlVkQSz7c+J7Hsw8xRF7xpb5B+6qoiZGuDVIzkLkRQjPcowjWMEyyLWfd+t2NyEn1OVq+R3Es39b8XrSSZrGV/WPUU6t4dEiSxU5ET4A82DX1pzfLYumG6c2ncN4pKr2/++51tRwwDQg7KyWZsIoknRmRgHMqcRCuPESgDYxZ9MRr/8TlNQl0dayydBmYtp85ldNyMPoW6afwsq21Xx6En30+mKgQkkUGkFCeRFa5h3w+kecPrXmIECYHj9zuN7g70lzOiUSJxVrE5iTXV7540jF6ULr0HmJzEYVD2LaOP/9plbqHRT1xHxk4DSiTR2sd9Cw5fhyqqfynSTf3zZOBI1FdkrokU3LL6aWcbEJ3E7TTidDOG/X8a3d+Arja6M2rlyiAhEOds1nwu2HPtPUVShH2ffrrpns8t3JwB+4vHTuJNt1a9n1pOomUka5E3ZzS151LSTbkbtOi3PlISyXM5Xq/gSlcJhmSe+xBJa+ckahvJ1X7GyWYKtdOASOfT6KYLuENb9vNoQ60Ng6NedTvpng6S0RF6Cs7n41lbj4okrmu0VTqglhPULkAe3+fbgg7jRxitzL6aHjgHcjOWh70V/An9wmE/B8Owi8o2dyCJCkXGOthU4RT/GhFwKvJdmzOsOJfGWo41I8t723/Odhpxtpnw2oU79E43zki4UnMSbYdvI4J3h3mm6cWZA+CdjsoX1PdWNPukfWVuIau4WyJSnHPTi2QBbq/dHzqRRBHJ78lJ1JxEKwd160tgGPdL2qZxwDC4e5sVDhrXPunaYvsBCSXQP2+dARXaqNlP5Jeze5CkWzM01VIUhpyjRLeJPr5ftpcw1786x75+jEMEJI7DIf/d7NzaeN7k49X7SbukVzgopftaYwGlw8dcy1SRPG3X+7j/n25GPLw+rH8PSV6/cgbM7ZQDKa7j+rR/g5oNagIcSnCdCbgWrScncXPmOOv7Vf37Md300ZuX6a0vED1qYeVk1fKIeiF7+gYV9EoWEQRQOJf0AdUZIZEbJFDWSZTNVDedRgzDgD/9z34RvuH9z2b9JCLIonRFTcyFy0nppu1Wrz9n2EkDtNcBc/+fMQwG4qnkjpmKr5qTwtAWJdVFPN9qKcI9k0hiQYkygj++hQLrc4pqmN2CE+OQRI5q5JQFOw+2CrIBGHvCUP5uzL2tq6JaRdLdo1rcOLk25ycTXr1wdbG2UwNJnGdsN4xKYxqkskuQACUzxFLlHAbnNGjqpkxZhJBbO3OGHZAHE3qRjaIfgdxspwG7eaFLG/j3qOqmTUQkN5DTfuZeuf7efr2ckFwvb7z20FSnYSjORKuXTBVhkUR5v9G/tzg7/DVlHABNFbh1Ocs5+v7WGYxsjgxLxs+xoLtbgjziDO69b0Le3twWMpT9CiSxs5+/pi3UzPc7Nie0V5SnqPFN3DsacwtI6aYDTrdTgiQOkY2zV84No06ihlweWBtUAYrcZ+qLLNgInTZQ0eYDZ1wAwPbMPV4/cI834CQ++id8njc2t6eXblqjZDI5Cr2y9YBbQ6pB0qRJ5gayH68naXtld64Jue05TlPpcNNJwxUk8XTrPvN7vun9Rb/eum2un04r4JzLvt+tJjhkb8Yo+lFIrjLejjCSt+KA8p/BCNf00A+B8vfuQTZOphG71RhkaR3yQDwYjo3st0uQFI5uGqOLj4IkmgebukbW1wgKaDqcC640p1jQ2PxnULnUyr2dXptbJ1MQrjlpIIm7wxzWaq1pOYmWcBBQ7idUMetBGq0w+4SxApLe4aQo/exzQwRlvEFIBjz2mXKo3aeubmrXSdTORQs53o6ObhqcRCOIEMeU3429/vFvJigpgzk82uweYzCN+71rtQuZvOjDoe93q+kJ0GsyPQOI/b9wUshzG8jTG4AOFe71+rG1TIdhyBkv/joSiDiQOpe8cy8DQN3odge6mm7lzHibSUcSJd304fWakziOWFabU6uvaImXOdHF/LkoIMc7e0CaF10fK/189xlcwCNr874PSQSAq/vrJB4jiY/crEMgRnDK/MI2+qJTxCi6o+JsMKplmkHSiyQ6ONyeYzo3wFM5+6KYgB2RlzljabvaH6qRYZ2ix0Vai34zF+nrpVrotdQ6In2dDphMZPf/N5EshTZhIYm1pG12bRWS/MTG6hPaXX+S/iaQy8PM9dsqtNGeHMj9vJjKvr616ovWDjYVESRQqUdV3O35vVtU8hQpvbWNeRUnDSRxb+SjACik/FkkUd7fjPMgVaCZnFAgp0QFlLoTSaEd0sJIBjVHYDXwMnVT4n4bnSG5LPn3a6vgKvsPe++slNirXicxqKKu86avf64AzeaElkii0a+gSWLt1+cU0WyGccxz2Qn67qNSOcNwpGGt2UD29YjvTce0GS/uMTrbfK5ZCiCw+bxhrxQlT5hcWUlJZtdWN9106M8btnISN9OI0+2EB1eH8P6TJK9fNrNO4lAGJa1gbU24Jjr4hnNZgDDV6emtR7hme8s9Xq9OIhPtM9pjJ9Ew8FJamexn1ajRnBQmiqMpEjJQfzdqcCxtsWpItucYFbrSnCB/g+pLcRCbcdq8cI3WRoXGwNWp1G9s07kpqEZ+/u01ApSGtX1AVfp1ilQAq2S0lcelSjmTNbKWvrVVO7SZ83e71kTz82PUTeV3Y9XH8jpx9mEo+6WKi5ZjM44DliVfk+zBJnNCAY4C3au4e0zAoyYIkM57M444P4lO4nZVu9PVTZkSGEKA5kAKHNUQMOP+npXrT4lnrW/uUc5NnVI6/0usE7ZOHOAc9usUSSevo5uf+5sRb9LWJBuY2ayU2G4ncXQOMFOiI8xzkCkf/U4b66TIa8KcbWm/AskynUThADDF3MUc/bFvBwrXMZK1zBjW0uGgcqk11BL2/ebz/dJgB7P+gTwvmhau8Xl4QRV1nT9hT5aBhPb85D3Ks9kqyvyNfptxrArQAI4JcLoZg7rpZhqw3bgPrAYKm6yEsQB8QqCkcmG0/QewzwBZp9L3OaoERo9wDQBc3HOP3ml8hPbYSbSMLZEwHPvZXGvpJFJOioDsefqJfoMykfxctpiXuy/7cdGwtB+bW6U5fL4ERq1fIVxDOOnH5ltKp5Shex1TNgDQKbgUSqoY5Yd5Jur0lTRhhyQyogXxuR4HuDSaSKN17w/RPnXTrHA2MVaaW8hGyF2/OB6rbqqppFkIgKQRAsdToBeDNVHrdzB+bxpJPCmRRJ1uuphOoqQ30eqmoxSuyb9DrU++l/OO20Gsf4oCnTilMZeRdFK8U0oan0BEEnvW/yQCVQzlWt6jAIdkAatwzWEO+8Ipm5M4jTmSyOwlU44kHiPmRqubivuNOdu08WjKuzDmqfqWco7r8zQFNHMSiSDJMCA98hfY95rMHQ6OlDlajvjPC3fPADmSOJPXX7KAekpnRFEk7j4NKOkRKLWWcmOlZWn7f+qsZ07iOGYBWtlcoLA+XlpLNoxl7OXa/gPYe5Bmp7H3aTHBXrrpxcv534/QHjuJBlWmlpNoITc1umkvZM9KmZdUC3tDqNWks6mtWj+C7qg43AfjsKkZkofZqc7VjMJRGHVujsfWe7M343HIKbHMYaOjNnykT6rg9kZNAY5uF2v75QhwW7TAPcoN8tjILrOtbjcjrhM6DifjH5E9P98uuulh6TSs4wHHGmjammSjmDdTToeRktcDHhbSJvv45n+PzTjg/CQekCdrjooeRW4bCEBu2LmxOXVTSSVkaHpDbS8njC1pxNNIinA27LWVz409b9xnr8qhxhmaj5fvecx11PYt1kj2jrpHnn0Ou9UckpjkJDLXv2CTdOTErd3YoJiWt8esERmEYyiBwOpsKE66RbeWc2RaISbGdcM49Ad3AWSqqD1IukTuWds/zYtmkcQ0Bx5IgjlEPz9G79oqcxKb3Yr1z+wLTiCq3MvT8+10M+HBdaSbeptPy0ncz+1AoaZVYZXhqQrXGGi65lyyTKWszXtuQwaicM3FK+vfj44kPhau8YZaZYFotf3832aEREWy2vORtFHWsBgqCGSrV41uSkc/xTxtGknZb2fklmg0NoDJJQW0OpU0StdJt5O/d1QyZIzk+BxFyRzX6Gf6u6EDJU2dRIJupxtpBpKoIFkLeKPpGHXTY5BEjW5KIYJBhCkxkimaanQu2XwgWUg5/b+Vy1vQr9h7tPN3kzmQTH3L2r2dznuaYk7idhowjkMTSdxYSOL4CDmJWRCIuL8lu6ODblcINxFzTJWZg/pnJwLM5kgBq7rpYaFQVWu81m+g1tclcxL9/XaxGpknE0fb8ohzT76xDEwygVP/sUWZAmOssnQJX0sWSJBEMpjgcnnLNJGmcy/m6DdzRik8HYNVqi50AWbS2Utowj3MlXGI7++hm6aorHfue2tMs2JRKbpH00aDkw7Rz7ZLNBv0mJzENHiRBna20xDmsZMKNHBOdCt9QwYJ07HMlLOKDWqVwHjkOok9OYmb1Sl8TDe9uWYiiTUn0aBg6UgiRyNZskXlHm0qYYnaAH05A3683kgT26/G0QYaSGItimP024yjev2tVqv31q9u6h7bRrJ/b27IU6iBGrU2+lSRREMh8Ig6ifp15GjT7r3CaCKuyclmiJFWgiIJpLTRePgyh32s1RTpdpRTOpbOpYn2aFRO42DT1GUZqktNuObY+paW+qccyze/1rbjGOimPkLschJzJ3FZFlcCwzRAxyK308oJdf0EkkKgx5LdwQY80nu7RzhlMw5ZTq41P6Dcy7vW8pTXIKTUTQsk0R5vbJwbjHANgIBEdKmbzkuXky5rcB4TOI3ndm8/m0mS9vNONh1MGPPSUIyTXs33Y50U74CRe7KWE8ecG6kyfI+adnp/s3ME1nWSXP+eYKakqTKpCr200ZoCLqXMr96j7flpOYnp2ZjqTqRIoipcY6QcbMQaAewyPHXhmlVh1nAuU1VgNpiTtaNyElckcfPYSXzkxvKKCz6yUY9FSq0DfJ04FZGyDhvFabD6HVuCoZq3dKSTkr5W7VO5sVtGstx7GCNZR0k5Woe8Hm4ejT6V68/StmRxb2vz8cn2krZl11oqVVH389w0QPVAQj+StXQYySmSyPzWQHL4BuOa66cJ1/SUwNgdFhNFD3OsILnpa7LFdRyf6wkk9AYu5O/NFJfWKKq+pU6AF67xBr6jmx6K9y9LnX7umxMykfU+iZzEKpJS71MTcrCWiRcqWpalywHbbhTVxE4kMSogsk7pknwvu49/T0ApiHn6e1SjO7JUeS+h3ydcEwM5zL2dIlKAp9dzQZnSSekMyhB9gBIVsUrphH5Tvv4ZOnMZgHDP29ckH4MJQANlUCb9LKufpLZyzmW8vx9F3bQruCic+z7hml4nvS9QK9lUXMrTWIiyATlT7HSTCJdNYzxDK2WQrPzmqkpp5RyoC9e4x54a38fXSWTVTRMncRiBads5WNl+1zuJe5JXrCKJLSNZ2bBYARRJWQGIjXXUk4Z7848cJY2LPvc6N5pK5mF2N3VtzEIO2/czDGypxuY+o6O4rjDIe517351SdxQOaW8eBdDhFAkpcyaSqdEdrcNNDyR0yG8fgSSm6qaODm738d9tl0WE+X5pCQDKsE5oqmztNi+xrSOJtYNtfZ9Yk0wpHff58TkKARb9GASmRuUH4r68GSPd9GSKTqJEEiP91lY3ldfxqBIYRCS/QBJZByC5d3pEYeT69/NujiV+gx5EZLuWl2BRS6BUuGaQRI2BwuZy+aCBl9DnS2CMGd2UEq4Z5Z7cIdQlHalOJ9EXc7earN3G1oGU9kzP7xaonHQtx+O/27wkBe7ZgGtydi+E3ZTOM6VN00hiInDk9h97TUo9h1CnlbBn5Hej82QLdNvup9eKtgNARU3xOfYtkMSNnpO4LMtaAqNRJ3GoI4m1bjWgyKpVqQW3WPsua/MBGI9AEje3OMPJaL/rnUQrIqbVlgNsnrxWJJRZINMYb2agb2M9CKcB4IRT8vwjDrUEBEpE8P/rKpktZ9s9ak460OaDS/SRddLTz/f9KNl6dYOs95HKanGs5lBhvF4EGHCHisztYQopu/fmSEqT+x+ib/E5KrdNiZADJJK4yXMSGcMuFjdOnUvOIAcEkkhFhFen9LAEg75W69O3Zn1RI4qZ560ypSxQjMUhkHk/im5aYQm4z5kxDG4debqpf7+vh5nuk7H4sh3w6Nl/Qj+xnzMI31QJ+LF7kFPXPNJJZI1/iSwRNWF9OyZvr8iJC+u4swQGXSfRve7VEa17LfRbkcQeloBcW/PC0TiBxJHyTooxlkQpWOOzyG0jfztZq5XpJ/cS1gEu1yRfpiYdh70maYCd2bd8S39vCzTI5imQRMa3rOck2usrOtvuOZbNE68jZ4NK9pZf0xaY4t4r7Lskz/ksqZO7GdM6ibqz10o50NLAoghWRQRROUvTOVupUlK4phtJXDqcRJ+DePFKRBUfsf2udxJZuqMmf9vm44/FomIM+QKRCje2HX3O819s40LPP+o35H0/67uptDnDSakiuRaSIqJabo4dggCCNsQUu9WELbp/t4WkugwCpUN/HgXA0e2OQRL9S71RtKjc6vtwBxTgjGQfXbSUNdPma6LF6CznNABYjeR87tYcAeecs0iiVgLDUnfUhWt4GlupuEtGnwvaHNFHQxIThM/TTf13Od04ilJqJIS6WqZwjesbjeQ2PSn205HE1vUchjzg10Pb8u/3Q7J5sh6BZeYH6AgwLaS30rsjtbjfSaEQqQS19401kj1V7fXLHYAeJPE44Zru+roiL50NisXc7aQ/GVwESieRCRRm15/op4lZAf3F3FkHTF7LnmsiHSLm5JjGmFvIiusA+V5yMJCvdCwAxf3N0MmlY2mLICIbgw1uSfZWDJ7W+2i1s93YHqUDbiclkDZTvQRGYJ90qptatNGWeCWAagkxeZYyYm5qOyYncTncSD4i8NhJNHMiWk5KW5ShdCwZI03SOugozqgr6TGR/NIgtMeS/ag5DuWGYEXyNbTN9wPaOVmFuiz6k7b9/81C9YOk7frn7ahpyVlnDsQy34ntJ+m+Jvqi0B33BuKmoUSM0TSs1zmlDLkX7O92uulXNwU8ApPkf/UiiST1B8hpQ96htQzXgG4nRtreyCXS8iEY2pZKEyYQyFKkIp9Hu0/5Wvr73Tl1eRWyIHpKNwolM8y1nO9BjLov4JzL1Chh0OMqu6PjN4jOnjlFR/9c0UcW3Q7BHH+/GedaPp5zpPz36kESo7FL1NvTgosEAgkAd05dLs/LD52TeNqVk9gnXKMF/BhVcqAvuALo5xSbbgBoSGI/Tdvqp9FGASLgKgMX5F4+yL2LuP7AGnANhvz6HF0Cxjtg3PoH3DXz/fbk/RaCi/J3Y4LX8vqT6LY8gxm7MEP7Z9+v794GIggzDAPOT2M+3mYckrz+/ODwueYte0ZDEtmawwVQZPwGcq/rCfhlrScnMa2L+BhJvJlmJQDXKFEzgSTqOYnt+UyjKAjLRnEqzmWr27ElGOqF0jkDLVNJm2c7j2hQKAJGLuk4RPEH37pyRI5AV9Xr3x6uQDxZikw5Xn8eBfDG5SRqKHXf2ooHvfu8ZjcAOd3OISJkZHfNEenJP/L1FVPhDuZ380bq1S7JSSTKNgASSeSCW0W9w06qF0AGt8Qco4HQ6OMj1grddHeIuTrP3DkBENEgjw5d7aJ4zXWgm5KoeBKRZ9RN3RrRnPSbz0mMueJcXo9vIXAxz2YQoRgrQW14BH7MxF2Y203mpTP13oJjs+T7luvXHs87ia88uAbQQzd1yq1WMDJtKY0QIM97sd+xzCEtd5tikoi9nBVAkQEP5voXewJpy/iXszXZEYBIHW7mmuhlIrg9IeQIEgHQ0G8csrq87NoCYlCFRRLTHDxW7EkGGHtyGeW5AbTXlqZT4f6O/e6cTtn7fZCwyEsn9jzVljTu8WoJDAKoAFJKOL9PZq0nJ3F7K6KON1D+AnjsJJo320bcnGm/NpJSLnwmt20cdMjeRLLGiuBNy0hT8o84ldKyH+PcxANK5LYRhkxBETA2vBol9hgqLY0AC0TWzb3ZTclbInMLiw2ZNRLGwtlgcxIP8nczInaARFc7FHDDxuqeZ3MS5wXBcO2hm+4SRKRXFZWlvgEI+RWXuwPt2IzK9T9GFZhCBKsUdK5fzO2xr4lX29XopmmR+2dXJ9G/TUbVgWggsKh4qhJIqZuOQ0ZvDQaCkZcrWRqAvb7SoEBPvmtag5NWySyclL7gSorAc+IuEhGxa4WqebIkAnZ7NTBfenCNzTh0fbdMuOYNYnfIcg+9lOSI3Nu2Rd5PlEohcnm7kUTpyJKMC3l2sOh2sZaPCLgqW1G1pTmJc8d5kwYT6Jzo9T27Q/y9/Wc1+02l4jEjQJO+nwOUT14AACAASURBVN23pAPGnIs1JDGlvZ+f5EjiSZVu6tkkDeGasUxDOjrlzLie2j0KHEE37clJHAbg/Gn3/8d005tpbEReyubOc3uzk8Y4QKo7jtLZ4BaWFLwBkZOo002Xbtnu0M/4brWiyEwh3zJpmMzJEhRc+vAVjhTj3EiHCGCcy37Uxo9XIolmNxe8ELTF45FE20CQjnOvslpPjkikgLpcLj5HZBTOHtHHU17mfnGRaRxwuT8EJNGiwMX7Jj5n7VuqcE1HIOfYAFCvYZFSttK2n5fg9Dxz+zTvsz5/nUSSd6TDvRV0UyZI4j83R+Bt56bK7jDGStWje5yUWPNzphA6ORbAozaAQ9P383HqpjInsV1OSqe7W/2AHElk8xH957o8Zfc3m5MohWts5H59r7gH2H0ypUlSSK7YS3pKKfTmJJbOBufYlMIp/PUH8jxNZiXngit995t3THrSG/KcxJnqJ1M+WHXfNH2ph6IKRCSwL+Up/s0EPDTbAvB2ofvOt1MkcUxyEgWS6BXKW4FCKcAEwBTBqgrXdAIVPUHorPXkJALA+bPu8THd9GaaFe2wONO1ppdg4KIxalH2Zq8GktVyEiuUQBbt2Rf9uM2ncDbMOn1lzUNe3TE+55CUPicF4KiLko4TkVyinxiLPdhymjAXbS1LYMxmXo8WKHE5iY35KUgi891knprvzSKJgHMeXN1IswuANdp66DPIPd00q6VGGglnmxGXO74EhpbLa+Vk1ZB0Jkjl39vVTxitvGFR0nj8vAOSeDd3Ek8UJHFH0D8BnW7HUtl2WQ4kYSSP8h5dnyfRvVS4hqJAJ7maPeqHfiz3yBsx241DEtl1nI7XU6rDv5SfG+1C1r7d9jmJvU6iL4HREzgahwJJp/e7zvumQNsIhzQbzwdJWERKoKSW/D+QOMBrN1Y4xU8lpa4zW+sk+jHpDX6esgRJPwJ5pLrpwlGZN0fcN/71VCWW6ROuvwj4MSw4oESOrbSsdCzfUvbK7QRJnMZYAqNQN/VIYuMMSOtGhn7GPLUgbdqviiRWgiSkmRBbT04iAJw/4x4fI4k302i6qcJHbtZ/eYScxNxoYjfWfsEb3SDsr9HkP4M92GRE2DLshqHcROz6lu6xRLLIOXaie8OQO7JLx2EvkePjqE38gShpQ6bYh1K6xEIS/RzldWQPmmA0zXY00rcTjzCtRnKXummCCFLUvk2C2qxfkR3vbDtldFNW3TTP5TWCW8Fpi8+xQSoARQCC3RNkkfRedV/f0n0hVbcDEhQ3ddpmfy3b420TtA1wxjKHJOp14tqlGyrqpibdDuvcli7D4iShmzI0TqD8vdmadIDLDb1K1jEjClMgiYRz78vUzOr155zE68NM5yP6z83zLYk9eShpizzdtK+fPKcWMrgokZtDMKzt8TKU1CtCMikHYi8/hk3CnolAitywzmV/wXkgCjf5MWkkccqRRLYGpx8HSJgTHYJDrAiTXJO0LVMECvPP01oNSUyv5+1EuOb8ZApIoayTGAKFrTWpnDf+e9b2IC3dA4jrky2f1xOAyAfa83RTINJNHyOJN9NYuqm2sCzhDt1J5JyN5YhDQ8t/aXXTkUReybA3/0ItgUFsrqXjnN7Yel9dOIXPEZFztDdIiZrln9caT1ICOdrokB2G7rPsfjJ4kZYaqPaZyk2SymUcynxLa44yT62HopGqXvYd2o4215NbmOaILKTx75tzEudAl7EokrVcXjf3yvpXaGzM9Q/R4CJI0u4ngzJ+WIbuqDmJ6e8nHU1NAn1HRJHT+aS0LQ5JHIsgCWDkJA5lkMQ/32rpHsRSxIAK3ZSlOyZoA3vf3NpOuNzPuFwFhE63tiGzEShwuOcINknupHD36p3EwOxBEk83I672fTVQ0wAcuyfX6PWWxyfPKfZ309a/m7t9/Y+hW6djsXuCtC/Y7+a/Q2o7UeqmiX3B1hL08wwCWAuH9rt+Y+ZcUkiiKDq/P7i93PzdMrppfK7VJHjA5jdr9S2tfhLZ9i1l6p0nQcKnb58UgT7f/JpsnadyHbt+9j2u0VT3xveTudT+kfIRf+l/AH7grcBnfwFY5j4k8daT7vHsLXyfRvucOYnDMPztYRg+MwzDa8Mw/PIwDP9q8to3DcPwS8MwPByG4SeGYXg+ee10GIa/tfb77WEY/h3xudW+TLMO4VpOonVzSzU8gETpQhRn7RMWYrNbVUmvV354QQ/akEcWbbShpBbsDnYkX4v+sMnGpbpjcyjVkbUCAn68XiRX70cebMNxEaq0H8A76YAQCpltCq6kEnY5wOKAYvqluQpd6qajo8315hYCyGiqLJJ4uh1dTuLBFYxnhYM0uldXTi6x/9TopsfmkvYzJ1yTwYu//Se+Gv/jv/UNAJBIoKf7iO20pa/799M5ieOAvHQPIbhSYXdYo6W/d08JhpSGRYuEiN+tpyj42dYFnB5cOSeRQeqqxdwpxLkUbmLunVur89rjJN462eBid+h20gsUhb633d80JVka5J1oW5Tl566jDC4y16XuNLTnWDjA5F6uUd6ZpZyKwPn60gwrxwcXAazCNfZYgNtLUpXSnnxjT6ncEarwbo5DEZCh9wRvg3YGt7LanWj/3lUkMdFKSAM9w+DEp9yZfYS66VimLjFleGS+MZAgiZUfXqoyM2JuccAtcLgGdpdrTmKHq3bvk+7x+Y/wfVpTuZFP4dpfBvCeZVmeAPBtAP7SMAxfMQzDswD+GwB/AcDTAD4G4IeTfv8+gPcDeB7ANwL4s8MwfCsAEH3NZkWENQPN92vy8RXHpkc5VNJPmAR4WQDez6Pep2YQtueo5ZsxCOQxpRT8eHX5YSMnq9PYredy2RvkMYJDcp0sC1fMWqORMGeUdEqdk04Kp2TCBbZzX6Ck4A7EtJ/vTdFNJZJIGrtelKQHSZxGV7+zF4EEEpre3lHgWCpnj3BEDUk3HRQtAMQEt8R9Qwtu1eimh1zQ4SPvfxZf/PYnAJQGk/u/+wxbuEYIQBx4ddPuYuLjceqm6bVk6t36tg3odlyT1r1dGNYdSKJX6n31Yi1NsuVzEkOdShIRdGIf8e/gcBBz9XS1J29tzff6dms74eL6kDjbxL6l7cmmQ+QeexFImSfF/m7yXDxGACWdbx+S6GyE7r2E3MvleAvIPM0hZeW45zjHLUESO+6bdC/Zz3wJHv9+wO1bW/L3Ds42ybaQa5JX3F37iQBvOyexPNv8Z/jfM62T6Nt2GjPhMoATL5tEsC8d21rLVVVUEknsCeYHquj+oj8n8QN/2D2+96N8n0b7nDmJy7L8wrIsV/7P9d97AfxRAL+wLMuPLMtyCecUfngYhg+u7/3jAH5gWZZXlmX5RQA/BOC719esvmazIHEtH8v3s+BpuRgZlEgWhH2U3Darn17vsGMTT1EiYo41Kf9j6iTGnMTKWCJCDpA5carjTCIiYqx0Hq1+x+Qkpk5pD9qglsAgqF5Av3M/FY4zi3aWyfY96N7F9QHzwhfOntaoZC8iuJ1GXB/mLgQScAjM5W7G1X7uEvvQ65S1g1sHsSZZylBJ027PUVNbTJ+vNY3+A7RpoP53TnNSGGQvfT0VgODoXmOBpFvjFeyOgFK0x8qcxGBomVPMaLiRRtjuIwN+88IHOwon8YicRDYnbhxzJJFx0n3zddbe9dS5+V7fbp2MDknsCRwN6HY2SmpfX78oQMPS5EWeFOukT7k9w9CttcBRjwJuioD10E39NNmcxFSVszfguk++G7v/5zmJfSUwYnCLRBLHMaPEAv10016afHF2t+zkSp3EtBTPuUJjl0EjIGEXGCkAwiyn1rI2nhUoKXMSOVvedV5FZ3YX/TmJX/WvAd/3WeDOW/k+jfY5zUkchuGvD8PwEMAvAfgMgL8H4EsB/Jx/z7IsDwB8HMCXDsPwFIC3p6+v///S9f/VvuycaERKOokGBcLD2lK4gHE2/Hvdo3ueSTaW0X8AzXIWo4j8ABwiqKEUPTmJ0tlgKEPyBrWSjVVHlrn+quNsH241J93aD2T9qXnhDqjNlCrpuec4Kmf+uzE5WV444pj6loW6KTXH+Hv35AR5h+v1yz0ADtkAVgGCw9J1HYGVgnhYYq4Ha1xvnHDNjhTT0PYgc9+q3qPcWGWQpC/6z1LLak7iYV6qEeG0HmCcI+c0bGVEfrbVlf3nashlW0mvn93h5liqlDKIiEY3pRCYZO86kPcogEDj9E5iz1ouirkzdfo6giRpe+uqjvuup3i1v1vbCYd5weXOVvH0bUoomTTdWhjWNCVZnFOs4FD1+hP3tyqc1UU3JRG6QOX3VE72+rvHlPLLpmAUOfBkUCb9vXl10zHbJ9l7FIjXfTcvzVIPvqVgxbEUdDblSQbmmf1O1k31LQ0M+HX0x7/2+dhvOhIRHHObMB3bWstarXSgIXgz5J/fVSdxmzqJnUjiMNyYaA0AdIz86O3/Y+9dY23LsvKwb67H3udx3/fWs6u6u6qrmqYbKN79wNAQwGDAsUgHuR0S4SQGYhsbh6AkljAgISRH+EcUJYpC4jwcxxa2ZAs7kZFCTKxEUaTwAz+IiSPLEBv6XVX3cR57r1d+zDXWHGuudfb6xrr3nLvPuXtIpXtqnz3PmnvtueYcY3zf+EbTNH/COfenAHwcwLcCWAG4BuAL0VvvA7je/k7+P/4dJsb2zDn3IwB+BADe+973dq9PZVzPgsOnKBDaaZIMhZfln9iMB3xw8tBIhs3VAU64Zm4vtbmqqH2Vuuk+Qc7FPSAN6o5RADadocVgXEV8b2MCNPrvnX296HuDgSJjzPQB/QMK4JGUWDiCCS7jwJlBcoH20I6ykcxBupfFyAaXfcvafm8Mhao3LvV9sqzS1nt5goerwtNNLUjiCJJ1JpKeeDqs+Rk9I0liQb9kjH79LItp2mIMkjjWkmJ675Lsrk3dVNf26PFTSIqeI+ts6SDYEuz16KaGtawFpixNwTWSuMimadOAyq5X/eebQxKHSRJmru+5tY//C+/g7rXl5HvF9lvZ/Uergpof4B1Qs9hH9LyFRBV5Tql90oRIKSTdOaJ20vWdcopKOPhsXClFTK1kklvAMHltSkrGQToZuGlGwnJCWVksS+yqqKHlUjuO6G8MjNckMnuyf7//fxbdPitRuOkZHdOAAIb7/2//+e8djBvUCBIUe/F/tGI3s5ZH+ytOnMGxKrPFT+sFiU1l65P4hO3C1U2bpqmapvnfAbwC4I8DeATgRvS2GwAetr9D9Hv5HSbGxtf9xaZpvr5pmq9/7rkAw07K37bf52CBTFAgzqJkTq0P+b3m1fvXpzfxWCQE2Lz5n1l/t3mKZ8rkT+1Zj4UkDh7QzTSlmHoC2D5bfC+tAdHcmiwLRWYOjUFTogCPOjA1WXniejWJjJjPeC9HYo6JGxw0DJVWVNDeOV4D4OmmcpBaawvz1KGoG7rWRkzUTdcVGSSOJDyY+pKxtTXJEohqov04QwIoYkAw4+JaD2Bz8BaLz/j3N73fnWUhkApICutcx31C5fWzLHFnKU5PzFEFwayDBgQksawaOkgH0BOYstRW7S/89e6fFCZqNzCibjpxzfj+W4Lgj73u+4Y9f90QJLYB8KNWlIet9wuBjX+NDfbmthuwCg4l8f03JAk1M4pF0mVuci1LD9rCWO8X70FMwhvos7C6721yVL8tjk3dNLAS2M8mST/xewqivzEwrJsE+ER5UIkVX2Z6jv79oMeN9QAGOBCmioCbABycfb0YhAHYtTxkvDB13z65YvfTkOmaRCPd9AnbhSKJI9f+AIDfhK87BAA45w7l9aZp3nHOfQbAWwD+5/Ytb7VjsGksO4mpheWcaymB8SKegtGHjp0JpTMuLBc55My4sfo7Zo5jaBuD0o3dk6JqsJfbAilgmlow1ifR4uxaaXpxQMQ6d3HDbbonlHJA2aw1EFAzMRZJGUMSp4N7RHRTFu2ch5JKkPiuBIkk3VQOUmttoa/3sInkAKpPYvkYdNOm/7sxS2IkF8QzOpemGo2z1VIPXy83ZMrlnvXWMUk3zSLhGktNolW4Y0y4yb8+cS3lJE9lq/vjJACuJ5kW2uI+cXRtrULuLQkZQNckNt0cNs4xWsviXDOJmT/8Da/i1TsH+MQH7lJzBEIA/KilrrMsjTpa/3RSMgpSWFXUnriLAUmsjYGbRnx0Td2mdTkWyFI1iR2SXndzpertR6i7zFJOXDhnLAqUupWFRd10kSVdPfW6qnFtj3PDs8QnJYFWuIYSvEl6a8TPezq5C/T3ciYJKn829ks2InRn1CROa34kQySx+3ybkMTh3+/2cmN/RabuO07AATOQxLp6qkHihSCJzrnnnXOfds5dc86lzrnvAvBHAPwvAP4mgK9wzn3KObcH4KcB/IOmaX6rHf6XAPyUc+52K0jzwwD+2/Z3U2MnjXEMx+Rv/SI7+++e1UqBcZoAKCeZW1hjDjmwuSbxLIeQpZZZVVHPEkChatsiJHFqAzq7bnLzHJPo/svfsN5/3kmO7iNZf9FHEiff3lmWDhERTl2tf9g0ROZ0KFzDNXzWznVAGqbH7XdIotRIkXTTNOkpQtJIYuZbZxRVPamqqU2Ea9YlN268JnFa8CNWZDPtPzOTW1X0vVH9XUeRxLPXZTZCN2UP4Fi4xiOJXEa+GG3BsFlJLxZuAqadrUUW5mhxWnu1jAaHJN5L6NrahQ4SuWctnAE2ddO4drU0JGacc/imN+7RSD8QkMSjVUnND/AsDY3QMePG2jYA08HloN6PYHbo+eiaRCZJMkAgKWpfHGxwaFuX7FD3kvmuh6J/hqRk9L3R6qa1DREE2h6cba0rewb464UzuGRbYCSut9cBXEIG0IggeR8HdF//uhVM8WM3+1w+URH3SZz+fGPACMMKGdXFIM4ALRzEsPs6y2PhmqeH510U3bSBp5b+CwDvAPgLAP5M0zR/q2maLwD4FICfb3/3UQCfVmN/Bl6M5ncA/D0Av9A0za8AADF20pjDPhuBtqc25bniLrFCFCuBfhbdcdN6HKPE1o2lbkkHN0S95ciGMFvddOLBHgtkKWc3yn524xgnZsQhZK5nDdJlnFZxY64FtAGRMUgH+kgi3aMsHanTZD7bzEP7oK0jeufIRjcV2pAp0wdPiyqqmq4tFFtmKVZtn0RmXDbynFLqmgOUevrZdm6sltHQFse6b7mhAAGwOXgb65M4JSIQj9UULApJTBI0zUi9zcQZMIduHRS1azrYBoJwU6+WkXy2ZQ/xCbHpOQIKSTw2IIlxMoFEBOMgsSJq2R/HQk2iBInTY3SwHXrSTSdAASX20b5uPYPNiKCRyhkjkMz+M9YnkfnKpJarMgZggYWF7rpsUlILN8lrU6b9QgsCv8xSrBSSyJ4dOuArKpYB0WcJODe9JuVjaESQ+d7O6otpBVPk/6fqvYfAzbTC9WjpBjMumRmUuv59lNcmTeimxTGA5qnWJF5IeNoGc5/c8PtfBTDatqJtm/Fvtf+ZxjLGKD6N1cTVE5vyGIzOOGlnNSSd5IMPqE1ox00HsjECZnUI/bjpjTWWBPY/E/32RrI4U07a46KkVgTSubj+iPzekmEtKdsnca3qGvTcN5lX5OwjIiySUg6ut3lcTAlhJdDH2nswn21Qk0jSTYU2JM8cL1zjUVnLQQ94uumq4IPLsbYUVVdHwR1QAFeTCJyVuGCd1jBG5rDJxp5toM2UnzF4VLiG2MeBPpLSNA3vJHdiGjXSJO2uvTn7HLM7pu8joBDB0pa40HTTDhWf8byxtVWC3FvWf3f/jTWh8Zqsak5MZq7FSCJ7/+MkCatcGVAb7rmJEUGmRnxsnDUA68ZVdoecRTuBfi0djWQN1E35zybPs2yX7J5QGO8j4JOX69KzBFiFa8AnXTskkWSvZG0is5vjTESQE5wb910ZJDEO+Mop/zoZAgdyHDBtWUbbGU1dr3+5kIjb1DojDeU9LHAAwDuO2T6wPmoHXX0kcWuNRhLjBTkDSaRaMIzIOOu/d/a4WEnSgCTqbDdzrblUzvb3dpXMvrMLTNckjvZ7g6EmVNNNiSzhGLUPzPUi54duOD8jaw2M0E0rviZRrifB6VRNRJoM22awh3atDl+Ac7aWWQLnAt2UpcDlrZNgobbK31+VFVZFTSMpgO/btq5qPFqVs3rLARYk0ZbIAYa1jHXD0N/8v/Y+icNnG9hck9gJYM1CEhVKRyLiY9cUVGRKGCyuiWb8yFwFpOE+MuNC8FzVHGrg/3YI1C31tXsqCcMjiX3J+7rhmQwDJJEtApthQbjGQDdNxpQkp6+VuGF5CStu1GvmTlIyExcHbgbKe9xzb2L9yzUA8X+47yxPk44p4IO96TEDddOaD26GzJXp62n651RLNG2SUFmVNV2XLtfr0YTJFhjWOQ5pwqzgHLrrAJwPNAYcyNjNa2tYkyi+BhOU1nX/7JjaK8daYHBI4rCdF816z/eA1YP2D13xmsRttuBgn/2ecWh7OtOh/z7AZcSGvWa4hTXI/hMZaHkmhs3cJ641irYxyq1DESCqJtENaxKn6sfOqgllkcRS3X+2Jit2CAGutiS+jxz/f0jt40QBkq62qq4b1M20IiTgD+2uR1O7602hB7EiIS1AMJZZJ8Y553CQp0G4xqJuqhQh2dql/TzFSVFhZUQSbx4sAACfe3BKBbJBAa5/sE3R9MYo6NRhHyU8wKz/aN+qiX1VxsUOAuA/31lJiNAPcFiTOOXM62CP7dGn/26/lmvzh4vZHWxGPg729PU32UL1SbQEexrxrGoDkqiaXNPtZjqGTVsnRUr5P05N4hwT4ZoHp20LDMKR19+3RQSrP05e2zzGP/vhPtY1x0AB2uBGKIEVF4DF/gxTEx37MiwlFhDF6YCAsbWFQFynOX2tRKFEloRrqtg1bAIOCOfSuqpRVA1ysnVGnjoUZXhuqOSKQjvZ9jZScqDVTdl1LO8HAvjAJBJGNT+MSGLoVMAnLuRak6UzI+cU2zoj9uXZdYL8ADh+2/+8OOTGnIPtgkRGSj4ZiitMLaxEOSNijJMW01RlNKOSOSpcs2GYZBUH44hr+ffOQ8B6SCLRgiEZeUCnkIMxARpmIx/2Wuq/vmlc3G5Dz+Msi1uXmHo7xQ45gzaowI1VhIyvV3RI4kSQmA4DYO6QUtlIsrZNbH+RBSTRTDedzgxq21ukOCls2WAAuLWfAwC++GiNO4f55Pt1n1UxBoEfBinNRiErsWEt43R/s7OEa6ZbAAwTQPJ3zqxJjCTy9XWng8SAZFmQxIDc8HVSY+wOCqFQNZc25WIZV5uQDY1QsGgnEPokAtMJo3iOge7I1RbGfdFYKuFck8/2zpHfS3RAfJbpXmqW4D5VzwB73sv1CvW8sfdD7+VMssOP6SM+LJPBj0H3L0837SOJFnXTXr0rmXDtAiLDGTDod0gux2W7lrqSA1JgLU+DKmpJtsDINdppuv/9di6mIDHySzYNDcn8YfeAqbU1QBIn2GVjc/TXJvfyqCyCuV6aDNvi0EFitgccfdH/LEI2T8F2QWL7xW3OWgyh7amFFSNZgkhNBmARakDXKLjIIWn/pQQBjI7MeMNtLkseiwBtqj3ScxzQTScOqTEBmjnKrSFbNDUuphb7f5mM8BwkcZQiwzhbbQN4PY6uSZQeTaUfNxUkxpQQVrhAI1lWCujBIsX9EyPdtM1aWxw7ADjIU5ysS6xKG9301kEIDG8fLibfn0Z7AtA618yzHa1J5nxK3JhwjS1x1KlyTowbywgDm1UXg3DNsCZxMkhU8vqlYf3HQTCTyR8+22SfuF6fRP7Z1ghrRSINQITaGIKNZZZ0yRFrn8R+kGILpAAeSZlrIoL1diuCtUcknBJ1tlmUkudS0np0RwtKl+h6PxbJ9f/qlg/+9U0Ouf+3Rzclt8k8jXoJkglowH+m2nAmjvVJZEXgdJDIJmWWHd3Ui5exSOIiS/rCNSQDoqp9/bUlsRInoZlRMUrHrJG4RlmsnEgejbalI5E9PUd/relEyZhwTUX45nrfslCZAfjA8PhL7c8H5KAnb898kMgUnyZRAABMZ7eGfPz2b00hie1iDUGKf53JyMdKesz1BoI3DNoWcc/lelQAEAWlVd1M0r3GoP6pwvkxSixFG40CYJaCOEbtY8ZpqoufI38fB4GsMfvJiG/o61lrEuMAoCYP0t4BZaBtAUG8BrDVSZVVY1K2A7xwx0lRYV1WdEAKALf2Q2B454AIEkeQe8a5Tly8JlkBiGHiwqq2aEHg4wSc/J2pZ1sLMLFqnkGAxooktoFpF9xM18QNBYDYJt1KpZRIYopJwLZukUQWEc/TvrgFu/6dc7h3za9fvidpvybRUqcc16CyTvkcO1z65/lLRysAQcl1k+lErY1uOkyuMIh/lgbBFUsAoOuraOEg8UtiJHHD54uZSkxtv5hPXEhwwwd7fo62M7FX398Fl8QckxDIsqJsgA4SPZK4JDOgi9QL3gB+/2GEa3K1300FXtpidgGbXAS0cI28viFoO6tP4sR3Hu8HAKe6Psbw41kh/deEBTFV8hEDPnQrHh0k7uimT884ZaMzkMSJxSHvA3gaSZexq/qHxnSwF94LGIRTRrLdU0u4cwi1k0Y6oHHgUNYN8ilnNwHqGOqfcArj/lN+jtNIohwOwxqRaWd30O6BGJeqQzTMcd7BxiqyWXt5ASK/3Q8upyiWA+Ea8iDVNahWdG9/RpCYZ66rDwFCnzrmWidrewsMjSTeYZDEkYOtZpIrSbwm2ebSseKuvb9rcJKnx431SdzEMHDOYRG1cmHbsnRBSlV3a9PiJAtSxATpMd2arVvKFFJqyT53QWJZ0wkZoP9sW2mcz11fAuBR+wEtmcjiy7hecrE5XyRxmaV+jVUNFlnCJbfU921BEnt0Uzk36CBFBdsWJFEl4eYgiawwkv7ebHNsSwAMSRItnGKqLXSuu+8WNe0s9bXzdc2rJAPhXDpeVQCmGTlin+LqEQAAIABJREFUiyzBylqTmISEU0X2YPbj+v6FKUhv+s/AHHVTXz959rXivVXmCUwEl9Ec/bWng+cxJJETXRzWG9P71uIQOH3X/7xDEp+eMZtCvECY7FZMN+WlrWMk0RDsRagBQAreGOv2OkUq9YzSohgxBZGoSYw/m1zPz2Uz2lD30FXuPgJDha5puqm9T2U3rkcjZIVr5om7aEls+R6mEMF4nnRN4kgCwipSYUX3ekgiUUcEeJRgXdY4LfyhzTq8+4puahOumRckWpHEOPvZgEQ2krhOlhBgiujdbE3i2LMNEHR+JeLg58itE40kioNtQxJbxK3ihGuswllACPZ6NYmMk5b44HlV1ibaqKaxWRARIIgwvecWVzMzphI7W7jmHINEIKCJeyyVdqwEwFg6cBF0Rx2UlgRt3Y+RmsSAODPPjU6eNiQiCASULiQJp8foPchSy54kI+e9oQa4aqmcPN3Ur6uHrSgSe3YssoAkFmQLDK2U7BMC1KV65SVsQmZQqkMkeM9SN91Uk+7/Zj9JqP8GJVzT87mIYG+EzVYzZ7AL99GSlAQAHNwLP++CxKdnTPHp0Nn1/05J3wLDIHHaaWrnFWUfJhEwN8xa63mcOS4ZEbcwom1Sb8kgYGmCqCZxmls/JlwzWZM4QomllFvP+N4YJHFsjVAI5Fzabucg9Oe+yfK0n332f4uoSVT9frogceJwi4vLaUlyFdxYFcE0lZNFEkWk4uGpl7tnD21RN10baxKvL0PPI6omcSTbyhxsmuoFGBI58V5CiFLFIhWypKfnOI4kTjWL1mq7AOiATwuniMPFfN9jtXST1NYkTsBxjqQWoLGKKS2yBKuiNiEbfUTKQIdC6CP4xvPXqPcnSV+V00J37Dl2pCrq49i1Pf+c7pHJJp3wsPRc1UkZps5JbC7dcYBAGtZkr1WKNeFXc/sP0KpwGxWn9TNqqWXXa0v+5a6nUTo73fRh++ywSOIy08I1fE1iN0fDGolLPizCNRZg5CwksZoIaMdqEikkcSThyiQ8PCLYf41RWPb3Eb1r0vvWtefDz4tdkPjUjNmU4wCAyW4NVErJoCHO2FmQxLE+fZNI4sCR4cYAY/WWHJJldXZ1k+Ju3FSfxAjZADh1x1iAIwTp53j/jfcDGBeuoaTMVbDHUvTkPV1NYitcM0U3jZMrrCS5puAyMtra3nPbIxrO8bQOObRF8IZVKt1fpKgb30vNgiQ65/DyzT0AwEvtv5tsLPvJF9tHiCBdkxj+nwnu5VYPe2QR1zoTSTz78+Wp6xwm//6aor9puqmMZ747GRdq9+rp5FbSF+liEFkAbZ2Ln2Nl2FsBv5ZXZWVyWrVqogVtANC1m3n9Ob5mZqAKadx/AAkuz9d9OVzYg8SmaemHliDFBQfUUssYlw7QoiRp/+xggo0gqKeCe5LxUqkAmO+T6BEYi2OtS0wsSG7qhoENcz2N0lnuv+w3j4xJyV5NIpkkkdYtot5tQZt1IoFCjSPfyRK0jYnCTAE3cU2iBUm09+rul84AfMmHbvej5zBph8+Fn3dI4tMzpvh0KOU/vfjnqpTGGTu6lcJI1lrPY9M8e4I3BGowJ2Ok56kDvoJSN03OLFI+66Aac6w93WVifmd8tqlzdPb9j8bxDW/taCcgjeO9IIBkoWnhiPZ6oU+i7Xtjs91jdFPWcZXgi0W2geAEPjixtc4QWfx3jwtTCwwA+Ls/+a341Z/4Frx0c5qmF69J+ZlB6eI1SdUkJmPqppvHxCIVMlWKbloPX/fCDJuchKQnXMNmyUeRRANty4okameEbRPknEOeJFi3zynA1agBLdpQ1rDI3eda8dhYk/inv/1NADySCPSfb0bdGvBrua9mu3l9PAm73iKJTPsLQKnS1rUpSElc2OcsNdi5SrjWDU/l9BS4sI4t7VV0cEmjpIpxZFVgrSbOeW2hxKShqI5hXEASLT2HNUpXN5ZEjl9Pj1okkT07NN20rOuuFdAmC/tdbarjjWtJbS1I/P8z4EHcEkdsCr0cq0lkFK5j31V+tpZuyPUoJLEdZy2d6SGJTzFIzKbfcrWNOUxjBT5m4zpLpZQNwEIjWUxeS8b1+/T5f6eWo26kLONYalnsELJUKl003zTT9/+sxqnJBuRgXLiGUxsFRgIwYo2M3v+p4NINBW/YGpE5joVkFqs6NBNnMsn6O5hTk2ihJGsKrlXd9D237ZupyNtL42wLkggAJ0VFB5bhmineeP469d6zsp8cRSZKkrDZ/znjlGNBC9e4IW0ImHZC88z1+iSytMUk8cFsWTWdCISFbirX5FpgJOb9R0xaAFiCDcDX4a5Kn/jkg0QlXEMGDWJ/6Kvfgz/01e+h3w/0e+CxwWyeDhkX5ylcAwCHS0ESjT0gFU3SGkhZHEmP9ug2EdQ0+1RCtt5skCSpu7Nk8lrqnKIp0K3ibldbSCYyAf+cWfuLxklJ5hHQAQ5L5QdCEnJWTWIVUCkr3bQ0IInxPWETyQAG95ISeIxRwYl1GdPP9XWZ6+kjh0USx1puWMZ1wjXsg3q4o5tuhTH9xsZoc8BExiJSKWXph6FxNnrjJp2tBBFq0M5jKuCL0Aaql2AUgI01wz57nn35bYDot5cOof4pul0cyAJcvd8gY0rWRCSufx94evGwJQiHyA5FQrg+ieFgC/QM5rBPBuqmzPfWCX0YAtnHUTd98YZHEr/2vbeo9wMaSfSZXVbwRovksA2R51iM0gGBAbHJ4rXFOjIxus0Kruj6wrnqymJTQXCuBJgAXqURCA7oquSFinKVXJH5TQtuxUwGa01WbVLJBALd1CLsItcC7Oqmc0yfARWJJGqRFsDvQcy+9TgmQSK7H3TUPiMCNpYUYxN+c4RrdH9FlrY41qieRYADK4pHO/OWShsCjekx8qfN6qZpP3EN2BOulgB4bk2ippvahWuaVjGURxLntKmR9wOczxv7kmJltXk9xywNfd0pmmp8PV6ErP8a8+zErAn5W5TtkMTtsKqerl0a1PYQ2d0YSWwMrRSAsKBoummU/WeD0li4hkF7Ou559JDy2U9bADCGJPpDcfN1gKFwzVRN4ln1lhytYHj/p/bWGIG0UDsGTWspummorbJw5HWh+LrigvuxDC172KxKW7Ah9uGXb+CPf+sH8EMffz/1fiAgBdaaRF2rZKlJnGNxLS9zQI2qaxJVcTG6zTaBj0Uq5LWNc0yCSm93vY5hsKkmMYnoh7yTtt+ibXOEawJyM013lGy3p/m6traTmqL/fO19APj1L5S0LEnogHSh+yQaKIFzTTt47Pem1RYBv/7P+5m7vrTVJMZKkgCPgMWUNBZdnSNcEwcAXE1uPwCYEpYK10IvccSuSa+CXpmTi0Bf3ZSum1RKnuz1ArugNqmbzq5J7NFNbS0wKmPdZJYkHbrH1jfHvhMTcAuzY4wpNoUIjvqEbrP/Gphi/bNjupZ9KLDGIKxa3XRKkX9gz32Zmvj5JaGnbBck1jVV77cu+4sK2AwbD1RKWSSxo0xEzpYhcEsS19UfWSXoTeqaTezIc+O0/DbABelx1qicyP6Mcc8bYo4DKX+SNpc4L1rQOYQkAhmjDexhP7dPos72sfcf6IskFGQtlzSpB2ziRlrd1NICAPCf7z/47g9R7xWTRtkPTgs4x7UEAfq1SuftsMa1vMyBH4/xdEfuWvFzQ41zwz1h+hAdOgjM/pqlfeECC/3Qty6puj2dUaaVhIhWF2QcBMDf99TxNYn+er7Fh3xG1q9Ytr3UlpkFSdRIiiHTPdN0PZFFuEZ/30Xd4MBYB2w1QRL3SbqppoVbgg3NQrHQ6+egPYDcf1sNaowSlRVJN1V7gklMKfEBsGX/13O0qZvqhuf+Naq+P2Ll8Oqm/ZpE9rzpBYlVQ91/6UEtSrGWPonzkUQJitrXJ5l6Z/Qhn0QSh2I3k2JuUd2knydXujG4HnFfsjQkvM3CNTnXVui8bRckkgukhxIRG3msUiqj2Xq/GG1jauKANlsHxyvpDdAGy7gwRs9hk8XKdsA8JHGKFhXqE/rfGxM0+7mF6wCccJAf52sF5tJN6V6Cbl4dS9fvrQo1iVMKXcAZNYkTwjU9JJEMtgGMq5ueo+O6VMI1izSh68Zu7Id+h5YWGHNMI/CAYd/Sz00DOLLfWEydpvsrKoRI5jA15szakg1jBWnTY2gkcdG2LjGom8r3K04aE5Rqheu0RUz5INE7TuuqQpo4yiH08/SfzTv/3Jg8TbrEj58rNWy2aaeQRhLTpF+DWtWdA3xe9tz1JQDgtBhRVhoxzdKwCde4QVKSQhJVEs6CZGmNBWsAoL83ShU16VPQaUpsmwSyMEm0DoFJJVbP0XBOSYnBuqxNVFpJLnbMFQOSuGr3rIIUbuoFzjMTCRafxF8L3TUBu8I7c80zkcSJWym/12PZmsSY8UKLx0VAkSkJ9+m/Avzeb/DvPwfbBYkk1GytSTxTpZR4YPT76Yy8gvoz8FnruHE2P244RytKIYc+pW46QBs217KMZYwYZ1f+pLW9R3z/bXRT7ewa2hR02ef+HDZZkMQOjgyjkqaVSi01iZ0zYqTxxDTV8yw/6oRrTgoTIqjbV1xEkKgpMlQWM2JAVE1DftdDmqqVXcA6yWMJoIJAuAVpE7M4QHuqvyXA0Yvl+12VPJI4pgLN+gdZ2+JjVdR0M3eZ57sna1Owl6euC7it6qZzLKYlLwg6Z5721z8r3PE49lXvuQkA+Cefe0i9v6v3NgrX9Pe79jUmuEmdasli65OomUqWRunyfDPCTTJOn1PsPp6lSU8l1qxuarn/qT1xDYQ94Xhd0nME/HmzSBN8/sEKAF/esExFuZgT/AOU4m7bTmdOIoHvZRojidP0T2C8ncXUNcdqEqfYZX5cvwxM5jsbSTSAABahwM4+9L3+v6doO+EaYpMcZPGJjSs4CH0+MotkhU0Lk9fS16sVujdHyZBteK7HsfWWQJ+CGDZkW789GbuxBUn7Jwd9EiemGIuEWOim/npyrf7rZ9k4krj5WoBkaP3PFmqNVuCz1yT699tqEkP/NcCQWZ9RbznXOuGa05ISMRG7d23Z/Xz+NYn9Q5E6ENNhT1Ir3RfgaxL7IhVsAmjYJ3GqByogSFsUJJJrZD9PcKqCREaZdhEhiSUhnKLl5wEekQUEJao9dZSsiZN5iiNp6ZMowYbQ5c/TJAAGbEiWPoNZdc3Hsa98xQeJuvZ1k/UTcP41XrjG/xxqGaevN5duGusCcPt/y4wSdd+aEw7SfoIlAZG3c5yjbmrvkziC9hDXk3PjZF21158cAsD7GLcOcnz+YRskGpBEADgt/PUY4Zo+ksiJRAFDFhBLf/bv9/9P17JHCSDmmqmqmRTj1Eb9v3Pq+2MRbrq/YswKPOf99UnbM48kMn2CBrU9xMYVqEb+/2U4A737cfGmNTXO/6trgpi16Ole4f9t42IYnRmn6hosNYnRQT2VyYwznwBXkyhjzbVVI/cfIISDRsRFrE2KLQFYL7NoyGxphdmuT+IUkpiM1XpMXqqXWbdkhOeaHPaPViVuKgrplOk5ve8u30x8jo3V4Flp2jxtKEqu1KA46Fqkgk1AxEg6oDOuZ6+vLE1w1DpnQHs/2FrSha9JXJmQRL9GViUf3ARkw/+/BUmUFh+rsjKh1FKTaKL2RYm780zIAH2VRhbJyltkSaysm3Onm17fy/Effeor8darnFKyzEcrRzPBnmbl2IRrNN2Udz6z1HUUWr51DLr3A54FxNAd9b5lqYnL2t6dlgRoKLmxBXvZyHnPzFMYKLIPsc8bANw+WOD/aRFqWt0067dqYvaFWM3cIm6kz+A5aHNV8/d/rE/iRiQxHUESCcXvWHPCz7OZTBSOljwRlOtUJ7ytwjVbYs98kMh80XFhLbNxDfsdcojIoJk7GQDE1Kam4eifiRu2bmAd+XjxcxtCgpOq6s11+v6PIIlTnPUR4RoLImJtCj68/9z3liYx3ZTL5EuQ3qisKUc3DYeGOF20cIQ4CKXQTfnvzaRSN0JbPE90Q9P55tJGv8bQcmOOZUnsJNdY5pu37zQ6fC0qdfHzRmfkjXvCKJJYTx+mImwhNtUSR9t+nuLd48KkbhqQRL93MU5yYIUEIQdLTWJR1TgtamOQmGJV1HTwBfiA1IrsPY4tI5XGOcI1Pvt//kSoP/wN76Xfq/UETHRHN9wnWeSmRzclb8ciTbp2P94ZZ9RN+zQ9X3vPjSsVm8Qk3FTbEEG51XXdmJDcNEnQNPZxkjiy0k0B4OZBSEZeW3JuuCSzpJaRUd2V701QWZ7u67CSRMJEOwqxmG5qEkEc8e+mQIAhu8xQlqWRxLrB/pR/N0ZvZeimKpg1C9dsiT3zdFPmi47FFZiN6yyVUosACqACUpKmKgFHw0L90WdjaxL7FA3/GltLp7nueu5njhnJGk05QUl0/2WedL2fESWN73+4J9Pj9Gdj+73lap1YhGvk0CiquqNrMHVqWhK7qGo4x2zIiUIS+URC6vpiB/5vnT+SCNhpo7//wy/g5n6OG3s8AjnH8plIog6kmPproEW3Iwo0xxLQAhxhDpPXGskIA9N0U00DrMg5AqomcY5wTVV3/06NizPr3kkm55gJ2lnRLRgAT51dVzXFkBETaitgC2Tn2jJLux6VTL9PICSpJPnm+8Rtl7M1xtJglarn9EnM0z6Vk+9BGJ4d7/9Mj4nLYIqK+97y1HXaAxa6qZzB1tpOIIi0+Nemr6UTpyxzCwhI4rEgiYbn5rYKEm8fLqgxi6zfz3efCRJVWxbb/e+f3VSNbEQ3ZZOSZ6mbTvVJLAYU1eme52MMM0qELGITAiS99YJ9mfOwHZJIfNFjtC1g85ets4qArd8eMIIkssFll8m313+ZxqmHRg5uZunrOrWAGNih/qneNmNIorQFmbJRKX/j5mMRvOkVUZMbeZ6JQ9KYHQugrUk0IpDy/nXVICdUQPX3xt5HQNBt//OFqJs+BpL4X/wbX4fo7DgXy6IaPKZP1iAB1LCZ9b7gjalPYpcU4xoHx0i6HzuNJA7ot0SNpth+nuLUSDeVgFCy654GutlJGyT8DCjdwSLFZ+4XuFbakMRFmmDV1lte3+OO9zxNUDfonPLzVjddZEmHvljUTQFBsBytrnmRNh5sGJFEwz6pnWtLo3TdSqEikcQYJSrrpguSNs4x1UiigRKbJLOCbcDvV7NUUWubKqo8/0dtKwuL83/7wAeGeepwuOCSQLIHCZK4T4zTGgRsbaGM0/vWXs7ff90Cg+4TOnIGTPVJFPRXrsHWCMrf711rqnVGMl7yRMUOkXDNZQsSd0gi8UXHi5jZuFK1YQG8SmOXjVHjKIpexLVm61/iz1Y3DVd/pIVrojlsnKeiDbHwu2S1miZ2CqeRxP5nY+smh5LkLN00zhpNIomDmkRbbeG6V7fBZ1t13Qw7Tt5fVDXlWMsYTYmlhVMGCOTksNmWpUkXPFuRROecqRZlrmWJ67UAYA58aaPQjWmmJcKB8cSRVcyKCfTk92M0HmDzulykSYfqyRhagn4R1E0XGdfyJEscnFNIIhG8jbFCWCftYJnhpKiwKmqTmNIy9zWJpwWPQEpwI075eSOJiyx8dzWR7NBzDNQtTjjlIq3H0jAEN/0+lXxwqXvFWVCiRVu3CvgaW2bPi1Eilt6t9y2WkSBzlCb1AL//+DnagkTtc1mCdK2KDXACWGK32iDx1sGCLqXoahIlSLTQTbsEEI/kalEk0320CtdEZ0DTNJMBpvg/MQuLqRH0c7QhiVpcqhtHCeWomlyDD7RNtl277FMwFjKOlfSAzYs4pmewTnIc3FQ1n/0H+kgWsxTTyCEEGaT4AMD/bBGu0RkqVrgmUHfDa1N9wOIgHWiRROKuaMc1IIKbxwzvP/991014P0tJW0SOHXMtQG2uVR0EaEgnoVDCNZRogXoGTCp1ri/RLq+dp4lS6XmrlM61PE2GNXhETVwVHaJz1E3Z2hLNLpDxk/1dR2g8DMMgRhJZcQXAO1cnhadyLknYzDnXicIAaBvWTwSJI/XlNJKYpzhel36OBudzmaUo6wbHaz5IXCiapEXwZq4tsyTUO5FIVp70ncKy5oRTLtJkPn26I4kIVvZgr+slWDcm5dylCtLXpDBSjBL5IJ07b7rPZlj/Urdqae+kz2BrAhTwiWdLkL5Uqth+znwy54Ub/ryJEbRNJrXz7xyv/f8b6aZs2xIgYnwZgQrNFOMT0Jq5EuawaYxcQ4wtHfPX0OPqSdGzLD0D7ZzyXUfaq1w24Zrt9Igu0CiIOh0qgAIckmhVadT0AKB10Kjsv8wNahzjEAb1PZkn5xCGzyTXtFLS2GbusQAEMJ390QEKwGWnxHo1IuT3Ft9/9p7IGurolSzdNHLsmDkC/fsijgLblFfoHUXFyc+n2mnq5jg5bLQm9LwpGs/f8D0PLQf9RVqs5sYITmikAeDX1kDdtCF7oPaQRE4UKUbSgaCeO1WTGNNv2eBmL09xWtQ0iiKmVTlXxfTYGP2yBAD7ixTH68osXCPoxjvHa7q/ou7vdyHqpipIYQV2QvlGENM47xYYVhsTrqEQQV1bSCaF/bgERdWYmCRAvyZxXXHrKz5P2T6VuibRom66zDwFWmpXTeqmtf3+A96/qBv+Pi4j+idDvxX74AvXAQBvH63pMaK8/dn7p/T1ulpqUTwm778WamEEYYBxn5cFDuL2NvrvnTVGv1eux5w3eo7y85zaeYamqhNAcj8vgnn0JG27dtmnYEw2wDsyfYcE2BzcDLLIVgEahaRYePVaOMUatMk4ZgnH9RAA50iOKV5OCadkyfDBnnIKx+4HQKKyM9TmzqKbTiOQ6K7TNHxGuAsSS5siW6aCS7aVBdB3Elak45pHVBfAXu8a1tb5bqwvtpndA7I+5KItT/pCLWxN4kDsZo6YFelc6HY6tHBNhKTLPIHNyYtcBWwAT1sEQi3Pg5PCFCQu8yC4YqlJ1NR1mm66CMI1lj6Jh61S4sPTkkYS+wmn83didLDNBvd5x5zw97Ko63NvgWG1vnCNf40V/OgFUqwCZYvAWFAzINz/pmnoREm8lguyT2WmAlLL2urq/QyiMMF3stWy65pEiwDWMkvgXAgSLQnGN1+4Rr9XTCiqn33gg0SmJlG37rEguX0/bVoQBtBIrv9/C910tMWcAYQB+NIxIOqTSJyLWeQny7Wn8iQ9KnmzQxIvpTGO05gCJTCBJKb9RczWtg1oqqSy1NwsTpwhYdVNE4U2sCItfp7JjJrE4YM91Rg23A///7UZyZJx/l+rKq2Mm6xlVEkBCyIrwjXrqjY1YNbCNeuulYWhBUBV45RUXByl8ViDdAP68jgmh+mHX75x7teaY3P6JMY1iTXpkM8Vs0p77ALu+46RdICrScwjZJXpkSUmtTz3Twq7KExZo2yDKZZu2lMJZOmmC08bfbQqTXPUcvossiF7glBpzxtJlLpJgEcS+43qfTLtIlpgWKzXk85QS50lSV/cyCDuYm23AQThmrK9j1R9ebSW2e8tj5xkliEsa/dkzYvCyFs03Ze7/xLcNKY2HUJB72oSDc/pc215A9uDExgiiUxNYhDcqkwKuDpRaKGN+vfbhIriunSGdRQj2wCJJEbJDj/f6XG65Vh/HMHmEX/XmMzZFnvm1U1ZKfl4UQEcHB7qUTA5Rv9e17GYetT0KKDzsjiz20RQAdgwcGb6JALoWjDI2E33sjswoto2rgdh+EyhtnDzmLNrEifGqSxm4vhAtleTaHASJBhaKyQxJw43OZBO1hWNJMby2+wc+0Xz5++0AsAXHq4AAB968fq5X2uOxc3jy4kkCTBEBC0Jp1jMyko3ZRNAmUqmxXvf5prEqAVGzaubClr89tHaiCT64EYCnKlawVF1U3It7y/80fzOcWFCKA4WOki0IYnyuc7bh1mkaaSuyZ9vZdV03/vWqZsq4RomkSyWpqHeuyLPe0B6CdpEcgAfOJR1g9PC7ydMzWuc9C5JNeFevaUhAAs9CFu6KTHOOS8uVTfBmbck2CXgtjjxyyxVSCK/lzjn8H/8h/8SbuzzrZNutW0zPmMIEmVOq7I2KeD2lcltpSwdm4Qtb4jPqc6/3qQ5kfTeC/DsGpmbvh4reFM36BIdfu/aOCxS9+UT5dtk25WKewpG0U3PyHRs+rKTOPNGIlkxTXWuuilANjKNkUTSIdS91CxUQt1/h+GeA0A6omQ1lcl0zvkAOApkuZqsJ0c3ZZHjqrHVUcztySWHxmlRdRQnJpMsTutJ2zrAhCTWDUUhEVtkAW220K8ex/7s93wIH3/9Lj72+t3zv9gMi5vHs8mtfh0vX5OrD1GWAt0XruGSJEm03wFcgJm3FL1GJYHYoOFO25fst794ZOpvKTQ9tnXGMOHHq/RKIMuoqGo7XIbnklc3FdSm6v3/eVncgoFFpIC+KvNVEa7Jo4SrRYGyt7fSwaX/fh+1rRss5QYyT1q8TNckGgLgZdyDkL0n7dldGc7SrPe92Zz4vTwJQaKBFg4AL9/a7yH/09dKscgSfK6lm+5RdNNQkzi3TyLL0oiFa9izO1PsMj9e/JlNY4ZIIpNgGfrJvACNnhvgz7ipRIk+p2SuO7rpJTNWxnaMM80gicMaNRuSyG5aAySRHKfbDQC+nQUVXPYCMP8aKyUv90I2BlbddKBkRXxvRbdhta/R6o79z0Z/b0pd1o+buNZIsT0zxzHhGuZAFMdxVdaKbjo9rkMSiwqnBaeI11M3JYMGGdfVsRiyn49jX/XKLfzVH/lYD4nZJovppgWhVBfXJLIqpboBMMBT12PhmjRxRJLE/xtndoHNSFEsgW5BKSRIPFpX3c+MieKi1CVOOYXxnmBx0nRtLBvsAX26KRtcCitBggZrr1CribpmXTeUsiCgpPyrWp0b2+W+zBeuSXqUtNnCNeQ2Kd+v9PdbEEh1nPRm+1TmiUJSGh7tlDk+PJU5ct+1nN0WxW/92SxtOgD14AvOAAAgAElEQVT/bM5BEufarf28+w72iO8tSxOkicOqrFGUvCJwD0k00EYBVeJD7slnI4lnj9WlLHoc60vGNYlTe8lYMpMJSnV/V4ty7jbZdu2yT8H4jPwQSWQW8aD/0cRD45xD4vp0U4uyl7UmMW6BMadxNkutlHGx2hOrSBWrmzLfm2wigW5KzNENEUgrImIOLmvbwdb1SSxV1tqAJK6KqssGM8G9OK1elp9DNzQlxJJZz9LQF9PSW+4qW5YmXcIDaCXoJzYGfR8BI/0n2hM4mnak0mjKPutDm1C361q5hM/GZmh1YGgLEr1wjbRvMPdJNASymkpmQxLtdFOh9j089c7uebeB0fXNc5BEeQ62D0lsE3dGCqhG/C1tUkS4h1ED1raIAjBLwk/ORbZPpU5usX1a/ZykvUS7Jkl0W85um+K3/9t1G1za6KahvvZCgsSWcpomjl7/fo4VrSUgf1/ThJlnNG6TwiYFvLhLX6VU/72zxgB9n7Ak9tdRRJD0JYF+MpMp+YjrlC8bigjsgkTqAUiSIP/vx0z395Ngb9Dvjdy0NJXTwquXZ6Zu7LWFYdzksJ7gTYckkj0IYyrnlHDKmJIVmzWKg3QrR56tmxzefy4oTdTmY6ENLbKwSYYifSJIbGk8py2SyIjWAEFJTZBEqkdT0t8g2TnmapyFonSVbZH2KTkFkcmP+4uyQUriXK8tTkPuCTrhZN+3hnTTTc+3OEjSSoFRthObGyQKTVKuyaqbauo0jyQqRNAgrX84oyZRnNsHhqDhcUzXSbHIWZqEpEC3PrasBYZuX2Wpwe4FUoYgRT6/JC3YfVICLgtKJ3MqVIKX7ZOoWSF0TWIuc7S1lxDROYu6aYwA2+im8xD/uXZr3+9X+3lKK35LIMtqCQBxP2uj4I1KSlLnxhlIorVPYk2dicLAsgV7nZ+me/MSiVDtA1nu4zbZdu2yT8EYxynOIlhUOeOaRI4C2q9J5II99K7TgKwtTFxPWbAxBJe1uhZgQBIV111e22RxvzGA5ZEHqovl0Nbqjiy6N7j/VnXHGiba0Nw+iZ0kdlG3SCIZJGrhGhpJDJlFi5CACOmIKM9lUwM7D8uSfk1iWdWTrWMCm8GGUmhxKYCvSdRy32zQNiYkwKmbBvohYHOuNSXTSjcVZwuYdq41QtHNkRauCQ7ngakFhnZauWe7awp+cjFIouwdx+sSTcPVcskZUNRBcGvbsvK6vZBFpEK3k7IwJ7r7WLQKoOS4QU0i8X2LkufK2Keyl6g17OVyTt0/kbpJ7hmQxLxFTE+Xs9QGBVAAvZrmi0ASX7jp+/laAtJlluK0mIEk9r437lq9ceSePGDqEc/OWbTRSbXRNPgk+nqT6vXtr2Mkcbp1RjinLG2atsl2QSKxkGMlJdYp13V7srZoJNH4oHW1baomjms3EGVjZtUfCWo2E6Uj7iMQoQ0Ej7yv0PW4c7Rx1nm6qf9XC9dQYgc9uqlca3JYR1NZlRXWVUM7hIFuakcSi0rPkTs09Lgd3VTopmFN1s00Aq+RDeDx6KbM2tJy36xDOPZsMwyDsZpE1gHVe4AVSVzpmsRJuikGc2Qd0OevL7uf33P7gJ5jT92UVEUNSKK939scm0N3zDWSSLI7Ltp0sNEhWayTXNkSOUBA245WNnEXuf+PjMjxIku6BAmDvgD9ekubumm7JjtRGL4msW6MLZdUMs2SyAGA22r/sArXzLGXb+31/mVsmSc4WlVoGj64jH0gtv43LtU5v5rEfrmBjJvaEuJWLjJu0gdN+zGA/xmT9dS6v6ul3nibbBckUkGi/1cXbQNEcONcz0EAOEc+UYFb1dhqe/qNm4lrDeim3EJOkkCtZIM9eU+HyJIU0LlKVj2n1Ug/ib/rqT2yc3YHiq+bx/WEawzB9qhwDX0ApzhtkUS21mNPCddYkcSysvWt0igRW5N71S1PgyPJtgAY1kXzQg5D4RrOISyMyN7Yoc3VJPrfifjSuuKagou91GbkLUHifp52SDrABIktkqgz8uQz+vKt/e7n997hg0R9z1iHcK9DEi+GbrqIAgAL3dE78oIkbtfGMNonkUncpZpxxNcW7mWhThzgkcQuSDcgiYDU5NZtzR8XpOepw7ryTJKaTFwDAQV/eGoThYnVTU2JqnaOFubKnYOLRRJfafcFiyrzMkvM4jraT7ME91kSekyzCV6NpAMc6ytT+0E3jkASk8SXgQW/kPvO464D/mcCSYyEay4j3XQ7pfwu0Dh1034Wga0B62VjjGpnGklkEaLeHEnaRCxcU9UsvdX1HEI9h83jkq6+k0XpxnricNmfId2XCTg0lZae4xlIIt0Cw3iwhQyV6snFOhe5L2RnZcyBgCR6J7misqZCGy1rRYk1BcD2GpGralomXNb01HeXR9nPiqQNDZFENnHhejVLrLqynqP+edPzvYiQREvCAwD+1o/9Pvzl//N38I2v3aHH7C88bWvd9UmcqEmMAmAL2qnf98rt/Q3vPNtouukASTxvumkrlGNQU+2Ea6qmqyfaOuGaqE+ic+Rzo5xk9rwHQnDf9RI8ZyRR1H2DcBDzvSkn2UBbDMI1dnVTEaABbMyVsmq67401jSReBJXw1oG/HvtsA/5eds82jST2/TT2e/Ogg18fjYW5opOShD9ztgDN9BxF0A0IfiGtsN/E1+PGSenMjm56CY2pnYlbMLDIWRzsAZyTnEQIpEklsAnXm9U423C9mMpp6UlU1k2HjMxFEqfGxYevzHvKelRaMnATZyDQfY3BfZvFlOtPWa9PoiEAAwKSaBGuERqbp5vW2CMO7UUU7AG2NSKfbRckhsbZQKjDm06u9LOtNEtArX+pJWW+gTztP2/MgZhGz42fL+8kFB262tBrGQCeu77Ev/udHzS1PDlYpDhukyTAjD6JzTz580NDLzUAuNs6ruy19i64JnGOcEqnZltvbwsMjVJUBtRYzuDGqK6pazvl+ozJ/X+0stGLRSWTbV0FROiqhW6aR2izQd1UAlKAZGFFiVoTkqiCRFZI5nHszReuAQC++yteoscssiTQdlkkMULFpxC6blzSF65hfaBYpRTY7M/ELBm5HqW4qwLZAHBMI5AABi03LHoalnKDbbJnHklkHKckcrZYmqQO9roAgKRkzuF1A4FWyfQRBPoNsAFb3VJA29rXSAfUj+Gbi2oBFDGmJkLLOFsomX0qLRfIjqmbUm0DRummk8NCTWJl77+z7CGJNrTB0ji4l0UzBOla7t5So3OVTSsgirpmPnHg6wx50zQ2UaouSPSv0bShGfWPwFlI4nRNYhckGhIec21/keGkqHBSSJ9EW5DI1Mxo+zs//s34zP0T8zz/qx/6evz0L/8m3nj+GvX+ziG/oJpECUrvH6/p6+m1LMmSbatJBFSrGkNCII8ccp6S6e+b1CRa6aYW4Rp537pVpAVIxotGVw2iMLoFRpY4Wsl2jrppv58vfx8B4PYBT1d/EvahF2/g13/qO3Dv2nL6za0ts6RDZC01iYDU11qRRFtSLE3cIPiSv3WWZWewy9jrFRErZ9qXbK/RxEHpFMARSmfYViLbZs98kMg0hc2iAIClV+pgrzIEALGyFBcktnPTSCKZyY9bYJjRNsOhobnk3Tjy/sdFykwj07gmlHVcA5W2P4ezx7Tz6gkHTV6qhyRa5tihdKVdAVRqSyzCNUnisJ+neLdz7AiqkeqH1hgyu72N1VgjclVN6jaaJrQAyCfXZP+g169NjdMteABuLWu6Kc2AkL3VrG4qCYgQOOfZ+a6T/S644bLyMZJrzSR/+Us38OUv3TDP82veext/+0/9Pvr9UtsmNYnnjSSKAuvbRzy60WegCN10u5BEAL3evDySGEQ4LEkxoRx2NYnk7RgguYZE4aqsu8Qrc/8zRROuyTNRrgUAp0XdlTowliR9dVPW3wJaNo+RbmqpaX5SZgkQgfk1iYBdzKcnFkgixxp9BECVpowhiayYUq4YfvKsTpeOSVBqU0XVCSC2BGPb7JkPEpmFHDdzZx2uONhjxsh7NBw+S7iG5D+P0U2ZjbzfONv22fx1AiJipW3JzwyPfKA2aqTSskji2P23IInmmsRMo3S27OcyS3BaeNqQpY7rYJHi7aM2SCQykl3dWNV0dEULlXbd1vbsYsTosCH7xGkFUMvaci48L5bnRrfAYPetQOUPrwU67aYgMUISjTWJc0ycVXkGpqiqoU9lOAO2Ud0uTx2cAx6uLqYmUeiz77QJJ4puqhAptkzhaZj0BUwSR88vPNu2hN8yiwWHuGBqoC5L166mnm4q6AuB5GZqL69qnhKu16BlPYrGgqVOv0OlKhvdFwA+8rJP4rz1yk16zEXbMks7f8aKJEr9NUs3HZRKPY666Yb1Fc6NcHAwfQvleoEVyLXTOavkiUcSLy8r6pkPEplgaow2BHA1QbEACkt/ENCsMkD28RzZgEite54mpnsJGkRhMnUgFiWXER7rk8jQaTUiaEFE9PfGUmsG9UeGDdK/n++tCAzVTS3lOV64xgdglkbd1/YyfPHRCoAt+19Udfc5OSqtzj5fzo31SVumAu4gHMGuybpjQbAsAU13p+eYKHVTsh4liRJwAFQQfPYfEId4XdZgW4I8rknvwi91QeKEcE3EgLA6oBdl0gOvQ0gNe8Ick/v2joFuqvcE6dV3EWqSVhO0bZkldHIrVoG2KoDeN9aSSp/QLx35vZxGEvMER6uSpugBge0g4jrsHJ1zXQ2wBdmWBK+pL3L75610X8ALyfzWz313t+9to+nnmRcpikWRuGvpUgVfcjM95qw+iRSSWGmfcFpttLteTDc1stlEFXWyx7rq71peUrrp9u2yF2xVxdAW+wEAU1gLjCOJVOCmkMSarGOJhWv4LE74XFK3ZO1tM6cnUVU3WFcVUiLjOlfdNE9H0E7SSdabgZ73WTa8/2xWC924Ob0E15L9NCGJQje11XHdPljgs/dPAXAZyV4ga8nsKpEKi9N0la2r71TNxOk+iT2nafpamm5qaW+Tq7rJquJEBOJaXgCUeqI4O1JbO/X+J2ES3Hzp0RrO8XRTjSRuq3DBXp4GJclzvo8SpHSsBErdNOwlp63jamkoflG2l3sF3NpAk88U4m9JinW1nUYqoVAkf+9dv5ezipeLtE83pURC2s92tLKvrVv7vs2DpUZ2Tp9EXd/GKnJq28tTXDe0pLho0+uCfWZkjNRfs/uWBjj4XrnJaE2iXd10unRJxsq47uyY6rkdXY9XRVVI4hbv/5tsFyQSSOKgUTpZSxdnVfTf2mSaJkn3G2vf0zS2cUmv/qj/t6bGyftZZBXQ1F0vZc4cGmNQf0kgpWnSb+4t854yzVm3iuv0BYcmL9Wnm9a8I++cw6KlNllrnZZZglUr5W8LEnP8XhskXlvydNOimtfeY13uWmCI5QpJZNUFY4QC4PskNo3fSyzfm68BVkiiMUkixnw+yY6fFnUQ8jlnIZMuSDxaYT9P6fY2VvrV07Aeve+cgy+h6UqQyCBFISlQ47RVl93fwiBRkEQLbTTv1omt/muu4NDBIsVenuDtozXy1OGQrPlbtgwUoSBOCWcB4ZkURMqC/kq7ByvddE4NNhB0Aa7aeaNp8XRbnK7e1X9vLALWAzjIRIkuUwDCWbDpexinf7JIYoJC/DuCtQKouuEYdJhCIDsGxOUVrnnmg0Qm2Ih7pNCBgwvcZ6sCqM5YsI6dvg4dXLqhuA6zjrMer1sCsOlxPSSx5Pr0jambMhL7XuxDEFn/GkXlzPpNwQGuJyYQIbmGA0oX27OHVJ46FGVtpmTu5R5JLIwNyLWS2/PX9ybfr+mmXW2bgUrbOU2XcGN90qbvJYuc6ZpEi3CQfkYtGfk88apxTSP1F5NDBgk4AFTNmTjEq7JCQTa3f1yTLPyXHq0pMY1RddMtXcsaYThvJHGRJVikCd4lBYCAML9V6Vvw6Ne2yTok0RBs6GROXXPnKKBrEm00Yecc7h568ZPbBwu6dcMyS7Eu6+7+M0G6JI6PWnEdS1LyVtuo3nJGiQp0l/A2sHKquqbLey6T3VXiOny7k5Zu2iLA7FqOAQ5WTbuvi9H+rQ2+4Ri7jFX01y0wuppElpUT9waf+Hw95eJLmoB45oNEJtgY1pb4hTIpeJO4LmirDYGUD1ICBXSOuqlFgn6gZMjWMqp2D/K3pkzD9uuqxsIif65osX5DmKYIDPsdTl4Oeeo6dIKl28XOrqW2U8aZg8Qs6QQBLAjFwSLFo1VJI7lit1SQ+Nz1aYW1Mbopm4AApN/Y1Tu055iWkpfnYMrh0skVC5I4V3FXDlppb8OIHcSUTAAo6qYVU9kUJLbIUlGr5urnTTeVWq51V5+4yXJFNQJ45einYXI/nbuYJvUHy7SriWOQS612eVoI3XT73JcOSTQkBGKBKau6qZVuCgTKqUWd09NNqw7JZe6/nPfHK1tNIhCSkpbPtWzPxE7d1JC4llZBW9hZ5bHsnjqraSSx68EpNYkkkhj12GXupQYcgBC4WZFEujevYph1ZwcLAgz8yWmgws+zRRIv4eLavl32Aq0LNkjaUMiQ+NeZ4DJA77yztZgjJR+pa7JKSj1qmaVuL+lnyPlx4UBclzUWBiRRO1sAp0hVxHRTChEJSGJJOteD+iMya9S1ADBSZAAvXe/rX2x009uHC7x7vKaRXLE7h6Hu4i7hXOSabmr4bDq4LMg1ctVNS8kLcmYptq8MCaBe6wzDOC0wVZMOwqgAQVVPUtcDssQjq49rgh7ePylwkE9rvmkFYkD28vOb3+OY3M9FmlxIU/DDRdYhUlTJQZogSxxWZehTuc1IokUAJU7msOP8dwXcN6qbAiE4tPT5E7rpqeH+y/kiSKIlSLx5YK9JXGYpVkVt9EnUfndJ0Z5Npltm8EhiGyQWtiAxTsyzScm6waA0a9M1w7mhg0sSSVT0Vl4pvB+Udm1upnxQ1arpsrbA2NIj62KsCzbYjHxHJazhHEdBLKPMA0u3CyqB89RNmeA3HmcJZHNVf2RCEtX1WLpjLHcv12WyOHPEdfIsBJcskhgQQXTjLPejVPefDfj2FylOCjuSeOdggaJq8KWjlenQ1kgi09x4ob436/r34wRtfqa3KQDBuSqququnYNVNy7rpUH8b/co2rod2ssI1ktzSSGI1nXHVwjVdTeI5rxNNr6OQxGjfYus0n4bJ/bwoxdBDVdPMt2BIWiRx+9VNLXL3uuenpXRAVGlDTSJ/P+5em4ckarrpHhFwSFBi7ckIBOEay3PtA9nKVksd1yRu6TM61+5dC9+xiEZNmaD7Qje1IImdWGNNJhcH/rV/fdOZM4okks+O9BwGgkgaW5P4uMI121pusMm2b5e9QLMEGwB6srmss6WRJYB3ktdKXXOuuqkpuGyCQ8hkkvP2wADCfbHUOxVVTQun6KABCJz1SVXU1HWbgBXJErSGHSf+sG4LYm9l0c6blkBvs9akkqqYOAZF1ZhU2V64MV2HqK3LopV1aO9hQqTqFm1+prcpAMG5sqgLamTPqm4K9BFIU3ubdpy1RlmsrKf3hT7dVBCp8z2AtYPF1CRqBWKAb4vzNEwQpYtC57SYBvt8+1rqCquiwjK7GMTTarInSxsMxrQDak347eVpdw5bkmkffsn39ztuET7Ghkji9PX2FfpunaOsSTmLqTmqIB2w0eu7+v4tXFePYxpJZO//gG5qQMV7as4UmyQKwIjSrPFzY0ZNYkc3JWsSB3PkkMSy9onTXZB4yYxVCQyZPiMFVHGfHydIMQmgKMie4WcHmqriWRPrOE/noaSySa0rXjhFNxvW/zJ00zjzQ80xTXrBZeKmA+e5dF8dJFqEgwB/SAe6KTcG6GePr+/xrVK/9cueww983Sv48W9/k3p/aNvQUNlBsYBItZTkLUQMLtqWPXolV4MXpN1tTlNPkr/btzhKIOCzszTdPcoiA2hRyKnDN0GauL7a4jknE27u591nYkQ7nHNeXEohidvqJLz+3DUAwHvvHFzI9XpIosFxlZpEBsl9GqbnyAbcWpTKimQd5Pb7CADf9qHnAaBD4RmTpuwSWDKf77BNBtxve2JaEn7f+NodvPXqLfzrH3ufaY6+JtT/P/O8yd66bhO1lrP0MpjoB7z16i16zNwWGGnk81rZVDLOv372F6HPKMD7W03DAxVyhnYJV0PP4f4cJ2IHBTBts7r1JuM9xCtooZHm5l1BBzYA16MPkJq4IAcMcE7yIus3gbeKTQCcaqsfh26cVaSim6NhnDhXp2ufbWUcO/l+1kZ0L0uSbsMSH5TZ6zzdNwSXln5vQTiIrD/NAtoQxI1IummbtV5XNrTtdi9I5JHEPE3wCz/wFv3+XpuODkkkrqNquVhxo6tuC/UMhBo87mCz1oSGQzuI5FCCTwqBLOsGBxa6qcoIF1VD7QveIb+4PolJ4nD7IMcXH3HCNTKnsqpNPWifhr1+7xAAcEjS0R7XhLq+MCCCosqcOI7q+DRs2c7RgiT26N1GJOvGvm9LlCaOKgEQe/3eIX7++78C3/Lmc/QY8YPuG9RUBXF/59iOJL716i388p/8Jvr9QGjvFDQIpsfsKVGkq1iTuJen+Gs/+nF86KXr9BgJnKW/JY0kakX/hlM37RKFyucCNp85WRy0kfRPwO/JEvyypRuZOkv9dbmka48VVdW4ZkjKb4tdvhk/QaOzAVGQwgdgDidFvxiXUdvSNYksj3kUyTK1zmhMlEAJpHQvNeYB7YLEtgm2DUlsev9OB4m6BYkNyRXqz+MIB7EBKeCpLpY6CkAaYBdYFbVNtEDVFt44500ra9t0dC0YDM2Ny2pHNxUTh2xVVrRst65jnFOjY+2v2GV3K7twTUw3ZVTghFq2Ljlk9UnYncMFvki2wADCPmm5j0/Dnrvh0YbX2mDxvO3Flrq+ZwgaFm1SwGE7lU0BP69VUeG0qHqU2k2WKeaEtU3KrU7cxXY/nHP4wY/yCB0Qzu63j3zAxyCJ8py8O4NuOseEEls3DRzBAAKCKJKwcrYV7X8c+8bX7pjeL+vp0comOJSlDqsyBFJTqqFAPykJcKVZYz1oAV6/QxBEvnRjnBI7KR6n6o29n7ad+9Yme6aDRLYmUb5YjWSxUrtxD0KKbqeRLDKzNSbRy84RaNU1TZTM8JBaHlA5WE7WPgBgDlIdSMlc9dzPsrEWGFQArJAslkc+tyfaWE0i60h6JLHGqqxMh++da/PopnNMEh4WJ1kLOXgk8eod2lbrI4m25FZRhSCdc5rCs20TsxJ6Md8CYDRIJOimgFDLApJ4EetEqNpsAODry2tTbefTsE+++Rx+/vu/At//Ne+5kOu90AalN/Z5JoMgiQ7bqWwKBLrjaVHjziHvWAOCJNpa/tzat7eJmGs39v2a//yDUwAc5fogppued5DY0U3ttZ2nbTsdhjl01W0Zocbs86ZbYJRVQ6HbY76Tfn3MOiTRKDAo7+mEayoy2IuCUlb1PlP1luvKlszfFnu2g8QZzhYgtSUclSqu22MDh7WiqVrl5wH/8FiFayyBrEYNLOPkYDkpKt+njzg0dG0boGjCFJIodFN+jote4Gbsd9j6urOEa4w1ics8wcnaJpIA9AU4LHTTOZanSVuTaBGukXqDHZIoFtQ8627fmnp2OiSxtNWEaiTXtCfE9RfG/UesqDgauqAGF0U3BYKQwwee4xC3vEXSRWxrW5UTk8SOLD2OiQgWi8gCoQYb4HorPg3by/3ZfVJUtEMYzrcaZV2b+vTdmtEmYq7dbAP6zz9cIU0c9bzt5b5NR4cknvMz6tkFPEspHrcuq0uJ9jxpk/X0wNiDsx+AcS22huqm075yjCSyQRvQBw8EKLL0HAYCM5AVjyuquhPcumx2+Wb8BC1AxmRNoiCJZKY7VcIpFuGIQZ9E4tAIgU0ISi1007puTI5MR8HVKBGDJC5CQTTbp08EIMoqpo5OPdiJKqL2r1lbMJR1TQpw+H+twjUdQmSsGwN8wL0q2yBxptN0/kiid5Itmb4ekrgTrgEQDm1dk8gKbulnlFIpVQewLbgPB6KVph2r1DF00722J9pFBon/9POPAAAfe/0u9X5B0mtDkupZMFFc3CcRWUB64FU4XVcmmupFmnau2dYeuUq4sm0DxHRt53mbBImfe3BK33/nHA7yFO8ceSTxvJ/RZZaiqBocr20OuSCJu5ZL3vLUIXF2JHGR9XtMW/QcykFN4tnPgXNu1L/mkEQ1RxIoGiCJFXee6uSu99Mu39q6fDN+gsYiUsM+fXyWvFvEVuEURW21BG0huPQtIJg5Ai2SaKBEdXWCygFiHtCuCXYh2T422zpscD81T6/A2g8sGSbJHGd3KFxD0k0VtdVC9wX8vTxZV4+VoboQJLGqTTLtogi2KneHtthCHTZdkDiV3IoQcWBebSHA0uRVcMmyLYTuHiGJjHMhPdGkxcRFBIn/8ae/Bt/85j288fw16v156jySbqw3vur28q19AMB3feQFesyetGAoeeXQizaplbx/Upgca8AngNhSFjFBEnWS5bzsxl5AEi33/2CZ4UHbJ/G8kRRxwh+cliZ0dZknOC2rS1s39qTN9+BMu++NrQHut0bjEuyabq3/nTpzdB/yziekhBCDX84mGAeBLAlULNIEiYNqi7Od+9Yme6bpphVZk6gdNIAXk0kTZ4LQxTJVk8iqnaWJz/yEILHmxqlMvsWR7KNt/Gfr6KYtTZKln3gpebmX8r1NP9hB3dRG9wVsh3aMiLC1pLresjEGift5itO2BcD8IPECkMSWj+8cl0hIEofrexnePV6jqhss0su3sT5pC3XRVfe8TaHwY+1VrOqmYmyTYiDQVCnhmu65Ca+VVUMxDKTdgCTULoKW/J0ffgHf+WE+sJGEn4VJ8izYa/cO8b/9+9+GV27v02OWWdqJi2yrcI04gWXdmFp7AOiawJuEa1p0T2i452mCJN4/KfCeW/z3pinF51+T2AaJBk8rL7QAACAASURBVCQXCKyEXVIy2DJPgpItGdx4JDEEbsw+Ln5c186C1I/Q/Q4tZRFjweV0TWJ/jqxYo3MO+5LMN2pHbItdvhk/QQv9xiaCxIjKWRqEayq18Fm1rUXqsG7FJixqZ7qW0dLLEfB9Ek291KSOorI5QHmrJHbSIYn8Z5MAWNQMp5pnZ2mCsu4rsLJ9EoFWuMYoHKT7VFoccu/I9//WlO3lXoX10cqWNQWAv/LHPoo/+NbLuH7OkvfiJEttISt3f3M/xxcergBcDJVq262HJJacIptO5FiEm+YK12glNy/4NP29xTRtf10SSYyEa/ItFDgS+pWVSv4s2Kt3Duj9AAhI4oOTskO1ts32F2HdsmibppLX5Hkj9lIbrH2ppXOep2mRIUsApkWeLkK4BgAenBamxGnHStjVwHe2zJKuJtGCJK7KQOVkhGt0CxgZp18/y3SwZ1HYzxR4wKub9msS5V/mPN1fpDhalygqPnG0TfaMI4kkZDxQN60NUrtK7ZLc/LsahVbtjD1IF2mCQskPc2in/7dPNyUCKS2vbw5uFP+f3JCzVD3YNflgd1Q2vq8NEN1/sj4qCNfYvm/pJbiubHRfIDgh941ZUwD4xBv38Ik37pnGzDEJ7lfG2sJbByFIZLKRV930HiSo7DSS6LoxtSHTqgVo5JG2IPBl7RV3mTUZZ2gBH2Tu5Qx1PcHbR3XnlGyjc+d75dqC9J2NmyCJp0XdoVrbZncPl93PbC/HRVy3ZEj4ffMb9/Cvft0rePnmnm2iM2wvT7HIPJ3Q0qeyhyRegHAN4JFEVoEY8N/VaauTsEtKevNJuFX3MzcmJPOLuqZaYAQRmr4oDIckBqFGZgwQwAOAB4qGLTfCHKZsf5Hi3WMbIrtN9kwHiWxN4pDKySGJWeK6BV83PNUoVwGYR6SoYcjVA8rSVjRN0tQTTfd2MjSuBdpauqJCUXIqhkAfSWRli0Mz8RpS8mSR8l+XNV1/GhBZKaTm6h/lerpNgaUmEYBZ3fQizdeFivwzP8eb+zn++dsnAC5G3n3bLWv3IC+vX2E/TyeTRyEBEdqrWBBBLdpkYReUVYPToqYk8hOVpBIra25fOFhkOFqXOFr7upmLagRvMWF3CHN3J1wz3w4WKd49KdA02Nog8UUVrLGJO003ZZMrYkni8Bd+4C3bJB/DhOFhuf8SJDp3/ki6rkm8rfoBT9lenuDzDwuUNae4/iyY3k95JNF1ZTpNMw3AAEMkka9JVK3ijEiiIIFsz+G45YaMY87F/VwHiZdvbV2+GT9BY2sSAZ/ts1I5NRxeN40haFABmAmBDKqodW2jVpb1vEDKI4nemWQRz/2FlzK38P+llYJcU899ao79AJi4Vg8l5e9/4oJAkaW2JM/svQSBfp+qbc1QZW0hu5XGc2t/saObKnPOdXuQRbgjVpdllpZWcqsNLAFdA3laVJRjIc9Wj25Kqkdf28twtCpxtCqRJm4rD+BFlvgazS3vk3gZ7N61ZXdGiWDLtpm09gBAK4DKuj1e+7ZQFpTuou3F9vO9RraAAYKSraXcYK7NUZeVcQ87cZ3tvf8XaVqvwFKTuK5qFXxZkERe3RSIaxJ5X14z/Niewx3goEAAgPt8+3natYDZqZteMmMRKSBSbTIEibXKjrDBxkIFYDWpbgqIAmjIdHDtBkQ4xRhI9UQxbBny/TzFccvR5pHE0AKj46xPKlIF2ty8mkRbTWgsVMQGe4sWJQ2yynzdntg2OshAKy4iQaIFSTzIcdKKMeyCRG/SAuBkzaF0QEhAWFRKs5Hnhmqd0e5bpy0Czzi7cSNloFU3Jfbka8sMD09LHK0qHC6mkdWnYXkrQrYTrnl8u3c9IEM3thRJvLGn0RdSubtVQHxwYlOSfBomgjWv3+ODRBEn2jf0xJxruuWAJdjbyxM8OG17Oe7OGwD9tcz6F3nqdRLEV+b6JPq/HVNHp/ygUXVT0ueNW1lM+aGh5UYfgWT28708xf1jXzN8GRMQz/TTEHq3MSIJM5BEpwprDcGeDsBYkRwgiCQ0ja9lpFpnSK2TbsFgqj9qTCgp4B8aORDZzIpugVGQWaoO7azrWeqmgu4xDqv8bS1URNOL0wTrssGq9EER61zcPgxO07ZmqA4XGU7WpT1IVE7gTt3UWx9J5A9taw9OXaRv6+8a6oEAbh13NO0e3ZTrr3VtmWFV1rh/UuDaFlJNgcDu2AnXPL49dy2gdNtKN9WJCiuSdd/YuPxpmNBpLfdfAsvzVtIG+nuOtU+i7Fu7INGbtMdapAntu8q9O1l7X+ax+iROnDm5amVh2V99cBmCPZYGnUXMQHltyg4WKd45vrxraztP1gsya/ZB9y7k1E2TzslqjEED4NE9GyXTtaiB/39b4/KAPFJog4zr2kTYNuTPPzwFAFpdM9fSypWom04IDvVaWfjXOOGatiaxDdItgkOSQWPVTYEQ3IsAB+tc3FFB4jaKdgC+ruFoZaMWA0HaHbicG+t52DJr+8StebqpoNQmddOulrdBlhja2yyCkBLAISJxPQogqnjT15Oamc89OMXBlgaJWVuTuOuT+Pj23PUgCrOtQSLg23v8sy8emVDjRRaQrG3tAQkAf+Y73oRzwPd91cv0GOmJeX15/t/ZjX07+gX4ey5b0HJLz9KLNgnqLckO8UOOJEi09OruqJzcWdVTNzUIs+WtmFjTNJ7NRvquWeJCTaKB9bW/SDtW1DYngM6yyzfjJ2gCHTOQuK5J5Nsi9HnWlho1ADgpKlR1Q0PUIu5SWmotew23Zd4GtK2t97P4Pjf2cvzuu16U5BqZXfQPtgjXsEiiQgQ7J5m4lupdaAn2tLJXRdaE+uu5fpBIbiR3DjSSuJ2OxeHSyz+baxIPdkFibIs2SDxphWsY6xJHFnXTNNB/LDRtmdPbrRw/sybl7/bVTWvq4L6ugsRtFK0BQpC+o5s+vt27Fva7WwZRkou2H/u2NwDA1Kaj325gO/dywN/3n/mDHzFRR1+9cwAA+K6PvHhe0+pM33MLtU+fudvKyrlo64JEw32Us/q4FRMzIYlSX0i3D0u6oK0LEpn+uu3z5Vs1caUNMs8YSWTmORfd3hbbzpP1gqwwZAO0umZdN9RGosdYggapSXy08g+aRdxlXQWxCVMz9yr0JmOmuVCBlKVuDwDuHi5wWvhJstlF3QKjCxINrUssTrIWDvL93ngkUa8RWpVW2kQUFZzjUcHrM2oGLtoOFhmOV3ZpcY0U7FpgeFu0SPVpUdFBkawtE91UqQIv64QeJ4fhO239BePsxv1FAdAUb7kHn3+w6qlKbpN54SBbe6GdjZtWq3zxxnZ+3wDwqa97BV/93lumur1+4/Lt3Mvn2mv3DvF3/71P4v13+fsx155IL8cdkggg0E0bVQowZeI7nRiQxEGfRJK9pWmjFiRRnq/TsjKVc2VtvaXMUeYwZboFzGWsSXymg0RLTeIi7QvXHDBjMl8gW7X99ixBAwAcSZBIDly0lFiLHLBca102WGYWtCFkfywoKdCvpaORxDTBw8Lfj1BsvPmauv9UbUBE+sqttiCx66VpQY7b4F5aWbACHJqOsa2OxeEixbqqcbQucffacnpAazf3FUq6pZ/tom2Z+15eJ0WNO4cGtbmyMa3/UJPY0G2CgPA9idw3o+4Y9xcFWiSR2PNk73i4KnFo6Il2keZFEuzKxTsbWpI4/OpPfBJ3DhcXIoLyOPaB566Z3r9Ik05dc5uRxLn2uvF+zLXDRdppA1jOjduHO+ZKbJKEFp+GMfFVj9sgkUnwxnTTiiw3yFKnhBrt59SqqOmzRuY5CEoZuqlGEi8hSn35ZvwEzVSTmHlHHhCl0um/L1mDdRukWGsSBUlkF1aetSIJhsaiuQ72jDWaAFrk0hYk3lEbMlvMLs4WEJDEqYe7QxJ1ewnTZ/MBMFtvuVB1k7VV3XRGI2Vt25qhklqxd4+L2XTTba4/uki7sZfh0ar0fRJJJ1mQRAHqmKWs5b7ZxsaAF+3Yz1MTkpi0/R8l8QOAzu5eW4a/v610U0kcWVqJ7Oxse+P5a71a7KtiyywIp1xGR3JbzDnX+RSWYFuj1Lsg0ZsgiVJmxVge0U2pPolpP0hk9/9MCwUafFfxlVZlRde/A77kSc4pCZwZn2b/ktNNL9+Mn6BZahKXaYJ1qz7pW2BwiqhAK5zyGEEi61xLL8GgDsVfS8vkm4JLo7gL0N+QWbpprummkjWaQhKj2kKA3ETygECWRlXaTgHXVIMqNYmVeRP5o594P4AgM75tJo78O8dr02fTgeGLN7fzs1203djLcf+k8EEi6UgKA4KlaAPo6gErTVOle6CmuH9sq63K0qRTLAZEuIZRNw1r5HC5nUmSvM127/ok7myTLfMED1e7Pn1PwoRVYDlvLoMI3EXbay09+Ac/+j56zABJNJQ3hHYWNbX/Z6q8xwL4aP+uqGsaBEiVmqqAAUxC4bqqk7XUKW+LbWf69YLMUpO4yJJOoagmMx2B7liZ0DZZxFZJZlFgDUW8hEMojeONlLRecGkIpADgrhIgYJHETAVg0i9xStxCI4mdKI9BgON0XdHfNeBrSddKAdeiivrotMSqqM1Z5J/9lz+Cn/yuL9vaFgBS63G8rmzqpgpJ3NbPdtF2Yz/Hg5MSZV3TAVieOayKGqu2BphqcJ+GQ9vauqGPJJL7lsrQAr5lDZO4047dNiOJvgcqH6Tv7NkzHZhsc5/Ey2ASHFqCbX3ebKsI3EXbV75yE//wZ39/L8iZsmXWDxKZYC+N+iSWFedz5anrtC0sNd+yLk4LjySymgdZEvorsmw2AHjpVqiffmGLa6nPsmd6N7LUJOYqACjqmlNRUjVxVcM7WpIJe6drwMkGiVFPLmO7B2EVmFpgtFlyU03igd25045k94BO3Jd+Cww/lonbxAE/LaoWNSaDxKwvXGNDIJvZdNNtDqI0wmPJ0LLqnc+S3dzP8eCkwMnaom6adCg1wKF7knwpjXRTwCe43pmBJEoQVdUNmobbk3VLhDcuqObJalKXLk7TZaQb7ez8TQcmV7Em8SJNHHlLwnWHJI6bJUAEHk+4plQoHRN8ZYk6NwyAj0YSTwu+nZTugx2CxOnrSQsY4HJSmS/fjJ+gWSBqHQCsy5rqpRMLp7CMTFFDEmfL2gLDQm3SLTBC3Z59nIVu+ppSfTOhpF0LDK5IeVTdlKxJTBOH07JCVdez+iRWDX9PFi2V+bSw00233XqqcYbPxor3PEt2Yz/Dum2VQiOJbQJCMq7M+grNjW2JI6Af3O/R+5brKORse5vYPvb6XdP7L8rCXs63BdnZs2f6udwFiY9n3/LBewCAb3ztDj1mV5P4ZEzu3VHXAsMiXBMa3DP7fz4iXMMhiUG4RsQCGctUG7a1AUl8z63LXS6zvRDEBVhlyAboAICV89cFsrUhkDrsxD68Y2ELpBoVEDEIaQj2GgNkn8VBogFJvHWw6BoOs5alQRQmqJtu/nxagMZCNwW8MuPJut1EWNpcmnSKtFXNoy8HixTH68rk/F8WO5wZJALAp7/hVbz5wvUnPaVLa7pOk10niwhJZBJOOrNr6S8KREGi4bkpyn5tCUsB+k//ta/Br/yjz3a92LbN9hdBuAnYIYk7Gze9N+7WyOPZn/u+D+OnvvfDprNUv1czFHZmM9m3O7opI1wT1ySSdFNP/2yZWw3PCpTvelVWXgdiDpJYcj4oANwzqLpvoz3TQaIVSVyrLAIVJOYBybLQFoWiJ02pbX0Sa/W5uDEAeuIKTE1iT5THGCQCwN/58W/uJL8ZW2ZaOKiGc9PfWywcBHB0U8ALcJy26B6LiCyUAm7d8C1Pru/leHhazhKu2XbTtR7WIPHPf+qrnvR0LrXpone2dYwwIFZljcRxwZdWHLX0FwXQU11lD98sdcpBsNXufd9XvYzv+6qXqfc+DTuIekdeted7Z0/G9Blz1RKFF21zhX9++U9+E24fLHZq2o9hcsaLuumcFhhlzbWl0L2zLT6vLgM7LWqTLoZmvKSJo/zeNHH46Gt38G0fep66zrbZLkiEvU/iuqwp3rpQUldl7SmqpIOwSBNkiTNnnxepayli9p6Aum6PFa7JEoeTojK19xDby1PTYbjMEqzKEKQzm0hPuKZukDiexrjMfE+606KmERGhjQI24ZrrbWuD43WF569frUfyxZt7cA5oml2tx+Oadl5eILPdyyzByVqozCm9/rPU19JZ9kig7+CytbJ5MqSSs0jitpsk/Lq9fBcA7GzEXroZBC2Y/qI7e/L21qu3nvYULr3F6qYUK01q4BVTjC0LElVsC3tOC9esyhrPsaUbieuSmL6/In9G/dKPfpx+77bZM70bdcI1xJfdQxJZumneDxJZJMU5h4NFOgtJLKrGBL075zrBG0ubCMBTy07W85BEqy3zFKvSU2LLqqGklbVwTW0U19nLE6wKW2Gz5shbhGskk/X20frKyZ/naQLpk37v2tXrb3aRputmWJW0a0ufgLDQpgFPASqrUMvL0k3lWZGm1tS1ehlhqUm8GkfT/kwRsp09WyYtjNLEXZm1v7NnzzokcdW2wGDUTaM+iUXNtUDKkhEk0cCCW5U1VgYdiMUMoOIq2LPxKc8wWWCcCqivm6nb7LqlJnFd1jRFVexwmXWOBd0nsQ1ku89FXi5vUYPaKFKxt0hxYlQAnWt7undhxfXR6dp7tGI+FjGUvTzF8bo01QlqcSOLcI3QCL/4aHWlGyl/7ftuP+0pXGp7/71Qd8cGidf3chyvKxyteNo00B7AuucqnTjy65elwwJ9UaqSFKW6LDYUIbu6z/fO5tsrt/2zvVsfO7vMJuUGD079fjdH3bSsaq6/otKpENEbquuA8iUt/p0veQpI4rPCjHo2PuUZVta+TodBfARJFDSRCfh0n0SWoip2sEi7B4ClKIm4joU22htnrNvzaFtlRunmmKYIrEmJ5B6SaFRg3c9T3D+xSfn31E0NgbMgiUXVXEkn4YMv+PYEH3rxxlOeyeU2LUfOorKytr50ZEtAeLqpfS+RBveWtixxrQfAZaAvg4mQz7sdkni1mAI7ezL2cttLbaesubPLbNfb/V/o9QybTc6WTt20amh1U2GerA1lCp1wTWFTlF/oILHkfNCrYFerAMpoZd3QtTZC5ZSm1FRNopLatdBNgb6TxQaXgrZJ0TArIy+ZfEubCKClmxaVuQXGHIuRRE6RNtRb1oY+lf56KX7v3ZPetaevFyjJdWOhm6pGvlfQifyrP/wxfPHR+twTCc+SsZS0G20d4xcerkwJiKxVcrPuCXfb4NVygOpaj9JQAnAZTLfAcKRw0M6ePXv1zgG+4f238ae//c2nPZWd7Wy27eW+fZgk2DmV0qhPYl3jWj4dmvg+iX3BM5NfXtam3tSLLO38u6KqkWfPxl7+TAeJVc1lLICwsKT/iwVJFARyYQgA5vSXEyU9UQ1lingBL3jT769oCxJLEtl7HNtTSGJJfm/OOc8jr3xgaa1JfNeIJC413dQoXCN2aEBgLovdvbbE3UsuA70t9jf+xCe65AVjsra++GhFU1QBH+StFLuAXct326bUknFlTNckdn0S2SLILTfZx989KrDMkl3/z52NWp4m+Ov/ziee9jR2trPHMuccDhdpVyrF+GlJ4uBcEJ9hWViipQHo/ro8w2xV+BYYNmHCXU3iM2VFZWmU7t/3qO2Dx2UsAqxtpZuKKp7/O9w44YN3wQ0reJP1+yuy1LJlnnrlxLLqMubnZUKVOy1qn8WhA2D/YHvuOX//l3naUcRMSGIrrlM3fJ9EHSS+cGMXTO3sbPva9942tXyQtWVFEkW4KQjXcGv5ThskrgxBolapK6+YuqnsyQ9X5ZVkCexsZzvbmTapgwd4RkmWOFVywDH8dOukwlDL7pzDMktwvK7aEh9ec2K1q0k8H3POLZ1zf9E59zvOuYfOud9wzv2B9nfvd841zrlH6r8/F439r51zD5xzn3XO/UT0t7/dOfdbzrlj59yvOefeNzWff/yZB3hwWvi2FIYsAqCCREq4pg9rW+imdw9DsMAuxtC4ua1/sdTSqYbzLOC2n/s2ESfrCnvnHCQKkrgqq1Z+mOeRS584y/3fz9Pufuwb7mPdhA2LTUDcUqqVLxrQnp3tbMpEFKlubFTmZZZiVVZegMmAwAvd1BwkdnTTq6VuqpNnV7HeeGc729nOtOlSKXbPE2FIAHQ5UZYkqOoGTdOYa9n3F2knJsaCAL4Nmw9+iwtgz22LXRS3LQPwzwF8EsD/B+B7APw159xXqvfcappmrLv6zwJ4E8D7ALwI4Necc/930zS/4py7B+BvAPhjAP42gJ8D8EsAPrZpMmXd4HRdmfjIopR5ZAgSO7ppWWNdVlgYsuNvtmIfAJ/F35/ZuDlLHAoleGOhm362qHGyruhAaq4J5fO0qOnCZiAgiWvDd+2vF+4dG2zL931aSo8g7lq3VcP5F27ugsSdPTnTKLUVSTwtarNy8Z02uSX9QhnTUuZdn8QrUr+ap0nXGucqKxfvbGc72xnQV7ame+X2EoVcCwwJJIvKt0VLHO+73tzP8fmHpwD4czFWN70qbJcpu5BTq2mao6ZpfrZpmt9umqZumuZ/BPDPAHwdMfyHAPxc0zTvNE3zjwH8lwD+aPu7fwXAbzZN89ebpjmFDyjfcs59aOqPHndBog1JPDLQTbPEIXFtn0RjC4wPvnAdAHDDICUfgkRbLZ2gbdInkQ1K9/IEJ0WFk+L8g8RAN62wJltgAEGRalXyKlZAHz1kWwfIpnFaeAeZvY+6TslSN7aznU2ZFkVi9wN572lRmVWBhW7Krn3gjBYYVyhLK47Sjm66s53t7Kqb7Hf7eWrz07QoDNkCA/Dsk6K21Qje3M/x+QcrADY/eV35cqJ1uatJPFdzzr0A4IMAflO9/DvOuX/hnPtvWoQQzrnbAF4C8PfV+/4+gI+0P39E/65pmiMA/1T9Xl/zR5xzv+6c+3UAOCkqrIqKDtzkfSIKw4xzzmE/T3G8rszqpl/2og8Sf+DrX6XHdDWJRiRx0dJNOySRdAr32z6JJ0XVXfu8LNBNa6yKuuvHNjmuRUSsdNOb+9q5tq2R03Xbs8fgXH/guUMAwPPXdzWJO3tydnM/77KrliTJMktwWlaoapsq8I29DD/6ydfxl//tj9JjerUlHd306mRpdz3wdraznT0rJkHidQPA4RlfolTKMcWk/rCoGnNLih6SaCg5axqPdBZG0Ocy24VLKTrncgD/A4D/rmma33LOXQPwDQB+A8BdAP9Z+/vvAiCcy/vqT9wHcL39+RqAL0SX0L/vrGmaXwTwiwCwfOnN5qSobI3SYySRXCDX93K8e7JG3QCLlA+kXrixh1/7yW/Fe+8cTL+5tQ5JPLI1bl6KSEVXk8giiSmOVyVOC/4+zrU9hSQeFyWev84hbofLDEfr0oQaA/0gkQ2AZY2cFEI35R3dX/rRj+OffPbhM5Od2tnFWJo4vHB9id+7f2qqG97L03ZPaOgaZcAnxv7sH/hy0xz79ShCN706z8H77x3iH/7u/V2QuLOd7ezK26wgUSGJvsSBoZu2SGJVo6xt9M+b+3lg3BmEawBfPrarSTwnc84lAP57AGsAPwYATdM8AvDr7Vs+55z7MQCfcc5dB/Coff0GgFP188P250ft/2vTvz/TTta2RpqyIES4hh13Yz/DFx95ZM+aeXjt3qHp/bonF8DX0u1lvnF8oJty19vPUxy1Klbnrm6qWmAcG2ogDxcZjlYlqga4pQK/KbuhkURyE5FAWdqksME2ANy7tsS9N3Yo4s6evEmS432GhNNenrZIoq0mcY7laVC2K6urhyS+/66/77s+oTvb2c6uut3YlyCR97cWOlFIBnxyRgiyZylR0CAAjST2gsRdTeITN+cLr/4igBcAfKppmuKMt7Z4FpKmad4B8BkAb6nfv4VAU/1N/Tvn3CGAD6BPYx21E6lJNIqSPFr5oIhFBa/v5fjSo1Xvb5yXiTN439gCY9lSMq10U40enr9wTVCKPV3z9NaDhaf7WqjFQEw3tQWJxys7kriznZ2XiRz5G89fm3hnsGXW7glGddM55psit/Uo9dVqgQEAb7b15ayIw852trOdXVZ76eY+gKBUzVieuYAkki0whG1SVC2yZzintH+n1eU3mfiPojGyQxKfvP3nAL4cwHc0TdN1g3bOfRTAuwD+XwC3AfwnAP7XpmmEYvqXAPxUW0v4AoAfBvBvtr/7mwB+wTn3KQD/E4CfBvAPmqb5ranJCN3UjiT6AIwNOG7sZfjdd05MY+bavkIS08TRmZW9Vu5+XdamcT1K5rkL1ygkseD7MgrdNE8TE91Lbxz3rnGbiNx/QZst4h0729l5maxHS5Do6aYVquoCgsQ0qJt2SOIVopt+z1e8iOd/5GOdGNnOdraznV1Ve+W2DxLfPT4LBxqablTPonQdklh5JDGfCQI8d41jcEk5kSCJuz6JT9Da3oU/CuCrAXxW9UP8QQCvA/gVeIroPwKwAvBH1PCfgRej+R0Afw/ALzRN8ysA0DTNFwB8CsDPA3gHwEcBfJqZk0cSebqpBHhHgiQaahK/dOSRxOU5L6p91Sbi/2/vzoMkuasDj39fX3P03DPSwOhcSUggtCABkkBrc6wEmCtYEAiEECAsc8hgBwEGggUB5jCLN/AuYQ6DZS0IcZrDBmyFIYwIbwBhZHMYeWVAIHGIEbpmpkfTPdPH2z8yK7vU9MxU9XRVdlV9PxEV012VWfW6pjt/9fK9/P3amqRidLic3GW2rV/8bU1/XJ1eJ7F5zcl2ltxYOzbMvv2z7J9ubwmM5oNI68n2fVuSW1nYVeq0v3j+wzn/gUdXE6i0YtXoEFMzc0zNzHb8euPR4aFqwpr52U37529nZHiIR560tZr5VZL6VWOc2TPZepLYWKsbGktgtDe7aVF9bH3M2NS07NhRLU4W2ChUs0uoiQAAGwxJREFUHJidbXuinF7WlUpiZt4KHOp/8BOH2Hc/8OLyttjjXwUOu+TFQsXspq0nDo3kqTG7aavtUOtXj1Rrf3W6kjg6PFSsOTaX7c9k2KistrGWV3OFreOVxJHiZ9szNc3+mbmW200blcSIWHK7aasWtvs6UYVWgvNO2cZ5p2xra5/VI8McKE/ItHpN7lI11hGE+dlNB2UAlqR+ckxZSZzYv9iy54sbGxliYmqGzGR2rtV20/nZTdtt/zx+y/x8H+1OXlm1m470z4nMQxnYiySKdtPZtpc3mJhqbw3C5glQujFl7tqxYfZMzbS9Jtr+6caC820kiU1nYDo9cU1EsKFpbZuW203HRpianmM4Ztr62dpZn7KhkSjvLicO6nQFRuqUxsmi3ZPTLR8jl2pkaIjZuSQz5yuJVuElqedsXDPKxeccx9MesqPlfVaNDHH37Fy1FFIrx/+qkjibzLSZJJ6+Y+F8l63FCEW76dR050+erhQDmyQWk5m0XklsVA7vLCeh2dDizE3N0wB3o4d5y/gYe6baS4hWjxal/n0HZttqybxPu2kXEqINq0e4fU8xyW3Ls5uuasw4OttWlXRkeIg/euJp/FYbFZjGe7DLSqJ6XGMA3D05fZ8TXZ3QOLZOl9eWQOst3pKkleVPnvmQtrYfLa9JnL/c4PDH/0ZL6vRckVy2uwRGu5onrunG2uArxUAmiUMRbbdXNhKAnbunWDs23MbENd2tJG5bt4pb7trXVrLX2HZiarqtGJurbd2YuW/DmlF2NpLEsdZeb23Tdu1eE/r7jzulre0bvyON9Xfa+T+QVpLG7/LuyemWr9lYqvtcW9KHs5tKkg6usU7i/OUGhz/+N2Y3nZlNDsy0twQGwNWXnc3aNoob1QoHUzNkDk6n2EAmiRHF5CIHZltvr2xMOnDvgVnuv7G1hdwBdmya37adxUWXqlHda6dq1mgna7cCGRE86qStbFgzwqnbW585cak2rB7lJ3fcC7TRbrpqfrtWlztZqsaZpV3VOpVWQ9SbGseBXfumuzJxDcD0TPbl7KaSpIMbLddJbOdyg/nZTYuTi+1eFvG4045ua/tqTJxs75KzXjeQSeJQBLvbrPasHh1m3aoR9u6faatUfXzTAtYnbet8IrVtfZHMttMv3Vw1aPdavE+85JFtbX8kNqwZqWYObX1206ZKYocruY3ZTfdU61QOxkFE/adxTJic7vzspvMzF89WE9h4TaIkDYZGJXGmjcsNmme8n56d63gRZrzslru7XK2g09fqrxSD8VMuMBzBHeW1he0kDlvL2TzbuUanedr5jWs7e20PzFcS2zkR33gPdk+2127abc2tu632g29tmoG100niyPAQY8ND89ckDshBRP2nuQK/usN/N42ugH0HZpmZm2MoXGNUkgZFY53E6TYuN2h8BpycLk4udrr7pHFJ1V17i06xTs/ov1IM5KfY4aGoJkBp54P81rLldFMbSWK3S9KNM/CntbFwcyPGPZPTK/o6uubkvNVrIJsrud1IgFePDlWLyDpxjXrV+qYTMp0+hjUG230HZov1rpy0RpIGRqOSeGBmrvr+cBrjxuSB2WJx+w4vSdE4mdkoMA1KkjiQ7abDQ8GvdhdJYjstgVvGiypduzMjveMZZ7B1vLOTPzT8t7OO4Ve7p3jt77S+dGSjbL6/zSUwuq25Ffbko1pr3d3atID10etbv5Z0qVaPDvPrif3V11Iv2rhm/m+t020182eEZ5iezWr9K0lS/2tUEqskcfjwn50aSdrUzCwzs3MdrySOj923kjgon+8GMkkcGY7ql3HzeOsJXyPhaDdJvOTcE9ra/kgcu3kt73jGf25rn+bqYacndzkSxzVVBVttN42Y/8B59n/asuwxLdQc10pOuKVD6WYlsXHdcKPddNS/G0kaGKPDQ8xl0ToKrVUSV481VxKzrXUSl2JoKFg7Nlwtg2eS2MeGm85Ut1Phu+D07fzs7n089aGtLxLaC5orBd1Yy3GpnnD6/QA4adt4W/td9Ihj+emd93ZlmY7mFoSV3LorHUrzJACdTxLnB/tBWqRYkjSfFN5bTkzYTrvp1HTRbtqNZZPGV400VRJX7mfl5TTwSeK2NtYAe/zp23n86ds7EVKt7jMD6Ar+xV8zNsw/vOrRbVdy3/2sh3Yoot/UHJuVRPWq+57s6Fa7aXtr10qSel8jKZyYKpLEltZJHB5iZCiYnJ5lZi6rJTE6ad2qEX5+9z6g9W62XjeQSeJIBLPl183XrA2qLePdmwH0SJ3axoQ8ddi8tngvx4aHnKFRPau5TbtblcR9B2bZPz1nJVGSBshYmeA1Komtfg5dPTrM5IE5pmfmOt5uCsWs3zPlDKyDMk6t7IygQ4aHu/cBqBdsalqaYyUvgdELNpcJ90pPtqVWdXN206mZWSuJkjRAGpfmTEwVM8O3MnENlEli2YHSjc+u401dd4NSSRzI0bi5vVLFH+h4+QvvdXRHZks5EZLJtvrFeIcHw6rd9MCMlURJGjCNMWD3ZOvXJBb7DTExNc2B2TnWdeFzffO8FoMyTg3kJ9mRoeCZDzuGi885ru5QVozx8pffCtiRabSbHpidqzkS6chc8KDi+utHn3pUR19nbHiI4aEo2k2tJErSQGl0k+yaLCaFaTlJHB3m7nuLfdZ2YWLCdat7Y/6O5TSwJbX3XHRm3SGsKFn+240ZQPtZI0mcPDB7mC2lle39lzyMucyOt5tGBGtHh4t20+k5towPxuArSZq/Ln33vrLdtI0ksTHbaKc7XgCO2bQGKD4nD0pBxYxAANxRLgD/8BM21xxJb2tUZI9vWtNR6kXdbJleMzbMZFVJHIw2HklSc7tp45rE1ieu+eWuSaA7lcRTjl4HFB13zZO79bPBSIV1WI1f/tPvv6HmSHrb2Sdu5oIHHc1HXnxO3aFIPWN81Qj3HphhanpuYM7QSpLmk8RdbSaJa8aGubOLlcTG5+RBmrneSqIA+NRLHsnE1MxA/fJ3wtZ1q/jLF55ddxhST9mweoQ9UzPsn5lzxmlJGiBrR4tUpKokttFuWj1HFyauaSSJr378qR1/rZXCJFFAkdxsXbeq7jAkDaANa0bZPTldtJtaSZSkgVFVEtu8JrF5+bbxVZ0/ubh2bIRb3vWUjr/OSuJoLEmq1cY1o+yZnGb/9JzL8EjSAGkkiXsmpxkeCoZb7GhrTBQILm3XKSaJkqRabVwzyj37DnBgdo7VAzK1uCRpvm30wOxcy9cjAmwZn08Su1FJHESOxpKkWm1cM1q1GllJlKTBMTwUVYtpO7NqW0nsPJNESVKtNq6Zv7bEaxIlabA01kpsJ0ncsq45SfTkYic4GkuSatWcJDq7qSQNlrXlcb+tdtOmSuJoG/updb6rkqRaWUmUpMG1egmVxEa76fYNzszfKTbxSpJqdXTTIH//jatrjESS1G1bx8f4yR33tnWS8NjNa3jlfz2Fix5xXAcjG2wmiZKkWp20bV319QnbxmuMRJLUbffbuAa4h/u1cZJwaCh49RNO61xQst1UklSvzU1Tmd9/g5VESRokO8rk8NjNa2qORM1MEiVJK8ZQiwspS5L6Q2MJi3WrRg+zpbrJdlNJUu0+d8V5TE3P1h2GJKkm7Uxco84zSZQk1e5hx2+uOwRJUg0ufdQJ/PD2CS4778S6Q1ETk0RJkiRJtdgyPsb7LnlY3WFoAeu6kiRJkqSKSaIkSZIkqWKSKEmSJEmqmCRKkiRJkiomiZIkSZKkikmiJEmSJKlikihJkiRJqpgkSpIkSZIqJomSJEmSpIpJoiRJkiSpYpIoSZIkSaqYJEqSJEmSKiaJkiRJkqSKSaIkSZIkqWKSKEmSJEmqmCRKkiRJkiomiZIkSZKkikmiJEmSJKkSmVl3DF0XERPAfyxh143A7hW+nzHWu18vxLjU/Yyx3v16Ical7tcLMS51v23AnV16raXu1wvv41L364UYl7qfMda7Xy/EuNT9eiHGpe5njPd1WmauX/SRzBy4G3DDEvf70Erfzxj92Qb5Z+uFGP3ZejPGI/jZVvx40wvvoz+bMa60/XohRn82Y2xhn4OOUbabtueLPbCfMda7Xy/EuNT9jLHe/XohxqXu1wsxHsl+3Xwt3//6Xqvb+xljvfv1QoxL3a8XYlzqfsbYokFtN70hMx9RdxySpP7meCNJWqkONUYNaiXxQ3UHIEkaCI43kqSV6qBj1EBWEiVJkiRJixvUSmJHRMSWiPh8RNwbEbdGxPPK+x8XEf8WEbsi4q5ym2PqjrffRMQrIuKGiNgfEf9nwWPnR8RNEbEvIr4WESfUFGbfOtj7HxGXRMTeptu+iMiIeHiN4faViFgVEVeVx52JiPhuRDxpke2uLN/7C+qIU+qUg42/5WOvjIifRsSe8hj1W3XG2o8Ocfw/sTzmNI8Bb6ox1L50qDEgIh4ZEV+JiLsj4o6I+ExE3L/umPvJ4cbgiLg8In5c/v5fFxE76oy3VSaJy+t9wAFgO3AJ8IGIeDDw78ATM3MTsAP4EfCB2qLsX7cBbwf+qvnOiNgGfA54E7AFuAH4VNej63+Lvv+ZeW1mrmvcgCuAnwD/WkOM/WoE+DnwGIopsN8IfDoiTmxsEBEnA88GflVDfFKnLTr+RsS5wLuAZ1H8bVwFfD4ihmuLtD8tevxvsqlpHHhbF+MaFIcaAzZTtBSeCJwATABX1xFkHzvo+x8RjwXeCTyd4jPoT4FP1BRnW2w3XSYRMQ7cA5yRmT8s77sG+GVmvr5pu1XAW4CnZ+bpdcTa7yLi7cCxmfmi8vuXAC/KzPPK78cp1i07KzNvqi3QPrXw/V/k8a8B12fmW7sa2ICJiO8Db83Mz5bfXwe8F3g/cHlmfrXO+KTlcqjxF/gO8OrMPKdp273Ajsz0hMkyW2T8PZHiQ/FoZs7UF9ngWTgGNN3/MODrebC18bQsGu8/8ChgTWb+fnn/Dopj0ymZeXONIR6WlcTlcyow0xigSt8DHgwQEcdHxC5gEngN8O7uhziwHkzxfwFAZt4L3Fzery4q23wfDXy07lj6WURspzgm3Vh+/2xgf2b+Xa2BSZ1xqPH374HhiDi3rB6+GPgusLP7YQ60WyPiFxFxddndow5aOAYs8OiD3K9lssj7H80Pl/+e0dWglmCk7gD6yDpgz4L7dgPrATLzZ8CmiNgC/B5gBat71gF3LLiv+r9RV70A+KfM/GndgfSriBgFrgU+kpk3RcR6ilaXx9cbmdQxhxp/J4DPAv+X4sPZLuBJaRtVt9wJnE2RmG+laAu+FnhinUH1s4VjwILHHgJcSdH6qA5YZAy+DvhkRHyQ4nKzK4EE1tYYZkusJC6fvcCGBfdtoBigKpl5N/AR4G8iwiS9O1r6v1FXvIDi918dEBFDwDUU12a9orz7LcA1mXlLTWFJnXaoY/zvApdRVBXHgOcDX+qViSN6XWbuzcwbMnMmM2+nOC49oTx5pWV2kDGg8dgpFJX1P8zMf6ohvL632PtfXtrxZoqTVbeUtwngF7UE2QaTxOXzQ2AkIh7QdN9DWbykPwIczW8OauqMGyn+L4DqmpSTsd2iqyLiv1BM3PTXdcfSjyIiKCbl2A5cmJnT5UPnA38QETsjYidwHMUF9a+rKVRpuR1q/D0T+FJm/jAz5zLzOorJm86rIU4VFRTw8+eyO8QY0LjU46vA2zLzmppC7GuHev8z832Z+YDM3E6RLI4AP6gn0tb5R7pMyuvcPgf8cUSMlx+Inw5cExHPjIjTImIoIo4C3gN8p6wqaplExEhErAaGKa5BWV1Waz8PnBERF5aPXwl830lrltch3v+GFwKfzUwruJ3xAeBBwNMyc7Lp/vMprn04s7zdBryUou1L6nmHGn+BbwNPiYiTovB4imuFVvwHtF5ysON/eS1o4/PPVorJs67PzN31RtyXFh0Dolhy7R+BP8/MD9YV3AA42Pu/OiLOKI8/x1PMNPu/M/OeugJtlUni8roCWAP8mmJ625dn5o3AMcB1FOXlfwPmgGfUFWQfeyPFxECvp2gpmgTemJl3ABcC76CYAe9c4Ll1BdnHFn3/oThIAhdhq2lHlGeJX0qRBO6M+fXILsnMuzJzZ+MGzAL3ZObeWoOWltfBxt+PAp8Erqe4bvG9wEs9SbjsDnb8P4n5zz8/APYDF9cUY9861BgAXE7x//CWpvs9/i+jw7z/q4GPU7TF/zPwTYol2VY8l8CQJEmSJFWsJEqSJEmSKiaJkiRJkqSKSaIkSZIkqWKSKEmSJEmqmCRKkiRJkiomiZIkSZKkikmiJEmSJKlikihJkiRJqpgkSpIkSZIqJomSJEmSpIpJoiRJkiSpYpIoSZIkSaqYJEqSJEmSKiaJkiRJkqSKSaIkSZIkqWKSKEmSJEmqmCRKkiRJkiomiZIkSZKkikmiJEmSJKlikihJkiRJqpgkSpIkSZIqJomSJEmSpEpfJYkRcUtE/Doixpvuuzwirq8xLElSnynHm8mImIiIXRHxjYh4WUT01bgqSRpM/TiYDQN/WHcQkqS+97TMXA+cALwLeB1wVb0hSZJ05PoxSfxT4DURsWnhAxFxXkR8OyJ2l/+eV97/nIi4YcG2r4qIv+1SzJKkHpWZuzPzb4HnAC+MiDMiYlVE/M+I+FlE3B4RH4yINY19IuLpEfHdiNgTETdHxO/U9xNIknRf/Zgk3gBcD7ym+c6I2AJ8GXgvsBV4D/DliNgKfBE4LSIe0LTL84CPdyNgSVLvy8x/Bn4B/DZFZfFU4EzgFOAY4EqAiDgH+CjwR8Am4NHALd2PWJKkxfVjkgjFQPzKiDiq6b6nAD/KzGsycyYzPwHcRNEutA/4G+BigDJZfCBgJVGS1I7bgC3AS4BXZebdmTkBvBN4brnN7wJ/lZlfycy5zPxlZt5UU7ySJP2GvkwSM/MHwJeA1zfdvQO4dcGmt1Kc3YWianhx+fXzgC+UyaMkSa06BhgB1gL/Uk5qswu4DmicuDwOuLmm+CRJOqy+TBJLbwZ+j/kk8DaKyQWaHQ/8svz6K8BREXEmRbJoq6kkqWURcTbFmPMFYBJ4cGZuKm8bM3NduenPgZPrilOSpMPp2yQxM38MfAr4g/KuvwNOjYjnRcRIRDwHOJ2i4khmTgOfoZj4ZgtF0ihJ0iFFxIaIeCrwSeBjmfk94MPAn0XE0eU2x0TEE8tdrgIui4jzI2KofOyB9UQvSdJv6tsksfTHwDhAZt4FPBV4NXAX8FrgqZl5Z9P2HwcuAD6TmTNdjlWS1Fu+GBETFJXB/04xIdpl5WOvA34MfCsi9gBfBU6DaoKby4A/A3YDX+c3O10kSapNZGbdMUiSJEmSVoh+ryRKkiRJktpgkihJkiRJqpgkSpIkSZIqJomSJEmSpIpJoiRJkiSp0tNJYkSsioirIuLWiJiIiO9GxJOaHj8/Im6KiH0R8bWIOKHpsYsi4hvlY9cf4jVeEBEZEZd3+MeRJEmSpNr1dJIIjFCsT/UYYCPwRuDTEXFiRGwDPge8CdgC3AB8qmnfu4H/BbzrYE8eEZuBNwA3diR6SZIkSVph+m6dxIj4PvBWYCvwosw8r7x/HLgTOCszb2ra/nLg+Zn52EWe64PA94GLgI9l5l92/ieQJEmSpPr0eiXxPiJiO3AqReXvwcD3Go9l5r3AzeX9rTzXOcAjgA8uf6SSJEmStDL1TZIYEaPAtcBHykrhOmD3gs12A+tbeK5h4P3AKzJzbrljlSRJkqSVqi+SxIgYAq4BDgCvKO/eC2xYsOkGYKKFp7wC+H5mfmvZgpQkSZKkHjBSdwBHKiICuArYDjw5M6fLh24EXti03ThwMq1NQnM+8JiIeHL5/RbgrIg4MzNfcYj9JEmSJKmn9XySCHwAeBBwQWZONt3/eeBPI+JC4MvAlRTVwZugaikdpXgPhiJiNTBbJpkvAlY3PdfngL+mSEYlSZIkqW/1dLtpue7hS4EzgZ0Rsbe8XZKZdwAXAu8A7gHOBZ7btPulwCRFkvnb5dcfBsjMXZm5s3GjaGPdk5kLr3GUJEmSpL7Sd0tgSJIkSZKWrqcriZIkSZKk5WWSKEmSJEmqmCRKkiRJkiomiZIkSZKkikmiJEmSJKlikihJkiRJqpgkSpIERMTx5Vq7w3XHIklSnUwSJUkDKyJuiYgLADLzZ5m5LjNnu/j6j42IX3Tr9SRJaoVJoiRJkiSpYpIoSRpIEXENcDzwxbLN9LURkRExUj5+fUS8PSK+UT7+xYjYGhHXRsSeiPh2RJzY9HwPjIivRMTdEfEfEXFR02NPjoh/j4iJiPhlRLwmIsaBvwd2lM+/NyJ2RMQ5EfHNiNgVEb+KiD+PiLGm58qIuCIiflQ+39si4uQyzj0R8enG9o1KZUS8ISLuLCunl3TnHZYk9SqTREnSQMrMS4GfAU/LzHXApxfZ7LnApcAxwMnAN4GrgS3A/wPeDFAmfF8BPg4cXe73/og4vXyeq4CXZuZ64AzgHzPzXuBJwG1lm+u6zLwNmAVeBWwDHgWcD1yxIK4nAg8HHgm8FvgQ8HzguPL5L27a9n7lcx0DvBD4UESc1tabJUkaKCaJkiQd3NWZeXNm7qao+t2cmV/NzBngM8BZ5XZPBW7JzKszcyYzvwN8Fnh2+fg0cHpEbMjMezLzXw/2gpn5L5n5rfJ5bgH+AnjMgs3enZl7MvNG4AfAP2TmT5riPGvB9m/KzP2Z+XXgy8BFSJJ0ECaJkiQd3O1NX08u8v268usTgHPLFtFdEbELuISiigdwIfBk4NaI+HpEPOpgLxgRp0bElyJiZ0TsAd5JUQlcSlwA95RVy4ZbgR0He31JkkwSJUmDLJfpeX4OfD0zNzXd1mXmywEy89uZ+XSKVtQvMN/autjrfwC4CXhAZm4A3gDEEcS2uWyHbTgeuO0Ink+S1OdMEiVJg+x24KRleJ4vAadGxKURMVrezo6IB0XEWERcEhEbM3Ma2APMNb3+1ojY2PRc68tt9kbEA4GXL0N8by3j+G2K1tjPLMNzSpL6lEmiJGmQ/QnwxrI99FlLfZLMnACeQDFhzW3ATuB/AKvKTS4FbinbR19G0YpKZt4EfAL4SdmmugN4DfA8YAL4MPCppcZV2gncU8Z1LfCy8nUlSVpUZC5Xp40kSVpJIuKxwMcy89i6Y5Ek9Q4riZIkSZKkikmiJEmSJKliu6kkSZIkqWIlUZIkSZJUMUmUJEmSJFVMEiVJkiRJFZNESZIkSVLFJFGSJEmSVDFJlCRJkiRV/j9YJ750IxgAtQAAAABJRU5ErkJggg==", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + } + } + ], + "metadata": {} + }, + { + "cell_type": "code", + "execution_count": 22, + "source": [ + "train = energy.copy()[(energy.index >= train_start_dt) & (energy.index < test_start_dt)][['load']]\n", + "test = energy.copy()[energy.index >= test_start_dt][['load']]\n", + "\n", + "print('Training data shape: ', train.shape)\n", + "print('Test data shape: ', test.shape)" + ], + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Training data shape: (1416, 1)\n", + "Test data shape: (48, 1)\n" + ] + } + ], + "metadata": {} + }, + { + "cell_type": "code", + "execution_count": 23, + "source": [ + "scaler = MinMaxScaler()\n", + "train['load'] = scaler.fit_transform(train)\n", + "train.head(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", + "
load
2014-11-01 00:00:000.10
2014-11-01 01:00:000.07
2014-11-01 02:00:000.05
2014-11-01 03:00:000.04
2014-11-01 04:00:000.06
2014-11-01 05:00:000.10
2014-11-01 06:00:000.19
2014-11-01 07:00:000.31
2014-11-01 08:00:000.40
2014-11-01 09:00:000.48
\n", + "
" + ], + "text/plain": [ + " load\n", + "2014-11-01 00:00:00 0.10\n", + "2014-11-01 01:00:00 0.07\n", + "2014-11-01 02:00:00 0.05\n", + "2014-11-01 03:00:00 0.04\n", + "2014-11-01 04:00:00 0.06\n", + "2014-11-01 05:00:00 0.10\n", + "2014-11-01 06:00:00 0.19\n", + "2014-11-01 07:00:00 0.31\n", + "2014-11-01 08:00:00 0.40\n", + "2014-11-01 09:00:00 0.48" + ] + }, + "metadata": {}, + "execution_count": 23 + } + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "Original vs dados escalados:\n" + ], + "metadata": {} + }, + { + "cell_type": "code", + "execution_count": 24, + "source": [ + "energy[(energy.index >= train_start_dt) & (energy.index < test_start_dt)][['load']].rename(columns={'load':'original load'}).plot.hist(bins=100, fontsize=12)\n", + "train.rename(columns={'load':'scaled load'}).plot.hist(bins=100, fontsize=12)\n", + "plt.show()" + ], + "outputs": [ + { + "output_type": "display_data", + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + } + }, + { + "output_type": "display_data", + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + } + } + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "Vamos também escalar os dados de teste\n" + ], + "metadata": {} + }, + { + "cell_type": "code", + "execution_count": 25, + "source": [ + "test['load'] = scaler.transform(test)\n", + "test.head()" + ], + "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", + "
load
2014-12-30 00:00:000.33
2014-12-30 01:00:000.29
2014-12-30 02:00:000.27
2014-12-30 03:00:000.27
2014-12-30 04:00:000.30
\n", + "
" + ], + "text/plain": [ + " load\n", + "2014-12-30 00:00:00 0.33\n", + "2014-12-30 01:00:00 0.29\n", + "2014-12-30 02:00:00 0.27\n", + "2014-12-30 03:00:00 0.27\n", + "2014-12-30 04:00:00 0.30" + ] + }, + "metadata": {}, + "execution_count": 25 + } + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [], + "metadata": {} + }, + { + "cell_type": "code", + "execution_count": 26, + "source": [ + "# Specify the number of steps to forecast ahead\n", + "HORIZON = 3\n", + "print('Forecasting horizon:', HORIZON, 'hours')" + ], + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Forecasting horizon: 3 hours\n" + ] + } + ], + "metadata": {} + }, + { + "cell_type": "code", + "execution_count": 27, + "source": [ + "order = (4, 1, 0)\n", + "seasonal_order = (1, 1, 0, 24)\n", + "\n", + "model = SARIMAX(endog=train, order=order, seasonal_order=seasonal_order)\n", + "results = model.fit()\n", + "\n", + "print(results.summary())\n" + ], + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + " SARIMAX Results \n", + "==========================================================================================\n", + "Dep. Variable: load No. Observations: 1416\n", + "Model: SARIMAX(4, 1, 0)x(1, 1, 0, 24) Log Likelihood 3477.239\n", + "Date: Thu, 30 Sep 2021 AIC -6942.477\n", + "Time: 14:36:28 BIC -6911.050\n", + "Sample: 11-01-2014 HQIC -6930.725\n", + " - 12-29-2014 \n", + "Covariance Type: opg \n", + "==============================================================================\n", + " coef std err z P>|z| [0.025 0.975]\n", + "------------------------------------------------------------------------------\n", + "ar.L1 0.8403 0.016 52.226 0.000 0.809 0.872\n", + "ar.L2 -0.5220 0.034 -15.388 0.000 -0.588 -0.456\n", + "ar.L3 0.1536 0.044 3.470 0.001 0.067 0.240\n", + "ar.L4 -0.0778 0.036 -2.158 0.031 -0.148 -0.007\n", + "ar.S.L24 -0.2327 0.024 -9.718 0.000 -0.280 -0.186\n", + "sigma2 0.0004 8.32e-06 47.358 0.000 0.000 0.000\n", + "===================================================================================\n", + "Ljung-Box (L1) (Q): 0.05 Jarque-Bera (JB): 1464.60\n", + "Prob(Q): 0.83 Prob(JB): 0.00\n", + "Heteroskedasticity (H): 0.84 Skew: 0.14\n", + "Prob(H) (two-sided): 0.07 Kurtosis: 8.02\n", + "===================================================================================\n", + "\n", + "Warnings:\n", + "[1] Covariance matrix calculated using the outer product of gradients (complex-step).\n" + ] + } + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "Crie um ponto de dados de teste para cada etapa do HORIZON.\n" + ], + "metadata": {} + }, + { + "cell_type": "code", + "execution_count": 28, + "source": [ + "test_shifted = test.copy()\n", + "\n", + "for t in range(1, HORIZON):\n", + " test_shifted['load+'+str(t)] = test_shifted['load'].shift(-t, freq='H')\n", + " \n", + "test_shifted = test_shifted.dropna(how='any')\n", + "test_shifted.head(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", + "
loadload+1load+2
2014-12-30 00:00:000.330.290.27
2014-12-30 01:00:000.290.270.27
2014-12-30 02:00:000.270.270.30
2014-12-30 03:00:000.270.300.41
2014-12-30 04:00:000.300.410.57
\n", + "
" + ], + "text/plain": [ + " load load+1 load+2\n", + "2014-12-30 00:00:00 0.33 0.29 0.27\n", + "2014-12-30 01:00:00 0.29 0.27 0.27\n", + "2014-12-30 02:00:00 0.27 0.27 0.30\n", + "2014-12-30 03:00:00 0.27 0.30 0.41\n", + "2014-12-30 04:00:00 0.30 0.41 0.57" + ] + }, + "metadata": {}, + "execution_count": 28 + } + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [], + "metadata": {} + }, + { + "cell_type": "code", + "execution_count": 29, + "source": [ + "%%time\n", + "training_window = 720 # dedicate 30 days (720 hours) for training\n", + "\n", + "train_ts = train['load']\n", + "test_ts = test_shifted\n", + "\n", + "history = [x for x in train_ts]\n", + "history = history[(-training_window):]\n", + "\n", + "predictions = list()\n", + "\n", + "# let's user simpler model for demonstration\n", + "order = (2, 1, 0)\n", + "seasonal_order = (1, 1, 0, 24)\n", + "\n", + "for t in range(test_ts.shape[0]):\n", + " model = SARIMAX(endog=history, order=order, seasonal_order=seasonal_order)\n", + " model_fit = model.fit()\n", + " yhat = model_fit.forecast(steps = HORIZON)\n", + " predictions.append(yhat)\n", + " obs = list(test_ts.iloc[t])\n", + " # move the training window\n", + " history.append(obs[0])\n", + " history.pop(0)\n", + " print(test_ts.index[t])\n", + " print(t+1, ': predicted =', yhat, 'expected =', obs)" + ], + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "2014-12-30 00:00:00\n", + "1 : predicted = [0.32 0.29 0.28] expected = [0.32945389435989236, 0.2900626678603402, 0.2739480752014323]\n", + "2014-12-30 01:00:00\n", + "2 : predicted = [0.3 0.29 0.3 ] expected = [0.2900626678603402, 0.2739480752014323, 0.26812891674127126]\n", + "2014-12-30 02:00:00\n", + "3 : predicted = [0.27 0.28 0.32] expected = [0.2739480752014323, 0.26812891674127126, 0.3025962399283795]\n", + "2014-12-30 03:00:00\n", + "4 : predicted = [0.28 0.32 0.42] expected = [0.26812891674127126, 0.3025962399283795, 0.40823634735899716]\n", + "2014-12-30 04:00:00\n", + "5 : predicted = [0.3 0.39 0.54] expected = [0.3025962399283795, 0.40823634735899716, 0.5689346463742166]\n", + "2014-12-30 05:00:00\n", + "6 : predicted = [0.4 0.55 0.66] expected = [0.40823634735899716, 0.5689346463742166, 0.6799462846911368]\n", + "2014-12-30 06:00:00\n", + "7 : predicted = [0.57 0.68 0.75] expected = [0.5689346463742166, 0.6799462846911368, 0.7309758281110115]\n", + "2014-12-30 07:00:00\n", + "8 : predicted = [0.68 0.75 0.8 ] expected = [0.6799462846911368, 0.7309758281110115, 0.7511190689346463]\n", + "2014-12-30 08:00:00\n", + "9 : predicted = [0.75 0.8 0.82] expected = [0.7309758281110115, 0.7511190689346463, 0.7636526410026856]\n", + "2014-12-30 09:00:00\n", + "10 : predicted = [0.77 0.78 0.78] expected = [0.7511190689346463, 0.7636526410026856, 0.7381378692927483]\n", + "2014-12-30 10:00:00\n", + "11 : predicted = [0.76 0.75 0.74] expected = [0.7636526410026856, 0.7381378692927483, 0.7188898836168307]\n", + "2014-12-30 11:00:00\n", + "12 : predicted = [0.77 0.76 0.75] expected = [0.7381378692927483, 0.7188898836168307, 0.7090420769919425]\n", + "2014-12-30 12:00:00\n", + "13 : predicted = [0.7 0.68 0.69] expected = [0.7188898836168307, 0.7090420769919425, 0.7081468218442255]\n", + "2014-12-30 13:00:00\n", + "14 : predicted = [0.72 0.73 0.76] expected = [0.7090420769919425, 0.7081468218442255, 0.7385854968666068]\n", + "2014-12-30 14:00:00\n", + "15 : predicted = [0.71 0.73 0.86] expected = [0.7081468218442255, 0.7385854968666068, 0.8478066248880931]\n", + "2014-12-30 15:00:00\n", + "16 : predicted = [0.73 0.85 0.97] expected = [0.7385854968666068, 0.8478066248880931, 0.9516562220232765]\n", + "2014-12-30 16:00:00\n", + "17 : predicted = [0.87 0.99 0.97] expected = [0.8478066248880931, 0.9516562220232765, 0.934198746642793]\n", + "2014-12-30 17:00:00\n", + "18 : predicted = [0.94 0.92 0.86] expected = [0.9516562220232765, 0.934198746642793, 0.8876454789615038]\n", + "2014-12-30 18:00:00\n", + "19 : predicted = [0.94 0.89 0.82] expected = [0.934198746642793, 0.8876454789615038, 0.8294538943598924]\n", + "2014-12-30 19:00:00\n", + "20 : predicted = [0.88 0.82 0.71] expected = [0.8876454789615038, 0.8294538943598924, 0.7197851387645477]\n", + "2014-12-30 20:00:00\n", + "21 : predicted = [0.83 0.72 0.58] expected = [0.8294538943598924, 0.7197851387645477, 0.5747538048343777]\n", + "2014-12-30 21:00:00\n", + "22 : predicted = [0.72 0.58 0.47] expected = [0.7197851387645477, 0.5747538048343777, 0.4592658907788718]\n", + "2014-12-30 22:00:00\n", + "23 : predicted = [0.58 0.47 0.39] expected = [0.5747538048343777, 0.4592658907788718, 0.3858549686660697]\n", + "2014-12-30 23:00:00\n", + "24 : predicted = [0.46 0.38 0.34] expected = [0.4592658907788718, 0.3858549686660697, 0.34377797672336596]\n", + "2014-12-31 00:00:00\n", + "25 : predicted = [0.38 0.34 0.33] expected = [0.3858549686660697, 0.34377797672336596, 0.32542524619516544]\n", + "2014-12-31 01:00:00\n", + "26 : predicted = [0.36 0.34 0.34] expected = [0.34377797672336596, 0.32542524619516544, 0.33034914950760963]\n", + "2014-12-31 02:00:00\n", + "27 : predicted = [0.32 0.32 0.35] expected = [0.32542524619516544, 0.33034914950760963, 0.3706356311548791]\n", + "2014-12-31 03:00:00\n", + "28 : predicted = [0.32 0.36 0.47] expected = [0.33034914950760963, 0.3706356311548791, 0.470008952551477]\n", + "2014-12-31 04:00:00\n", + "29 : predicted = [0.37 0.48 0.65] expected = [0.3706356311548791, 0.470008952551477, 0.6145926589077886]\n", + "2014-12-31 05:00:00\n", + "30 : predicted = [0.48 0.64 0.75] expected = [0.470008952551477, 0.6145926589077886, 0.7247090420769919]\n", + "2014-12-31 06:00:00\n", + "31 : predicted = [0.63 0.73 0.79] expected = [0.6145926589077886, 0.7247090420769919, 0.786034019695613]\n", + "2014-12-31 07:00:00\n", + "32 : predicted = [0.71 0.76 0.79] expected = [0.7247090420769919, 0.786034019695613, 0.8012533572068039]\n", + "2014-12-31 08:00:00\n", + "33 : predicted = [0.79 0.82 0.83] expected = [0.786034019695613, 0.8012533572068039, 0.7994628469113696]\n", + "2014-12-31 09:00:00\n", + "34 : predicted = [0.82 0.83 0.81] expected = [0.8012533572068039, 0.7994628469113696, 0.780214861235452]\n", + "2014-12-31 10:00:00\n", + "35 : predicted = [0.8 0.78 0.76] expected = [0.7994628469113696, 0.780214861235452, 0.7587287376902416]\n", + "2014-12-31 11:00:00\n", + "36 : predicted = [0.77 0.75 0.74] expected = [0.780214861235452, 0.7587287376902416, 0.7367949865711727]\n", + "2014-12-31 12:00:00\n", + "37 : predicted = [0.77 0.76 0.76] expected = [0.7587287376902416, 0.7367949865711727, 0.7188898836168307]\n", + "2014-12-31 13:00:00\n", + "38 : predicted = [0.75 0.75 0.78] expected = [0.7367949865711727, 0.7188898836168307, 0.7273948075201431]\n", + "2014-12-31 14:00:00\n", + "39 : predicted = [0.73 0.75 0.87] expected = [0.7188898836168307, 0.7273948075201431, 0.8299015219337511]\n", + "2014-12-31 15:00:00\n", + "40 : predicted = [0.74 0.85 0.96] expected = [0.7273948075201431, 0.8299015219337511, 0.909579230080573]\n", + "2014-12-31 16:00:00\n", + "41 : predicted = [0.83 0.94 0.93] expected = [0.8299015219337511, 0.909579230080573, 0.855863921217547]\n", + "2014-12-31 17:00:00\n", + "42 : predicted = [0.94 0.93 0.88] expected = [0.909579230080573, 0.855863921217547, 0.7721575649059982]\n", + "2014-12-31 18:00:00\n", + "43 : predicted = [0.87 0.82 0.77] expected = [0.855863921217547, 0.7721575649059982, 0.7023276633840643]\n", + "2014-12-31 19:00:00\n", + "44 : predicted = [0.79 0.73 0.63] expected = [0.7721575649059982, 0.7023276633840643, 0.6195165622202325]\n", + "2014-12-31 20:00:00\n", + "45 : predicted = [0.7 0.59 0.46] expected = [0.7023276633840643, 0.6195165622202325, 0.5425246195165621]\n", + "2014-12-31 21:00:00\n", + "46 : predicted = [0.6 0.47 0.36] expected = [0.6195165622202325, 0.5425246195165621, 0.4735899731423454]\n", + "CPU times: user 12min 15s, sys: 2min 39s, total: 14min 54s\n", + "Wall time: 2min 36s\n" + ] + } + ], + "metadata": { + "scrolled": true + } + }, + { + "cell_type": "markdown", + "source": [ + "Compare previsões com a carga real\n" + ], + "metadata": {} + }, + { + "cell_type": "code", + "execution_count": 30, + "source": [ + "eval_df = pd.DataFrame(predictions, columns=['t+'+str(t) for t in range(1, HORIZON+1)])\n", + "eval_df['timestamp'] = test.index[0:len(test.index)-HORIZON+1]\n", + "eval_df = pd.melt(eval_df, id_vars='timestamp', value_name='prediction', var_name='h')\n", + "eval_df['actual'] = np.array(np.transpose(test_ts)).ravel()\n", + "eval_df[['prediction', 'actual']] = scaler.inverse_transform(eval_df[['prediction', 'actual']])\n", + "eval_df.head()" + ], + "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", + "
timestamphpredictionactual
02014-12-30 00:00:00t+13,008.743,023.00
12014-12-30 01:00:00t+12,955.532,935.00
22014-12-30 02:00:00t+12,900.172,899.00
32014-12-30 03:00:00t+12,917.692,886.00
42014-12-30 04:00:00t+12,946.992,963.00
\n", + "
" + ], + "text/plain": [ + " timestamp h prediction actual\n", + "0 2014-12-30 00:00:00 t+1 3,008.74 3,023.00\n", + "1 2014-12-30 01:00:00 t+1 2,955.53 2,935.00\n", + "2 2014-12-30 02:00:00 t+1 2,900.17 2,899.00\n", + "3 2014-12-30 03:00:00 t+1 2,917.69 2,886.00\n", + "4 2014-12-30 04:00:00 t+1 2,946.99 2,963.00" + ] + }, + "metadata": {}, + "execution_count": 30 + } + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "Calcule o **erro percentual absoluto médio (MAPE)** para todas as previsões\n", + "\n", + "$$MAPE = \\frac{1}{n} \\sum_{t=1}^{n}|\\frac{actual_t - predicted_t}{actual_t}|$$\n" + ], + "metadata": {} + }, + { + "cell_type": "code", + "execution_count": 31, + "source": [ + "if(HORIZON > 1):\n", + " eval_df['APE'] = (eval_df['prediction'] - eval_df['actual']).abs() / eval_df['actual']\n", + " print(eval_df.groupby('h')['APE'].mean())" + ], + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "h\n", + "t+1 0.01\n", + "t+2 0.01\n", + "t+3 0.02\n", + "Name: APE, dtype: float64\n" + ] + } + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [], + "metadata": {} + }, + { + "cell_type": "code", + "execution_count": 32, + "source": [ + "print('One step forecast MAPE: ', (mape(eval_df[eval_df['h'] == 't+1']['prediction'], eval_df[eval_df['h'] == 't+1']['actual']))*100, '%')" + ], + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "One step forecast MAPE: 0.5570581332313952 %\n" + ] + } + ], + "metadata": {} + }, + { + "cell_type": "code", + "execution_count": 33, + "source": [ + "print('Multi-step forecast MAPE: ', mape(eval_df['prediction'], eval_df['actual'])*100, '%')" + ], + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Multi-step forecast MAPE: 1.1460048657704118 %\n" + ] + } + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "Trace as previsões versus os valores reais para a primeira semana do conjunto de teste\n" + ], + "metadata": {} + }, + { + "cell_type": "code", + "execution_count": 34, + "source": [ + "if(HORIZON == 1):\n", + " ## Plotting single step forecast\n", + " eval_df.plot(x='timestamp', y=['actual', 'prediction'], style=['r', 'b'], figsize=(15, 8))\n", + "\n", + "else:\n", + " ## Plotting multi step forecast\n", + " plot_df = eval_df[(eval_df.h=='t+1')][['timestamp', 'actual']]\n", + " for t in range(1, HORIZON+1):\n", + " plot_df['t+'+str(t)] = eval_df[(eval_df.h=='t+'+str(t))]['prediction'].values\n", + "\n", + " fig = plt.figure(figsize=(15, 8))\n", + " ax = plt.plot(plot_df['timestamp'], plot_df['actual'], color='red', linewidth=4.0)\n", + " ax = fig.add_subplot(111)\n", + " for t in range(1, HORIZON+1):\n", + " x = plot_df['timestamp'][(t-1):]\n", + " y = plot_df['t+'+str(t)][0:len(x)]\n", + " ax.plot(x, y, color='blue', linewidth=4*math.pow(.9,t), alpha=math.pow(0.8,t))\n", + " \n", + " ax.legend(loc='best')\n", + " \n", + "plt.xlabel('timestamp', fontsize=12)\n", + "plt.ylabel('load', fontsize=12)\n", + "plt.show()" + ], + "outputs": [ + { + "output_type": "stream", + "name": "stderr", + "text": [ + "No handles with labels found to put in legend.\n" + ] + }, + { + "output_type": "display_data", + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + } + } + ], + "metadata": {} + }, + { + "cell_type": "code", + "execution_count": null, + "source": [], + "outputs": [], + "metadata": {} + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n---\n\n**Aviso Legal**: \nEste documento foi traduzido utilizando o serviço de tradução por IA [Co-op Translator](https://github.com/Azure/co-op-translator). Embora nos esforcemos para garantir a precisão, esteja ciente de que traduções automatizadas podem conter erros ou imprecisões. O documento original em seu idioma nativo deve ser considerado a fonte autoritativa. Para informações críticas, recomenda-se a tradução profissional realizada por humanos. Não nos responsabilizamos por quaisquer mal-entendidos ou interpretações equivocadas decorrentes do uso desta tradução.\n" + ] + } + ], + "metadata": { + "kernel_info": { + "name": "python3" + }, + "kernelspec": { + "name": "python3", + "display_name": "Python 3.7.0 64-bit" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.7.0" + }, + "nteract": { + "version": "nteract-front-end@1.0.0" + }, + "metadata": { + "interpreter": { + "hash": "70b38d7a306a849643e446cd70466270a13445e5987dfa1344ef2b127438fa4d" + } + }, + "interpreter": { + "hash": "70b38d7a306a849643e446cd70466270a13445e5987dfa1344ef2b127438fa4d" + }, + "coopTranslator": { + "original_hash": "c193140200b9684da27e3890211391b6", + "translation_date": "2025-08-29T23:19:29+00:00", + "source_file": "7-TimeSeries/2-ARIMA/solution/notebook.ipynb", + "language_code": "br" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} \ No newline at end of file diff --git a/translations/pt-BR/7-TimeSeries/2-ARIMA/working/notebook.ipynb b/translations/pt-BR/7-TimeSeries/2-ARIMA/working/notebook.ipynb new file mode 100644 index 000000000..226c96d29 --- /dev/null +++ b/translations/pt-BR/7-TimeSeries/2-ARIMA/working/notebook.ipynb @@ -0,0 +1,59 @@ +{ + "metadata": { + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": 3 + }, + "orig_nbformat": 2, + "coopTranslator": { + "original_hash": "523ec472196307b3c4235337353c9ceb", + "translation_date": "2025-08-29T23:20:24+00:00", + "source_file": "7-TimeSeries/2-ARIMA/working/notebook.ipynb", + "language_code": "br" + } + }, + "nbformat": 4, + "nbformat_minor": 2, + "cells": [ + { + "source": [ + "# Previsão de séries temporais com ARIMA\n", + "\n", + "Neste notebook, demonstramos como:\n", + "- preparar dados de séries temporais para treinar um modelo de previsão de séries temporais ARIMA\n", + "- implementar um modelo ARIMA simples para prever os próximos passos HORIZON à frente (tempo *t+1* até *t+HORIZON*) na série temporal\n", + "- avaliar o modelo\n", + "\n", + "Os dados neste exemplo são retirados da competição de previsão GEFCom2014. Consistem em 3 anos de valores horários de carga elétrica e temperatura entre 2012 e 2014. A tarefa é prever valores futuros da carga elétrica. Neste exemplo, mostramos como prever um passo de tempo à frente, usando apenas dados históricos de carga.\n", + "\n", + "Tao Hong, Pierre Pinson, Shu Fan, Hamidreza Zareipour, Alberto Troccoli e Rob J. Hyndman, \"Probabilistic energy forecasting: Global Energy Forecasting Competition 2014 and beyond\", International Journal of Forecasting, vol.32, no.3, pp 896-913, julho-setembro, 2016.\n" + ], + "cell_type": "markdown", + "metadata": {} + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "pip install statsmodels" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n---\n\n**Aviso Legal**: \nEste documento foi traduzido utilizando o serviço de tradução por IA [Co-op Translator](https://github.com/Azure/co-op-translator). Embora nos esforcemos para garantir a precisão, esteja ciente de que traduções automatizadas podem conter erros ou imprecisões. O documento original em seu idioma nativo deve ser considerado a fonte autoritativa. Para informações críticas, recomenda-se a tradução profissional realizada por humanos. Não nos responsabilizamos por quaisquer mal-entendidos ou interpretações equivocadas decorrentes do uso desta tradução.\n" + ] + } + ] +} \ No newline at end of file diff --git a/translations/pt-BR/7-TimeSeries/3-SVR/README.md b/translations/pt-BR/7-TimeSeries/3-SVR/README.md new file mode 100644 index 000000000..95e614f44 --- /dev/null +++ b/translations/pt-BR/7-TimeSeries/3-SVR/README.md @@ -0,0 +1,384 @@ +# Previsão de Séries Temporais com Support Vector Regressor + +Na lição anterior, você aprendeu como usar o modelo ARIMA para fazer previsões de séries temporais. Agora, você verá o modelo Support Vector Regressor, que é um modelo de regressão usado para prever dados contínuos. + +## [Quiz pré-aula](https://ff-quizzes.netlify.app/en/ml/) + +## Introdução + +Nesta lição, você descobrirá uma maneira específica de construir modelos com [**SVM**: **S**upport **V**ector **M**achine](https://en.wikipedia.org/wiki/Support-vector_machine) para regressão, ou **SVR: Support Vector Regressor**. + +### SVR no contexto de séries temporais [^1] + +Antes de entender a importância do SVR na previsão de séries temporais, aqui estão alguns conceitos importantes que você precisa saber: + +- **Regressão:** Técnica de aprendizado supervisionado para prever valores contínuos a partir de um conjunto de entradas. A ideia é ajustar uma curva (ou linha) no espaço de características que tenha o maior número de pontos de dados. [Clique aqui](https://en.wikipedia.org/wiki/Regression_analysis) para mais informações. +- **Support Vector Machine (SVM):** Um tipo de modelo de aprendizado de máquina supervisionado usado para classificação, regressão e detecção de outliers. O modelo é um hiperplano no espaço de características, que no caso de classificação atua como um limite, e no caso de regressão atua como a linha de melhor ajuste. No SVM, uma função Kernel geralmente é usada para transformar o conjunto de dados em um espaço de maior número de dimensões, para que possam ser facilmente separáveis. [Clique aqui](https://en.wikipedia.org/wiki/Support-vector_machine) para mais informações sobre SVMs. +- **Support Vector Regressor (SVR):** Um tipo de SVM, usado para encontrar a linha de melhor ajuste (que no caso do SVM é um hiperplano) que tenha o maior número de pontos de dados. + +### Por que SVR? [^1] + +Na última lição, você aprendeu sobre o ARIMA, que é um método estatístico linear muito bem-sucedido para prever dados de séries temporais. No entanto, em muitos casos, os dados de séries temporais apresentam *não-linearidade*, que não pode ser mapeada por modelos lineares. Nesses casos, a capacidade do SVM de considerar a não-linearidade nos dados para tarefas de regressão torna o SVR bem-sucedido na previsão de séries temporais. + +## Exercício - construir um modelo SVR + +Os primeiros passos para a preparação dos dados são os mesmos da lição anterior sobre [ARIMA](https://github.com/microsoft/ML-For-Beginners/tree/main/7-TimeSeries/2-ARIMA). + +Abra a pasta [_/working_](https://github.com/microsoft/ML-For-Beginners/tree/main/7-TimeSeries/3-SVR/working) nesta lição e encontre o arquivo [_notebook.ipynb_](https://github.com/microsoft/ML-For-Beginners/blob/main/7-TimeSeries/3-SVR/working/notebook.ipynb). [^2] + +1. Execute o notebook e importe as bibliotecas necessárias: [^2] + + ```python + import sys + sys.path.append('../../') + ``` + + ```python + import os + import warnings + import matplotlib.pyplot as plt + import numpy as np + import pandas as pd + import datetime as dt + import math + + from sklearn.svm import SVR + from sklearn.preprocessing import MinMaxScaler + from common.utils import load_data, mape + ``` + +2. Carregue os dados do arquivo `/data/energy.csv` em um dataframe do Pandas e dê uma olhada: [^2] + + ```python + energy = load_data('../../data')[['load']] + ``` + +3. Plote todos os dados de energia disponíveis de janeiro de 2012 a dezembro de 2014: [^2] + + ```python + energy.plot(y='load', subplots=True, figsize=(15, 8), fontsize=12) + plt.xlabel('timestamp', fontsize=12) + plt.ylabel('load', fontsize=12) + plt.show() + ``` + + ![dados completos](../../../../7-TimeSeries/3-SVR/images/full-data.png) + + Agora, vamos construir nosso modelo SVR. + +### Criar conjuntos de treinamento e teste + +Agora que seus dados estão carregados, você pode separá-los em conjuntos de treinamento e teste. Em seguida, você remodelará os dados para criar um conjunto de dados baseado em etapas de tempo, que será necessário para o SVR. Você treinará seu modelo no conjunto de treinamento. Após o término do treinamento, você avaliará sua precisão no conjunto de treinamento, no conjunto de teste e, em seguida, no conjunto de dados completo para ver o desempenho geral. É necessário garantir que o conjunto de teste cubra um período posterior ao conjunto de treinamento para garantir que o modelo não obtenha informações de períodos futuros [^2] (uma situação conhecida como *Overfitting*). + +1. Alocar um período de dois meses de 1º de setembro a 31 de outubro de 2014 para o conjunto de treinamento. O conjunto de teste incluirá o período de dois meses de 1º de novembro a 31 de dezembro de 2014: [^2] + + ```python + train_start_dt = '2014-11-01 00:00:00' + test_start_dt = '2014-12-30 00:00:00' + ``` + +2. Visualizar as diferenças: [^2] + + ```python + energy[(energy.index < test_start_dt) & (energy.index >= train_start_dt)][['load']].rename(columns={'load':'train'}) \ + .join(energy[test_start_dt:][['load']].rename(columns={'load':'test'}), how='outer') \ + .plot(y=['train', 'test'], figsize=(15, 8), fontsize=12) + plt.xlabel('timestamp', fontsize=12) + plt.ylabel('load', fontsize=12) + plt.show() + ``` + + ![dados de treinamento e teste](../../../../7-TimeSeries/3-SVR/images/train-test.png) + +### Preparar os dados para treinamento + +Agora, você precisa preparar os dados para treinamento, realizando filtragem e escalonamento dos dados. Filtre seu conjunto de dados para incluir apenas os períodos de tempo e colunas necessários, e escale para garantir que os dados sejam projetados no intervalo 0,1. + +1. Filtrar o conjunto de dados original para incluir apenas os períodos de tempo mencionados por conjunto e incluir apenas a coluna necessária 'load' mais a data: [^2] + + ```python + train = energy.copy()[(energy.index >= train_start_dt) & (energy.index < test_start_dt)][['load']] + test = energy.copy()[energy.index >= test_start_dt][['load']] + + print('Training data shape: ', train.shape) + print('Test data shape: ', test.shape) + ``` + + ```output + Training data shape: (1416, 1) + Test data shape: (48, 1) + ``` + +2. Escalar os dados de treinamento para estar no intervalo (0, 1): [^2] + + ```python + scaler = MinMaxScaler() + train['load'] = scaler.fit_transform(train) + ``` + +4. Agora, escale os dados de teste: [^2] + + ```python + test['load'] = scaler.transform(test) + ``` + +### Criar dados com etapas de tempo [^1] + +Para o SVR, você transforma os dados de entrada para o formato `[batch, timesteps]`. Assim, você remodela os `train_data` e `test_data` existentes de forma que haja uma nova dimensão que se refira às etapas de tempo. + +```python +# Converting to numpy arrays +train_data = train.values +test_data = test.values +``` + +Para este exemplo, usamos `timesteps = 5`. Assim, as entradas para o modelo são os dados dos primeiros 4 timesteps, e a saída será os dados do 5º timestep. + +```python +timesteps=5 +``` + +Convertendo os dados de treinamento para tensor 2D usando list comprehension aninhada: + +```python +train_data_timesteps=np.array([[j for j in train_data[i:i+timesteps]] for i in range(0,len(train_data)-timesteps+1)])[:,:,0] +train_data_timesteps.shape +``` + +```output +(1412, 5) +``` + +Convertendo os dados de teste para tensor 2D: + +```python +test_data_timesteps=np.array([[j for j in test_data[i:i+timesteps]] for i in range(0,len(test_data)-timesteps+1)])[:,:,0] +test_data_timesteps.shape +``` + +```output +(44, 5) +``` + +Selecionando entradas e saídas dos dados de treinamento e teste: + +```python +x_train, y_train = train_data_timesteps[:,:timesteps-1],train_data_timesteps[:,[timesteps-1]] +x_test, y_test = test_data_timesteps[:,:timesteps-1],test_data_timesteps[:,[timesteps-1]] + +print(x_train.shape, y_train.shape) +print(x_test.shape, y_test.shape) +``` + +```output +(1412, 4) (1412, 1) +(44, 4) (44, 1) +``` + +### Implementar SVR [^1] + +Agora, é hora de implementar o SVR. Para ler mais sobre esta implementação, você pode consultar [esta documentação](https://scikit-learn.org/stable/modules/generated/sklearn.svm.SVR.html). Para nossa implementação, seguimos estas etapas: + +1. Definir o modelo chamando `SVR()` e passando os hiperparâmetros do modelo: kernel, gamma, c e epsilon +2. Preparar o modelo para os dados de treinamento chamando a função `fit()` +3. Fazer previsões chamando a função `predict()` + +Agora criamos um modelo SVR. Aqui usamos o [kernel RBF](https://scikit-learn.org/stable/modules/svm.html#parameters-of-the-rbf-kernel) e definimos os hiperparâmetros gamma, C e epsilon como 0.5, 10 e 0.05, respectivamente. + +```python +model = SVR(kernel='rbf',gamma=0.5, C=10, epsilon = 0.05) +``` + +#### Ajustar o modelo nos dados de treinamento [^1] + +```python +model.fit(x_train, y_train[:,0]) +``` + +```output +SVR(C=10, cache_size=200, coef0=0.0, degree=3, epsilon=0.05, gamma=0.5, + kernel='rbf', max_iter=-1, shrinking=True, tol=0.001, verbose=False) +``` + +#### Fazer previsões com o modelo [^1] + +```python +y_train_pred = model.predict(x_train).reshape(-1,1) +y_test_pred = model.predict(x_test).reshape(-1,1) + +print(y_train_pred.shape, y_test_pred.shape) +``` + +```output +(1412, 1) (44, 1) +``` + +Você construiu seu SVR! Agora precisamos avaliá-lo. + +### Avaliar seu modelo [^1] + +Para avaliação, primeiro escalaremos os dados de volta para nossa escala original. Em seguida, para verificar o desempenho, plotaremos o gráfico de séries temporais original e previsto, e também imprimiremos o resultado do MAPE. + +Escalar a saída prevista e original: + +```python +# Scaling the predictions +y_train_pred = scaler.inverse_transform(y_train_pred) +y_test_pred = scaler.inverse_transform(y_test_pred) + +print(len(y_train_pred), len(y_test_pred)) +``` + +```python +# Scaling the original values +y_train = scaler.inverse_transform(y_train) +y_test = scaler.inverse_transform(y_test) + +print(len(y_train), len(y_test)) +``` + +#### Verificar desempenho do modelo nos dados de treinamento e teste [^1] + +Extraímos os timestamps do conjunto de dados para mostrar no eixo x do nosso gráfico. Note que estamos usando os primeiros ```timesteps-1``` valores como entrada para a primeira saída, então os timestamps para a saída começarão depois disso. + +```python +train_timestamps = energy[(energy.index < test_start_dt) & (energy.index >= train_start_dt)].index[timesteps-1:] +test_timestamps = energy[test_start_dt:].index[timesteps-1:] + +print(len(train_timestamps), len(test_timestamps)) +``` + +```output +1412 44 +``` + +Plotar as previsões para os dados de treinamento: + +```python +plt.figure(figsize=(25,6)) +plt.plot(train_timestamps, y_train, color = 'red', linewidth=2.0, alpha = 0.6) +plt.plot(train_timestamps, y_train_pred, color = 'blue', linewidth=0.8) +plt.legend(['Actual','Predicted']) +plt.xlabel('Timestamp') +plt.title("Training data prediction") +plt.show() +``` + +![previsão dos dados de treinamento](../../../../7-TimeSeries/3-SVR/images/train-data-predict.png) + +Imprimir MAPE para os dados de treinamento + +```python +print('MAPE for training data: ', mape(y_train_pred, y_train)*100, '%') +``` + +```output +MAPE for training data: 1.7195710200875551 % +``` + +Plotar as previsões para os dados de teste + +```python +plt.figure(figsize=(10,3)) +plt.plot(test_timestamps, y_test, color = 'red', linewidth=2.0, alpha = 0.6) +plt.plot(test_timestamps, y_test_pred, color = 'blue', linewidth=0.8) +plt.legend(['Actual','Predicted']) +plt.xlabel('Timestamp') +plt.show() +``` + +![previsão dos dados de teste](../../../../7-TimeSeries/3-SVR/images/test-data-predict.png) + +Imprimir MAPE para os dados de teste + +```python +print('MAPE for testing data: ', mape(y_test_pred, y_test)*100, '%') +``` + +```output +MAPE for testing data: 1.2623790187854018 % +``` + +🏆 Você obteve um resultado muito bom no conjunto de dados de teste! + +### Verificar desempenho do modelo no conjunto de dados completo [^1] + +```python +# Extracting load values as numpy array +data = energy.copy().values + +# Scaling +data = scaler.transform(data) + +# Transforming to 2D tensor as per model input requirement +data_timesteps=np.array([[j for j in data[i:i+timesteps]] for i in range(0,len(data)-timesteps+1)])[:,:,0] +print("Tensor shape: ", data_timesteps.shape) + +# Selecting inputs and outputs from data +X, Y = data_timesteps[:,:timesteps-1],data_timesteps[:,[timesteps-1]] +print("X shape: ", X.shape,"\nY shape: ", Y.shape) +``` + +```output +Tensor shape: (26300, 5) +X shape: (26300, 4) +Y shape: (26300, 1) +``` + +```python +# Make model predictions +Y_pred = model.predict(X).reshape(-1,1) + +# Inverse scale and reshape +Y_pred = scaler.inverse_transform(Y_pred) +Y = scaler.inverse_transform(Y) +``` + +```python +plt.figure(figsize=(30,8)) +plt.plot(Y, color = 'red', linewidth=2.0, alpha = 0.6) +plt.plot(Y_pred, color = 'blue', linewidth=0.8) +plt.legend(['Actual','Predicted']) +plt.xlabel('Timestamp') +plt.show() +``` + +![previsão dos dados completos](../../../../7-TimeSeries/3-SVR/images/full-data-predict.png) + +```python +print('MAPE: ', mape(Y_pred, Y)*100, '%') +``` + +```output +MAPE: 2.0572089029888656 % +``` + +🏆 Gráficos muito bons, mostrando um modelo com boa precisão. Parabéns! + +--- + +## 🚀Desafio + +- Tente ajustar os hiperparâmetros (gamma, C, epsilon) ao criar o modelo e avalie os dados para ver qual conjunto de hiperparâmetros oferece os melhores resultados nos dados de teste. Para saber mais sobre esses hiperparâmetros, você pode consultar o documento [aqui](https://scikit-learn.org/stable/modules/svm.html#parameters-of-the-rbf-kernel). +- Tente usar diferentes funções kernel para o modelo e analise seus desempenhos no conjunto de dados. Um documento útil pode ser encontrado [aqui](https://scikit-learn.org/stable/modules/svm.html#kernel-functions). +- Tente usar diferentes valores para `timesteps` para que o modelo olhe para trás e faça previsões. + +## [Quiz pós-aula](https://ff-quizzes.netlify.app/en/ml/) + +## Revisão & Autoestudo + +Esta lição foi para introduzir a aplicação do SVR na previsão de séries temporais. Para ler mais sobre SVR, você pode consultar [este blog](https://www.analyticsvidhya.com/blog/2020/03/support-vector-regression-tutorial-for-machine-learning/). Esta [documentação sobre scikit-learn](https://scikit-learn.org/stable/modules/svm.html) fornece uma explicação mais abrangente sobre SVMs em geral, [SVRs](https://scikit-learn.org/stable/modules/svm.html#regression) e também outros detalhes de implementação, como as diferentes [funções kernel](https://scikit-learn.org/stable/modules/svm.html#kernel-functions) que podem ser usadas e seus parâmetros. + +## Tarefa + +[Um novo modelo SVR](assignment.md) + +## Créditos + +[^1]: O texto, código e saída nesta seção foram contribuídos por [@AnirbanMukherjeeXD](https://github.com/AnirbanMukherjeeXD) +[^2]: O texto, código e saída nesta seção foram retirados de [ARIMA](https://github.com/microsoft/ML-For-Beginners/tree/main/7-TimeSeries/2-ARIMA) + +--- + +**Aviso Legal**: +Este documento foi traduzido utilizando o serviço de tradução por IA [Co-op Translator](https://github.com/Azure/co-op-translator). Embora nos esforcemos para garantir a precisão, esteja ciente de que traduções automatizadas podem conter erros ou imprecisões. O documento original em seu idioma nativo deve ser considerado a fonte autoritativa. Para informações críticas, recomenda-se a tradução profissional realizada por humanos. Não nos responsabilizamos por quaisquer mal-entendidos ou interpretações equivocadas decorrentes do uso desta tradução. \ No newline at end of file diff --git a/translations/pt-BR/7-TimeSeries/3-SVR/assignment.md b/translations/pt-BR/7-TimeSeries/3-SVR/assignment.md new file mode 100644 index 000000000..2bc085b7f --- /dev/null +++ b/translations/pt-BR/7-TimeSeries/3-SVR/assignment.md @@ -0,0 +1,18 @@ +# Um novo modelo SVR + +## Instruções [^1] + +Agora que você construiu um modelo SVR, crie um novo com dados frescos (experimente um dos [conjuntos de dados da Duke](http://www2.stat.duke.edu/~mw/ts_data_sets.html)). Anote seu trabalho em um notebook, visualize os dados e seu modelo, e teste sua precisão usando gráficos apropriados e MAPE. Além disso, experimente ajustar os diferentes hiperparâmetros e usar valores diferentes para os timesteps. + +## Rubrica [^1] + +| Critérios | Exemplares | Adequado | Precisa de Melhorias | +| --------- | ----------------------------------------------------------- | --------------------------------------------------------- | ----------------------------------- | +| | Um notebook é apresentado com um modelo SVR construído, testado e explicado com visualizações e precisão declarada. | O notebook apresentado não está anotado ou contém erros. | Um notebook incompleto é apresentado | + +[^1]: O texto nesta seção foi baseado na [tarefa de ARIMA](https://github.com/microsoft/ML-For-Beginners/tree/main/7-TimeSeries/2-ARIMA/assignment.md) + +--- + +**Aviso Legal**: +Este documento foi traduzido utilizando o serviço de tradução por IA [Co-op Translator](https://github.com/Azure/co-op-translator). Embora nos esforcemos para garantir a precisão, esteja ciente de que traduções automáticas podem conter erros ou imprecisões. O documento original em seu idioma nativo deve ser considerado a fonte oficial. Para informações críticas, recomenda-se a tradução profissional realizada por humanos. Não nos responsabilizamos por quaisquer mal-entendidos ou interpretações incorretas decorrentes do uso desta tradução. \ No newline at end of file diff --git a/translations/pt-BR/7-TimeSeries/3-SVR/solution/notebook.ipynb b/translations/pt-BR/7-TimeSeries/3-SVR/solution/notebook.ipynb new file mode 100644 index 000000000..889fb54a3 --- /dev/null +++ b/translations/pt-BR/7-TimeSeries/3-SVR/solution/notebook.ipynb @@ -0,0 +1,1019 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": { + "id": "fv9OoQsMFk5A" + }, + "source": [] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Neste notebook, demonstramos como:\n", + "\n", + "- preparar dados de séries temporais 2D para treinar um modelo de regressão SVM \n", + "- implementar SVR utilizando o kernel RBF \n", + "- avaliar o modelo usando gráficos e MAPE \n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Importando módulos\n" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "import sys\n", + "sys.path.append('../../')" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "id": "M687KNlQFp0-" + }, + "outputs": [], + "source": [ + "import os\n", + "import warnings\n", + "import matplotlib.pyplot as plt\n", + "import numpy as np\n", + "import pandas as pd\n", + "import datetime as dt\n", + "import math\n", + "\n", + "from sklearn.svm import SVR\n", + "from sklearn.preprocessing import MinMaxScaler\n", + "from common.utils import load_data, mape" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "Cj-kfVdMGjWP" + }, + "source": [] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "8fywSjC6GsRz" + }, + "source": [ + "### Carregar dados\n" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 363 + }, + "id": "aBDkEB11Fumg", + "outputId": "99cf7987-0509-4b73-8cc2-75d7da0d2740" + }, + "outputs": [ + { + "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", + "
load
2012-01-01 00:00:002698.0
2012-01-01 01:00:002558.0
2012-01-01 02:00:002444.0
2012-01-01 03:00:002402.0
2012-01-01 04:00:002403.0
\n", + "
" + ], + "text/plain": [ + " load\n", + "2012-01-01 00:00:00 2698.0\n", + "2012-01-01 01:00:00 2558.0\n", + "2012-01-01 02:00:00 2444.0\n", + "2012-01-01 03:00:00 2402.0\n", + "2012-01-01 04:00:00 2403.0" + ] + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "energy = load_data('../../data')[['load']]\n", + "energy.head(5)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "O0BWP13rGnh4" + }, + "source": [] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 486 + }, + "id": "hGaNPKu_Gidk", + "outputId": "7f89b326-9057-4f49-efbe-cb100ebdf76d" + }, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAA4kAAAH1CAYAAABbUbvGAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjQuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/MnkTPAAAACXBIWXMAAAsTAAALEwEAmpwYAAC4S0lEQVR4nOzdd7wU1d0G8OfcQu9dQUA6goI0RQXFimL3jb3FrjHRmNg19hJrYo29d8WKFQQFC0WlSu8gvVzqBe695/1jd/bOzk7vs/t88/GTy+7M7NnZmTOn/o6QUoKIiIiIiIgIAIqiTgARERERERHFByuJRERERERElMFKIhEREREREWWwkkhEREREREQZrCQSERERERFRBiuJRERERERElFESdQKi0KxZM9m+ffuok0FERERERBSJX375Za2UsrneewVZSWzfvj0mTZoUdTKIiIiIiIgiIYRYbPQeh5sSERERERFRBiuJRERERERElMFKIhEREREREWUU5JxEIiIiIiIiANi1axeWLVuG8vLyqJMSiFq1aqFNmzYoLS21vQ8riUREREREVLCWLVuG+vXro3379hBCRJ0cX0kpsW7dOixbtgx77rmn7f043JSIiIiIiApWeXk5mjZtmncVRAAQQqBp06aOe0lZSSQiIiIiooKWjxVEhZvvxkoiERERERFRhOrVq+fLcW6//XY89NBDno/DSiIRERERERFlsJJIREREREQUA1JKXHvttejZsyf23ntvvPPOOwCALVu24LDDDkOfPn2w99574+OPP87sc88996BLly446KCDMHv2bF/SweimREREREREAO74dAZ+/2OTr8fca/cGuO24Hra2HT58OCZPnowpU6Zg7dq16N+/PwYPHozmzZvjww8/RIMGDbB27Vrsv//+OP744/Hrr7/i7bffxuTJk1FRUYE+ffqgb9++ntPMnkQiIiIiIqIYGDduHM444wwUFxejZcuWOPjggzFx4kRIKXHTTTdhn332weGHH47ly5dj1apVGDt2LE466STUqVMHDRo0wPHHH+9LOtiTSEREREREBNju8QvbG2+8gTVr1uCXX35BaWkp2rdv73hZCyfYk0hERERERBQDgwYNwjvvvIPKykqsWbMG33//PQYMGICysjK0aNECpaWlGD16NBYvXgwAGDx4MD766CNs374dmzdvxqeffupLOtiT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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "energy.plot(y='load', subplots=True, figsize=(15, 8), fontsize=12)\n", + "plt.xlabel('timestamp', fontsize=12)\n", + "plt.ylabel('load', fontsize=12)\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "IPuNor4eGwYY" + }, + "source": [] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": { + "id": "ysvsNyONGt0Q" + }, + "outputs": [], + "source": [ + "train_start_dt = '2014-11-01 00:00:00'\n", + "test_start_dt = '2014-12-30 00:00:00'" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 548 + }, + "id": "SsfdLoPyGy9w", + "outputId": "d6d6c25b-b1f4-47e5-91d1-707e043237d7" + }, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAA4kAAAITCAYAAACqpFnEAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjQuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/MnkTPAAAACXBIWXMAAAsTAAALEwEAmpwYAAEAAElEQVR4nOz9d7gkyVUmjL+RmVV1bdvpHitpRiOLJCQhCdCHkxAsEny4FQiz2mXNhzD74yfWsAgjFrMLfBghBAtIeCuMkLBCFllkRjNyYzTe9vS073v7+qrKjO+PyBMZmRURGSdv3+rb3fE+Tz/3dt2Kyqw0kXHO+573CCklIiIiIiIiIiIiIiIiIiIAILnQOxARERERERERERERERGxexCDxIiIiIiIiIiIiIiIiAiNGCRGREREREREREREREREaMQgMSIiIiIiIiIiIiIiIkIjBokRERERERERERERERERGjFIjIiIiIiIiIiIiIiIiNDILvQOXAhcccUV8vrrr7/QuxEREREREREREREREXFBcMstt5ySUh6y/e2yDBKvv/563HzzzRd6NyIiIiIiIiIiIiIiIi4IhBAPuf4W5aYRERERERERERERERERGjFIjIiIiIiIiIiIiIiIiNCIQWJERERERERERERERESExmVZkxgRERERERERERERcXljNBrhyJEj2NzcvNC7sqOYmZnBddddh16vFzwmBokREREREREREREREZcdjhw5gsXFRVx//fUQQlzo3dkRSClx+vRpHDlyBDfccEPwuCg3jYiIiIiIiIiIiIi47LC5uYmDBw9esgEiAAghcPDgQTZbGoPEiIiIiIiIiIiIiIjLEpdygEjo8h1jkBgRERERERERERERETFlLC0t4Td+4zfY4772a78WS0tL53+HDMQgMSIiIiIiIiIiIiIiYspwBYnj8dg77u1vfzv27du3Q3ulEI1rIiIiIiIiIiIiIiIipozXvOY1uO+++/Cc5zwHvV4PMzMz2L9/P+68807cfffd+KZv+iY88sgj2NzcxKtf/Wq86lWvAgBcf/31uPnmm7G6uoqXvexl+NIv/VJ85CMfwbXXXou//du/xezs7Lb3LQaJERERERERERERERGXNX7q72/HHUfPndfP/Lxr9uB/fv0znH//+Z//edx222349Kc/jfe///34uq/7Otx2223ahfT3fu/3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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "energy[(energy.index < test_start_dt) & (energy.index >= train_start_dt)][['load']].rename(columns={'load':'train'}) \\\n", + " .join(energy[test_start_dt:][['load']].rename(columns={'load':'test'}), how='outer') \\\n", + " .plot(y=['train', 'test'], figsize=(15, 8), fontsize=12)\n", + "plt.xlabel('timestamp', fontsize=12)\n", + "plt.ylabel('load', fontsize=12)\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "XbFTqBw6G1Ch" + }, + "source": [] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Agora, você precisa preparar os dados para treinamento realizando a filtragem e o escalonamento dos seus dados.\n" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "cYivRdQpHDj3", + "outputId": "a138f746-461c-4fd6-bfa6-0cee094c4aa1" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Training data shape: (1416, 1)\n", + "Test data shape: (48, 1)\n" + ] + } + ], + "source": [ + "train = energy.copy()[(energy.index >= train_start_dt) & (energy.index < test_start_dt)][['load']]\n", + "test = energy.copy()[energy.index >= test_start_dt][['load']]\n", + "\n", + "print('Training data shape: ', train.shape)\n", + "print('Test data shape: ', test.shape)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Escale os dados para estarem no intervalo (0, 1).\n" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 363 + }, + "id": "3DNntGQnZX8G", + "outputId": "210046bc-7a66-4ccd-d70d-aa4a7309949c" + }, + "outputs": [ + { + "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", + "
load
2014-11-01 00:00:000.101611
2014-11-01 01:00:000.065801
2014-11-01 02:00:000.046106
2014-11-01 03:00:000.042525
2014-11-01 04:00:000.059087
\n", + "
" + ], + "text/plain": [ + " load\n", + "2014-11-01 00:00:00 0.101611\n", + "2014-11-01 01:00:00 0.065801\n", + "2014-11-01 02:00:00 0.046106\n", + "2014-11-01 03:00:00 0.042525\n", + "2014-11-01 04:00:00 0.059087" + ] + }, + "execution_count": 8, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "scaler = MinMaxScaler()\n", + "train['load'] = scaler.fit_transform(train)\n", + "train.head(5)" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 206 + }, + "id": "26Yht-rzZexe", + "outputId": "20326077-a38a-4e78-cc5b-6fd7af95d301" + }, + "outputs": [ + { + "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", + "
load
2014-12-30 00:00:000.329454
2014-12-30 01:00:000.290063
2014-12-30 02:00:000.273948
2014-12-30 03:00:000.268129
2014-12-30 04:00:000.302596
\n", + "
" + ], + "text/plain": [ + " load\n", + "2014-12-30 00:00:00 0.329454\n", + "2014-12-30 01:00:00 0.290063\n", + "2014-12-30 02:00:00 0.273948\n", + "2014-12-30 03:00:00 0.268129\n", + "2014-12-30 04:00:00 0.302596" + ] + }, + "execution_count": 9, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "test['load'] = scaler.transform(test)\n", + "test.head(5)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "x0n6jqxOQ41Z" + }, + "source": [] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "fdmxTZtOQ8xs" + }, + "source": [ + "Para o nosso SVR, transformamos os dados de entrada para o formato `[batch, timesteps]`. Assim, remodelamos os `train_data` e `test_data` existentes de forma que haja uma nova dimensão que se refira aos timesteps. Para o nosso exemplo, consideramos `timesteps = 5`. Assim, as entradas para o modelo são os dados dos primeiros 4 timesteps, e a saída será os dados do 5º timestep.\n" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": { + "id": "Rpju-Sc2HFm0" + }, + "outputs": [], + "source": [ + "# Converting to numpy arrays\n", + "\n", + "train_data = train.values\n", + "test_data = test.values" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [], + "source": [ + "# Selecting the timesteps\n", + "\n", + "timesteps=5" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "O-JrsrsVJhUQ", + "outputId": "c90dbe71-bacc-4ec4-b452-f82fe5aefaef" + }, + "outputs": [ + { + "data": { + "text/plain": [ + "(1412, 5)" + ] + }, + "execution_count": 12, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Converting data to 2D tensor\n", + "\n", + "train_data_timesteps=np.array([[j for j in train_data[i:i+timesteps]] for i in range(0,len(train_data)-timesteps+1)])[:,:,0]\n", + "train_data_timesteps.shape" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "exJD8AI7KE4g", + "outputId": "ce90260c-f327-427d-80f2-77307b5a6318" + }, + "outputs": [ + { + "data": { + "text/plain": [ + "(44, 5)" + ] + }, + "execution_count": 13, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Converting test data to 2D tensor\n", + "\n", + "test_data_timesteps=np.array([[j for j in test_data[i:i+timesteps]] for i in range(0,len(test_data)-timesteps+1)])[:,:,0]\n", + "test_data_timesteps.shape" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": { + "id": "2u0R2sIsLuq5" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "(1412, 4) (1412, 1)\n", + "(44, 4) (44, 1)\n" + ] + } + ], + "source": [ + "x_train, y_train = train_data_timesteps[:,:timesteps-1],train_data_timesteps[:,[timesteps-1]]\n", + "x_test, y_test = test_data_timesteps[:,:timesteps-1],test_data_timesteps[:,[timesteps-1]]\n", + "\n", + "print(x_train.shape, y_train.shape)\n", + "print(x_test.shape, y_test.shape)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "8wIPOtAGLZlh" + }, + "source": [] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": { + "id": "EhA403BEPEiD" + }, + "outputs": [], + "source": [ + "# Create model using RBF kernel\n", + "\n", + "model = SVR(kernel='rbf',gamma=0.5, C=10, epsilon = 0.05)" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "GS0UA3csMbqp", + "outputId": "d86b6f05-5742-4c1d-c2db-c40510bd4f0d" + }, + "outputs": [ + { + "data": { + "text/plain": [ + "SVR(C=10, cache_size=200, coef0=0.0, degree=3, epsilon=0.05, gamma=0.5,\n", + " kernel='rbf', max_iter=-1, shrinking=True, tol=0.001, verbose=False)" + ] + }, + "execution_count": 16, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Fit model on training data\n", + "\n", + "model.fit(x_train, y_train[:,0])" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "Rz_x8S3UrlcF" + }, + "source": [ + "### Fazer previsão do modelo\n" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "XR0gnt3MnuYS", + "outputId": "157e40ab-9a23-4b66-a885-0d52a24b2364" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "(1412, 1) (44, 1)\n" + ] + } + ], + "source": [ + "# Making predictions\n", + "\n", + "y_train_pred = model.predict(x_train).reshape(-1,1)\n", + "y_test_pred = model.predict(x_test).reshape(-1,1)\n", + "\n", + "print(y_train_pred.shape, y_test_pred.shape)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "_2epncg-SGzr" + }, + "source": [] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "1412 44\n" + ] + } + ], + "source": [ + "# Scaling the predictions\n", + "\n", + "y_train_pred = scaler.inverse_transform(y_train_pred)\n", + "y_test_pred = scaler.inverse_transform(y_test_pred)\n", + "\n", + "print(len(y_train_pred), len(y_test_pred))" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "xmm_YLXhq7gV", + "outputId": "18392f64-4029-49ac-c71a-a4e2411152a1" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "1412 44\n" + ] + } + ], + "source": [ + "# Scaling the original values\n", + "\n", + "y_train = scaler.inverse_transform(y_train)\n", + "y_test = scaler.inverse_transform(y_test)\n", + "\n", + "print(len(y_train), len(y_test))" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "u3LBj93coHEi", + "outputId": "d4fd49e8-8c6e-4bb0-8ef9-ca0b26d725b4" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "1412 44\n" + ] + } + ], + "source": [ + "# Extract the timesteps for x-axis\n", + "\n", + "train_timestamps = energy[(energy.index < test_start_dt) & (energy.index >= train_start_dt)].index[timesteps-1:]\n", + "test_timestamps = energy[test_start_dt:].index[timesteps-1:]\n", + "\n", + "print(len(train_timestamps), len(test_timestamps))" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAABasAAAGDCAYAAAAlN0y0AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjQuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/MnkTPAAAACXBIWXMAAAsTAAALEwEAmpwYAAEAAElEQVR4nOy9eZxtV13m/aw9n7GmOyY3E4QhITIHERkUacjbIrZt+wrd7dCKgratre3Urd2grSD42ohoMwiKAxAwKCAaDGMSEkJIIGRO7s2dx5rrjHtYe6/3j7X2ObvqVtU5dc+vbt3K/X0/n3xy65xTq/Y5Z++113rWs56fUEqBYRiGYRiGYRiGYRiGYRiGYbYSa6sPgGEYhmEYhmEYhmEYhmEYhmFYrGYYhmEYhmEYhmEYhmEYhmG2HBarGYZhGIZhGIZhGIZhGIZhmC2HxWqGYRiGYRiGYRiGYRiGYRhmy2GxmmEYhmEYhmEYhmEYhmEYhtlyWKxmGIZhGIZhGIZhGIZhGIZhthwWqxmGYRiGYZgLGiHEzUKIn6B+7agIIZQQ4urz8bc2m+J7EUK8TwjxP8+xnZYQ4im0R8cwDMMwDMNcLAil1FYfA8MwDMMwDPMkQwjRKvxYBhABSM3Pb1JKfeT8HxUtQggF4GlKqQMDXnclgEMAXKWUPB/HtlGGfS8rfucrAP5WKfXBTTswhmEYhmEY5qLC2eoDYBiGYRiGYZ58KKWq+b+FEIcBvFEp9YWVrxNCOBeqgLtd4c+UYRiGYRiG2a5wDAjDMAzDMAxz3hBCfI8Q4rgQ4jeEEKcB/KUQYkII8VkhxIwQYsH8e1/hd74ihHij+fdPCiG+KoT4/8xrDwkh/p9zfO1VQojbhBBNIcQXhBB/JoT423WO/deEEKeEECeFED+14rnvF0J8SwjREEIcE0K8tfD0beb/iyYm47uEEE8VQnxJCDEnhJgVQnxECDG+zt9WQohfFEIcNK//QyGEVXifdwgh3iWEmAPwViGEb973USHEGRPtURryvXxYCPF7hZ9/UAhxn3lvTwghbhBC/D6AlwH4U/Oe/rRwnHmcyJgQ4q/N93pECPHbK455ze+GYRiGYRiGuThhsZphGIZhGIY53+wBMAngCgA/Cz0m/Uvz8+UAugD+dJ3f/04AjwHYAeCdAD4khBDn8NqPArgbwBSAtwL4sbX+oBDiBgC/CuBfAXgagFeteEkbwI8DGAfw/QB+Tgjxb8xzLzf/H1dKVZVSXwMgALwdwCUArgFwmTmG9fghAC8E8HwAPwigKDJ/J4CDAHYD+H0AfwDg6QCeC+BqAJcC+F9Dvpfi+34RgL8G8Gvmvb0cwGGl1G8BuB3AL5j39Aur/Pp7AIwBeAqAV0B/Pv9pxTEP+z0yDMMwDMMwFwEsVjMMwzAMwzDnmwzAW5RSkVKqq5SaU0p9UinVUUo1ocXWV6zz+0eUUn+ulEoB/BWAvdAi7dCvFUJcDuB6AP9LKRUrpb4K4DPr/M3/F8BfKqUeVEq1sUJYVkp9RSn1gFIqU0rdD+Bj670HpdQBpdTnzWcwA+D/DHjPAPAOpdS8UuoogD8G8IbCcyeVUu8x8R8h9CLAL5vXNwG8DcDrh3kvK/hpAH9hjjVTSp1QSj064DghhLDN3/vvSqmmUuowgD/C8gWBjXyPDMMwDMMwzEUAZ1YzDMMwDMMw55sZpVSY/yCEKAN4F4AbAEyYh2tCCNsImSs5nf9DKdUxZtzqKq9b77U7AMwrpTqF1x6DdjivxiUA7i38fKT4pBDiO6HdzNcB8AD4AP5ujbYghNgN4N3QURo1aBPJwlqvLxxf8e9fssZzO6GLWt5bMCoLAPYw72UFlwH45wHHtRo7ALgr2j4C7fDO2cj3yDAMwzAMw1wEsLOaYRiGYRiGOd+oFT//NwDPAPCdSqk6+rEZmxkJcQrApBHKc9YSqvPXF5+/fMXzH4V2Zl+mlBoD8D70j3/l+wW001kB+A7znv8jBr/flX//ZOHn4t+YhY5SeZZSatz8N1YoejnovRQ5BuCpazy32vsqHkMCHe1S/Dsn1vkdhmEYhmEY5iKHxWqGYRiGYRhmq6lBi6uLQohJAG/Z7D+olDoC4B7oYoSeEOK7APzAOr/yCQA/KYS41gjcK4+xBu3UDk3O878vPDcDHX3ylBWvbwFYEkJcCp0JPYhfM8UoLwPwSwA+vsZ7ywD8OYB3CSF2AYAQ4lIhxGuGfC9FPgTgPwkhvk8IYZl2nmmeO7PiPRWPITV/5/eFEDUhxBUAfgXAmgUsGYZhGIZhGIbFaoZhGIZhGGar+WMAJWg37l0APnee/u5/APBdAOYA/B60+But9kKl1M3Qx/klAAfM/4v8PIDfFUI0oQsZfqLwux3oHO47hBCLQogXA/gd6EKJSwD+CcDfD3G8n4aO77jP/M6H1nntb5jjvEsI0QDwBWj3+jDvpYdS6m7ooojvMsd6K/pu6XcD+HdCiAUhxJ+s8uv/Bbrw5EEAX4V2n//F4LfJMAzDMAzDXKwIpdbbvccwDMMwDMMwFwdCiI8DeFQptenO7o0ihFAAnqaUOrDVx8IwDMMwDMMwmwU7qxmGYRiGYZiLEiHE9UKIp5p4ixsA/CCAT23xYTEMwzAMwzDMRYuz1QfAMAzDMAzDMFvEHuj4jSkAxwH8nFLqW1t7SAzDMAzDMAxz8cIxIAzDMAzDMAzDMAzDMAzDMMyWwzEgDMMwDMMwDMMwDMMwDMMwzJbDYjXDMAzDMAzDMAzDMAzDMAyz5VzQmdU7duxQV1555VYfBsMwDMMwDMMwDMMwDMMwDLMO995776xSaucobVzQYvWVV16Je+65Z6sPg2EYhmEYhmEYhmEYhmEYhlkHIcSRUdvgGBCGYRiGYRiGYRiGYRiGYRhmy2GxmmEYhmEYhmEYhmEYhmEYhtlyWKxmGIZhGIZhGIZhGIZhGIZhtpwLOrN6NZIkwfHjxxGG4VYfyrYmCALs27cPrutu9aEwDMMwDMMwDMMwDMMwDMNsP7H6+PHjqNVquPLKKyGE2OrD2ZYopTA3N4fjx4/jqquu2urDYRiGYRiGYRiGYRiGYRiG2X4xIGEYYmpqioXqERBCYGpqit3pDMMwDMMwDMMwDMMwDMNcMGw7sRoAC9UE8GfIMAzDMAzDMAzDMAzDMMyFxLYUqy8UPvWpT0EIgUcffXTd1/3xH/8xOp3OOf+dD3/4w/iFX/iFc/59hmEYhmEYhmEYhmEYhmGYCx0Wq0fgYx/7GF760pfiYx/72LqvG1WsZhiGYRiGYRiGYRiGYRiGebLDYvU50mq18NWvfhUf+tCHcOONNwIA0jTFr/7qr+K6667Ds5/9bLznPe/Bn/zJn+DkyZP43u/9Xnzv934vAKBarfbauemmm/CTP/mTAIB//Md/xHd+53fiec97Hl71qlfhzJkz5/19MQzDMAzDMAzDMAzDMAzDbAXOVh/ASLzpTZvT7vvfP/Aln/70p3HDDTfg6U9/OqampnDvvffi7rvvxuHDh3HffffBcRzMz89jcnIS/+f//B98+ctfxo4dO9Zt86UvfSnuuusuCCHwwQ9+EO985zvxR3/0R1TvimEYhmEYhmEYhmEYhmEY5oJle4vVW8jHPvYx/NIv/RIA4PWvfz0+9rGP4dChQ3jzm98Mx9Ef6+Tk5IbaPH78OH70R38Up06dQhzHuOqqq8iPm2EYhmEYhmEY5pyQErj9duA7vgMYYMRhGIZhGIY5F4YWq4UQNoB7AJxQSr1WCPFhAK8AsGRe8pNKqfuEEALAuwH8awAd8/g3TRs/AeC3zet/Tyn1VyMd/RAO6M1gfn4eX/rSl/DAAw9ACIE0TSGEwPXXXz/U7+uPSBOGYe/f/+W//Bf8yq/8Cl73utfhK1/5Ct761rdSHzrDMAzDMAzDMMy5cfvtwI03Ap/8JPCnf7rVR8MwDMMwzJOQjWRW/xKAR1Y89mtKqeea/+4zj/0/AJ5m/vtZAO8FACHEJIC3APhOAC8C8BYhxMQIx75l3HTTTfixH/sxHDlyBIcPH8axY8dw1VVX4TnPeQ7e//73Q0oJQIvaAFCr1dBsNnu/v3v3bjzyyCPIsgz/8A//0Ht8aWkJl156KQDgr/5qNB2fYRiGYRiGYRiGlNOn9f+TZGuPg2EYhmGYJy1DidVCiH0Avh/AB4d4+Q8C+GuluQvAuBBiL4DXAPi8UmpeKbUA4PMAbjjH495SPvaxj+GHfuiHlj32wz/8wzh16hQuv/xyPPvZz8ZznvMcfPSjHwUA/OzP/ixuuOGGXoHFP/iDP8BrX/tavOQlL8HevXt7bbz1rW/Fj/zIj+AFL3jBwHxrhmEYhmEYhmGY88rYWP/fWbZ1x8EwDMMwzJMWoZQa/CIhbgLwdgA1AL9aiAH5LgARgC8C+E2lVCSE+CyAP1BKfdX87hcB/AaA7wEQKKV+zzz+PwF0lVL/34q/9bPQjmxcfvnlLzhy5MiyY3nkkUdwzTXXnPMbZvrwZ8kwDMMwDMMwzNDcfDMe//CdeNrYNMTbfp9zqxmGYRiGWYYQ4l6l1AtHaWOgs1oI8VoA00qpe1c89d8BPBPA9QAmoQXpkVFKfUAp9UKl1At37txJ0STDMAzDMAzDMAwzKlGEN93+H/FEYydw5sxWHw3DMAzDME9ChokB+W4ArxNCHAZwI4BXCiH+Vil1ykR9RAD+EjqHGgBOALis8Pv7zGNrPc4wDMMwDMMwDMNc6EQR4szGA/OXsljNMAzDMMymMFCsVkr9d6XUPqXUlQBeD+BLSqn/aHKoIYQQAP4NgAfNr3wGwI8LzYsBLCmlTgH4FwCvFkJMmMKKrzaPMQzDMAzDMAzDMBc6UYQkF6tnZ7f6aBiGYRiGeRLijPC7HxFC7AQgANwH4M3m8X8G8K8BHADQAfCfAEApNS+E+N8AvmFe97tKqfkR/j7DMAzDMAzDMAxzvohjJJmN++cvBToPbPXRMAzDMAzzJGRDYrVS6isAvmL+/co1XqMA/Oc1nvsLAH+xoSNkGIZhGIZhGIZhtp4oAgAcbOwEut0tPhiGYRiGYZ6MDJNZzTAMwzAMwzAMw1zsRBEEACEUi9UMwzAMw2wKLFafA7Zt47nPfS6uu+46/MiP/Ag6nc45t/WTP/mTuOmmmwAAb3zjG/Hwww+v+dqvfOUruPPOOzf8N6688krMcqYcwzAMwzAMwzCjEEUQQsERGWQ72uqjYRiGYRjmSQiL1edAqVTCfffdhwcffBCe5+F973vfsuellOfU7gc/+EFce+21az5/rmI1wzAMwzAMwzDMyJgYkLITo91It/hgGIZhGIZ5MsJi9Yi87GUvw4EDB/CVr3wFL3vZy/C6170O1157LdI0xa/92q/h+uuvx7Of/Wy8//3vBwAopfALv/ALeMYznoFXvepVmJ6e7rX1Pd/zPbjnnnsAAJ/73Ofw/Oc/H895znPwfd/3fTh8+DDe97734V3vehee+9zn4vbbb8fMzAx++Id/GNdffz2uv/563HHHHQCAubk5vPrVr8aznvUsvPGNb4SOEWcYhmEYhmEYhhmBOAYAVNwInSaL1QzDMAzD0LOhAovMcqSUuPnmm3HDDTcAAL75zW/iwQcfxFVXXYUPfOADGBsbwze+8Q1EUYTv/u7vxqtf/Wp861vfwmOPPYaHH34YZ86cwbXXXouf+qmfWtbuzMwMfuZnfga33XYbrrrqKszPz2NychJvfvObUa1W8au/+qsAgH//7/89fvmXfxkvfelLcfToUbzmNa/BI488gt/5nd/BS1/6Uvyv//W/8E//9E/40Ic+dN4/G4ZhGIZhGIZhnmSEIQDjrG6xIYZhGIZhGHq2vVh9ww0AZRzzjh3A5z63/mu63S6e+9znAtDO6p/+6Z/GnXfeiRe96EW46qqrAAC33HIL7r///l4e9dLSEvbv34/bbrsNb3jDG2DbNi655BK88pWvPKv9u+66Cy9/+ct7bU1OTq56HF/4wheWZVw3Gg20Wi3cdttt+Pu//3sAwPd///djYmJiQ58BwzAMwzAMwzDMWeTOaidGJ7SAJAFcd4sPimEYhmGYJxPbXqweJCxvBnlm9UoqlUrv30opvOc978FrXvOaZa/553/+Z7LjyLIMd911F4IgIGuTYRiGYRiGYRjmLLJMi9MAyiWFtvSBbpfFaoZhGIZhSOHM6k3iNa95Dd773vciMQO6xx9/HO12Gy9/+cvx8Y9/HGma4tSpU/jyl7981u+++MUvxm233YZDhw4BAObn5wEAtVoNzWaz97pXv/rVeM973tP7ORfQX/7yl+OjH/0oAODmm2/GwsLCprxHhmEYhmEYhmEuEoyrGsJCpZyhIz0tVjMMwzAMwxDCYvUm8cY3vhHXXnstnv/85+O6667Dm970Jkgp8UM/9EN42tOehmuvvRY//uM/ju/6ru8663d37tyJD3zgA/i3//bf4jnPeQ5+9Ed/FADwAz/wA/iHf/iHXoHFP/mTP8E999yDZz/72bj22mvxvve9DwDwlre8Bbfddhue9axn4e///u9x+eWXn9f3zjAMwzAMwzDMk4woglKAEgLlEtBOWKxmGIZhmFtv3eojePIhlLpwC2O88IUvVPfcc8+yxx555BFcc801W3RETy74s2QYhmEYhmEYZiimpyF/6y14yT/9Fn7kBQdxWecxvP5PXwrwfIJhGIa5iLn6auDAga0+igsHIcS9SqkXjtIGO6sZhmEYhmEYhmGY9YkiJJkN11EoV9DPrCbgiSeAN72JpCmGYRiGOW8oBZw4of/P0MFiNcMwDMMwDMMwAzl5Evi939vqo2C2jDjWYrWrUKlapJnVi/c+gf13nNFFHBmGYRhmm9DpAGHYqz/MEMFiNcMwDMMwDMMwA5mZAW6/fauPgtkykqTvrK5aaBOK1fFHb8LpEylw990k7TEMwzDM+WBuTv8/DLf2OJ5sbEux+kLO2d4u8GfIMAzDMAzDbAQpgTNntvoomC1DSi1W2wqVmnFWxzFJ03Fq41RnDFhaImmPYRiGYc4HuVjN9YZp2XZidRAEmJubY7F1BJRSmJubQxAEW30oDMMwDMMwzDaBxeqLnDQtZFYLtBMfiCKSpqPMwWJcQZjYJO0xDMMwzPlg7owEwM5qapytPoCNsm/fPhw/fhwzMzNbfSjbmiAIsG/fvq0+DIZhGIZhGGabIKWOAskywNp2lpeLDyl1hmapRNRgHgPiFpzVFGJ1liFO9bT09LyHK0dvkWEYhmE2n6NHMfdHtwB4I4vVxGw7sdp1XVx11VVbfRgMwzAMwzAMc1GRJECa6i2vO3du9dEwg7j5ZuBrXwPe9jaiBnvOavQzqyliQLpdxJkRq88IFqsZhmGY7cHtt2OuW4ZAhjDkVXxK+NNkGIZhGIZhGGYg8r4HAQBnjtJEPzCbSxQBjz9O2KCUkJkFx1GojNl0mdXtNuLURtUNcer06M0xDMMwzHlh927MRRXsLjURtuRWH82TCharGYZhGIZhGIYZiLzlSwCAM5/75hYfCTMMaQrs30/YYF5g0QHKdRdt6ZOJ1VHm4IrqHE5Pc2Y1wzAMs01wHMyHFVxaWUR4dHqrj+ZJBYvVDMMwDMMwDMMMRGYWSnaM6YPtrT4UZgjSMzM4sD8DWV36XKx2gUrdpiuw2G4jTh1cUZ3H6dltl1LJMAzDXKxIibmogn2VBYRHuAI1JSxWMwzDMAzDMAwzEKksXFpZwJmT6VYfCjME6T/8IzpdC6cfmqNpsCBWl+oubQxI5mAqaKHVFqO3xzAMwzDnAykxF1a1s3q2tdVH86SCxWqGYRiGYRiGYQaSZDYurSzizPTFKyjeeSfw0ENbfRTDkSoLjkix/6tEbq+8wKIL2CUPmRI0YnWngyh1UHdDhF0qGzjDMAzDbDJSopkE2Bk00W1nW300TypYrGYYhmEYhmEYZiASLnYGLSx2faDb3erD2RJuvx34xje2+iiGI1UWrqrP4uDDIU2DBWc1fF8/RhED0mohzmzUvRAh1+5kGIZhtgtSQioLNS9E2GGxmhIWqxmGYRhmizh6FLj55q0+CoZhmCHIMkgJTAUtLMUlYHFxq49oS5AS6HS2+iiGQCnIzMLOoInFU0QLC7lY7QHwPAih6GJAUgc1NyTRvhmGYRjmvJCmkJmFqhOxWE0Mi9UMwzAMs0Xcc8/FLVa320BIZPhjGGaTiWNIZWPKb6ORBBetszpJtslbzzKkysKk30FjmtpZLQDP049RqMudDuLM0c7qxNYrAgxDxPw8cOONW30UzLC0WsD09FYfBcMMSZIgVRbKTswxVsSwWM0wDMMwW8TMzDYRPTaJP/9znkAyzLYhjpFkNnbkzuoLvPNSCvj85+nb3TbOaimRKgsTfhuNxQzICBxfRWd1HgMSx/rDHoUwNJnVXUSpu00+YGa7cPTo9hlrSAn84R9u9VFsLbfcAvzZn231UTDMkKS64HTgJCxWE8NiNcMwDMNsERe7WB2GwNzcVh8FwzBDEYaQmc5l7EjvghcUowh49auB97+ftt0kueDfusaI1eNeF42YyAkvJaSy4bgCsG0IAWSp6k3WR2m3l1mdOhf3jfEiJ4qA7/5u2jaTZPs4dcMQeOc7R1//2c5ICSwtbfVRMMyQSAkBoGSzWE0Ni9UMwzAMs0Vc7GJ1kgALC1t9FAzDDEUcQyoLrmWEyQu880oS4OlPV/jMZ2jb3V7OaoEJv4Nm4uvcpVFJU+OsFgCAwEkRpc7oudVJgjh1UPeMs5oiB5vZlnz0o8Cdd46+/lFESj3e2g4kCTA7C5w5Q9vu4uI26bfAYjWzzTCxVYGdIIzEFh/MkwsWqxmGYRhmi5iZoc9s3k5Rn1LqLEmGYbYBUQSZ2XCEiZO40MXqL38VU41DaJyhPc5tk1ktJdLMwoTfQSMu0YjVvRgQPYUM3BRdSSAuS2liQIyzmsXqi5YbbwSe9jSdW0yFlNvHWZ2P4e6/n7bdD3wA+Nu/pW1zs0hTFquZbUQuVjsJwtiiidxiALBYzTAMwzBbxmY4q3/914GPfIS2zc2CndUMs42IIsjMgmNlEACy9oWt2MqbPoUxt4POEVqVans5q01mdRIQi9X6x8DLEKbu6EUWkwRx5qBcsyEzm8Xqi5hOW+HyyxWpWJ0kQKNBUwt0s8nF6gceoG03joGHH6Ztc7NgsZrZVvSc1VIv3nLleDJYrGYYhmGYrWB2FnPHOuRidbMJ/M7vbA+HdZKws5phtg1RhCSz4YgUVTdEayHZ6iNal2TPZXCFyRIgnDxut8zqmhuhTRUDkovVvg0AKPmpFqspYkAyG17VqOAsVl+cnDoFeeAQxjunyJ3VwPaIAkkW27hib4QHHqDNvpWSxer/8B+4TgqzCeQFFu1E3w+3xdar7QGL1QzDMAyzFbzzncDsLOJFAgGhQD4pO3yYtNlNgZ3VDLONiGNIZcO1Uox5XSzNE4bKbgJJUOvnaz/xBFm7281ZbeexLRQH3XNWm8zq3FlNlFnt1Xz9M4vVFycPPIA0ExifP4jWHJ0NOjHrattBrJY3/QMuV0dx5gH6HSHbRazerMzqI0eAb32Lvl3mIqeYWc1iNSksVjMMwzDMFqAWlyCEonG7FUgaXeyYSNFskja7KXBmNcNsI/IYkGqgxeqFCzuXMQlTOJY+RtWg6xC3k7NaZlqsJrvX5AUWfSNW+0pvex41X0FKRJkWq4VQ2yOvgaGnVEKmLNS9EM27HyFrVsa6H9gOudXywccwFbSwdILQWg493jp1anvEa2yWs1pK4JvfpG+XuchZJlY7HANCCIvVDMMwDLMFNJIAdTekdZAtLEDe9yAmpx/ZFmI1O6sZZhsRRZDKglMvY8wLsbRIu02dGhmlcK0UJTtBtECnLku5TYxTxlndE+ybBOJXkiwrsFjyFamz2h8L9M/srL44kRIKQM0N0Tq+SNZs8k+3YMpvYWY/XZsAoDahC0x2XYqqEyFKnb4lnAApgac+FXjsMbImN43NFKvZWc2QY/qtUt3V90MWq8lgsZphGIZhtoDZZBw7ghaUzOhmPDMzSDIbk24TzTMXuPVPKSQP70dzKePC2QyzHcgzq+tl7awmFBP+/M/po4uSKINrpah7XTSm6SaP2zEGJLATRA0Ct3LurA70FDIIQFhg0e7HgBA6q9/yFuDb3yZrblORshd/enFixNmqG6G1RPdByEPHcEllEdP3HCVrEwB+8RfpxU/plvrxRVSdolKQ334Qe5yZbbGbLU31ehW15pdl20OsZ7YZubN6zOcYEGJYrGYYhmGYLaBbmkTZMe6xxUWaRpWCVBYm/A4aj52iaXOz6HQgz8xiwmuhsXRhOzQZhoGJAbHh1ksY87poNAVZ03fdBdx/P1lzAIAkSuFYKWpuhMYsnVN3O8WApErAtpT+DOYIXJomWsTxdIHFwM90DMgoCqtSOgYkdeCNlfRDEd33deQI8NWvkjUHQL/dP/gD2jYB4E//FPjEJ+jb3TYY0afqhmg16cYFUtnYW17CzCxdnwUArRZw4ABpk8vii8i2yLVaSE7OYqJzAs35C7swLtCvvULtrhZC/8cwpEgJAcAfCxBKFqspYbGaYRiGYbYAmSg4VqrzOakmJHGMJLMx4XXQfOICD2fsdpFkNnaXGpg/vh2UH4a5yIljLVSOV7WzumVTNo0TJ8iaAwDIWPWd1RRCbd5uO0QSbQP7q5RIMwt2taQ/g3lJ0qbOrDbO6jwGZBSxOk3NQqsNu+zDs1LEHYJjNcQxcM89ZM0B0FrE7/1eX1Sjot0GTp6kbXNbkSQQAKpORBpllmQ2pvw2+cK4lMDx46RNQsYZHCuFIzIkTSJrcZJAZsbIcITWWv3KV5I2B0B3CZZFLFa328DcLBwZkl+3zEWOuf85YxWkyuIYEEJYrGYYhmGYLSBJANdKYYsMskm0Ch/HkJmNyaCN5gzdYEkp4Kd+CvjlXyZrsidW7yo1sXCSxWqGueAJQ51ZPVbRzseuBaoMnyShF6t7MSBuSCPUAjoK5dGDcFvbIGw/jwGpllB3QzSXCL6rFWJ1L7N6FPXH/K4QAsL34NsJojadmpQkwL33kjXXa7PdBh54gL7dM2do29xW5JnVXohWm84Cmwu11LU8pASOHSNu02Ttj/sdLE0TxeEkid5153XQPEZrV370UfromjRJMTmpaMXqL3wBaLdRmT1MXdecuchRiblfVSpQABcIJoTFaoZhGIbZAmSi4FoZSk6C7iLdhCTJbEz6HRphwhDHehs16cS800GS2dgZNLF4ml0IDHPBY3ZuOCUHpQDoSo9sUkYuViuFJMrgiAx1L0Rjkag/XFrSgr1IoeQF7q7OxepaWX8GDZo2dWZ1HgOiEKbOaGpVXkROCMDzENgSYYfo+1IK8fEzWJhJSKNbcm3+zjvp2gT0RzF9gW+K2lTyzGonohOrs8yMi9potmmlj80Qq/N+a8zrYnGOqI8pGhlOERRaLRBFdEl2Oemtd2AymSaNb8r7qKoToUX4ERw7Bvzu79K1x2w/0kTvhkClAgFwgWBCWKxmGIZhmC0gSQBHpAjsBGGDaGATx5DKwqTfRqMJssKNcQzs2AHSAT46HcjMxpjXRWeOxWqGueBJU8jMhuPZKJWgs4qJxGryGBCTrayd1V0aoRYAmk0kmY2yEyNZoBV9yMkzq8u+/gzaBLEtvQKLfbG6K73RxOpc+RUAfF8Xg6RyVj/6KOITM7hCHcHMDE2TgL5/79sHfP3rdG3m7V7UYnUvszpCs2PTjGGiqDcuanZtUtfjpjqrvS6W5oiuAzM2nPA6pLvuAP0ZzM2RNgk538Ck38bSfsKLoV4HYIp3nqbru6engc9+lqw5ZhsiY73AhEpFP8AxIGSwWM0wDMMw5xulejEgJTtBd4lQrM4dRJFHVgUsmV1COV5AEhPmPZoYkLoborPILgSGueCRElJZcH0LQQAd/0DkICJ3VhsXuOsJ1P0QjRZRZEmjYRbZQnRmLvC95Lmzuuyj5kVodJzRPwOzeycXq0sljB4DssJZ7VM6q1stxKmDcb9D6qxOEuDyyxSpAA7oj/GijgHJndVuhFZCtHMjinQtD7+DZhyQ2oCThDhjXCmTWZ1h3OtgcYFozGXGhhN+B03CeBVAn7Ozs4QNKoXULC4snSYsVFc8t56gu8jiGHjoIbJELGYbktcg6sWAsLOaDBarGYZhGOZ8k6Y911/JidFtEBX/ygss5pMyosC/5G9uhDt9AlgkzGk1MSB1j8VqhtkW9JzVFkplgW5K56xOWhG6VAIl0BNVHVegXlVoxD5IgkobDSSZjZobojt3gWftSwmZ2bA9G/WyRCMJRp9Er+Kspo8BSRCFRCKdbSM2O3jI4rYAJLfeicmTD6A5QyimgZ3VkBICQM0N0UoCmms2DCEzGyVH9wno0n1nUupCgAlV/VYTs+OIVBexXaQUq01ud4euMC6g3zupszpNkSqBqaCFpTOEDlXT91XdCK3DdOp6kmhfyOHDZE0y2wmlIBMFWyigXIZrpUg6dAWdL3ZYrGYYhmGY800+IbEyBLakE6vNjKnudbUwQSVWP3YQniVBWp3IOKvHvC46DS7NzjAXPCZaw/FtLVZLj8ZBND2N5ImjGO+cpCt8ZcQZ1xOojwk04hJNjlGjAQUteHTmaYVKcpIEqRJwPAv1Sqo/g1G2J2cZkGWIMweer92ZQZ5dTuCsVrDondVhqJ3VXhedM3T3r+Sz/4K620X3xDxZm0BfrCZK8Np+mAKL2lnt0+wOC0O9wGKZBRVKsTrJcOmlim6BIYoglW0KLHaxuETkgs5jQPyO3nU3yvW6AnJndRwjzSxM+p1NEqtDtGbp2s1vgQ89RNYks53IMshMwLEyoFRCxYnRblzg9Sy2ESxWMwzDMMz5Ji9SZZzVYYsul1ABqLkRmpRi9diO/kSPim4XUlna8dZksXo78MEPAkeObPVRbC0/8RNbfQTDc//9oxlezyJfZMud1VSZ1SdOIM5sXBrMY/oMnZMwyWy4ro4qbcQBjUhlwq9LTozOPJ1Td1NIUx0D4tmoV1J9Txji+/rCF9bQsszJ1E4DVKp9sTpMXXJnNVnkp1kUrbm0sS1S6Z1RlKIfoD+Kchl0GevbjUJUQzMJyMRqmemiqEIoOrG61YJ87CB2tI9SDbX6RWzzGJAGkVTTiwFp032u0OtXShE7q5MEUuk4u6VZQodqLlY7EVpLdDfGJAGuvhp48EGyJpnthJRIMwuOnQG+j4oTod26WFcb6WGxmmEYhmHON3n2a55ZTSXWmsF4pazQkR5ZNmNSn4JrpXBEhuQMkZOsFwPSRafJLoTtwF130ReT2m7cfvtWH8Hw/Nf/CnziE4QNpqnutwIbQcXWIiWFWG3bSDIbO4IWlo4sjt4esDyzug6904RQrC47MTrzF3gRJTOJtl0L9ZrSgv0QKvDbfzfGmQ/+I3D69FntAUAn9VAu64dKZTF6DIiUSDMB21aA78O3JaIukbPafOdlJyaNbUnqhQVcKhu0UkgefAz7qosXb261Oce8soModWhE1YJbGQBUh0isfuIJSAlMdk+gsUh0vpodIY4rdAxIiyiywzirx72udqwTCfb5Wg25s1oJLVYvKbrrKx8fuzFaTToxMf7Gt7EvO4LZ02y6uChJU0hlwzH3r7ITo9NmsZoKFqsZhmEY5nzTiwFJUXISdFtEYq0ZjItdO6GUoBOrQ12dvupGaO8nqiZkJqF6YMeVabYDUcRFzjsdspjmTUdK4I/+iLZBmdn9GBCqAovdLpQSGPc6WDpIZNGLYz2B9CzUxu3RIzByGg0I6H6rvUCbtf+qV5E2Z2JAtLO6VlVasB908jabkAeOoPnlbwB/93fLnzPKVFv6qFT0Q0EAhHJ0Z3WS2fActSnOasDcZ2YJxWq/CkdkEABdwb5GA8ncEi7BCUyfvvDvifPzwMGDtG2qWDtpxVhdu6AJY0AcK6O9bj0P0hQCbBwhqucRRXpBsOphzOtiseXQtGuc1YGt+wSqvCUpdZFVUmd1HgMStLEUDbcbZNh2AR0D0iYUE5Pb78J4No/OwdODX8w8+cjj0YxYXXHZWU0Ji9UMwzAMM4D3vIdsbK8xk3PXSvXEnMpFlm+nnpzU/yfa6tkXqwmz/ooiQoe2Oj2zOcQxi9WSOLp9M5FSz/MzKt3LOKsd30ap5uisYgohwfQFY14XjaOLo7cHFJzV0JnVyXCu4oEYZ3XNjdBapHXSHThA2lw/BsS1+rndgz6Dxx6DzMxrH3xQK5I5RqyOUheepx8KypZetBglDkNKRJkDz83oCyx2uxBC6UVhygKL5p7oWCniI6doGjXn7KTfRmuWNg99M5zaX/kK8Cd/QttmlugdXBgb0w9QDLyiqFfQuuaGaM4TRUtEEaT5vhoHiEKr8xiQkouKl6AT2zRRM4V4EQBkY0PZTbB7IsbsNG1x3FSZzOq4RBdZEsawhNIxIC26MWdewLVDZTphthdmp6xj68XWihOjzXMaMlisZhiGYZgBfPKTwDe/Sdhg7lC0FEpOjC6VyyOOtdOrVtM/EymLcaR6zmoysbrorA7FRVxRavsQRdvHVbxZbDexenyc8HjTVAsevo2g6pA6qwGg7oVYOkFQBBEoiNUWahOOzmml6A/Nh1lzQzQJc08BrctRfJw9pESqhM6szgX7QRewcWA2kwDHW+PAHXf0nzOLocLS8dKAdlVSZFaH0kXgqX6BxZjonlBcFF2iy79Noqwvfs7QLeAmma2LQRLmawPADTeQNgdA9y/79xO3GaWwrQyoVvXuMIoLouCsrrshmgu0NULG/S6ds9pcf65voVy1dJwbRWSHiQFxRKrHiFQxIJ/+J+yRxzH3KFWFSRSKQbb1ohmVsB5KOCLT41hCMbF3zdJt3GC2E/l8zgYQBHr3BovVZLBYzTAMwzADiCLgW98ibNCIPm7J0ZnVHSKhNndW1+vwbImoRTM51y6yTDtS5onUlKKIkHhkExJm8+AYkO0lVqcpMDVFWKytEANilzxkSpA7q5fm6SKRZGbB8SzYZV8fK4VAUywAt0S7wCYl/Q6eXgzImIXmMJnVxiXWKO/Biz/9m1C3f7Vvzc/7aKs/fQxKgkSs7kgP5SAFhEDgZYhSt38/GwXznZfsmO4+i76zuuZGaM4R3RONqDrmddGmWhQ2zMzQrwen6SaI1XGmndXVKhwrRdIm+GzzaI2xMmoe4SKT6fvqbheNWaJzoNdv2SjXHS1WU4yN8naNs1q1iGJAvn6vPl8pi82aGJDA1n0RqVidmy46dBJYnDraWd1lgfKiJI8BMTFWFTfS5wIbcEhgsZphGIZhBhCGxGJ1HgNSdvX25C5tARnU69gRtDA7RzN4zl1kVTdCc4HInZaL1RWzjZxUpWE2gzhmZ7WUQIvI/Hs+GBsDlpaIGssLw5YcwPO0Q486BqRNNDXJndW+pe2/wOgrLUr1hNuaG6JJfB6Qn1tSarHad+BWdL7ucM5qC3MTV+NEewKHj9nAww/r5/KDs/pF34KyhS5BZrUWq/Vn63uZLtpIEX9gvvOyE5OKSTJK+85qKrE6d1b7HXQWaDvaMKRfaJQSOHSI5mvqtZlkcKwUKJdRcyO0GwTCcu6sHqvoxQWqRSYz3qp7IRpNonMrj+vwLFRqxllN8cXFse4L6hWdqUskLsugCtcybm0q8mMVxJElRWd1OGJ0Ua9RiThzMO51WKy+WCkWWLQsVPwU7cSjWWxlWKxmGIZhmHVRCipO8OADhJl8+Up82TOTaItmFd5sS0W9jp1BCzMLBMV5lEISF2JAFmmLQZZ3lPWEjMXqCx52VmtNjtpZff/9wKc+RdsmlILqdFEvJXRidZoiUwKW5wC+rx+jdlZTFRTLFwQDS1cBBEY/eQviRs0N0aIS1g1JQixWp2nPXY4g0LEKgz6DJIFUNo7M6yip++Yu09nVQO/gVNFZXba0s3oU4acnVut7YOApXbSR0lntJOiGRGKSUkgSwLEy2gzkMITMndXExTuThHCHhSFN9dd++DBhm1Hac1ZX3RCtBsG4y2RLO+MV1NwQjUWisVxPrO7SidVRBKlMDEjurCaKAQEAMTGuz1miKBQZaAc8qYd0s8TqKDXO6hAt6dN8rlHU2w3BtVcuUpIEMrNgmzXccpChLX12dhDBYjXDMAzDrMdDD8GePgl5mrDcuZQ911+1nKFN6J4BANRq2Bk0MbPkjd6mlEhSqy9WU2yhVaonbrBYvX242J3V+WlLLVYfOADcfTdtm3j0UWBmBmN3fx6NaaIVhlyQtG3A97VAQZRZLYRC3etiqU0kVvccijZQKsEWGWRrxM8hF0+F0IJP1yHd6kvurC7EgAy9uGAm3odnqxirpVqsfuwx/VyrhSSz4Hp9Ucb1LSSZPZqzWkp0Uw/lUu6sVogyGme16nShlOjXRqAgd+1bqY6VoCq0aZzVY14XnUVasVpKerFaSr1zgzIKRCZKZ1ZXKnonV4Pg+gpDXWBxooa616Xrv3sxICEaHXvAi4ck77fyugDEYjXGtVjdmKNZYJFeWS8uAHR9YRzrrH2hd/TFS0T52qHU49iyQishEqu7XcSpjYobQyaKox8uRvLC02boUillek5zMQ+WCWGxmmEYhmHW42tfAwC4cWuk+fgypNTuGReoVoFWEpDmqaJex85SC7NL7uhtGueIZ0ntSGkSDMZ7H6RAMB6wWL1NuNid1Xl0L7VYnSRk9a76LOiCX3W3i6U7Hxq9PaX6161tA55ZCCNyVisltLO6Q9BnAb0iXa6vXcV1L0RzaURHpRFPlRCoVhSaiU92QeQf72bFgCAIYAmFrDOEszqzcWS2jFd8j8C35q8ATp7USmerhY70UCn37wHCsXt/65zJndUmrSXwjbOaQKxOuzEcK9WFjCMiQdHcE3uZ1VSxEgWxmiT+osBmLLKlKXDVVcDx43RtFjOrq05Ecz3kAnAeA9KiW7QATAxI16OJlcizpX0bokwUX2TaBWDE6ogst1sKF46VDte3DIspMulYmb4nzBG5wI1rv7KjpMfcFI5tEzHjWRJQ2SbcyJkLHimRZhbyW2GlrHQMCIvVJLBYzWwJr33tVh8BwzBPRrJs82LCAlvSjUONs9pxhRGraVweWZTo7MBqFTuCFmaawehOj3xi7ig9eaQQq/NJnRCw6lW9PZ1QpZmZIWuKKRDHF7dYnZ+21KKPlJswx01TCKF0DvQMwaRJ5a4xoQvs+T4EABUSZ1ZHXn9VYBQKu1cQBNr9OOr2fxODIoRArS50wUKiLy5fB6COAUmzvrO6NkysQpJAKguHp8t43vMtHEt268cPHgRaLbQTH+VKQezL7WQjOqu1WG1iQHzjrB71Zp5liLsSnpVqZ3Vs05xbRWe1S7AIkhOGkMrSzuoWvVi9GTEg1Sph36UUpFT9zGovpLke8qz98Qqqbog2VVxDLla7XSwlJZoF9xWLbAA2QawO0SSKQkkivbhQshN0Ty2StNmLAXH1tbA0SzCoV0ofq5X1d/NROaszB65lrtftUn2ZocOYj/JbYbkMjgEhhMVqZkt4/HGa8SLDMEyRW24Bfv/3iRsVemJTcmK6SVmep+oJVOuWFqsJJiRpmOhBs+9jZ7WLmW519G36+cS86ukYkDZBlevednoAlYr+N6Gz+tWvJmuKKRBFF/f4e1uJ1eYaG/O6NJnVvQUm87PnwbcTRJ3RRbWsG8EywvpSXKIRZ4pidamkc2VHFetMRIbrZKjVhc49JcpTzbvETYsBCQL9GQwSqYyz88Ssj6kpwA0cxKmt3dW5s7pamD7mQZ2jiNVhqMVqI4L7Pmic1cap7LkK5bKg25odRfo8yMVqqv7AnPcVJybdaJRl+j/yfutr30B15hDCLtGETkrtqLUVEAR0zurcHDBWQdmJ0e4SjGGA5c7qOKAZw5ixoePb/cKwmxADQrXAIkMJx8r0rrsTRMURkkTHgIzX9D1hgeBY0xQy1TnzVr2qI6wondW27P3MXGTkNYjyGJCq0NGOF/NgmRAWq5ktIYq4SCrDbBc+/GHg535ueywwdTrA9DRxo2ZSU7IThB3KSZnO/qzUbRpntVJI4ky7kjwPO8djzITV0QfPUYQ4s+H6NqoVk/U36iBfSmPSFJsiVs/OcnTgZsDOav3/7SJWKyW0kEJR/KuwGwIA4Pu6aF179D4xaUVwrRSlAHSCYppq4csVQBCg5kZojPq9GYemYynUxiw0qeKb0P94SdOQ0lSLPj1ndYSlxoBzwQjcWSYwOQk85coMB5s7emJ1W/oo1wrTx3yGPoqwbETw8phuKwhA46yOY8SpA8/NUKpYOv+XSKxOMhtOVbvVyWIlzLlEWnQZ/XUEcmf1gUOoxvPonqYUKS0tVnt6cbxJkQVtRHC37KLspejENBEziCIoJRDYiS4ySqGsm37L9cTmOas9unM2L1pYcWK0zxDdGHNnNaVYnUeLONDWV4BMrI7NLgulBFSHY0AuOvLMapNgVqkozqwmhMVqZktgsZph6FFqE4p0QYu/n/gEcNtt9G1TkyTA/Dxtm7LRgS0y7ayeo3HRIU1N8S8L1TGbpjJ5PiGzM0AI7ByXmOnWRp/o5M5qXx9rM/FHn5TlrkdbF1ISQpGqNFHE0YHkfP7ziNrJRT3+TvXudFr3K3S/Rb4IUHRWNwmG+0bxUiiI1XaCbmdEQU0pxB1d+EpMTujHiPL7lzmr3S4ag4RaAP/4j+vc6/I+1slQrjtoUxXpQl87Iz23smxZgcWKE6E7KF4iSVB2tLA1MQE841kOHl/cvcxZXa4VimDato5xGsVZ3ROrdQ46mbM6jhFnDjxHoVwxzmqKCy2PxqqVtPDXJhKWe87qCO3EJTu38vkW+SKbslF1I4RNogKTZhHftgH4vt7J1SHou3JndeDoPFmqLfpGABaeUakoxjC5S9Prx4BkbWpnNV1utwylzoF2I7TniYqC5sLyeBX1YaKLhm7TuF8pHev57g0rhWdLJM2LeDX/YiXfEdKLARF6bEBRfJoZXqwWQthCiG8JIT5rfr5KCPF1IcQBIcTHhRCeedw3Px8wz19ZaOO/m8cfE0K8hvzdMNsGFqsZhh4pgZe/XLtKqdvds4deoNkMkqRXV4yMaClEYEstzFCJ1YUYkMqYQ+OszosIGSPSzgmJmZBQrPYExsaF3qY/qiPF5KK6juo5q1WLTqzejGJSFzVLS8BNNyFuS7rdBdsQKbWAty2c1b0t6l0stZ0BLx6CnnDYF6sDO0E4agxIFCFJLXhOBpTLunUKQdEsCLq+zteueyEabXugqPjo/TEevm+NSWYuetmAVS3rreQXslhtBGTh2IDrInAShPGAqV+SoObqz39yEnj68yp4fGk3cOYMsLSEduKhMrZcrLaEQpqM0C/kYvWED0BrdGHqjj5RSBLEqa2d1VUb3dQlc6kmmQ237KBWStGMicTPorNaemQnQ35ukTurlUDNDdGlEqvNuMAxYnXNDWnEauN8dH0L5TLQkS6Zwx6AvikAZGJ1bmRAqYSSEyNsEkyY41gvKo2N6d0ARAssMtY50FUnQmuR6DyIY70jZKKm3fUU99sk6ecK+7qfIam3EIaIU51ZXXZidBYu4tX8i5VeDIgeG1Uq0DEgFLs3mA05q38JwCOFn98B4F1KqasBLAD4afP4TwNYMI+/y7wOQohrAbwewLMA3ADg/wohiMoyM9sNFqsZhh4p9bX1F39B3261uj12NElJ76yOFrvw7QSBk6A7T6Qo5QV/fAtuLYDM7NFFjzxP1daiQS8Le9QvLneR+RbGxkCTKdsTfRRQrcK3JaIlOkeKlNtjcWXbYBYnMgiEs9vjg73vPuDAAdo2pQQmxlI0KYqMrmiXXKyWsl9gsUsgVufCZz5z8Dy926Q94mdhMj9dR/Ucb6pLk1ktM0tnvzoO6qUYjchff/CZZZD/8kU0bvyn1fu4PL6pcKyUmdUenT6pyTItUFkWYNsIbIkwGuCojGM4VobAz7RY/SwXj0VX6JO00zEOaLf/ettGyYkRxSM4NY1YXRo3YnVJIEqd0Sf7SdJzVlvlAJkSpDEgrmfpQpuJTyNUmk6g4kvt/iVaFduU+KIsQ5pZqLgRwhals9qG46i+szocvMA0kDwHOnBQqRJml+fOyclJAEQL7vnYMNA582UnRqdJUGwzP1bfR62S6XOW4KYjoxSOSFFxY7QblGK1BXu8buqk0LQpMwuui96uIJJFgG4XcWbDs6T+rhbZTXvRYQos2svEap/FaiKGEquFEPsAfD+AD5qfBYBXArjJvOSvAPwb8+8fND/DPP995vU/COBGpVSklDoE4ACAFxG8B2aboZSeA/DuCIahRUrg6quBW2+lbTdJtFi9HbJqyWNAlELYiPvO6gWiD2GFewYASQxIkk/0AIgSUd5hQawen7S0WE10rLmzmnqQz2I1Md0ulAJ8SyKa2x4f7C23AF/5Cm2b8p77MDF/EM3Dc7Ttbqaz2g2xFBJMnFY6q11X94nRiM7HYl8QBLpoY4NASCoWWARQL0ndd60nUnW7SDoJGqEP3Hzzmm06jurnnhI6qycmNsdZDVsL9oGdIBwkKpvvuV7VYvU11wCPZM/oPd2p7UZlRWZ1YCcbv80sLOh7k1J9Z/WUvhf6PqGzOrN7AhUAshgQqWy4gY36mKDLLjfH5u2e0GI9obO6ViN2VhunatWJ0KUSq82Cu2MDsCxUA4lmHIzed+X59b6NchlkW/SzKNERZhMTqDgxOvN0hWEdVwClkh4bjSoCK9XvCxwH9ZrSn+uoC21KQUYpXCvV0TUNAlEd6IvV9You3EiRWx7H2rXvAAgCVNyIJl4kX2wNbP1dLbET70Lna18DPvpRwgbzhXFX31tLZUETY8UAGN5Z/ccAfh1AflVPAVhUSuXfwnEAl5p/XwrgGACY55fM63uPr/I7zEWElPq+yc5qhqFFSmB8nF702G7OatIYkDBEFAG+nehiYsRidZ6nCmCoL+7b315nwpmmepujbVxIVMV5CpnV5TGXJqc1SUy+thGrbdpBfpJwDAgp3S6kslB1Q4SL2yMMXEpgcZG4zX++BRN+G80TtPvpk2TzCizW3FCLaQRFUQH0tGo4ju4T4xGFhNz96mZAEOg2F+nF6mopHex2MoJGM/GBu+5atU2p+i5wAaI8WfTv39RitRBquVg9aHEhX+SoKYyP63t/x64jfdPPA69/Pdrf9wM9nR5Az7G9oUWLY8eA3/5t4L3v1Sd+lqGjSijX9LkUlC1dYJEiszp14HmKvFhdYsRP7awOaNo1bYhdO/XPhM5q8vgiKZEqgaoboduiKzydKqvnUKyWM5rdYblbueSgXLXQSWmc1Wk3hmulwMQE6l4XjXkCcaogrPfE6lGd1UoBSunauJZFVxw2TbVIZ2XaAd0g2nGU50uPV3W8SEiwMyjPwTYLV1WHTqyOUwfeZJVmYYHZdI4eBe65h7DBvMCiOU39QOjFVharSRg4shBCvBbAtFLq3vNwPBBC/KwQ4h4hxD0zMzPn408y55l8fMBiNcPQIiVQr5PtSu6x3ZzVi4tARhWr22wiTF3jrI4RNojcv/l2V1NERwg11MThAx8AvvnNNZ7sxYBsjljtlWyIMrULHHpC5sZ6F/UoRboMSm0vZ/V737sNri0zIRvzutti0QrQfcHSEm2bsj6Jkp0gTgkmz8V25SacA2aiZFtKxx+MGlOQX5vCqNW2bZy6I2af5vn9xvEWUG3PNgKV42sBtOyn6Ep3/T7GHEsjLukbycovpZBZjVJJu/6IclqTToJxr00joOTkN8Jlzur1p35ZLCEA/M2fNnqT76uvBp6oPgf43u9FR/p5mYFe2yUnHhwvUuDRP/4cfvOOH8Cxe84Ac3qXQgflngjuB8aZRuKsduC56N8PKWNAAlsLfzGtWI0dO/T/idTlJNFJFeTO6swUWOwSnbN5ZrXZHVarKjKxOlMClufoLfoUbSKPwMiAeh11N0RjkeBzyOt5+FY/BmTUqKUk0V20uUR7YvWo94Qo0t9X7qxuEYnVSaIXLaol1LwIzWhAvz0MvTGnADwPVTdCu0nwfZkCi+5EVbvrKSJbmE1FSuLaTkmCtOCstjxHj7lYrCZhmGXw7wbwOiHEYQA3Qsd/vBvAuBAiH63vA3DC/PsEgMsAwDw/BmCu+Pgqv9NDKfUBpdQLlVIv3Llz54bfEHPhw2L15nDHHeuIWMxFgZTapEt9bcn9h1BdOrEtRKok0boJmUjVaiFKnb6zukH04eYCTaDdM66VIm4NFsLXdWCagmL5RA++D0soZB2iGJCAPrLEdRQgBMYrCU3hRvT1me0iVn/848CJs0ZDFxjdLqLUQd0LEY7qpD1P5AtXlKS1cTiWOcEIFlZyNiMGJAtj2FZhMk7grM6UgJXPHIRAyZVaAB5ldXBFDEjJTtClEKuLBRYBlPxMZ9Wud4M07rtGbITN06eXP58vCLraWV1zIzQXaCak8ubPY3zhMFr7T5G0B6B/jprMat+WA8XqNJJwrBQvfnH/sec+V2fAA1rfWuasHlIE77G4iI98+RKc7tbxP+95HfDQQwCALoK+WF22aZzV5j7reYo2BiTfbVRy4FR8pMoavd18lRXoF+yjigE5ehITzSNoThN2MsYFXXUjdKkMErmr2KgL1SrQkjRiNQDAceBVPR2xQiFWh/paQa2mndUUiwH5OM7XmdUVJ0ZnVOd6miJTArZlFgHGLJrM6tytLDKdWU1VIzuPAQlcVCt0Cxa6CB6AINBOcIrLK18QGy/T5Yszm0qaEovV+a5WI1bDcbQBiYUuEgaOLJRS/10ptU8pdSV0gcQvKaX+A4AvA/h35mU/AeDT5t+fMT/DPP8lpZQyj79eCOELIa4C8DQAd5O9E2bbwGL15nDXXcCXvrTVR/HkJE3pq6hvBlKiN8gnI4qQHDiC6tGHEXZpi4ptBlJq4x9ZbnUU9Z3VToxuh8hBVBRSSiXt8lgaPDE3Na7WfFIqSzsUgZ5LMWqN7k7Tx6onT5ZQo299z9t09Tk1WZOYjyokk/P83rJdxOokAaant/ooBtDtIs4c1NwQsRyhkNp5RMpNcFanQosTANQZui9tM8TqnusvV5dHFavzLd92/z5QciW66YhV702usGcE4JITo9skEICLC4IAyiWlxeoBMSBJZqORBDjeGkd2coVYXdwRUi6jRuislvfch3Gvg9YM4YlQFKuHFJV7543bL6L4nOf0xepOB6vHgAy7iHX0KGbCKn7+2lvx+NJunLlDV0HtZKVeu7ZnI80sGmd1asPzAAQBHJEhaRPsjsrPLU/QObazDCoz9td6XT9GFQPysb/DZDaLxv7Tg188LGbhpuqG2lU/ahFEYLmgCC1WN5OAVKwWvqeFpFEzq7MMMlF68bJS0bUBGgT3RrPrLh8blp1Yd92jfL4mvsjJxepJlyYaKo/rcIXeZdImGhsUnPBarA5G/77yz8BBv3gnkVidZDa8CVN7hSoSh9k0pARIwxtWZFb3OjBCQ8PFzChVUX4DwK8IIQ5AZ1J/yDz+IQBT5vFfAfCbAKCUegjAJwA8DOBzAP6zUoq/xYuQfMzBBRZpSZJt4M47D2yGqHzrrcDv/i59u9QksYKTxQAIRWUzGK26EV0EhuEd7yBtDoC+DqamCHOrw9A4q6WekFPpCPngxhRYHDY/b11n9YoCi3BdBE6CcFSBXUrEqdObPNXcEI2F0bdkyqwvrE+NScyFldG3paI/L90umdVxvA3E6sJ1kGUgzNnZPDbDWS1DCUfofM72E3TCz2ZkVssohS0yYGxMZyu3RndW6y3fBbHaGyJaYxDFhSvfR2BLhBRide7SDHQnUw4ydNPBMSAy01vkf/HO1+Obd54dA9LLpjSLjE2inFaZWah5oT5GKooxILat7wfJ+qKyjDO9ION5vceuvRZ45BFtgv7MZ/TPPSxLi+DSHk5QO3oUM90adu5QeN7UMRx8QPf5nczvi+C5UE7grI4zB54nAN9H2Ylpdkfl96/ApnNs59EHlgJqNbhWimSJxrIsWyEqToxYjlgMdVmjxlntRLoPoHAg9epu6B/LVUu3PYpYXXSsOw7g+1BKjC6A50KtDSAIUPdCNJpUYrWJL3IclD2JTmyPdi3kbZqFxtK4rxfuSGJAbDhlDxUnRrtDJFYXCsNuirPa97W4TuastuGOs1i9XSB3VufjAq8vViuOASFjQ3ctpdRXlFKvNf8+qJR6kVLqaqXUjyilIvN4aH6+2jx/sPD7v6+UeqpS6hlKqVXKbDMXA9vNWf2e99C7szYDKVmsBoBXvIK+zdWiKy9E5L98Ee7D99GGVhunWdWNEDVoP4Q/+zP6c1ZKYNcuWmd1lDkIAoWSHdMJSkmCRPVjQKpDViYf6KzOt9MDfSfdqF9bz1mtxeoxr4ulhREH5KbN3IAwOaG0s5pQrKZ2VifJ5ri1t5Oz2rfMh7sNOsRNEaujFI6VYtJvY/4I3WqIlHrRgnINID9WjI2h4kbozI/4na1cDAMQeNnohYRWZFbrHSw0Ls1lzupguBiQxMSAnOqM4dj+1TOrXSNW19yQTKxOMlsXa6NCqWWiT+6AjpL1M8b1ebPcWX355boo1V/+JfC2twFPeUrhF0wcTDjsosXRo5gJa9j5wy/Hnj3Aqc4YAKAj/V7KFNk26jjWrn3jrC47Mbotgs84vxZMzQkAUF2a68u1M6Bc1uLfELuthmraCeBYKUj3xBix2rV0xATJPSFNkSrRK7DoVxxE6YhitTknFYTedpcvwlCI1Xm+tu/rGJA2QUSWlEiU3c/aD1Ldb41yvLmYZsRqstojuWBfclHxJdox3aKFAADH6bvrSZzVxv2aF1jsECzerHRWE9cMYujZHGe1yUMH+s7q7SJ0XeAQLrEyzHBsN7H65pvphYQkAb7+dfo2WawGDh+m33nTbG6P81V+5atwRAY1T2UrRm9AXnVDcme1lMDdxGFQSaLFajJndRwjlC78sqMzq7t02xxlpqvT6/y8EK3mYNFjOGd1vwCab8nR41uKok8QYNzvYGmRqE2jh0xOgkys3qwYkFtuAf7wD2nbBC5wZ3WS4Ja/b+F3b3waotSBZ28fsXpTYkCMs3rSb2NumjazWhDpPTlpbETHsTEtqs6PeBNLU0SpC9/tK+okzuq8L/AA+L7OrCYUFHOxulSCFn0GOauVhUZaweluHceOrFg9yCelruiL1URrFjKz6MXqHKGFusBN9eLCWp9Bluk4sWJ8DLTWDQD33gu88IVn/9rAdoscPYq29FB57tOw9/WvwOnrfwB4+cshy7W+Pk7prE4deIEWKUtUzsf83DJF8EpOjM7SiNdXbyEk67nAqVya0tERKKRBbrlTNc/Fp1jJ74k++kfhe1oIH0WoXFkYliq2xRSYdGxosdoNacRqE7fUW2Tz0sHxRYPIP9c8wimvkDqqsmrqmTiehWpNaAc0xXlQdFbn7ZI4q82YM48BoRCr852HkzWUHcLcbmbTSFM91SDfKWsWmOC6EEJBJeyspoDFaua8k0/GtoP4B+h7OfWx3n038Na30rYpJXD8OG2b24041k466oiZbSNWw4FjZXBVQne8ubPaiRBRFL0qkCTAN75B2iTk/kPY2T6MxQWiaVkYamd1xUbJienEpFxY9u1eZfJWd/BEZ11ndZ4pW3RWO5vkrB5CrP7iF4GvfW3tNqUqiNU7LMxHZRKFWUod+UkdAxJF9E5dYPOc1V/+MvC+943WRvvPPoxv/+EteOShDHGmC7QB2BZi9WbFgNhWhqmgjfkZWrG6WqWNAullD9dq2kW2NHp0T1e6KPv9dkp+pjOrR4wBiVMHnhERAjuhqY+QZ/iXTAzIhjKrSzjVGcPR0ysE2HyR0YXOrPZCNFs0C5gys7SgqIgWRI1NXxX8tD0n/FrflxHrHVP4tsiVVwKHDunF4JUEbqrjSwYJaq2WXkkWFsTuXdh7icAp61I88Oz/ADiF+BMqZ1oxBsTztADcJnTtG7G65oZoLo5+ffWc1b6v2yQ6txLL74vKVOSxJcK0S3FPWJFZ3fvHiEItUDidPU9HrHRGX1zoRWsEAca8LhodGmf1svgiPx28yDaIXr0B811RFcrO3eWeQKVmoS09mp2daaoXVhwHbsmBVBZdDIi5z1SGHHMPJL8OJuqoOBFdFAqzaeTdCVkUiIkvsgtGIc9KkUQcCUMBi9XMeWe7Oas7HXrx88476fMpkwQ4eXJbRIluGvmNh6DI9zK2jVg9sROOldJuRTPVvqtuhLBNu0pcLtOL1cnBo6g1jiOcJ/oAokg7q6uudvxFRLfN4mTXdVFxYrTCAdUxswzJ4ePo7l9jVaq4nR4w274TXfxoFIqFyoxYvdgY/Dncdx/wrW+t8WQu1puCJJM7bcyHFZKJjpTAxAS9s1rKzcnE3yyx+m1vAx588Nx//+8/FuFVb/8+PLawC0eWxrWr1pJa+tomYjW1szqN+s5qsqgh6GOt14nF6jx7uFbTi2GjitWpFk3K/irOaooYEJMrrHewjHaoAHqij+3rDrFUArpDxIDIzIbMLOwst3GsObF8v3Cv3wLguqh5pt8myKZc5lKlYKWjFEPEtpj376yi4TzjGcB1163+a4GXDhcDcuwYZGbB8h1ACOzZo8etL3kJMDdXeB2ps9rcZz1P38MpImaKC7hBgBpFdnnv/q1jJXaWmphe9Ab/3hBI4cKxUl0cOSYaxxWc1UIoMketVHZ/3SKPgyEQq3vXgREqO02CuhvKuJV9X2dWdwjy5osRM9DxRa0kIOlje9e16+pio+GIn0HeX3g2qnVLO6ApJh/5e7ULmfAUYrWy4bh6zF11Td896qQ5jqEAiGoFVS9GK7Qv7on4NiBN9QYLMrG6WIMI6EUwUus8FyssVjPnHRarN0esllKP70lzmLYZueBz0TqrgyockWmxeppIqevFgESI2rT5Kjt2EGZLG5IY+lhbRF9YnlldNTEghGK1zGzt+hNCi0mxt/4g99AhJLMNdO59ePXM0VUmeoEtEYWEMSClEsa9Lpaagz+HJOmLu+997wp9c0UMyNRuB3NRhcxZvRlidZpuTtFGy6Lvt48f18XQRpk3/s5bUizGJTwwfynmwwriVGe/KmBbiNVS6nOQPgfaiNULdA4qKYFajV6sto2zuuaGQ2Xir9+gREd6KBXE6sBXo2dW92JAcrGaLrMaAIRZvbM8R0cKDIgBSTIbk9UY1181h+PtceB0oZCmETxcV8dqVCtK56kSfHHkmdXmfRbPUv19OWt/BisKsRW57jrg+utX/7XSsDEgR49iLqxgalL/uHevHg9XKn0TLQAtUgJQMUVmtQPPLzirKdax83O25PRd0EujX1+9gn2+jz2lBs4sBQQHq/sCNzcynKHKrZHLndVUYnVmLYsyyx8/Z3p9k2nTnAftJtH35SjAtlH3IzSiEeM68naVBbesB0fVQKKdjNhuPjYsFN+ueQQRRnlmtWehOu7ovpDIWS2A5WL1qBO7NO0vNAqBajlDS/okWdgA9A7JcoY2RWQJs6lIqe89ZONu0xf2xOq8uD3FDjGGxWrm/BNFelBKLShuFu027bEqBTzxBH2R2CTR2zQv5iiQXKy+aJ3ViYJjGbH60BmaRgsFFsMOrVtgnRpP54bJ26w6EcIW0QWWO6vrent6Nya6bZqtg5ZnxOog0a6U9SZlSkEqS28JXc0y2tui3i/yMUyBRaWAD3xg/WNd6axeag3ePhlHGRpL+kt+17v0FvKz2jTVsyd2ezqzmkL0SYDx8c1xVm+GWD0+Tpixblhc1EXQznXeGIZAJW3gZXsO4Fh7AmNeF80kgF9xtDuvc+GL1UkCTE3RuuFlnMERKSaDNuYWCbYQ5+1KhWpFka4B6GPNgHodVTca/dzNndVBwVkdqNEzq3tRDehnVocECwFFdx4wXKSAWZydqiV4yuVSO7FXiNXFHSG1KpFYnWWQqYAjjPs1Ihhw5Ks0hY8y8JV2QK/nrFb2cuHY8IY3AL/1W6v/WuBnw8WAmOKKuy7R38muXcBjjwFvfjPwe79XeJ3rwiNcaPUC46x2EnQJI2byAosk2eU9Z3UGeB52lxo43SiTrLblWfsVJ0LrNNGN0YxhHLPAMnKBSaAvgBcKlalBC0xDtAmgfx2YQpsj54HnfYENQAjUqxkacYlE/OxFxAGollItqo6cWW31i2+7Lk3MjBHBXRcoj3t6bEqcWQ3f1+cASca41eu7qxWlheVRb7r55NB1USkrmnxtZlNJU2DPHlqxeqWzukRR3J4BwGI1swVEkXYQUYt/d9wB/P7v07YJ0DurpezHhVEiJXDJJYTbWrYh+Y3nonVWRykcYdwzc0QWvV4MSIioe4FvbQtDJJmNihsj6hA51HJn9ZguzkTmrM5db8b1V/WlHuQO2KKeZLYWUA4fPvv5XoFF8/OQMSBpCrz73eu8IJ/wl3S+9pgfYqk7IENRKSRf+ioan70V8vffgUMHMxw7trzN4sTBr7qIU4fkQpOzi5hoHkVznrYjSNPNiQHZDPJYiXMt9tO4dz/q8Ry+c+9RPO2pGS6rzuOJxk54VQ++JRE1L/zVZin17g2yKJA07S0ITvltzDcIxeqHHkdt+gl0m0SLbEr1CyxWq3rnxhAFXNc/SIlu6i4Xq4cVKddjRQzIMAtsA1GqL/IVxOqBkQKmj52sJ9hzmY5OkCcKC7+56GMW2Wp1QeMm7HR6kQqBnSBaJBR8ijEgg5zwuaDjnH2uCIFVRWwACNxs6BiQmbCKnZfpQbDjADt3As99LvD61xdely+0jrpAHseIC2K1dlbTLIT0FnB9nya7vFdgEYAQ2F3v4ky3TjKgzXeEVN0I7WmiCnDmWrCFgm9LxE0Cga7nrDY/UzqrRd9ZXXFitFsj9odpavLd9Y/1aoZGEowuVK4cG5YzPTYcVaxW1rIYkJobotkecTzbE+kERKWsHxu1L8wyQCm9g8vS161nS8St0RcBpLJ0DAi0WN1KRnRWK7VMrK5WoRcWWKy+oJGS2NDS29W6MaMQMxwsVjPnnc0Sq2+9FThxgrZNgF6sjqL+riZKkoR+G/F2Y3paj20uWmd1nPWd1QtEH0KhwOLI2ccFlKnfJOiaBMLQRJaEdGJ1GJrMag8llyCfNSdvw8x0qoHUg9z1JmVRBJnZ2r1y5MiqbUrVF1J6BRYHfG9JMmDQliSI84m52freGuRIiSIkSx00Ih9HHmxAphaO3nt29mvxWHsHMyLy7/4B9eZxdI7QZmtslrM6h3KnQV5k8lznjY2vPYQxr4t/9R934/U/7uOK6jz2L+2CXzPbGxsXvlidJFqsJiuyGEWQZtv7pN/GfJMmTxYAksUW6lYL3aNE52yaQmZCF9Qql3UMSHtwZ3vmDPDOd67d5urO6tELLJ6VWT2qs7rophQr+phBzurMxmQ9xd4rfewtL+HkocK9dKWzui7QTPzRB16djhZSrFRfXxQ1F1Zx5A4lVhcEuGEp+QOysAH93MwMZsI6dl5R7j28Zw/wnOeseK3ratF+1GFMXryz56yOyVz7PbE6z6weVfgoZlYD2D0eabGaYECbhNrIUHFitGeI6nkUCiwGdoLuEsE9Ic8VzscFtq0XjKLRxGqlsCyzmqTQZpLovOZcrK4p7aweRaFShcU0I9T3oiU2MO787GdXdMl50caCs7pOIVb3BHvRd2GNKlavXGQzMTsjx1ilqf4Mcmc1hbCcLyyY+0y1Chq3NrOppClxQet8kXdlZjXFvYZhsZo5/0SR7iSoxb977qG/PyhFL1bHMfR2V2LyzMuL+R45Pa1zqLaLs/oDH6AVv5Io6xdYXCI64GJmdUJ3401TwBEpFKVCZ5zVNTdCeI5i9dwc8Pa3Fx6I435mdVnoCTnFCZafUAWxeuCEJIqMs9oFjh49+/kVQgpsG74lEcbrf29SDhare/mc0AV/2kMUKksyG80kwP6l3bh24iSO3lrIAVkpVrsuBNH29+TUrM5+Jc5a2pTMaqWAOILnZuQ7eMbGzn3euHSmi7rXxeUv3IWf+29lXHlNCY+lV8OreNox0rzwV++SxTZ2lNp0zmqzWOSUXEwGHcy1fZpAbCMk1NwQ3RbRIlteXNAGEAQ6BmQIsXp6WmcIr9VmR3oolfp9NmVmdZ4rXHJiHbc0ymdrjkcVpzkmUkAl6xyr6eue94wOrnlegMsqCzh2VC17vpeBDPSLihGI1XlmdWAnCJdoXKqZEssWhAdmVueCzgY3DfTOg/UWLWZngSzDjLUbO/f0/8CHPqQj7JbhOPBtOXrmZ5IgSp3erqCyE6MTEkx9i9FYeQxIa3SXarGOw56JCKc7BGJ1lvWMDBUnQmuBqO/OnapWqqN7KHaFrJJZPXLdjXwRP89h9zxUnGj0aOXesep2yzVbj4sIxE+g7+ToZStvoI/99V9f4Wfo5Wv3x1s1L0SzM+LuoLy/8CxdMR0YvS8sCsAA4Ps0BYKNoJiPOStVsytmlElzPgY2B1upWeys3gbIKEWtJOnE6nzRxu/v4tJGIaL2L3JYrGbOO2G4fcTqONbzpW3hrI4y1GvqondW79tHP05oNDZHrH7nO5fHYY6KTFS/iE6DSKgzomPFjRBJuirXyR13wzl+CE5riU5TzGNAnAjROU5yH3wQ+NSnCg/kmdUVB6WKpYViihNMSr3N0cxMq6V0cAyIcXZ2Uk+r6isxEwe3WGBxSGf1unERxWJSACpBOlhYN+dNQ9Vx4JU/g++79FEcO5Iuq7DbkV5vfgPX1YUbh8jCHoTMLNpCZXm7m+CsVvd9G+LMaVTnj51zZMdq5HFT59pvNWZi1N1QV6oUAs/46Zfi/oXL4JcsncV3oYvVSQJ58Ah2PPF1LC4QLYhFkc5o9W2MjyksxSUaa45x1da8EN15yvgms+3biNWtznBFUddcuOo5q/ufZylQJDEgcWrD9S1ACAQ+dKTEKAOvlTm1QE8AjbvrF1iUysJ/ff1pPP8VNVxencex025/24OUaMQB6jX9c23cpsmsbre16GNcquEiwWA2TZEqAdvqf1++j/UXF7JszQKL6xF42cDs8uzkaZxoj2uxemf/8Re+cJUdVoTO6rb0UakJwHVRdmJ0KXaIFe+JQYC61x1d+OuJ1fqz3zWRYDqsjT7eMIYDx0pRcQkKC+YkCdLMgh2YBUyK3TZGWLbdvkPRt0csVNbLljZtmMzq9qhidV5s1TirRUCQrbxKdE9vJ9swfaxSyB5+FAcPquU1QlYWWHQcvRuA4JzVcW4AymXYIoNsjtgXrlIQs+pEaDYoYlvsnvu1XCUYz68Qq6s1cdFmVn/4w8A73rHVRzEc6W1fRfWbt9LFruU7F87KrGZnNQUsVjPnlyxDtP8oqkFCKgBPTwPBiAukq5GvvJM6q7/xbfj7H4RIYrpt31mG5FsPonbf7Re1WD0zo8Vqamd1u00vVs/O6kKblGMamSg4wsSANInEOiN6eJZ2aVFdZPJTn4VjZSg1z9Cds8b5WHWjc87XfuIJLM9WDkNEmQO/4sAvWXqiTyRWA+hv9cyL6AyIAUkzM8BerSKfcXstz02TCAfkbCeJfktrzoVWOKsrpUxHkQzhrG4kAfYfK+GVz53H0caErqYFaNEnCVCvm9e7ro5WaGxw//kqyMzSheWIyTOrKTcDJPd8G66VohIvkIvVrnvux9qYlxjzujrYD8B11+n7rFeyaRfDNotuF0lmY0fQwtJJomDCKOrlc1YnXC1SUnxpnY7ut5yIxlEL9IufOeg5P1tDCBNJArSb6ervS+qCg+V+ggNKJZAUWEwyI1bnbabeaDfyVUQfOI4WKzvrXBSm33LLLuB5uGyqg2ONsf4qlZRYiku9fqs24dCI1csyqyXNeZBlWkwsdP9DidXK3rhYHQx2Vj92bwu/cMfrMZNNLROrVyV3Vo863IhjtBIftTHtrC7ZCTqhPXonnosTgRarK06MdmiN1m4xsxqAV3GRZPbo440w1IvYVoqqG+rrmwJTDNGpBjq6h2JXSJoiXZFZHYx6HuTfVcFZrQttjh41tCxf2/d1Jv4o39cqi2zlkkJ7GGe1UsDf/i1Ove0vEUUCh/YXXt/Lojc/e57eDdAlEKuV3YsBqbkRmvMjTpZMH6IKMSAlJ0HYHvH8WlEEL6g6o4/nV4jVXtXTtVcuQrH6+HFdJPfBB7f6SAYj2xFqboTuLG1+/zJntZ0M3NXKDAeL1cz55ZvfRHTHPagee5RU/JudBa64YnuI1dFHboKXdhEsnqY73m5Xb2tJ5um2EW9DOh1tBKQeJ9g2vVh99936/2THqtTyzGpSsdqGnYt/RMqyLNfhWqmZNJA02XNWV93onK+tJ57Qua29a944q4O6BxH4vcdGRko9H8ljQIYpohNFcK1UD7DD8OzvIt+W6ha30CYD41vkKZ2T255b40Nb6awuK73ddRhndRzg8GHg+d87jvmo3BerkwRLcQljY+b1uVjddNdqcWiksnVhOWKk1PMoyvtM4pS0WO1G5GK1I86xD0gSLDUt1H2T2QUdrzQxAfgVLfh1Wtuj2OqOoIXFo0R2eLOzwfEsWJWSdtFRfGntNpLMRt0L0V0kuiHkW/QdaGeaG6EZugN3xiRf+wbaB04B/+N/nL0gZmJAyoUYEC1WD+gLhjjWYiRQqSy0AD7gQssy4Jd/ee02AawqVq+7/T93pJd0P3TZpRmOtSaA+fleu8V+qzLh6V0mo2YKmPO1FwNC4VJNU50pXHBWO76NNLMGxIBs3FldGiIOJjo1r53V8dhgsZrQWd1MAlTHbMC2UfYSdJN1YlCGpXhPtCxdaHTU3QD5ok1+C/S1U1eNupc8DHsLuBUnRnvUQqs5uQu6XtHnbJumlkfR/dobw4wYA1LMAofj0BTL7hXs64uqAIjE6n6/Zbm2NooM6GNn7z2CxpfuwRONnbi6fgYHv1iwVhezpYF+gcXuiOOtvL8wMSB1r4vm4ujX1jLyorsbKLaaJMA//MPZD+b3bwAQnqvv4aNM7pLkrDz0kRcsCtx9N2ERwE1GSuDSS/X86UInzSwdu0bprF6xIyRwEnQpIqcYFquZ88z0NKLUQc3uIInp7Gl5ccHtIFbHmXaMlNChE+mMMFRzQ5rto9sUKXVsGrWz2qZLv+hx993AJZcQnrP5oFGktGKS+TB7Y2eikzYpj/W3PFN9BkZMqrohoujc+pcnngCe8Qzg5Ml+mx3poVR3+5ORUU8wU0RnWQxIINFKgoECsBD6fd03uw9q/mwxSarlRQsDOxnsrP7YTQCA1nv/Zo0XmEJKgT7WSikb7PSJY8SZjUbk49QpYO+1E7CFQnxmoXesjYJDEa6LyYBGrE5S69yF2nXI9Q3KKJDYCuBZKapOhNYinVtZfvFWOF/5AoQ8h3N1YUFHHYxbvQtfCO2u9sraWd1uXOCLosZNuCNoYfEkUUGxPLPas4FKRT9GJFZLZWHC76C5QBff1Cv+lRdFlYMLPyWPPIFW4qPVVJj77NeWP9np6L6w1t/94HgWpFpH/ByGPAc6MI638nA7WJIE+NKX1nhSSiSZBdcu3AeNSLVuYbU4XtbXXXa5wNHWZF+4NztCxib0sVqVkhaSRr0v5iKd0GI1lUtVKksX2cyxbX0PWavvVsqIWucYA7LOQEnON7RY3SkP76weNbIjSdBKfC1WAygF0LuCRr2Hm/u35Zk6DiU1ersrMqvh+6i40ej1R0yti15mNZX4lY8L6hVtOqAwSKxccM/HMCOK1R3poeynvTZLdoJuQhGBYS9zVo8cA7LaIlt+QgwQq//yT5r45KHn46C6Eq+69FEcOlD4PlYeq+MYsXrEnWx5H+OKXiHf5tLohRABQBQE4I2K1fffD/zWb61yrCuiGop/75zIF5jyxb38HCCa1Pzf/ws8/DBJU5tOXrTwgq+bZeJgyMXqfKcNUNjVys5qClisZs4vExOIUgdVN0TSouvR4njzxGohiJ3VIoBnS5REROoolcqsFFI5s7YhUmoNgfL7ynd1Um79B4BTp4CnPY3QWZ1v88ud1aNWOs9Z+WFSOauDar8wz3rbsjdC7qx2onP+XA8dzPDyF7T7USBRhNmoih17XRrnDKBPpvyEsvRtuFrFYGd1oYN7w5feiIXDKyrH5dmMK1xJ4YBJWTKthZjWI8dWf4E5JuEWnNVDZla3Y09HUuyawPN2HMW9D5rPMHdWj/edPpN+B/Pt0QP9pdIORQHa61ZK/XU1GnRtJu3YOKtjtM/QWWiSbz0IJ4tXzzYfxOIiGkkJ9Ynl58111wF+HgMy6hbqzcYsXO0IWliaJupkTQyIXRSrR67ShV4ExI6gRZevbe4HtrMiS3OQWB3phaibDj4fN/zadyDuFK7xRkOLPhOFa9Rx9A6RESf8UerAL5sYkNxZPeBGLuU6b8cIVBWvcPy2PnfXvYXlLjtTBfuSKz2c7Iyd5ayuj5nzv1TS4u+o50G+jdjKdJ2BFsEkuhcDUjinBgk0vQKLGzsPXRcDFy2SKMPp7hjmG25/kXKdBkeOfwC0WC191Cb6ovLIETOmXQC9z7McZHqHwSjXQb5g4a4Q6UZ12YdhbyGkSrmDJz9n6+UNi4lrkoufhTGMjoMZ4X6Ti9VBX6zWW/SJ8poLYrUlFNLO6GK1KuaAmKi4QedWcvwMFqMSnpj6Trzy0kdx+Ezp7GPNF0LyAouRRxJdkzura25EJlb3PgLP21ix1UcewV2//VkcO5otf2urjI/XXbgbhnyh1TXvmWqOgH4z1OarzULKbSJWJwlSJVB1I3Spaq+YXUzLM6vjgXMvZjhYrGbOL1IiyhxU3QjJzNLg1w9JkuhOkjr+odMBxsaIxeryBHxLouQkdIKicU7U3BDdpe1xZzt+fEU28KhkGeRiExWrS3oehKHOQ6cmivS5RSpWmyI620KsNkXwSk6M7gyRSFeMATmXLZ5RhPj4NK7efzOO3X1Ku8SSBHNhFVN73J6AMfKXZia6ouCeCQIMLlRmvgsFgcPNKZw5uGLWaSYkRWe1b0uE8fqfhbzkcgDQ0R4r9/BlGZCm2i1iJk2eLxClzlBitetk+mObmMDL9+zH7Y/s6B1rz70LAK6LKb+FuRaBWG1EH99Ozjm7fDXSVEc4Uzqrk5aOdqk4EdrTdDkguTjhJF0knQ0OyBcX0YgDjO30lj38i78IvOw7Y92/XOjbG82MadzvYHGWaEISRf0t6pUKbCuDbBCI1aa43pTfwhLVsKiXJap/rNWFzlYeMJOMwwztxMNCXEEjdHHjHxZu0s0mutJFeaogguRCygYn/MtuI6YIXrVqYkCqtu4LBxyrlOt0xVKinfgoF8VqU2BvUAxI/lpAL7LJzD47BmS8Lygu+71zpRDbEtgSYYco/1ctz6zunRADCyxu7E85rtD5ygPE6kxZWGxaZxdUXEke/zBq5meSoBkHqIzr77NUAjqjxnUA2lmtRO88KfmmjsOIwtcyZ3UQILAlotaI/VceAxI4tHFTJrPaHqvqAq4UwzjjUMwX2fq7w0YTq9vSQyUXq4VAyZUDdwIMdazKhuMtX1yImqNl7WuBdXl8EQCoeJ3zIAwhGx0syCoOxZfimp1zOi837+xyoTb/XC0LNT9BMx5QJ2WI4+25lUsl7awedXyU6vo4oiBWb2gH5nveg7sO7EBJdZbfT1dkVg/rWC/y7W8DP/dzhbnryogZ34dtZaMtWBQIw+0Tf71txGqz66zmhuieww7kMAR+/udXPLhaZrXDmdVUXOCzDeZJR5oiSl3U3AjJPN2MP471nIHa/dpua3GCNAbECuDZRqSbI9qebAajdS+kceScBz7xCeAznyFs8O67Ic/Mo3zrzaTfV7OpXfvURBFQrxMORPJt375D63zMoydKRqCgigGJMhMDIhHOEPUF5jqoutE5TXI7n/48KlkLl1UXcOz2Q70LX8K4nahcE6ts9RSOrSe/AzKrlRLoqDLC1MPpIyuOY6VzJJ/oJQNiQKQ+jlYS6ByUtY41j4RwBwgeQE+snqzE2LsXwNgYXn7pE7jt8GX696TEUlLqbafvxYB0hl8ZOnkS+LM/W/Fglulzy0q1UL9AV3FWSnqxOm7F8CyJihuhdYZQrK5N9HdZHJ3d2C8vLmr36M7lCwfPfCawa4+1bZzVADDmdekE4DRFqkRvy3PdDdGcJejAOx1IZWEqaGOxSTQsl1Ifq7lUh3ZWxwptGWDh0uvwA1fcj298frH33KGjto4BmSpUWBwkfq5CGALPec7yY20lPip1E9VQsbRLdUA/O5Sz2i8cl9n+v+65mw8e8oXJyUk4Vgo5u9hrtxGXMDZpJqWuCwEgi0ccd+WiR9nVjqw2wSJblmkx0V7FWb1uDMjGndWOJ7Sov55YbaL/JieGaDt31I7qTDP3Ia+8Iq5jlJzaLNOTDYHezqiyn+p2R3RWF7Pb4ft6wXXULGiz89Kt+qg4MVoduj5GZjaceln3sy0CF2FetLFYd8MZMbs81d9NJTDXVFGsHtUJny3PgS458fAO4NUwu0wCt3BcZhwXh+v0CWahY1HWMD1rYc8VPlwrRXLsdP9Yi659ALVyikYSjHYtFDOri2L1iG7tZbn55hwYZLoAoLe9pSkeXLgE/+qSh3D8YGEyuEoeulJiQ+fA3/0dcPvtwH33mQeSBF3pouSZ7yYItPGAKCaNndWbQNFZfQ67QWZngfe+F3jggcKDUiJMXXil/rggsCW6o+7eYACwWM2cb6TsxYDEbboeODl6Cu7RAwBo1epOR4sTlMX1olDBtxO9HfXEPFGjkSnQ1KXLYNpkTp8mLlpoQoZ9FZKuRDcfOopq8xSoz61crCa7secxIGUXZTdBJxoxRzQnHymNjelJeZvIWR1KHQPixOhO0xVASzIbJSdGLDcupi3un8G438FVtVk89qgCjh8/q3iKJRTSLoUrC8vMM0O5PMyJXSoDAhlOH1txAUmptyT6yyd6gyb8MtR/s514hbDufpsAIIqjhWGO1YgEO+oR9u0DYFm4Yl+KE+1xYHERaLe1szoXRC1Lx4CE5aHdTrffDnz2syse7Hb1xDwvVEYoVqepLjK4GTEgVSdCe5ZQWE8UHCtFxYnRmd9gJ9NqoZEEqE+tkh/uujpHdbs4q70uFjseTVxH7iJzBVCpoOaGaMwR3MSM1XHc62Cp7dCsuq/IKPWrrs6BHrDYmET62jtduhLfc8l+3PdETZ/4SuGVH/1ptKSP8s5K/xfOIffzyBFg/369u0r/0UQ7H2sms7rq6GMdMQakLf1+Ti3QiwFZV6xeEQOCiQnsDFqYPW7+UKeDtvRQHjfPuy6qbohWe3QHsMxsOGVP99lEkQpnOasHOeFz8WmDUbauM0QMSKwgkGHnjiEatG14luwtpG6EhQXgb/4G+j4ipV5szx3QZaEXQkYshAgsjxUuBWrwzqgh2j1brJaji9W5kaHiayGtS9R3G9HHrpUx7nWw2Box/xjon39+McpsxDiYJNG7LIL+NRV4me5jRo5tWZmvPeKxpila0kc1KNxXHGewc90cy0JcwcICMHHVOHaVmph+dL7XrsysvmsfWqxujipWm7/renqXQS1I0IxHvL5W9lvmc42GafKBB6AUYAmFK6tzOHZnYWdQvvMw6LtfLaGQRsNfXwsn2njetRFOmzUAxDFaiY9ayXyGvq+/qwbNjr7t5qyuVLaBWF10Vp/DkHtxUdeb+vM/LzwoJeajCiZ3mT7QshA4EuGouzcYACxWM+cbKRGmjnZWR3QXcPyxm+AdfIy8bG4uVpM6q8MUXp7Vu0DUq5tiUjU3QpfCkXMeIBerJycBAL4tEXfpin9F7/0LBNNHgRad6xEAolNzGFOLpM7qxBT/qtWAZhzQCDQFsdq3E8RNmgOWsXZWl+yEeIeBDUdkfffTBliaiTHmdfGCZ4W4Z+YKyBtv0gPRcj+PrmQnoy8I5Q6qFYWv8ufWJIoghEK57uK6yZM4fWjF55ZnM1YKYrUtEQ3KrDZ9cUv6Z4vV5iJVq2xLHUasnqonuPRS89jkpG5lehpYXEQ39RDsndDPCYHJaoz5qDx0x3DvvehPGnJMpELPtU9YcFZKLVaTO6ttqTOrF+huNDJRcIRxVi9s8JrtdLR7dEUMCADA0Ts32uEF7hgxM6Yxr4uluATMzIzeZjH3s1xG3euiOU9wEzP9dO9YKQYc5ljz7fSiZHYsDCpaaNyvJ2Z8XL43QSvxkE7PQXW6ONEex7HOFMpjBcXD9FsqGb5PPPRQB4Gf4WtfTXvH2k58VOt6SuKWXR0pMcgFnqwfA7IspxboxYB018u/XemsnpjQos9JvRtE2/QFxKTptxw9nm22RhSr83Or7JkYECqxWpzlrLaEQhqvMUbKsl4cyUZwPGtwDEgC7C0vDS6uCGix2pZ60XmD9/H3vAd4xzuAY/cv4O4zV+hzNHdAVwRJIUQAy9TqckAQAyIl4tTuLzb7PnxLImyPOJ7NBeCKFtLaVAuNUiJTFqxaBeN+F4tdf3RhppdZbe4ved2NATvlokiPB9Zqsy19VMr986jkZ0TOanu5C9xORnNW532hv0KsHlQY0yx2LcZlZBlgX7Ibe0oNnNnf6B9rUVgHUCvJ0cXqFUULa1Wl5x6j7MDMxeq833LdoQqFAwDm5xGmLkp2gn3VBRx7uOAsyD+DgrN6Q074dhsLtz+Ea458DmdOZ702m0mAasmcR76vjQdEzurtJlZvH2e13oHbPYcdgouLwA/+IPDVr5oHzFxzKS7sFAVQ8lKEqUMsdFycsFjNrEu7Taz/Soko1U6UJKJzqiaZLqhF3atvhlgdhVpQLTlEFd+BXjGpqhvSTHJWQB2vAmyCWG0mDp4lEc3RnbR5trJICM+tgwcRHZtG/d4vEWdW23A9LagtxOVNEKvl6MV+DDJK++5XquiaMIQQSidWmJ83wtKcxJjXhf3D/wav2LsfX/pagOmwhl27zQs8TzvBCcRqqax+BXFAFyoTav3t5LmzetzDd+09gtPT9nLl1Gx37YnVeQyIHCxWC2Q6BmQNZ/UyG5kpTLNuhmIcI84cTI1J7awGgIkJfQ499ET/PRdsf1qsrmxIrD5LOO529aKNlen3vkR33aaxxHg1oc2szgssOhFaLbqOViYKrsmv37AI3m6vGgMCoJ/7G13gYrW5Vhwr0/EEVGK1MrmflQpqboTGIsH91jir616oxWqK2Z6peF8s/gVg/baV6l16x08KjF1SwdPHprH/niUsnWghyRzsX9qFciEFBI6jt5sPaz44dQqH3vNZvO7Sb+LOvz+lHzNF8Cpj+mBF4Ot9TEM6q1cdn+Rb/1c4q0tOsv6ugLy/yz+4ceNQnBG9c0gVxE94HupeF43WiNOp/P5d2WA+63r0CiwWHsuzoNfK8s+ycyuwOGQMyNVjM9h7yRACgWXBs1PE6cZ2GnS7wE1/p2AhxU1/ehofOfAi9KvKmYiZIVz767JKEbxSCSTiZzMJUKv2828DJ0E0an55Hg9W1rtiWiHR7o3cYe46GK8kWIzLNNntRQE4r7sxQKjcvx9429v0v9/7XuD971/eZkd6KJcKYrWXju6E7y1erhhvjXLt5pFI/vIYkGGc1UlmYzE2cX0TE9hdauD0if6C4LLPFUCtkmlhedTPQPWzems1aAF8lLlHvshmFWJAhigUDgBotbBoRMPLKgs4fqgwlsw/g0Ku8IYKvB84gIW4jGvGTuL0Y0YETxK0Eh/VgqGlQpXfjm0WA7LUQtVqk4vr7343bXv5LmTPknptbYMLbAt3PIyd930eOzCDU6fQvx8I0RsWAGb3xqj3BAYAi9XMAP7mb4C//mvCBvMYECdCEhM6q1MHni3JOwVysVopxJGCZ0mU7BjdUR0TOWZ0VLITdEdZ1V+F+Xng1a8mbRIAcOoUsVidJFAwzuo5OjVJC18p7VaeVgtR6qDuhvQxIJ6NiQlo0Y8iX7ogVo9cPKaAzhXOyBdtlNKDcQVs7P1nGZbmU4x5XeDZz8Z/fPlRfPixl2CmW8POfUboyZ3Vo4rrSYIodeE6hXPKdXVkw3oFP8wosFyx8F3XNXG6UwcOHuw/LyU60kW5WtxCmyBM1p+cyki/72/P7cM7vvyi5Z9bkiDNlg/C4Lp6e/J6k2jjrH7V8xfwgheYx6amMBW0sHDr/frnFfa9yZouZjlMx6CUzo4bG1txaXY6+joQeiEkatCNnOWtd6D28N10RWyVQtJJdAwIZeErAFKqfmb1Rp3V7baeME+tkh/eE6sv8OHjyo6VQqw2DkXb1QUW614XzUWCvstM7B1Li4sks708s7ogpABYf4xkrlkAOHlSYPzyOp42No1DD3Uwc0Qf41y30itfAKDnThs44ZcSuPFGHHvLB3Fofgz/7in34lv3mXPIbNPPxephawPkGsuq3UWSoJ14y7b+w3F0tES8zrHmnYnV70N3TSSY7laBgwd1VHGx+qDrou6GaLRHXLzJBcWKbwQvgnHcSoci0BPU1vy+egUWN5hZnRdYXGecJBOFG/Y91BMVB+E5CnHmbGhc/+m3P4zXuTfjGZ378MnP+jjSnIJX6vdVQdkaPQZklQVc27ORKmvkGJBmEqBeM5+958G3BtxnhyFfuPIdVAJdQJVk8C2lHme5LsZrKZbiYPS+q9jHAkMX2kyWOph/5DTwvvfh7i828b9/N8NsXqrB9AWV0ioxIBv4vtIUuOWWFceq7LPytUcadpv4omppedZ+1Y3Wjxoy4/+Tzbrun8fGsKfc6NfLlhJxVigGCcAtOTq6Z8hzodEAbr11xYPFaCwYZ3UyorNaSqTFIq+9QuFDLHI1m9rhusvXtWeOF8YpqxTBKznx8Ie6fz8WojKeOX4apw8YNdostNbKBWe1S2c82DbO6iiCvPd+VO+4hdxZ/fa3E5sm41jn4luZ7r82eMCL9z6BCSzgFfYduPUTZwp9yPLzM/AVuumIu20YACxWMwOYnSXuKNMUUaZvvAnhamHPWd2rpEwDuVhtimfkzupOk0gAzR2XToIusYhw443AoUOkTQLYBGe1acyzJaJ5OtWnf24RitW2jTB1UffC0fMIc+K4t82vFwNCceLGsRaAN8FZ3cusphKrVw46NuLuaDaxFAUYq2aAbeNFP/YMHGzuwEMLl2DXU0yFTd/X2wZHjdpZrfiXbaPqhmivM8jNwhiWUPhvvxjjVa8CTnfryy/O3EGUi9VCIHDNVrR1RIQkVpjwO/jSmWvxvkdeDnWqkK1h3F71oPC9O47OvlxvQG6Er3//6llcc4157MUvxqTfxtwZqau9rxCrg5JANOS2ufkv3YedncOYrESYL0b/t9vaoWilOvuV6HwFgDSSqHkhumeIKvZFEeLUgmec1e1Rc29zsgxSCjhCO6s7SxvsaM11I6qVs58zMSCdmCCfdDPJBy6XXAIAUDMbLDK5Gkb8czwLKJd1/EODYMCR99O5+EUx21uRWb2R6B7fTjA/D9Qun8DOoInpg03M/M3n4Nv6PAqKaxi2Pdwi+YMPAl/+Mr7/k/8Jnzz0fDxv6hiWlpRedUoSxJkNr+IOf6yFp/OP633vAz79afNkvsskWL4g6FjZ+t3LSrEawK5dwHS3Dhw4YOIECq93HNS9EM3O6GJ1HtWgxWqCvmC1zGrHgbeeEz7LjAC3sT/lemL9zOosQyIFPDvtF6EagOdkiNP13dor+euP+/iJp38Nzxw/ja9PX4X9jV2o1vqfpRWYeJcRxeo4teEVF5vzGK8RndWNOEC9bn7OF4VHnYPlWb2eQLUm0JaDC60ORX4hOQ7G6xkWozJJ8em04NTtLbhH618P8jP/jIXpBPjWt3DgjtP4lSv/Hh/4H4f1k/kui8LtrBQovWixge/r3e8G3vzmwgMmY3x5QesRM6tzZ3Ww3FldcQaI1Wax6/DiGHbsAFCrYU95Cadn+vFy7cTHslt63s8OeS3ccYd2ra/8u0UBuFbJaKJFlH12DMgwxepaLSxGZYzvLeGKySYOz9V6O5dWusB739ewBq/9+5FkNi6rLuD0KXPtJwmacYBqHjETBDoGhGgKum2c1VHUK24fEhmacqQEHn6YsMEkgVQWbGG+w41csGmKhVMhxr0OXrz7EO7+WtozYXrO8r4k8BXHgBDBYjWzLvPzxB2lEWurbkSbA53pAbinIrp+IcvQueNbGF88THesUaQHuZYczo00LKazHfqGvgE+/vGzDJAjkyR6IYT03JISAoBvScQtwuxXZZkMZELXfhwjUwJlJ0a0RLQMnRdo8m2IYIgt38OSf0n1uj6/mjQXmEwyEwNCkMmYkx+r6+o17o24OxYXtSNj3GS8Xv9C/MyLH8TbH/wB7LrCWAl9X1d4HlWs7m1RX8U9s46DIOlKOCLDK77PxSXfMYXZsLo8tHmlWK0PeaCDKIkyjHtdPDy3G7NhFU/cV9iZYNxetRUFfypOvP6A3JzjdqmQe3zJJZjcV8HjS7vxO/e+FrX6it9xXe10GKITb33qC6jLBew59S2cOVX4PsygWceASLLzFQBkZqPqROiu537fCO12bzGs4sZod4jE6tylaWWoOBE6jQ0uiOVf7LK8B0PPWX2Bi9V537dvn15gOrUwepvFbd+VCupuF40mwXeWX5tGTVEhjbN62RZ1W+e4y/V2tJnonomgi1oNsHbvxM5SEzP3n8bMmQzfMXkCZU8uSwTqb30f8DksLgLQO34OtXbgsr0SdiYhT04vixPIjzV/DwPeIgD9VaepdmD1JrXGoVh0U8LW19q6zebild0fR+3aa2O6WwMOHND3iLHC611XF9qkEKuVBbcWaHcmUQyILpZYGGfaeqfYmudBz1m9sT9luTYyJdYW//I6DY5aHim1Dp67QWd1luH0goenjU3jmonT+I7JE5ju1lAbL/RVeRb5KBOFfOu/t/yeCGDkSIVGUkLNrI3D87RBYNTdkoWs3nLNRjshEqvNmBuui7G60jEgQ4jV/+7f9bqDdY8VQCGzen25QjY6WIj0/aqZBHjTM27Fxz/l6VMnL7ZajAHxMy0kbUCs/su/1LfEniFqlRiQkh0PFNbXxeRrV1f0W1U3QquzzmdgBLhMWVqsrtexu9TEmfl+Mey29FGtFs6lYQplF3j44VW+t17GuD62sVqGxWjEugtmV1CvC87d9XIIySp3Vu9wMP6USR2rdeJEr90odeEFyzOrh5omZBlw9CgAoOpGej0/y3rO6mqlH91TcWO02jTy2rZxVpvzr+JECKlqcRmk1GvdZMSxdu5b5yBWnzyJxa6Pcb+DHUELC3PaJDkXVjBVWn4i9RbE2Fk9MixWM+syN0e8KJSmiFIHNTckbTeBq4UvK6YTJ44eRefwNMYf+zrikM4BHWXaWV12YrpiiIV8zjRbZ8JwDrTbWOZIoGB6Wm/f3xxndYqI6vtC31ltZSndx2q+r8BO6ArAxbGJARH9bdQEqwG9wln1us5oXaJZYEkiZQosEi7ayP6xKmBjzuqlJSzGZYxN9l0XP/bx1yKtj2PnLjP5yDOrR71u8y3qxVxC112/iI5SkKHULn/Pg3XJHiSZjcaRggi3ilitV/fXyU1TCjLOMO53kGYWfvxpd+GWLxSGBkmi3V6lFWK1O9hZDaAvDhimXvQU3HrqafiD+16D+viKIUi+yDCMWI0qqm6I3eUGTn+zkLOdu53yPHSqhRClkCqhndVU/XangyTTBbWqbohWl2ih0UwcnDyzeoPFfpJGV0cfrdbx587qAdEyW04+AdmxQxcunCc4D4rbvstl1LxQF9Yb9XMoiNUlJ6bJWTf52nmBxd73tt5Ci3FWj5cijI8D2L0bu4Imprs1zIRVPG/qGMrlFe/VcfSOrkF9+OIi0kxgT6mB//v2Bvxrn4pLKws4+aVH++8/F09MP5Al639nycFjAIDoyGn882/ehslsBjPTqvf+V+bUwnHgiBQyWeNYlep/lwVBddcVJUx3a1BnpnGsNbGsiFIvs7qzQSvySvIFpmqgF9lGEbxyejEghcccRy9arPUZnGOBxd4fWWsHj+mX3Q18TJ6TIR6Qg72MkychVAbs2IEXvesN+H+feg8m/A6qE4U/mi+IjiimtaR/1gJu/tywHDiwouvIndXjfaeub0tEo0bCFIrgWSV/4xFp67QLALBt1OsYOm9/ZgZYWGvtcEXBvn4ExPpyRRIrzEcVtH7pt1B9xj5UqgLPqh/Ho/e2gUZDmwMm+mORIMCGhKQ0TuFnXezcoXSN1fxYVwrrDlFm9YrCsFqsXt9ZLTMbFS/uO6tLSzi9VNLXZJrqdiuFNjYw3gKARx5ZQ6wu5EBPjme6Xs4o11eaLs/adxz9uSb24Httq6XF6ikX2L0bjpUiOWkiwKREM/FRm3B67epdQUMc0+IiVKp3XWJsTOcMLiyY72t5znzZiUnKBQF6qrgtxGpz/lXdCCGVAavfNB56iLDBUZzVR45gMS5jwuvoceWiAqTEfFTBVGX5ieS6Wj9gsXp0WKxm1oXcWd0rsBghkYLmIlYKsdRh+YEtaRxUho70UPdCxHONwS8ehijq5WsPfZMcst2cc8lgWo/N0CNOnQIuu4xYrDbnkmdJxITFO6URq13EdMdrvi/flmQZ0HmBJsezAd/Xg7T2iG0rhTTJtHBVq2HC72Bxicb9KeNCZjWhWC2EAup1WEIha5+Ds3qqP0v3Agsf+YjAy19uHsgzq6liQIoTEttGxY21+LUaSYIkteDYmd6ivns3fut5N+PnP/l9/UmjlOiudFZ7SkdrrNXXGpFkPAhhWQo/cMX9eOKQWPZ8IymhviJDsTyEsxrAWWL15GVV3GtdDyUsjF1aW/47rqu/v2HE6khnfO8uNXHmUGFmkDsUqcXqfDDuROeUWZ6mqxSKCUPEqQO34mmn+nqF3zZCvstCZIMFylUOdL7hYDLorMh7MAiBip9qd96FXDgmvydOTuKS8hL2nyRYcTV5qo5n6azikkQjGjH/1rQLAKhWMeZ1sThLMC5axfVXGZSLXhCrx8YA7N2LnVMZZsIaZro1PPcN16BUW6E25u60Qc7qhQU9oXtKHW/+jTHghS/ElbU5HP7M/XqQUSxaaNoc5CiV934bABD+6QfxV5+s4Nef/mlMHzJvsNvVfWy1cFyOo2NA5BrHqpTOpAaWi9X/+oWYzqbwwPyleNlnfg31qcJn4OjaE43uiGJ1fs1WAxN7YI0++Mqys2NAbL3jQkZrx3Usi48Zlvy7W6tPyMVqb/jxg+cqXWBxyH4mfPQwAjsBrroKVz+7jN/85Rh7d0hUdxVC1vP70SgKkBGoqsHyeyKADfWJP/zDK0SYJEEjCVAfM5+RiT8YlNc8zPEmea5wEOhYNwoFrCBW2yVPO+uHaFfKdTJo88xqb0UMyCBndawLRD96tIyrnyaAffuwr7KAUw/M4vN31dCWHsq7qr3Xl/xMF1gc8vuav+lLmGocxCXp0X4NanPN9s7pPFZilIUmI1b3CvYBgK134647LDLX185aqMVqx8HuHSnOdEwMhpRoS29ZJE5v5WiYic3Jk3jkznl02iv6pBXRGhPjakNFslclj9ty+guHgTtEsTqlTIHFMsZ3ecCuXbi8Oo+jD7d6x9pMguVi9bDRmXNzZqeOAnbv1uPfQ9NAHKOZ+Kjmp5bZebbROM5mE/ipnzr78TDcJjEgRgDWYjXtAY+PEzurk8RkVqd6UXwj88RTp7AQlTH+1CktVi8JoNXCXFjBZHX5Oe96gsVqIlisZtZlfp5eUFTQgmKibJrVfSmRpH1xIlogWtI0A7yqGyKepROro9SBb+nMajKxeqU4Tdbw5jAzA1x66eY4q32bVqxOhAfH0pEVSUhXCBAAfDtB1CL6EPICi74F+D4m/A4WZkevIi8zC66dAaUSJvw2FhoE7k+lIBPVFxSp1lak1BOxWk0XJtrICv/SEpbikh7kFnjJS4Ddu80Pvk9z3ebbUldUfPftZO0s0Xyyn+f4eR5+9EWH8PD8HvQqCUmJMHXhV/pKQ29r/VqD/DiGVFqguvLSBJdV5jE9XZjQJAmaiY96uTDgyotBrtfVriVWTwL3PVHHD/+IjfGpFeeSmTz13Pzr0G5mqLoRdpcaOHN8lYrvgUsrVpuiLFU3QngOGevz88Cv/Mry1JZcHHTLDipegna8sYJPa5L3BabAYnsjYnWng7moiqlKuOZ2/XKQoSOJinRtEirPUZicxBuf+VW8567rR280n5jnxaTqQtcGGDWgsuCsHid0gadquVhdduKzxYYi5nycKMfaWS0Edl27wzira7jmJRN46lNX/M6QOa3TxyKc7Ixj925zPNddhysmmjgyW9H59W5BHc1jhgbE4shQf26nF3wcaU3hVZc+gpnj5kBaLS1QjS0XlteNAcldxfby62XnVVVM15+Gx596A37yX53AT/1yIQfE1bUnmqE7mricLy6UHJQCE1FAsAhylrPaddePAckXZM7VWT0gBmQjWdgbjQFpHJhG3QuBK67QD7z+9djzgktRqxemuhuMPlgV49BcJlabmJ1BY8S/+zvgC1/Qp8qBA8Btt61styBWmxiQaNTxbH5ueRZ61VGJnNUK0N/9kEVRoRRks4PmyTWKoEupd5+W+s7qwEkQJQOc1eZWdM+DAa6+GsC+fbiksoSTjzXxho++Fs04QGV3X6x2fUsLSUOeWzOfugM7gxb2Nh7DqRPm2smvlQ3maxeZnQUef7zwwGrxRfki23qFYc29qSdWA6jv8LTbvdHoO7arZ4vVKh6ioPUf/R+0p9twuyvqdaxwwgcVW5sjRnRWyxX9lu+pwQUxu11dKD2r6R2Su3bhqtocDj2e6AsuTdGVHkrVYmb1kPOP2VksRGVMjGfA7t3YW17CqUeXgDjWC1f5qZXfZ6ONzZNuuQW4+eazH9+WzmrC6D1A14zoFUulwCwy2ULp738jdW1aLSzGJUw8fSfqbhdLLRuYm9Nj5h3Lr/teH8Ni9ciwWM2sy2Y4qwFo4S8jEqtNzqJnG+FrgUioNYPrihMjphIUo6h3rCV7A1WIh2h3GdTleImJY6Ba3TxnNeXNXWZ6IcS1UiSEDnsAepJ/Di7NVckLLBpn9YTXwcL86JMcHamgtFjtdbDQJBCr80G+SGkXbQoxIL69QbF6fh5LcYCxvavk9Ob4Pk1sSb5FPVgxIRHrTEjyLad24fk9e2AJhfTE6V67AJYLP4NEBCNQ7am18eLrM+wqNTG9UPh9KdGIS/1q5+ZYK4OKyKwVAzKltb3f/E3gf//vFb/j6jinpDv4mmi10Beri5nVeQxI2dNbRztEkR0mZqfqRuieQ5tzc9p8d+ONhQeTRN8PPIFq3UIrCWjuifkuC5Gi7oVoraELrEq7rfP3amvf+Hti9QU8CJfdREfmjI/jxXsO4+DiJNqjFjQ2EzLbCMD1OtBICMTq/NqsVOgiS1ZzVg8SgHNndSXp5TLveNFTMBtWMd2tYddeG1/+8orfMTnQg+7lv/OPz8NH9r8Iuy4x/ZHr4sprSrh39gocbk6hVCocl23rCX93gFht3MH3ZM/Hd+06iEm/jfkZ89k1m7qPnfD7v+A4Wqhd67TNhRdr+XnieUAoHTwx+SK88icvxwtfVJg6WRZqXoRGHKxbxHYg+Y4Q30ZQtrWLcNSBTJqa6I0VmdXrZZcrpfsOarG6FwMyvJDX20Y9pKC4dHgBY263V1QVAPbuRV9IMsc5TMTMuuTO6hW7jYapQ3PoEPDEE3rRcudO4PbbC0+ayK3aWDECI0E0aiRMfm55AiiV9O4l4hiQXKwemLf/6KNITs6i+e6/0LkSq7TZkR4qtWJmtUQ4QKzOz+e77/N6YvXe8hIevuU45roVHGtPorKnv5NL5KHsw9zDlpZ0/1dqapHy3pO9310WtWTE6o24aj/6Ue2w7x1Gu62d1ePLF+8cK4Ucwlm9oxb3xGoxVtfftRGr24l/lrPatdLeot96zM1m2Bk0z47Wy+cIfr9fB0ATA1KYavTi7Nb7vlotPLywFwtqTC+27tyJq2qzugZ5fq4KQFj976vkxOgOc33NzWlH7bjoO7Yf6wKLi2glPmq7zC60cyxA/Y//qIcRxa7ORGJvG2d1qnScXdimGxeq4UscDE8cI1X9AuTdjTjBWy19Hjx9F2xLIZMpMDuL+aiMyV3Lv3N2VtPBYjWzLpvhrAa0WB2nDlkBuDxXOHASmrxHoDfAqzgRhlh4Ho7cWe0YkY6i4jvQ/xzNQPxCd1ZLqQuVUBfvVDDOaqp2lUKSAI4wYnWD6HMtOqupbuzFyuS+j8mgPbpYbUQv18mAINBu7bY32qQc6F2zjie0+Eux5Rnoj/RqNVMMcgMnwtycjgHZV1v7NZ439HXbaAAf+cgaT5otmZUVearugMJX2lldGM3u3q0LoD02r3/O37+zfKKT/81VMd/F3rEOPvJxHf8w1/T7rzcFFuuVFWK1G6O9npi0jrMaAK66Sm/vW4b5DJLOgA43y9DqCFScCHvKDZyZKQxlcpGu4sO3JMIukVhttg7W3BDd9dypazA3B7z61Vgu9hW2xns1n24B1zir3aqPca+DxdYGFpg6HcxFFUzV1+6XgpLQW6gvYGd10kl0YdwgAEol7Co10JoZ8bNNUz3JMVvUx8cUFqPhioqtS8FZPeZ1sbhA0BeulVk9YDdEktmYqCa9a9P9nu9GMjaFmb3Pxs6dq/zOoH7LEHUyfOnkM7FrX188vub5Jdx06Pn4n/e8brmIMsxiGPpi9fQlz8XYDS/Wk8cw7m0Hbyc+KpMrxGqRrX3aKmXGkme/l127gDvuwNnOcgD1ss4aHrVoXy76BCWhhZlRz6ssOztuqid8rbMouhnOarNNfEOZ1a5CnG5ArD7W0M7q9cRq46Ycya1sXKq10vIYr2Hq0EgJtJoZ9t94L37gukN46H7ZH07lu4JK5kPyPH0PGxCBMZCi+7Vc1tcAxVh2hVhd80K0FgeMZxsNSGWhlfhofvyf8aY3rRj6GbG6XOu7lX3b5BWvQ37pfeNbjharn/lM7C0v4WvTTwEAPNHahXJ9+SK+UkNGUT74IGbCKnYGRqx+zJhWpERXuihVCi5wO0G4gdiWb39bRyL+1V+ZB5aWdFzHZGHcNGhHiDkWmdn42VcewItfbB6r6wrWaqnRy1nvLQIAPbE67gz+DObDCnYELQSqu3zanpsoAvPZmvHeMG7tnCgCvud7gHvu6b8XvSOk/zkGXrZ+nB0AtFr4z199A74xfYVebN21S4vVJwq7wMTy+0zJTtAdJn7NiNUTO2xg925cXp3HkccjYG5O77LYa6qFWxbKboJO4m5onnTffcB3f7eu55STd//bwllt3MpVJyL1ymUZNn4vGkTurLYyvVjR2MB9u9XSUTJX7dALM5kCjh/HXFjF1CX+spf2xOoLOS5vm8BiNbMmSm2Cs9pctJ5N7ay2TWY1YcE6s2JcdmLECZGobJzVfk0XautQidX53Wx8HAqA6tCK1ZY1uj5ZREq9G3FTnNW2HD3jL8cU1HKtFK5IETeJRg25WG0RFM/JMYNV17cAz9Mu6MURP4d8Am0DsCxM1CQWosroi0x5MUjXQlC29JZnihFOfkLVatpZvZHtXblYffnY2q/xfd3HDMhSBYCTJ4FPfnLt41zVWb3eVs88S9Ra7qzeW1rCqf39TL68rWK7y55bSeG7gOPA3r1DZ0+e7LuHGvEqYrUTob1edfp1xOrJyd48ajmuC2+YuJ1uV7uEjLP69FxBAckXWCrGWU3VFZqdC1U3Oqfb1tx0imfsXsRCUYjMF1o9XbBvw0VB1yIvsFgrYdzvYrG1gYiCdhvzYQVT42t/B8LbQNblFpF0TTHSIADKZS3Uzo0uVhe3PE/W5ej5nCjE3lQqOld6VAc40F+08ftCir5mh3BWV2XPWQ3LQlap49RiqefYW0ZetHA9vSPUBbW/OXsZdu/rX6vXvGwH7njdO/HQwiWojC3vs4ZxVuf9xMySh/rush5UZBlUqw20WrqPnSzkrueiz1qndi7U2md//i94AfAv/7KGWF1JtcN+lPMgFyp9G0HFphGrc+EvWMVZvVkFFikzq70NxIA0m2gsKYyV42WroK95DfCKVyw/zpITIxxld9RqucJG+Fo3Zgf6FGk9cgwHPvUgnr7wdbwsuAf/8umw/6RpC4DOrHaS0cWqYq5wqYSqG6E9T5tZDV8vjA7cFWLGG80kwG1f9/DhDyt88YvLj7Wd+H2xOo8ZStY/IWWiYIsUDz8q9DW6axcu+e2fwjemr4QtUhxpTCyvF7yRjPEHHsB0t45dlwe4pLyEk8f6NULaRQE4LwQ4jLO63Qb++q/x4D8fwXuvfQ8+9D4zXlpaQisJUNlRyFkftMgG9O75L7lmod9Pj4+j5oZoHpkHUl1noroiEsez5VDxhotqDONeF+NuBwszhc5+ZRSK56HuhmguDX8Pe8cvn8Z1e2bxX39J9dpcllkN9BfwBojVSWbjzqP79P2rXMZTdrdxcGFCuwUAmIoEGpNZPVRsy+wsFuIyJnZ7wNVX44r6Ao4elMCZM7rA4r7+vKHsy43FpEUR7LCFS/ZkOHWq/3AYArXaNhGrTR9TdSO6+bdudnmMFQV5ZrUj9GLFBsVqABC1as95ox56GDNhFVP7SsteymI1HSxWM2vSbAKV0edhy8md1SWHVKzuOattSZeXlMeAuLRidZQ68OrBORVhWK9dAMD4uBZ7WnR3NyHMdkzC82AzxOosSmCLDL4l9fdF4dTtxWCYzOpRCxYa0m4MSygzsCU6t4q5hHlm9ahidZ5Z7eiB50Q9xUJUHv26LbisSlVbV2UnEOmUTHsFFjeUB64UsLCAZhKgetnE2q/LM6uH+M6kXEd/NxOHSnkVZ/U6IoJ2VhcmAXv24JLKEk4djvR7WDnZBYaOAemJCE/RTiR14An9c6eDRhKgNrZ8kO8N2sGwhli9Y8fqgk/+WtdKEXcHi9Uts6V1R9DCbNPvX+8FZ3Vgy6EWFoYiSZBmxll9DouMczd9GZc/8jm0ZwvXThwjTm14gaDNEi1EoYyXYyyGGxDS2m2dvzexzmRz0ALIBYCMdZ8N1wUqFS0kLYzugNZRS/q+PT6msBCXR7uRKQWZ6t1mKJdpCriaY80nZACGE4DN+fh9z57Bb/xG/+FqVQt+1mrDlbxg31r9FgAsLiLJbChY2LW78PevuAKXVhZxYGnn8m3vpthsO1x/lpq7uWcWHb34NTWFmhuidXS+L1ZPrRB9rAxyrQKLeR+7irP6BS/Q6x75zpAi9bLU2eWjitXKgltyUKpYWuwYdQG3J1avdFavEwNyrgUWhxWr/Y0UWATiYSf7p05hKS6hPukuc08+97nA85+//DgpiuA1kwDV0vLPtTxEDIiMM7QePIwDjV24uj6Nn3vKv+C9f7Con8zHQOVyr03fkgPzmgeSL7K5elG04kSDHdBDtisA/d0HwXC7QsyYupkE+OKJa/B7L/4n/Pmfxcuel8qCGyx3Vq/7GSiFRAI7ghYmJoAJM4Tb+6xJdFMPz548gUxZvY81b1cINfjckhJ4+GEdA/LSp2tn9RnRe65VjNawbZSGKAYJALjxRiS3fw1SAlc0H8Qlrcdx/7d1ZEc78VDduVq/tX5m9bI4DgC4+mpM+h3M33cUSJK1ndWDxlsAFsMA434H434Hi48X7L/5faYgVk/6bczPD/4IAADHj+PWTy/id/y3wV88o38vL7JZdFb7Spta1htzhCGkstCJ3d561RXXVnCkNQU8+qhu01q+cKdjW4boC+bnMR9WMLnXByoVXPHsMRxpTOjM6jRAdXd/JaQcqA3FpKlbPg/MzWHv8W8sE6ujSJs6tksMiMxsVNxI74KgmH9Df4TkzmpjPLHrFT2fa26gL8y3e1UqwNVX64XPRoxvzFyJ571khVi9wRgrZm1YrH4S8fa307Y3Pw/s2bM5mdVWraJdZFTO6lSLJ4FNGwPSd1YTXSphiDiz4Y8FelJKJFarMNJb2sbG9LYW4mq85GL1Q4+hdORRJOtNcDfaZpzBsTJ4dopIEhQnAvpibZ5ZTSRWR20J39L/ka1CF90zuVjdGPH8KjqrYba9xyUSsTqvTl+qOehKd/Q2s6wv+lSrG1u4WlrSxYIsG1bgrf26PLM6HBxbkiTraA15ZvWKGBBHpOtnVmcW3ILbBHv26MnTMQk0m8gyQNhiuRVhGGe1srQjHwCuvhrjfgdLDxzVP8/PoxkHqO8826G4bsGfNcTqeh34/OfX+J283UGZ1e02WlLnOjr1MtJM6O8Q6J9bFd9s916/qaEpVDsfanJTZH4ec08sYspvA8VdLz23YaHwFZWz2jiAx+sZFuMNRFXklc13rNN3uK6+31zIzupYwbFSff4bZ3V3cXSnatFZ7fg20swavZhUvmMiCLTTiyK6Jne8ef3s14o7XGZ1rQbs29d/eN8+4Ed/dI3fGRQrAQBRhCSzETgJdu0qPF6pwPFt7AhaqEwt71+GyqyOU3hWgul5B7UagKkp7AxamHmi0SuwWNlZUKjyPnYdsVoqe1Vn9QtfCFx99er5mbVKtmFn9WOP6ZzS/pvpO6srNQtt6ZHFgCxzVg/6vrLs3GJA8pWMtbbgmfG06w0/JvE86LjAYSb7J0+ikQQY2x2s/7q8CN4o6wBJcrazesic9WR2Ca0mcCi+FFf91PfiusmTOH5K55qmSy1YltJ2SqBfYHHU+UdRyCyX9e6NRYK+e4WzuuzEg3eFmILOzUufia8uXIufueoLOPJo4Z63MsrMZOLLbJ3PNcsgUwu7Sk1cfXX/dZUKUPMjvHj3QVgi69WAzNsfKgbk4EEgijBj78bO5+3DvsoCjs3qHRx5nFvPrdyLARni+3riCTy+uBvPeEEVCAK8oLYfj307RLLQ0qLyroINvGdkWKe9PPorKIz9nvEMTAVtzO+fA+bndQTleEFQc114lhwsVicJFjo+xr0uJrwOFk+u8315HiaDNuYXhzxnjx/HfFTGVNDGU50jOLBfrVoYdqjManOeA+jtDAqe8wwdH/Ltb+v4hqBwr85z5ocphtjpYDasYsclejx7+fc+FUdaU/jogevRzKrLYqzKvl4kHFakDO9/HIGdYG/3IE4f7ndMYajHy9vCWW3Gx4Gt58xUB70pYnWSIFMC1lhNf//DFkxP0/6u9XIZeOYzMeZ1cbpTR1e6mHra8pVszqymg8XqJwlSAn/2Z7Rt5mI15Xy0t901H4xRiNVmIqSd1QldwTozeQjsBJkCTYcTxz1ntXZo0uxvSeNUT8zrdS2CE4nVSgHIMj1pINS/5R1fR+nY40gadOFWMkrhiAy+nWg3DkWsRM9ZnertcpRitS3NRITSWd3PrB73OlhojHh+5S4XI5BOTIDGWR3HPadPqeagkxI4q/PvylZAubwxZ3VuA7EHjIosCyU/0+L6gP5gXWd1kujto6s5q9dq1rj+lgkp9Tr2jnVwcrEEHD+OMHVQ8leIEEM6q3ui1tVXY1fQxPSD07oDWFxEIwlQ37Nc9BlYVG21SBJDL2JgJXmBxSFiQFpJoF1CU1MAgGx2vvd3pbLg1gJ9P6Aa6McxUmWh5MRIUmtj94OvfQ3zUQVTQRtQhe/PfPaeL8w5KxEtEtwTexEQNsbqZoFpI2J1VMHU7nWuhfw7vVDF6ixDklraIWtZ/RiQxRH77+LuFaC/EDPK2CBv0876i2HnkIl+FnmRTa8vpJSdGJ318jnzXRbB8vvGX/818NKXrvE7JlZi0Bb1JLPxhuc8giuvXPHc296GK59dR2WisKhl2zqypDugqFqUoeLGmJmztbN6xw6d4X9gCQhDdKS/3FltWUb4WmOxcbXdK4YrrwRuuWX146iWMzQ3KFa/+93AO95ReCBfZAsceFVPT3KpYkBKy92Eg2NA7H5hzmHZlBiQjTurxy6prP+6XFDc4I6bU6cKebK5o7ay/P5dchJ0BjmrFxpoJT4W7Km+uJFIqMUltKSP/5+9946XZDurQ1fl6nj65Mkzd8LNSVlXCIEEKBAkFDEPMGCEn8A8kgFjwGCDwAEeGQuEJWEZkBA85CeCJYEkJF3JQlfh5jgzd/LMOXNip8pV74+9d1V1n67au6pr0J37zvf7zW9mOuzeXb1rh/Wtb612zU+Af0WBofiEqTiteWdIE9K1GjFa7VbA9hsDq2uKxwd+KKjaDRoIGjPoGFZiYB9FyfdMXQNFiuAHOeOGjq2l+oDoVadi32ENL371LOoNaTTRpJB9PdO9zwwqh7YaLWHpIAGRh54GrK3F42DEDFL1uGaQke3gvseauGTP4eCdc8DyMubNAdbP9vG69387vrR2aISpy02yAZOZ1bUa5pZVrFl1nN9sIoIMqZPafInutwYDbDk1zBpDIit2JbWxZWufkmZWD4XB6v6ZNTRUsi4fMy/i1Je7iWa1mnxf1VBI4ooDVgPA/tlBIvly++1oaA76j5wl2tLmmCmqCGksIoakV+0WFveTdWruZbfjkc19+I6PvxUXBp0RTkZsQC24HgzkFhqqS4gn96/EjztXNtFuBNcRs1qGKtGxVAXpAglYrfGPXOJBL6jUbonNWSwGA9iBhpoekqz1TTdhRrfw4Qu34Z7jaxjNhgGyrhJS5i6zeurYBaufJdHtApub1ba5sQEsL1cMUnoRYT62WiSrXaHBom7IZKNQsQyIKtOJpqK+ujS7XVNcWG4FYHUUwXPC+LoSY7lqrkHwufugXjwDbXutWmZ1KKOmevAEXKiF23RDAirLAcmkVwhWx8xqHuNTMJxhAEPxCDjlVmQumC5RpyyXqS8BO0BTsLozJxOWZhUyICFxp2/PKqSEeto2498qBGo1cm2HgpsEBlar/PuxZkYErOYACblgNWNWp8tSRTSrIwWaknpekrD3kIbLwxngscd2tknbjTs0KRhAxZjVe/ZgacbG1dWInM43N9F1a2jtTblU8SRLAAR+BEUKM7QDMoIdnhzOwXw4JKWybRmYm8O82cfG09vx9/RDBWqTgtVV+QIwtrJE+1YESDp3Dut2A/NGH2rgJnOp58EN1RhEaGk2ehsVTLSULa/qMrS6Br9I8q7fJ2Yxe3Kc0DQNshQhdJ+hjJEYAKbjk4HV21NeW2ompWh0TGsaVBFDUE6b3hizuhJ/ZFZKrSVgNRcAzgCr9ZxiE5G5gM3Nv/LNn2W5pSTabRw+ru8wwaurLgYOR6fWDdFUHVxdl2IZkOVaDytPdXGuP4s1t416I3X/SxJUlew/Jh4gGatYnvxddvSdhmxo4mZtILfivfcSXC6WUmXrt6kmh95pF/CYWb3TGyEvKXqtDBZHkqICQQwWxZnV224N7f05Bsm0n2Xk197zHpK0AQB0u+j7Blqzo9I1RAYkvx1vgzBnt4IWZo4RceEZuYfuWbLOtpup7ypJMI2IbyzHi7QJXr2Opuagvz0lgBKGQBQRMEaWE4k0noQRnQvOrTcwv5esMbo/JN4t7HeWpKSEQVGgSgGpnsraJ1Mz2RfuPY/v/M7Rp37iJ2W84K13odEY+70VRWyuvXoVALBqt4jB7N69JCnx5AUKVptozozra+fvI52zV/DWT30Xtmp70ZmVgKUlLJh9rD/dxdPdOZzqLo0awzKppbwhwPYnxuhnzx1o4MPnb8cPf/bbAE0dLQ1RFOiyABg6HGLLraOjD4lh8yp9QxSNJiwAQNOIDMi22Nn2yYdd3DhDANrj7VWc+sJmSr4oGUuSJiA9Rp/7x7f/ffI19+3DDXNdPLm9hE2ngdZMql9Ms5rHhLcsIIqw5s1gYYm8VmrUMT/j42v3PkGA6VTUaxEh4Ajes4N1G03NwZ7aNi5fCuPPtH/td9G+8sT1waymCQZZovdoxWC1WcERMY6Ut1FddTHoC56/+31qrEt/15kZzByawV+v34OXve3Wna/nrYm7IRy7YPWzJLa3ydxQJbA8GBAmZZUgpW1FMBQfcdqzilmYGixqs7T0f1Ads5oBlQAqA6udMMWs5piGCAUr95Wj5FDereYa+H/+QahSCH31QrVJi4jKq0zjyD7eJmVWEzaOWpn2qx/JUKVqNasJWE2Z1YFazU3GQDpTBXRqLjctUMfaZBWZDZOY71XArCYHVwlq04QfyZWA1T5jVtdqdC4Q2yS8+09N9FwjAWxzolYDLAHzK89LXvLgg8CpU6N9HXj6DsMfEc3q8RL1fbd2cGnQAT76UWJMNE4sEzJYTIEIkoSlQzX86ckX4sInTxEZEM8cBQE0jcumdD2JzJ1lwGoRZrVvkEMiA6hOUy05Boo0zYTlVIU7rOsiiCQoUkh0OousXZcuEbayOUBH7mJ7Kxrpq2bIgGmirdnoblXQ15QMSAx8FWVW781BKEXlWr5SwdZuqrVfGVgd63MmYPWcMcTmxnRmbSQJFVKw2q3mUMb6WoZZXSuwLxEEUvKAyiNHsGMubGhOfl+jCJ4boanZ6HalmFm9v7GJi6dsfOfHvw9fd/zsDnMmVcsxPcphVueGphH9W8F1/OGHgRfc5eA1XzNIJJEY+7WmFr9nsyKTWR3A93I0qyMZak6uamIoCiQQ34iJkZ7rBEM3JHGDxUuX0HVrmDmS4zlB+2kqfuHt/LlzwOOP0/90CTu6uTAqXSNimu5vE8DDlQzoLQPodLBodnH1gUvouiZazdHXGwam3yOmq+5qNZK0mtbENQgQRSnskxIkuHMX3W88eamJPQc1oNPBwdoaLnz5KuD7FI8eTTApCkjClZMIOTa/hVe/evSpt76VyBg1JuyLhPwBKJ2+75kkoXbLLTjaWsPTHzudkA7aatymqXhcEpJ/4Qo2nAY2jT1EX3t5GfNGH2tnB/BCBYoUjJIO6L4od45NJ7tSMXe4if+9chTn+3OQxjNQbB3nkQMGA2y5tUSzeo12JN5XpZILTLO6K7aGPPGkhJs7V4AXvhDH2ldx8okA8H2S3O+kvjDTGBdhVi+l7hVJwg2HAnzLh/8V3vHoy9CaS01sTLOaRxqjg3rNbZOEBY0PvKuHn/vae9Fsjc5pMbNaEKzur9loqA5hVq/SvmxtwQlUzGgWnKowjWsZdH6K54OKkGV/4EAdbMHUw0ogGADJXNpuo63b6PUE3zcYUPmnZB6aecFN+IezR/GiV0yo6NkFqyuLXbD6WRJMrpP9XUXYPQ9tw6kUpHRcCYbsJwYiFYHVXqhAn20QJl0V5kTATrC6Qn1to21AVSKiwzYtkJI+mJsmWro9PWuChqfVoTJWcYVJCy9UUFNceBWC1UyjVGk3iI5o5czqcDoGXSqcYQBD9iFLlJlSUV/9UCblu6YpbCL00ENEP3NisAMm23dWZQIXl6gryVwwbSaeMhQ1NSRgvSLOnnr/38/jVHdxRHcuK8yaBNvXuJnBNLP6T/+UMLPi8DxyyEmzfaiWaK6eaiiPMqsBHHjzPTjVW8Sfn34ufuJzb0K9ObasixospkCE5311HQ9v7sP/+B8Aej0iA3KgPdJX3pzg+RSsLmLlTTUUuWD1cEjKbzsaMDeH5VoXK+foWsLuA1OFaYr9VkLBAGC5ILPacYCrV4lp4VyEjjbA1lm6UNNEq15TAF1HW7fQ3a6+ygJAIWZ13zPQ2pNTTi+aVPhKRQwA02vZIEY6wyJGOpOC6UsbdEKkLLL1jenM2mIWOCulr6IaYFyyhALAuaaFZcFqKUAWRsn6MomxzeKrvxq4447UAyLMaqYhr5N7mzGrDzS2cOGqgb5n4Lfe8pkdb9M0kOToJCCBAbUlwOookoTnmY2/+yIWH/4Env/Ie/HgfU7MUIyZkaZZTeUhA6vHgC9iiJnxHmawqBU8HspyvhY2nT8LgdW6oEFVrwf0+9gOmmjva+a/lsmAFGRWj4DV29vEYHFpVBqrrroY5mnCex68vou+bwIaTQZSVu3aw1fQ9Wpoz4y+vxKwmjGrY83qAmzCnDaDKGVYZxgk0Tbk3DuehwjAU5fq2LtXAo4excHmJs59aQ0IArihCl0Z/b1VXUYQZVRDAEmiR5v8nZpN4G1vG3uQaZdz5GB+/38dxunuAqCpBIh77nNxtH0VT39hHbBton2rq6NtckhI3sVVrNtNbCoLBKymY+DKWRtzxgDvestHR7dNVLIkVwaEgYXa6GfPH5vFl9YO4lx/FpK+E6zWFZ9PGhoOseXU0dEtdHQLWxv0N/Z9BOGYvApbE7sC2a4owslzOk7MrAK33YZj7as4dckEggAbTgNzM6mxpGnxZ2aG75M0xxgof/NthEX/xbXDaC3uTDBZHCY8O5tcdVpYWEgevu0bD+Oe//Z9OHbz6Het1SAOVvs+Bts+GpqDeXOATcZId13YgYa2bsGtUC7zmsX4d62IWR387UegnHsatavnqmNWs3W61SLVjH3BtaBPqmLS8k8zM+TP/v0TXn8dGJFfL7ELVj9LgoHUW1vVtWn9yV+i9dkPV3ogdRwQZnW9TlgIvQradhy4gQptrkk2CrzNkmgw7dNrwayuq0lt7bSAPQP+KKO0pTnodity4tVqUOWwWrA6imIZkFx364LhuyEp0a9SD50eIGMZkIruBccKyX3ADqVV9DWtWcfAWgHzxr//e+DjH89ukwDg9P+1GiQA4aA6GRAGgEeDKTc3rE0lSjbMA0NIYsV3AlwadhKjnJyoNWRhZjWbMs6eBT6Txk0GAwIizKZKPXnMaiYXMAZWK3sWcefRAX7uvtfhMyvHUG+OUwkFZUBSQNJrvm8fPvD1f4i/+9Ic/t+n78S54cIoCM7T146iBKye5EiWFbRd1+bLgPQ9E82OmoDVF+kERUEszVRgNhRiylPR3B1EMhQpJAkm0Xn7yhUgitCNWmgfmcOsMcDm6c24r/G113XCrO5O39UYGKqpNHFVwMeg3wcASOMUv3Q805nV4/cKM1icdr+RNrEFAE0jBlabU4DLDEhSUzIgJcDqzU3gN35jvK8TNKvzfDKmYlbz9VSz9Iq//uuBV75ytM0Gr6+OAz9U0DTIfd9qAdizB/v3A0/3Foh828GDO95GZEAyAFCW8FQK7ktEgJRUrH/pLOb0AY7XL+Hkg4P4fU6okWtkGJCkCKFVkcFibdQI8JoYLDItbJdjsFgQrBbSrL58GQDQVTqY6XDuHQYoipjgpWJlBcnczJjVY7rCuhzAzdsnOw78UEbPr0GSaT+Xl7Fo9rHyyBr+ywOvxNe+YDDyFsOUyBo2zQY8XdlQr6Op2WyaLx8UrI4lc3SdJNo4BpPwPDRUF92Bij17ABw8iEPNDZx7tB8zlRv66HdVVZpg4knMZCRYJAn4yZ8ce5ABlXka42GIL5yexQPrBxLG8sICjh708R/+8VX4rS+/LOlg3KYH2+cwqzd7sAIdl4cz6HQALC1h3hzg8a09WDT7+O7XrI6+QVXJvcVJCAJI5iIaczfMwA01BJE8arRK29V5RtlAwqxeNjBnDLC2Qa9zEMAONNS11O+l6yQZwvEbAECIEJaGmXYEHDiAlu6gPyS/87rTwPxs6guLAH80ETI+eX3bd6j461f/Lh7e2IfWcirBpChkzLqcyY6ez9xIG5clRr2+8/yk6AqpQBVZD7pdYgSsumhqDnpDOf5MJ1DR1mw4vetAtNrzyFmWRVXM6ocfhyqFMHur14RZ3dJs9AaCa0G/j55rotlMvufMDPDCF2Ycc3aZ1ZXFLlj9LAkGVlepW233fbQ1G26/OsEkAlZ7QKNBSrfXKtBsZszqdg0Nw0fProhJx8A/plFakayEE6gwmlp1pZ4M8FAiWkpuodutRqfVV00iraH41THs6eFck4NKJ/FYD71NGaBVrGxsE8wA+6qY1QysZk5zFYHVac1Lwh7iT/G+j2yAjCZC0szqtm6huzElSMXkVTQp1lAcTGt+lgaoZBl7mn2sDNtCG0bPDnF5OINmh88GqdUAy9cLaVafO0cOu/F5s9cjBovzoywPVQrh5QHAoRKbXabjNa8Kocohtt0a6jNj30GAWT3CwASATgfLr34O+p6BX3vwG3DvD/zpqJoH09fOAqhYX+WwFFjNPTxZFga+juasBszPk/LJy/RzWMmzoRAWfFVgNRuzlFkdWYJtXrxI/tY0SIsLhJl0kQISbO2qyZRZXaAkMS/SppmGQUp31wXn2l6PHDqaOWC1qLb4VyriihA6jmo1AtROa1zIJLfYvcL0OQXNpCZG2hiWGSyW8LI4exaJpARt1w9lKHqip9pQXQzyAGDfJ8xGs8D3iVl/Oa8pKgERM6vzgXU/lNHQyQe32+R9B37q/8Dnt05g/2EVeO1rdzbNZECymNUTEoLcoDIgUS5SmcTGBjBvDnC4uY4zTyfyISFkMl0zhn13eo31oa+hnvKYjIGvPM1qtjYXCTYOsubudGJOMHRDEtKs/sTfDLFuN7AdzcTbv8wQZFZHEfD5zyf/DkNgaYn46mF7myRL96TmSF4SAIjXkKtWMy5Sw223YdHs4W/O3YGG6uLNrx3dVximJMystm3g7W+fkJ9npAtTSQwWhzka0CLBNPEZWE2BWq5ZneehpZO1c+9exGD1+dNeUgkwBlYrmpytMw8kxKIi0jUUqMzdGmxtwQ8kPDg4hoXF5Hsdu1HBo5t78cT2ctwW+1uEWc0SOqev1Amz+sABzB+fxRPbe7F88yzwpjeNviEmB+QnBKNI2gHUzs1LUOUAL1k+PaqDnWpXiFnt1tE50sGeehcrm/RCT/q9dB26LHhetCxYvoZai5AOAEAKfESejw27gbnOaJKN6wvAxsfYQJBvOIwbWutwAnW0YkzTiBSjzxmzA7pfE5W0U1VxD4OtLQw8YrYuSxEiP6ncswMNLd2GW9G585pG6rtKAMJ+RZrVrVmockATYZU0mcylzSYBq4eCa9JwSJjVqWn/4EHg5S/PeP0uWF1Z7ILVz5LY3iYC9FUyq+1AQ0uz4VUtA0KZ1cu1LlbWK9Bsdl1iUlVTsW/WImZjVciL0AkmxloqNFjU6wRQlOhjUwVjlKoRBRNtdKsAPMCY1RXLgDAwSQ6ShbmKZp2AAEmMWV2htEalBotRlFQYzMwQHbaqwGoGCBgGdZHnT/GelyMfxICUFLN6RrfQ25zyOrB2qYZiRx9ia2161mMaoFpuW7hizQjdX74b4NJwBs25PCcxErWmIsSsToPVlgW8+MXAAw/QJ/t9sslfHHN8zyvPZgzMCUDK679/Ae/+mv+OG2dWUJ/ZWeopAdlmeEyndRxI+tZvxS980xfwJ694F/Y/d3lHm7lzQlntV1GwmjKwak2iWX1Dew2nL9fI4ZslmAwFRkMlv1VVzOqQMKsL6dezDLJKgPWOMcTmJStu0w1UaLQaoqXZ6PYr2JaxiggqKTBSupsXYZgczHaIfKbiOmBWx2siAOg6Aat5rL9UTEz8p6UaAMqs7mN9a4qkOwOSlIiwE1UPVkHWJ0AA0BG2JJsvGLBODeBy2crsvs1gQE8MWabgZz6QMklPNTOoGeQwj/HmuvAjBU3Th64nuf/O8QVctmZx6CUHsYMGByoDkmOwOKJ1LhpMU1bEMDoMsd5VMWcMoCsBvIGHiCH9bLNpmkSypQJd4R0yIIwJn8usVqCoxcHq3GqbEprViibnM2ppvO+vmvjc6g3YDhpx/j+vnyIGi54H/Mt/Sf69vU38e26+GXj4oShhVu9N+TjQJEDAAau9UMHqsEUYtQBw111YXJbw9xdvxlftOYkRnQGQc50TioHVa2vAv/t3wC//MnDmTOqJ9P0ny2jUQgw8fsI9Nxizmq3xqiqWaPM8GLIPVY1iZvWJmRU89rQJeB7x8tBHB5GqSUQGJGtwMYmuIgkWVYWpevnM6l4Pfqjggc1DWFpKHn7pV0X4+Df/Oq5aLQJIyckcayoebF/NTQSwJO+piwYBqzUN2i/8DLS6hqXnThDYpvesF/BlQHYwq+eAG24AbvjqA6OVALRdXfbFmNUOAauXa12sbJvk+/k+rEBDTUv9LrpOAGBP4LdwXfL+GggLxDDQUGwMN2ysOw3MdVL9ot8rysuKZsiAoNOB8R1vwoFlD61OanyyOSvvugKAZcENFPFkSBH5h60tQlxZpJN0GJBrS5nVpuJfH2AnG3+1GkzFq0y6xG/NEma1ypfsEW+U/i7NJlq6je5QcF9i24l2PY3Xvhb4kR/JeP0uWF1Z7ILVz5LY3gYOHaoQrA5D2IGKpubAy9t8FYy0ZvVyLZWhnSYYO62uYt+cjYuDTjVg9XhZS5VM3bpeObOayYC0dQvdXjW3NmNWCwFIosHYaVJIFuaKwveIZjWaTcJyGlYoraHL1cmAuC5h12shUK9XKgMSl6hrGkyVupJzNNF9L0L3S0/hj3/u8ZgEGgdLhLBDQK2GtmZje3P6Q7TPQJF6XRxMywumU0sBqj0dGytWiw9WWxb8QMJle47ISnCi1pAJs5rTLjNYdF1A0yLceCLE6dP0SQpW1xZShwe6cc7TrM5iVjcOL+BFR1Zx08wK6gs7DySKFCJwM8ZuEIxctzjqdXzTu9+EQ7/7b4DXv370OZ7hD+3ruPYkN0TBatdFFEmQdA2o13Fsfhunt2bJHM1YVjUVjZZMtAMrWg+YDEgh1mO3Sw46hgTMz2NWH2Jr1Y3bjGUXKLO6ErCascANhTCr9aHY/WVZ8AKJSFLkaY0/05nVbN5OgdUi5mcs1teJNMWkdv0oxVamBouiZlJZfSWyC1FSmu7mgx2TYnMzyTOwdoMxFnjcdlaUAavjA3/OazL0VPPaJMzqnP2h48ALFTRr/gibVpKIfuThw5PfpupyvmZ1ODkhmBv0fnCHYmXfG3YD820PkGUsqetYPe/AC1PAn2GgWYUJHpMBSYPVqko0xrMk2JgUSgmDRVXOMd0tAVaLHvb9vo0zvQVYoQHTzH1pYrDISQj5PuIql3MPbOLQ4DF8R+tD+I1f8/EPF47Dk7RRuRyWbOaZ4IUELI/BalnGwre8BE/3FnHXW24Gjh4deYtRk4WZ1ZYFvOpVBLT+9V9PPcGqzmiSrdGU0PeN6XRlx5nViiLErA4dD7IUoVUPCLN6Zga3HujhkbUl4MknqZfH6HsUVco3WOTIDE0MNm/lnW9puw+sLI8Y60nLS7i5cwUXhx0Y9dT3lSRiBMepBoiZ1QysprGwgBFQPA5ZJvdsKGevC75PiC9jQO3yMvDz/17BgTvnduaf2bzFy7sPh2Q/tziD2ZkQG3adDDaWDBsDqwmzWuC3cBxYvo5aQyYT99wc0W8/N8SG08D83KgxrKH4+XsOJgMyae/y8pfj6M1GzGVibapyAC/Iua70+6/ZTSzMCO75ioDVvR5JfM3pJDMVRUQS0bZhBxpMxZuuAuKfKth3bbcJsNythuXoyzpUmey57dUqNPKQ3Jv0PNuzNbFrbNvktxLwNgKQjINdsHrq2AWrnyWxtUUc1SuTAXEc2L6GmuoBQUUH0igaZVbXu1jZ5DMZuUFNqrS6hr1zDi4NxdiU3GCTL939VgJ+0n5Jhh5rVkfOlH2NS+CYDIiN7qACeRUQBpIqB0SLr18RxZ5pbMshpKom8SgiYLUUAo0GmppTjckkA0AbenVgteMQsNqIEsPCyljgCtSaRjbNTAKBB6pudNE9vYa/+FMH73vv2GYs1gKk/2eAWm9KmRkKgqsagFoNs8YQm1tTtjkGUC13HFwRmQvW1+GFCi55i2g0+X2ImdUCBotBADz9Px/AwY0HceDB/4UL5+mGqN9HBECeSe2cmVFZXnl2Xon629+Om954O+qdsTmVlSdnaYmGIQFKJrGSJIlQyia4yKtSPrDulmFWaxphG/LA6jSLSJKwZzkiFTW93ogMSKOtoO8ZlTGrI5BLUlNd2D3Bg8v2NrbdGjozAObm0DEsbF714+/hpQ0WNas6sDpUYkmgjmFha1NgM97roeeaaNU4h6zrwGBxxBg2ZlaLXdtuF7j/fuyUZEmNLdburDHAZneK9ZZpSysAJAk1E0Lzy3jsYFaPs5lFWGQlwWoRzWoAO1h/maGqaGguhnnl9FQGpFkLdkg/HDiQA1arOaZ9cUVIcbBalwO4lsD90O1i3W5gfq8OzM3hePsqTn5xG5tOA3M1Ok8xZnV3yvtrErM6BlU5Ek5FxgBAxpeUb7BYVAZEFKz2+jYe39qDWktgfAlqVqfB6rN/8GEc9E7jno2/wd7+SfzOwy/HX33Hn+1oNzcJAMTEmo7pjICUi887BAC443uet0M2q4hmtWUBe71z+DHpN3HhTGoO9/0RI8BmExh404PVxGCR/j9OhnH0mh1SpdhsRASsliQot9+COWOAJ//481i1W6i3RtsgBotSrmb1DikzXigKFCniy7aEMk5vzI6CyIuLaGs2Lg1m0GyP9lU3JDiBJgRW2448UgkwP0/A5R0hSbQiJAewz2BWaxrwnd9J5Ap2KHsphFDAXWpY24YBudMmBJvt7Xh+qempPsXMaoHfgjGr63TMz81h3hhg/ZKDdbvJlEFIMPmeQc5cwFlnjh7FKFgtE4+b3CQAEIPVi7OC8zHdL+eywFk4DtGsbkrAzAxamo3+pW7MrDYU//oAqz2PJEvabfI7bVcjH0sqpgPiu3J5q5I243Gi62jVA/Q8Q2y/RcHq1ozgPMPWr12DxaljF6x+lsT2NgGrK2NWU72kmuJWx34NQ9i+ClMlxnLLtR5Wtng0CIFIMavNukw07iqSAZGkCGg2yeJbhckBmxA1LdEVnjYDyQBFFQSs1gtoMHHCd4KEWd2ryN0gZlZXqFkdH/gjWvY+xOZGBQs8A0AbRnXgjOfBCVUYOgDTrJQFni77NmsSbF9ArmKzj65bw7pVxwffN/Ybx4kQupnUNAKoTZsMYUwfTabM6uH0c5fvEwYrxTc67RBbbo2/CdnchB/KuGx1cmV6WRgmva48thfdnzz+7s/icG0VB/qP48IpJ6FcS9JomTpjVmeBSTnMagBAo4FvfnMN99wz9jgFJwIvD6wux0rK7GtsVHbtZEAAxIcSqd2CLEUItvvJfFjTINcMcrCqqCoGQKIn2xPcgHa72HLrmJmVgYUFzBoDbLHKBFplwQx320VKEjl9TTOr25qVLfWTjn4fPc9Eq86Z59jv9AxmVsemhUAMVnP1VGn0eqQg5XOfG3siCODSvQYAQFVhyP502w02F9Ima3VJqHJjPDY3J4DVoQKFmY7FJl0CYHVB9qsqcUBwdu+IuvYxZrWbAz66LvxIRrMWjgIQAI4dA06cmPw2zZCzQZ8wTPYRRUJVoSu+2P5ge5uUuC+pwMICbmit4cxjRHN5rkHnKcMgusKD/Ka4MYlZzZKXPGZ1CbA6l1nM5mVRKRjaJutTZvR68JwIH798M47dJLAvYaAXB6z2POrlsbWFx0/ruLlzBQDw+zf/Jv6fV/4B9h8ce78Is5rOy7N1O2FWA1hcJGN2fBwDgGYqJLkiAFYPrw5Qu3Iae3tP4uKp1J6SdUpJMas9oyIZkBSzWvG4YLXnhFDlAN/6ymHyfb/6q/Hipafxoj96G/7g0ZehMea7Iav0ns2RAfFKyICoeckVIF5HAIwwq7G0BEkiSa9GZ2dfI/rerGD7m2YjHMFVM5nV4CTZ0p+XMce+4AXAK16xs1EhiUfGWNY0oN0mbOS1bSID4uuop2VbqA60m5e8ZOE4BOxu0HtpdpYwq+0GAXBbqXtM06ArPuxhzp6Dcw1+8ieBl7xk9DFVk/LHFgAMhzjdW8CeRXGw2lB8seSl4xDNagpWd3QLWxf6MQZz3TCr2SCamYGpeBh2qwFofTdMZEDWpnWFpcHuIUVBqxGi55licyFjVrcLgtW7zOqpYxesfpbE9jZhklQNVptVMqt9n4B0WgAYBpEB6db47+MF0/1kOtBShNCuAFhmk2+rhRndwvZ6BZMvO4DqelKavD2lGDTTKlZJu23DQdfWK5kgfZcYt+myX5kGVQwkyGGsMTt1xIA9MamaNSoAP4GEodekYLVTlQyIBkOPYuOvwWY1lQB+mDDpDINqHXKyut5mH13PxNDX0Q428Mgj6SfHDgGahhm9AvYnSy4wzWrDwtb29MzqgW+gYZLvKxmUYcwDfWg5+aVeUwisllSxbDk7kJzensf+xhYONDZx4ckh0OvhdHcBgaSOsqh4DEVaoq5p2RvXF7wAO8FqhZjE5jGr/RRYJhSMWZtlTFNWs1qwLDWuRqHVKWi1cKCxiYunUjIgphJXxVQlAwIAaDZJubMoWM2Y1Qsq0OlgqdbH5Q2TzM+eh223hpk5yqzWrcQNfsq+xgxgwyBA7UDgtxgOKVjNee11IgMSAwGaRvWaxa5tvw/s2wfce+/YE8zHgs0Buj69n0MQwA5UmJSdZtak0szqcRmQga+jwZh/DEzLA5WDgFR8KMWZ1bl6qkWZ1YpCNKs9Pfug7jjwQwWNerSDWf2Hfwjceefkt6kacg0WcxOCWaFp0CRxZvWG08DcXgOYnyeGZeccUvbeGGNWTwtWBwHsQINRS4372GCRkxQtWvQoy/n3wrViVm9uwo9kPLqxF8ePC4zbAsxqxwG8k2fx6OZe3PocA/j2b0/W7Jtu2tEuMVjMb9QLFXTq7ghYvbwMvOMdk98i6fSeEWFWf/4h1BSPVCel/QTY9aOLfKcVYMutT7f3ZjIgDKxmBos8c0FKgPntt/eS7c+JE3jjXSfxxhu+jEc29+2oDovn21yDxXIVIUEeE54mbhQ5HAWR6UZx3hygOT92owiU/vtOgJriYnZmdP08cSK/IiRXv53JVmbMscePA294w85GRcwQA8eHLEWk7ZkZLNV6uHrOSrxDjFSfVBW6EsARkCCE6yYyIACwuIh5c4B1m1xfaf++5LUCsi2Rl6FZTeOWW7BjrVB1OXs9YO0OLfz6g9+A73uDYOk6NQge9gX2R7ZNzi0tGZibw4xuYevcGLM6vI7A6lYL88YAGxvVNBu4QSK9J7rn5jaazIetFsTBaschBoszgmuYohASTZYE424Ixy5Y/SyJawNWU3H/qpjVQUBAOi1KwOpeBWA1Y5GZGqDrWDT7uHqlgj4HAVn8m03C/BQpo+ZFGqxmIELBCTgMgZ//+dQZLs2sliS0myG6nlkJm9B3w8RcsCpmdcpgEUClRoiqAgJW6xXISqTbbZoERLOrGQNOoMZg9ZwxwKaAuWAUAT/90/l9DSIZskE2q4quIMwrnWRv6w6x7ZL78Odu/HP8u58ZLR/1QwWqnoDVbd3G9mBK9iczQNMlKgMywGZvyjYpONOs0e+r61ClkG+ER4G9K926EFgNRSEVF7zr+o9fBACs2i10jhHA+sK5EGG3j1f+7Y/gtbecHH0Dc3znsJVVueAY5MmAlGHSxcAXJoNJ15hZ7dkBdMVPDiWtFo6113DqySApCa5pCXO9IhkQ9lk11YXVF1hjogj/8eMvwvn+LDqLGqCqOHHIwVPbi4QK67rYcuvozDMGtI3usAIfh3hNVAHTJCCCiDmN4xCwuiEIVj9TZUCYJv64DIgjNsf0+8A3fzPwoQ+NYca+T/YEbNxR2Rp3GrCastNqBrnmZkMhlRslmNWDQep29H0Cii6kmdUcBnQUke+Xp1c+Hmx+CaRsYLkos1qSUDcCDPycpDuVAZlpBXxTvVSoeaZ9TLO6KFit69BFmXTb23ADFcZ8E1hYwHKtiyuXIvJbNehvXhWzOgggIQX2AXwGNAOri7BU43ZzwCRq+FmUtS/R92YGBYBlKcTx42JtmqoYWA0Avfsex+Nbe3DzC9vA134t8Ku/Cvyn/wR84zeOvkFViaxE3nbedeGHCmYbo2C1LAPf8A0Z79EKgNXn11BXyRjSAyuZQsYYp4uzPtbs5nRyiROZ1S4sT0wGZARUlSQ876tM/NRdH8HJ7iLqs2PGqGzPxWNWF5EBUdX8fRFt1w8V7O8MRsFqSQK+53uwsN9Ec7E++h6B0n/PA5brXczOjN4rv/VbwI03Tn4PVwaEwyqeGILMantIwEIGVi/XSIINQQDL11BPy4BIEgxTghuqQkQRK9BQa9E+HztGmdVNQFYwcpOwvubsOTyHnFeLXANN4yQBADx5Rse82ceJmwTHVxGw2nHQ9wySVN6zBx1jiO3z26Oa1eCfN77ikdKsXqr1sLJeQYUgEsKcqXiw+xWB1WwfpyjFqkwsixgsCngbAUgqUJ+ppI7rKHbB6mdJbG9HOLwwwGYVgCowWoJSJbM6oMxqXScLXn/c8aFEMPMegwDA+xubuHSpGgkIAIkBXLcC8JPpOlGwuqZ4sApOwO9+N/BLv5TS04xN8Mh/2zMSum6tEtM+slBQsLpfJVhNDBYjoLISfVL2jVijdXO7gumNMfTqGjQlhOdjev0pz6Oa1aBg9VAoC+37BDzJfQFSJlaCJh9e1yJgtarhq5aewuqZIdbWkr4OfB11llPSNGLgOa1UQfpwUauR+6uvTFfu5vuknM6k8xWdY1avcOYvOnb8QBYDqwVNM7wV8qNeXbgF7RfchJpKNluP3u/iBYtn8Ivf+qXRNzCzlxwtUT8qaXyVx6wuo1EqSeR+CDN+M9amWhKs5hyehpZEDuXsYjBm9fkwke6hQK0qB/AHFTCr2cGr2aTztliJ58fPH8cDW4cJexpA49A8Br6B6Nz5+P5qzJJKm5Zmo2tXAFazecskIHhNdWGJyJPaNnqewQerReVavlKRTuACpIpJ8TDklKiz6PeJxufrXw/80R/RB0NaCSQhYVcy0N6bYm9AD/w1nVxz4YqQsdjYIJqn8ZkrCNB1a2jPJeuBCLMaAEHPREOSoMmkOiPP/AuAOLMaRPvVDXIqgxwHfqTgyB4H73mPeHc1PafsO06ylZABEb0fmB7PzAywsIA99W1cWZWJDEgzDVY7GEwhKQxgpNw5jrRsy6Tfi/oN6EYJzeq8uZtd26oNFimgeKjTEwOrVULCsXmgKh0e3U8/QAC1m4iuNFotjAhOp9rN9ZxgfY1kdOrexCYmRgGwetgLiM8QgH3qVVy6EMbzlgTE9/VMi0qkTcus3qFZzWdWMxmQHXPBkSM41NxAEClozI/JQ/L2XPRMUXRscZMLdB2948Am9u8fe+6ee7Bw88JOnxOBfbfvhlgye+h0xOcZVZO4MiASYz8LN0rki1zO+mUNI9TYfqvdxp5aF1cu+IlmtTG6X9BNagrKW8NcF2EkQTFpn48cwbzRx7n+HBr1aLTykJl651S3svNqEbBa1WWiWZ3ze1k9H3PGIPEY4gWt5BI6glPN6uaMTMBq3cLWhQFgWWRfQJNPlfhwXctIMauXaxX5kSH5TWsqR6+8UKNJYkeqFai+pPvj5qy498Yzep98HcUuWP0sie0zmzjy3l/E5vmKNH1cF7ZPweqqmNUxWE3A2qbmYOjyXVjDEDh5MucFYzrQ++rbuHixQmC5XicGcN3pM4W+7UORQtJXXafl5MWu73vfC7zylcDly6xRf8QEr9VCpcxqVQoJe6wKzW4gxRClG5wKzQU1jcmADLDVraicnupA6wbdLE67aXBdUpprImZWbwjoa3seJ/+QyhYDEAOrPQ++7ePSsIPWHsIQefmex/HpTyfPr9lNLM7T30rTKPuzAmY109dWVXQaHrac+nRyDUwGpJaA1Uu1HlZXOe+jwBYwwYBmUtDryzNP8alG9Eq0jPbxJUDTIHsOPvkxHy/dc2rnh/EM0Ma0bYVDkPFWSO8RZArLLJ+cllnNOUNbw4gwfZgMCK1+2V4j+n5WoMOsSYmG/1Y1WvMAKLPaE5PV6HbhhQoe6x9AZ5Ze36NHsWT2cPX+i6OJVqZZbVewyU9LApkmAdcFD04910SryZmPnukyIGz8pYxh66qLoSvIrN7y0Vo/g2/cdz/u+3wUtxmx8/MOsHqKvvo+rEBHzUz0tQEIrTOf/3xSab2xQQD2mI07ZqoWzwN5ZlJhSPY8RcBq0BL1ML9EPa88O6vR3AoW6lWimQoWFgo0mwf6RFGS9C4SikJAH4e/jgdbPVJS32oRGRBaYbjhNDDfoX0yTTQ0F4NpJYEsixAC0iCLJEHVcn6vMh4GQJIU5TG2qwar6f73x1/+Zdx+u1ibpuJxwWoGMDyyuReH2ls7ZT8mtKvKYX4Om/b1+N4+DhwQ6CtQjFk9CInPEICD9TWcf5joCgehBDlVkSUbGtkrTglWB2kZEEmiYHX+mY6dKSaB1abqY299C/WFDLZyzvxSilktBfkyIFRS7AM/9GliBjkWi4sT9owiMiBehEPNDRw9UgCsFpABGfl8kWAJJg6YZlkYZVbXu1i5HMZrV90Y7ZNhAK6Izjrb77MKOE3DgtnHl9cPYnlmbMNC55e8Jsswq+P1gKMxrslBsjbzgnouDAcCv69tE5LNjAYsLxMZkCs2YNs4P5jFgcYWkZKwriOwut7FyraR/3rBiDWrFcE9Ny+iCBEjYMoykY4FxGVAPAPNOXE5s12wuprYBaufJeGu99AxLFgr3WoaHGFWVw1Wh4AsQ9I1spHmLGinTxNjhMxg76c60HPGAJuC0lK5wb53rUZkQHpT3i5BgIGroqm5ZPPFGG8iDL1U9PvArbcCV67QBzxvhHHZaCukrKUCZrXnRlBlarBoVVeC40fEYFECEFkVMavHZUCmlZUAEoaiIScu39Pq38bMagKmzRkDbGzyx5bncczbx9lrIk7EdJNv+TrmDjYBWcbX6P8bn/qYF7933W5ifjYBq2d0C11rSvYnSy7Qg+vsTIhNpz7dmPV9DDx9BKyuqQIMWM+DBGp4IwhWG4oPx8rfOPlOiLrqYHVDxcyCBtx0E/bUt/Hu99fw0j0nd4rnyaTawMsCk5hmddESdQHN6hFgTzByy1Jpm3rRvlINRS5YbYEwq9mhpN0muufrVFNYkgieaBiErbxVwSY3LQOiuLCGYixKP1Tw2OaepKL16FHc1FnBE1/oAq6b6EzSBG7fqQCs9jwiCaSrdJ3xMLQEwCfbJjIgE4y+RoKBtM/UTTjba7DzkqqirlEghaejCaD36fvR/NKncOCTf0J05gFqrkj0OOOItdunSI4z3c9URQgAIbD6Z34m2QdsbxOd7X4fZP4YM1WDJEFVpXzAI0wd4goEAVIEStSLTDK89YvKgKhGMbNfWVeJPFZekq3EvKXJgRBY3e0CM7pFAGSq0bpmNwmz+iCtNNR1wqy2cxILE+Kznx0z2WQbhvoo+KcqFPjK0+0uZbCYz6wOIykx/BRsEwAinw9W//N7nkJDpFCTGSzymNWXSJb7/sEJHH/d7XxWJZOV4DGrQxk//8ZH8cIXCvQVKAxW11UXWFjAgcYWLjw1TJJhaqpjdI6JvR/KRBBQM1L6f0lCzQiJ3j6HVbxDBgQADhHm+pHW+g7Nai5YzXwqihrDyiHfYJF5P0yIhQXsHHMiMiAuAavf8wfi11/LSzABCL2AJMEKJgR1OYCb5T1Cw7Kwk1m9KqfWrtFrGJ+VeFWo7CyVAoHn3/J1+PjFm/Ca7xzLQIrIgDBQucA1UDQZQdZcyNr1AE0OxeWxVJX4UYmA1ZRZ3ZhRgaUldAzqj9Xv4+neAo601oiueP+ZDVaHLtULb7WwXOthtWvy3iIUvhclMiAiUna8YOuQHI2a3BeRAZkTBOJFDUx3gxu7YPWzISjF1lA8OFIFGtDAqMFiWJFeEjNY1IsxiFx31DjoHe8AHnhg7AUAWaB0XQhIEu1vFElEBsSwsDUt+Om6ZKIzklLPWsls4d69KWZ1XPJMDhcS02yoQgbEi6BKAQGQqtInjTWrKQjer6BEnxn2aVIiA9Kvppzepwe3hZYzvc4fkGhWm0Svec4cYGObvwnKZVaH4U5WHDsM8EpoIxkNzcH8sgrccgvuWTyJez9mx8+v2U0szEdxm23dxrY1JaBGNasZE2ZuNsK63ZgerPYNUj4IEB1RWUBH1PPQ1sn3FZUBISXa+Yd5z43Q1BysrisEl77jDvz8c/8GP3z7x3HH/o2dtuSSJAQAl2H9KXmHMmqwWBSciN3pM0AfN1BLGyyKyIDUVHcHs3prg34e+yqmibZmo7ddzXrAPqupORj0BTbO/T78SMYTa/OJru4NN+DmzhW89xOHcK7XIZtmWabszABukAP6FeyrpFGwWnFhOQK/L9OsbnNeyzbhz1Rmte/DDVUYRsL600xFjO0FoH/VQlNzSGUG87+gB/O6lnq/ppE5pgIZkHqKWS1JkdDhyfcpOPnUUwhXr2Km7pL/hyTppSnBSCk1t+R5CrA6t0S9DOuPVxnEkt5F2JS03UzGNjObvYYyIIN+hIbqkLmr1YK8MIcokgiz+jjVhpAkNGoh+qLGTyCX6Z/9MwJYswj6FgGwxoBWVZNy15kgkouBygBlkeUzq6NIKja2KAAeeBxd4ahA0oIyq7lGgE89DQB4wj+OffsF7u/YuDLnNa5LkohagQRLERkQi7CbsX8/9jc2cfFpL5EZ0lIdo3JuU62LQYAgkhJmNUDA6jydeTAZkHAnS9UwgF/5FRx56cGd0hpszFTJrOZVnAFJ1WpGu8vL2KmXL8isVuUJ7PKc4MmAeG5EGOuFwWoxcsAOzep1FRgMyNrVHL0+uiGRtZYHVrvJWZjFwqufD1mR8brvnRt9raZxNcY9Jyx8DWLZxLwx65JzsHC7RZL5jkPOLR3iadKZV7Dl1ICLF9F1TcyYLgzFhzt4ZiOegRsQCZZ6nWhW95uV4EYMg6ipnhhBhNsg8XZSWKWJYUCRQr5UYBQBto2+Z6C1IAhWKwo06Rm8T76OYhesfjbEo49CAggrbwry6x//cYp0lDJYlKQI0VQOQjSYwaKeTBLss/LC80bB6s99jrCtR14AxDrQVYHVoeunZEAG04OfnkdKSAz6IzHGm4gJA43hkJw7xsHq2KwOSA4mVcmAUFBZyDxIqFHKgoi1sCsAqxmzmmpWzxoDbA2q035VDQXLsy5WrVYlYLUV6ITsxDSrpwWr2aYwrfFWgFk9Xxtibg7A856HhubiBuMyPv95JGA1IzmoKtqaNb1UwdjhYn4uwrrT4FDHR+PDH8ZoBUVADLnSYLWh+HCGfLC6pniQ5agAWO1y9UR9L0JTdbC6JhGw+gUvwAtfouK7v82B/NM/hUl1wLmgD2O8lWD9qVKO6z0DwYvKgOj55fTTMBR565hlS8nhCQBaLXSMIba6ErwwZfpkmoRZvV0NIwMAUK+jqTnoDQS2TzTZ5fpKwqxuNPC655yD5Wt41+MvRcek87QkQTINwvGfdo5Jmy3RdcayBforClZfJ8xqPe3hVUALut+L0NRsyFKE0PHjNgeejoY+ClZXway2Aq2UDIjnUe+KX/s1YGihcfEpslfyfWw6Dcyao3sAWVMQXitmdQ7rL5ZMKqinCiC3r37J5F2UxawuO8cqCklaCNy2wyGtCtF1sl7ffDMUOcSl4Qzmbk5c3Br1CANPFwarP/hB8pXOnEkes3o++axxZrUaZSct6BgYMWUUCaqFnXkvsLFV0LyTy1hPVb+JtmmqHmyfA1ZTZvWT20sTJSB2hIgmPEsi6gXuA02DBCC0OYMrCMi6qHrA3r1YrvWwcilI5hd9FKxeMPtYW59u3gpYNSMNXUc+SBkQmTNNCSbPMfPzeO2bdJw4Mfa4CLOaeTSIBjPEzAOrPQ8RkEgpjcX3fR/wPd+T0dc8drlXEPwEJ8FEP06Vg2L3F6sI4WlWs3FFweo99S6ubOrAYEASuDOj3yMGgEXB6lTiYnYW+J3fIf4LI8HTxAe5rhNZ+3khojHug7RbgFldBKzuexSsBjBzaAb3rhzHvVeOkc+cmYEuB3D6z2ywOpb30XUsz3lYsdrVYBBeBKViZrUfyVAZkcYwyH5+kzNWfR/veezFODeYQ71d0GDxmbpPvo5iF6x+NgSt+5MkCJW4TooPfxj4ru9KmfY5Dixfh6l45GYbVFCC4nkEANeTSSKKJO6hbFz+4MqVxKMmfgEQl1Ibig/Hnh6sjsvVmAHctOCn6xKw2kzA9boqWE5OY+W8iz3+eezF5Qma1XTDYdLymyoWCj9KDBYrZ1ZXCFYzlpWGRAZkWJ32q2YqWOq4WKkCrPY8wnSpS4lmdY8/tjyPbJom7qnogxFSm05VJRljm6NZHSqYr9tkc/ic5wCKgh878kH81q+RD1yzm1hYTDRa27qNrjOlHhndMLADZq0hww40YQ3Fv/1b4M1vBj7xidHvMvAMNOtJOb1Q4opq07frvrAMSENz0O/nbPAjcghqajaGQ4mwbxoNomf0trch6/SrMRAhi/VXQltaRLO6sJYoOC7qTF+7BENRkwO4bv53HNryqAxIq0VNOjUC0tXo3Mc0q/N+K9Fg37PRIHIdA4E2KesPGDW2P3BzE//ips/gwY396NRS83QBoDI3xsDquurCckTBagOtGc5racn7M3YTzmRAzFGDJpH9BgD0B0BTJeuSGVkkSRgEhAE1CazOA6h4EQSw/FHNakUK4Q/5/WTMai+UocoBmvYa+n3gIx+O8Ndn78BcbSyjxg7bWfNsSbA6ngsy9p+BQ706CuqpAshlgZMkfaGu5gNftM3CAHgBGRBiVpbS2z90CAtmH6e6izj2goRN2GgAA98QBqvvv5+siTFY7XlkntS8HeANkYPJABXZbygVHNMyISBkYj5lzDsVhcgU5F3XoqxaWYapBgSszjkvMTbcE+frYmA1M67kyIAAENe+BQBVJVWzvLFlWQQ4bEjA/Dxhv64gmV+01HjXdSyafVxdnwICoDIgafwuBuGzLgJjwedgfv/sn6E4WF2WWS0FXI3xWKZrQhjGCCl4tK9Z1yCK4PlSMfATqTk2o90YqC1y36pE1oorA2LTSjZVBZpNLDf6WOnVgc1NkghpjV0fjTMOaISWQ04sqYsoy8AP/MDkvmpymMtSjWVACibEAOQzqz0Ukxdh/jM5LPA4bJsk1lvkGtzwvDnIiPDWT/5zHGxsAu02uf+vA7BaodUCnZmIGLhWgEEEbgBVCinhopp9fBCOMqvbusX3tbFtvOeJl2Bvsyc+vAQSLLshFrtg9bMgvL5DDgIApKgcSPvbvw3ccQfR0wNAndblaqUaXJcwq9kBkm3YCjKrV1ZS/aTtxu3pOpnYq5BBZgtfvU5KzKcFP2Owmk6KrDy7CFj94S9juX8Kez70Tly5Qt/neURLk633tRoB6barYFZH1GBRzDxIKJgEhFTh2EpLoTAZkKFZSO9xYvg+vIhsghfnAly1q2FWx4cKplnd548ttuBNZFczxo40ClabPLCWMasbFgGr63Xg1lvx4qXTeOTLTlwN0GjJcZtt3ULXNaa7tuNagGwTKLiqf/azwFveAjzySOrBICB9ZYAzkwHhJa7oZ7bqgZjmpaKgqToYWDnLJzX/ahkuJGmCrmFGqLqczVYuq6fKNKvzZEBKgOC5faVtlmdW5ycCLEdOmD5Aolnt1rDp1DFbT4x7WpqNbq9CsLpeR1Oz0RcxP6Mmd8AoWI29e3GouYEH1w9gtpGaT3SdHN6qAqs1LdZP5JW9A0gMFjuc3fgznVkdBFSzOtU/0URAFKE/kNGi0kAH9BVcPB8CQYChr6ORZijqemlmddoI0fJHmdVCWvugYHUvwmObe3HTzAqaUQ/9XoQ/+3MZf3zyRZirje0BBNjKhaUaAKhKlMv6i/dSVTLeYlmkgteeIwNSmlmt8BmKwBizGgBe+ELsmXXxfd+8AklO3t9sRBj4uvCB37aBW25JgdXDIc705rGv3d8BYBGWZnZSlH2nQsE0gHNkQAq3K2JcSQFF2RAfW6YekuR4nlSDG6KlEfk/UWa1wmNWpyULRUNVadKdMyaHQwIcNmRgbi6RamDzyyRm9caUYHUoQ03fKzygNt6nF/wsIWa1XIxZLaJZzT6vjHxRrr42vQYFgGVFV/Ln2ICcqcowq3nrV1zJRqtBZpZNYoh+/jw5y8yOIfaC+3l7SBizQskbTSPJII4MSFHNapG+el5BLWxNI5XugsxqCYBUIySzoy87gL95ze+ioTm4YXYTaDaJDMiwIs+oaxQxs1pVIdVMso+oQorUR6JZLSJlJ9Ag0dpPwOqWZqPX5ZwTbRteqODj3/ke8c/aBasri12w+lkQg20fDY0ezksCSFeuAHfeOQpWs9DloBq9pLRWLyBs8jEOVucyqw0DhuzDsfnX4eLFfJw8zayeNYbYHE7HJv2Pv1nDpWEHzRrdbLBDaYH5/MqpAfbUuthb38blp2nnfR/bbg0zraT0va3Z/EyhQDBttUqZ1YxdIYcETKxibDHwU5MARcFs3SG6X7wyNKF2ySZYrWkIQrkiGRDKrDZNzJlDbAxNblUED6wm8gepNigjxx7wNavnGg6RAQGAO++EJAFzShfr22RzFjNmJAmaoXDds7nBmLcMrKYgXeiIjQXLAp7//DGwOtasRtymCLOaSRztmfe5HkoAiAyI5uZrVjsO/FBGU/fQboufSXLZylOUvauygMFiQc3qWAYkQ7PaLykDois+YapmrWVM41f3ElBNVdFeMrFNwepOjd6jVAZESLKDF2mwWnXQtwQOhQGpHpltOKPalnv34kBjE0/35tHZmyrRr4pZndYIVlXijSACVjODRR5YTQ+5uQf9r2QwfwwjNaaZFjTv2g6H6LkGmi0Z6HSwv7aJi4916fyio26k7k06Xl1fEd57Pfgg8P3fDywu0q4wAzQ29+g6+b0EweremoMvXD2M5y+eRUOxMVjp44v3y/jcytEkaZPqb/zGCREF5YDKXPATJUEEEWZ1yUqTzHaZaVwJZrUu+0LghGWPgdX1On7h/30u3vYHzx15XasZoeeawglc2wZuugk4e5Y+MBzik5dvxMuOXpzU3VyDRQCFExbxwTwL+AqCUU8NwTa58irpKhLBMI1ICKyeNUhlwr59Yn1VpRB5XpA8pu7EoIaQ3DONZcHyddRbBKyeNwdY76rJ/JJmVjOwerNgQiIdrNLEHJ0Po0jKZUCX2heIMKujbCPEiSFoiClJUWEAGEA+uzyUCxtaS6pCJMIyZNf8UC7OrJakxCcj5/wxTg6QFqhGx9mzhLXfyQCrOWcEqx8QxvYOevqEEJQBUYsmRYWY1RLRGL9GMiAAkmtA5QG/8/g/4raXLwGGQWRABtcBWM3W+FqN3Fv9KQlzUUTAaomME9vNrt4S76hPtPZTzOqG6mLY5TOrvVCBVi82dz+jSR3XUeyC1c+CGHSDuGQ1CorfFOyM1emkQOAUiqvJAbxhBYCi5xGwukaHnWGQAy9H2N73CRvFdYlMydWrKVA9COgBi4CUMAzoSsAvmQPwn//zqBnNju4yw4p6neih2tOB1R/+BwOPbu5NwGrDIIy3AjpMK+ccLNe6hI17iaKWnocNp465WTqJmyZhv25MubixklgpqNZMiwJZcbuCEjO///s5ksZjut21hkxcyStgKMagahUO6rSvlq8TBowkYa7tY8NpcBlUbJM28Rr4PracOjq11L2kKDAVP1/nizJd3vriR/DSl9LHjh8HANzVOo0HLsyTzXp688f+Pc21ZQkLVrapaZjRLWxvio0xyyLJtZMnUw9SMClmMVNmNe+QFzg+VCnEJ/7gSbFztKIQg0UOs9qPZDRNf6cBT04IaVYXVSPiyYCEISmLK2ioRXRq8zWrC8uASBK0PONGIK5MqOmjY0VdmkMQyYRZzdjKhkFka6oGqzUHfUcAHKE37UtvXh9l1+/dC1P1sVTroXM0ZSSk69VrVssyahoxB+Ru9B0HG04DnQXOdxM0wvynih398P3RKi5AfP7udtH3DTRnNWBxEfsbW7j41JCAM56BhpEal5IETctJ2kyIX/gF4DWvAV72Mqq5zwzQ0mC16gqB1Z4H9K/08cW1w3je4lk0NQcrj22gphKQZa4z1gYHRChVSg6+wWIMVj9DNKsz251Ca19XBDWrLXnUHBbAkSM7PBAx0wqx7dUKgdWzShdDZthtWfjU5RP4mptXdnaX6d9mAPYASsmA5IJ/ZUBwKgOSe9hPV5EIBmFWq7n3rOeEmDMGqJkh8ZwQ6KsqhwjymNWlZUAECDjDIVkXmyowNwdZihD5QcKsNkbB6sVaD1c3pzCNDwKi4W+m1pTriVnNNKs5yQUA1YKf7ExR4hpIWe2yKpOihtbU1DvXHDeKYLkKakpKdm1+nsx3fVolOmeOvkcUrB6ECWObFwJgdWG5DtougPzE1bXSrPZ92I4EQ/WTPlMdlB/9xTl8z6/eHleLP9OZ1YGXMrc0TbQ0B/2N6fexfkgS0mZDheVr07O1Gf6Q8rWpqy7fMJ2ezxkDXih2Nasri12w+lkQg26QYlYXBxRXV4HlhQDtVpSAwKldty5XVILCmNUMrNZ1YnTSy9+MM2b1Bz8I/PAPE+OFGFSnoJfGFmkmAyJQLsJA8LzPHdGstsVkJVZXJz++3ZVwureQaOoaBmFQieow+T6uXAywp96FJBFGaBSRjm46DczO0L7VamhrNrpbU4LLzLRQDgm7vgLZcgCJvrQuF0qE/OVfElZ9dpvJBlAyqR76tJpZdHOtmQSs7hhDbK1PeS8wGZAW2fi0ZyR0PVMYrM5iVm86dcymwWrKyOGB1X6o4PlHN7C4SB/buxeo13Fn4xQ+9dAsOro1ulkvINnhuiTJsCMY87amxm3Om32sr3ObBEDuW3aAjLvh+wRMaiXziyEgX+PZxMW60RbfiDY0J59ZTbPwTdMXO+jS0DRkgwhMo7UMWC2F8HMMFtnrioSs5TB9aIlwYdAHSA5PWQcdZhhljM1v1JFn002B1YxZPZyCQcaCfc9ajYDVtsZfD+h7PvSz/ziK/dC68kPNDXROLCSPC0pjcWOMbVgzQpK84xweI8vGmd48Dh4RY1Y/Uzbhr3kNsLGRemCSZrWuE6NRi7OQ9XpErmtOB+bncaCxiQun3UQGxBi9hppJK00EF8izZ4Fv/VZgYYH22SeJhB3M6gF//fZ9oL86xP3rB3D3/AU0VAf3fgZ47uEN3Dp7GbP7Ro31eCCCF8jFNT9Bwc8c48ZYBqRMeXbVzOq8dpm0QQm2tohRGaIIQ0sizGrORN5uhth2a8Ljyl7rw/z934TZXYVlAdFgiHP9WRzZv3Odjpnwk64Bm9NKyIDE+u2T5sVpZEDyLgFjvxYYW4omI8gzGgVJ3MwZQ+xdDMRwe6ZZHeZUBZXoK1QVhuzzt7KWRUDpFgGLUK9DiiKEG1vUYDE1n+g69XiYDqwe+jrqabCajukoyyE5bYReJNiYyUq2jsvKCbapSgGCvCWxBGtfiFkdlbsGmfstRiySi5/5dC0ipphZ+/lYRiaVxJyfx5LZw6rVImvX3FimTRSsHtfvzwuezBCmXGfymNVMY1y0XdHKM8fBlltPPFZY3H03pG/4eiILxZjVPKP4r2SERP5IlUMCttdqhNCzOT2xi90rjbZCPBymBat9H0EkQ2HoJ/V0Gfb5RA4AiSeYSMTVRqV6uhup2AWrnwUx6EdoqGRSKKNZfebzqzhy6bNon30oAattO7ZqKwIo/uzPjkl0pMN1SWluilltKh63vMXzyJ8rV4APfQi48UaMgOpuoEJTEwDYkH2hs34QcMDqlM6iqsvZIFIqogh45SuT9v/n/ySeaqdPA9s9Gae7iyMGcEQGRPBgdPEiVoZNLNfIl59Tu+Sw63kEqJylr6MAzYiud5lgoDIzQhQxixBtN1SgtmqFxhYzkwLIdY7NQIFkE6wnYwtAJaCPHypQTZW4HNe6WFmZUjfL8xJtQQBSvSak78X2kl/8Iin3vffe0X5uuvXRsm9WPiqgWT1iridJwLFjuGv+PP7qzO2Yrw2RINmI3elFmITr68Dv/u6EJ1IJCwCArmPeGGB9Q+zaWhZQWz2LN36jhTe/mZ4NJzCrRRhJvhMUY/0pChqqi4GdczByXfihgmYtKARWq4ylmceeKXHIUaQQftZtVpZJl7fJL9tXcORFAGIcNi7HAMRjdNNpYHaRfjBlVvcsberywdAPybhXVTRrRB+dCyRlHXYNA/jX/xqHnreIzkJq3FE5nKmrN8Y+1zAAh8MkBICTV5o4MbPKZ48wZvUzZBP+1FNjSWLfhxsqo9XFug5d8fnltP0++p6JxrwJzM8TZvX5MJYZGh93qi4ToFYgeWfbxERV/uy9RP5pA4RZzWShaD9rqisGVts++p/+MixfR/O2w2hqDv72S3vxDdaHcNvsJcwdbo2+QYBZrcpBcYNFlaNZPY2WKIdZXVS+SGTeKpwQVFXCAOaBE0EAy1dR13wuaGvWZdg+P8EEAIgi2E+egwkbN2un8chDIbZXHSyYg52UbXCSC2WMEAFAkqDKdBxMmmuDoLgeOjNY5MiARJFUmE3J28P4XohZY4C9y4IgkSQl1UZZa01aslA0CjCrrUBDfYa2vbhICABPrpNKPmMUVObKq4zF6urY12IyILVRZrWep6/refCjctVh7DMnRhkpMwHwsxRYrSiQpQihm51sL1shByDHI0RJSFsFIt5v5Uis7CAHzM9jT72LK9YMLgw62HdsbI4RNFgkYHV1MiCEYFbSyDeHWR4T1wowq1VZQLPacUZl6yaFqFH8VzKYfFaKrdzUHPS3pid2EXlPYLYTYcOpV8Sslkc0q+uqi+FAjFktNFZZxMzqcl3djSR2wepnQQz6UcKsDqPCstVnPvhlHGlcxcz5hxKg2U2Yabmbj7G47z5gbS3jSdel8gd0QyHC/ESyv7t0iTCRbtrfH2FW9z0DTSMprzMEyzF5zOq4JFbThLVEgwAxO/SDHwTe8x4C3n/uc8B2X8HTvXk0G8kkWVNcDG3B2/DqVWzYDczdeQCQZRw1L+P0kz7g+0QGhFWTqyotfZ+STUhZt6pOdAO9qgwWGVDJwGpLbGx5HgGogwD49m8nf0b6mmZZGYaYPqnAh/qRDLWmUbC6h5XVKcHqMWZ1nKkVZFafOgU897kkCRLf675PQLrGGFitCjCrI5mA8em49VbcPX8Bd81dwJ7lMSYQY8+4fHCm2yXa8DuCGqDpNSVuc94cYGNT7NoOrw5Qf8/v4d9K/wmWFRHXe9+HHWgw6wkArgskrnwnIIwA0dODqvJlQByHGCzWg0IyIFzN6qgkszrPSGgKQ60okvK1X4vKgIBcAzcPWGXriDnW9sICGqqLi4MOZm+ljliShFY9IJULU84FgRcSI2NFQbMRoe9PAVYDwI034ugdTSykiNUMUJ1Kxz8Md/ymkibGdLr36X146Z6T/A15zKwu382qIgjIHLO+TuZEAAmzupa6R9mhjwdWd7uIACgzTQpWb+LiZZlWbuijGq1I6fkLgIpPPgncpJwE/sf/wNylh8lewffJeE6D1YonZLzsDV2sWi1y4P+Wb0HT8NDQHHzToYfwb+/+MF72jc3RN/DAalbuXNRgUZRZXaacnmuwWKir+e0ytnaJNnXZ5zOrmYSRyQce4nElIgPS7cIeBDAVDy9ZPoXPfLiHq5d9LJo9Ypo8FrkyIGU1qwGoKpFRmQjWlmVWXwPNahE2pe8BR1rr+PbXixMeYi3wHOAPQDnNal43mAxIm7a9sEDIFU91qQzIKLNaV8SrJft94EUvGpNNDAJCDkiD1cwfIWvuiiUwymlWR1maHey+1QuMWSZbkyfbUnJsqVKORwg7V1UphcI8YOTi+y1di/L3W0y2MD1+5uawp76NC4MO/FCBPjvmIK6qQh40lgUiA1IArM6TGYrZ5QUTYgC4iRBVicQJHWx/xJu6bZswqxt8sNq1nsHMaibXkQKrG5qDwdaUOnGMBa3KUJsmqYapAKwOIjlZhgyDXykLlJu7dw0WK4tdsPpZEP0+Yma1JnmFS3PPnFdwpLVOpCO2yXtDyyFgX6tVGFBMmyGOhOuSzU2TDjsRTV0kc8TFTzyJQ8113Hjmo+h2o7jNnmeiNQZWO+6UMiBRBM+nZS2SJAxW+z6wtUX+/cADwFvfCtxzDzlIdwcKVqyZBKzWddRVF5YreBuur6PnmWgfbAOLizjavopP/k0fv/ShuwhQOUe/s6YRzer+lLd3SgdOU0K4fgXmBrRdL1SgtuuFEiGeR8b6+94HLC2BAJQjfVVGmNVVyYBEkUTAHsPAUq2H1bVi17XbBX7gB1IPMDmcJl30ajVIUoRoKMasvnRqiLvuItLSMbuayYA0UquiqpL7K+8SpGVO0nHXXZClCO/6mvfiv7zt9OhzmkY2+ZYYWL21lTDi05/rjoPVRh/rm2LX1rpEdFlx5QqOtDaIqRTdxcbAnKgMiEO11oowqzUOs5oZLDai6pjV7EBSouxdlQMEOTIghY2vAD7oE8rQtBKHJ53KgHDKUuvjgE+ng44+xNO9eczecSB+uN0M0ROQ2cmNKELgU9YpA6unYVbTePvbga//+tQDuk4qg6Yx02GfKUnJ4UpAlxEA7r+8B89bOMsvdYyZ1RW4s08Zly+Tr3XhAvDOd9IHg2CnZrWmiV3bXo+sHa0WMD+PffVtXLyq0/3LGJMQKCSL9Mhnt3Fb+BAAYH77dCwDYgUa6o0UWK2KgdW+G+Lp3gKWblsCbrwRx9/yXPz8c/8GuhLgps4KOreOOcNxxsFIKW+BiMHPayADkikpMK3BYh6zuoRmtSYHcHn7TpaoHk+0ZbQJQAystm2SqFU8fNWeU/jsp3ysrQRYMPuTwWpWDZBxDQCUAqs1Jco02oyBxoJAksZjVqfNZAu0CyC/9N+NMKsP8a++Xzwjl+vjAEzHrBYAqy1fR22GnlUWFwm54sltAmI3UtedMqtFQZTf/32CJ545k3qQafjXR5nVpuplSxYwQLEoj4ZWhwVexvmD7Y2KgNWKQjWrBTTGC44tVQ6yweqUDm+h4Gjt+6E8HbM6F6zWRskBCwt47sI5/Nmp5+OG9trO8cw0/O38/lgWCsqA5AB/7CyjFrwGvKQoJVcVWhNEwWrKrJ5t5ryQkW6eycxqRkBjYHWtRkzIeaaFvGAV05qUVAhVIANCpIjGmNU5xEX2PgCF5+5nyj75eo9dsPpZEIMB0KAGi7ocwO0VkD6wLJy8YOKG1hpmdAvdVXKgdwY+TMUD2m3SpmBWjwtWpzVlRZnVFHy/eCHCj97+MbzywKOJzrXnEbC6RicSwyAbOx7DBRywmpVqqRSs1jQC6HBWHyZVEQTAww8Dt99OpFTPn0e8kWgu0CyyaZJDqcO/DVdWgLWne+h6JtoHZoC9e3FDax2/954a/uqhw9h2a5iZTa5rW7PRHU6hRwckZiiaRHU55enBXyApw2nXocmhsAwIA6t/+7eBn//5sT0b6+uYDEhkTykDwjQGKbu+oTr8cqGxeOc7gXe9K7XGMgBcT8DquupiuJnf1xis/uRJdDZO43WvAz71KfokA6ubqYOVopD7a5gvAxKEMmR9bKxQ/V9JAswTB0ef0zQyJwgkGZhUyw52Nfvx2MJPmdXrWwKnGMvCcMslup8ADrtPxWA1k2lgbYokrgrLgFBmdd/Oub8chxgsNqJiBotMbihTl7CkwaKUU+4ahsXLs2m7khRxDH8K9hWAZshCMiA7qtuPHUNnUcXTynHMLieHn1YL6Lq1qcFqP5ShSIRdY9QV2IHGlxnigNW6PnbZKTDBWxOFPhOpcS+iIRkEsDwVTd3lH86fQQaL586RW/eRR0hybDhEzKzWzQnMap72I9vANBrA3BxqqkeGTrdLNKs7YzegYMkzAJx8yMKJGaJXMmcOsXE1SAwWGbOaGS/zwGrXhe9FON1bwNINBJC84bteiv/r3m8DvvZrgW/+5p1JB87B3PdBqgdKgNWZjFqUZFarKhQpROhxgK+i2xwGgk9iaZadY1WVMFUFmNUTq0ImhaYROQEOOxEA4DiwA7KfvrlzBY8/pWBtDdlgdY4pKDEsRzlmtRLBjyavX4VNygA+m5I1DJQz78yVASk+ZhVVygTrAUwFVgtpVgcazHYCVt/QWsPJMyqsQEe9kwIENY2AiYLz98oK8PKXE739OGLN6tRYpqziwM1nQBdOBjHzyiywms47klIMrFalID9/yyRmCv5eqhTCd7LHAJEsEW8SgBizugRYresgmtV5YHUwNmfNz+NrDp/FB888B7d0JhgJUZ31XIA1imDZEjFuFAGrY+Av4/n4zM5vaiR4iSt6bQutCQU0qzedOjqtnEHISDf2M5hZPcG0sKk56Hcr8M2KErDaVDxYm1NiEOOa1apKzt88HMb3iWZ8wcTVM2WffL3HLlh9vUcUYWBJaGoO0GoRc8FuAYDu0iU8vLEPt81eQlu3sb1CJgI7DVYrfmXM6hH5AwamceYeb41oflwazuC1Rx7AcxbOJ5qeE8FqD44AWzkIcvrKFj4lYUEDfC1Rtt53u4SFcHi/j/kZH6dPA8cWiYh0c5mW5qoqAas9lctY/rM/A/78Y3MEpNk3C+zbh6OtqzhzycDl7TrCSIJsJMAf0WmdUgaEmRZqEvSaQkrFptWApu2GkQyl3SATueAi7PsE/PR9Yk4lSanLNs5WMAzC8OhPuUqkDxe6LpRcGY/3vQ9485uBhx6iDzCaENugMcM2jnOyd3kNuuzh8nAGnS9+DCfmN/DUU/TJGKxO3acsGcRhVgOpkuN0/NzPAW98I6n/TAc96IjMCUw3/S//Evid30k9wW4UtlHUNKKvuC0wZvt9AkTJpI3DwWlyiHJdsplg11Ulr3G8/Lkg1mktwKxuag6XWe2FCu440sNrXyvWLMAxLWQAcAlGTq4MSFmNUo72aynJEggYLLruzsMTfePNb7gNmJ3DkSPJw+0ZCT3PmA6sDgIEkRQfBiXTiPuSG0XLiFnJN0+flPOZUQREUkGwmo5ZzVT45a6yTBKNQUXVNlPEuXPAbbeR5DCAWBJokgyIiFl0zOTVdWBuDpAkKKGH4OoGBr6O+uxYybKgmRQADDZdtDQyDuf0PtbPDyfKF5mKzycQnTmDMJJwureIpb2p8SVJRCPrW75l53s48gdBAFJlUrUMiFeCWc3mrSzQhwLLhdiUrN0sQC2eY4s1yeQquAwqtgeuCdzfuk7MYbsCr3UcUkmg+JClCHNaDyfPKLlgdZYMSGwmVoZZzWRAJoyDWPe1ILM6d+2iDRc2LRRgVvteWEweDOS65hk3xtJpZZjVPNY+3cvJJt3/LCzgxcun8b9Xj5JkWCc1b9FkIze5QsOygJtv3glWD3wDjfoYWJ3HKk5LKhQJ5ruR0y6AcmMr7/jBfseCCRY1D6iMz1UlK9ly9lulZEAMSUAGZIxZLUmY/fHvxa2dy7j1zgn3nQizmiVpdV/sd2OJq6wjXcyY5Tc13ldZirKTojEIXoxZrUoCnh7MYLGV88KYWf3MMLOeGONs5VqNSGtUAVazNb5ex4LZx/rKlDrYQTAq9cXA6rzzHO0Le71wiDLsd4Mbu2D19R6um+go1mpkU9MTL1sL1rdgByoamou2ZqG7Rt5rD0KYih/LgIgyq103H6y2AupWDcQlY1xm9aWrUKQAFwcddHQr+SAAv/qOJnqegVY9YVcYsg/H5w/tXGZ17Fodxe3qcgC3LwZWX/mP74HZvwr5p38Kc+//rzh9OsKJDhHzbu6nVEtJQq0GWL4uJi+yTn4DaXEBeNGLcLS9hhvaazjU2iSZcbYBVlXyWw5LIEXpSJXgaDWVHEKmLcEBkotUrxcCqz0PWH16gJriAE8+idnZCJubqb5GKaNAKrEy7E2ZjU6zdhgAXgBIYprSX/3VwJe+RB9kvzX7vWo1cijdzF+E3YeewIxu4fKwjY5h4dh978fJk1Hcz013rJysAFg98fB08CBxCx0HrthBR5BZfegQ8F//K/CZz6SeYBvuFAu6pgiajdIvJO3fB9RqOKxewNmnHETbFBlvUVMxRSGMBA6A4NllDBYdDBwOszpUcGS/h2/6JrFmWdsAqjX/ogyiTCwtishhv4RmNYB8pk8Zg0WDU5bq+xj62iQMBj/zM8QfIDabBdBoSuhPq1lNmSMxG0NQFmpHUoYXdMwWKfl88kkigRGH5yFIl2QCfEkFAHAcuKGSSPPkhSQlSYWv8E78/HngOc9JkoFXroCA1WGGZjWHWe3ZAQzFJ/OBqgKLi1iqdbHyhfOkMmx+jK1cAKy2ex4hAQCYMwfYuGzH908sX6RpqCkuLF5uZXsbTc2B7WtYWuJ+9Ghfc2VASmpWZzFKwxCeL0NTCrbLYyiyhFgJg8VMQC2WLyrWZAzOCDGrJ89dk9ps6xa2twT2GzRRKy2TgXCktoL7Hq5jsdYn6/h407qc+XuVApWTLme3y0DwMsAfh1ldmP0qBFaD3AsFFjHCLM8GqwPHLyY5BlCwWkCzetxocnERd85dxAPrB8i5azY1b+k6NQQV9AgZErD63Ln0lwnI2XMcrOaAyn4ZzWpZJgmmHCkz9jrhYAB4zv4wcsslQlSZp1ldznsEQH7VXVEJDFByQEY1BIDEYHG8ku3mm/ETvzyLl/3cyyY2ymVW+z4hX2mCZzSaZMxMCJYBlVPtZv5eZfayMUjJTzBxmdWsWnwaAsO1jnGPGl0nMiA8HWhejMmALJh9rK1MeaYPAgRhSrNaVdFQXQwczrpUpoKHMat3ZUCmjl2w+noPy6K6YREBq2W/ELP65CNOXJY6o1vobvjEWZyatTAZEC/rwDAWucxqxuI0EuajIfPL27zLRKJk4JuYee3XAABkz0UYAr/yznlsOg206kkG3FB8OD5/ZeGB1SMlRcz4igPQsfns8/cBN8lPAYMB5gfn8PTpCHv1NdRVB80Dnfj1tboES6Cc3PdSwOz8PLBnD+afcwhffP0v44h5hSQWUsBfW7fRtSoAq6MxsLoKGZBxsFpQY90bODj//3wes6tPAP/3/41lbTPRrWaZXcayUhQCfg6mz+wCiJnVIuM1Hf0+0GwSQ8QYrGZtMsDLMMjCznFO9gYu2rqNFXsGnVaA5qkHMNgm7xn0QsKsbqfuU2awWBaszgrmJC+QwOp2gVtvJTIg588njztWSACh1JgVzkCzL1SrAQcP4nBzA+eecuBsWaRNBlYzRhKPWe1SzeoC7NeG5vLB6kjeqQXOizzTwrIardSZPPPAPy2zOlOzusTBAYCmc2RAWCl9Xew6yIZG2OpTgtUEAKbzCbt3OfN2DA4XkJgxBKo3oogYDgPAH/8x8Ed/lHqSeQ2kS4LZpjkvMWjbk/XrM4KrdflPFOfOkfn11CmCy125Ajh2RJjV9dR3YWA1JxEwHEREYoiN70OHcKCxhYuPEu3XxsLYqb0IWN2nYLVpYt4YYGPVj2Wh4nZoxZXNK0v1vJilLQxWC8iAlGFWa3qOZjXbSxUxqKJ9FWJplij7VuUQnjMZrCbM6uKsR00OiK9HXjCDxXHgZ1JoGtmTdwVey+ahvXsBRcER4zK+cH4JC/UhcODAjpfHTPjrgVkt5TOr4zm2SoPFKEr6W5BZnadZ7bthsSou2ldTYB+zA0yZm4NqqujoFs7351CbSw06tocrwKw+fBhYXR39vIFvjCZe2D2bWw1RVgYkfy4AUGxsyTJlVmdfg3hvWBCgUvP0tZlnT4mKEAD5VXfTMKuzNt/MYHHCnPV//J8tHDg+wd+CJe/yzgiMsW2Ig9W5wB8Dq0sZkOecQ6kfUqF2RUFKz8OWWxs9t41HLAPyDNesTmvRszPScEqIkZLQVF2mYPUAa1enBO1ZZUOKiEhkQDjrRxmz1V2wurLgjiRJkkxJkj4vSdIDkiQ9IknSf6CP/5EkSU9LknQ//XM3fVySJOm3JUk6KUnSg5IkPTfV1ndLkvQU/fPd1+xbPcvjne8E/uRP6H8cB33PQKMBwDDIAsFh/6bj/gdl3DV3Adi/n8iAbEekLNVTYGp+DCi6gkwvzyMAcBgCf/EXY0+Oyx+IgGkAvK6Fjm6hWQ+hfsPLAQAtqYfLlyJs9VSc7c2hVU82K4biwwmUhNaaEUFA+hpFwJveBGxvj/aVLHxJplDEnMnbIkj9Ixv7cOhWAprNGQNsbcuYibawaPZHwWojxNDXIF1fVwABAABJREFUuQddr2dj0zbJZow5J995J2aNIQ43NzBnDkjJMpAYLE4LVjPTQk2CXlfhhtXJgAAA6nVafiNzfysA8C0P5/qzmNVJhmGPtJKA1QxYZxtAtgAV1JfeEWzMqiopzxYYr+lYXSVAwp13AvfdR75mLCXD7gNNQ0u30R9wGMCWj7ZmIwhldG4jxlkteYhuF3jjvzmGj1y4bXTToygEXM/7yUpqKOqCjPhuF7jlFgImpRNDfUdDU7MngNViJc8AiB7rwYPYV9/CpQsRBlse0e5PMatFZEA8xqAS0c0DqOO9C8vjy4Co9YLChAJs5bKb8cxy17KGWlymT4mSTBDgy81j7FKmj1ApPZCM7WkYwFRnX2GHQcOALEUIrPy1NvQCogEseiFYspXDonnqKeBHfoT8+/LlsaoFthkfY1bXFA9WP//wWAisfoYwq69eJay/KALuvhv4yEeA7/3jr4M7zqxmGvacazsYgIDVbD44fBjH26v48c+9GZ++chz1xcboGwoY4dn9AKbqATffjDljgPW1KHGfbdB2FYVoVguA1bocQFVCLC5yPzpuW87RgY4NFgtWWciqTOQPJknCxCBCScZb1ppAE2KKXjAhmKcnSkuEyxgs6iKHUiYD0hA4vGoaZnQb212B17J9imnGWsVPbS9j4Uhz4tyjGXKmDIjry9CLMqBpqCoymcXlmdU5iVYAgRsUZkBzTdXY+iUXMx6OkwBZ2u12UFhahKwJXv4+DiCeHWkWsCQB+/bhpXtO4qMXbkFtITVvseo4gQpUgIDV9Trdv7Jbg2pWN9LToQCzupSXBTNDzJkLAJRIhAQI8si/blhKvkjJm7eYGV3FxrClkgBIJZ3zmNW+BrNWoL+MKJK31jL5K12wzzz9+imY1VpegqUMCC4wbwGImdU8sFqXn+HMajam2W2ikfNdvwqwOpShaHLCrF6fEvilkn5pZnVddTF08yelyBvzRBKJXbC6shAZSQ6AV0RRdBeAuwG8WpKkF9PnfjKKorvpn/vpY68BcIL++ZcA3gEAkiTNAfgFAC8C8EIAvyBJUqpYdzdE4uRJIiUbszQti+iGNSXANMkCUUCn96mnVdzUWQFuuIEAnH1iojfwDdT0MNF5FMzqMWb1vfcS2cRPfCL15DhYrSgwFQ6YBmLOM6Nb6MyEBIgyTbSVAR79EkENz/bn0WrQ/kkSDD2CE2i5JX5Awqy+7z5y2P/P/3n0i4wsUIyVxQGr/ZNnAACP+cex71V3AC9/OVQ5RFuz0NZs/J+3fhq1ZjIpEhkQgb4OXawM29DTJa/HjwMAjrTWSdk7ozhoGlqag65T1MFjLFgJji5Dq2vVM6tVFQda2zg/mBNipXlOiPP9OczeRGhky+FlUvId91UZZVaLmFTR+PjHgfe+F3jiCYwymdJsFZawKIDXr6wAy8vkDHn0KPDoo4Brh0mZOQCoKpqqg96AA6o6IdpUBqdzG2FLHW+t4ORJ4NJVDRcHs5idSd2nDADOw9PKgNW6Tg46AnNCrwe87GVEr1pJnY17loqW5oxoVhdmVhsGcPAgFDlCYDm43G1guTkcua5EBiR/ExIfSArIgKhyiCDPRZ7KgKi1gsgy1/G9HCOHHPQynp/CYBFAtfraAHSTw6xm5aMNwf6KSnbkBTVlSZc5NlQHw22O4a4TFAP/NI2w6ByONJaXzFOXLxO95rR+vxOo0NMlwapK5sO8ShPfhxuo0A2x3+yZwqy2rETp4O67iT7+xkAn3yUtaUI17Hnz1nBIwWo2Hxw6hB+/8+/x3q99D37p+R/CDbeNaTgUMFi0hyEM2QdOnMCMbmGrqyRgdTPlZaF4sDiHp9AhJepN0y8kA5KpAx1F8ANqsFiEAQ1ibJaptc+SbCV0anlsyggEKC/cbhagFkXl5i02tgTAaivQxKpCNI3IufUFvh/blBgGsLyMI611AMDCTfOTuyvCrC44BmiXrwGzOv+wX9ggmbabOV5pZ0c8UAQjVw4HJfYaQCKpwPHhibwxGRAA2L8frzzwKC4NZ0fBal0nhqAFwOoaLCwuRAm7OggwmARW50lghCGR6yvJrM5kK5fWlg7hB9lkmZgJX5C1n8suZ2dLo/i8JSHDGJZJVcglDBZNWcBgcYIMSF7Q5J2bt4+h+5SaIdhnVhGTw6wmSYAC/WTtisiAFJkLYjNIERmQBjozOdeJMaun2L5e82AyeePSGvb0YHUQjcmAbEzZpu/DCTTENk2U2DZw8gdO4BYkngCjYLUAIW83soP7q0ck6G4aGv2Td9VfB+C99H2fA9CRJGkvgFcB+LsoijaiKNoE8HcAXj1d9///F7//+8CP/Rg5oAKgwLKOZktKZEAKaFYPuj4pJT1yBBozMrFtbDk1zDbdBKQtCFa/733AH/wB8B/+Q+rJca3e2GAxf0L33RAdY0gmdEkClpawaPZx36cIcHe2P4dWMxmSsUkZ5/DIwOq/+Auiqfu3fzv6RUipiBT32VA8rt6lf5qIuj26sQf79oGUZQKYN/uY0S3825d8cuQMoOoywoxDw0i7QxfnB7NoN1Kvo+WdN7TWML+QupWZZrU9ZgRVNNIGiw2tOs3qlF7x4bkezvbmhLRfPQ8415/D7K17AUnCsnseK5eCpK+hDNVQ4rbrqpst8zIWDz4IfOxjwC/9Ekm0xDFusKh6sB3+puX3fg947DHKrJ4PgCjC618PvOMdwFpXH2XuUcM+Xhbac0K0adl3567DAIBj8tM4dQpQIx/fdvQ+tPakTg4i2f2yMiCKL8ysXtY2cI/yeezbF5F5KwzRd3ViCssOrozpwzMRAhAxMVfTBPbsAQAsK2v4zJVjOLGUKo9g7I68A1kQUDZhAQZVzFTOB6u9UIFWrxCsZqBPUY1Wjut9GESQpWIMMgCJDnLG4cmPSrDAQVh/uYxdJgMiClZrGjmMWBUyq3VdyO28cBkxZdE5vGojjySCADLH3HNPysDV97HhNDDXSGXV2HzYzweri4yvGKz+CjOrLQuYlzZQ1z085+Aarl4FejaZW2MdaECYWR2D1exQcvgwVBW4ob2Otxz7IvTFmdE3iDKrowi2FRJm9YkTJMnmBckPmZIvqql8sDpwfGhygFatAFjNAWqDkJTGFwYqReatqrVEw4SgUCgomDSx7JseugvPsZIETQlJYjTvUMqY1U2BuYvKgGz3xMBqCSB7ikYDR1rEH2Xha2+f+HLVUDLlKqaRASGa1dntFtZDF9jDeG5ExmyVzGoKKBatDMr7/nFfSwAeInJmDptb0m3Pz+PFy6fR1OxRzWoqAyIKogzXh6j/8s/iTvkhPPAAfTAIiATlDrA6P8FUquKKx1Yuw6yWCLsylwlfcmzlVoSkKlYLRV7yLoroebVYkwA5g+YmnZkMiKDsGmmU6qwLMavFweprKgMySRaqbLsFZEB6noF2O+c1VIK0iqJmFmEI/N3fVdfeDnNLTSP7Y6vEgJzUrpFiVm9N3+a2W8NMIyHNNVQHQy+/3djbqMhNJhM5Pi8nIbYbYiE0s0uSpEiSdD+AVRDA+R/pU79MpT5+Q5IkhoztB5BSJ8UF+ljW4+Of9S8lSfqCJElfuHr1arFv8ywPzwM++lHgrW9Fwii1bbJhaEpUBiSAOxA/PA57IRqaAxw5AoACD7aNLbeOTsMHdJ0cnARBPwZWf/azwHd/N/n/xgZ5zrc8kplKy4AIGId4boSObmGGnRGXlvCchfP40Ic1zLY8nO3Nj4DVse4rh63MZEA+9Sng1a8mc1D8Fpb9ZocWlt3kaVYPyJd5eqU+BlYPSP+/67tG3yBg9AIAnuWNMsgBsjE7ehSv2Pc43v7LqUWRykqIMqv7fSKDsvNDE3ZJY0ZFzzOqlQFRVRye7+NMf54PVl+6BD+Use40Mbe/Buzdi2VzGysnu3FfvVDZAVaLYuuXLhHW8wMPpORgwpCytyjrVNcJ61EAUH3kEVIFsfqlC1j6xPuBH/9xvOHu0/C9CD/9qW9EbQysbmm2ILPahmFEMI/tB3QdB5RLOHfShRx4eP/X/zfIy6l68Lxy57jR8jIgIgaL3c0ArT/6HeBd78LB5hbRrfZ99DwTLSP1mzMAXICk6fTcWPcVy8sAgBtbV/C352/H8X2piYrJgOQxq8scSlWVMJXzwGrmOG0UYPrQtgHkalaX24xnH/g9Nypens3azTJAC0N4ZWVADP7haejrqImYlAGArqOl2+h1p9gsxprViQxIU3XQ3+YkL72IADSi11bQx8H3E2a175P5+8/+jD7peVi3d4LVNcXLrzTxPGKweB0yq2sf+O9Y1Ldx55f/O9ptwPaSdSAOUbDakkaZ1bUacOxY8oJxuSBVJZIwDuc6DIewPRVmXQHZHABa6GA4CIkWuknBJEUhMkMcsNqzA6hSiMUZF/OTCbQ7I09TlrIeVaU4O0/IGLZouzyjsjAkAG2JeStzXSyrgy1J0LWISKXl7eVook1cBsTCtgizmu2fDAO49Vbsr29hrm7BuO34xJerusxnVpeUAcliVvtBORmQ3NJ/kH1RYRBBVcnYyfqtKFGjaNJC0eRcg0XfR/FrwM5JnH3nYCgRGbT0BmF2Fpoc4p+f+BzmF1Lvl4lkhJsn/8DC82CfW0UtGuJ5/ufxxS/Q+zEIYAVj8hACCabSOvN5OtAlpcxUhVSrZYHVMWu/jMFiLlgtl6qQy7y2NJleeI4FIKn8xI0VaOLkACBea3OPdQysNgT3Zew8k7XvjpOi4t0caTfr92LX9hqB1X3PJGTDrChR0cuLwQD4qZ+qrr1JOtBNzeabFvKCkQY1GajXsWD2cXWrOAPmscdSt3gQYNutodNKzM/rqouhp2XOA0BqnSl4AMvzcdgN8RCafaIoCqIouhvAAQAvlCTpdgD/FsDNAF4AYA7Av6miQ1EUvTOKoudHUfT8RWEhvv9/xBNPAHfcASwsAFtb9MHhkJRitRUqA8Jn/8YRRRgwM6HlZaBWg4wIweo6ttwacajVdXJwEgT9XJeAn6pK9mOvehUB2GlX0RgD6UyFz1T1PGL+2OnQ1y0t4QWLZ/CPj7Rw1w1dwqxupd4gCAD7PjDY9uE6IWo1cgliDeRYs5r+n7pnc5nVboiGaiOKJHIePXAAkCTM1WzMvO3biXhvOgTNmXyLlAu1W2NP/Kt/BeWnfxJz99yUPKYohCUfimXz1teB+++f9KGJtlqtrcEOtMplQPbPWbg46PDB6rU1Mk4BInmyfz/21rdx+ZyX6usoWF1TPGFm9eXLBFx+7LHUvcWAXEkif3SdaAcKgNW+T67rygNXsGx2geEQ9U/8DX7ih2w8sr4HNT21AVZVMWa1G6GtWyMVBgcaW3jgCy4WdIpcLSwkb2Asl6rBasaC5kgVAEDv9GosXXJQOh+D1X3PQNNIJdViGRD+tR1ue2QsmCaRvmm3cePMCv7+4i04fnAUoItlQLLuA+bMXoT1F2sdcsDqEmXE10Rag8MEL82kY0DCpMMTM1ichlmdc3iKACimoMyRppFk0PYUBjU0+aCwS2QYQszqwkCKoGa17xNCbkCr9V/3OuCv/5peMsqsnm+m5lRFIUnnPBkQdtgTLE/mMuD/icIeBKidewJ/8op345B3Er/wb2wgikh1VRoUYtVRnPl7aE0Afb7ma7LfwEp+eZUmtg07UGG2ddJ2u42jrTU8srGPSK4xhjBjVnOYPr7tQ5UDfOK/fEEc+2KashlAbazTWzRoiXrVzGoemzICSs1budcgkoszq0G2tdzkDTNYbAr8YMwou89/rT90CRHEMIDnPx/Kj/5feOe7sydfwqzO0JZmch1lZEB0kHbHr0EUwQtkaEVZ+2ztyrmkhQ2SabvXQgYkBv6ymNVl2OUU+LPzPDLAwGp39Do8//nAiRP4vV+zRraGAJV/yDPWY7G1hTCSIEsRnrdwFl/6LN1j0e8opQWoeTIgZTXheQBwWbBaBYIcYpPnodTYymWXTyEDkmlIH2uBl5i7eTJWBb0sAMSEltx9jOfBDtTYgokbPEmgKRMhecmFwsxqdvbKI7QAgOcRybZ6TqcZUa7CbZbnAWtr1bVHZPKkEWZ1Q3XRt6f0zWLnKGqw2NGH2B4UZ8C84Q0EP2Ntbrs1zDSTyqy6yfcOK8WsBqBp0TOC1HG9R6HZMoqiLQCfAPDqKIouU6kPB8B7QHSoAeAigIOptx2gj2U9vhuCsb1NPPRG9nqDAfqeicacQcBqARPAOIZDDF0N9QZhjaLTIWZlj25hy6mj0yabX1P1hMFqzyMs1VmqRv6KVxDmMu3qDvkDEVmFGKyeo8N1eRl3zl2AKgW4a+Ys7EAfBat5Tt80/KGL4anLwMWLwP/+3zh0CARMox9KmNX0/xSo5IPVAebNAWQ5IqW59Trw9rdj/oXH0J6Z8D0FwWrPIs+3xyqQ0WyOsr4AMkAK6GhubRGwdgeeR0tiVUNJWF8VgdURQA75Ji1H5YHVnkfkakDH1sICDjQ2ceGiFD8/SQbE4kjMsLh0CbjrLvJzpcHqKEJywxkG0VjnaAfSt2JjPcLqORtLNVrm/cgjODB4Ak91l4i8eAqcaGk2+haHSeeEVLudPrC4iAONTXzpfhlL6nr8WBwMmLgWMiCyoAzIuhdLl+y3T+PSJQBBQJjV5iizmjAR+B9v9XzUGLMaAJaXcWNnBUPfwPEbUn2SJBhaCCdQszPmzJizKLNaDuHngdVU+7TMgQRAvolOKRmQ7HHg+yh+gGbtZpVPUtCnjGa1oiv50khFx6ymoa3Zo1r0RSMIiERCSrO6ztOABmVWFznsMukaDqDKZEDW1sgtbxjAi15E/Bfg+1i3G5hvpe4vplmdt46zQ5koWP1MYFZHEcK1dchShK/acwqaHOLHg18FAtqndI061X7lJdmGtjzKrAYI6PPd3w389E/vfAMDq7PKiFm4LmGS1en1XVjAjZ0V3L9+EDUz9V7mt8ABpxjrr90pcN/mlenTe1YpCVZngn+MWV3CtJAkW/8JZUCm0drXonztVyAhQYjIQzGj7CEfJLIH1LhT18n1uO02vPHbsuccVc82WPRCeQpmtQQ/msAii3XLS7DrOXuYuDKoYHUYgFxfhMpN8JBiVheUQollQHLIJwNLJlWy6eug68BP/ATwmtfseL1qKIQFzgOrbUK+AYDjM1fx1BMJs5r1L2lUhSrlECSY78Y1SFwBKAVW58m2xJVRVcuARCWZ1Zy5u4zBIpfcRceHpBe7v7jM6iCA7RdgVstkXsqUVGASTqXWmXDyegDE+6JCvxdLLAR8k2RJikblysaDyYAIkKREw3WnA6vf8Y4xKIBhBWpypm1qDgZOBTIgKc3qtm6jOyzW5uoq8PjjxJSctUnA6mS8G6ZEyHh5YHWZCh4AWk610W6IB/fukyRpUZKkDv13DcA3AHic6lBDkiQJwLcCeJi+5UMA/rlE4sUAtqMougzgIwBeKUnSLDVWfCV9bDcEo9sF2nUf2N6GaVL54H4fXc9Ea8FIDBZFwWrLIvp5LbpYdTo43NrAuSeGRAZkJqLMak8Y9AvDCGcf7WPBuwScPInFxQT8GwxANlMjMiAc8C8M4fnAUq2HpWXah8OHYao+7l44j7vlBwEArZlUG4pCXLE5h+igb2HbNdFUbOC//3cc1Fdw7hx9MmZWJJq6hsI3Z/KdEAtmH8vzfjKnLSzg+39Qwx13THiDquYzPFi7FBgc+Z55IaqjCZIEGQ4T6czkQ1M6VHRs2d0KXB5SzGroOhqag/4WZ8y6LkzFhyyFMVg9ZwywsSknfY3kBGih7DRRZvXmJvDSl5I/sQwIM3dgh3dNI+WYHO1A9hU3zvaw0jWxvEcCvuqrgCiC+b73oK66qDVSG3yqWd3jgdVuhLZmo8NsaZeWsL+xhceeNrGsbxHwlpl00WtADEnyGi2rWS1osNiX4yRDZ3AR26tOilmd6lgMVvOv7bAXEDCJUTL27MGNM6vo6APM7R2laeg64IQqnzVS1OlbosY8WUFlIwqbf+Ul2sKQtKmVkOuQw+qZ1XkgHTOlKbNXFWD6jLyOF7pOmNXTyIDQyo34XE7lsYYiYHWRDa6gNBZjVl++HMu244UvBL74RfLkutPEXCs197PEVRbbC4jnO0UXG1/PCGb1+fNUB6QGvO1tBKi7cCE5zKaz2KoKXQngcJawiWC1JAEveQlwww0738CSdwJgtRuoyRo1P4+bZlbwJydfiNsOjGrtE4NFvoaiKhfQQwfyS8nDcDQhUySuqWY1B6AqCqrmlX2zipASzGpNA2GqcsBqSYp2Sslk9NOQfSEfB7vvE2ksQZqioiuTZUCiCF6gTG+wON7utFIwOQzFUiACBT9DL98ErwygCCDTINkLZZK8LHJtZRmGGpCkOw+sHmdW50QMPgqA1XFXpAgHW5t4/HFkg9UcZrWXBrVEgxks+tlSDaSDxX4vRZXyZVvcchIzuRWNVLO6DJEhk10+DbNaIHEz8jrBNnWedIXvwwnVmHPCDUmCpmFyMgwonxTNk4UCynnF8IB1FiJ7WSoD4gpUnYqG55HbWvR8PB7veheReo1jgmZ1Q3XQnxasZiC4TsDqlmajV5Ct/elPA8ePA08+mbS55VDlABpxsiAPrGZJ0cJg9a4MSBUhMlvuBfAJSZIeBHAfiGb1XwP4E0mSHgLwEIAFAG+nr/9bAKcBnATwhwB+EACiKNoA8Eu0jfsA/CJ9bDcEY3sbmHnks8C/+3fYu+ASs7J+H5avoTZfB0wTuuLDFWA8AgAcB0NfJ3rXANDp4FBzA2dP+eRm7kSJZrUjtrDWNQ9nTodYWHsC+NVfRevx+2JGGymvLSgDQpkoX33wDH711+jr9u4F3vY2fPybfh03d4h4d+toilEqKgNiueh7BpZaFhBFODh4PGFWMwaMnmQKDVmgPNuLsGD2sW9pdNJ7+csTtvlI0PLZ0OXIgNg+WpqF9qzgwUzTSFmuAJDAkgmXLo1/aIppZxhYMntYvVrBgpne5Oo6Djc3cPZM/nWNHHLIa5o+uY7z82S/H/hkL+B5sH0NRiOR1qirLiwBM0QW//pfEx2vNLOabH7CuE1SjslfrHwf2DizjRWrjaW79wHf8i1kQ2LbONjYHC0DZjIgeWYUASl/m6sNk6TN0hKamoO27hD29sLC6CEo3oRlNxu5JLNflJVEzBA5rwuJxqAiR8CePWhrFrZX7Vizummmxryui2m8AbD6AWpqill9++042NjAD9z6KUhjOjm6IREAIbfctyCoKhMTsiDKMSeieqqSUvxAIklRJugDAJJc8B6k/fXDyUZCpbREaV/zylLLyoDECbysucvzCNOrALO6pdvo9qaYu4IAQSQll8gwiDxWngY0CPu1ELOasuh41Ua+T/6c+ccV7L30ReD978fznxfhC18AlQGpY34mdX/xQATWKCB8XblyLf8UwTYXR48Cz3kO0R0DYS960EfBCyYDwrm2A1sZNVjkBZsPLc6+i06YkkH3PwsLuKmzgk9evglveFFq8ZVlsufytdyDbjy2ioLVWeOAmqKq8jXSrFbLAZWZABXTrK5SBmSKJJtuSPxD6bjJeF6wpLAAP8AeBIXA6szDeVlQmYaqSZPlRaYBqyWODAhLCBa8DxQpypVqKLV+cSujqCZ8wUSAqdMKsZz9/MBWiHxRgXkriiT+/O04IwmWf3HL5/Cud2EyWM2TwGDVYaWY1VEmoBgEBEgvuodRVSDIkMMhiRuJzLEFddZVKX/eKitXoUn5+61S5AAeWO15ZJ4tCFYbCqeKiZ7ZhJnVANQ84I/NMWUNFnOY1YW9YiQJmorcRAiA5H7OS16qKnQ1gONla6sXDbamlGVXd7vA3/996gG2d2DXSNMICU3QNyszKAiuaArRwTZ99FyjEEHi3nuB7/3eFFjNmNXt1O8tQO5znSnB6l0ZkKmCu8uLoujBKIqeE0XRnVEU3R5F0S/Sx18RRdEd9LHvjKKoTx+Poij6V1EUHaPPfyHV1rujKDpO/7zn2n2tZ2d0rzpob58HHAd7lau4fBnYWPEwawwJo5LJgAwFJzTHwSDtTN7p4HBzHWfPyYRZ3ZFizWre4RkAwiBCS+rjqt3G4iyVrfjYB9HdCok+9lAalQGhLLJcZjUDjQ15dL9w991otSXMGQMAQPOWlMIMz+mbRuS4qKsulu4k1LSD9lMTZECkuE0RVpbvhjjY2MSbXj3IfyELWp5tDzgGi06ARbOP1pw4QAMQMJIX29vk5Zcvjz2RLler1bBc62J1rbhD/I5Ib36oiVB3i8NQtH1ocoBmLYiZ1QAwq/awuUm+5xWrTVjMtO2a4mJo5fe31wN+71eHqIUDzD76Gez3zyZgte/D8jWYWrIpNxWPGPZxtMA9D1i/YKPrmmjdfYxkKu6+GwBwqLmBeju14DGDRTtnEXQceKGCA50BPvCBBKwGgAP1DSzVujtZf6wkM++gVwbwoKyJzM0di+1tABHQbgPz8+R33ghiZnWrNsr81OQArgizuh+OMqvvvhvKD/xL/MoPXtihCS+rMgE+c1gjhQ8OkkSMlLIOOcBUeqoSMJnxxcZcifJsRUGuRmlhtheQz9adopw+TrRVyKxuazZ6/enAattPOddTGZAhZ5r3PBDwr6gMiACzGgCe/OPPY+/gKeATn8Dt3c/i4YdBDRabmJ9J3V8M9BEBqwXHl8bAua8ks5rpmtRq5G/qNNjSbMjj7D2WcOZc24nM6rxgVSECzGoAyf7nxAncOLOCA40N3HNXiuIkSagZIaxAyz3oxuZfBefuTNZfFFF2VAl2HpvnJh2myxpfMeCLV/pfdN6iIPjEYRtFoxVaBUJIBqRIQogmcEUYdQSs9oXB6kyAKgaVy7HAtCzAfhoZEB6zugzjLU8OB0gqK6tkVjOgtkQyyDDALVMnMiDFkmwAxJnVN94ISBK+ufEJ/N1HI/h9m+wb2NxL28yVwGAmriV9N7IAYN+LSlWHqVoOs5oxoNWCeyOWGM4z7CspMZPHrCZJgBJgpiizuoRUYK50BTNYrIlfByKpkPF7MX3jsprVnGqAotU2qsaXSfNtn3gN5HVakmAYEklWiWQuBYLd8uvr5d4vScA//EPqgXFmtapS36wpyW2+T6qbdRmQJMh1k5yrRHVpQXCNr/96IgPiOEjA6lbq99Y0buKulNwUUnJ5u8zqqaIC5Gk3/qli++kNzFCzsn24hAsXgCfPGrhpZoVoMzIZEB7Dh4Vtw/J1mE06w8zN4VBzA+c2W8RgcU5OmNUiOr2Pn0JH6QMAFv7Z1wGHD6Nhr2OwYaO3FWDVaqGhe8mGgjGr89qmIN0OcweqyzxnDtBQbcgzo+W+shQhcHOuw/Y2pMBHXfOxeMsCYBg4FDyNc6fpLD5ugqGqhJXFkWz2vQgdY4if/qF+/gtZKAop+eWVk1N5kfa8YKZSVaFIIQJHTLP6xInJzGqflUKaJpZqPayuT+nuCyDyg7iPzDyCpwXuWQSsbjGwenYWkCQcMK7ix380xJ88eAc2nAbmluhYZg6/dv64vXgR+KGfqmNf93Hgve/FzAf+EFtbdDPoebg07GD/DEWkJAmGHpFDAyfD7XsRrl6NoEgRpFtuJg8eOQIAONjcQG0m9TsyZrUAWK0ZclI2t2cPuQbNTSzfsUxcJNLBNs15eo9lSmgZsMwDZ9hOaH4emJlBW7exvRnGmtVNM/WbUwNTj2dIAsAahKgxg0UWz30u8P3fv7N8gadfHzt9FwNoFFVCkKerXFJDMde0MAjIhqpom6DajBmHslgGpHJmdTmjMt7hybP8Ykw6ZrAoCFb/zd8ADzww9mAQwAp01Jl0DVsXLX6lTaH7i60zAprVAPDk1VnsrRMJCe1/fQi6HmHYD4lm9Uzqt9a0/AM0APh+IQaVZihfebCaASlsLpibAwC0NGcnbkelvLgGi45SDKwuoFkNIAGrb7oJbd3GY2/595C9UQS9ZoSEWc3RUCzDKM08mI+biBaJPIPFaTSr80AElhCsUgaEMatLJNk0XYIb5lTxAMWqQmhSWAistiLCrBaRFwGypZZisLqcZJLKZBUy2i0sUxCbA2e/pLAvAGtXCuE7ORVXJUFVAPkGySVY67H3Rs7YGjhqMWa1pgnJJfp9m7CW221g3z5okg8dDrauekTWsd1OXswDasuyimWZaFbn+W5IYbWa1SxhUfTIw0uyUd3uUt4jOZrVZGwV7CvAB6snMegF2uRqVlOwWthgEWTayvy9pmBWa3kmrozQUnAuiCWR8u7ZAdAc15mfEIYpkURoRWD1tMzqRoNs++KtH/0tdTam2feJIi6xi0UUYaevDEvssKQhS4wVAKu7XeDQIeDpp4GbbiJtxjK3LAQSd54TQlf8EgaLAsbLu8GNXbD6OoruuS20KVj9Mv1z+OhHIjx5oY4bZ1YSZrXCl6qIg1KMJJOuFvPzONxax9n+HDFYnFdIubPqCsmAuGtdNDUHshRiYVEGDh2CJBFw8t3/LcRvPPR1aKQBKmawKMis3hGdDjq6hbY+hiArCmFQWTmbwl4PUSShUQuwtEcGDh/G3vo2rpylszgzXtPlkTa5PoBOQWdyEeMrEBbVUq2H1qKgwBdje1n8CXJ7G7j1Vg6z2jCwVOthZXNKd18Q1micTRY0rmRg9du/5yRZr1QV6HRwsLGJP3mfhEdWiQxMXN6qaVS+hg/6HGhu4fY5gtTPhJvYXvfjJy8MZnFgNkk8mEYEm6dLCcDvWXhkfQ/2ztpAp0MepGD1oeYG6rOpQyVlVguB1emkTbsN/MAP4GVvWsKJH/lG4g6ZDmYklSOt4bsU8BA95NJ2dYWvpRmtrRMAY34eaLUwo1uEbM2Y1fVRME1I4w0ErK6Pg9VZwauyYEyfgpt8Sc05lNJ2AVRuWliqTeSXu/qBVNpgMROsZpvMa1CWag2jwszXtm6j2xf7fp/9LPCRcTeNIMDQ11FjzGq2LlocuY5SmtV8QJVdmqe6S9jzspvIHLO1hRv3D/HkWR3rTgNzM6NrbS6TkDYaAdeVDEjQt8gcw+YCmqxqaTYMYyezWlc44F8YYuhphKEoej+oKkm0CYDVI5JLqgq02+SwyoTHaRCwWucyq8vJgOSYdJXVPc0zWJxGs1oO4eeU0wMoPcdmMRSjSCruNQCyhPI0qwM3gCJaaaFp0BVfyHTYHoaFZEAyD+dlGdA0MllkLClclPkpSYk/xCSCQBjCCyTCBC9oWqjKAYIs804GUBnFE7gAspnVUblraxjgy4A46k6DxbwQlAGxul6y36J72P2tLp68UCOPp30BWAVPHrM6LCipELebLa3h+eX2MIomZzOrWeKqRIJFkaLsy1o2IcaSopn7rZKya5w9clydW1SzmreP8X3YgVqIWR2zlfPWmYLEk9jbh2OwWLTaRgSs7veBpupwz1+6KcMJtMrB6jLMap/itTfcAJw5Qx8MAnKma6S04/OqrSbEffcB3/EdOz8sJswBQK1G9nsFwOpejxyVf+M3yDbZsSPCrJ5JvUjTyJ7AvobM6l2weqrYBauvo9hesWJm9UtmHsF9n/PxyMUObuwkYLUu+3ALgNWSFCUb3IUFLNd6uDycgRVoMNs6AVO1AJbHB+i8oQdd8VE3AiwuAvFsEAS4uhLgi2uHUTdSEzcty7XzDOsYSFebsFB+7/dC3b+M7/vnY/1ipdR5ACidret6QNQUDh0i4Gbfj58fWaCYIze3PDsqZnrEzJTymNVRBM+L8FN3fQSveI34YUSTA3hDMc3qW27JYVZrEmCaRAZkq0AaPCNigJSC1brMN+vzLB+qFOJNX7eZPHjwIA40NrFv3sFja4swFD+57jGzmm9a+OoDD+MXnvfXwNGjhA0wTIPVHRyYS0q0VY0yajklPV7fxqrVxuGDqe91kEjVvP7I/fimV43eB03NQc/O2bBkVRjcdRf+7a8v4dixCe/hMQZATLrKlJLreRpvNNyVTZKJjpnVFtEN9n30PAPNWuoayETmJ8jQVU7HcBChpnhiYDWPNVJWT1WgXQDVMqvDkMzXpZnVEzZMUQQvkMsZauUZ00wjAyIAVtdUr7jB4lDsug2HwIMPjj0YBMQbwkjA6rrqYshLMhZl/SkKDF61EZJL88TWMva+8CCYe+9NjQt44oyJLbeO2ZnUGIrLswVkQESZ1WZ5ZvVv/uaYQU/JsPv+aJVFGqw2x8aeppEkdh5Y7XnEdNosUPodV5pw9l3jzGoA+PmfB97yFuAVrxjtqsABJ15Hi8qASBkHc2rg+swyWMzxXCgrA8KuwaR2p0gIxprVOb9ZnGgTBavlAK6AobM9DGGqJZjV4xchiqbTrNblyczHsoxtSUrWrgz2a9xukXEgpFldojJIiFldrEmAgtV5rP0ooszqAjIgPCNjGlbXS/ZbrDpQX8W9Zw/hUGtrpwzItWBWx4mryU/HvhslmNWZ+3kGAJfR2hcA7EvLVeQaLJa4b5lkZEb5wsh5TTTYGSFvaPk+nKIyIHkAcLyXF+8mAL4uPjX5KwNWZ7LAafQGMklWc66tUZMrZVZ79HYuw6xm4O/x48DJk/RB6kPUqo9Ka4j6ZgHEF/vTnx67XEzahYHVmgZFCoVwDRbDIZmiXv960ucLVw24oQKjlvo9mcdV7xoYLO4yqyuJXbD6OopuV0Jbs4E9eyBLEb71RVfwt6duxHPmz4/KgIiC1bZNMuvsoDc/D1mK0NIc9DyTMK4lCbW6RFg+nInSG7jQ5AANwyeSwpRRKgUB1ld89D0TjdaoARxhVufs3hhoPA7SAcD+/cC///f4pXcsjD5OD/y5zGqPGMvVDQpW0/LheKYclwFRFH6mGIDvRlClYkw6Uk6e8xrXhR/KODzbRaMtbrCoyQE8AbPN7W3gzjuBU6fGnmA6VKaSyIBsVwBWexTQpwaLIjIgE/U5b7sNL9/3BH73jf+Af1w5jL217eS6s8WHUxHg9hxosk/ugf37yYNeCqzuz+LAfOrH4YGUrL9DF/NGH0eOpj7fMIA77sDRQz5uetly8jiVw7G8nN/WceCGCvRagZOOplFWUg6zOv1biIagweLw6oAczGdmgHabaJh5YWpjM/qbS7qWb6xHw7IhzqzmyYCwg0OJUk9euwBKm39lgUml2gQrd+UYX5UBfbIYKVMaLALIHAeWBXJ4LsCsbmoO+kOxH9myJoPVBMRMJIxqigfLyW+zDLOaC6iCzId11cGKNYO9LzgA3H47AOCm6HE8cb6GIJShmKnrw0CEvARTURkQBlaX2IR/8YvAlSuF37YjrG2XjAUGmNC/W7oNQx/7rrEMSM794/sJWC0agjIgkTMBrG61gK/7up3XXGCd8d2wpGZ1Bls5ngvLa1ZPBDzixFXBNvM0Wmm7En1doWC/VwZYXcprAKTSwOWAE8NhgbmL7uFEfBxsG9VoVseJhSkNFrPkRUrooatqlO0PwQgVRQGqPO121m4kV8usZuzyEoCiaUSEWZ0j1dD3DCKzWCDJJiIDQgyt6X5r714AwMHgDD568Vbcsmdz9PN41zUMy1VcKQqRAclo1/NLGCEitS/KYu2HClS5bEVIxvNhCC+aQgYkR7NaHfdpEGxXk4NMSRzHjggRqIxUoACzegQ05ISmRpNlhoCp9NAzSRe0n9dKs7o/kAhYzWNW15RKNatdl9zKZZjV3S7Ztpw4QXSgAcTSjq1mMWmNdFy+TPbeDz2UenC8wl3X0dYt9LYK6D9HIaRP/gOwtoaDB4HzV02Ce6XnCro3tHP83jwP5cDqXWZ1JbELVl9HsT1QCbP6zjsBAL/4VR/BQ2/6RexbcMmNx8BqDvs3DvZCtsGl0govXHoaEqKYpVRryMTsh9OwZ/nQpAANMyRgNWVW65KLyxdDaLKPxsyosZzG06l1HAJ6TGJWZwVjQeeB9lQ7sFXzSQUuBavVyMOlS8CXn2pi260lcmwMROCWZxdkVjMG8CAfRPDSpTAiwQ5kAmD11hbwnOeQkp6RdSU2AiGa1YtmD6u9WkYr4uG7YVK+zGRA8hILyGAA3347buqs4FvU/wUJEdFuZQsQlVcZcsAkr2uRdptNYJkCyIzK5ftEBmQhNe55ICVrd+hhud7F4VvGpDl+8AeB//gfRw+VqgpJArnnssK2s5M2WRGbE+X005egSQX1imMtzfyXWUPKgNb1RNcwCIDhEFetFqm+SEcW22u8XQviJc9CMiAlDk/XQuePtpvHVi7VJnI0q9khp+iBjPYjT7O68JzFgjF9Mmg5wyGKyYCwhBhn7mZhWWQuHDkXBAGsQEONOdfTeTs3GRaG8AJ6bUXBL7Z2cZjV3noXc8YALd1GY84Ajh4FANwUPIoHT9Oy7PSgVtV8thdQmFmtGgoZUyWY1efOFarkzAyrN8aspsBJS3NgaGNjnYHVeeCf52HgG6jXCtwPggaL7tAnh34R9isvyYaU5FgpGZAMwGMKZrUqhZNlFaZhvOVUBoVBBLmETm1uOf0UCcFYGirnUDq0pILMaj9XxotFrFktClZnrbXstyphAgjky4CUZWyrSrbfQmlwPW+8ApRZXb0MSGnNap7Boudh4OujMou8EASTrJ5P9nGGEcsVHVQv49OXj+OWg2PePKyCJweoLZXEpnvZrOkw9oYomHAnyZVspm6p5J0IYB+WM1jMS7L5kVwqGcRLtjp2BEMuCFbHc1fOa5h5XoF7jC8DUlJiRg7h5RhiltnLCsmADGUxzepatTIgnkfA6jLM6m6XHOdGwGoq7dhspK6hYOUGi8uXgde8Bvj4x1MPUla7oitxm23NRndLcA4NQ2B1FXjf+4Df+i0c3Bfg/BrFMMb2xzy8pDSzehesriR2werrJYIAXUtD23CA224jjz38MPm72SR/UxkQx4GQqH0wsIl+XnqDa1l40dLT6OgWqZkABat9LTEzyghv6EGTA3Sao8zqljLE0+cUvGDxDOpjxnKqFCLIA6vzmNVZwYDlPGkJuuL/t+/6JBHdp8D8vN7HBz4A/OHHj2Fl2Mae5Shpk6d3CcqsLsikq6kurGE+sF64DKkgs7rTAV7ykrHS7PSG3TSJ5rCtCxsmZIXvg1wjRUlKXTkl1J4d7NRWXlggf2wbR1rr2NvqJ5tVynwc5rH2AXg9G7ockMoEClbroUPuIaZZvZgCq0V0/qIIvu1jyezh8F2d0efSWl4s2AEn77rmyeFkBQOo8jSrfRQvn1RV6ErGpjkVw0FKWzgGq0Og2yWaYUtjB2u2ucnbkEURbFsiJc9VyICUPUSLMqtLSGuoObqEAMoxq9mhLNNQqwQ4kcdIoYmusgaLeYcnywYBKAswq0WSK3H7FlHVYMsrgBSzOoz7WFM9DN2c+9H3i5cRM0CVU/rvr21h1hhiT4euye020G7jmHEB/+/n9+ANN3x59Pqww36W/i+QgBaCa5ek0bmwBFh9/jx3OyEUVj/YKQl0/Dhamg19YWb0xYpCx0GOLn5aBkQ0qD4nTxbJHgTiJni8JBtYeXZxsDovGeaHCpQpEldZxo1lja8yy95Bhp0ql6gIYVrQFcuAxHuDHHDCsgrMXXSddQV8HGxHKmawmAVUTsGABug6k2OwWI5ZnW+qRtjKxQFFJc+8k1VWViwD4kflEsOGKeUzq30fA89AwygAiKgqJAChm/+eYS9IKtmaTaDRwIHmJtxQwy037PQLEpIBKTEX5DKrAzk5UxRpNk+zuiwAzOYtHmBfhlnNkwEp6RGSJ8VYllmtKxwJo4LJcUBQBqQUWJ0jNzWtZnUes9pS0NRsvgxIXancYLEsWJ2WAUmD1T3PGJGvj0knghvvy5eBH/5h4L3vJfgya3ekwoX6z/S6gqaNT59JSJarqzjUfRinVxo7DeVZJYCVA1YXNUun8Uzwdnk2xC5Yfb1Ev4+uZ6I9qxDdMEVJqEmNBvlbUWDoEdncCtwYVj/YWU5fr+OepdO4YbEfb9gJWK3zmdUUrP7of7mf7JkpWN2W+7iwquPr9z+OhT1jbC85X6agFEjH2Gl5bF1qdhQzpylYvaht4gtfAC5tmrhitbG8lDDpRNh5sSt1Uc1qO19Hc6QURiQKGiy228ArXwl87GOpJxiz2iAA60zDR9c1p1swoyhhVqtqwnrkSNfEMiDjhzGqoXekScFqFgxA4JTQej07YVZT1khH7uJ97wMC28NVu4mFTuoaisiAdLvwfeBfv+BTuP3FzdzPH2kz7xKUBKt5lQvEmKYgO02kxA8pfc4Us1qJPPjbAwCA1Bq7NiKZ+DCEE6gwVUGAXVHyD2TMVKxqZnXZEnUOmASgWhkQpstYBqymDKJMpk+oQClTlqqqMBQv8/A0tOTCBosibGUWlgW8+c3AX/5l6sEggOXrqJlJ8rKmuLDykmFMRqnIEKCSQLk+DgD89W3MGkPsXUyNv4MHYao+Xnf4fvzQbZ/ASOkCj+2FlIRDgUQrAG6VyXgEAdEnrAysVr1R3dQf/VG0vu0bYcw1Rl8sSTD0iGi/5jAUh75ejFktKItUCKxmJfp5BotlZUCygBSmWV0GqOQk2cqDCDk6tWyvVXSOlWUKAis7y/+nAasVhSurUIhZLUnQNL5pI6IItivDVAsASllr7ZRgdXwwz2JWlwarqzfBU5ks2aSgmtWVGyyWvAbEYDGHWe37hFldK5Fk45wRrEFI5ljTJImhPXtwsLGJlmZh34Gx+4RXwVNWrkImYHQms7oM6QLI96CZcmwFAYepW4JZnTkfTjG2citNQI79huKVkwHh+EOw1wo3m8eEpyzcayED4kdycbDayEmE0OhbipDBolrTyLxaIbN6bg4YDIq/lzGrl5dToDKVARlnVov6ZgEErL71VuD7vx/4wAeSdoMxsLpVgFntbA7JnovGwf5jeOTSLNq6NTruBMh9notdg8WvYOyC1ddL9HpEh3KGGCkyKRAAMWAHkAycE/BZ0AAw6FKwOs2s/r7vw4Hn78H7/yFxp9fqGpl0OWC1O/ShKz7ml+kk0GwCsoy21IeCAP/h+X+Fl3916oZl2XIBZrVqlgGr80ueo0hKJp5WC5BlLCqb+MJ9ES5t1rFmN7G4PGawmAfQRRFlDRcz1OJqVjOWRxF2uWBpMkD0lbUPfgDHDjg4dy79BHPiJZ/baMnoe+Z0KEO8AaSMKCYDwjNYdDIO5ocPAwBeuuckblu+mjzO5BQ4OArRrKZg9eIiMZLU1vGzPxPiH77QRBRJkI1RhiIPRECvhyCS8c3Pu4x6Q2DjFI8VAWZ1vYQ+aZ5mdRljGioDwmVWD1MssnodUBS01SE2zvUJCybOFCXtSkD+os507sb1aHP6mgd8TmN2AyCXWV1K+/QaaVYrqjR540wNtcqW/pOy1Ml9jQDIajmGoi4HmQksy5aKaVazhBinKiZu3yKed3/1VylCI2NW1xKwuq66AszqguAfreBx8vTrkciA7N2Xur7UwPUvvuGd6BgWcODASLt5LFUgNccWWLsAFAarV1bIYSm9jEQR8Hd/V6gZAGN6qiw0Da397YmKCDFDMWvyomB1ozH56YnBOeyzIGC1oAwIvbZZUjikq1Fxg0UGeGQYuJbS70+3mwGklAIqOcCXH0jk+5cxQ1QjuJOSFmXlmwChRLZlS4USbbpJdbDzFlu6Jpp6ARmELGZ1QEB8XSvJrDaUfIPFkmA1l01ZojJKlQMEWfNhGYIIbRfgaLeXWGtlXUWYV9HneYRZXUQGhFUccfbe1iBETUnNsXv2YF9jC9994+cgzezcw/H0mv2opFRDVpKNmkSrUvEqi1hjPS+5UGZs5RnDRlHpscU1tC7NrPYzq1tLM6uZhFFWVQj7MQsMBjFmdZl1JsyWW2IgeMHEVa5kCQ3CrObLgEiGTvCKCpnVnQ45oxWN7maA1pWnIG2kBK+pDMg4s1pX/Fy2cjquXiVH8L17CYGOtTtusNjWbXS7Yn3trTloaQ5w7BgA4ODgcfyvRw/huQvndxjD8vASz5emkwEpUYG4G0nsgtXXS/R65G82G9xzT/Lcq18d/5NoG6lCgpDDXoC6MnbQO3EC+LEfG2Vlsed5zGqmK8xOibIMtNto6zbmDcp6nUmV5rINYyjArC4C0rFy3zxpCTbps4OjLAOzs1gw+3jiSQlrfYMsUDVtpM3c8mw6sWpqAWdyxtDjgNUjE7Zgu6IyIFi7CnzsY1j61F9gZSX1+FgJjlwzCAA3JVjtRynTEl0XlgHJY1b/4G2fxItuTq1gDJzJS4QA8PopsFqSgEOH8O6veS/+8GfP4od+6zi+4cBjoxsJulDlgQjxolRAt5w0WrEMiERY05kGMmyTX1TrjzJyeJI4I9rCkgTMzmJGs3DygQGWaj2M7mwgpqHoebB9DaYueIBgwGeWgecUQAqAa2KwmFVOHwVTMKuzGERTaIkm+toTnptCXzseXxlzgmVLhOlVWAZEnFk9N7ezzNHytYRZzZKMeaAyS/YVZFbrss81VfMtD4ebG7j9ttQ1SiWtUaslpsFAAiLkgdVsji3KrC7IGDl3jhSxpNc8xwF+4icKNQOAACmTzFZbrcnyvSIMxbLMai5YzXSFBZnVOqcs1Wea1aLSD0AKSMmW7plGszqr3bKSCjxmdRmdWgCUsTxZFglAqTZFZECGtkwSbYL3mG4IsLJ8n6yJWjG5IfbekWDEiLLM6iwWWQymFW9X0wA/ypEBicpVRuXJSpT2XFAUyFKE0KvWYDGutMhlVhto1EtUhHDApBFmNQDccgs0OcTvfNX7d0qxsQqerOE6BatYyQGr4+qwgvetrOQwq8tqVvMMFqdgAOdXspXQwabtankyIA6Ka1bLMnQ1JIm2SWcPIBnLBfaImZUbQAqsLsmszvq9fB8RUp4Eos3qSn6CCUDfVtESkAGJ13hhQ7L88DwCxZRiVj90Bu0n7gN+5mcAROTYygwW00c6ti8SqO4GyDBRFLJ3i8FotodmiQJdR1uzhMHq7rpHWNT79wOtFvbgCv7LC/8Cv/KCD8aV1CN9zcJLogiuJ+2UDxEIzZDhRbvM6mljF6y+XqJPwV42G9xxB/CqVwH/4l/EEhYAcY11Q0VoUhv2QzQ0h2/Kwp7naVZb/k5Acf9+tDQb8wpNlaXBalWFIkXw88BqplldkFEqYrAoSdHoItHpYLHWg2mEmDVt8jzb1ItoVlON0kIbZ0WBqXr5l7aM2QtzkhfJatJJdOHxe7G2Fo087qU/l21MpwGrY0CfbmBiGZD8t3lZB/NDh5IN6pvfnDwemwtywOqBC132EymdI0cgSxFesedRXFgz8dab792h/arzkgClweqc15TRTZMkvoFMJBMzpYJgtSYHcDnGTzEDlv1mc3No6zaeOiVhudZNtPZZaBq5BJyDuROqMA3BAwTPbLXsYZejKRsGEZQy5l+x2cvOp8qWugI55ZNlD2Ssr1KGMc0U+trQNBg5ycahXVAGJGZWi/XFtsmSd+utwBNP0AepwWIMYmoa8RrwcvrA5s8iY0tEGgvEUOrFS6fxcz+akj66/fbk3+HYPR3r12e36TkhdMUvNG9xq0wmxLlzJCeeXkZcF9jcLNQMgJSJ6xho8oIXAN/7vTtfb5hSPlPVdeGWqGLSRcDqYUjAakG94prqwhpkHPRpFVdhpk8e8zGKiHRPaWZ1MFlWoWxCkGOw6AdSORkQALoWZYKq7LMLh4DOeDx3Cf5mqqHwWVm+DzsokMAFsvVEyyYWaKh6Ruk7k5sqwfwUkQEpx37N0ayexgiQYzRalv0KgG+wWEQGhPnFcJjVMemAnQOf//yksveGG0ZfzNNrpnNMaYPFSZ4L6WrNghEDkHmGmCUSIWpeVWcYIoyk4lVnedc2vr/KyYBkaviDyYAUBKvBEoL5Ouvs84W7qmVUCALl5y5eNQD7rKIDgVd5FkXoO6oQsxq6TvZaFTKrm81y2HfvyhBtnWzeGmGPkA58H26gQq+l1s0CUqS+n1yudjvhZiZSpGOa1b2JzeyI7maAtmaTyt7DhyFLEX7g1k9BadVHz5+8SnR2/lZROCGWm2DZDeHYBauvk3DWeuQgycBqWQbe8AbgRS8aed3MDLDl1IUAxWF/MitpR5gmYYzwmNWWT4CvdHvf/u1oN0PMmxnMaukaMKvp4sMzk4oiaRT8XF7GgtnH4YUhlhs9zBmDZBFhoFce4MEY0EUyuzE7kWOwGMlQjGJuzCIyIIHjQ5HIZ6tyiGCY+o19H056AaK/a2RPkd1lbG22pmkakQHhrMGZ+pymCfzIjwA/+qMgTpk0GDgjAFbHzGoglhUxL57CI7/1MZyYWd3BrDYUD/aQb95ZRLccAKI8ZjU78BfciGlqxGUilHE71+UAHo9ZbY2VPM/PY0a38OTWMpZrvYkyIACEWGRFZEB0OacUrWzpoKLkGm3G5l9lmdUT5gPPLw/OZB74KzBYnDgOpjQq03MSDJYjk7LkoprVPt+ojIUkkekkDVYP05rVikJkQDw1t8zVL+pOH8sXCXgjyGPJO01LAOs77hh9A8/4CoDrRMWYI6qA2eyEOHOGXNv0FsXzgK2tQs0AoGD1uGY1SP7+Oc/Z+XpdR75RGd0XSHqx/YaQZrUVEWNYQRkQM2+dSSdCCiYaMwFgpg9ZBkyLK0IqZlbnmar5U8iAaFQGZILBIIDS8xaAfINFp1iiTdIE18QSYLUxqXqFHcqLgok0rokMSB5ANVUiJJ9ZXVaqIdMbgCbGCxnusuDtjZjBYkFmta743DNCbArKznWSBPzgDwJvfztwyy072hSRASlzXTMlI2OTzXJ7GADZGshl/DwUhZCwssgc01bdTRpbUQSvLLOarV9ZMiCuVAqs1vV8g8HQ9YnsXxEZkDz9Xza2yjDWpSBbBqQEA3zk9VnrQRCg7xpoGh5/LLA9Q4Wa1bperoCIAMCkLK4jdQnJYFLiQVWhSWJg9fo6sLBA/t1u72RWK/qYZnVPrOPdDZ8A6/U6cPRo8sTy8ugL2Zk2ay6kFUd6keolGjFYvSsDMlXsgtXXSXRXbczo1s7S+bFYnnWxYrWFboxBP0Jd9cSZ1UVlQABgcRHtl9yOeYPWm4yB1QqPRea6RPvULFbqmuv0DUwGFO+5B4tmH4e1i9hX38KeWjdZJBSFgKo8sLroYS82PMoHq4HUwUWwXRGwenBuHQ11FKBO67S6gQqjQT9X12EqHpz+FJNuXBo/LgOS/7ZMzWqAbJizNs1B/hTnDogpaMysptpWOHkSh4yVuI/pdk3Fhz24RszqLOCrpNM1j4lQSpOvCLM6LdcwP4+2buGp7hKRARlnVouA1Z5XmFmtyhlMJ6C84Q8HmCht/pVjWui50XTM6knjoKzjPZACqyc8Nw1DkTG+Ju3LwxBDV0Vd88TbVhRSkhqohdgN42C15esJJirLqKk+MR7OA6uLsvYZmJiXwAUZCxP1ir//+0kS+9u+bXK7HGa1JhWTASnDrD51imDpaRkQ1yVsmkK4dxRRZrVAwp0G0azWsvdHvj9aUSUSbK3lLIuEWS2oWU33BYGbcW1ZYrxERUgmADxNlYUsZ+t+lly7eNVR8RxbVgYkj1ld0mAx7lhGDB0iH1RYaidvcAUBAatF10TarjnJ2HtKsFpSlcnVUWVNNsESrXmmaiVMQekZIZPQwqQayt5fGZrwXlFZKBYCYLUVaOM5O26bIsxqy8LO6hVJIlKR4/deXMHDMRcsc12zCEjsusrl9jCsXzuC+XmUYVbnVTFNAVarcsYcy/byZe5bBtRlVAbZTjmwOp5jM+YuooVdzLhR0WQEvCqLEusMkQHhaGsXHQi85CXVeW7UBPZPFYPVrltMPSwd3c0ALcqs7qh9QjKYBOgX8M3qdoF2tAW8971oXXgsAauDgOA/uhq32dJs9AZi905vOyQyK7XaKHshLXML8PGSNLO6YGimsmuwWEHsgtXXSXTXXFLOwAGrzbqcbyCUih3lXVlBn48sjgwIAxTHZsHWHUcwf+sSOUSnJ3yagQ7CHMYb+x5FdRnlIBugAil/3HEoPXECt9wc4a3H/wH7lBUs17sjMiA6D6BjbKeCzGrC8Mh5TQkjCtGFov/0VVKGRGPWsJJybHbt2QKk62jrNrbXp5h0Y0ZYAlZzjSvBwJkC+pwM9OOA1bF0DQOrZ2dJ1tVxgM98hjxG2dYAYsabY1XIrJYkQJbJeMzSd2MbsYKO1DwDmfLMar4G8HDcTGpuDnfOXcTfXbiF3FsTwGoJQOhwSp59DYYpeI9pGgHpshJXZXVaOUCd55XUU81hzxA2bUmwWpfJgT8DRCgFUMUsqskHSAClGYoTWX8A4HmwAh21ImZiEDDWSwVrdhKzul5PXsd1+WbmMEWAFCatEuSzwGOgblKlyateNbFqIbc8G/QAU1AGRJFC+E4xsPrkSUIAH5cBASCsRcjeNPR11AzxCgYRg0UA1wastiGuWZ1nhEj76UdTAMAZRoiFk+0j7WZrYZcGq3NAHz+UyZ6gjAyIPrlEPfRDwvYrOW/l6goDsFylkAxIprZ0OjyPGiwWSDqrKmoKlZ9LzzPsUF4SyMgE7KdlVnP2MFqJ9ZvHrC6rWZ3LrE5L4BXsLwCupEIM6gi2madVDIAkBB1KOuCdE2mbZH7JWJuZDEiJKotcZnVUnlkdRdLkfTdLhFStWT0NWJ01H05rsKj4mTgokQEpBioDRG8/TwbEsSOSvC3Sbl5yoWT1afJ7ZRssAigvA5I1EFyXJhkF2tLLGSx+8YvEKHw8PMohEiw0HInudkSwKACzSpeA1ZOuUQEZkG4XaK2eBj7zGbT/9PfR2/LjjkaRlFzLrIqgvL7qFgGr9+1Lnhj/LVlfs/ZbUyRxY2b1Llg9VeyC1ddJbG8EhFmdPi1PCl0nBM1xLboJMbQkwqrlsZIMgwCKHEata4dE/3esvRe9WMJrf/wEOUSnQ5IgKxJhYuSAdACKHUg45aMAENjezsO+JGHueTfgzUe/hAONLeyrb0+QAcnpB9OWLgJWxxsQPrO61AGax6y+sIkm03QCsFzrJiaL7NqzzzUMtDUb3c0ptJeCgGjr6QkATxjrfLB6osFiVjBwJsxxo6bt6spYuzffPNLOiHEZBdJsq/rfC0D2glZyIxZrFWeVzZUpn1RV6EoAjyNVEJc8pzSr33jDl3D3/AUcWrB2btapezRPD9wONFEiZTIXZAFqU2xwAWT+Xn5AS9SLAimaRsDKCSyX2I26YmZ1aUOtPBmQaTSraTJkYgJr3OhQMIyaDGdS2f+kiCLgz/8c7VNfxtYW8IlPINasTjPXuCX6ZcA/SUqYhFlrIgDfj7IrTSYFrzwbqWSzaIcVBQ3VxcAq9htvbpJzw7gMCHtOOByHjIUCbEKuBjB7vKAOtC5na36yKGSwyECvrHmLlqWqRQ9Peaw/qtNbSrOarbc5jNLKDRa98pUmWSXq0/gCxHJeWWK1UUSY1UoBsJpJ7fCY1X5BZrUsw1TJXDqyJsSH8nKa1ZlswmnAahW5MiClEix5RqOpdksngzLug9LJIAGWZhRJ5eatvDNCEGDo6ajrvtg9weatrC0cIweUNBec+PXLki5ou6xfk9otVXUWX4NsGRBJiorPMUwirOpEo5pvEOy4UnGDRfDNYePkbUGwOpMkQtevsgmmTBmQsntZjlQgq8QWWhfpJuf/Y+/Pg23Z7rtO8Jtz5h7OcMc3T9KTLdmSLEtGtrEtY4XBZUDF4HZB0w4bUy6qu6MKKNu0HQW0C6q6mKEg6KKhKLo6gDDNFBDuCgzYBhuwMMaWZcuy9aSn4Q333fkMe++cM/uPtVbu3JlrZe71W3n87kPnF/Hi3XvuuXny5s5cudZ3fX+fb73SS0T8kR8BfviH+18nO6vrGucrNMzqI5zg4UPhki921zsazurzkxLL4gEAYOGlOBcaQ1eD4GvEfTX7szMwYV1MEr/ne5gZ7Vu+Zfcb93VWE8TqfYI2L2u8LsXqt0idnVtsgBgbYTiAfnUy/mBsNthvxzwIWNjPaviYzWK3c7y3vQ34+q9X/KU9RDoAei8KdyTpG0CRlnBsiTONB4Z85zt+Gv/nd/2r7fXmrOK0GDgP4aSb2llNET+bncLhidbqzgZzNwPe8Q4AwE3vQSNWV3kJ26p3nNWHfozTE8KkUFRRYJWHWITbtiHfLoeDK6tqu4jcdyVtWbAcu/n7qspziejT5r0+/ngvYHGQJcoOyv5PEatVi5GqQlnbcDRxFZ43vNCjOqsZBmTMWe3ssoWvXoVlAf/8N/9FfO1XbJTHHdyJ5xz1vcVqgT8YWpQS21IBtTBBFj3EeCBZ7BYlXax2PO6sljBaSSgYYD8MiImzWjYh5W7aWah3vrbv7u9MOT0F/sW/AP7qX8Uf+oM1/vP/HFJnNVx3OBCU6PrzfL6xMDC5bZjVGi7o0YDFrIavI1a7LuZeivVm/zEpTdkrNQzlzmotbnWSaLe+NxsMUzqrRZjxyIarlrN6SPzl50nCF405qylIhfZxp3RWi7FbJvrUNXdWE7pXwJ3VVd/113SvEAMWBzdGxRgSaJzzvjkOOhu4vCKf/b2dY5cl0srdPxOiWyrxzwQDMhQSLY6re8+6I7k24lkgiKrKtUfTxaR3SADjOBhZYPxYCeFnyKWY52xDMNjzfdt08KiFWjIGRDiru+YTgWwhzmGGxE/Sudo2XLtmWUyytUdVsbkIcW6omm+RMSAja7A0t/tC5B7l+ZZ0jBXVbN5qbrAoBWBTDIhqc4FimGt//8AG097dG4eHWHgp1vfi8e9t1cc+xv77gR8AfuZntl8XzmpvgIgmrbMznKUBDg7ZxtiRdYqTewXO1zYzvcmc1UPmI17nr55i6bIJoW3V23WVwLK1NIh98kGa467AMCBi4v6BDwB//I8DN27sfmMjrKtRMGQ81j7dUZc1Wpdi9VukTs9t5qweE5Y9DzejM7xxd/yjjVOLiUlji6cwROTkiM8HBp26VmJABmsPkQ6A3ot9jzCpIimYs7p7rhzCHzgFouuLXWa1XSAtRpzVNQUDMiwiXKSzerVmO5miReaGdRd37vA/29hsoBefke/jwI9xdqq/kPnX/5rPMTmnaxltOWD7ONabF4VmmBSAwZdElll9sfrLvxz48IfZrzsBpoL1OCkGBNgrjAPAVoDfs1xvwN1ADZCxbfgO45kPbQRsMnfXWX31KnDzJtzHr8P6P/2e/l8Qos9QWyp3Vu+NARFYBdVz0Ag0+x2uqRGmbBOGSHTPSJnVOZGDDeYolQqgzYKMIE7wz0slfAGgiT5Dbal5zgRKTWf1XqIPgHyTw12dNL//vR+5j6MjtnGXlS68sPXv2ePdRdkIadreVeda18gLG64OX9rzRp3VWQaas1pDrP7c54Dnn0gQru/3mNWAplidprsc8X3K8wZRDc28QPNdGzjFuFidsnnF3mL1EL6ocWXtf5oAtq4/xTNbtsOPdWoIt2QasCg7V8GTtYnMat9CVvY378j4JmDUoci4wlys3vtE+f06pChQAhYBhF7FxOr2sYtC/5lql2qcNcAU7BWwSBConKGsGB42arsUVMMQE57YxSRc+/kwBkR/jVCNi9Wlv//7dqyDR3TzaeLsYFlwbLZB1ROr+caVNgoGGHdWU7sBnBpFrd5g2fnZ+9aQa108XwYBiyoEQhOwqPmQ7eWs1uH3A/thQHTvrWYjBPIuXKqzegQViCzb/3wPD3Hkb3ByeyTcqVOf/SyLCfubfxPbjmlsndWz2W52yGg9eICzLMLy8QVwdITjYIOHr8dcK0h3P0sxjx9h4gPA+asnTGsQVbJ7phGtxXGH8mxkx13ZjK899kIbe3e3NQjd2nPtcVnDRWkauaw3oc7WDktg3cNZ/Vh0hjduH+DFoe+rKqSFg0M/GR+EubN6MFSuZFgAz9Xc3d9TpNPGgNglykI9SJZZKQ+ounJla/v6nb9zu2hxHCbQDYnVwlmt04Y0tCATRWxN3sdZvV6BoWCuXwdcFzftu7j9Wg7Aw+nGY7wn8XODAIcaYvXpKfv/YgF85CPAK68A86LAeR5isdi+hAInH3bp8pe69kSs/ZJQbPLkOeAFnfvAsoBv/3YmWF+50jtm4BQ7rkDpQQGaWD3WYaA5wW0ctVM6q9Fpo5aNSWWJOHcRea32UccBfuiH2PWViQHinh3aiS8KJOUMYbS/M82zSxQqJnpVIa88eJ4m2kaEw6al9CXaYEB0J7iexxywMmd1QRdS/FDBTeP3wILYPupaJTYyHcUEA8InpFIMSJ4zd2J0MWL15tYpIru1IHjpJRwcXMNqw/4dVlvJcxzGt1UJSZx5GWg+X7Zro1SJM/znNe+Zfe+FsfZstFBLGs7qmZthnew/Jr386QovfPbHEf3ZH0WS/EWAXcHmEmqJ1VmGB+kch4vT/f+OGJMVn1m8rtgCWtNZ7TvFKMoqSSzG/twXA2JVKFS5G032g/47UTnfaFrJCZivkS4LIwyIilNb2bRQNQw4q/Naf7Oidb6D7y8+du3tUgU0nNXu/u9EXqFfMgxIR6xOdDqXujXgrC4qAlYD487qgjKHaQwtij/nopWlu3MzlJdjsjEsNsfzSr5op6wRPA++vR4WqwV2a9971mabqI2o3H0/8Q0x7U0AMAG4zPh7sT2vMMndEMcZYlZTNlhcbDnr3ZveAAPCxm7JPWnwfAkcjCqDpnFW62JA/JGAxRT6eJEhJzwP49M19DAnfIW8dJT3rPjZWrWHtrE3tuTwEEfBKzi5V+CpPX/8yQmLLnn3u4GPfpRdb1F5DnjIMJv52Gz6ESfKWq+xKQ4QHYdAbuPI3+DV2ynOa4eJzc7x9ns9D55d7eesfn3VEavZ38nSDl7E8/ZCromKY2B2mI2L1WOd6E2WwwXkDVzWXnXprH6L1OnKYc7qfcTq2Rlu3xsZWDnnLvAlg3O3goA5q1cDg06aXgj7lY4BqQfRGkVawpEtSiwL+K//a+C7v5u1jLTOk2FAxpzVRAzIELNaXBtNxzpbPI5gQNYWc1b7PnDlCo6DDU5usZfG2cZlvKeWWH3gJTjdMwTrL/0lRhf5n/4nxiJdrdA4qxfRVqz27XIYr5JlNH7gHi+JPAfjrMsmTFev9p8Nx2Fc5SHHOtEJb4E5OKVFbB20PYehCpTOEVrgD2vxGwiNEKJiF9dgDwhsrgvPGher09Ld31ntjgcp0ZmXame1CQZE6awu6YFiXmDLw26oIULAdoI35Kw2wYDkkpbfPKc5//ZsxYsfxIjclm3jU5/C0RFwcs6vefva78GoLWp9N+EoC1uHdSiq2RRV/50s5wGLOhgQN8Um2f8zvvtqipuzM4ROgWS9HRsyjvHVYlZnGf7dnefw/ucf7P93PG+QI5lsKtaarDN22zaCPTpN0szSw4DYFQrVe0YsdCnj1qAATA/pGnKUkuaGgq+tDFUjtv5D7fprNmyIHSFj3MtN4elttO3DrBbOah1mNYDIL/sYEFNntUqgoTqgcUHOan5vqXQkE07tsLPahkd5vvhGSBarkQIAtOecvlMMG1p0N4ctazQQEyAIigAcV527UdQOLbhyD6cuWaweuGdJGJChjJC6Rq7b1ds6WSVaoa65WJ3rY0BCZzBg8SKc1QBIc07Pw+g9q/1OGEKWAHrYksUCR0HCDGB7ip6f/CTwZV8GfMd3AL/n9+yK1dmnPgv/r/0VzOo11joYbH4QKwwaZ/XJ3Qznsct0hI6zem9m9Z2YYW45jtStCxQFsElsRG1UjOcx0+CeYnWSWizEcyzrbczcZ4CxuhSrp6lLsfotUmcbhz3M+2JAxsTqokBauQj3cRSGIWZuhs16YMKSJOQFCYDpndUjoYVFWqqZn297G8M/tEU112UYkHLMWa15DfZgiVI5mmwiOvxt69jeitXLJWNS32cnc5YwRvUuBiTB2fl+/77zc+CP/lHGywoC9ntwZ3WDAdkzuJKUUL+PWC1ERd3gxoFNgCbcVNNZ7VgVynTCTRtg+PlqnNV6hwTUAVVNZZk2T3avQI48Z63qwZ4nLRylqnZ6EyFlgIXdYEAIE1yVuG4S/qVMpDYJWBSu9aIvKldFxTyzFLHasjhmRuKmEwxNXTFlzwljfJIydM1iwb7w8Y/j8KDGyVmrO6B1zNDJ1R1HwvFFQMwMnqsI19Pp4BH31UAoak7BgHh6AYsPXk9w7G9YgGZLeMky1tyj46y++0aJmZthfqDxjI2wXxuxWtdF5tVIy4EAz7pGllv7bwbsMW4x4YvA6lXNN/jGFTlgcYxZrTvGWtb2nu1uWlHDgXn5gXyz1YhZvUcrcazrrPY82FaNKtuDWa3trK4RdzEgkiBZrVLNN0zF6gEhifQciM6ogU1sADSxWnVcA/Fz6/yT3ztlWrB8Gc3uS98u98CA6GG3GqFWEeoNgBYS7dQoZfeBwTx2PGCRiAEZ6gYwvbeU3G4CYx3gmxaKrpiyZOYQVx+3NIoBEULiVNk+FZ9zUjB5LpTYliovaXPZkVwbFMX+JizLwuGywkkWbVuWR+rsDDg+Br76q5mcseOsvn8O384xL06wkcQHKStNmbM9CIDjYxz5Gzy8V+HBysdxsJEHLI50dwPA+VnNnNXPPgsAWLobnJ8Dceaw+XhLrGb5IHt8FnmOJLcRenvcYwMmIQBAWSKr3Eux+k2sS7H6LVKnG39vZ/XN6Ay37488VUXBnNUj2jcAwGcD0cPzgYlQmiIrXfghbUAfZVZrsopZeIr6W8pUwaweOE9HhGbIuFbAbnv2vtWwRAf+fSYYkJEdyNXGZhgQzwMWCyZGPyyBusZZzMI6ewGL5/tNBjYb4P3vB/7H/5GF765WAMqSOatn/HP1PIYBKS8YA6I6dG73mdVDNZT2zqvKCrlrf+RcXbtUi9VlSWsdHOpc4MnslMm472PQNUHCNQinz5BYresgGttcoDoUXR7iKrsP6ppjQAg8VTHBkzmrCyJaBC2xWhawSFyQCReVbEFiJPoA8P0aqSycJ8+xKf1Ro0SvNMTqyMmBF19kqeGrFY7qhzhZ8b/fEatZ8PAQs5omKAIYZB2y9lHCpugIBkQ7YNFNsU73f3ge3M5xJVyzx6L178tzlnmjI1b/y48G+KYnflWv42iEAZxsKvb5a65KggDDnSa6i/6xcYuKFLAsuE6FQhb+VddsI9AACSQ1CJiI1SqHouiIIWJAVJ0m2iicdgnn40ArMfmdOIbGKggBi0GFpIsB4ZkQJhgQi5/TTpkELPoDKDPqhuCQAxowFBQVm9giI4QYYMruA/ncKEsqdYegqoYctaKE015HrBZCrUKsJrmKMSAommxcXaSzWpU7QcWANOOh6hrQAxaVAcHC1EbAHzi+IieFFxOrJ3RWG6DnXFdtvmlMIkTGuBQJBGzHrj3XtUdHNU7SGU5eXe31/avV1nMRBB1nNc8Xm9UbLbG6TlL2/AqxOohxclLjM3cP8LaDu7vzJh1n9YZjRG7eBAAs7TXOTqpt7pGYM/k+R9bscc3imL0X5+74nGusE/3SWf2m16VY/RYpJhzuIVb7PkuNjUceTh1nteviWrjCvbOBny3CAi4KA0JgVg8GLAoMyL4vSotNsKz2OfUOWrDWVF1m9UUGLI7saq7azurFgonRJ4wJdpaHOAjS7UAfBFh6Cc5W+/371mvWffO938s2TIWzekes5knUaeGqNwGoSbxjok9db53VGgKNa5VqliiAPCn1BHB+XMeqB510AKblphkwq73A3gsDouXQcoeDXgAARcGwJhruT+Z0GnAo6qJ7WseVYkB4+BeJL+2qA1dNnNV24LHrpgq+okzCwNPEJSJ4kdfkcwWAwKuZmNQVFQ2c1dJ/f6fi0wyRm7OBi2Ogjjav4+HK200lBwDH4TiLAbGaiJjB0LnyTVFv3+4CfsyxTdEsl4TNjhxz7qVazOoHd0tcCfjqqDUmZRlbp+iI1V94zcWLh3e0xWpAHVSWxLU+sxrsFNIuUqFdfL4V+JpBZUPO6prArLYsuA7k4h/fvKS685QM4KpCDZA5tdJzNXh3AS3XX3fcKkAOsd3LWV1qYkA4o1OJfwAY0k8ndJhX6Fd9DEjJONbRjHAPAOqx61HDgDQuVcWfU8Vq2x5kwpOd1UJYVrigs7jUD8HjrOIxDEhc6t0PgwHBBs5qp82B7hyTfF1HAxZpm3eOo3bq1qUBrsKtBzvkSGO34ADL5gZFgbT09n9vtWoMZ5Zk9rRitUGot+fWyu6NPAfNJLIHFkonEPLo2Mar62P8J99xba/vX62A+Zz9uitW5ykzJsyqcy2xOjnPGSaPi9XXwhVu33fx0u0lXjy8zdIcRe2pQQBcrPYT4LHHAAAHOMf5Sck2d/18u44Sm7dD5j5RWcY2Xmd7XN9GrB7KNnK0pprtYwO4FKsN61KsfitUXeM02dNZ3UxARo6p46wWYvVqwG7RTBqnDb4iteA4DhP+hjons4q9gHRGnz1FBO32bGu4PZuKAdnHWb2OmeAA12XOai/GGReVz7IIB2HrRvJ9FrQ5FC7Yqs1m+7JcLDoYkPl2whZ4FWuhVonVdc1Tuff7uU2Jz2sgAK1Z6OwrKg4tynkVSaFGzAycK9uFH8HhUJ3VA+FEFKeP5w+3+ImWZy0HrFiQxXs4q3U3F1QTJpPF7hCbsiZyoB0HnlhEt5+HukZeEtEigHqcFc8AUfRpxOquQ1FgUIhidYNVkDmrCx/RXH8TwEIL0aMoJlZnbODiLYlH1QO88cDvO249b9g5Q2UA74EBKWrCe8YumaNWVnXNQnd0HESOg7lmwOKD+zWOAw5JLHbF6uvX9ZjVaczdhJQsh3iAo0lxVvs1w9YMfGZai37hhB/sCKF1xbgDog8prI4fVDnfoKDcxGFVwldzrtNiQKZxVg8xq2kbuJnCUSuOW9UWbF/vnKNQggERTlqqWK0yCFDd9cC2e2cA1UDtjFJ2XxqYA5wRZrURBkQhfDFnteZ9K/ivI87qjeY8bmxzgeQqBuA6kAcPiw7BqZ3V4rgm6BqFU5c6N3JVbGU+56Q8X7AseE7Fulu7RiyREUMQq8eQW02GA0WsVnSKAqBfV4ULvJkXERnjyg1n8Q7f8zM7uubgFx88idVqv89i2FnN3nOz4lyLWX12UrFu6zAEjo+x8FLE6wqffPAYXrx5LndW7yFWn8Uull4KHB0x3Ki7wdntmL0v24ZK32fvw33Eap0uobGuqLJETpxvjT0Hl7VfXYrVb4UqCpxlIQ6iYnzAFA/z2HOhE8oixOr1wCxbTEYJ7Djx92WVF5Z+Cw5f6JUDzOoyK/VT38eQJZxBpe+sVjgxeFVpznh0FGf1GAYkdrBwO87qMzYZOs0iHEStA/hMsEnS/V6uwlkNAMtlJ2Bxtn2B267NXI9jorLuvSWu10A7vfZu6RhLFJyHruPa58d1rAqFqt1XCJdTMqu5A5iSTu/4DqqBFj9kmfYiZy/GWZ6zzSsdsXosYJGImHGsCkWqcuQ48Jw9ula6xVs9ewJw+xnQdWvz8wXQ/7zqmp4iD9GibcsdigbOat+rkSkwIGVtwws1V/zckTEo+gCIz3ImSs9mwJUrAIDD6iFu3fOYiL1cbr9ZbFjI7gGALk7ssSmaV87+3HZ+zMFN0apCVjF25d6fGQED8vAEUmd1ngMvvAB89rN7HwppUjE3oaazOnDUTtUkrvU5muDOatn9Kkp30b/HuGUW/iV35xWVDcejhaIqu9lMOLUjrf9UDIgfWn0MSBvfRAyGZYLiCLNaA6nAXI8jrdRFwQRAzZshDOo+BoS7/bTGlnY5Diyr7gdFXxQGxMhZPYBFMglYHGBWU8XPMTGl2bgjrBEGxeo81wu0xsVhQBxXwS5v5rHahwQchzHhZSYRwzFWKqyDuKYVx3UUoio/V0e30wZgGSFuJd8QEu8tzfBWAKOh1klqsfe35jrJtmp5R6PJe2ZgQ6zpEiRhQCrkqvmhLgbkqotffPAEkmS/7x8SqxnyrcA8fzicRdap89MKB17CJjxHRwCAdx98Ab9w/ynceKLzOeo4q2OPYUDCEDg4YB3ct9bcWd26f/j7MCv2ZFaX7n5ZDuJcVSK4wWbraIf3Ze1Vl2L1W6GyDKdZhMPFHjf7PrvlQOsltMfP52L1/c0ezmqqi0zxIJNa38VCb8RZ7ei6X8cGHYqI4A4k3ovDJgRhfU+xep3yFF/OrA6cgjmn8xxnWYjDqPWG832ETo443e+zaDurl8uOs7ql+YxeV2rL75joUxTISnfvNiwAWyf8wEZIznlguo4/x6oH+WYASBMmKUOSH5PqztvH/ZlVDrxQ71nw7Gp0YV4DmozxAYeiEQZE4aoV9yuVp+rxNv2OiEB2PQKjzmrSQg8th70KA0JkVgd+LcfM5Dlb7Oqu+F0ekDvk2gcQnxcMAxJFLJ0GwFFxDy+9sWQi68HBzjFdu1SL1eLa6n5mLk+RH3jPFLoBi7bN295teQcLBbXkMp6gFrP61Nk6qzsYkKtX2amdn+93rCytWWDhXpOY7Tn7A/cB2VkdQI6tEVWWyHQ2RvcJWKxt0kbjkLOazKxub4ZIwhDF90x5roz/S3NWe77d3wxrukwIWQP8ZAfnXPzdZQeaqIaBzRVxXPG9OsWc1f7uNeDCt0VKq4OatU5FIgHbc1F2hxEE4OY8FX9uyKyWDt2GGJChMMQsrfUxIAIxM8R/5feG5e9/3DFnNQDyxpXSWU0NiR7rkLuAUNAir9lGPmGMUXY08k0ACmoJYLeN9P3VbLISDjqyRqBiQLyBTdGaf49uea4CjYXW5gLRWa3cvCxLlLUNx9/vfI+u2vjkyeNIMw2x+tZLwA/8AIL//R9txeqybJBvMyvB5sGerdJgzuqll7AJz8EBYNv46psv49nlfVjHR7vfzOdao8ZJAOeptz3ucomr4Qr3XokZNqsnVu+JAeGbw1pi9UDAokkQvQUMhyRf1mhditVvhdJxKYqHeWyA4Jy7fZ3VV8M17q0HTqARq6cVFEkOPeFSHcOATO2sFmFtOsKXENaH1iJpqd+aOrZTyGuVugwDwsVqywKsuuTM6ggHs9aJBQFCN0ey58uy7axeLDoBi/PWfTImfF4QYkZsLmiJ1U3A4jAP3dVlVgtxYsClCYA0YaqBEWa13iEBjF9bvlums8jZx1ndYBy0MCDjDkXKYtex6uF2X6KwLA0tbCZLNHFG2YpGHbd5qRZPeW7AfgVr05cygClIJGAr+myGJ4yb8xKRwzEg8zngeTiyTvDTrz6Fdx3f2lpV+DFdVcgmwJyaNcGNsScGRGsjaCisjv+svHLgexr3l+Ng7mXYZPu/l/IM8Gz2M6yqaHTNLGMf6dd+LfDTP73fsdIECHQxINxZnSby+50qVrP7dThwVttZPTSHaYQUAlZB3AcyZzVVrLbZeFeUkuBGw+ArZcCiwRjrh3Z/3BKdccSxcJ+Axbq2tFENjFW8BxpLc6wNQyDpClRlSdsMFKW6BuI9Q3Gm7ZO7QdhsdqxKbXYzEasHmNXkELwRl2IaV2zjTnONEDjFsPhF2BxunNWyRSg1KByKeRFgxq8Xa0XZO1yMMZQxdkCwJwf2QWzeya8B9boCrJNN6azWyVroniw/Rq/qGklus3wIzXvWtSr5c2CEAVFvLpDnsq4LzxpGSwDYe2Pw8NhBXrlI9wkXBLA6LbD4lz8CPHyI4PXPbuc8mw2b6zklZm6Gzd39OSBn59YWA2LbwOEhPvT4S/jamy83TuummjFr5KBVhTj3MPP4vOvgAE/MTnHrFY4gCnbFaoYB2eOacXrAvobMQb3E5P01xi6/rL3qUqx+K1TKElitcI+nTjzMYwMaXzztxfMRGJB4rv6esmRtxLqC4hgGhPKiEOFnKvdrzRys2oLimIjAXR5ak5umHVH9dxq+9kVgQBKPYUC4WA0AKKsWeqZ1gCBgGJBsv2GjaBk9Gmc1D2zZ2e3cQ6xmDuC9fuz+xxVitaabcJAlipYTXnMS5liKwD4AdUGciI0w3sjp9O5IYJ248TTd5WOBP3la6TmIRCveIAZEE93THFdxH4jrSuSpel7dR2sUBe0Z2B60Oc5OmQhUaC3KVM5q4oF9H4wBLAlYBKAvpnjefs7qVbkNWLQs4MoVHPoxPnt+HV92o5927toDGBDxPiCMW5ZVD+KLCkKr/mB7dlkiKzXHAoEByTQ+i9a/KUDauH3ynH3mH/oQ8D3fA/wv/8v4obKsZtgSHWf1yH0QxyAFLAahJcfWiBJBVfu2049hQKiufbTuAxWzmooEUuFFjJnVFxCwGPKA4I5Qa8LvH51z5Tl7rrVD8Epkis0VAGRndRiCYUA6gj0A8iajMjDcpI16hCtM2my1bbgOe/dLA9MNmNVsviH5M822/50aEauzpGIbd5r31j5itfjevQ8r0GAK9BwAuqCo2mSrbH0zCz8P11YgIw26zhpRWeHUpaKGlKKqQfcKMIBdE85qzfBWdrK8Q0yBg0kKD6Gr3zXt2SVyGS6xqlgXKfE9o8KAkLEt/FyV73DNsfboKvu+JN/v+1evnGBhM+Ra4BRIhVFjs0FWsXObuRnW9+K9jgcAZ2fAgRdv51zHx3jX8S385V//wwNi9chzyUOwrDBgc+7lEo/PTnHrVs3F6tZn4jhwHKCsJZvi3crz/TuZxCbrmLOa8v7aB295WaN1KVa/FUowPfYRfjyPpaWOidUiQXyfdZ7j4NCPcZKG6hA8A4eiOB9ZkTEglmTCLIqLCI4Nbcf20LkyJ52mWO2OByzmKXeBazrI2E7h8LetMw9zL2uY1QBgVSWqrMCDdI6j+S6zOnRyxJnGS/vOHeCHfgiLT3+MidViN7mtuu2xCUCaNLou45ulw2K1H06MmBFCnebCwbUqJQakKms4lFCWvZjVeofcOe6YWE1hKKra5gAk65ItyrSc1aW63Ve0kBLbiFXsPBMhxXUlDiLBEjXFgKic1ZQ2TwBeYEsxICxBXXPDplVBACWzmv1gAgZkwFErKl5XmLnZtiXk+BhHPpvMv+uZ1e4374uYmToYloKbwkh7diP66J3n3ONitWpe0KqqAux6+3mGVoaYr5My/gr61m8F/vJfBj760fEfnyZA4OTTOqszizGrNT+0IABzVg9gQLSc1WMBi4auP5VDsahsOA4tXM9za+VxAVwABsTAWT1z+8zqsmQCiqeY343VRTirxQbuPs5qXQzIzGIYkM6mKIV/3ZRKoLhAZzUJ4wVs+b+K8RCAPqpBPLdKZzWRWS1a6gcwIDRndY40H5hTivtB11mtyjOZYuNK6azWPuQwY5yv58icdcU1KEp6+LQq0Jp8v4rj+pY8ILgs9YKB26WacwKNYzv0NQ0dQgCWOOHJhh5w9J7KCS/Wc0R+/Zizet9n4fAqu57H0X7YjtXrZwzxCS5Wr/nPW6/ZutcumNngfjKq+4o6X4E5q8Wc6+rV7R92xWqhQYx1+QvHgnBOHhzgidkJXr/tsIDF9j1itbo8xg6ss9EmznUg04WaubDFwVw6q03qUqx+K1SWsQnDPouyfdNSxctiH2e1xVhYgxxNaoAKZ+qqeD4N30vTWe3YAwJwnnPH27QucDMMyICz2gADkg1NRKsKq9xnYrXjNGL10t1gdVrilfUxnrqy2X6/7yNy8713dgEAf+7PAbduYflvf7QJWBTn1z5XAGrh0wADMpjGLLjK2hiQYWc1FQPiDLg0GQ6H0IommNVDvEcDDtekzuo9dqDTpNZzPop7YKCd3qSNWMouN2xR93yLORQ7rr+iJjwDogaY1QUla6B1rnJmdaU/brfK9yHFKpQJIWwWAByHBeuNBSxuaoaBEGL1lSs48jdwrRIvPtvpZxzDgAin6sQ5DgID4mqGTA65vZrOKB3MjGVh7hdYF/64ywXA2WmNQ3f7PonsBEnM7meBAXFd4Ou+br+gxSwDfEI2wFDQZpJYZAyIlLEuir9r/EDTWT2EAalpY7fvKwQPA+EPGBCWDdqzHVexwdKE2NLGQ8d3+mJSUSAufUQ+Uazeg1kNQJ8r7KhFSoDNNxzdTi60MCCta1DnBEG9XSoGsEHA4j4YEMpmq+Oox8OqrGkuTcHUVYjVJuaAQQxIUrOxUNdZbReDYrU2dg0YDcQEYMZrVvHrifeWEhNn4qxWdYSAaMBqH1cmgtc1e24NnNXSd4LAV2k0LzXleUy3kD0MRYGkIIjgLssJkQl/JqHeQ11nxszqicRqbxHgWniOq1G8jzcAq5O8JVbnSDf85202bN3LndV/5u8/j7/wF/Y6BZytHBz48VZY/oZv2P5hO88FGHcri0pT1qUrbrKDAzw+O8Xr94K+sxpg9xWA0WA2nfetONcLCli8dFab16VY/RaoOuE7T/ssykTb4JBICWxfFhptqQCbzEqrqpBThC/BjlPgD/KC70LrTG6E61GFARFBQrrv9X1wFbqLPdvmAYuK4CsYYkCGNi14UJcfWOz6RhFg2zhw1ji9z7EDbSHX91kAY+7u5aRDngEnJwCApZ82AYvi/Joa2wQwCO90rQpFMiGzeowlCpa0THZWK+7ZogDNjcFxHbUMik4ValvHVV2IKsnYhIKwwTI0uUkEp3bf4wrnzIjo43j619W1K5QKZrUJX1rqfBTOakraOz9fcRzZuVK1CS+wpZP8IqdzGQGBVegfN9lUiNyMhAHx7XFndRLXWwwIAFy9igM/wVfd+By848XuNwtBUfHuIl9b3hGiDGThm61azGoMu72oYtI8LLHOA/U7sVUPXk9YuGIYNl06yRlbcAhnNcByLR8+HP/ZaWYxJJCus3rgPkhSi3R/BaGCsS5KFwOyj2uf+NwqhXUe+GRgqpUigcxZomoXOHVDsOns6orVhYfIH7+X5Sc7sigVGBDtd2I1uMmWJjWpGyCaWYgLf2fRX2SVEb5JGYB2Uc7qZtyidBjwwD6Z+9XQTanMsiA6dcfmRlnG3JNan5voMhlYK+ZxoT2XbeYvkpMtS7DNZkoInmJj3CgkWpgOBgIWycxqFQO5sOiiqmojwGCMBbizWoUBqVwEEeG43NAiXdvnOcvMIjqrlWI1MSdlDANCMl7sgZZgP3zPGzcM8Ve/7m8jsPNRnRYAVrGLhZcAV68idAqk8VaszisH/tzD+669gv/q634er7++3ymcrR0svXQrLL/jHcCv//VsvvzCC7vfvCeKtIpTtlYUx1wusfRTrDY24sLHLOx81p43jKAUlefsuPuMXWN6CTdzXGJA3ry6FKvfApVvcjZh2NNZ7duFup1BlAiT2ZfV6rpY+glWJ0NcYcKLne+UqsRqkqNUTBhV10CwRHWZsnuIqtpIgbHgKzAMCEX8bAZflbDMmU7NfWVZwMEBDv0Yn//kBsfBZvdFatuwPQdVbY224NQ10PR4A1i4CVbnbFOiN1l1R9JyuXOCem8NOavzytETfYYWI7yo4Z3KoBewxRMJA8KPK722ZcndeQRRdSQYNVmXTPTRdD2yyc0ABiSu9RLExT0wIPoAgOVMyKw2bFH3PO5Q7LSoZ6VmAF67VJuNJu1tYIsnJQaE4PYTxZjV/cXTZl0zTMdFYEDqGnFisYDFKGJfe8c74NoV/s1H/jQD73eO6VoD44voXNCd4Aq318i4pY0BUTlf+blS2K/zoMC6CNTvxFY9fCNl75TZDAhDhE6B+IRtxOf57mvIVmjq7cpywKcGLKbyP04ymwl/mveXFzpyZ5oowf7c16HmjgTDGvBvVc8W6poszgADbkITDIhnMUFR4aakaqrSzbuyRFx6u23HOjXiziI5oN3xHIdkU+m9E3mFc6cXsBjHYO9tKrNaOB+708OqYrk7FFbDGAaEKig66vGQ7NIU/37ZPWBwrqwjRJ1FlKU1Gwt1xi3bRuAyPJGqM6Z53+o4qwNneqQCxMb4QNgqpUOQz+Ok+D2DzQXHVYufDQaEItirMCAXFbAo8FUUZzXvYpLypXn43V6d3Z1jqjjQjUloYgwI2Vk91tmri8QJQ/zOF34egZ0p5y/tWqUe5m4GXLnCnNUip4OL1e6zT+JquMb/8YWP4v79/U7hbOPsMqsB4Du+g3VQHx7ufnODIh0e79KzlL2/Ws5qAEBZYl34mEWd6zeEl2mXDjKw0UsUn/EUzuoxh/llDdalWP0WqHSVs13zfd4YTVrquLMa6LCDR4575G9wcn9iDIjrwrFqtUhHaZkSwt9A0ndRO9DVp+A4wzt6xDbawfZsEMVP24bnKCYgomQ7j8fHOPASfOxnMjy/vLd1GIoKAjYpGtnaTVMgKLYpw0svwfmDAus1WKBjBwPiOwWyeOjeIrj2xYJfFYBGZVYP8dAhnPD6YrVrqzsMyqKmLZ5GnD5kt65oxVJciHhdIdJtp2+caepvoWBABp3wYpFG2gRQjFuGLepSAVi0qAdEIcXz4MscKUJQJYrVUpGuro0S7wEWgJZWfQZwvKnZfaUjUAKNWJ0NceOqCnHuIvJaDjXuFrEs9O/1xlk9wqymbrKpxq0sQ1nb+wXHtA87FLDYdANoitVRxTAgezirNw/TLQ88ihC5GTYnW2d1+x586ing1VeHj5dm9v7zIlEjmxZMrNbHgFge7zRRrUiEQ003YFF1WQ14qsxFJ3coToIB6aJ7iprsphwKFDNl+NfdTfeyZG3HoSkGRIFqiCuS+3UMA5IkIInV0dzuOauZWK1/rKZsmwk0ZcckYeL83MtZrX/YxiQyJVd4QEwzcgCPYUBEl4nmwQO/HmTtN+9bXWa14j1D7hCEouMMaCGRtA/JO1sVgZgGnYdeYKsFezE3IqBQmu4o1YagkbN6AANCDFhU8vaLAklJY1a7ViU9JjkIEcPoGvZ50RCM0o279oH59+1VXNkPrHxcrK5rlBU3+h0f73aTrdm63Hr2GQDAtex13Lu733v0PHYZs7o95xLugm7tKdIm5znbIBU7F9wUcujHeGNziFl3zTOy9myKJFYPM6t1lx07x750VhvVpVj9Fqh0XbDW9z0DFvcSq3VbUER7n2oBTd2FFjvbKmd1SWjBEW7tAVh+WVskZ7Vt1ajyIWc1QaxWTUB45VlN4hU3bXM6IXjHxzj0Y3zsF208v7zPerLb5ftskTfyttycFZgXp+w3N29i4aU4Py1x78TFlWDdE6sDe0CsprY8C/erame7KFhrj46zekxEAB0DMuisLi0ys1q5u0/pBGidr21VyvDKzYoH1Wm6Hlk4rPpbtDEge7BfAdAcVJYiRd4UreFLuIRNizrdWe3ZZb+dXCyg9+2wkZ1r1Wn9b4QkTXxTq4KZw9yfnU2xzUbf6QWgWTilQ9k0ec6clWHrM23/nK6zemx8MWBWqxZkALYbzb6mWD30niFuWnged+nu4axOVzlzLUcREIZYuCnWJ+y+yTpDxfPPj3Ors9wiOauHgsoasZpwfwEYdVbvvTHaBLWpndVUl6Yf2sMBi0TUkMr1Z+J4U4aCGmJAmhu9N8b65s5qxfsrWZf6GyFi3B7YwE0SsA1cXWf1wkVSejtjLFX4bsqy4MpMEibBjXsELFIcb45roVShGnLQWv/F2C0bBsQG0wW485qARV18USDPhhAVr/WxW0POahMEhnI9Y8gCV5o5RJ4H4fNSOqBhgJVAy9ikCrGlOqsDxbUtS1S1DccnmA5Uc06gwWKFgeb4PYBUaPKtTDZCpnRWT8ysFmJuaKVIxjIWswwWeLbLfL67QS/+8sEBcHCAq94Z7t/Zb4P2LPYYs3ofg4AwoY04q5NzPi8Ux+QO7cdnp3jp9AaiWefvj821eBVJwe6HfQYG24bnMJSttMvk0ln9ptelWP0WqHRT7s9m9Dw4dj2OFM5zvSCVMZcqdfE0FHCBVju5prN6zE1ZUNKjx9p6iG1+g+3ZaO3ETy1WZxlzg7Unoleu4KnFQ/zoJ59hzuorVzoHlSzyJLW+vcLMSVlC8LPPMldjXOLzdyI8t7wvdVY3bUrdom6EeN6w6JNlqGoLTqAxy22C9RR/XtdkxrhrK8RP8IkY0emjRAo0zhG9QwIAHEfu1OW1Wdf67Nd9Fuappbcwb0QfxZ9T0+mHRHCBGbKJzGpfIiaVJWub1J3ct85XOnEuCuS1Jre9fdjAQd4NgxQtnh7RoQjAjxzm9OncDPEGNGb1PhiQPGdiVdfJ8Sf+BPDhDwPf+q29Yw6iGgyc1YPvmYzz4DVtHo6rDn2iuv6azqw9xOrkLNuGV4YhFl7aYMXyrIafnDVuzGefBb7wheHjpbmtz6wW94Fsr7Wuyc7qfcTqurZg+7qbbMNOH4pA4weWHAMisjyozGqPB8N2xWoDfv24m5I+HlpWvXvfliXbEDToXmGLUvlnlia1vvvV5Rk0+zirNa9vtOAYkLazOrGYk5bMVwFcp+477CnhkqL2CFgkYUBcsPt1yhC8xlkt+TMDdI/YbFViQHKLBSwSnNXJAGs/jqF9P9iuzTYBFM5qEwyIepONGD495IQX72/Co6AMg6zZs0F1Vg9dA5OARc9XvBNkGUN7H1TRzcePm1Ac20MYEKqoDIVBpHVc16JtXO3FrN73uFzMDaxsNHulmeCEITCb8bkv/zMx3vs+R4QU2/DFoSoKnKUhlv6emKjm3z8iVot5oRCruZnh6x77NP7dnecxuz7vHXewi00cV+Cx9nznDG0woSzZ/M0lrJN4t1FeKoTwy9qrLsXqt0AxDEi+326W47CXYF0PPxi6zmrPg2tXcv4U0OKG7Xe4plwXjj3sKKVjQIaZ1Y49MVaCOHEeSo4GiO5yjAy+wHawby/2j4/xX3zpT+E73/FR/Lobn+s7q8e43bzW9xPGy5rNtoJ3UeKzt2d9sZoLn8oXppGzehgDAkB78Tjo1OXIEtfW5McNYSXQYihSW9FkE0bhpqS400R7siL4Kd4Q2MKiK2RgctOESelgQOxhJBAAMgtcusipa3o6PQAv4ONBFwNSdFy/WgflrvWuWC2EdaqzWmBAOu30SekipPK1AfgzlwXWdVTFZvGs24/HWcVDoo+4xj2O4o0bwLd/O3p/0Liy1JtsJEFROLYHxq3eJuMeZfsDoahEZvUYu75dyTnHmQlntZdifcr+XvaZL8D7638F+MEfBF57DYsFsNkMHy8rbOYmpDCrMzlTNi74JovueDC2iSucpfuO33sFLNIwICxgUS5WFwQWuigVBqQRqwkiQuP4kzqrJ2BWd8bYjSzQad8aYVancaXXFQQ0nQBj3UYUznq4cPsYkIQHjBqI1Q1+rnNtAdDEtH0wIATH21AIHhlXweeceReDAhh3sg0iZlIesKh7D4TDzurNBtrzOGl4KbZfomJAGrSG0llNC+90Ve5XEwyIyigkNix01568GK5Ccs+K3xM72ZTOah2UQreEs1Y25zJgVqvWM0aboqrrWtfGzmrl1IhvYO891loWEASMP30+krAo3NNBsBWrxVS6LVYfHbFf72E2QJriLA8ZUnqf+0yMWSP5acmqYKKyuBksC7h2Db/3S/4troRrzB476B0XwOick4nV+4+JY2I1APpmkCt5J16WVl2K1W+B0nJWW9Z+D7PujumeGBDSwtxSs3pNAhaV469wEOmKdGMiAmc+Op7eY6VsdeXFdnb1J3hjzuoqzRlLsoMBcewa//1X/WO8eHinL1ZzR1IvqK1Tm5OMTXKjCLh6FQBglQVeurVgYnX7Z3KRciyobHKHorguOmLHmFO3KNiChMDXdqxKHvQCoCgNFk8Daedkp48QlhXols0GJGZ1MOAeAoA41WzTF8/sQJeFBZAXpVInvFiQkJnVEg50WZoxq10XniVxrRcFW+wTndVSsbookBQeIn9cwFRVMHfZIrqHAQENA+I4DAMyRC+SYUCGSvDrB9o8SW3EQ90Q/DzF92nVRbBfhUN1H7FaLEo4s3rhpVidsXPJ7q+YM/DhQ+Cv/BWETt7O55VWLriyU4nVeU7vXtjDWS1+/r7HG+0O0wnIbpUX2HI+aaEZut2pZh6jwoBQAsUCe0BYJ4aqAYDn9ZnVprkAI9zLxlmt+U70nT0wIARntTvz2efVxoCkFlvgUwMWAbgirKx90iYOzdGARdo967g8vFOJaiDMt2wW3F7IXHQm862ReyvLeNisrrM6AMuGGHJW62SE8HMFMIzAoKAaZB1ngFnuxpizurJJc6PGAS1zVtcGc0PFGFuV9FwAYJhZzb6BJlZ7qq4Qo4BFOWPcZFNU2cEjjCcUpJ1AAin0ySov9TawASAIEDoFkrNhsTo7T9l8KgyBKIJt1ajFeNQ2qXGx2qmL8SlcmuI8C7Gc7/l+HONA80pWBeuWbZsxr15F5Ob4Nx/503j2yxa947oDCMrmuHGttVZUdkMARiHRAOB9yfPIf9NvMXqvfrHXpVj9FqjGkbHvC0NwhQd2cRqxcd+Hh+9oDguKBPbpkEMRQF7arAVH5wUkzrVSt9AWVLF6SETgrVi2o/dSczxbHXyFCTAgivugYaF3xOqdkjirA6dAthnBgJxkmHspE6u5s/rdN27jRz7+DJ5b3ttNDt53I4QaVDYm+mjjOgZEhKKgLaKHghABFNRJ/tC1NUg7b1r8FJ0WjbNas0U/dHOkA2L1amNj4aX7L8oa0Uc9FtQAmVk9tMihi9W2tI06LjxEEemQagyIEFQNMCC9cxXIEgNndbRwEHd4qoBw/tEDFqUipSi+gNr7Go88s4JRSkJj2QP4IjFxnlispo6xymN2ijGr2xiQBKsz9m/JNzkTWwDg/n1ED18bFqvrGqhrtn7UFqtzufiX56wjQHcBDciduu3SdVE1HSHq7jAyBiSUBLjyY5aVDdsjOqt9+TwmLyx4unM4Xo3o0z3XhotPOtXtPdO+EQQGhNq90jir0XfVQn/xDKDVbaT+FiYwE9AdkmsQp7a5s9rjXN2pxGr+d2pZe1RZoqxtkgYwhN8zwlW4tRSHI+YapFZyx2Eu1dyW3lsNEonKrFYFLMbQvx8G3gmkTlleF8KsviAzh+M7qGQGpKabkTY3UmFATHjNAHsnZJJAa2Nntcq1zg0NNLFaPu9uQlEJg4HjO2zjShHkS/q8RjIMipywiRuGbB67Gnborh5kWHhJ46wGsJ03Zhmbi3heI1ZfiWI8fDjys9OUrRdn+2+4s/ehfMwSxbIcit3OxWvXAABvP7wL6/q13b8wYpRqjjsxBgQAXax+5gnk73yP0Xv1i70uxeq3QDUp4vu+MMT3DdgxirTUC+QQ/N8BDAhpwiBYvTJndV1vg+V0djUFUmEgYLGoHP1xZ49ALfF9OmW5AyIC9RpggG/Gq9nR7DCrd0q0CYlyXeZ62wwv6DanBRMrWxiQD177DH7pzg08u3iwK1YPtHYBMA4qm9ShKO6BgXuLTW70xepBZzW1fVII9hflrFZgQCjto8JZnWSOcnKzTh3M3VQbAzKU8gyAhgFRbVoY8lSlAk1R6Ll+uzXErDYJWFRgQOLS0096bx935vUFDwCbxNa/r4Cto3bMWV34+19jzxtGNVA7QkSnycBxSd0AQ+5fMW4RApKVx+xUs3iIIuasdlOszpjonMUFW7j9ht8AAAjvvTYcIiTuC8/Tey/yBbR006LZrKBhkQYT6nUxCGMtxMR8DIDz4If4pNQFmSpgUbRRU5zVoaTLBOBjrAEGxPfh2BXKuCNW62xWdcuyeEiTI0XwkZ3VdoFsYJONGrCoFKtNmdWuxCShu1nTriEkDr/OFmHXomGsK0RVegieGgFB5grbDNeWl3Lhpwmb1XVWh9ZwwKJgmOvcswPvBGqXKDA2FhBNF2JjWMEYLyqHFjir2hhuNtkMnNUysdpgcwVovRM6F6JKc3owqhi7ZM7qPEdaEZjVngfXkgvAJs5qy3XYsynZXCB/XmNidVax89W5tmG4FwZk9TBnGE7urAawI1YD2BGrr4Ur3L8/8rOFyL2vOcC2mQteFVrIK17zeWH7uLwbm51cR6wWeJkxsTqu+/rGQA12ohsGmHreJQHEtC7F6rdApSm0hWXLqgefjiTmE2fdxdOQs5oyYXBdJiyr2K9iF1pnQWozN3ZZSbhxQCtIiMisHhOrCcIXAKVYzcRP/UAOpSuJV7op+87qw0Pg5s3+uYniYnWyHmFWnxbsZdlyVn/1/OO4EqxwEKQsibh1zNHgShNntUr0obgGBLZmADHDFtGEe8suURZDzGqCa4Cf79BknNo+6dsDzGpK+6htI/Aq1paquMCr2NVzVgtsy8DmgvjZWiVa0WQYEBOnD7hDsdvqWZYMrWHIrJZhQIraJnNqncDtL56Ea8anByxKnY8A4oTg9AKa+3XcWe3qOavHAhapocMj4yGpG+AiMCCOYpEnqWRdssVDO2BxBeD8HFluw1/4wLvfDQCI7n5h2Fnd5i7qlNi0kHVvCAyI7gIaaHAoVTbCrNbCgJSDrH2qQNO4yCTOau225FapGMAmIoLj2ahk95do0adiQIKAsaDb5gtTZjWG3VkNV1iXWT3SEcJCQfWFyqbtuocBMROrPZ87ljuudbLoNbT2MBARWEejOgiQLKp6Cse2qeCh4p5WFef364vrzFmtVlIaxIzmBosKDdXMY4kYEGm2zwR4FdVGiGXVsByaEx6AfNyqGSqGUm7gSJGRJpsAABBEttRh33SDUF40wtCicFZrBQ6LEgKw5JgmAYvKz0vMi4jO6qEu3Dyr9Z3gYcgwIKthc0DTxSYRq/OkZNephQG56p3i3r2Rny3LuBqpMRQp0LrH2sdt/7prv+ddvXuJ1TrO6iFzn6mz+lKsNq5LsfotUFmiiQFxXbaAHBgg0rjSm5SKttQhVAMRA+LapdxRKlqTdV8UljUcWigcbyRn9a+xWF2WTPwkBHKMvSjSTdl/SVgW8H3fB7zjHcBHPiI918jJkcQjzuqzYsus5onE7z56Ff+Xd/0rYLncvUaC7TXmrKaIPkOBmFSxep/2bN2d+GbTRv7HRQE4ZGf1xTCrfadQfmaNA1ZTTAr8enDxtE4cJlbr7O47TNiQ7u6bBizKbi0RpHQRzuoZLUCncTl0WZp8zGlCkTTL8vmz02VWlx6d/QqoxerUoQUscvbr4IQxz1HWNuxAM7xTtmEB0J8vMR4OsLAB0N8zisk4la+tPGankg2fx+yI1TVw/z7yyoF/7QB429sA20Z471UkQwn14r7YJ3S6XY7DnEm5pHsjz9kmC5FZPbR5R8kIYffWcAcPVaDZOSdRuqHb3cP6NnOqdh4yk+ArJV6FmpEiKgj6rcRlqddZIalGrJbM5Vg4sL7wFzoF0lz9rJtgQCwAddpyVmcO22Q2YVYLZ3Fr7C6Sgs1fqM5q1aaggVvZdSFv/YchW9mFUlS2LM3g7Vb5PuT89qJgLlW/1ja02IGnDt0F22DRdu0PvBNMMCCNUCsbCwxMFyqnrhGnVnUNxLkSndVKDEgBIwxIENnMJNK5EPG60nfWixJzLpkJuCjYfUcwHajWM829Rfy8LKuedlNUdDMq5pykLAfhrB7BgGTrnBkc+dobAFCxf8N6VTNEZ0usvmY/HHVWV0nGuOhTi9WyDbF3vIP9v+2wFiWuq0ovEMeNa61N3MFzLUt2v16K1W9aXQJU3gKlnfTsSQSETiVxrZdMLtpvhgRFIp/TUbmVDbiEjtsKouj+G/m5OlMHLFInoyMBMtQ2pO3ERt4ylKxLBE7Vv68ODoDv/V75QTlXOF4PvyjiVckckDPuoL5yBe7mVfyJr/onwNEzvWMyd4PiXqTyVD0Prp2pHwMqs3rEqcu6ASg8dMWmDVptqSRmda58vkyY1Z4dqzEgicU+f12GomhLzXPILK6r1MP8SAMDgpbjr5CE1Aqkgu4kpJk0S/6s4cnSZiduKHErcyGFJKTx2nFmCZHPsPVf2sUjmNW+wexMfE4dbscmtfEYBQPCxcTBCSNFULRK5QaTyTvRVT2z/LjUexbA8HuGEJC8d8BiXG2d1WnKxOr7NnD/PrIqgnf9iC2uDg8R3UkRn+UAFP9GqrPashD42La+t+8jHrAZzggLfsFET2rIMJxlVrCFnpY5YAADQs0I4ccGoBarp3ZWG2BAms9HIfqYYECazIWai3ymG4JojbGSDy5JLZKzmm2uDIjVmU0KWITvY+49wGZdY86/1DCrSZMCfsq+haLcFWvZcXPA1XxeAf4sqOcwAMihakPOajJbWQRMTu2sVm2EFAWy0oXvTR8Mm2S2nlGqfcyhTQDCWNBsqKtQDURmtRK3ZPJ5jWJAaBv5ju9ITVimGBAn9FgHS1espjDLRfF1nZRGSmXYc7e2DOuX53TXftMhpuKha+6Ji2M2zGZJNZxxzYDFwC6QrofnW9k6Z/dDEABzPrpX7J5ZbWws3BTwDhqx+ggPcfKwBjCQF3RSYOklWnMu34ccOdaqBmPVHmNu3gT+2B/rY0iBcWOAOK7YxNVlVitMgwAuxeo3sS6d1W+B0har+S5hE6KoOKbWjvmYq5jK5xxqpxduL8KLfdBZXVUoKc5qgQEZaPsGML2zurLhuYRrIMMJtCrdlPoMxT2d1cmG78gLwbHNwu6+gPYIFGOhhfuf5va4EwcsjjmrG8cXwVk90DJWlsS21BHeI5lXzNmvUh4dgJjIFh4M/KlrrFJPDwPCTlX5HFQFfYPJtUs5/YDji6hCitRZLXiqBkKK71V9IUU408gnKxGTeBikibAuxPS26w9oiR4UsVqGQWmX7njgecMBi1Se6lBrMj/uhWFAqM7qfQIWk3obpCMCFjdCrHbgX+c5BlGEyM0QrwbeeWITQ9dZDcD3amWYVFa68EKaM8sfYPinuuYAMdcYeM+Qw9ou1FndH2dNMCBDDkUT1BJsG75bIitb52sasIgRZzUFA2LbCJwSaSHnYAP6i/KmfB8HXoKz1fZzWWcee2+bOKu9vrO6cc8RRS/l2sPArex4tlxUhllYW/Pvl9yz7AcbMuFl41blUoZC9WYQryS19J3VAx08jaiq6QAHoB4LeJCx9ruLH1P5Dqd2MAGDWAmSmYWX7TlSJ3ye07E1AJQGt3hT053Vnsd5+5I/E+eve1zbhueU/Q5BAHlp0zdFLwgDMpQ7QXVWh26OZDN8PiywutxiQCwLdVUDVYX1Gtvu1DAEfB9hnYwK4GcnFROrNT6z/Z3VEh3iySe3Qnu7xFx+TKzWRBg1eLRLZvUjWZdi9VugmmAWjYWOY1Uo0+EBQnfxNMYVLmtbf/EkgspUzs/KJrmKWYufgqVJDecZEv74ccX36R4XwMC52iQMSNOir5qIUnhk7n4BizthWsBuO087XJEfc5RZTWynHxJ9mnR5nc9rLGCxwYDonWrDwh50VtOZ1arJOLl9cg8MCGWSG4ZAUnrycNiiwLrwMQ/1FjtDG1cmwZWOVcsfLY7u8ShOJ7TaXbscaJPwLwCeUyOT8KUB0MUJWZt+46w2w4BEbrbbwVHX2KQuE1MI7aOeXSKTsYpF6YrVYiwYcL8C0F+Y75uNQHVWqzAgxMwJ8ffHKkm5AzQImFjtpljFNnB+zjAgVxbsG2czxmUcWpBRndUY2BDjXGkSEkc4YBP5M58lFWvL3fe+tdh4P4QvqmuLtnhSCVSGY4HrD7WoE4UUFdKOuoHdKt+tmetL3Et8jA0i+rJonFmt/04M/Fraoi8qyWwmKOp+bp6HpZfgbM2ROHWNW6slHp+dGjGrGVt4l1ndBPURW/SVcxjxHBBFZSkGxCDUXBxXFoJHfh/w8r0aWSl3VqelSxkKR53VaaYQkojHLCqbvAkwtMlGRiI17lfJnwlMFNWpy8+te0yTgEXVNTDBqwDYfr5d7NqmppkD+DGVBoGiYB5ewjjjOpB2ROQm7nLRIaZwwlMxIK4ld4EDzFmtHbDoshB61TxDVLYpthgQywJmM9bBfrrGamMzDIgIp44ilkN1Pqymnp1UOPD1nNV7idW6GCtuDNjJm5BUnFhaAYvNvE8xPyZ1M/K6FKvN61KsfguU9iSXA+jzeARqrzPB9Ty4imADAM2kUTuMQoh0Q0FlFLFahHEo+Zy2/rgjJs0qDAh1MroPBoSydlDxHnmlccU2QXRmuRwDkoy8LJuWb6GuPfvs9g+7ipt4qQ/cW2Vt6zuAR5zwZV7pT5yF+DuIASFMbvgGkzJotORMOorwpUo7N2RWe0PO6ozIrB5Kp89zrPIQi0gvuO9C2n0FtqVEn31rgC8CWqn3HQ50RQmkaR/Xk7Soi+A3U2e1TKyW8RD2Ld/H3M2wXrWurXA++oTPS0xwVc8toN+aKsYX1WvWQFRWPrMAqpxPnC/AWU3JnAAw2MUlKsms7ftmNmMYkI0DxDFzNC+4NXA2Q+RkiAfE6jLOGAN3SrGa0mkjaqTTRNtwYFmsI0QW1AaYOX1U8wLTVtdAPucywoAMsV+pCCtennDYCzWFL0i1OyF2jjkgVmcWKQixCcEbQDVoC4oA4Dg4CFKcpQH77MsSr68P8eTijCyoAhwDUkvEaipeRCBxZPNuA/erMrBPCIpEsdrzFfMNMU+gPl8q4SfPWWdKYOBWVm2EiA3GKZjVdY28tMnXdZQDTWVW26U8G8DEWa3axBUZRNRgWMVx87ymmVlEKTYwGwwIUawO7KJLctv9OYR5p3SMbTaY6GK1NChabOJTPq9mI0R+rzdueJ3PzPcb3NhQZZuCOatFu8V8zv7eww3WMceAiLlTGDKxeiS08ey0xoEfX4hYrXWPibXnXhgQPUMmAOm5lnkF26Bz4VKsNq9LsfotUGlmkVzQQ2mpzTG10ukvxu2lFOnEi50gVjfM6iG3MolZPdD2TZ2MjjneqG1InjcYtNmI1ReCAeFtz0KY/uqvBp56iv26LVwD423vfMJA2lwY+LyyjBD8NOZ4a8I7afdWWSrE6oqHbBI2QobSzk2Y1f7A5lXjgNV1kYmgF5kdI8uwLnwsZnrPQoMBmTJIybLgOrX8PhDccqKQ0jCrOwIw1YkiynP7k/xG+KQeV7bYLQokpWscsDhzM6w3rfs9z7EpfNpxBecuUz8/dZaza6HzThwJWARA5Myrx8OypG+wNAeQHJSKARmcF7SqYet6HrBcInJzxKkNJAkb3+d8dyOK2IbowDsmXfE2V5JYzZ2qEtGnri2yoDa0iEwTTQwI+CbbwBzGsurJHYoAjJzVcsfbBMFXUzOr0XKqCjWFGvrVqmZxLvnMksxmphNdsdqv1WgsAElu0zAgAA6iDGd5xN63aYrXN0d44kqifZx2NQ77qZzVnqcOnDV4DpSb2GJeROQKKzEgJuInBjZCOLM6CCcUgHklua2/RhDdEKqwOkfPbDB6riamC5s5vfPSkpoOAJhhJRQdIVQMiOq4Rc7NLNSxy/fZZ9aZd29i/txSjut523d859qWKd0koRKr88qBZ7oRomSMEz4vm2FJ8rL/7weIGBDPY8LymFgdl+zYwjGyWDRiNXNWt9ZmQqweCrQGcH5W40CTWa0KBG1XIyprzLv3woDo4rGGWPsmIdG4FKunqMuAxbdApZmFA82ARd8pBsXqBmq/78MnFtADzGo6+1XtrKYm8TYtfgr+UElxVvO2b6UDWPBfJw5YLCqblEujXOjx2mJAFlrHDJ0ccTw8IUgSIFy0nNWWBfzgDwIvvwy8/e29Y7p2PMisrmoLtkdwKFpq0Yc0WbCsXRGh+1lT28aaTRvJnzUCOI2b5lrqABnSdQW24p/CSbjJHNY+qOusjmz1wrwosMoDzCNNsVrVlgsDDAjYbVPk/D5o30MNt1z7kAAAbxGw+6ttSRFCigFLlIkzu9eWcYSJIgKw/XzbixzeTm/urE6xXre+xgPwZhFh4SDcGIqwG4AFzupObscCFgGQXOBDuKlcLExtfW43gOFNUV2xWswLkgJjZ5MKUc33gSiCbdWoywpYr5mjdcbfFVGEyMkRx+pjZZtCvyuIlx/YvecAwPb3RK7u0HhI4RUPjVvkuQY/VwC/dszqwqBFfcRZbSJWz8MS6yLYjrOGYj0w7qxe6obVQaCx1CFVSeaQedAHUY7zPGDjd1HgQTqTZlrpVOOwbz1fDaqE+Gx5qnm3gQCsZFaL8FKiWN04yycOWPQDi3UCSDbZjDEgSsQM4d7iSIU6L3bj2gR+kYA03DlXyXWtaovG77cseG69ddi3/52GAYuW4lzzyoE/NQYkJ6xlZMeVBiwSMSCWhdAvt2NX6xhpXJHHLNcFisTePddm3UU0SKiCosUmvkdQGsW9VUvuLYiARU1ndbMpPvxteVLAt6uts3o2Yy73+yusc577I35uEDBzwHpYrD47g3bA4t4YkLk+OSBLh+eqaQrMdXQzcT0kYyFJK2iV5zFN5LLodemsfgtUmukHLI4xfdIUzJm078uCh0nlU/Oahxbm3FFLwoAokunFueaUtrERrMRFBSySd3bHeHSiNVnXWT3iegNaoQlt5IfrAu94R//6jDmrjUQf9edFfQGx9mx1eCedhz6waUOd5A91A5g4fYT4J2MAlyXi3MPMy7WP3WBAZM7qPMe6CDCb6Z1qs7kwJQYEgOsBpcKZZRL+ZUcBS2Zvq3WGQhIgF1Li1EBEAORidVkiLnyzgEXfx9xLsY5bn0ue4zwPtZ31ALgbQ92SCTA+Iyl0eAAJBIA2bg28Z4q8pnE/BbKjUL8TSQHJdqneaBRV10hyZ7sZ4DjAfM42YO7fZ/8XuxuzGRen1IdLVzljMhJSxVQYkDLO4Ng0tEiziJS1PAPI0hq+rrNaYECmDvwZYFZT+b+AWly/KAyIUcAigEVUYSWEWmCaMXbAWZ0KDA7JWa3AgFQVksJF4NLeYctZibOMO6v5+6bZNCLWoLOauhGkYt8aPAfKLAsRkGyg+0mDEKcI6VJiQIjOas9jJgkZYqWutxuMms5qX/ZOMHGpAmoxyaTLBK3PSxWIacBArjLVJtu0zuo843MCg3mc2GBoF3tuCRkhvKKgRlz4vfl8Y5SaylnddCAbXtcpmdUY6LIA0a3LMSBjwmcWV/CdFgZEOKvvr7DKw93cnzDkGSHD/8azc4sxqzXGgia0cMBWvNNxt08NbV62ir1v9VjYAC6d1Y9oXTqr3wKVZhaCSM9ZPcb0yTJNp49wkQ24igGQhFrHqpWs3rxyEBFeFI6n4NHxcyW9gBwHnp2jUIV0XYRYzYXKiLJj7CrCiXg1rkpdZrUTj74s0xS7AYtDJRzrYw5F4kaI6rh5DiZ4OHoW0MH2bLG5oDuyCme1wgFNDRodvAaGgofvKCYMAtcQ6p8vc1YrFuZZhqq24AR6F1fJpkTLpUppI3awdU20y4ShCGyfmY6zGoCZ68+3kK93RYQkAW/P1hf9APDJcNY716QMEEZ07mnDrE54C6VlAXmOu/ES1w8UiuBQCTTWgLM6Xld6oaAN71Lx5waBu0PMahZYR+WsVyizsj/xM8CADHZcicpzFl4XWttF0sEB+/+dO+z/4RYDYlmQY5Z4pZuSYTUoGJDQkmJAms+fIlYPhUnBwFk9hgEhupVtfh+078yqqGCbiD6hK12YNwu9ifnapNDlVi1n5Y5Y3ThBL8hZnWQ2whkBAyI2cGUDQp4jKV22MUhofz+YlThbhUCW4fxugqWH/eZsA+UFNtJuwKLotJrYWV0VFfkzU7aoNwYRorM6kM836tJQrFa5FEXAIpFZHfAw215/ZVWxe8vTfHbFuzatsTOSNggMovt1gAMNgMxZ99waRSp32AMgi9Xint2ZWYm5oamzunOujemC3M7nMTFzU6K9GopTm+6sBhCFNe6e+r2xizmr9Tfu+Kn2n4OpNkIUXRbUsHTPrZWbl6SARY4BUW2Ki2oQl+Jzm89ZAPS9c6xzH4tl63yCAKFzNhxoDSZWH2o6qy3PlQeNtirONLn4rgvf3iBLh5/LLLcQeHomTwDDGws27fn67b99cDp7WXvUpbP6LVCpYN1pOauLQWd1lkHP6dNwNEeY1dSgMpmj1GC31PFsedI3sOVb6b5/R5jVzWKPKlYrnDNkl8dYi1+iv4BuMCDJwMSw7aLbx/nWOKvViBkApHBBb0BMIjGrsYezurL1JzeOA2cgaJTaYQDHYS6XixCr7QKZ7LhZxnANmg5oALBDn7mKZaqP+CA1H9whd4NJirrjqpmXRq4/Idq1nNVVRk9PF+UHkDreqA4XAEAQ9FmHPGCRslnRlGVhHhRYt52PfBNkPiccz7bZ/Vo6ylljvK5Y0IvWBu5AwCJ1sduMW4qOECpWQYjrMmG5LFGDEC7Hu1fGktmFWL2zgbFcAuB7EcBWJOMDRz0wu8/WORkDohL/NuclibMPgIk+qjApXAAGhAdaU93Kss67JOFhWgYBcD1xXTjTHKJY7XmwrRpld24ggq8C+hJmMa9wnofNRlueVmat9Bhue04p/F/wTgAZ/gFgG4OFR+5iOZiXDbP61qsFnpidGIvVbtBxVtf11j1HvF89xRyGtdLT7i0/ULjguUGEKiiq5humqAY/tJENBSyGtOcrdHKksWSsFRuMuvvY3Anf21wwmcfy40rNNyZsafD5fD3grJ7ynjWdGyoENWa6MAtYDOyidx/EiUV/JwKIggpJ6fWd1QnoGBAP/ffiBBgQW+GEZ58XfSNEJVaTjDIjHVyistxi+o449myGx6IzvPr5EqsiYM5qUYJZPdItHcfA3Eu1zW0WMIwByR3W0ajFrC6RjTmrc5u5y6cUq4nP13IJHB6S/upl8boUq98CleaaAYvC5TPkrM41F08CA6JqzaUunlwXjj3iKCW82G3PYTt6Ct4jWay21KKqieMNULRnU13gAOB50tYuUWwBrekkcxy1o1YUD1jb2+3DRZ+he0v8bK3iTsIh9itJrB5xVhe1rY/sEMgS2UfFN21I70nhcpF1A0wwGZcG1glnNWXN63LOusJFBkBfrPYVbErwgEUis9p1Id8QE+MW1fUnxOpW+0LTqWDUom4z5mWbJSqSuA3aR22rRpV2AxY9M2c1GFN2024hFedNcb5a1lacUEyc4xgEZ3WlRosYbuCqWNgNZ53o2Ja+v6i8XnfPgMUsQ1q6u/fEwQEiJ8df+cQ3snu7hQEBMOqs9qnOakX3RryujMRqtoBSnO/UzmoTN6GYH3b42pvEZv9+KrM6cPrBsEXB5y/EcxUOxS5SQOQ4+PQlzHJe7zirNxsY/fuBlltXgpZIC4eGARE5DrJxS2wCEfMBDhYVzjLmrH7tlRpPzE9hFjYABJGzG5Jc14gLDxEBCwag2XDPin6YsQlixvMtufhr0skGqNntOchzDWAkYJGKAXEHgmHznLYR4jhyfr+p+1UlJhl2namua2M+Mhm3ZII9MYcJgNxZXdd8TmCw0eZ5jFvc6Zhlzmq6WB2GQCwTq2MCgrI5Vck8TqyTDZzV0hBXk/U3+AauAkdKGrsEBmQgKBwA8rxmXcPi+i4W+PrHP42f/PgR1nmARdR1Vo+L1QxlpiH+AqOGOUBw8XUxtwWyoZDJumbOap01k+MoO9FNmdWXZV6XYvWjXnWNNHe0mdWiDUtVWWbpOaublufpMSCuVaEs5AtotqtJc5TunFe7TJjVtiIEDwb8W47B6LmH+LmSg4TE7n6iEKsz6L0k+DGVgX2ixAJq30nuCFuaLPrwDRbVuZLFasESHbi3tIVK4ayWGRRNFk9i0qwIbgRggAEp5MfNc8RUsVqIT7IDiwmv5oPreWr2K9tgIorVKi6+cP1RFyQSsZoF3dBdjwDgCbG2jQERSdwGwTzNokw8p2VJb0tuVROAxs83W2VGra6NOKHqNNlQnNXl9MxqsTGsGLfI96wQlmV86bJkDhiqC3wPsTqvHLhB6z5bLvHCwV18bnUV//Rb/9IOBgTAoFidxSXZWR1FPLCus4DerGv2+ZOZ1TlSxSKy2RjWEasFvkj2AqtrOqeVO6t7YnXqMLGW6lCc82DYTtiqyWJ/O4fpjLFFwTAgBmL1YoEdZ3Uzxk6cCwCgGRMDr9IWv1SMdQDGYbYHy7q5Br/8KRcvHt42dlbPFvYup5YH40Y+0fXIg8oG3cqE97cXOkpntYmo2mBAuudqkI+xc74SZ3VSeDRntegIkTmriwJp5erfW42RofP1plOWjgGRul9Ng2EV8/nGyEAZD1VidVnSMm1axwWwew/UNdLSQegV5HurcVZ3BMA4tfU28DsVRWBjQWfsMnFWN/P5TsAi1dgGoNXdK99gITOrVTx0ENEtohNiRKxm+k7r2PM5vv6xl/CTn7rJQupnrX9PGEo3KvrHrPUNAqp8DFHtLmwN46RyTStKrEEcjXmyOFfJIjzLDXI3LmuSuhSrH/WqKqSloxegwtNSBzEgucVaJHQxICpHLTXkgot0UgFYBMtRxod9xGoCs1oZBgmGFCA73lTuNCoDGdguShU7kElikZzVzpCwDOgvoMSC9KIcigNitU91Vg9iQAj3Ft8MUuFwSmr75EALrWmADGMAW31RKc+ZWBsRbloxYZCccBaX+jv7GBZ9jDAgglktCfwhbViIaocW8mtrFFDFy+u2Z6PlnKEe17Lguezf2/Qm8qA2yzOLxJjPKqzzrehx73aJ69E5WUxpnNWKWW5zjTXSw4c2w4zGLXvEWW2wKToYtkrNBRgLWOSfoRW03jUHB/j//Ib/N/7sV/8DFpopfnYjVqvHuzSu6AGLkc1ak7sYkJWBs9rzWEiRIqG+2RTSEatdKINhUZbMBUTkQMvMDOvEMXNWRx4TETr8+rjwEPkjmBhVCdxU13jBRXAjZ/WCO6v5+W5iy0isB1pjbHeMaXebaRbD1ihyHASzmihWLxd146z+F//+AB9+4lfMxeqlzTpixDXggbvkewBQitUmbmUlKtAg2B3ANmBSimqgi9V+aCOTbVoUBZtvhbSNq0FnNWUjRGCGumtFEVxpunHVPa64zgZitXQjxGRzwXXhWXJn9SQYkE73SlJ4CF368yVE0K671og1DyFWS961YqylYEB8SfdK46ymY0Ckc6MG60g7bLN5qcKA6OoF4nkdE6uFuNoSq69HK5xtXDxI51jMd8XqwB4PbUxTMM1IUy8AoBarOTIw9DXGcI4ZGjJjNt0mOtNDrm2UqRwD4huM3ZdlXpdX/lGvPEeqyw3bx1mdazqrPe/C+JyuPcDqpb4oBvhDRs7qAawEmZ83xBKlip/8uIGKRwce3KlzD4hzHbgGALbtg/tOcpu294ld+0NoDRgwq0eCr0gICBE0KnNp1jV98TS0C20iVlsWfA9s8dS9wEQH9M7fkfTTr08LLDQDPgDenj6EASFOQlzPQllb6oBF3bA6UVZLhOIzyDgG47oZCCl+YDFm85TOaoAFTbZFqrKkuz5bNY/qHWf1nVslboTn5DZ19u9XtNMDiDc1u8YaG7iuXaKoLAZe7lQTqEUQgD27hIwKBRgE1g1tihqE2O7rrK5ra/fZ5cxqALsCGceAuCjUY3dSkQMWG8G8M8bEm5otoCnOat9H5GRKsfo09nDoxwRntXzcqkuzgEXf7odBbjJDZ/XMZwvz9qq36bKiuynVDkUzDMhiaTFXsdgMO/VwNVhPI1ZL3K/a83heduCxHAeFWJ2aOKsPLZzlIYpVgs+8FuHFwzsTOKudXXyTMC9QndUAfK9mCKuuAGyAAWk2U6UYEIPW/0COAWnETwNmdVpJxGoiHg3AVvxSOKuTwtPHiziOPGy2Ca7UP01xrqqxQPxcSnkepPPDPKPz0JUdjaYYEP4Z19muWB2XvtHz1QQsdljIcWYjcgwwIJElZVafbxwsvYTmrJblAhjiOhoUZffzMjGLQb3JBhDHA99H4ORIsvFwwR19h8+13nP8Kv7dned7YnXo5khGQxsJ5rYhHQagbbYKE94+zmqd7KgGL9J/jkyZ1ZdlXpdi9aNeec7aB3UmDGLnaYRZ7euIFILPqRogqMKX6zJntWxhbuJwGHJWmzCrB8RPcnu2OK5SrKZjQJSuCQBJZjFxRvPl49oKXIUoEcwS7d8JMNjWI4QgqutPcVzqC4gF6ymc1dRJE0cKSK8rb5+kitUsCFEyfhhO8n0fcheZyeLJ85ioJfnQVmcV5gQ3xlBQWcP/JTqzpMc1QfeIEq3iLbHa3FntyJ3Vjmnre717XEOnk6j5rMa68BsR/O6dGtejFVlM8QJ7EAOi7ay2LLgDY0GZV3As/bb/LWtf/sdFZdM6eIY2RQ2Z1aPOahlvvJ04016t8M83stN2xuhOpZuSuXwo6p8vF6s3G01mebs48zPObOnGxcnGx5G/oWFAFPcWmX/L54fdz2yTmInVzjxkTlWZs5oYADjkpiy6WBnNWiytHWb13VMfN6Jzo3HLjxyl+zUtXQQ+zXSgzHHgjm0SrxjAwc0IZ1mEj/9Cjfc9c48NVcbO6r5YbeSuR0v06VwDk4BF5RrBlFmtCFhsnJQUBjKAaGYhKSQO+8IgfNnzmKFFJlTlOVIKC1uFARHBlVRBUWwOd99fvJOL7KxWzA+NnNUDYrWRs9r3GTaz7f4UXRsGz1fjrG67a+saceaaOatnFmNWdy7Eam1h4aVksbrX0VgU7N6iGkSazvF+NkJuYDyRhg7zYkYZzXkc7+BKR8TqPMdu5zyfa33F1Vfwq6eP7YaUhyHvChsTwLm7eEoMCKV7Q+gFqowrftyscvTet1wvkYrV1FDzy5qsLq/8o15ikquzJhMYkIEQvCy39VrqxWCucL+SXWRcqFU5q8nt9EPtJ1Rn9QhWosGAUB1vivZs8uSGc8hUDvs0s5k7TedCjLmgASDPUQOwfR2H4gW49m0WdFhUElQF6K6cJrxT5aymCJUCrzJx0ChsG55TIS/74URGzmqw20bmdjJyVvOJUC3ZNl+twCa4EwYsmridGmb11BgQoOesNg5CBOCFfQxIk8RtclwhJLSc1aSw3U7NlzbWeQCs1wCAO3eAG9EZ3VkdKlr0ecUJ2MJM4/5qeJdDiBmSqKwObiQLNCPvGfE9+uc68j4AgCxjglt7ofPEE9tftwUy/uvQSpWtqVla67t8RCm4+E3AHmXcsixEfiXlcwLA6YY7qzXOt+ngUdxbLtXpw+eHfWe1yzYDic+tFfJJalesLn1EF+CsrgFYZJsmsDxydpjVd058XA/PjcatYGbvhguKEqYTwt7KoDstzxkijCjaLx5f4jwPceuVAk8fnLEvGgYszg5ctskonoOiYMzqkChSorUhOqGzekisNmJWh470ncCeWSIDGYAbutObA4ShRSZWFwWq2oITaM4NVBgQge6hTjUakap/XJNOLhVnnox1BIad1QaIGfg+M+C0EZ9lyTpZTZzVvo/Q7WxaiOc2MNtg2eHX8zqPXbKzWroZZOiAHsKAGDGrxblKxWrC2kNsLuUjwnJh953Vto33XXsFANuobSoI4Nt7oEVEzhklYHFKsVo4oGUGLFFcN9PKzVFkeQCG75nLmqQuxepHvcTu9tQYEDGY7fvwed6gUEt2+ghmtWxhLgI5iAgMcYxemQYsDjqrDViiKmd1TThXoHFQqZzVaWbpJzILYXloE1/XWTnEVQbooioP5lG50xiHioBA2IOHri1Ucoei0lldE4NGLWs7GZeIqgDoDEUfDCuhWjxRhCQR3Cjh7a/PK8zdVPu4tuco26jz0qYHLPo2c3ioMCBEzh2A7flwa2nj+jXBgIRyZ7UpBsQTbN2pndVHHhM9NhsAwN17Fq6HK7KYwpzVAxiQRN9l3jhnZIJiXtPuLdvmGBD5JptRNoItSbwHfk0wIAB23zVXr/b/nB8TjoPIyRCfK8KBk1rf5SNK4ayOY9AxIADCoJaysAHgNA70MSCBM/juoo5bUudjVWGTe5h5Gd09FCjE6sK7ELGa7CbltTiwd53V5yFzVhuMhY4K2SFQGBFB9BnIcTASKgHYV45QA7h/u8C14Jx90dRZfeD2MSCGYhpDjg0ELFLEtCFnNXXODXVHhEkYJNDClqjmW1Rnta0Qq/Oc5lhWiUllaRaCpxCAy7wyGgtUQdlGjHHVmsZ0bsgF+533LR9bTDoX4LKgzSRtIc1EUDp17EbLWd15164S18hZnXc3g/KctqYXxTfyZRiQoraNnNVSDEhVoSht/fFAZGMUw++oHrPasoDDQ7z3KhOru85qywJQD3/OTc6ZZie20+0EaBfvitjb2MaP6TvlsFhdlsh0O5kuMSCPdF2K1Y96UTAgvPVf6ayua6S5rRewOOL2ativRGeWVKQzcZTuE7Co+wIaCVhs0qMpbOWBgEVyKIngkKkwILnNUng1d0qHwr8A6C+gxDGnDirDsPORnPA7tFssNlh0J022zXE4Ev5t05aqeUxeKudIVfBJPhUDogisK+IctlWT2+kDp0C67l/bxllNWDyxE5s2YDHwa6QyBjIfXxzP4PXawYCcbHwc+DQniigvdJhYKxYOPIk7csxCxVxxf/EVb11MxKw+8rDKQ/bBA7hz32HOR6KYYvuuEjEDAElKcFZfBGLGsti4JdsIgUFLIp+MS+cFJrkAlkIAb1Wd8nuuvdBpC0z37u3+hSBgbcln8l7PJAHbaCWK1RaAKu04qxNL+/NvVxTWLEyq66qta5wIsVrjfB13YCPEMPyrx5QtS2wKHzNP9RLeoxRidVJ6dP1zLFTNYIxZHrtYFUEzxt458VmAq4mzWLERQjKdiBpxVgMg37M4PgYA3Ltb46rPndWGYvX8yOtjQC7QWU12v6quq5hzUzEgArfVec+Y5GMAUG5a5EnJxoKpndXUe0uEb8vE6tqA16zYGE2Tmq1jiHMjpbN6CgzI1AGLvs/MQkkXA+IhpCCGRFkWQr9kXSHiOhQFNoVv9NyGc4eha7oYkI3NnNWE9zfrXOh8Xty1b4wBUTirycxqVcAi1QneYB0H7sm6ZmbEbqDz4SEO/QRf99hL8KLW18VLSYIva1eac4Ojplg9iKSljDGKzI3ucdNK01nNjVKDGJBLsfpNq0ux+lEvEcyizawecFZXFbLKge9qtPeIiYIM1wED14AIllPgD8jt9BcRsCjaqIcwICbOapkI3rQkap4r0OyWSwf1ukaaOyRntfLzEqXr9GgCxRSfc0UXVVkrtVxMIr+ARjZCipoQsMgFKmk6vWHroIotbcR7hBoDEq8rukNROH0kGyzrNQ0DohwLarYAdm1am2MQWkys7ll9WIu67dAxIJZtM4ceF1I+c/cALxzcNXNAd53VNRPXQs+MxeZ1xOo0rowWj6KuPebiXrJoMCBfuBPgmcUDupg05FAEd1ZrYiD2QjWYbLIp0DUkV62KJQoYYUDYIm/ElbPO5U5osVDqfia+j8jNlc5qxnCnjzEzN8Nm1WE2x7aZszqENEwKRYHTLMLRLNMaZ5rNlYlZ+02bfo7tAlWI1b6BWN0WasVxubM6NGVWdx/ZCbo35lcC5qwWnRtnPgtw5QGfpFJlLgh3McVZLf6NCma1+LmkOjrC3M3whTshrjqn7GuGYnV06DOxWiigRcEcmgail69wKBqxRAed1USDCKAMdDYSPwHA86Ts8s2aB8NSnoVGrJb8WwVegzDf8p0SeXc9IzAgVDyacL92DB1pahY+reqQI2Md+bkOBiwaOKubjIjW2M1CbA3EagCBV+8Ky3mOszzE4YL+TghntrTb6DzmzmrCu9ZVBCzGhcGGmKprmmpsE4f1FJkmvFvWczVd654HywLqIWGZC+G+W+/ON46OAAA/9ZE/K88LkXTxtSvLLX2DgJhzDojVNaA3xggckMI4CQAoCuas1tHNfJ9hQC6Z1Y9kjV55y7JCy7J+xrKsX7As6xOWZf13/OvPW5b17yzL+rRlWX/Xsiyffz3gv/80//PnWsf6Qf71X7Us6zdd2L/qP6YiBiwqF6VA8yDrJqUOuV+LgtjyzBnIZQm5o5S6Ez8WsEgJY9gnYNGIWa3CgBDbkPikUcWjS0uXtWbqnC8PAtwLA6LjrLYq5IrrWuUlbOKkcchZfSFitQE7Temk462DJrv70hZaw8WTylkdnxf0xZPvK9PpVyuQMCDKz0s4qGxam2MjVktEcBPHOtC6b4VYff8Ibzu4a+asjtxeEGJSeohM3JRoidX8uHFiGaNFAODa4x7utsTql2/P8cLBPbqY4nlsYqwSqwUSRQfVoFqMoBWoRRy3lCnyBpuiPUctr7pgGyxUvnYx4qxON6W8i+e3/3b2/2/6pt2vBwEiN0N8Kp/ExInFxhhiwOLcS/tidWLTmdVgt2UscZEhz3GaRTicaz5nAyizpkWd8ozZrKsuK1v3bVliXQSYBQat5LYNvpKezlWrEqvFeRuMh+7Rgm0Oi86Ns8gowBWAekNMtKkHhHctF8Br2QTJBAEBAIsFrkVrfOr+FVyt7rKvGYrV3iJg4l+WsfMrywmc1XxjvLvhbpA5ocy1MTGIoIXrUAUsmkzkJMc1Yu03YrVkfUG9txxn6/5sr+moXYeiLAueW/WcqklqGW2Oq9YIDWppSmY1d5eTmdWOA8/hxh5xDZqARQNmNYDQr5izusWaP8tCHMzo7wQ79JnpoocBcchitedLskfynG22hsRrwA1jMtyUCV7EC+wRZ7Xmul6cyNDtUxTMjNi9tFysBgC87W3bX+/jrBZubQKzWsWBBkB3VjsjzOqSdQlo3V7iuPFAN+Ols/pNq31mTimAb6rr+r0AvgLAt1iW9dUA/hSAv1DX9dsBPATw+/j3/z4AD/nX/wL/PliW9S4AvwvAlwH4FgD/T8uyLj/5sSoK9nLTCVAZw4DwwUyX58MERUXoE7Udz7LgOjWbLHR39vjk5sIwIBRmtaXe0SMHqAgRXNGeTW5Dct3BpO+k9PTX+lycKPdxVuuGdyrvLTqfc8j5SN4tHXNWEyc3jmuhlLkpuahKfU823LRu+6iBmAawwLpMctzNumZ8Zaqz2smlzmpygviAs5pthhHF6gBsci/5vAAY7cKHQc1Yf0KsfmAuVvszh4nrHbE6NGASAsCNoxy3NweNky6JzdpyRdkHC+ZS5GJ1nDoM02DqrFYxq1POrNbGgEwcsMhPVTpu1TXyyqZxWpvg5f7n3WROEDFeyrwBXsm6ZO637pjwjd8I/Lf/LfBt37b79SBgbMaV6rMyQHb4PmZOhs16d4xpBHDiyjSMLLmzOstwQhGrB0KiTTcaPbfe7YrhLd9GzmoAsPj5dF21VP3T8+DJOOsTYECwWLD/c7H6/ibE1WBl7KyWuV+NHNB8EZ3Hks/G1FltWbh2mONXTx7D1foeu5/EdaGWZaG2+eeyWm1d5QZ0FRWqgaE16B0GAKbPnFDMN4q82uXI6pZiI8TcWa1eI9S1pX9vcVE564p0RWHGrAbgOXVvLpskYPMNasCiwrVvgohrxOrummaC8G3X4XMDcQ1EwKKps9rvO6ur2tYP2GyXIsz4PPHMMCDtfz/QbIqSh+5mDdr5uhgLqMxqxbjVYEt0jXj8WbTqSi0uczNi77FtD8DPP9/7ujXkrC5LJoB7mni/AQ40ANqGmBDAh8TqPKc7qyU6zKVY/ebX6Chcs1rx33r8vxrANwH4+/zr/xuA38Z//Z/y34P/+Ycty7L413+4ruu0ruvPAvg0gF83xT/iP+riD7Pl6+08MWaY4s+Fs1pz12lQUDRACjiOYmHetONpH3LQlURu7dkjYJEkIoxgQMgTZ44BUU1E09JFEBGRJSpkBxiz2LEqTWb10EaIgUNRlhwNMNGn5Nz2ycVqGy5hctMgSySLp5L6HKC1uz+lKwlskp9JMBgNBoTIrA6dAkkswYBsLMwpbgyV6CM2gmzaJH8IA7Lzcwn12NUMb2wOm4DF2+dzPBadGfFUD48dnOXhVkwTrZOGjpznHk/xudXV5rirDXeomk7sZjPmdDjZ4PQUOPDZtTARqy1A7azOuBiu46z27ZGARSIGRMXCFl0Wdq3/nhHzAsn7IM9qMr9fynrsVLwqEch4h5YFPPNM/+cGwWDAItu4ICI7fJ9hQDpi9SZ16GgRcGe1AgNSVA68kJiNoELBmGw0dsNxBQbExFkNADa/J8U14JviZLHaZuzNrNw1M+RZTXeWi2qL1XmOqgLLGTBJxlU5qwVSgRqCp8geKRODfAhe166U+NzqKq6Ga+C552jdCt0SYvXZ2STM6gZl1hWrDQVFAOqOK6r7VSFW5znRzNI6rmtVKNLd8zVyVnPsWpL1r1+VFezeItyzvithjJclssqlc4XB2OVFJyQ6STmewCRgUYJteSQDFgG4bkew58+XqVgdhth1Vpvy8Pnftax6951Y11ilHh0DErr99Qx/f5HHmKa7We6sJq+9xEaIYozRFqttG7BtZqxWictFgUzmKm6fQ3sOLb6xrlFXivPJMqYZhYSclCFmtRgfCGiRfECDaJBDBJNnJunqzQr7Uqx+k2uvO8+yLMeyrI8BuAPgnwP4DICTuq7Fm+hVAE/yXz8J4BUA4H9+CuBq++uSv9P+Wf+FZVk/a1nWz969e1f7H/QfXZm0SQxhQAgtEq5dKfEPzeKJyBWWOkpNdqEHXEkmAYvS3VdeRUlszW1Y2HJnNdmN4Hms3Vd2H/BFpLbuIybMAwYs1vKt0S40wqxmzmrai0Ip+oiJs0PgFQ/dWwIxQ7hnHQcoZYxSk00bqJ0jRpNxqDEgm1VFF5KEs1qGAdnYWLgGzGqFg4q6KA0iG2npSe+tnZ9LqCdvFHhtfQRsNijyGnZdstvUwPV35ZqN+8mi76yeQqw+v9a4KV+/H+DJ+YmxsxqLBW5GZ3jjtoXPfAZ42wEP4aMqX0PsVwBxRmBW+7Y6YNGAealkVjdhq4R7Vjg0p3SO7BmwGG9qvY2mIEDo5kjWkglHXSPOHda9QUQNzdxMoIqb2mSOGbM6spgzTeKstqx6uk02mIe1NeJfywE9iVjdCYZthBQKq5mXJxG+GLPcsHvD95kLOC9QPzxhLtLZjJRfsD1ZPnZIAhYB0N2vihyHKfIBrj2/BAAWAPolX0I+zk45/L7kzuq48BHNDO4B32JO3R7KjBjsDgCuC9uqUWade76uUdQGIXhKsRpwLTNndejmiDe798F6Y5kzq7P+Z6NEN+1zqm7NjAzt99cEbGXXtXZRZjDHgDRmjl9LZ7WJu9zFrmAv5nEGnQuA3FnNfuAEm3ft8bAocJ6FWEYF6dr2cHb8XDeFb+Ssdu1Kim0xwYAozQwmIvhI9ooQanvTjW/+ZuDpp4Hv/u7dr3MB3LPL3kZY+5hpqRlYCGzzMRTzwyLO2RyZErBY2Gp3OR93LB2Wk9BLusiSukZeWiyw0mRucFlGtddIUdd1Wdf1VwB4CswN/aUXdUJ1Xf+1uq4/UNf1B65fv35RP+atU5Q2P97um0kmIOKYUqbRUI0gMEyEL8bqVe0+El8UfPJay9R16guocRVL/qxmO/6uRRM/mbNa8meGIZPKFr8sY24X3QWEQJYMrGmTjeYCymbc4LzjnhJV5DVZ9Bna2Sa1YQH7OasJn1ezaSOZ2Jgwq/1ghPdIbSUPHekCMt7UdKePYFZL7tnVxp4WAyLCbhwiBiSymbO6ex9M0KL+5FNgYvX5OV55KcHTIljQAC1ydM3FaRb1ndUGjjcAeO6pAp87v9oIX688mLHzNXUhzOd4YnaKW3ddJlYv77CvGzCrAQyI1a42vqZZjMi4wgYt6sqOEB7MQxKreTCNbPOS7AJvOq6Gv61pVd/32vo+IidHvJK/v+PCR+QTupiAbcBiR6yOU8eMWT23mbNawismtdMPhERPkTeQVe5WrC5LbAoP89BMrK67GBAxxpgIlRKxOkkto1A1UZFfISk9vP5LD3BzdmbMaxbdG1XWb/sGYOaslmzgNnMtA0Hp6q97O64Ea+ainUistoRYfX7ewk0ZMKsvKGDRG+DUGovVnXdCmlnanTs75XmInLzXdbaJDfBFnofQyZHm/evXoJsozmqv7odvlyVjK0+Bg2m9xNLcNsrIUOVOGHWvcPEvLzuCGjWAvVW+V+129E2EAekGBKfrggl0hhuCvcDZLMMqD7CY087XC52eu15siM3m9PBOJQaktuH6xDWSilktnL+US+v7gx2CyHOm73SF5cND4I/8EeCDH5QeM3RyJOfqY5KugzBOKpjVpDHGsnhnmCQvqHW+4ufvXcJZ3Z0fC3OjQ+hmvKzJSuvOq+v6BMBPAPgaAEeWZYk74SkAr/FfvwbgaQDgf34I4H7765K/c1mqIjJ9AqeQTkAAMFep7i7ZHu5X6qTRdWu1o5Qo/MFx4FhV3zXBj1vVFmv51DwmcxVLzqdpHSQIX6oWJH6uRU1MjxaOHBnbiS+gbV9f+HOsahADQllAKRmtYF9yiKKP7/UZdwAuTqw2CVj0FMKXeA7Izmo5BsSYWR05bMLQebtvNtz1ZtCWKhOr14lthgFRdW5QndVBp21SlIkwwevJpx28tjkCzs7wiz+X491XXjMWUnphNxM5q599qmRiNT/uK/fneHr+cBJn9eOzU7x6L8Tf+Ts1PnD8GfZ16mp3yFld10hyW5uD3Cx0JcdsOkIo45ai7b2ZOFPGLeFykfzzTTAgrq14d7WqEav3vbZhyBZPMmd1UTABlMpalzmr6xqb3GVho8T7VsWsTlc5W/RP1RECs042oOVU3RGrDQKqRHXF6jxnCCviYh9gTsILcVYDePJ4jc+eX8OP/4sK3/j4p8x41QDfbO13BlVpzgQGimtfmA4kzmo21zITlK49GeDqYx7wW38r8KXT+JCYuGwje8Cc1TWgP9dslaqLyzRgUY1qIAa78+MC6J1rktlGuAohLHed1Y1YbeSs7v9REtcM3USYxzXz7vb7S4S6m2xaSMTqi3JW56VNx7ZY1naTreMuN2EgA8A8YGN1Lyjb0HQQiEwTjp47vV+wbgvD3QXbqlGlu2K1SbeNG3l9ZzV/f5FPlZvxZGI1oOnQbZXj2WzOrTBLaeWGtc4VAGoV51Uwq3XCfHnXhiojRFwYLRwtsOVLD4nVhLWi76O/GdYu/s7RNnnKhPVGKzCcG12WUY3ezZZlXbcs64j/OgLwzQA+CSZai1Sc7wTwj/mv/wn/Pfif/3hd1zX/+u+yLCuwLOt5AC8C+JmJ/h3/8RalFUe1Q9Q6JslZbatFyqblmfBidxz5zrZAKlBdxa5docwlA4xw7xJcZEpXsWgdJLZnKxf8wlVLvAYMA6IQqwH9xRMP1CoHxOo0rrQn5UonIcza6ZmDTO2s9ikvoH0CFonM6lLJbjfgpimY1UauJDCxOq8dqVhtxFBUOatj1wwD0l2V8utKXZQ6occmoioMiImz+oUAr66O8Tf/1Qv4uf9Q431XXwHmc/LxAPTDbiZgiQLA4sjdWTy9ci/C04uHZoscAPA8PL5c4Qc/+hG868UCv+mJX2TX1DSgSoHviQsPoaf3PAw5q002cH1fHd5ZVHwRrVsDzuo8J4o+ouNqJGCR5KyWtLyLkzW6b4WzOm6N0VmGB+kcx7OU7J6JFg7iwu+NM6cPKxz5sf64NYoBMQzHLbvOanOx2hLM6hZeBICR81fprJ5ArP7Ql9zGv7r1In7s30b48JO/Momz2rfLHqOTuigHsBUUlWK1mbP62jXg6hMh8Ft+y2TOsdkM2BQ+fvcffyd++dN8k9Tgs2ryMdrPQlUhF2OhibNaJlYbYNekm0xVhbRwmIuQ2h3leYjcrCHsiNoktnknm4RZ3SBmKBgQjzPxe85qM1xFE2gsE6uNnNX9eXdRmofY9sRq4ag1cFbPwgrrItjpkEsMUUsAEM4dttnKd3FP7uY49GKzMVE4djet8ZCftxXQcFvezOuvZ/h6lrwh1u7ubTvhTcPSVd1RZcmwGh6tQy5wcqQrxaRLrG11Li/fCFOK1VSMldCiVGI18f2lDK4URVmDNUSCztdNDCKXNVnt8wQ+DuAnLMv6OIB/D+Cf13X9IwD+bwD+G8uyPg3GpP4b/Pv/BoCr/Ov/DYAfAIC6rj8B4P8L4JcB/FMA/9e6rg0BeV8EdVHO6krfWe3aJXIFJ4i1EdNbnssBRykVA+JaFYpsQKwmsaUV7vJGRKA5dYcCFsmTG/FSk90HVB6ZuK5Dzuq41ndW+4oNC5g7FKXtQjzd+EIwIMQ2P8dVXANTZ7WKyVeAPbNUR0rkSp3VcQw6+1UsniQL83XiYO4RHESKRHIjHjygnoiKXX0TZ/XbI/yz196F3/ePfyt+5J8H+MprX5jI9VdsFw6moTSigoCJoGt2fV95MMfT8wfmwg+AJ66m8O0CP/T7b7EvhCFdUPE81m2TyKzFOUNLaJ4yY1YrOkIMNnCV41YjpFCd1QVyyfy+yGvawnxfDIhw/2kwqyM3Q7yWvL8FA9fUWZ20/q15jvvJAlcPRlT3gfIil22MdsbD0wclc6gRNoYBTL4RArScqi2xel0E5s5q22LTw65YbSJUShamccr58oYYkA+9+wF+5PPvwc9+aon3XZ1gjFUgO+JVqc3D3zmmglmdGAiKoh5/HHjiCfJfl9ZsbmGdB/jYywf4+KdCY/e3FAPSON6IBxXs066QYjLnBuScXiEoegbPl+sidArEye55GTmrHYfdr4XTQ/AlcW2OAekyqwvPKL/T8yXO6twxC1gMnP6Gc10zHro1gVjduWeL2tZzvXZqHlXMHNAyHSSGjnUACJberrNavLdMPjDfZ+/x9qaz+OyI2RBe5LLPq4MBsQD6OGhZ8JyqnxNC1QpEDYS4ZpVLc1aLNdJaLSxLMSBDNSZWUzedHUedmwWhFeh3bzQmtF8LDIh4z1ADdy9rkhr9JOu6/jiA90m+/jIYv7r79QTA/0FxrP8BwP+gf5pfvFVlhEGYT5izQvFCpMDyLQuug+1LvTMIFCU96MRxeJiUzPlo4Cp2VGI1dbe04TVbTLBviyYmSIEGLyL5MzG5McCAnKdR/3zznPZyH3HYA3y3lNBOr3RWC2Y1RfRRvdRMgjNEG1ZRoncVBAaE0PbMNm3kTt1JAhbzeOfreVoZJRyHc4cxWrvO6tjSxik0JUSqpP+MrRIXCy/Rd+yqWMXc5bKYWKxu7gsDIeXxt8/x0ukSH7zxMl569Rk887UPgOjp8b84VL6Pq+EKD849PAEARYE78RLXD2RQe42KIjwxP8Hrtyw8B+DW2QyPTcF/BfAbv+IO3h/9RXh3fgf7gmFLqsddj70zE25dzVO2fRfVAL6IuoEbBJCPW8070YRZ3R+7GyQQEQOSqzbGeW1iSw/bEAQInaLHZxUnS/msmmrE6tb4lOcMDRbQBTXLZ7zinlh9UuNgYmd1M98ycFaftZnVImDRUKx2XTDsx5RitVsjT2XOajqnVtS73lHg5+49g7/wn/wzOHY9kVjdR3bE60qbh9+U67IW7aT/R3EMJtQZiNXPPAP88A+T/7q0Zgsbd5MlPntvgZ/4uUM8t3zd6B7wQxt5ZQNF612V50YByUpntWFGCPuMy57zk4nVBv4s7qyOd6dx2KQO5pSOMwCwLIYzEwzkljB5IRiQypRZbSHPO2J1Zk+PAanr7XqOuDnejFs9DIgNN6CPW7Owwvq8K1ZP4KxeeEhKAJs1AOD0pGJitck8zvMQOonEWe2SxWoVBqQGjN4HrltvUZTdjWKqs3pQrHbgU/YBhBlR5awuCmSVDz/UxIA4hRy7BvB7zSflBQ11+VOd1Y2ZYyBkEgABA1L2u3pNkKGXNVnRt/cu69ek8rTSDzngA4TSWc2ZRrrJrqPuVyKqQemsFiIdkVnt2qUcAyKc4brnallwHRak2AsCFI43qlgtSyLmxyW7PGwbvluxdrzO+dZpps90EueqcpfzouyWDjKrDRbmfiBpHwWMmdWuNYyYaQKGdA476Kw2CFiM5EGIjWOdeOBg7rJFjspZTVk82TYOwgxnWdCbiKwSjgHRdXqI0KtU4qyuDdiUCrGaNGZ3KpzZuBat8P/6+r+N7/qmL7D1kikGxHFwNdzg/iZk95jgJxq4fAAAyyVuRme4fZv9tiy5SDuBWO09cZ0J35/4BPvC0ZHBwTiTLpZMyLmYoH3KQ6iG0iY7s3wfSEtvWma1bTOXi+R90CCBCGK1lrN63zEhCBA5GWKZWC2c1dSOAN/H3Nt1Vtepmdtr5+92xq3z0woHXjJpwGJe0F37AAuHTSQYENMuizCometvSrHa7/OKG2e1IQbEWi7wyW//v+N33fhx9oUJMCAyjFW8qekbuCJ7ROKsPl/ZOPAT4+tgmoXbrdnSwX+4+wxevPoAP/GxIzy/vG90bb3A7s9hGsOBoVjdDVg06egEtqFyPWe1a5YPwZ3VSgwIdR7XFqvbx92AfM82THwZBsRE+/QtFHWrI6SqkJYOQrcgi8rSgMWiMOOWYwQDYsDwn8/qXWY1z6AyEcABIFj6OxgQtslKMIfsHDToOauLTQbHqsjvWif0WBB9ZzMIgNE46Lry7g0A5hgQScAiw4AQjilc0BvFWCKY1TooSnFMlVhNdVaLObdCrI7XFek9Ln0ftIuCAfF9Jqx3M75M3zOXNUlditWPeKVxxXa3dR463tqVKZAdKApSsuuQ+9WEoej4jtJZTU7MFS5oBQcaADEMEvK2byEokgMW1RgQk0COwK/ZRLQrqMUFfLsktSY7doWimhYD4vpyVAVgthHih7Y8iEFwvSgvIIFtGULMUO4t35Yzq7kbw3GJDg8Vs1qEqhEneFbIReOuszq1ETlEDAiAg1mJsyxCd8W/Tl22KCM4q0NZQJVwwVPbfRViUpyYMRRF/dPv+Dt479VX8ed+y79kXzB1/VkWrswSPEjmrFVwUxg565s6OMDN6By379o4uVdg6Sbs/jcR/kTduMH+/7GPsf+b9KuLgMFEMiHPMlSUwFkxxnUXI3XNN9lMxi05a58F+Wofkh1XETjbYEB07wXbZmNhZfU3cFulzVUNAuYmjSV/ludMWKWKHo7DnNW515zz6qTAwiO6E0XJ2v8BnK+ApZeQ3rU1MLCBS2dWLxbAeRbuCB6loeMPAK4f5biXLCAUtSYEysRVKzace5xac2c1Dg9xFMTbe3cKZ7VEWI7XlXmOg6Qj4nTlMPejyX17ATU/dPEzd5/DR972Cbz0+gLPL++xm45Y0jkMF/5MMCAXwqyWdXIVBZLCMMzY89gGXrr7zG9Sh35vAQhCSxoUvd5YzLFNwYAI52NHqE0KD2FIdwA364Q2r1lkTVAd0KGjFpUN9oBUAYtlbcPx6NLLLKoZs7rlrAYAi/wgsFoeu1jlQUushnnAYhQhcnLEq+01WJ/ydy11fij+Xut90HQzGuKmemHZU2FAZBjK0qURVnyfvWM2amFZm999UcxqEbB4ARgQ2TxWVJnksK1a73yFua/oo2CM3jOXNUlditWPeKVJrd/mZ1ncmaVISyW+3JowKckAwficNOHD9fhuubLl2QADohCAARicq5qvTWdWD2NAqIJa4FXS+yBelbQJrutyZrV66EgSaLflNa79iRfmQxiQrHTpPHR7Yh46WHJ0j5kG8PBO+j2gYlZnuWUkVjeTxo6ovIkNAn8AHC5KnHbF6rpGVYG1ahOc1aErcSIUhVm774BYrYU8UNT7v5S1YzaWZVMhBcDVeYL76QJIU9y6BTw+OzU+TywWzFn9wMO/+YkMX3PzZeaimyKs6+ZN9n/xzjERqwUGQxb2kufMDTcVqqGumTPLpi2ig2CIWU1vffd8OV4kF8gS3XHLsraOJBnDn1ecao4Jvs8WuRL0gXAlBVTRw7Iwi3bdafdul7genpuJfpJFNACcn4EmhLsubKvud4TAnFm9PLCwKoJGVJ4iFBYAblwtcSdeNsfNUsL8tVNel68NIM4ctiFqOnY93UErTcWs7jirN+uazqwWbd8SWtPZysaB9+iJ1bOjAD9560V8y42fR+AWeG5536gziGFA+q7H1MStLJzVRWccMTHJAIDvw7Gr3eeWIzBIjFpRYh6TdpjVQqymOqtDS9oht16DZYRMhQERaxmDDbFmLBDnKhAYBpsAzbpWxpY2cVaLkMmOWF3XlpGwPJ8D67azWpy34dh99TEP99P5lll9Zk0iVs+9FOvV9jqenfBOIwOx2rLqHR2iQRoaOaslOFID8xGAQQxIWrm0SyDeBypmNaWbib+3htza4vu0ynGGMSAEYxsg1vUKfQtAllQkhFHD2pduil46q9/MuhSrH/FK4woBQfhgzEsF04fYmskERYmYBrPFE2vzlLuVawC2R3gJj6Aa6toycFYrUA01HSshdXjw41a1RbsGAIJAMvgC2Kwq2uKJo1DKWu2ka8RqirN6KGCRyqwewoCYhHdO7doXGyGSIMDShFkdudJd6DTjoip1kqsQZ1iLNj306WBe4iwLd8XqogDAd8oJAYuhI2F+ilZP6jpfIVYnqTVJizoOD9n/33iD/X8Ksfogx/2ELUhee7XGU/OHZosRAPA8PHYY4431Aj/14zm+4fFPTYIAAbB1Vot6/HH6sUSASiIZt8SzQQ3BUwUhEkVlP+BuN8l7hpyNAMAXYXXdLovCJrvsPbdWbjSK0nb/hSEiN0ccSwRpfu4WqYeWVVesvnunxvXo/GIwIOfcWU1poZUFwMEMMQMAy0N7x1ldZQUTAAwFj+vXatxNlo3gEW9qI54sAHiB0xOrk9whh7/t1JNP7l5DE8wQwFqJHf6Ztboa4xhmzGqnL1ICwNnGZYKS6XWYuGZLB6f5HB+6+St47vDE3FkdOv15nKlQKTptpBgQejcjfB+uVe128EzmrM77zurMNXNWBxw51V0jJDaZhc0wIG5PAAZgNMZ4XWc1vwcCg+BKN3D67y9TIwPU3G4ARtdgPu9gQAo+dhuOAQfXA2YSEc7qc9ucWR0EOA5iPDx3m/Xi3Ts1roUr+rvW83qYnc2qMtqwARSd46Z4kTFnNTFgcQwDAkDvnMV7S4bIg0GHFOdA99AavJKEJlZ7gS1f1/PK0pqhGDWfM9YR0u/gSQrPbKPxsozrUqx+xKtxVmsOEvs4q3WP6fr2gPuV6MyC2NnvT5aMeFEXhWoQgqLUBU5nVksdHoAxM8v3Lel90LzcKWK12IFWOOmSBNoLScaikzOry9IAA6LgNRuL1XaJIpX8+w2c1V4omTQD24kzkXPXtDl2ni/TYBrG+Cp7O/ymbamHy6rvrBZKM6VvjjM/e5M7nshtIlbbVo0y270PGAZkghb142P2f/Fvn0CsvnJU4UE6B9ZrvPZqjSfnJ5Mc9+a1Erc3B/g3P23j19/8zCTHZAe+uft7U7HaKZCncrHasurpuMImWCi0Ntkk70STDRbPlzu285y+2TyEBxOl7f4TCzIJ+qC5JgZuUiZWb+ccd98ocT1cGQd42laFMumI1SsLS5/GrA6cAmncuYe4a9+1K3L3wvLQxnm+3RC8/8DC1WBtLlZft5izmgse8aY22xAF4AlXbdtZndrGx2UH93Y/l3e+0+x4to3AKZEWu1z4OKbzf1mwXl+kBIDTtcu4so+Ys3q5BH7fB34Brl3hh977j5izegoMSEf4iwsPYWDmrJYxSo0wIILjn1Xbe0Dwmk32hR2Hj4m7eMdGrJ7aWR3bmHt0DIiS/2u0ccW7D9sYEENnteVJcEsCEUcN7wR7JGXXwHRTcDa3sc5bGJAJrisA2IsZE4H52P35uzMc+Ruzd6Jl4eo8YXNOPo+9c9fCDZONYYlJJk4sY7G64aF3hMq6tujHVTGrRcCiTghic6KefF4giqLvCFyHzMgBIItLhg0lzGGkHGheScy1As3j2r4akQYIk6e+biY1eRYF4tLDfHYpVr+ZdSlWP+KVpmDtDLoPnYJDBoAsVjueAgPS8DnpLc9SYd1kJ9514Vj1xbhflc5qGy7FWS3YeTKx2rANKQhqaXiKCUOxcSIoeFENT3JKZjWVh+7ZyvBOMrNaoFAmvrcaTq2CWe0SnT5u6PavbVUhKXgwDbXFzfex9BKcn+9+Oc64MEVlVh9aOMs7zmrxa8rE2fel7bNioUMOFVMEX00V/oW3vW339xMIwNevVribLIDVCq++bjNn9QQu6Js3anxudRXppmQM2Kmc1WEIPP88+/WVK1u3OaUEBkQ2IRcLnwnF6rxyaFgoDDCrTR3bsgU0zLpXGOtRvtEoapNpbmCJYCaJQDeFk2wW1WzB33VWm9y3vs8C0DqbYquNhSWF0SkWpV3WvgiAc+hi9eLI3RGrb9+1cTM6M8eAPGaz8YULHkkCOv6CV89ZXdfMWT2FWA1sx5TlchLOfuBVvbm3Ueiw6yJyMoWz2sHBI+is/i//S+CP/rZfBAD8rrf/LJu/mWBAIge5REhiQiXx/W1Z8JySdXW2uwSFOYCKq+DdhzsGgQlwFbAsREGFuPS3Y21VYZN7mHn0ZyGYOex+7Yzf69jGnHjPss3WPgcagNEz64qxoOUqTksXYWAgJMk6BCc4bhMMK3NWGzyv8zmYs7rDrDYeC8W7b7PB//q/ss//a26+bNx5d+WgYGI177a5e89iyC1DsbpOs2bThoWBGjqrJRiQMivh2JW5WC0xIKWlZ4YBGWBW7/zsfcr3Wc7ZgFhN6fCH6zLHttJZDaYVEI4LYNhZTcGACGxo5z2zKXzMQoOx+7KM61KsfsTLxFmtbJMgisBN262MqSsW5hSxWuzsq5zVRLHat4t+ix+AqqjIu9uuCzmuoiy314BwUGkqOWAc8BD4kLKdNuua3Jbq+I6SXQ6wNaVua0+DmFExq6ktz67LdsYl91Zm6qwe4qETxWpph0ETiEq7ByzPZeEj7eNOEEwD38eBH/fE6k3mGAkUjbO6tXjIzhLm/KQ4q1UBi0WBhBpyAmwnjZ3jJimmcVa/+OLu7w8OzI4HRtW4Ey+Zs/q2O5mz+rHHLfzYa1+KDz79OvvCVGI1AHzf9wHf+73sPxMOtmj7ljirq6xgzwiVWa3IMKBy7hqmpcqxTUUCifbsHgbEImNAlJkTrdqkmu6/IGDCr0ysnsBZvZxXbEOsLVaHK2OxOnIzxOvd++t8ZdMwIIrNMFMUDAAsjxyc58FWrL7n4ObszFj0vP6Eh7ttZ7XAX5g43gTGqiVWx4WHyMvpG63t+r2/l22I/YE/YH4siFBrrydWRw7xncg3W6XO6o3HWvXJL7GLqfkc8K51NhZNnNUzrxeyabzZbFnwHHkInlHwMjgaqbY7uArXmLgVBRWS9lopz3GWh1hGBfndGIQWksKTO6uJAYsXhgEJJAGLppsA4t8ncVOGvjqHYfRcfUkI3AQu6NnC3mFWV7l5uCA78Ixxi89z/IN/APyZb/z/wXfK6cXqBw6uRwYYENvG0k+xyvzmem42MMeA+P0Q16YzyBADUhdyZzU1YDF0ciSxYtyjoEuGEHlgDGi6s3oAA5JaJAyI9JltVZqC6WYkDEhnfswDvWfRpbP6zaxLsfoRr+ahI7QzKDEgVA7TAH/JZPEURLYclm/yYucCsIz32PC1CZM75qxWhOBVxNZB31czq00xIIECA7KhO32aTYtBZ7XeC8j2HOaAHgpYJG5aAFA6q0lcQsGsnjhgsUGWSFv/DRZPsnT6KSb5vo+ll+J8tXte68xjjhwTZ3UWoQ2ZXp/k7JiUibPnMeGry6wWAU1U94zrInDyXvBVnNjThH9F0fYaXrkCPPOM2fEA3Hzcxu34AFiv8enXIrxwcG8SYXlxPYJt1fiGm7/KvjClWO26wDveAVy7ZnYcjgGRhb0kq4KNWVMxq8uSByHSW9TFcXaqSSYnOqtl7dloYUBMNnBVYnVd63NVgwCRkyHO+udT5+butMODegc1dPc+d3sZO6v7i8jzjUNmVkuD9Qzd9QAQHvhISm9XrI7OzZ3VT3q4Ey/x+TfYKrzBX5iI1WHHWT2FS7VdL7wA/MAP9MMWiRX4VQ+rsEksdh0o70QRNioRq89izyys7CJLYKwAdu8bnGNvwwLY3gcm7len6ovV3BzghQYOYLeWOIDNuaehXyEuWs7qosDDdIbjhXwuvk81zurOvHOdOCxgkfC5+YHEVTyBWB3MbDZudTcBpnBWy8wcBp+Xylld15YZs/rA2WFWNyF1Ezirr4Yr3Lnv4LXXajwb3m6+blJXjiqWkyIwIPcd3IjOjMaDK1HMBHD+mTUBzgbvGd/vIyDY+8ugM8h14VgVyrQ/P0xLF35AWNONYUB4iKfWOfO5cW9jnFcWl4wBTXFWCwxI3T82WawW3z8QsOgTAjeb4MZOl8Wm8CcjG14WrS7F6ke8yGJ1ZMuFL4AuAqt2sxpeM53PKXVWm7Q3CT6pxK1ssjBXspUbcYIwufE8uAMBiyaTG9WmhQkGRCp+tipJLXbPahxb6SQ0RMwMiUlmzOpq8s2FZhNAxqw2SVF3Od+rs1uclNxZTa0gYBiQdevfWpZY5z7mPt315i0C9oy1FqZ3bxVMTDJwVqswIGTjiHBWd8XqzGHCxBQt6t/1XcDb3w78oT9k5irmdfUxD/eTBbBe4/N3IzyzeDCNsLxc4rHoDF+/+Hn2+0dxZicwIJINzHhV0tpIVeOL2Lyk3gJDIjh1UxQimKazgK5rhgGxaBuCQ10xAFireuEj8jSQQ0GAyM2R5P3vz+OCvb8NnNWLYw+rPATWawDAZ14N8bzpxo0QFTddsdrAWS3rCOGblx51IwSAFQbMjSfE6vsuHotOzZ3VTwX493efw2/4W98NQPD7J3ZWc1ZxZPLuusAKJHkxcWLTRQ/H4c9Cv6PvLPaZs/pRF6sNXNUA4M89tp7piAimQqXnSZzVPHiZmhECAK7DQ2d3HMAuwsjsHR6FNRNrW85qUxa2Gzgo2xxoXuvEYc5qiljto4e0m2KT8fiKjZN2190U4Wee1+885BshEZWHjpYLvHXcupiAWb2wsS62zOokrqcJm3UcXIkS/ItXvxTv/4qycUIbO6uP611n9YnHuphMxOoZ52Dz+2ATW8YdPGGI3a4FTNAZxIXl3pyzKFDWxDFG0dHZPjYAvXvM8xBchLPasuC7FROAJRlXCaELG8AoBoQRCfSP2+CLOhtMl87qN78uxepHvJqHTpcv7audquRJg2o3iwu1HtVZrWCmGfG9RPuJxEXXtDxTmNUu1Mxqk4BFp0ZRWVIHMAA6s1qwy7vO6tgyCvwBoBarKcF9Kge0aZjUiFhNmi/tgwExcYGrnNXUxZPsuRVCraEjZeklON+0/q15jlUeYDEzc2wD2Fk83Xq9xmOzM9rE2WFs7iR3emzKpDC4BqJNvyNWGwdXtuv97we+//sZv2OCspdzVLWF9CSGbxWwrXoaYfngAP/8N/9FPGZN48a5kPI8hgGRDFvxumLolkmd1Qbu16HgxpqOAZG5h5qNO4eWCzAasEhpo/R9uHaFouyP+fG6Ml6Y2gdcPOMMo8/dDvHc4r7ZfRsEjI2/3n2HnccuFkRmtW+XUme1KQYEvs82MLsYEEPR8+qTIT51egNvrA9QlxVi4Sg2cbzN3F230xTvrgus5hlrB4AJ5x9lvmVZCEMwVnFn8DpNAhaw+CiK1VeubH9twKsGAHfm74q/AN+08I20NN+t+7hELiTZvsEGi+Df7jiAze/ZMGAInB6v2CRg0/eZgNp1VqcuC1gk3Fte6LDr2prP51nNBC8Dofb4ioWH6WzasUDReRgbHtcP+yiULAPJ8dmu+aHLnNV87Gbc32nmm1eXGf7J59+Lr//KDTtv2zY+7pUrwIN0thWrTz268UQcc57uOKs3sXnAYhhxHI7MWW3ArPbtsu+CNukaFx1c3U5RXnWW62d6eB58R66XACyw0Cdkp/HT7QvAvJLUJgUsjmFAmudMFwMSqp3V0czcLHRZ9LoUqx/xogYsDgmKeVIysZaKAZlSqMUws5qcxCtaviUuujyrjfic0oW5WEDSN2D7fDN+XMuqjTAgPQYTgI0I/KEscvYVq3VeQGPizNQOxYrt9lIxIJ5KrBbPBkVYV11XIXxRxWpXwqwWriQDJh98H0u/I1ZnGdsEiAxcxWIS25qN3bpV4/HZKW2Ca1kI/bLnmhALSGNm9UU6q6eu+Ry2VeNXP+PixSv32NemEJaffpohRUQ9omI1c1b3N1KSTUVzPorv787yDdFYQ/gik3ettD27KIzQIspuI1F5jrj0tMVqAKgr7G4wgYvVhqF9WC6ZWLtaIc8Bu67g2LXZfTubIXJybM77YjXdWa3AgBjcAwC2m35dDIjhxpXj2bgWrfHM4gHO7iS4fRqylm+TgMXQYSF44n3AhSQT1+NFlizUOk648494HaKQi5Ttcaausc495n41eRYuqtoBwa+9ZnQoK+CbKz1mtRkH2nMlGBC+7mi6/QjVoJG6YrUps7rjrK4zItKxXYp55zp1yTg3GW5qClzFlevOjqO2CUI0ua6yd7ipkQFAENq9cSBNzK9BdBwysboVYjtV2OyV4xo/9vqX4oNPvMJ/WGTc0Xd81WafGR+/754GZsxqCLF6u2nBQs3NBPsowm7XAlrjtpGzOu/rECZInCZ4Wf7+K9KSdcnpvBN8f5RZrdstvT10Lce8gn1uFxGwSM56CyREgjxHVdtwiJlRlzVNXYrVj3iluU166IYe5iytzI4pw4AYuMiaNk+Js5rcMjUA9m+c1RRmtQhhkAn2JtdAFsbBjwuAjgGJbKWz+sIwIJmt35Y2wEM3QcyMYkAMmNW5RKyuiooJw1M6q3lbKvllqXJWGzL5GmZ17Gx5ZHmuz0vrVhjCsSoUm5az+g2bidXEVUno1z3XROPKobbmKpiycTYRs/oiaj7HlWCNf/PJY7zr+A32tSmE5eee273nH1EMiG8XyLriHzgGxICd14gGogSqgfoYqMZDwaymjFvgGBCJWF1UNh3L6FnM9agSq7mgoMVntKztxlRnI8A49AgAlksAQH2+wqc/Dbz96gP2dZNnIYpwHGzw8MzZ4TOuE5exX6nM6qxz3fgGLnVzAQBzrlsV8ph9ZrcfuLgZnU3y3P7Y7/4b+MprX8Ctz6V45eECT88fmgWKHXo7jNZGSJqKWT1xNSJV68XQbGBSxWohpLSfBf4us3xvEkTU5OV5wFd9Ffv1299udixJt1WDaqAGLIIFIfbWHmKOYCD+NQJNywGdFAZzDV5hiB1nNfm9tXuy7P/tuVFdc7GathHih33RJ0ktY1zF8TXnQpzVPUyeaXgn5CasBpFocG85B6w7TiCsXn8Qso3GCeabVx7zYaHGl9S/wr5gursCIDgImGEqjvH93w+sEoddAxOxepnjQdLCgCTmzOowstgY295gSQ07g4SzWoLyAmAgVudIFc5qEhbGdRmzWjI3BjgGhKIZAfC9PhKoOVeKsY2fLwA1szoDSVz3Q7tv7jPp8L+syepSrH7Ei8qsHgLQZ0lNa+kYwoAYuIobB0NHpGsSdE0CFmUYEENmtVKsrhy4xDmj53ecGKIMMSDN5LbLrDYUq+vaUovVucN2SzUDHgAonNU2XHvidnpDZrVnl8gl91ZRgPG1KZ/XyPPleIYYEAmz2oj15zhYBhnO0nB7n4qfYbh4OvATnJ1uz+3WHcdQrK56rokmYJG6gHScvphU1+z+f1Sd1YsFbkTn+NFPPI0vP2y5Z0zL83bH6S//cvNjTl2+v91c6IS9rFZgLc+6963vM+dM3HkfCO4pdX472Gliw6UGLAaSTdGiwLoIMAsUYvPYqYoN3AFnNdBi8u99shKBClysNhD+AACLBeNL39/gk58E3nnlDvu6ybPgOLg2j1mYVGvVV9c1w+0QmdUyV5axszoIsPQTrM7ZMd54GODGBM5qAHj3c+d4bHaGN17JmVi9eGg0Fh4c2SxwV1zTR91ZHXGxWjBfAWxSh21gEgWaMLL6zmrx60cRASLqO78T+B2/A/iO7zA7ju8zE4BErDYRgD3hgO44qy3K89qq5azEeR7uOoArF0FoJlbP5tbOxs3DeyWOg800zurOtV0XAeYhbS7rzbxeO33TJWwwFhxdc/Gw46w2dqzLxPqiYBgQg+M2RiGZs9rk8xJIHS5W/8rrB3jn0a1pMCBPhvjA9c/DfvnT7AtTzA35MdYPM/z5Pw/EKf/8DdBAV5b5LgZkIrE67mJAEmIAoCgVs9oEA6IKjOdF4mz7PmNWKzAgWVrTmNUQGBC5szrJiFkOwiSSy+ecaWYxjUsbAyJxVk+BWros47oUqx/xSjP9sDoAg0yfZuCZCgPShD4RF08KkS5PKzrjjLvoZHqqCbO6Cc1QOICp3G7PuxhntRe5fdYfgE3K3Z8X4azOHf0X/ICTsDBpp3ccWFaNKlMwqylpzI1Y3T+nIqcjZoac1ZZV09tShXOk10Jr3pa6jAqc58H22DnnpZksoIMAh16Ms5OtGHHrnkfHgAAI/LovVpsuIEUAWlusrirEhY/ILR5Nt9tshpvRGX785WfxTdd/sfnaJPWN38j+/1VfBRwcTHPMKctxsAhyrDK/9w47PweWRK5w6BRI4n6AjglbWowfvcm4GA9dA2e1hNH6MJ3heC4fz0ePORawSJ3sS3BAAOt+NuJIAsByiUM/xt/9qSfw/d8PfPjpT7GvGy7Orx7muJcsdoRKq65ox+ahR2m3O0wgZkzWTmHIumJWQLIu4Vv5dPz62QyPz05x65Ucr5wu8fT8gdFC7/Cai9Ms2t4HE/F/L6qCuctEqtY9EOcO3RwAIJpZiDvO6jrh4r0B+/XCy/OA3/SbgJs3zY7jSzAgE7iVpc7qojAKNQeAo0XJ7tmWA7iqLdie2Qb2/MBh4Xr83nr4oMZxsDYTUmTz+SzDuvDJeqI/64SigjurDYVaJ/KZq3hHrHbNHgFZwKLoPDSYH4eRxFmdmTuru2L1J28d4p3Hb0wiVr/4ngj/6bO/ALz8MvuC6XMLAFEEy6rxqc96+LZvA/7I1/4Y+7pB6OqVg2IHB3OeeFh4yTTO6i4GxNhZLXEsU0IQRQlntUJYZpv5mvOjEWY104wMmNUqZzXF2AY0ZsQiUYjVRJOnHzl9Z3Wes3fPpbP6Ta1LsfoRLyZWE1x6wv0qdVbzlg7dYw6IabnBAlp1XKPgCMdhg29u9Vx0jbOaGCYl5XPWtZE44QaOVKxu3OVEZ3Uzi+u8LTexbcSslgWyAACqCmnBAu20zlnFaOV8TvLcToSqdTm1ZYmsJDKrxYtSggEpCjBe2MTOagD0CW6HTyp+BmNWm7nTlrMS59nWQVQlGZv4G2JADvwEp6fbL92675k5qwOJWM0XkBYViC7EpLZYXRSIi0fX9Sec1d/85C9jYa3ZPTWVY+A3/2bgu78b+K7vmuZ4F1CLqMQqD3rj4fnawoEXk5zVoZMj3ijcrx4dMePLNsSEUEkNWAzt/nsmZy6l47lipTJS+zqrKWK1ZdWoO6uyeFMbCX8AgMUCh36Mn/jkY/hTfwr49denEauvHRa4n853hMq6JIrVglmd2btzmKJAUdvwqPcWANg2Fnzs/pWf2+BLr9xlXzcMwgMARBETq1+vcetsYTRuA8Dyit9zqT5I5zgibq5cdPkzF2npbe+BskSce4h8erhcNLN6GJD4NKPP4d5q1Xa/imeBb7ibuJX9oM9WJgfQt+pwUeIkjfpBiIaCBxOr/a1Yfb+azlndEatNske8uc9En9b9miQw7zgT90GryyI1vAeUzOrSM8vbjeweViJN+Xre5PPyfQBcsM9z/MobR/jSo2nE6vd/0yH+wLt/fPuFxx4zPibCEId+jH//K0u8973Ad73wU+zrHMVFqSuH5Q6z+tbZnL1nTJjVc4lYnRoi/fg7vCcCG2JAQqdAmsrveZJuIhB5qoDFFPCdC3BW50QMiMifUTC21wltc7gJWGzdA8374NJZ/abWpVj9iFeaW7SAxSFmtUhKpYZJyVzFJgxFxXGNGGeWBd+tpGB/E2e15fNdeBVbmWp+VTCry6Kmi5+AupU6M2ibGnJWc7xEGELPWaraCOH3lmsTxT/HYUGbkslCDdCcLp4H15Yzq/PcDANiAajS/jUAQJ8wBQFsq0YVtwS6qZzVi3pHSIjPcvMFtO8z9uvp9ho+OPNwJViTXWRhiH7Aoul1bWNAOgvoR5WnCt/Hb3zbZ/CH3/uj7PcTBOg0FQTABz/4SDsQlrMSqyLojYfnKxtLnxCC53mI3KzvrG7cr3TEjO8UfdYh37wjd6UqmNUP0xmuLGhi9T4BiwD074sgYB0sq92NhdOVjQNDFxWWSxz4MX7p1lU88wyasCpjZ/VxxZzV/HhlycIbAei7li0LgVcxd14nb8AEOSZqOWdj9yd+LsWXHb1GO0dZzWZ4LDrFG7dqVFXN1uMGx7WjgDmbWgLVeRbiYPFojrHBwkNWOtt7Ks9xmkU4mNEwOwAQzmzEbW43gNMHJXsOvhjEasuCJd5TLQGYPIfj5Xl9cSKJCc7ETh0tS5xks50NFgDmYvWhyzZbeZfBw3sljv2N2XPr+7CtGmWyK1aLP6OUHXYc0GDGK+MgwDBk57pJ2ZxL3AO+wXUV3Zdlve1k5agho4DFmSNlVoemzmrLguVY7PpuNnj9ZIYnZifTjN3Xru2e2xRidRThy49fx9/+t8/hHW8r2b1r20bvWiZWb53Vt84XxmJ1OHN6awTj4EbBgu7mTkzArE4UYjUJA+J58vPklaU1eZPFDyx5wGJdI8ldmiGRs8B7JjRem9RhvH1dDEjksvlxa9zKk5JGIrisSetSrH7EK81sGgaEu197wU9gAw8JVaBCNQg+J3VhrhDWTVOOfa/u84fQEquJLwp2EEXIJFWsDmwprsOIgQyondUpD/whOqsByMVqKkNO5aw23AQQbVi9HViTyQJ3VuddDhmAojS4t/jEpuemNG1LDUN2vvFuiFBausat1AeLakesXj3MGfvXpC8zCHAjOsPtB60xr66Ypkp1VodgbrcOBoQchgkAto3AZdzrZpHDWYeRXw7/3TerLAvv+3UePnjjc+z3j2IQ4gXWotMJIOp8bTEMCOE9GzpF31nduF+JJ+q6jCHYHWMM3zOMyafAgCzpzOqhgMUyyWndFkGA0MmRnO++Z85WNg59ggu+XcslDv0Ev3z/Bp5+omT3QzvUkVjXrta438KArB7mWLgxe78RzlcqVue5WScbr+USTKz+pRpftvwC++IUzuo5c7l95mXuSosi+vwFAIKAvf/4HCaLS/aOfUQXj8HC28WAZBnuJQtcWyrSq/aoaG4zIaU1bj28V7IN3C8GsRpALcTqCQXgBuvXuq6bxMbcVKw+rHYxIBOJ1d4yRFnbW7FaOKtNNtlEh9imNWcx5aH7Puu+bDurJwgXhOviKIxxmvDuqLI0RrbAsuA7Fdtgagdilh6imYFrX/KuTXOLlkHVqVlQIS48rO5sENkpmxtPMZdzHOCd79z+/vHHzY955Qr+s7f9LH7y00/iHU8ydAkWCyOTxJUrYGI1fye8vlriCWOxuu+EZ8G4hs5qyTyuzCs4VkUXq7sdna0ioUv4MSVyEYAJmNUyxKno7g1q/XuBr5V782Ne68Rhoda6GJCZ29tg2mxgzEO/LPO6FKsf8Upzm/ZyE6iCtC+axDGR+ei6bFc7lTmrDQRFhfjZMM6oYrWi/cTEWT0oVhu0Z3si+Kp7rlnNXMXUyZhYfPeY1a5RwCI7OZWzmiCCDgQhGt1bfAd26jYszy7l//zMwAnPW7HSeFdYz7PabHEuHIpx0XcAG6bTHy1Lls7OJ43r04LtaBvB/li6+Z0TtlA6PwdbPALkCXnjrO60egIwWuj0xCTOOjRJkb/wev757a+Pjt6003gzajGrmbO6hwFxsPRozurQyfthNwIzRNVTRUeIZJOtMHBse6EEN1UUeJjNcLwgMqtlbu1WxauS9q7xfURujvhs97xOzx0mVhu2vh9GGaraws3ghH1tgi6Dq1ex46w+eSPBkR+Tjx34dS+kS4zdpqih5YGFVR7goz/n4SsPP8PeWVPwj4+O8MziAX7hM3M8u3hgxCYF0Ntw//wXLDy7vP9oBtiCi9XtgEW+ueCFBu+ZmdPbbH1wr8KV8ItHrMavkVi93vDwcYP76/AAOOkwq402xkWJedUOs3oCsdqZWKzubDABLVexoehzZZ4xoXKzQZEUjLVv6lj3c8YCb4nVaenSMm142UE/iD7NbHN3OYDHj2K8tj7CP/vRGt/0+K+wL05lPPiqr9r++sYN8+PduIGvufkyvuzK63j7jTP2NcN3wuKKz0wHnNt9lgZs/mYiVs+dXvdKnDnMpWwQsOg7ZU9YThNibhg/Zujm/SwLXiQ2fMOsVjirM5CZ1Z5vMR2ma0Rrd2HrljChdYPNea2Fs5ogVneDYTer6lKsfgTqUqx+xCvNbVKqqRDpdiYgvOLEoj18IrSw23ohmNWGzupumJTp5MbzIEVrmDCrh8VqE2e105s0A2w+Tj5XAPB9OHa12+IHYJ26bDAnitXdSVhT/AWkzZBTBYqVJUpDZ/VgGrOBs1rFrDZx7QcSgWoTW8ytTJ3gWhY8p94NvJkopOrKcc0WDlytW58WWHiGYjUPAbz9kC2UPv1p4O1H95o/o1QYAkkn6VugYEwmIYFf74rVIkX+UcWAALti9dd93Zt3Hm9CLRe13Fm94WK17uKcC6q9lsyiwKbwMY+I94F4f3cXD1Vl9K5VBSyeZRGWc9q5zmbApvDVYvWaONkPQ6mz+nTtmjurARwe1Hhq/hD2nTfYFwwRIABweMVhjkouJt1+JcNjs1PyuMXGF6/3eSWla4xwevG5HP/gs18JpBkem51NhwQ6OsLST/HJ7/xT+J+//m+bu7X54jyJWZv+Z19x8fzy/iO7eAyWPvvMWhgQAEaishX0AwYf3K9wJdh80YjVlt0Rq00xXlA4q2Pi+qhVR0fYdVZPFdIVRWzuLcTqh2BitSEGJHDynf3bOuXZIwbOagC7YvVEQu3xImcGifUar9128dT8ofEx50HOWODiWeWObXKoOSBdK07iLgfw4uMrvHR2A//kn/r4yNM/z4431Tjwvvcxkfqd75xm8zIMYR8s8Au/449jdo938BjwqgHAmvP7PY6ZAUeYcw2eLyZUtvSCuubOajMMSODkPbMUw2oQ7wPugk4yuSZAdVb7dsEyviSVZgbM6sCSmxmKAnHh03jzfA2udFanHlsza56vE/koK3v3fXDprH4k6lKsfpSrqpCWDm1Q41wjGYB+E1v6TCNgu4CO+26vxCRUTIh/2e7fn8RZLWNWl/bFiNWGGBCVsG7ErA4CRE6O+Hz3GpylPg4ojFZg1FmdVw7cgHK/SnZKi4Ixqw02QqTBEYbOateSO6sZtoX4eQkXeOcFPIXTx/d4m6OwgIq0c0NndXAQsIkIX5ivTkvmgjZRUpZL3IjOcfskAOoaL70EvHjABSWi8CFL+p5isRsEYGJ1axMgLvxHN2ARAN72Nvb5HB0BH/jAm302v6a1WEDurI5dI2d1K0+PFRerZxFxM0gschQYEKpO64QeE006WAkT7ud8DuZKU4jVm3MDZ7WTI17tvhPONi793dWqwxs+nlk8AD7xCf6FQ6PjAYC9mLHry2+IN17J8Vh0RhbCm/Gl66wuzPMGvu03nuHjD57Et73rl9kXpkCAAE23hnf+AId+Yn5cy8JBkOEsZ+LfZz9v4/nlvUd28bi84uEsC5t7IDnPWfaKyf0qyR55cB9fVBgQy7ZQVtbOuxaA0byo6Whst31PIFYfHlk4aQXAlXk5iQO4eej5PO7l1wM8Fp1O7qxOznO29poQA5Jm0wi1xwesEwibDT73mofnJti4WgQFVp0QV8uqzc5Vsk5indKGAYsA3vF0jF85eQw/9wkfH7j+ebZZMWX2yH/33wF/8A9OczwAuHEDjl0DL7/Mfm/abSM2ZzYbnJ+ULG/Eto2ugeV3srPKkoWlewX9uI7DNJPC2aICwbEaJmK1UyDNB8Rq3VBIwaxWHDMRx6SgzEKrj2AEgDxHVjk0sVoVQM6LmfFoc04AO+uDOIZ5oPdlGdelWP0ol0g69olMH5mwDBYaQJqMiUCxbuiTaVibGHw759rsxBNf7L5XM4GuhwExc7+yg0yLAXHHnNXUSZPvY+Zm2Kxa17aqcJ6FWPpEty53a/eCAIHmumg7EsRu8UbW9m6IAbkgZ7XsRZkXllHAYuDkvedrkxiEYW4PveusFg54U+OEECK4WL0+K80xIL6Pm4cJ7myYY/ull4AXZ6+zP6M6qyVidZmVdG4cryAAa9NvhX9N4Vi/0JrPgT/2x4A/8kce2Vb6iyrB6e2Os2cblxywGMrCbsqSidUzuljNnNWdr4v3jGk+RAcDAoA8GXcCl4U9qcTqdU2b7AcBFl6K89Pdd8LpxjPHgAA4eGKBp+cPgZ/9WfaFJ54wOh6AZnyq12w8fOO1krmWjZzVfWb1FGOMc3yA//1b/jK++/mf2Dl34+qihSYQwQ+jlDlVkwQvf46L1Y8ob//JZ128tjlqxOq7b5S4Hp5PL1Y/tL6oxOpFUOyM3U0XnombMnTYGqHLrPb0W8jbdXRsMQwIH2fTuDZayzQVRaxTcp3g1VeBT78+Z2LlBMzqNspqfVaya2CAAQGYQ1uU6XpO1NXDEnfjJROrX3WZWG24czcPCqzzvrPa6FwlaEN2DSZwVj+X4e+//H6894m7bBNk6rHQJGNAVjdvsv9/5jPs/4bOasxmiNwM8UmK1z+X4fHo1NwF3l3bFwXi0tB4wkOSuzpEmoLWMc/PM3RyJJn87yapxTZHde5d32fM6kKBFsls/WPyimYW4m53GEDXCoDtul5ixkRdY525tDWz5D176ax+NOpSrH6Ui4egBT5hUSLwBypnNcXpoRDTjJEC3P3aMbsZDZBAK4W2F7B4Mc7q3IRZLViinQHdOGDR99lLfd26D7IMWeXAjxzajrHrwrUqKQ+dLHyIVl+ZWH0RzGqT0ELBrJa82E0xIDJndRP4Y+IgcrlY3XJW12BcPaOazWABqM4ZO259XjEMiOHE8cYN4E58AJyd4VO/WuHF6FV2rxIXZUys3h0L0qQ2XjiEEceLtBw5celNQRS42Lp61XzB8BasxZJxensYkMRlAYu6963D2kSTwt1xzjTOaiq7XDCru5lsYjykitVexz0ElnbuWpVRq2v3mO1qmH8Esfo42ODhg91r2IjVhk6Xd38gxO984eeA01P2hSnE6ihim8Mn7P564w3gZmQgVquc1RPkDWC5xFOLE4QnvGvlosRqUxcdgINZydzKmw1eu+3g6cXDSbAtF1HB8WyHWX33To3r4erixOopWvXfAvXU8RqvrY+aa5CnFZ37ykvKrE4ccwzIFZttrvBFTRMWP4GzeuZm2JwV+Ft/C/j9X/NxNoU3eRZ8v2cWun+vxrFvgJjxfczdTCCFAQBJPg0G5EufjfHJk8eB9Zo7q+8ZjwWLqGQdVy2hEoCxs7oGLsRZ/eILFT565wV8+OmX2Bem6oq5qLp+nf3/dW46MX0nRBGuBBs8uFfh1udSPDE/Nb8G3Y38PGfOasMuSd/juROt+ZExBsQpkBYKZ3Vq63O2XZcxqxXHTDKOZKVgQGYuQ891F+F5ztbgxO5uT7auBxqjyDws9fUNmVgtOm0undVval2K1Y9y8ZAH0lxUhLVJxGqys1oIf91jtlNdKcWF9a4I3jCrjTAgMmf1BQQsGooIjVjdGX0bDIhBwOLMzbBZt66tOHeysu7BtUsUiUScEMcmtN+Eio0QUyeh7/RZXI0rh/ICEtiaAtvAwu3p0rEt4jnoCFRTLJ48Hz1mNQBzZ+18jkM/xuk99rmvzmvmyDF0ugRX5khLF//V9wf4yZ8E3n5416jVMYjsnrOa8QPNFg6zmYW49Hec1VNMcC/rYipaOIyv3BOrPYYB0X3ZWhbCoEbc3rAAWs5q4omKFHmJs9pkU7T5i60DnzyscRRsLk6sFs5q3eMHAa4Eazw82X3mzxIPB565s/r5D1zFb3vuF7ZfmEisfmF5Dz/1i0cAgNt3YOasFp0bMma1affGwcHu7ycQlQGwd2r73zuFs6WmeKMAAGnCSURBVHpRMvFvvcbd+w5zKj+iYjWiiC2kV+wZu3u7wvXI8HzFPKUtVp/aX1QBi09djfHq+ri5BlMIwLJ5d9PJZrKJfRSysDa+YZHG1SSOWkQR5m6K1XmNz30OeOfxBLz9KGJOzfXWfPLq6zbbEDJwVi+8BOer7didZjYT6AzH7fd+SYxfuP8UsNngs7dCPLe4b7zRNg9LrPNdsdoyxbZ0xc+6RlK47D4wDfJ9eobjYI3fMPt37AuPaJdJU089tft703fNfI4rwRoPHgCvfi7Hk/OHk2Qj7GQxCeOJ4Vw+8OteTkiaWUYBiwwDIh9LSJxt32e4TKVY7ZDHWsv3enkLAOhaAdBoUVIMSJ5jnQdMrNYt34drl8jj7Wc1BRbqsszrUqx+lEuI1QbO6jTp/9EmsWn8IbED3w1tLEvEhW+GAbH7qIYkpw+QAEuhlbmVL4xZXTn00ODARlHbveMWeW2GAeFidbyRiNUGrglnwFltAbR7yy5YiFK7OAaEPMfnzLDuvZVuSkTUF5BlwRVOZclGiGvkrO4LVMxZbRCwiBa/veWsBmD+Ap7N2KTxLjveeg1zZjUALJfIKgcf/Q8e/rPfGjO3tsFkNJw7fbE6NndWRzOLiZ+tTYCUEjB6Wb8mZYVcjO4yqxOfFrAIIArKPg9dOKsNxGrfKXsbV2I8JJs8JM6RhycWc9FdtFhNdFY/6IjVpxufOatNRbrHH9/9/UQYkD/5wX+IP/z3PoA8B9644xgxZZmzus/an8RZffPm7mfytreZHa9dbXf1FGL1QY2znDmrH5y5zFH8qAo0UYSn5id47R7LXLh7u2TOakP3q23VO0HZD06dL6qAxSevJTvO6iSuWeelybwocnrdl5vUMXfSiXuTW4vjxHxjHAAQhlh4KdZnJV59FXgquLv784jneujHODvbfum1Nxw8OT8xWiMsvRSrjd0YOh7EIQuDNBTsn37GxhdWx8Bmg8/cnuP5A3Mk0DyqWO4Cvw+qfIL5sefBQssYU5ZsPe9VxmK19cTj+Eff/D/jWc8Mj/drVi++uPtvfuEFs+NFEVt3PLTwmU/XeGF5bxKxGsCuWF34iKjdcbx8r+51R2UZ2HhAxFCGDu/mq/vnlqScL61zbMGsLhz5McVG04QZV6aGMWkWFf856yKghZv7Pq6FK9w72T73U2A4L8u8LsXqR7mKAmll4KxWYEDIzmqRGq1gVpMHdYWj1DQ92g8stqMpCS00ZVbXWUesLgrGVvZpj5QXudKAxSKvmfhJHSh5SJUIpgfYuZMEZVGuC9dWiNVU1zbHgPQY6/wZILvIhADc2TFerS1aAMP2sPLPqwA8g4BFqbM6NXdWL2YV4z22mNXGTD5g63C4V6GqgPWqZsKyqVh9cIDjYIPv+PAt/Mk/dJt9zWBCHs4dhutoXdw0hXFbajSzmKu2JVbXACz3i4sF/ZYpiVgLAHlpsbRzwss29CXOau7KIQuKjiNPZ69rlLUN26NvXta1tStWPwRzaBqI1bZVo8zkThYy88/3mbP6dPffukq9acaYMATe9z7262vX+k5jSi2XeHx2hndffwOf+hTwxn0PN02d1SpmteE/H74PvPOd29+/612GB2zV8fH21xOI1QcHaJzVZVGzsK5H1VntOHj64BSvnB8BWYa7d4Br4cpMUOKdZ233ayPaf5GI1U9dz3ac1XFs7qyeL22sO502m9Qxxq5hPmfOXC5Wv3YvwBOz00mY1XM3w3pV4403gMfsO83XTY55FMQ4Od8KVa++4eKpuYGz2raxDFKcZ34zdt1aLfH47NRYrLbmMxwHG7z6hQppZrEQV1MMyKzcwYNNMTdscIEJf2aF+cyboOvu8cfxoSde2v7+URero2hXBH3mGbPjzWa4Eq7x4NTBZz5r420HdycRq22r3oqoRTFJl2Tg12xDrI0BycGc1ZT7y7KURjyAOau1A31tG64DFJWzNTK1qkH4UMYv32d6Q2fOnawKZhgz6G5Wi9U+Way+Hq5w92R7Tpdi9aNRl2L1o1zi5UZx6fE24p4zC8Amc2nMat8fxoBQF+airaV9rnXNBl0TsVqGAalrxg0zCDdwrApl2nlJmGJAFGJ1ntVmPFHhrI63X9qc5mbOEc+Da1VScaIR8Sd0Vhu59h2Hsbg6L7XVCkzwoLr2vQFntUV37fsO3y1uTew2qWvclvrE1Yy5ki7AWX01XOP+feBP/2ngT//4+80DFgFgucTveO7n8W3v/2wT3mjkrF64zP3auhGS1HyxO5tbu1iJqa7rZV1MycTqooCFmj2zhGcsDOq+s5oHNJHCY4Bt5kRXrOb3l+XQMwwA7GJATi0zBrTr9lFTrYpj0BYlgll93rmGdcVMWlOwen//7wf+6B8Fvu/7jN1uABrB+z2HX8DHP84clTM3p4vVoSVlVqelyzInTOvFF7e/FlzRKeo979n+egK8yOGRhbMsYsGVNZ9/PsICzdPHK7zC3Z9371kMW2IoVkcdsfrhuYcjE67wW6yeupH1MCCRqVi9sHbxDwDWKTGcq12LBVyrQn7GJt4vvbHEi4d3JnFWz90U6zVQVTWclM+NTMRa28bRLMNpujUzvHrXNxOrASzDAucZD8Ssa9xaHbAuE1MUymyGD1z/PP7Y3/0yfMPTn2u+ZlLzqGabFnw+n8S1PkqhWyLjSaxrRUeMP4FYHUW73SuP8FjY1Fd/Nfv/V36l+bt2NmPM6jMXL7/i4YWDaZzVO2a8ifJnfL+fO5GmFnwDJI4V+HK0BjgGhDAuWgF/1rtd43WN1KTL3Zcfd31Wsk1ByjEFYzuVzDmLAnnlwAsJ44zv43p0jrun23HvEgPyaNSlWP0ol2gpp6zJxGJX8jDHmU0TK4WorHBWk/Up12Uviaz1AhPH9AiQfF6Ns7rDe4xLH5FPPG53t7x1vkXlwA1oEzE3kDOrGwyIibPa3XVWnz0scWAiTnCuk8xZnW0K1t5EDVjsYmvKkm2EGLj2G4diSwBexzYWXmLkrC4qCbalNOCh2zZ8hydHt8LaNqmDuWcmVj95I8frm8MLYVaLdryf+AnAQcWY1aZC0nKJP/SeH8MT/r3GnWQyIfcXPtu4at1gSWrOUIwWDku6bjGrAVxObB7VCgLmAo5b46wYc4OA9E6IIkgxIADozxd3Vu+8E4HtuGCAhQLQSzsnLxoAwHWZgLKRX7vGWU0Qq68Eazw4a51XVbFx3LKmEeksi/E0205gk+LC7HuWn8XP/1y9/byoGBAhVnfmMMBE3Rsf+hDwwQ8C3/M904j13eMul31eKaGuXbfw915+P37hlxwsXD6GP8ICzdM3Evzgz/x2/D/+pIV//UuHeM/V14wxIN2g7KriDvMvFrH6sQKvtjEgqWXurD5wpM5qY3EiinAlXOP+CZvLvXT7gInVpvMtx8E8KHB3M2fdhmLeYWgOODoocZJFjTHg1bsBw4AYoFCWYc66+bhY/UZ8gMfnZ/SweFHzOf7we/8Z/vHHnsE3P/nL7Gumzup5jZU4V7Rc+yafl8v41I0BZ0pnNbCLsXrUAxYB4Hf/buDbvx34zu80P5bj4MoixYNkhrUwHpm+DzwPoVNskZl5zjAghmJ1EKDvrM5AN8wBfR56q+LcpW20SAJBAexmZBA1E9m5rs/5WpGIFgmdHEl3ftz+OZTjCmf12Xb9eh6z+e1lwOKbW5di9aNcfGdvFhJeboJB1HVW1zV3VlMxIGqxOqA6qzksf+dcJ9iF9kO7x6Mzbu3h7Sd52neXX4izOgdcewJndbplx509LMl8VgAMA6JgVifrknGACfdWKLtfBTeMigGxLPhuyYTKVnuTKQbE9W2ps7oo+OdFnIQEXtXbhZ8CA/LkzQKvrY8bsbbIKjO8jCjOrL536uL2beDHftdfx9c99ulJnNUAgLOzrVhtMCGXsYqbgCaDBclsYbMgJb7IqXPObDddlF7WxZTvY+GmWJ9vx+864fcEcYNFFbAIwCjE1ndKpbOavOAXY37rOTB2jrgua01XidXU4wtn9Wo7Ru98VlOKq1OV6wKzGd5z/Ar+2l8HPvT859nXie7iILJZwKJsI2SKDbEgAL77u4EPfMD8WO2yLHbcP/NntmO5QX3rN6zwbS/8B/z5f/gcrkcr9sVHFQMC4EPvfog//zV/D3/nH4a4Md8w4c8YA1LsZI/UVd382RdD3bhe43Z8sBuwaMisXhy5OyIlAGxyz1ystm08c3iGL5wfA3HMxerbk3xWi1mFXz25iaeup2xOH4bGAvDhssZJOmvE6jcehnhsdmrmrJ6VW/RcniMpJkAXAcBshhvROX769/9v+PDNX2q+ZlLzWY117jfj7BThnRfqrAaAp5/e/voR3rhrKgyBD3/YfG3A68pBiS+srmDu8LbhCZzVodMyTBWFGd6UV+DXvQ3nNLcZdo46dgm0RhcDUtdICgehW+iPCao8Ln4dyPetyLiKd4+7OqvoJgnPYwaJWHL9xDUhitU3onPcOd/OLR6sA1w1weRd1iR1KVY/ylUUyEoX///23jxOsusu737OrbvW1vsy+6qRZrTLkmxJ3mQJy6uIwME2tvEbDMbBBpPYway2QgIkL2sSIASIX3jBsYHYscEYG294xbKFF0kjaSTNPtMzvXdX176d/HHuraW7ZyTdc1pd3f18P5/+VNXtrtu3q8+995znPOf5uX7M/NvVAugbDZTqDpJOjItZVDF2uVu7XkdTCiTi5mgmEkoEr3c4SnUvkFDO6hWCom6FX9e9tFjdTMTOrE4ELpqdlYhDtPOSEgkETg3Fqt0SOpbm68g65fidBsdRzurqys+wXJKxndVe4lLOar1OrmuH1Zg7xeqiZSYGpPP/JaVegUWoYhwrCv5U9WNAdmxrqhiQsOfcKi5oILN6yC/gSyf34MgR4MrUObXsXbdDGi1xnJszEgPSEiI7xeqqpT3YDTJ2V4HFQl4qtwA7Nr2J6yLtVJDPta9dpcWqWjYZc2Du+2vjrPYStZVidXR/1BCrbavRVagtdqZ0hG0j5VzGWR2J1c/2842KKOXb7yvNl9W+TESArBWZDLYnF7B9tI6fu+ULrW1xuJyzekNcYwxNKFiZFF69+2F84ZERjHhhJbgeFqvHd7t43f5v47+880m8/54H1EYDzurIpVkqAZ4VnsO9fC4YxEoFKm8/zLRTzmq9PoybcpSRIRooNZso1hy1kk1TAN49VMCZ/CBQKOD0XBp70nNGRMVUCji2OIadWXPnQX8/sFBNtj7beiOsvWJIrJbFksrwNnHOhtfSQ4njsKtFdY3R7G+mM0C+o8BiK2JGM7O6y9wVOavjGm+W833fB9x5p6q7cMMNZva5gRjsb+KrFw9gfzosMqorVnteuy6AlO04CU/vOuB6YkUcabUm4hdYBNou6OUCT8vcFaOIZ1gQdIVYrTvR5DhqVVC+29xWWGqq1c1x7l+OmlAsllf538StmwWEzuolTOfbGetzRbXCj87q9YVidS8TLfeMk3sZOrNWc6oW41a4XS1buuM4Y194hYDnhPEH0b6i+AcNsdrxLHWTWOGsduPv93IxIDJ+gcVVZzWlRKESLkHRydX1ZZeglpurI6NTlMR1kRDy8s7qGJnVqzqrw8kVzXHeCgG4UBJKrI4bA7JagQspUW8KOImYBRax+ix8oepot4Ht29GVWV0pNfWdIwDgujg8OInFioc3v6HejtnQFavHx9XjxYvA0pJ6rjPQ83010O0ssFjVH+wujwHJ5aAmguis7k08Dxmn3GpSAJCbralYpJiiT5AUK8TqZrWuBucak4yu1UClZnUXJtIVKsO6E521AYw5q0urX/OKJcQTq5NJ9b8qt49rcaamN9H6XJDNQgjgkU+cwFjzQmtbHLzAQmWVPHQAG0OsNkUqhX2ZWcwXPYw4C2pbL7sJ+/oAAHcdPI3rBs6qbTrHG66QK+TVeXvsGHDlYCjSGMgE3xCkUrCtBmqLavJ6ctFXKwQ1zgPhLut3Nxoo1FwkvdWLxT4b9oyWcDo/CJkvtFfcmRCrR5J4aG4n9ljnwg36ERD9AwKLVR8oFjE3B6SdUATTEGjSyWaraOHCZAX9bsmMWD04qPpXuVCs933tSbFUqju7vFQWysigc41dXjcqMt6YmlvKZoE3vAF4xzt6+1q4RmwfraPatPHeI59SG3TPg0QCgddAuW6rcUxULD1u3ZEQz5Mr7uHVmohfYBG4dAxIrabMeG6M69fTOavjTrKEUaSdq4KAMAYkTr8wPNaUU0WhYnf3j6HqZonwZ541QmAkXcJ0Od3qa88VfSVWb6X+Vg9CsbqXCS+WcQPo/UQN5cqym3iYw5QMYlx4ohiQVQTF6HfGxXOa3ctd63U1m6cbA7LclVSr6S3tuVQMSKOBmkZmdevC2jlTGrk83JqWyyPwJUqNdlTB0kJDDfjjOnJs+7LOaj+Oszp015dr3XnNrRuljrPahZoI6Wi4+ZKtZnXjOqtdgbq0VkyE1JsJ6ESJrnBWh20g6dS0OuR9QzYWq0HbWW0gAgMAIAQO7Sjgc6/+XbzqjkX1v0sk9G/s6bTqfJbLwGOPqW2jo/H353kQQqJZ6nBWVzTdDQC8tKMmFzrFarfEjk2vEjqrO8Xq2akGBr34hcr8QKgYkI5rgXbxL8tS8UWNlddDAFqxUFm3hKVC+37SEqs1CiyqJZmXEqut2GK1EB1xBwAmztTV8vReFqtD55+VW1ARRkLEjwG5nLN6K02IJZOwhMTVI9MYsRfUtl5uA9HKoMXFlltVS1BKpTDkFTA7r86xRx8FjvSdV9/bQmL1iJ/HzFQTUgJ/8I0b8ZYrvqF3r11ecDY08xgRq7dVcXppCB/7RAK3jx5XG02I1eMZPDi9F3eLz6sN0cS+Bv0DQsWAlEr43OeAu/afDH9ZfAEwk5atzOoLZw1ety2ruxisic80Y7WEdaDDta/prPbtcAwuZaswrucaclZvcXbs93D0X/57XJcJ26qBduB74Sq5YlHpL1JoO2pdV3Qb8QBUagKupWGUiVzQy2NAIt0kzml2qczqUDPx48a8hvEqK8TqvEZ9I8tCyq2pegON7mt1OV+Pp0GEjGQrmC5lWteC2WISg4wBWXcoVvcyOgPTaOlFZdm/OOqMxczB9hK1VaNFYh9niOdBzT52dBrNZFav5qzWiAGJnNXVlVEojaaFhKspVi871kLdQ9Ktr/6eZ0gyCJ3V4WebW5TIajqrbdFEo7byMywVY4rVQsB3myuX04duBC1ndZRd3iFWF0qW+czqcNmYbcfvjK5wVjcaKNZdpLy6llgdZTbLknI+X5xzMeznzdyAoyXuk5Pq0cSARIj2ICza75498ffneeh3S1hYbH+GJgYkrSzs6Nyis7q3CXOQF3Lt++LsdBNDfj5+ZnXkrF5WtFA3usezmysK82iL1YkE+twyFotOSwQvlQ04q53LOKvLMcVqz1PCRFO2/u6jjwpcPXCht6MPIhf1xIR6TKfjr7RJ2WoSv+PeJWsbKAbEFKFodk3/WQz7S0ZyeteU0FmNxcV2jJVOJyaZxEiwhJkF5SR77DHgcCp0bG+E4momCLOKp6eVWD/oF3Gwb1pbUASwUqyOY+ZZxu7tdZxcGsav/eEgfvmGv1Xt1URm9Y4+HMhO4YgXCuCdhfZi0j+UUDEghQI+8xngnt2hQUBbrPZaYvW25KK56J6xsfZzA/tM99so1L3WxFKpLBAk9HPLvYQSqNFsqhiQJsVqY3RmdgNGroO+D2U8KBZRL9WQ0KkXFeL5Qt3DO8XqqmZmteMo801lmbDcaChndcyV8wBWjRZpFViMg+siSNS6VvMBQH4J8Z3VAJJ+s0vXiGgVboz5fxvpq2K63BarcxVPjem2Un+rB+nh3h6RVY3sHdtGkKitFKujZSJx7u/hEuJKVay+NFlnYO5B3dSjGIHWkqn4N3Y3SFw6szqus/pSmdWNhlr2rVEwAUD3hbdeRyESKjUIkqHzLxzwLuWkWj6pm1m9SgxIPg8VMRKjzfpeKNQu+wzKDVvPWR1lhnUEYudLCb0YkNUyq6OMM02jT9cES6OBQk1/wgLpNPq9Iuan1X4eP5/B4YGLZm7A0cDh1Cn1aMrx1ukY6utrCwBx8DyVRTbf/nvLtYR+FMqyLOzcQlPv3CJri6smaWZy7Q7y7HQTQ14hfgxIIFQUTGfOvG60BtThlBuOWVetEMgGVbXKIrzOatdFiJzV5dWPKbZYLQSQTMJN1FFdUILf0ccTuHpgorfPr2jy7vz57tcxsAJPubs67om1SlMtId5Kg6dQiHjHFV/Ai8ef7Om8agDte9XCQlus1nH+OQ6GU2VMF1NAtYpHH2niSOaMagO9PHFjklQKI/4SpmYTOHYMuHE0nAzScT6G1yRZaYvVSzUfaV+zvwVgxw7g8+evwh1XTGE8mVP/fwMZ7vtu6MOPX/XV9q62b9feZ3LAQ6HuopEv4ZvfBG7JHlPf0BGrM8BSVWVWP/6EhYPZaXPX7U6x2oSzelD9/VEx76WSrcYHmqaDroLpjYZyvZrKrN7qrIVYHYiWs3pmVmDEX9K+z7qeUCu8l9UhStka7ctxVMRMYdl1Klw5H1esFujQnTr2WW448WqnhfsN7GprgVFEoQD1GcQUq1NBsyu6p7XfKF4k5n0hnYa6FoR9LimlutZupf5WD0KxuoepFOrw4uT/AuEFYnWxulh34/X1w2zpFctSI2e1xo3d9a2u5fRGRMrIUbtKZnXssU4UA7LcWa3rLl+lAFzk8kj5eksSW87q5VEFcT/c0FldrzZW5EXlC0DajicCe55c1VndlBYsV6OITpBAuUOsB4B8xdGLAfFWcVZHEyxO/P+X50F1bCJxInRWx1oJ0Uk6jRuHzuLBJ9Ug+vGJLK7qNyRWR86exx9v/S4jdIrVOq5qQInVQR7Tix3F2qoGxOqooxVNBC029VYtkLUlCJRYvdD+n8/OQlX7jhsDkrRWOKtLJQPO6miVxbL7l+7S1L6g1hUJZESsdi4tVpeqMcVqQDlK/TwmT6uJxqNPOjiyUZzVZ892v47DaoVhowinrTR4CgLAsnDr6CnsTC/0/vU1igGZnzdWx2FkoK4cX4UCTp1sYm96Vgk0hopY9jyhs3pq3sGJE8D+9JTarnn/TnYKKY0G5iopDGWWLx999th9KYwnF/GuFzyoNhjKFb7+pQN43+1faW8w4KwWKXVsX/xWGi+8QyJRyqtvaPTlMgO2igHJ5/HZrydx947H1sbIYOBakBpwVQxIOLF0YSFQTnBdV+0ysTpf95AKNPvyRLFzZ/v56KjWpHBEELRjQCanLYwF+mK1qjuxrA5RRfWZtMTqRB2V4rKxpk5spuvCTdRRK62MFpFSxB+Dh87qFTEgBagJIR2xuu6uFKvzUqs/Kzy3bRBoNiEQHjdXy64rFKt7GDVDFPNkdl0EidVjQJpSIOHFO5E9D93VswHUq03YQm+5jOcLJSwvd1brFFgM7JWZ1VEMSFxn9WViQADEv6B53XEC0T4LNU87P69VBC7skeeWgIxTid9xtCzYNlBvWCtuFEt5S8NZjRWij4mImXSqW6wHgEI5oTX76ngW6qYjZqCE9eWTNrmaj4xfu/wbn450Gi/a9iS+clwNbB6/2IfD/RfM3IAjZ8+x0I0zNKS/TwC4/vq20HP4sN6+wirPM0tea4Ll4lJKOZ50PoOO8/bECWBuXuhNBJG1JRKrO53Vc8CQFz8GJEhZajLMsLPa91deD5u1BiydFTwA+pK1bmd1JYHARIHFSzmrK2qVV6xrbTKJA9lpnHhC3V/PTTrYmZrv7fMrcv0tLKhHTbFaAl2rgkolqOJfW2nwZFnAlVe2X+/evX7H8kyI/uedReA0Y0uGhyRmyilU5wuwZBMJS26dCBAASKWUWL3g4sRxiX3eRGt7bFwXKbuKfDH839RqaEoByzFwbqXT+NZ9v45DeEK9NlUETwjgla9sv9ap5RERCr7//xd34a1vrKjYCs/Tun9lRnzkax5qc0s4NeHiQHba3CTTvn3t58sdtjGw+1JoSKstVudSRsTq1j28VALqdcxXkuhP67v2CbonUl72MiOTdi3jQbGIyZkExoKcGWf1MtNcvuIoU5dGgUUvUVvprA7rnMW6ftk23Eu4tQHEN0hEBRaXO6uLIn5mNVbGm7b2m5dKN9M4XgBAtYryUq1tGN0qk8I9yhayZmw8tJYz2DYCp45SLRRru6rHOrEvwK4n2tnSYSexXJLagycvsLCwwlmtl1UsHFsN9JYVWCzpFOyLnNU1KNEruoBFjjddZ3XHoDTKrNZ2Vve76qKeV26J4xdSeMuBWa2OY8IOCwxWuidT8kVLw1mNVZ2E6hfGb1uptEC+7nU7q6uOVgzIpTKrSw0H2zRiW9wggWpTdk3azFVSGExrOn1SKdwxdhz/9ZGXAc0mTkxnsPfmWTOiz3JnjymxemwM+PVfBy5cUGtqdbBtjKSKahl1XXU+zub6cN+OOQNidROyXMH73gfYp0fw8uQTve/826oEAYa8PGbyfuv6PTtv4Sa/ALj9sXbpp8LJwM7Mal23MtSpuTwWqVSUesIyQrG60OGsriSMFFg8W7mEWF1NxHdWp1I4kJ3GU09ehZsLQMqtqVtuLzurly/L1xGro+tzp7M6KmK8lZzVAHDDDe1iu7fdtq6H8rTYNjA8DMzMqNcGhMqRoSamSxk89VgNV+wKR/5bpbgiAFgWRrNlPH5mHCefrGP/tkl1TdGJAXEcFWFUVNGGtXIDtqmInZERtWLnrIqWMCZWA8Ddd6taHkNDZiatwgKmj53L4PlHQle15kRIZjyFpZqP7zxs4+YD8+q6bapftH078IEPKFFdt28IhP+bapdYvX14QT8GJGmhUreBQgGyVoeAGpcSQ7zznSp+8CUvMbK7dFYgN+sDhQImZzJKrNYssOglE93O6mYThZqLlKOx8s5x4CfqK3KglQ5hx7t+hTGv1dJKt7YQUqsYpKqf1i32FopCK7M6lZSrxoAUC1J9tgbE6vkLZQx6BY7negA6q3uYQl6qmac4J50QK7KKAWjPkq0mKLYGTxo39lZWVCTSRVVtdfK9LlG0UEsEFwKOLVfkFcu6ZhRKZ2Z1FK1Rr6NYd7SXjY1uS+Bisa8lVh+7mMWV/ZNaQqXtCDSaVnfbArBUCJ3VMdpXqw0sc1ZLQKttpbNhpe+obUlpLgZktYgZDWd1a8lYx3nQaFqwXc1LtWVhZKiJXDXA4sUS0GzCtppmBlBjY92zzqbEakD9f3btMlJMayRTVsuowzZ7dqkPu9Lz2suIvUQdlVIT09PAt08PIeuU2LnpVSwLw9kqZkqpVjuYnU9oFVi0U566FnRMNLac1dr3xGVidcXSE5YB9KUbK5zVRgosVlZ/f7Fqa8WAHMxO4fgJpVMe3tHhVO1VMplugdpEDEhH29qSMSAAcNNN6vPYtq3bZd2rdLo/Bwe1dzc8amG6nMFjjwFHdunHNGxERocamC6nMXmhoYQkXWe5ZSHtVVGouUCjgcmLUi39NyEAL3c8mxSrLQt4y1uAV73KzP76+tDnlvCvrv82RMGMWJ0eS2GxGuDYCQdXb5tXG01et7dvV1EQJhyP0f8mFKsncmkzMSBJW/XnCwVMTwMjBmIlSAfXXQfce6+xYrujI1BjhGIRk1MCY8mcdl9exZF2GJtqNeRrHtJBI37bdRzlrF4lBgRAvDYWRousEKt1ndWOo2JASt1/a75k6WVWp6CKoq4SA6LrrLaERKNUxdyFihKrTV67SSwoVvcwxXxTa+YpSIaFnzrdutGJHfOG2RKrOwbQ5YrQHjylM0IJipH4GcWA6PRtXBcCWKVgn55j23FWitXVilTLRTQG/BCiVTU6OtZCzdPOKx7c5mGukgSWVCX1Ib+olpJritV1mVixBCdfSsR2VvuBWOmsNhEDkrXUDGxH2yrUPFW4MmZn4VKZ1doxIElbLRnrOFYAZjq46TRetv1x/OzPCbx0x1Nqm4mbsON058eZFKsNMtJXxXQprT5bKTFXTqqOiKazOmlXUSo0MTMDPDndrzKre1lM2+IMDzQwU0m3YpFmF22tAosi8NV9plOsNuCs9nyxIsO/WIKK1NCJAVkuVlcNiNV2BYXK6tf8aj0Bx2poxYA8dcrB0aNoix697KwGgJGR9vPOa+OzxfeREE3Ui8v7Wxp9jY1KNgvcfz/w3vdujCW5+/e3n197rfbu/H4flYaNR49ZOLxtQW3cSjEgUO7yi8U+iHq4wsLA359y62rsUa3iwgUYESkBqH5Qp4jWy4LHyAjec+1n8SO7vtgqMqg7EWIN9CFhNfHY2TQODIbX7V6dxE8m4VgNVJdU33CqkMSov2TGVdtUYvXZ003sTs/17mdAMDomMFXKdMSALGlfY5QBqaMfV62iUHeRSuoZ8bxEHZXysrGmjgvaceBaq4jVOgI4ALgu/MTK+mmFUkI5oGP25VIpqBXjy8XqKF5EQ6xOO2UUFmqYm6xh0Cv29rV7i0CxuodpVUuNedIFKQulZVm9rQtPzH22ihZ2itXlcACt0cHL9gG5sHI0AKDRQLWZgONpNNFLFC1sSgHLi98JWc1ZXS5DLc/WEb6EUKbq6LONYkA0ndUik1YdsYUivvUt4NbxM+obumJ10+qeCAGwVErEdlZ7HlY4CWVNPwYknbW6Y0DqdeTrHtIa8SqOn1B//3JndSNmJeaQ1pKx8HOtFBtqEsSE0yedxn37vos/+vMkXr/3AbXNVMe5M1O6V8Xq/lrLWR21K+HYesJHWDykWJCYmwOkFMg4FKt7mf4BgflKsuWims3ZWgUW4ftq9UfHfaYlVus4q5PWyhgQA1nYfVm5TKy2tcXqpF1FsbrK+xsNABIiYcX7LJJJ7M3M4vSFUKwen1Xbe/386utrPz9yJP5+PA8ZpxItigIAlCvQXsm2YRkc3Dhu4k5n9fXX6+8vFE0eO+7hyGgYL7JRPgtDjIwKfO78VXjhwUm1wYCIkPIbyqFXqeDipMC4KbE6keietOplwSOdxiuveArp+gIwNdXapkU2i32ZGXz2iT042B+21169bjsORpIFTOWTQLWKZkOqTHjN/5mfCou7Fwo4c1ZgV2qeYnUPMzputcXqWdvI6g0n5XavvKtWka/5SKf0xGo/UUO5uFoMSMwC3I4Dd7WijSac1XYN5arVXjUOVTcq7ZRj97udwF5RPw2IdDON/mwQIONUsDRbxexkHQMUq3sCitU9TKEANfOk46yudzur66WaVjHE1ZzVpbLQzqzO9lvI1fyu+IOmFBC2geJny3KgAWh1Rh0bK1y1pbK+u9xOSJUDHR1vrYai7gwsAGQy2JOew+kzAn/918BdO8NCeDpitWupY13urC6Gzuo4BRZXiQGpVZpwrYZeZnU20R0DEi3DSsafBLBdCzW5MrO63LC1xGo35XQVWJydkRj288bE6uePnsTb75vGLQNPqX3GFeiW07ksu6fF6jRQLmN+oqQ6IboDB99H4NRRLEgMDTZhiaZyVnNA0rNYqUB16EOxulBKqEnhuG7dVe4z2tEa6Lgedjqry5Z+ZnW22TUxXKtbcCyNAsm2rZaPNroHIwDa13LXjTcplEzCTTRQqQg88ABwZCgUqXpV9Ii4917lpv2lX9KbDPM8ZJwylpbam8oG+hrkOWDXLuWqP3wYGB/X318qBcdq4KHjKhon2raV8Ps8fOKeP8DvvvbzaoMBsT6dVBmyKJVw4aIw56wGuqNAelnwEKItrJ86pR5121Ymg6v6J/HtqR3YH1xQ23q4XzSWKWGylEV9eh62aKh7lm4MSNppO6snEnRW9zijOxxMlTP4L5+6Al88ts2IWC0Cv7tIcuSs1tlt2OeqlLrHsLIWOqvjjBfDuI7lOdj1cl1LM4JlIXAbKNXtrvHyUtlWWkHcFY3uKjGvUM5qrai8dBppp4z8bAXfeySBqwcmeM72ABSrexhdZ7WftlUMSIfjq1WgKW5mdZSp2+kqjmJAdMTqPgtLtfYAulIKRUqdzsIqjjfUakqo0DhWxxVKrF4m2Osuz245tjscwIW6q9/HTadxIDuNj39rB86cAe4afVht1ymw6Fiodx5ryFLJVs7qGCLoam2rVIK2OJPqd5DvaFuo1VS2tE4UTGBfMrNaR0fJDiTUeRB2bGZmoPJ0DcWAWELif/z4g0o/SSbNLac+eFA9Dg/3rJA0OAjMVVRW8dkTNeVy0T1Wy0IyLXCxmMVofxW7M/PMrO51wv+NLIZFymRTr2if76uVK4X2tSBXCgu46sSABNaKybtSWSBp6wmVfVl0OatbAnPczn1Yx6HaSKgYq050XTnhiO59r3wI3/sesCO5QWJAtm0D3vUuJVjqEInV+fZ1ulwJzQEUq3sb2wZ++ZeBn/kZY7m6ezOz+JV/8R04uXCFQX+//n43EqkUXr7zMYiLF1qvDexSOauLRVyYssyK1Z3F/3pZrAZWitW6EwGWhSvHF7EjuQB/4aLa1qN9QwAY6ytjspTF5LEFFf9g4P/lpZ22s/qCQ7G6xxna5mK2nMKHHzyI//HaTyqjkG47iP7fXc5qT+/SFRZYXC5Wl/P1+BPZrqtWyOWX7bPYVP0NjUicwGuqVf4d4+XZQqC3onG1mmSICjdq9L2z2Zaz+sv/nMKLxp/ccpPCvQjF6h5GN3snSCfUBaLD8bW02ERGY5+tYgFdmdXQzlDMDtrIVYPWsZ46m8C+zIx2niwAozEowCViQCr67vKWYzv6bBsNbVEVQEusfv9nX4j/9OsSohp+HhoDftu1VAzGMrE6rzFb6qcSK5yEJiZCEkkPTSm6XPsSelW51yqzemDIUvnia+SsBtBe5mly8OT7wG/8BvALv2Bun4ZJBG6rKOiJJxvYk541MnAIMg7O5AcxnCzizQe/oTpgPTwo2/IEAdJOBYW5CnI5wBHhORz3fPA8DPt5zMy1u1PTSz5GfL1CXa0lxB332mJFPwu7rw9YrHWI1ZHArNEhd12g2uh2zgAAqlWV5x13QBJes9549UN46CFAFMM81V4Xfkzheci4oVgdTiqUq9bWzKze6qRS+PBdf4IfOPI4MD2tti0v4rfZ2b5dPV4IxWoTMSApqJV3xSIuRs5qU4Liy18OXHON6g/v3Wtmn2vF8LB6vBgKywYEmqt2F3Cwb0q5LoCeFmrHBquYLGXx2c8C1wyeN9K2skMOlmo+GktF/OMjQ7h+6FxPfwZbHbs/jXozgUpV4FU7HzaTix+NBTrE6oa04AQa9++wwOJyF7Qyd8UUlm0bgV2LFhy2KBca8Cy9/kbgN9Uq/07dqJ5Qx2pYrC6WLZVIoOWsrmBuqo75nIWx5BLP2R6Avd0eRs0QacSApEPxr0NQnJsXGPAK8WNAlhcLAFCuWNqCYrrfxlJHEbzjZxwcyF7QG5B5HgSK5mNAXIFa+RLOap39RoUbO+IqJADL0RQq02ncMHQWb77yQdxy3Y1qm+dpuX0Gs3XMzKRXOqvLjnJWxxGrowKLXRmt+nno8H21NKrDWQ1Ab8LicpnVGve1/mEbC9Vk21k9J1TxN5Ni9WS4lN70DTibNbs/03ieqvJcrOALX3Fw37YnjXwGyX4HZ6cGMDy4gP9w89+otm+oOjlZA5JJjAU5XJxo4pPfA9545CG1Pa6TzPcx4p/HzHwCoZSC6UISo2NLejEgSUstIe6KAUkgSOiJ1Zk+S8WAVKvqfiibqr1qTLC4bkc0Vse1v1Gqqmtv3AFJ5BxdWMDu3eqxa/tmx7aRdmtYqrgq/9u2jUzgkg3I4KAqjD052Rb/OjORtwKdRSsBI4JqOmth9pwHlEqYnLYwumsJSB3Q3i8AdXw/9VNqQrDX+wTLJz50CsOGXH9VFf9l5i/bG3p4En9ssI6Hz47gbz8yji/f+d+BpP7fPzhmY66Swke/vg0vOXBeGRkofPUu/f2oNWew3V1Aq1CEKbE6LOitxreuXgSj48Cz6suH3ygVmvHHy66LpJ1Hsdh9jpZLUvU3dJzVPlBqdDirpWyv6Iv7OYTvk5XQEBFSKFlIuRoFFjMZpJ1JfPXRIdy4e05t2yrmiB6mx++eW5tCydKKAXHTrnJBd4i18wtCZbXqxoB0OasNuF9TPpodec1PnfVwsG9aW6QEAFluX9Gb1brq8OuIypGrtuNOUa5aapbQRBZ2R4FF9Q29itRIJnHL2Bn88R1/2r4Ba3aYDu0q4cnc6MrM6ooT21ntpewVy95NONbheSr6Jfx/yaq+WG17iZXO6jAGROejbbnAI2f1rFDOat02ALQFnnPn1ONWW9rk+xgJljBzoYavPujhjvHjZpzV/b5yVsvp1u8hPUwyicMDF3D08QT+/M+BH73ya2q7hlg97OcxvdA+R6cKSYwEes5qN2mvnLwz4Kx2kk47wqkQOpVTKa3JS9eFKry8zFldytXU8cYdkAwMqEdVvXTridUAMkG9KyJNOasZA7Ll2LFDCZ4TE+qakEptvUH0jh3dfSETmdVZSxllikVMzyUwGiyZ7xv1ulANADfc0P06inbTwD60H9cOTrQ39HCfc2ykiY+evBEvv+IU+tyykXNrcNzDbDmFrx0bxr1XhrWCKFb3Lp6HoVQZh7KT6n6rOYkPoP3+SC+I+nM6YzrHgW/XUCl3O6vLxWb8voHjIGlXW5p61z41tY3Al8pZHYrVzWodAqEOE/fa6DiqVkqpuyBkoWypRALNGJDvnhnEoeFQrO7h69ZWYQPcQbcuhZKlVWBR+CtjMOYXBAY1xGo3ubICqwmhdnlkx/FzLg5kNcXqsLptrdJsLXVuzRKaEKs7JgFKBtzltoPuHGgDLnAASoRY7qrV7Igd2lvFEwtj3c5qKVGuJ+Al6rHabCsGpHMSoKKfBd6atCip/1dxqaFXLRhhpMTyApP1OkoNB0FSI59y2ZKxmammcmOYGJRGS2ijz3erdZr7+rAtWMRXv+li13BZtVMDwnIwGCixunI+3LDFPteNRhDgmoEJ/MO3BjA8LJGthfmvcTukoVg9k2tf86YLSYxoZs0L11GTbF0xIPqFGzudPvXFAhKiqS36uJ5Q/YJlYnUxV9cTqzMZde0vFID5eeUuTibNTN5tEDLJRlcdA4rVWxTH6S7UuNUiQADV5nfvbr820C/aNtbERKEfKJXC6MXq1hQnstm2c/2668wI7IcPt58fOtTTfaOxbRYeX9iGFw8dVRsMtK2hHT7mKilM51yMuWG9hR7+DAgw2l/Fob6OcbJuvYEggEBHjZTOotNxsW14Vr1r0TjQUZNMQ6wulrr/3kpZ31ntB0LVTwv/9sXpKvrckra7PGlXUcgtE6tLCTW+1yyweHRyCHsyoVjNc3bdoVjdwxTKCS1n9YqsJABziwkVAxLXWZ1MrBIDYqA6/bJjfeqsp8RqnQ6DEPDsZpcAWio0tQv2OX5ihbO6VLHUfnUyqx2BqVLGvFgNtCMajh9Xj4ODWrvbsa2Jc4WBbrE6vBEJ14l1g/eynso97ZwEKBtoW56nZmCL6vNcmGui340/YQN0TAR19hYaDdSaCTiuRucmjKpoltTnOjMDDHkGinwAwNhY9/9lq7my+vownszhb782iNuuNNcJGdiZxPdmd2LECkVPOqt7myDAtYPn8aGv7MJttzTUddbVWJbpuhgJ8pjOB+1J0bqtP4EbHU+ns7oa5vzpTN6l0xBCorGYR2mmoMRkTXHGccWqmdXFXB3JhIZYLUTbRR0V/tpCrmqgQ6wO77Un5gewMz1PsXor0inUbkWxGgDuvLP93ICovHePxKn8EFAsGsnv39C84x3A3XcDb36zmf11ttebbzazzzVibH8KAk280H9QbTDQBjJjSeRqPqZyAUYTYf+QwldPs2O0hiMD5gq4wvO6Chc2SlW1uls3BiSxSgxIUcaPAXEcBKuI1crgp5dZnU6HdQHC8fLsxZqKt9QplO26SNmV1uLAiEJk6NAQqzNOBScXB7EnWIP6TiQWFKt7mEJZ86RbRayezyUw4BbjZ1YnE2ppcqegWE3oZyh6HhKiiXpJieATMx62Jxe0b+x9QRWLHYUbWxdzzbziFTEgtYT2Bd1xgRf/7XsxcV4t7WlU9CNLWmzbph6Phq4BTbHa8l1YQqJe7HAWR59HzBuQCHxIoKttlStCX5zxPKSdcisBZXG+iX4v/jkAYNVzKxJqdAo3wveRdcrI5dTL7zyRxNWDE2Zulq4LDA21X2+1G3B/P7YlF/HZR8Zx7Q5zYvXbfiqFF28/rmKLDO2TrCFBgIN9UyhVE7jturCnq+MsFgLDmQpmyun29SDK49O5brmuynvuyPkr1pSbRGu/mQxG/DxmJhsozpaMiNUqBmQVZ3W+qdeHAdpRICdOqMetJlanml0DvS+d3Y8Xjz9JsXorsmdP+/mOHet3HOvJLbcA//JfKvfvvn3auxvbYWOymEUtV4IdFdvdqmJ1X5/6bPv6zOzPsoA3vEEJ1bffbmafa8TAvn785JEvqZhMwEj/WKSSAATmSx76q6Hwxf5hT/Off+xJvGz74+qFieuA7yPjtIskF3INFZWp6az2E7UVYnW5JONHdlzCWV024KweGLJULaaweuPsVANDfl5bsE91TAJEFMq2nsnTspDOCEhY2NM8qbZttbFyD8Lebg9TqNgqeyfuSeetEgOylMAhP76z2u0L1KC0I9houhDgKn9SO6oh685jaQnwS4CfqCkTqOaNfSBVwXwliV2Rs7oE7fyllli9LAYkSGg6q12BYt3D3KzEdgDFglQXXZNideRO0xSr4fvYl5nB6QkHrVI0kQMw7mzp8kIUAEomikn5PtJOBYW8xBBU7GmfW9YTUIIAQNN48U74Pga8AuYWExCLQK0KDJuKAQFUFEhUnGmr3YD7+jCeXMTEYhrXbZsCJmFk4OD5Ah/64b8DLoRuDA5GeptUCo7VxEv3n8Xzr7KAz0M7BmMkW8HMCVVwtmIFcK3wWqApVgNoi9X1Oop1F4Hb0Fuamk5je/IcJi4I9M+VkbQT2n9/wrNVLNLyyuxLDb0YEKAtVp8MBw5bTazOoOWsnp0FXKuGjFthgcWtyB13qA7M0FDPi39ryt13qy8DKEERmJ4Ghj1DRdVImzvv7HbD9yhiZBi/98Lfa28w0Y+zLMC2IWt1WJWSuf2SNcMdH0SrYp+JMZJlIe3VsFT1MF6pIJ9rKl3HgLO6XO32m5ZKiG/Gc10lVpe791kshoYxJ34fsW/IxkIlCRRUFM7sVF05q03EgKxwVtsqykljfJ/ps+BaNYzXz6m2sNXGyj0IndU9zHzRUy7ouCf0sqxeAJjLOVrOajvtq0FpOEMGAJNLKYwnc9pRDRmnglwOeOIJtIPtNS8SA6ka5ivJdgxIdDE3HANiIrf74M4KXjB6olVDqlCAdrZyi0isjtAVq10XezKzOH2xLUzX8hXYohm/vQaBymjtclYbyEP3faTsqnJWS4mFBaliQExkrJsWqz0PA14R80sJfP7zwF1XGi6G2FnhfavdgPv7MR7k0OeVsCtpOIusc0l2lA1OepNwdcGnf+CP0G+FSxgyGa1dDvfXMV3OAOUyZiYbKq/asvRyP51lmdVhJn7Sa1z+fU9HOo1tyUVcmEpg+kIdGaeifX0R3srIEoBitQnSaagCcJUKvvJliZeMP6G+QbF66+F5wA/8APCSl2yp3PY1JQgwlszh6MkkRrzwfkCxeusxPNz92lAb8Dtr2CQSXBHT63SuPjW0wiAT1FqrowpLTX1ntePAT9RQrnSbFlTMaS3evsO4klK5e5+5vIWsU9Jqt16fr0yOoW40NyNVLSadGBDHQSo0oXVSqoaJBBpxjOl+G7vS82plO8D7QQ/Aq2YPM1NMYtjPa8WAOFYDtUIV0aVrPu9gYEgjrzcSuDrcrxfzaYwFOQPO6jJySwKPHW3i8JCZJVP96Trmq8l2DEgJYWZ1fKHOCSJndVuwL9VsZG09AfT9/+osGo8WMT+v8qWnZhPq/2+ic7NcQNMVqz0PQ14BcwvtG0J+voa0U4l/AwoCSKjJleh2aSRixrKQ9uvIV12gWMTCglAxIDqDPd8HUFqRWQ1A71htGwN+GfNFHw/8UxMv23UaaMCcsHz33eo45+aAm24ys8+NQjqN7alFXNN/HqIQOqjWQqw+eNDMPsnaMDQECAExPwcsLqptms7i4cGmigGpVDB1roIRf0n/nF2eWR06q7XF6kxGidWzLj7xd+N4/YFPAukrzR5rSKlgIAYkEhGi6+sWE6szGWCpqpzVRx9u4rqhc6pPoFv4iRACJJPYmz6Fbx4fwmhUBG+rTeQTdY/q70fLLWSoDQwOClQqHf1NXrd7myNH1AoWxwFe8Qoju+wskpxfksac1ZVV86VjitWRs7rSPX5dKlrI6K5Ejs6lKAZkRmJQ11ntuioGZNlnIJtSicwaQnhm3xD2pEND0+goV0P0AHRW9zDlegK+XdeKAQkSNZTy7cHtfN7Ru0gsu+gAwMVCRt9ZbVnIpurIVX089r0qDvebWVI/kG1gvpIy66wOnG5ntZQo1cKCWjodEc9Dv1vEwqLax/HzvioyaUKsHhnpdvl1zh7HwfMw6BUwl2vf2E6fktidntOKARnyC5ifb28qVw0UWASQjnI/CwUsLAr0u3ozxatlVsuamYKYg6kK5qtJnDzexP5UR1VqE6RSypn1Yz+29WaLLQv7d9Xwkbv+GJgynB/YKaAZyNEka4htK7eulMCZM2qbpljd3ycxX0li4kwd//4/JjAamBGrHavRquOAeh2luovAl5d/3zPY7/ZsHo/PjeLBJzK4Z+dR/WtBdM1f7qwuSH1n9fJJtauuir+vDUhmwFYD3UIBjx9t4Kr+ixTTCDFFEGBvZhYPnBrFiL2g+skUJ7YmneMiQ/3jwdGwPwCwXW0EbBv4kR8B3vjG9qouTTLJplodVS6jkJfK1GXAWV2pLnNWR2a8OGNw10WQqK2IAckVbGSdst64doVY3VTOap1+TBQDUuz4DKQEZJhhreGsPvDC7fjlm/5OvaD5qCegWN2rNBqAhBI/4zo1fR+BXe0Sq+fyjiogEfemGUU1dDir8zVXXXw1l6VmswK5qo8Hv9XEdX2nW79PByVWt2NAphddjAQabnUATmB3i9WNBsoNB77b1BarB7wiFnLqtDx+ITAnVtu2mi2O0HWneR6G/AJmc+3P8YknBQ71TWo5q7cnFzAx076JzxQC1V4121Y6FVYjzuexmBPoc0vanQUAKvojdPzVKg24VkP7/zWQqWO+klLiv3tRbaQ4YQTR34ed6QXgYvi5anRouhgfbz83tU+ydoyMqMcoWkJTrBaB+p9/858TSLp1vO2qr+kPdqNcwlIoTjcaZpzVALaN1PHh47fglXseU7cs3WONrqXLKv4UCzL+stSITKYtWN94IzA2Fn9fG5DMsKfE6lwOTz4FXJGd4v2AEFMkk3jtnofwmRNXqLFBMkn361blllvUvfDmm7uLmWowtM1ri9VbzSBCAKgiyUtV5axeWBRmCizatZWZ1UWpzHg6zurqMmd1KYGMo+msTqVUbMmCMnedO29hPFjUOx9cFym7gkKns7rRULXNNeN2vCMH8NLtYdyaoesA0YNidY9SK9bgWA110YnbcfJ95awutKul1moCbqIRXwROJiGERCMfitXNZltU18nnBJDtEzhf7MfkJLDPm1AbdcXqfuV4ixywp2dSyv2r46xOOt0FFut1lOqOKnylQxCg3ytifjESq1PmxGpAVeV+0YuA175W+38VOatnc+2b4hMnbCVWa2Ssb08uYmKuLfadnB/AvsyMtlidygg8Mr8DzVweC/NNlVmtI1B1tvcoYqYYRcxoitXDCcxVkqiWGvCqYSeX4oQZovgbGQqAppwuV18NvPWtwAc+YGZ/ZG2JxOrT4aRoNqu3P9/HgFfEd486uOfWeVzRZ0BQdF3VwS+G9+9aTd1ndJ3VALaPNXC+MIC7+x9UGzTF+suJ1cm4Tp9O3vQmtSLkrW/V288GJDOWRK7mQy7mUClJtdqO9wNCzBAEODJ4Eb9w46dxZGCCguJW5s47gd/+beDHf9zYuGtwdxojuwNg927g1a82sk+ysUinpJpwLpXwDw+P4yXbn9CPAbHqKNe6x/HlCrRjQEpVuz0+ApArOsi6+s7qfreEhVklJj/4eAo3Dp/V68fYqpBisdNZHWkyuv3NVKodP3fkiN6+iBEoVvcosxdrGNLJqwYA34dvd8eAaC+RCALsSs3j3JS6GJbmSvDtmtqfphvhRdcv4v0P3otX3jzdvugYEKsXqm1n9em5NPakZzVjQFY6q0sNA2J1Oq0u6Dn1OT510bBYbdvAm98MvOY1+vtKpTDkFzC31OGsPuXiUL+Gs9pxsD2dw0Qu3SpWeGqxX4nVmp/BG140ga9cPIj/83dumFld0h+URO29Mw9dN18bwP79wIPTe1SuWRS3wwGUGQ4d6n5tSqwWArj9dhZX3ChEYnWErnsilcKu9By+9GAS+4YNuaiiIjqdzuqGi6TfvPz7ngHj2wSSdgW3jR5XG3SXu14qBqRoSKxOp4F77tmSy6iDkTTKdQdPHrewYzjsc1CsJsQMiQSwcyc+8LxP4vmjp7ZcJj5ZW66+1sK177gD+MVfBK67br0Ph6wDmaxa2VsvVPCPx7bhZduP6ceA2DWUa91jzVJZxF/JJgSSgUSx4Xb145ZKthFndb9XxMK8xEMPAVdvX4BtNfX6yL4fOqvbMmajUFZ51SZWt77vfcp81FmPiKwbFKt7lJnJBkZ0xeogaDurpUS1CiRkKKjGPZldF/v7ZnB8bgCo1zF5poLxIGdkEHnb82r4/Ts+jB+99RE1s+d52g7ggQF0O6vnMtiT0RSrlzurGw2U62EMiA7pNAa8IuZz6thmljy9AptrSTKpnNUFrzUL++QZDwez0/FvwkJge38R5wv9rYmAqWJaLaHTFIB37QJ+/oZP4wsPpLCQs/Sd1cBKZ3XJjLP6ppuAf5rcj339C0q0t+3ebAMbkcOH289HRjgw3ars2tV+7jj6kwyDg9idnsM3Hs1ib5+hIl2uC9+uoVIOxeqowGKg76z2+gP842t+C14izNk3EAslpVjprC5CP7N6q5PN4vt2PoZ3fvgOvOQ6FoAjxDhXdhSYpaBIDHLffWb8QWTjkslaWKr5+NLXHbxw7zkl1GpnVtdRWeasLpUtNQaNue9kSqBY7xarc2XXmLN6fk7iYx8DXntNGL+nI1YHwYrM6sJ8FSm7YkaszmZpPuohKFb3KNMXG0qo1Mw1Gk/n8aePvwCNcg1PHJO4IhNmtcYVl4XAgeEcTiwNA6USJs/XMZ5cNON46uvDffu+i32N43rH2EH/oNUlVk8sprE9uah14bWTbrezul5XzmpPX6zud4tYKDgoFSXcREOZd005q01i2xjM1jFXVq51KTtmdTVcdDsGS5go9gOlEppNAFKqz0BTrEY6jVtHTuIbR9M4M5NUOdiaYrVlCTSaYqWzWvP/ZY0M4e4dj2OvFxYZpTBhjs5s6bvuYjblVmV5kT7d68vwMHan51BvCGwPQkHRQA60Z3VkVkdxUybMxX19uGW0IwJF9x4T9VNWOKuFGWf1ViabxQ/s+zaemu7Du15zSm3jPYEQc3TeD268cf2OgxCy6ciM+Fiq+fjwZwbwxmseURt1tJ1EAl6ihnLdVlGsIaWKgJ+ox953kFwpVi+VQ2e1Th8uqcbcU/MOPv5x4L6rHmttj00QIOVUVhGr2d/cjFCs7lFmppsYCZa0HZX3v+SLeCo3gmMPVXD0oQauHphQA1ONwen+0TyO50aAYhHf+67EvsysmZmsyN11UVNQ72Bg3MN8NQkUCgCApoSa1dT4XAdHbUwU+7rE6nLDge9pOt5cF/2pGhbKPr78hRpu3xvmdusKKWtEss9BoeYBhQJmZ4GRrH5e1Pbhqvpsy2VcvCCxLVhU3zAgVvt2HRm3ihtHz6tKxJpikuPILod9qSxUJI6u8DM0hHdd/UW8dujr6jUjQMwhBPDud6vc9pe8ZL2PhqwXiURboLj+ev39hc7qXX052BV1rzHlrI4W8KBeR0NaSLgG7gedjpEox10Hz4NtNdAoLROrSxSrtclk8PzRU3j4h/4jgjprGBBinEOHgG3blFA9NLTeR0MI2URkxpKYqyTxzWN9uGPbCbVRR6wWAr4HlBtOKzITAMoVC0EivrPa8l00l62Qy5VcZN2Stljd7xbxZw/fhFe+QiKo5dR2nbGt5yHl1FCsJFqC/fSFutLNWOR+0/G0YrUQYpcQ4otCiEeFEEeFEO8Ot98vhDgvhPhu+PWqjvf8vBDiKSHEMSHEPR3bXxFue0oI8XNr8ydtDqanoO+sBmCnPBzITGN+stoWqzVF4APbSziRG0FjqYj/8eEM/tWVXzPmrAYAzM6qRwMDMn84jUrDBnI55HJAxg4LQ2pcePcf9jBXSWFyLhS8Gw0s1Xykk5rOaiGQGXSQq/n4zN818Ir9T6rtPZrTKdLhjSafxxNPAIfGQmFZ47MdH65jotAPlEo4eayq8qo9T98BG7qoP/jDn8PvvPCjapumCJxN1rvy0EtlYSSzGkNDuGX0NG7tO6ZeMzPLLEeOqHWZukVGycbmJ34CuPdeVXhWl6Eh7E7PYV9qujUxasJZ7dt1FQNSr7cHJSZW2nSK1bp51QDgunCtBqqFWtfmUoVitTaeB3ge0qJgtG9ECAnxPOD++4F3vGO9j4QQsslIj6XwxYkr8YIdZ2HVwwl9TW3HD4TSNjrE6lI1ET+zOjwmAbSd1VJiqeIibVf0+nCWhf5UDZ84fT3e+vqymVpMQiCZBAp1Vy1rBnDuHLAztUCxehPyTEbrdQDvkVIeAfACAO8UQkTlMX9HSnlD+PUpAAi/9wYAVwN4BYA/EEIkhBAJAL8P4JUAjgB4Y8d+yDJmpqXKrNYd5Pk+Bv0C5qdqeOQRiWsGz2uLn3u2VXFscQx/9+kEbr86h2G/YEZQXe5oMLHPTEY9Li3h0aMdMSg6F0nHwVuueAAffvxGNaPXaGCmnMZwuvz0730arEwKDWnhi19O4MWjj6uNutnKa0X4GcpCUYnVI+Hyd42bsJdxUW0mIEtlHP1uDVf2T5oZmIfHuj+4AK8ciuqan+vukRLO5gdazup80ULaqeiLSQMD3ULq/v16+yOErCSZBF796vY9Qod0GlcOz+GDL/r/gJmZ9v51EAK+L5R7pliErK2RWJ3N6u/P8+Am6qiWuosMF8sWM6tNELXRaNUZxWpCCCGk58ns7MPJpRHcMXysLdRqCqpeYKm+YeSClhKlagJ+Qk+sBtAWq+t1NKVQq/k0zT39fRLXDJzH4R25tqFDsx+TylhqdXcoVp+fAHak5mmO2IQ8beuTUl6QUn47fL4E4DEAOy7zlu8H8BEpZUVKeRLAUwBuDb+eklKekFJWAXwk/FmyCrdcsaCEZd1BSRBgwC1ifqaBU6eFiuzQFIG9rIebhs7gp39tDD/5mjOt36NNNgscONB+3ZkvG5dMBiN+Hk+dcfE3/6eBV+98SEWA6MSrCIFbdkzg0fltSqis19FoWrBdA07NdBq5qo87b84hKIfirwkxYS1IpZBxy8hPl5RYPTSntuvcKHwf25OLmDjbwAPfFHj+6EkzbSsSpmdm1ASD52mLPnvGKjiTH2zdKCfmA2xPLug7qxOJ7kKA+/bp7Y8QsrYIATEyjD2ZOWXvAIzE93iRWF0oYGFeot8tmYmF6rz/LcuZjoXnwbEaqBbrXZuL5YQq+MPBgx7RqjOK1YQQQsiGIbNDjeFvzzyihFrb1jZJWIGnIjuinLhGA+W6jcBtxO8jui4k0O4TRo8G+m83HSnj/ud9EpieNuOshhKri53O6gsJOqs3Kc9KXRNC7AVwI4AHwk3vEkI8JIT4oBAiWku6A8DZjredC7ddajtZhVdeP4ED2RkzYrVXxNxME7IhYQmpfyInk3jv9Z/FrYcWcXgsFChNXRxuuaX9/O679feXyeAnDn8Zv/XV5+Mz/wDcs+uokYHezqESzhX6gUoFzVoDQkgzjrdMBu++5gv4lTc/qS7oltW7A9NUCtuTC3jqSanE6r5JtV2nLQQBjgxcwKOPCXzvkQSuHzpnJrM5GuzPhxMABtzqu7fVlFgdzmyfm09hZ3peO2ceAHDbbe3ne/bo748QsrYMD6vHyOliIsYqaDurp6YFRoOcmesLAIyNqccrr9TfVxgDUistE6urCcaAmCD6X0WDvF7tExBCCCGkRbovgdHkEg5mp9SGwUH9aEvfV5EdoVCLahWlhmYB7tBZLSuhSB0J4QZWxu2/ysV9+74LnD+vokt0TYMAkpkECvW2s/rcRZvO6k3KMxarhRBpAB8F8DNSyhyA/w7gAIAbAFwA8FsmDkgI8XYhxINCiAenp6dN7HJjYmjmKRKrz01YSPn11jYtBgZwZOAC/urdX2tfKE3lKt92myp49aY3mcnS9Dy89orH0WgAP/zKBSTtmhHxc3S4iclSFigWMTcrMeQVzDje0mm8+9ovIJ0LiyumUvo3tbUilcJPHP4KfuWDO/Doo8AeJzxmHSd4Xx+ODFzAA99x4SYa8BJ1M20rlerej4E2sHt7HafzQ+0lSAsp7DDhrAaAG25QItKLXsRZYkI2Anv3dr82MCHmpxIoN2wgn8fUbAKjwZK5grvvfS/w9rcDz3++/r5cF65VR7XcXbehWLUpVpvg2mu7X1OsJoQQQnqeRAL46js+1B7Kmyhq7fvKBR0JytUqSnUHQVJDL/A8ZTooKLG6UaoiYTXN9N+i2ksnT6pHA32YVJ/dlVl9ftqls3qT8ozEaiGEAyVUf0hK+TEAkFJOSikbUsomgD+GivkAgPMAdnW8fWe47VLbu5BS/pGU8mYp5c0jIyPP9u/ZPJhy0AQBBr0Cjp10MdYXOr50T+QoW3pmpn2hNCVW+z7wkz8JvPjFZvYHwO5L4Y9e/Bd4z2vCgnUGLpJWJgUpBVAoYHJKYCzImXFWRwLHhQvq0USe6lqRSuGl25/Ajmwe738/YBfCLGidY+7rw5GBCfz2J/bj3tsNZb8CSvDvLFRowlm9RyhndZi/dW4hrZzVJtqB4wD/9t8Cb36z/r4IIWvPwYPt52NjRq7dgwMSs+U0UCgoZ7W/ZOb6AqhJxec9z0yh0dUyq6Vsi9XMrNbj8OHu/xPFakIIIWRDcMXhjn7b8vpccYg0lw6xutxw4Cc1+nOui5RTQSGn+nFLczVknLIZsTrS8556Sj0aMIy5GQ+1ZqIlVk8vOBg2UeuN9BxP26qFEALA/wTwmJTytzu2b+v4sfsAPBI+/xsAbxBCeEKIfQCuAPBNAN8CcIUQYp8QwoUqwvg3Zv6MTYhBsXrAK+Kx0wHG+wy5oKML7eyseWf1WhCJBpNhTIWJgV4yiaRdRWGmhIsTTYwlDS3PjuIqTp9Wjz0uVgPA773hq3jD6yWwtKS2a4rV1w+ew2/e+xW87wfDm5qpttU5+WXAtb9zn6OiYPJ5AMBkPqnEJFPOR0LIxqEzW/6aa4ysiNm1vaGKuBaLmJpLqPuMKbHaJK6rMqs7xepaDdWGDcfTL86z5QkCNbEAqLiZqJ9ACCGEkN7miivaz02I1ZHpsEOsrjZsOL7G+NN1kXXKWFpYA7E6ijKLdILOIt9xibSBUIeSTUNRt6TneCajnjsAvAXAw0KI74bbfgHAG4UQNwCQAE4B+AkAkFIeFUL8FYBHAdQBvFNK2QAAIcS7AHwGQALAB6WUR439JZuNqFqqoRiQExeTGMucb23TIsrmnJ1tC5O9fHGIYikisdpEBnIqhZ2peZw/JTB5UWI8yJkRwXeEMe65nHrcAGI1CoVWoUl4np6Lrr8fvl3Hjx75BlC+QW0z5SLrdFZ3FjCMiTOYQaVhIz9TRhqqbmPCkuYyZQkhGwfPU9eVxx5T8T0G2LVT4mxhAChcwNS0hRv9JSDoN7Jvo4TLR7tiQKLsbrqqzfC2twE/9EPqvssJUUIIIWRjcNVV7eeGYkAAdGVWAzaEp9Hfcl1k3RJyixIAMD/TUEW9TfThIt0owkQtpg6xem4O6PNC4b6X9SgSi6cVq6WUXwWwmkXoU5d5z68C+NVVtn/qcu8jHRh1VhfQlBbGU8oBqn0i9/WpwVIu1xZVe9lZHUU+XLyoHk2In2kV+XDu7AAmJ6FiQJL60RLYsUM58qS6WfS0WN1ZtNCEq7pznwsL5otJdbrRjhzR3186jX93/afwjr++C3/87wBfhEUpuESbkK3J29+uJu8MRZjt3JPAucIAkH8SUzMCo8klM5OtpgljQGqVtlhdnK8gYF61OYTQqwdBCCGEkOeeTrOUiT5cEEAAaJYqsBAVRbT1hGXPQ9YpI7eoVsJdvAhsSy6a6cO5LrB/P3DihHq9e7f+PjvE6ocfBq4bCwtYUqzedHBtZq9isMBikKjBs+sYc2bVNt0Bj2W1ZwbPnWv9np4lOlaTYnUyiZ2pBZw9JzA5LdTybBP7dd32chnASLbymtGZXR6J1bptK5tVg/J8vhWvYaxtRQXQkkkznYVMBm++4gE8NdOHRx9pYmdyVh17L58LhJC1I5k0JlQDQHrYR77m4fx54PhEoAos9uI9wbaVs7oKtcQEwMXzDbXiiGI1IYQQQrYqQgD/+l8DL3uZionTxffhJ2qo5NQKtuJiDSmnotffcl1k3TIWc8qfevEiMJ402Ie7/fb2cxNidShKy2IJDz0EXDsYpgf0Yh+ZaEGxuleJYkB0BdBkEkIAA0EZ440Jta1zhi8ukVBZr6vHXp7J2rmz+7WhGJAjAxN45HiAY6cDHMhOmxMpd3XUIe1lJ1U6rW5ipVJ7IkDXWW1Zah9Smp1cAJRY/Z73AB/4gJn9BQEgBF40+gTe+54mXr7z0dY2QgjRJpWCJSTe8IcvhSeqyuXSi85qIeC6EtWmHS5HVWK1MVcOIYQQQshG5YYbgNe/3kwND9+Hl6ijkq8BAGampSouqO2sLrUWzF+csjAeGOzD3XorMD6uxHoT4/ogUJ/BUlU5q7On1HaK1ZsOitW9iqkIhPFxAMCAk8d4JSzaZ0Ks7iwmlUj0dsGfTvEXMHORTKVw68gpfOOJQRy/mMT+zIw5UfWGG9Tj/v3A9deb2edaIEQ7h+rkSfVoQlyP2lIkVpt0Kh86BPT3m9mXZQGpFO7a8Ti+/o0EfnDfdxgBQggxRyqFsSAHS9bxiTf+JQK71rMdcccRqDYSrYI/FyakcuUws5oQQgghxAyhs7q8ZFCsDp3VuaXQWT2dMNuH8zzg/vuBn/opM/tLpZCyK/jmYxl85zvA1UEYMdKjfWQSnx4sK0/QaKjiREKYyZdOpXDn+OMYE1NqfyZO5KuvBv7+79Xzq67qbffU0JD6u6OquYac1f1eCXN5B4fGFpSZ1pRQefPNwHXXbYxB/vAwcP58O4fKRMb24CBw9my7QFcvC8CZDF687Qn8zk+fxMBSEUiZiwAghGxx0mnsSp3Gke0n27FIveisBuAGCeWszueB/n5cvCDprCaEEEIIMUkQKLG60ACg0jhHdMXqdBpZt4QLOVUz6+KsjW3bFs2unDe58ri/H++57mP406++CC+/p4HUfAGwNXO7SU9CZ3Uv0umq1j2xhQB27MDvv/DD8O26ytM0cbHYv7/93ESxurWk0wEMqCKGuoSCwa3bz+GOXWfUNpMO4I1ysY0+1/NhVpQJZ/UVV3S/7mWxOp1G0q7hJ+/4nnrdy8dKCNlYDAzgZ2/8LH50z+eBxUW1rVfF6mQCtWaiVb/gwqSFcYrVhBBCCCHm8H34dg3lvIpinZmBclbrCMvptCqwGGVWz7mqD9erekR/P16x6yg++OI/xa++L8wuSacZxbkJoVjdi5gqrhjRmdlsIgIEUNEf992nhMU77jCzz7Xk5S9XIvW/+TfAwID+/sL/zc/e9Hn8yJEH1batKFR2TgIAwLXX6u/z6qvbz5NJc7Eda0G0SmFyUj32qJBECNmAWBYO7G0g45RVfYgeLuDqplxUmwlEgYcXpyzlrO7VgQ4hhBBCyEbD9+FZdVQKhsXqjhiQxYKNrFPuXcNBKqWc1OWy+gAARoBsUhgD0oukUsAP/ZC5Qd6ePe3ny4sN6vCKV6ivjcDzn6++TBGKkof9k4AVXhy3olh97bXAX/6ler5790rxOg7btrWf33OPuhn1KsvF6q3YBggha8fQEDA7q56nUj3rGnFTDqpTdkusPnHOxc7rFoDklet7YIQQQgghm4XIWV1sAgBm5hO4ws/rmRnSafS5JeQKCUBKyKZU3c1eFauFUGa2mRng3Dm1jWL1pqSHVaAtTDoN3HWXuf3dfDNQKinx+5ZbzO13K+O66qtaBebn1batKFSOjKhiCR/9KPCDP2hmn0IAP/MzwPHjwPd9n5l9rhWDg+pxYkI9bsU2QAhZO4aG2s97eOWGk3JRbdp44MEEGimgWpEYDZZ4TSSEEEIIMUUQwE/U22L1QgLD/ZpiteMgm2pgseJh/kJZFfQGelesBtRKeYrVmx6K1VsB2wbuvHO9j2JzIQQwNqYKAUave/mCvpZcc436Msnhw+qr1+l0gQM9LSYRQjYgnWJ1D3fE3YyHUjOBX/urg/jH/wTc/9pT6hu8JhJCCCGEmMH34SVqqBQbgJSYXnAwMr6kXQwxO2gjVw3w8z8PvPO276iNvRzlFsWEUqze1DCzmpC4dAqVQdCzy7PJGrJcrKaLkBBikg3irHYzHgo1F6enA/yv/wX8yPOOqm/wmkgIIYQQYgbHge9KlKsWUK3i/FwS48mcdk2TzKCDM/lBfOd7Am88+K1wY8bAAa8RFKu3BBSrCYlLp1DJAfnWZGQEsDouo2wHhBCTjI+3n3cWn+0x3KyPL104hNu2n8GrXw0MiTn1jR4W2AkhhBBCNhp+0kKp4aK5kEOlJlRsh6az2u1P4nR+EHffsgiRW1Qb+/oMHO0aMTCgHuuq0CT7m5sTxoAQEpdOESHKLiZbi0RCzeSGRcU4q0sIMcq+fcBb36omR/ftW++juSRONsDnJ67Cl1/6hwCeBxSL6hucwCOEEEIIMYaXsvGjn/kRnPytPPZlwyLcms5qZDLIumW87Mgk8HhBmbF6eVy7f3/361271uc4yJpCZzUhcel0Vr/iFet3HGR9ufJK9Tg+Dhw8uL7HQgjZXAgB3H57TwvVAPC8Fwb4+Mv/O25NPQpICRQK6ht0uhBCCCGEGOP7bpjGb77gf+O3/qQP1/SfVxs1ndVIp3EwO4XbBx9Xr7PZ3o443bu3+zXH4JsSOqsJicv4OHDzzWqJTA8vzyZrzA/+oCoGeeut3ZEghBCyRdi938buq88CuSawsNB2VlOsJoQQQggxxtWHajgy9TX82rHX4ZrsGbXRgLP6q/f+BsTkAfW6lyNAACWk33038LnPqcdeFtZJbChWExIXIYAf//H1Pgqy3gwMAHfcsd5HQQgh68vIiIpEmpwESiW1TXfwRAghhBBC2mSzEAL45dc9ihcuPQHYtvrSYWRE6b3Hj6vXvS5WA8B99wEHDgDXXbfeR0LWCNoACSGEEEKIHiMj6vHMGRUFEgRcbUIIIYQQYpJMBgDw9hsfxLZkzowxoDPeFAD6+/X3udbYNnDTTfpCPelZOIoghBBCCCF6RGL16dPqkcUVCSGEEELMEorVmJxUj7p51QAwOgokEu3XG8FZTTY9FKsJIYQQQogekVh96pR6ZF41IYQQQohZIrF6ako9mnBWJxLA2Fj7NcVq0gNQrCaEEEIIIXqMjqrHmRn1SGc1IYQQQohZsln1WKmoRxPOaqDbZHDokJl9EqIBxWpCCCGEEKLH2Fh3NfZIvCaEEEIIIWYYHOx+baqY9e23q37cm97U7bImZJ1gGjkhhBBCCNEjmQQOHgSefFK9vvba9T0eQgghhJDNRhAA27cDExPq9d69ZvZ7++3AzTcDrmtmf4RoQmc1IYQQQgjR5+qr28+vumr9joMQQgghZLNy8GD7+eHD5vZLoZr0EBSrCSGEEEKIPnfcAQwNAXfeyQEPIYQQQshasH17+/mePet3HISsIYwBIYQQQggh+mSzwK/92nofBSGEEELI5uXWW4GvfQ248UbAov+UbE4oVhNCCCGEEEIIIYQQ0uukUsAv/dJ6HwUhawqnYQghhBBCCCGEEEIIIYSsOxSrCSGEEEIIIYQQQgghhKw7FKsJIYQQQgghhBBCCCGErDsUqwkhhBBCCCGEEEIIIYSsOxSrCSGEEEIIIYQQQgghhKw7FKsJIYQQQgghhBBCCCGErDsUqwkhhBBCCCGEEEIIIYSsOxSrCSGEEEIIIYQQQgghhKw7FKsJIYQQQgghhBBCCCGErDsUqwkhhBBCCCGEEEIIIYSsOxSrCSGEEEIIIYQQQgghhKw7FKsJIYQQQgghhBBCCCGErDsUqwkhhBBCCCGEEEIIIYSsO0JKud7HcEmEENMATq/3cTyHDAOYWe+DIJsSti2yVrBtkbWCbYsQngdk7WDbImsF2xZZK9i2CFk7TJ5fe6SUIzo76GmxeqshhHhQSnnzeh8H2XywbZG1gm2LrBVsW4TwPCBrB9sWWSvYtshawbZFyNrRa+cXY0AIIYQQQgghhBBCCCGErDsUqwkhhBBCCCGEEEIIIYSsOxSre4s/Wu8DIJsWti2yVrBtkbWCbYsQngdk7WDbImsF2xZZK9i2CFk7eur8YmY1IYQQQgghhBBCCCGEkHWHzmpCCCGEEEIIIYQQQggh6w7F6ssghNglhPiiEOJRIcRRIcS7w+2DQojPCiGeDB8Hwu1XCSH+SQhREUK8d5X9JYQQ3xFCfPIyv/PTQoiF5T8jhHiXEOIpIYQUQgxf5v37hBAPhD/7l0IIN9z+YiHEt4UQdSHE6+J+JsQMm6xt7Q7/lu8IIR4SQrwq7udC9NmgbWvVnxNCvFQIsSiE+G749f44nwkxwwZtWx8SQhwTQjwihPigEMIJt78pvF49LIT4uhDi+rifC9la9Nh5sGr7XuX9l7p/s2/YQ2yytsW+YQ+xQdsW+4YbgA3attg3JBsCk+eXEOJU2La/K4R48DK/8xXh+fGUEOLnOrY/53okxerLUwfwHinlEQAvAPBOIcQRAD8H4PNSyisAfD58DQBzAH4awG9eYn/vBvDY0/zO3wDwllW2fw3A3QBOP837/zOA35FSHgQwD+Bt4fYzAP4fAP/rad5Pnhs2U9v6JQB/JaW8EcAbAPzB0+yHrC0bsW1d7ue+IqW8Ifz6lafZD1lbNmLb+hCAqwBcCyAA8GPh9pMAXiKlvBbAf0CPZbSRnqaXzoNLte/lsG+4MdhMbYt9w95iI7Yt9g03BhuxbbFvSDYKps+vO8Pr5s2rfVMIkQDw+wBeCeAIgDeGvw9YBz2SYvVlkFJekFJ+O3y+BHXh3AHg+wH8WfhjfwbgX4Q/MyWl/BaA2vJ9CSF2Ang1gD95mt/5eQBLq2z/jpTy1OXeK4QQAF4G4H+vcmynpJQPAWhebh/kuWEztS0AEkA2fN4HYOJy+yJry0ZrW8/m58j6skHb1qdkCIBvAtgZbv+6lHI+/LFvRNsJeTp67DxYtX0v+x3sG24QNlPbAvuGPcVGa1vhz7FvuAHYoG2LfUOyITB5fj1DbgXwlJTyhJSyCuAj4e9aFz2SYvUzRAixF8CNAB4AMCalvBB+6yKAsWewi98F8LNY2wHBEIAFKWU9fH0OqjGTHmYTtK37AbxZCHEOwKcA/NQaHgd5FmyQtvV03CaE+J4Q4u+FEFev43GQDjZa2wqXeL4FwKdX+fbbAPz9c3EcZHPRK+fB07Rv9g03IJugbd0P9g17kg3Stp4O9g17kI3Wttg3JBsJA+eXBPAPQoh/FkK8/RI/swPA2Y7Xz7bPaLTPSbH6GSCESAP4KICfkVLmOr8XzsjJp3n/awBMSSn/ee2OkmxENknbeiOAP5VS7gTwKgB/LoTgtWWd2SRt69sA9kgprwfw3wB8fB2PhYRs0Lb1BwC+LKX8yrJjuRNqQPK+5/BYyCagx86DVds32ZhskrbFvmEPsknaFvuGPcgGbVvsG5INge75FfJCKeVNUBEf7xRCvNj8kZqFnYanIZxx+yiAD0kpPxZunhRCbAu/vw3A1NPs5g4A9wohTkFZ6V8mhPgLIcTzRbs4xL0xj+8z4fv/BMAsgH4hhB1+eyeA83H2S9aeTdS23gbgrwBASvlPAHwAlwzdJ2vPBmtbl0RKmZNS5sPnnwLgXK6gA1l7NmLbEkJ8AMAIgH+77Gevg1pq+v1Sytk4v49sTXrpPFitfbNvuHHZRG2LfcMeY4O1rUvCvmHvsRHbFvuGZKNg6PyClPJ8+DgF4P8AuFWoAo7R+fUOqHv4ro63PW2fcS37nPbT/8jWRQghAPxPAI9JKX+741t/A+CtAP5T+PiJy+1HSvnzAH4+3OdLAbxXSvnm8Ns36ByjlPKeZcf8RQCvg7rIP+2xkfVhk7WtMwDuAvCnQojDUAOSaZ3fTeKzEdvWpRBCjAOYlFJKIcStUBOs7DiuExuxbQkhfgzAPQDuklI2O7bvBvAxAG+RUj6h8zvJ1qKXzoNLtW/2DTcmm6xtsW/YQ2zEtnWZ97Nv2ENsxLbFviHZKJg6v4QQKQCWlHIpfP5yAL8ipTyLjvMrFJmvEELsgxKZ3wDghy+37zXtc0op+XWJLwAvhLLUPwTgu+HXq6CyWD4P4EkAnwMwGP78OFQuSw7AQvg8u2yfLwXwycv8zq9AdeZK4fvvCbf/dPi6DlWk5E8u8f79UIUCngLw1wC8cPst4fsLUDf0o+v9+W7lr03Wto5AVYf9Xvh3vHy9P9+t/LVB29aqPwfgXQCOhm3rGwBuX+/Pdyt/bdC2VQdwvON43x9u/xOoCtXR9gfX+/Pl18b46rHzYNX2vcr72TfcAF+brG2xb9hDXxu0bbFvuAG+NmjbYt+QXxviy9T5BXWv/l74dRTAL17md74KwBPhOfKLHdufcz1ShG8khBBCCCGEEEIIIYQQQtYNZlYTQgghhBBCCCGEEEIIWXcoVhNCCCGEEEIIIYQQQghZdyhWE0IIIYQQQgghhBBCCFl3KFYTQgghhBBCCCGEEEIIWXcoVhNCCCGEEEIIIYQQQghZdyhWE0IIIYSQLY8QYkgI8d3w66IQ4nz4PC+E+IM1/L0vFULcvlb7J4QQQgghZCNhr/cBEEIIIYQQst5IKWcB3AAAQoj7AeSllL/5HPzqlwLIA/j6c/C7CCGEEEII6WnorCaEEEIIIeQShM7nT4bP7xdC/JkQ4itCiNNCiB8QQvy/QoiHhRCfFkI44c89TwjxJSHEPwshPiOE2BZu/2khxKNCiIeEEB8RQuwF8A4A/yZ0cb9ICPFaIcQDQojvCCE+J4QYe5a/+1TH9m8KIQ6uywdHCCGEEEJIDChWE0IIIYQQ8sw5AOBlAO4F8BcAviilvBZACcCrQ9H4vwF4nZTyeQA+COBXw/f+HIAbpZTXAXiHlPIUgD8E8DtSyhuklF8B8FUAL5BS3gjgIwB+9pn+7o6fWwy3/x6A3zX89xNCCCGEELJmMAaEEEIIIYSQZ87fSylrQoiHASQAfDrc/jCAvQCuBHANgM8KIRD+zIXwZx4C8CEhxMcBfPwS+98J4C9DN7YL4OSz+N0RH+54/J1n/RcSQgghhBCyTtBZTQghhBBCyDOnAgBSyiaAmpRShtubUEYQAeBo6JS+QUp5rZTy5eHPvBrA7wO4CcC3hBCrGUf+G4DfC53RPwHAfxa/O0Je4jkhhBBCCCE9DcVqQgghhBBCzHEMwIgQ4jYAEEI4QoirhRAWgF1Syi8CeB+APgBpAEsAMh3v7wNwPnz+1pjH8PqOx3+KuQ9CCCGEEEKecxgDQgghhBBCiCGklFUhxOsA/FchRB9Uf/t3ATwB4C/CbQLAf5VSLggh/hbA/xZCfD+AnwJwP4C/FkLMA/gCgH0xDmNACPEQlBP7jbp/EyGEEEIIIc8Vor16kBBCCCGEELKREUKcAnCzlHJmvY+FEEIIIYSQZwtjQAghhBBCCCGEEEIIIYSsO3RWE0IIIYQQQgghhBBCCFl36KwmhBBCCCGEEEIIIYQQsu5QrCaEEEIIIYQQQgghhBCy7lCsJoQQQgghhBBCCCGEELLuUKwmhBBCCCGEEEIIIYQQsu5QrCaEEEIIIYQQQgghhBCy7lCsJoQQQgghhBBCCCGEELLu/F9cCxj9aYoWTAAAAABJRU5ErkJggg==\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "plt.figure(figsize=(25,6))\n", + "plt.plot(train_timestamps, y_train, color = 'red', linewidth=2.0, alpha = 0.6)\n", + "plt.plot(train_timestamps, y_train_pred, color = 'blue', linewidth=0.8)\n", + "plt.legend(['Actual','Predicted'])\n", + "plt.xlabel('Timestamp')\n", + "plt.title(\"Training data prediction\")\n", + "plt.show()" + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "LnhzcnYtXHCm", + "outputId": "f5f0d711-f18b-4788-ad21-d4470ea2c02b" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "MAPE for training data: 1.7195710200875551 %\n" + ] + } + ], + "source": [ + "print('MAPE for training data: ', mape(y_train_pred, y_train)*100, '%')" + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 225 + }, + "id": "53Q02FoqQH4V", + "outputId": "53e2d59b-5075-4765-ad9e-aed56c966583" + }, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "plt.figure(figsize=(10,3))\n", + "plt.plot(test_timestamps, y_test, color = 'red', linewidth=2.0, alpha = 0.6)\n", + "plt.plot(test_timestamps, y_test_pred, color = 'blue', linewidth=0.8)\n", + "plt.legend(['Actual','Predicted'])\n", + "plt.xlabel('Timestamp')\n", + "plt.show()" + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "clOAUH-SXCJG", + "outputId": "a3aa85ff-126a-4a4a-cd9e-90b9cc465ef5" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "MAPE for testing data: 1.2623790187854018 %\n" + ] + } + ], + "source": [ + "print('MAPE for testing data: ', mape(y_test_pred, y_test)*100, '%')" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "DHlKvVCId5ue" + }, + "source": [ + "## Previsão do conjunto de dados completo\n" + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "cOFJ45vreO0N", + "outputId": "35628e33-ecf9-4966-8036-f7ea86db6f16" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Tensor shape: (26300, 5)\n", + "X shape: (26300, 4) \n", + "Y shape: (26300, 1)\n" + ] + } + ], + "source": [ + "# Extracting load values as numpy array\n", + "data = energy.copy().values\n", + "\n", + "# Scaling\n", + "data = scaler.transform(data)\n", + "\n", + "# Transforming to 2D tensor as per model input requirement\n", + "data_timesteps=np.array([[j for j in data[i:i+timesteps]] for i in range(0,len(data)-timesteps+1)])[:,:,0]\n", + "print(\"Tensor shape: \", data_timesteps.shape)\n", + "\n", + "# Selecting inputs and outputs from data\n", + "X, Y = data_timesteps[:,:timesteps-1],data_timesteps[:,[timesteps-1]]\n", + "print(\"X shape: \", X.shape,\"\\nY shape: \", Y.shape)" + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "metadata": { + "id": "ESSAdQgwexIi" + }, + "outputs": [], + "source": [ + "# Make model predictions\n", + "Y_pred = model.predict(X).reshape(-1,1)\n", + "\n", + "# Inverse scale and reshape\n", + "Y_pred = scaler.inverse_transform(Y_pred)\n", + "Y = scaler.inverse_transform(Y)" + ] + }, + { + "cell_type": "code", + "execution_count": 27, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 328 + }, + "id": "M_qhihN0RVVX", + "outputId": "a89cb23e-1d35-437f-9d63-8b8907e12f80" + }, + "outputs": [ + { + "data": { + "image/png": "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/vvvj1/96ldYt25duq5TTjkFEydOBAAMHjwYRx55JA4//HCcfvrpWLp0KXr16oXnnnsOPXv2xJgxY7B+/XpccsklOProo3H00Ufjhx9+AABUV1fjzDPPxMEHH4zrr78eQgglv7WdkloIIYQQQgghhESX2lpg8mTghBMy2zZvDq8/hBBCCCGEEOXEYjF88803OPvsswEAkydPxsyZM9GjRw/06dMH22yzDSZMmICWlhYcf/zxOPPMMzFlyhTMmzcPs2fPRlVVFQ466CD88Y9/zKp3/fr1uOGGGzB69Gj06NEDNTU16NatG26++WZ06dIFd955JwDgyiuvxN/+9jeccMIJWL58Oc466yzMmTMH//73v3HCCSfggQcewNdff42+ffsq+b1UcBFCCCGEEEJIqfPMM0B1NfDxx2H3hBBCCCGEkJJG09TX6ebwtHnzZvTs2RNAwoPruuuuw9ixY3HMMcegR48eAIAhQ4Zg+vTp6fxadXV1WLBgAUaPHo3f/e53qKysxC677ILTTjstp/5x48bhpJNOStfVrVs3y3589913WTm76uvrsWnTJowePRqfJSNInHvuuejataun328HFVyEEEIIIYQQUupUV4fdA0IIIYQQQsoCRdH3PJHKwWVmyy23TH8WQuDFF1/EWWedlVVm0KBByvqh6zrGjRuHTp06KavTCebgIoQQQgghhBBCCCGEEEIIKWHOOussvPrqq2hrawMAzJ8/H42NjTjppJPw0UcfIR6PY82aNRgxYkTOsccddxxGjx6NJUuWAABqamoAAFtttRUaGhrS5c4880y8+OKL6e8ppdtJJ52EDz74AADwzTffoLa2VslvooKLEEIIIYQQQgghhBBCCCGkhLn++utx0EEH4cgjj8QhhxyCm266CbFYDBdddBH2228/HHTQQbj66qvxi1/8IufYHXbYAX369MHFF1+Mww8/HJdffjkA4De/+Q0GDBiAnj17YsyYMXjhhRcwceJEHHbYYTjooIPQq1cvAMCDDz6I0aNH4+CDD8Znn32GPfbYQ8lv0kQY/nKSHHXUUWLixIlhd4MQQgghhBBCipubbnLe37t3YfpBCCGEEEJIiTFnzhwceOCBYXejJLA6l5qmTRJCHGVVnh5chBBCCCGEEFLuRNjwkRBCCCGEEEKsoIKLEEIIIYQQQgghhBBCCCGEFBVUcBFCCCGE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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "plt.figure(figsize=(30,8))\n", + "plt.plot(Y, color = 'red', linewidth=2.0, alpha = 0.6)\n", + "plt.plot(Y_pred, color = 'blue', linewidth=1)\n", + "plt.legend(['Actual','Predicted'])\n", + "plt.xlabel('Timestamp')\n", + "plt.show()" + ] + }, + { + "cell_type": "code", + "execution_count": 28, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "AcN7pMYXVGTK", + "outputId": "7e1c2161-47ce-496c-9d86-7ad9ae0df770" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "MAPE: 2.0572089029888656 %\n" + ] + } + ], + "source": [ + "print('MAPE: ', mape(Y_pred, Y)*100, '%')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n---\n\n**Aviso Legal**: \nEste documento foi traduzido utilizando o serviço de tradução por IA [Co-op Translator](https://github.com/Azure/co-op-translator). Embora nos esforcemos para garantir a precisão, esteja ciente de que traduções automatizadas podem conter erros ou imprecisões. O documento original em seu idioma nativo deve ser considerado a fonte autoritativa. Para informações críticas, recomenda-se a tradução profissional realizada por humanos. Não nos responsabilizamos por quaisquer mal-entendidos ou interpretações equivocadas decorrentes do uso desta tradução.\n" + ] + } + ], + "metadata": { + "accelerator": "GPU", + "colab": { + "collapsed_sections": [], + "name": "Recurrent_Neural_Networks.ipynb", + "provenance": [] + }, + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.7.1" + }, + "coopTranslator": { + "original_hash": "f8f3967282314d3995245835bdaa8418", + "translation_date": "2025-08-29T23:23:13+00:00", + "source_file": "7-TimeSeries/3-SVR/solution/notebook.ipynb", + "language_code": "br" + } + }, + "nbformat": 4, + "nbformat_minor": 1 +} \ No newline at end of file diff --git a/translations/pt-BR/7-TimeSeries/3-SVR/working/notebook.ipynb b/translations/pt-BR/7-TimeSeries/3-SVR/working/notebook.ipynb new file mode 100644 index 000000000..ac7caa691 --- /dev/null +++ b/translations/pt-BR/7-TimeSeries/3-SVR/working/notebook.ipynb @@ -0,0 +1,695 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": { + "id": "fv9OoQsMFk5A" + }, + "source": [] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Neste notebook, demonstramos como:\n", + "\n", + "- preparar dados de séries temporais 2D para treinar um modelo de regressão SVM\n", + "- implementar SVR usando o kernel RBF\n", + "- avaliar o modelo utilizando gráficos e MAPE\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Importando módulos\n" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "import sys\n", + "sys.path.append('../../')" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "id": "M687KNlQFp0-" + }, + "outputs": [], + "source": [ + "import os\n", + "import warnings\n", + "import matplotlib.pyplot as plt\n", + "import numpy as np\n", + "import pandas as pd\n", + "import datetime as dt\n", + "import math\n", + "\n", + "from sklearn.svm import SVR\n", + "from sklearn.preprocessing import MinMaxScaler\n", + "from common.utils import load_data, mape" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "Cj-kfVdMGjWP" + }, + "source": [] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "8fywSjC6GsRz" + }, + "source": [ + "### Carregar dados\n" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 363 + }, + "id": "aBDkEB11Fumg", + "outputId": "99cf7987-0509-4b73-8cc2-75d7da0d2740" + }, + "outputs": [ + { + "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", + "
load
2012-01-01 00:00:002698.0
2012-01-01 01:00:002558.0
2012-01-01 02:00:002444.0
2012-01-01 03:00:002402.0
2012-01-01 04:00:002403.0
\n", + "
" + ], + "text/plain": [ + " load\n", + "2012-01-01 00:00:00 2698.0\n", + "2012-01-01 01:00:00 2558.0\n", + "2012-01-01 02:00:00 2444.0\n", + "2012-01-01 03:00:00 2402.0\n", + "2012-01-01 04:00:00 2403.0" + ] + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "energy = load_data('../../data')[['load']]\n", + "energy.head(5)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "O0BWP13rGnh4" + }, + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 486 + }, + "id": "hGaNPKu_Gidk", + "outputId": "7f89b326-9057-4f49-efbe-cb100ebdf76d" + }, + "outputs": [], + "source": [ + "energy.plot(y='load', subplots=True, figsize=(15, 8), fontsize=12)\n", + "plt.xlabel('timestamp', fontsize=12)\n", + "plt.ylabel('load', fontsize=12)\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "IPuNor4eGwYY" + }, + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "ysvsNyONGt0Q" + }, + "outputs": [], + "source": [ + "train_start_dt = '2014-11-01 00:00:00'\n", + "test_start_dt = '2014-12-30 00:00:00'" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 548 + }, + "id": "SsfdLoPyGy9w", + "outputId": "d6d6c25b-b1f4-47e5-91d1-707e043237d7" + }, + "outputs": [], + "source": [ + "energy[(energy.index < test_start_dt) & (energy.index >= train_start_dt)][['load']].rename(columns={'load':'train'}) \\\n", + " .join(energy[test_start_dt:][['load']].rename(columns={'load':'test'}), how='outer') \\\n", + " .plot(y=['train', 'test'], figsize=(15, 8), fontsize=12)\n", + "plt.xlabel('timestamp', fontsize=12)\n", + "plt.ylabel('load', fontsize=12)\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "XbFTqBw6G1Ch" + }, + "source": [] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Agora, você precisa preparar os dados para treinamento realizando a filtragem e a escalonamento dos seus dados.\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "cYivRdQpHDj3", + "outputId": "a138f746-461c-4fd6-bfa6-0cee094c4aa1" + }, + "outputs": [], + "source": [ + "train = energy.copy()[(energy.index >= train_start_dt) & (energy.index < test_start_dt)][['load']]\n", + "test = energy.copy()[energy.index >= test_start_dt][['load']]\n", + "\n", + "print('Training data shape: ', train.shape)\n", + "print('Test data shape: ', test.shape)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Escalone os dados para estar na faixa (0, 1).\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 363 + }, + "id": "3DNntGQnZX8G", + "outputId": "210046bc-7a66-4ccd-d70d-aa4a7309949c" + }, + "outputs": [], + "source": [ + "scaler = MinMaxScaler()\n", + "train['load'] = scaler.fit_transform(train)\n", + "train.head(5)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 206 + }, + "id": "26Yht-rzZexe", + "outputId": "20326077-a38a-4e78-cc5b-6fd7af95d301" + }, + "outputs": [], + "source": [ + "test['load'] = scaler.transform(test)\n", + "test.head(5)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "x0n6jqxOQ41Z" + }, + "source": [] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "fdmxTZtOQ8xs" + }, + "source": [ + "Para nosso SVR, transformamos os dados de entrada para o formato `[batch, timesteps]`. Assim, remodelamos os dados existentes `train_data` e `test_data` de forma que haja uma nova dimensão que se refere aos timesteps. Para nosso exemplo, consideramos `timesteps = 5`. Assim, as entradas para o modelo são os dados dos primeiros 4 timesteps, e a saída será os dados do 5º timestep.\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "Rpju-Sc2HFm0" + }, + "outputs": [], + "source": [ + "# Converting to numpy arrays\n", + "\n", + "train_data = train.values\n", + "test_data = test.values" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Selecting the timesteps\n", + "\n", + "timesteps=None" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "O-JrsrsVJhUQ", + "outputId": "c90dbe71-bacc-4ec4-b452-f82fe5aefaef" + }, + "outputs": [], + "source": [ + "# Converting data to 2D tensor\n", + "\n", + "train_data_timesteps=None" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "exJD8AI7KE4g", + "outputId": "ce90260c-f327-427d-80f2-77307b5a6318" + }, + "outputs": [], + "source": [ + "# Converting test data to 2D tensor\n", + "\n", + "test_data_timesteps=None" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "2u0R2sIsLuq5" + }, + "outputs": [], + "source": [ + "x_train, y_train = None\n", + "x_test, y_test = None\n", + "\n", + "print(x_train.shape, y_train.shape)\n", + "print(x_test.shape, y_test.shape)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "8wIPOtAGLZlh" + }, + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "EhA403BEPEiD" + }, + "outputs": [], + "source": [ + "# Create model using RBF kernel\n", + "\n", + "model = None" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "GS0UA3csMbqp", + "outputId": "d86b6f05-5742-4c1d-c2db-c40510bd4f0d" + }, + "outputs": [], + "source": [ + "# Fit model on training data" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "Rz_x8S3UrlcF" + }, + "source": [ + "### Fazer previsão do modelo\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "XR0gnt3MnuYS", + "outputId": "157e40ab-9a23-4b66-a885-0d52a24b2364" + }, + "outputs": [], + "source": [ + "# Making predictions\n", + "\n", + "y_train_pred = None\n", + "y_test_pred = None" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "_2epncg-SGzr" + }, + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Scaling the predictions\n", + "\n", + "y_train_pred = scaler.inverse_transform(y_train_pred)\n", + "y_test_pred = scaler.inverse_transform(y_test_pred)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "xmm_YLXhq7gV", + "outputId": "18392f64-4029-49ac-c71a-a4e2411152a1" + }, + "outputs": [], + "source": [ + "# Scaling the original values\n", + "\n", + "y_train = scaler.inverse_transform(y_train)\n", + "y_test = scaler.inverse_transform(y_test)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "u3LBj93coHEi", + "outputId": "d4fd49e8-8c6e-4bb0-8ef9-ca0b26d725b4" + }, + "outputs": [], + "source": [ + "# Extract the timesteps for x-axis\n", + "\n", + "train_timestamps = None\n", + "test_timestamps = None" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "plt.figure(figsize=(25,6))\n", + "# plot original output\n", + "# plot predicted output\n", + "plt.legend(['Actual','Predicted'])\n", + "plt.xlabel('Timestamp')\n", + "plt.title(\"Training data prediction\")\n", + "plt.show()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "LnhzcnYtXHCm", + "outputId": "f5f0d711-f18b-4788-ad21-d4470ea2c02b" + }, + "outputs": [], + "source": [ + "print('MAPE for training data: ', mape(y_train_pred, y_train)*100, '%')" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 225 + }, + "id": "53Q02FoqQH4V", + "outputId": "53e2d59b-5075-4765-ad9e-aed56c966583" + }, + "outputs": [], + "source": [ + "plt.figure(figsize=(10,3))\n", + "# plot original output\n", + "# plot predicted output\n", + "plt.legend(['Actual','Predicted'])\n", + "plt.xlabel('Timestamp')\n", + "plt.show()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "clOAUH-SXCJG", + "outputId": "a3aa85ff-126a-4a4a-cd9e-90b9cc465ef5" + }, + "outputs": [], + "source": [ + "print('MAPE for testing data: ', mape(y_test_pred, y_test)*100, '%')" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "DHlKvVCId5ue" + }, + "source": [ + "## Previsão do conjunto de dados completo\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "cOFJ45vreO0N", + "outputId": "35628e33-ecf9-4966-8036-f7ea86db6f16" + }, + "outputs": [], + "source": [ + "# Extracting load values as numpy array\n", + "data = None\n", + "\n", + "# Scaling\n", + "data = None\n", + "\n", + "# Transforming to 2D tensor as per model input requirement\n", + "data_timesteps=None\n", + "\n", + "# Selecting inputs and outputs from data\n", + "X, Y = None, None" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "ESSAdQgwexIi" + }, + "outputs": [], + "source": [ + "# Make model predictions\n", + "\n", + "# Inverse scale and reshape\n", + "Y_pred = None\n", + "Y = None" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 328 + }, + "id": "M_qhihN0RVVX", + "outputId": "a89cb23e-1d35-437f-9d63-8b8907e12f80" + }, + "outputs": [], + "source": [ + "plt.figure(figsize=(30,8))\n", + "# plot original output\n", + "# plot predicted output\n", + "plt.legend(['Actual','Predicted'])\n", + "plt.xlabel('Timestamp')\n", + "plt.show()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "AcN7pMYXVGTK", + "outputId": "7e1c2161-47ce-496c-9d86-7ad9ae0df770" + }, + "outputs": [], + "source": [ + "print('MAPE: ', mape(Y_pred, Y)*100, '%')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n---\n\n**Aviso Legal**: \nEste documento foi traduzido utilizando o serviço de tradução por IA [Co-op Translator](https://github.com/Azure/co-op-translator). Embora nos esforcemos para garantir a precisão, esteja ciente de que traduções automatizadas podem conter erros ou imprecisões. O documento original em seu idioma nativo deve ser considerado a fonte autoritativa. Para informações críticas, recomenda-se a tradução profissional realizada por humanos. Não nos responsabilizamos por quaisquer mal-entendidos ou interpretações equivocadas decorrentes do uso desta tradução.\n" + ] + } + ], + "metadata": { + "accelerator": "GPU", + "colab": { + "collapsed_sections": [], + "name": "Recurrent_Neural_Networks.ipynb", + "provenance": [] + }, + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.7.1" + }, + "coopTranslator": { + "original_hash": "e86ce102239a14c44585623b9b924a74", + "translation_date": "2025-08-29T23:24:53+00:00", + "source_file": "7-TimeSeries/3-SVR/working/notebook.ipynb", + "language_code": "br" + } + }, + "nbformat": 4, + "nbformat_minor": 1 +} \ No newline at end of file diff --git a/translations/pt-BR/7-TimeSeries/README.md b/translations/pt-BR/7-TimeSeries/README.md new file mode 100644 index 000000000..dc7708044 --- /dev/null +++ b/translations/pt-BR/7-TimeSeries/README.md @@ -0,0 +1,28 @@ +# Introdução à previsão de séries temporais + +O que é previsão de séries temporais? Trata-se de prever eventos futuros analisando tendências do passado. + +## Tópico regional: uso mundial de eletricidade ✨ + +Nestes dois módulos, você será introduzido à previsão de séries temporais, uma área um pouco menos conhecida do aprendizado de máquina, mas que é extremamente valiosa para aplicações industriais e empresariais, entre outros campos. Embora redes neurais possam ser usadas para aumentar a utilidade desses modelos, estudaremos o tema no contexto do aprendizado de máquina clássico, já que esses modelos ajudam a prever o desempenho futuro com base no passado. + +Nosso foco regional é o uso de eletricidade no mundo, um conjunto de dados interessante para aprender a prever o consumo futuro de energia com base em padrões de carga anteriores. Você verá como esse tipo de previsão pode ser extremamente útil em um ambiente empresarial. + +![rede elétrica](../../../translated_images/pt-BR/electric-grid.0c21d5214db09ffa.webp) + +Foto de [Peddi Sai hrithik](https://unsplash.com/@shutter_log?utm_source=unsplash&utm_medium=referral&utm_content=creditCopyText) de torres elétricas em uma estrada em Rajasthan no [Unsplash](https://unsplash.com/s/photos/electric-india?utm_source=unsplash&utm_medium=referral&utm_content=creditCopyText) + +## Módulos + +1. [Introdução à previsão de séries temporais](1-Introduction/README.md) +2. [Construindo modelos ARIMA para séries temporais](2-ARIMA/README.md) +3. [Construindo um Support Vector Regressor para previsão de séries temporais](3-SVR/README.md) + +## Créditos + +"Introdução à previsão de séries temporais" foi escrito com ⚡️ por [Francesca Lazzeri](https://twitter.com/frlazzeri) e [Jen Looper](https://twitter.com/jenlooper). Os notebooks apareceram pela primeira vez online no [repositório "Deep Learning For Time Series" do Azure](https://github.com/Azure/DeepLearningForTimeSeriesForecasting), originalmente escrito por Francesca Lazzeri. O módulo sobre SVR foi escrito por [Anirban Mukherjee](https://github.com/AnirbanMukherjeeXD). + +--- + +**Aviso Legal**: +Este documento foi traduzido utilizando o serviço de tradução por IA [Co-op Translator](https://github.com/Azure/co-op-translator). Embora nos esforcemos para garantir a precisão, esteja ciente de que traduções automatizadas podem conter erros ou imprecisões. O documento original em seu idioma nativo deve ser considerado a fonte autoritativa. Para informações críticas, recomenda-se a tradução profissional realizada por humanos. Não nos responsabilizamos por quaisquer mal-entendidos ou interpretações equivocadas decorrentes do uso desta tradução. \ No newline at end of file diff --git a/translations/pt-BR/8-Reinforcement/1-QLearning/README.md b/translations/pt-BR/8-Reinforcement/1-QLearning/README.md new file mode 100644 index 000000000..f322c90ca --- /dev/null +++ b/translations/pt-BR/8-Reinforcement/1-QLearning/README.md @@ -0,0 +1,247 @@ +# Introdução ao Aprendizado por Reforço e Q-Learning + +![Resumo do aprendizado por reforço em machine learning em um sketchnote](../../../../sketchnotes/ml-reinforcement.png) +> Sketchnote por [Tomomi Imura](https://www.twitter.com/girlie_mac) + +O aprendizado por reforço envolve três conceitos importantes: o agente, alguns estados e um conjunto de ações por estado. Ao executar uma ação em um estado específico, o agente recebe uma recompensa. Imagine novamente o jogo de computador Super Mario. Você é o Mario, está em um nível do jogo, parado ao lado de um penhasco. Acima de você há uma moeda. Você, sendo o Mario, em um nível do jogo, em uma posição específica... esse é o seu estado. Mover um passo para a direita (uma ação) o levará para o penhasco, o que resultará em uma pontuação numérica baixa. No entanto, pressionar o botão de pular permitirá que você marque um ponto e continue vivo. Esse é um resultado positivo e deve lhe conceder uma pontuação numérica positiva. + +Usando aprendizado por reforço e um simulador (o jogo), você pode aprender a jogar para maximizar a recompensa, que é permanecer vivo e marcar o maior número de pontos possível. + +[![Introdução ao Aprendizado por Reforço](https://img.youtube.com/vi/lDq_en8RNOo/0.jpg)](https://www.youtube.com/watch?v=lDq_en8RNOo) + +> 🎥 Clique na imagem acima para ouvir Dmitry falar sobre Aprendizado por Reforço + +## [Quiz pré-aula](https://ff-quizzes.netlify.app/en/ml/) + +## Pré-requisitos e Configuração + +Nesta lição, experimentaremos com algum código em Python. Você deve ser capaz de executar o código do Jupyter Notebook desta lição, seja no seu computador ou em algum lugar na nuvem. + +Você pode abrir [o notebook da lição](https://github.com/microsoft/ML-For-Beginners/blob/main/8-Reinforcement/1-QLearning/notebook.ipynb) e acompanhar esta lição para construir. + +> **Nota:** Se você estiver abrindo este código na nuvem, também precisará buscar o arquivo [`rlboard.py`](https://github.com/microsoft/ML-For-Beginners/blob/main/8-Reinforcement/1-QLearning/rlboard.py), que é usado no código do notebook. Adicione-o ao mesmo diretório do notebook. + +## Introdução + +Nesta lição, exploraremos o mundo de **[Pedro e o Lobo](https://en.wikipedia.org/wiki/Peter_and_the_Wolf)**, inspirado por um conto musical de fadas de um compositor russo, [Sergei Prokofiev](https://en.wikipedia.org/wiki/Sergei_Prokofiev). Usaremos o **Aprendizado por Reforço** para permitir que Pedro explore seu ambiente, colete maçãs saborosas e evite encontrar o lobo. + +O **Aprendizado por Reforço** (RL) é uma técnica de aprendizado que nos permite aprender o comportamento ideal de um **agente** em algum **ambiente** realizando muitos experimentos. Um agente nesse ambiente deve ter algum **objetivo**, definido por uma **função de recompensa**. + +## O ambiente + +Para simplificar, vamos considerar o mundo de Pedro como um tabuleiro quadrado de tamanho `largura` x `altura`, como este: + +![Ambiente de Pedro](../../../../8-Reinforcement/1-QLearning/images/environment.png) + +Cada célula neste tabuleiro pode ser: + +* **chão**, onde Pedro e outras criaturas podem andar. +* **água**, onde obviamente você não pode andar. +* uma **árvore** ou **grama**, um lugar onde você pode descansar. +* uma **maçã**, que representa algo que Pedro ficaria feliz em encontrar para se alimentar. +* um **lobo**, que é perigoso e deve ser evitado. + +Há um módulo Python separado, [`rlboard.py`](https://github.com/microsoft/ML-For-Beginners/blob/main/8-Reinforcement/1-QLearning/rlboard.py), que contém o código para trabalhar com este ambiente. Como este código não é importante para entender nossos conceitos, importaremos o módulo e o usaremos para criar o tabuleiro de exemplo (bloco de código 1): + +```python +from rlboard import * + +width, height = 8,8 +m = Board(width,height) +m.randomize(seed=13) +m.plot() +``` + +Este código deve imprimir uma imagem do ambiente semelhante à mostrada acima. + +## Ações e política + +No nosso exemplo, o objetivo de Pedro seria encontrar uma maçã, enquanto evita o lobo e outros obstáculos. Para isso, ele pode essencialmente andar pelo tabuleiro até encontrar uma maçã. + +Portanto, em qualquer posição, ele pode escolher entre uma das seguintes ações: cima, baixo, esquerda e direita. + +Definiremos essas ações como um dicionário e as mapearemos para pares de mudanças de coordenadas correspondentes. Por exemplo, mover para a direita (`R`) corresponderia ao par `(1,0)`. (bloco de código 2): + +```python +actions = { "U" : (0,-1), "D" : (0,1), "L" : (-1,0), "R" : (1,0) } +action_idx = { a : i for i,a in enumerate(actions.keys()) } +``` + +Resumindo, a estratégia e o objetivo deste cenário são os seguintes: + +- **A estratégia** do nosso agente (Pedro) é definida por uma chamada **política**. Uma política é uma função que retorna a ação em qualquer estado dado. No nosso caso, o estado do problema é representado pelo tabuleiro, incluindo a posição atual do jogador. + +- **O objetivo** do aprendizado por reforço é eventualmente aprender uma boa política que nos permita resolver o problema de forma eficiente. No entanto, como linha de base, vamos considerar a política mais simples chamada **caminhada aleatória**. + +## Caminhada aleatória + +Vamos primeiro resolver nosso problema implementando uma estratégia de caminhada aleatória. Com a caminhada aleatória, escolheremos aleatoriamente a próxima ação entre as ações permitidas, até alcançarmos a maçã (bloco de código 3). + +1. Implemente a caminhada aleatória com o código abaixo: + + ```python + def random_policy(m): + return random.choice(list(actions)) + + def walk(m,policy,start_position=None): + n = 0 # number of steps + # set initial position + if start_position: + m.human = start_position + else: + m.random_start() + while True: + if m.at() == Board.Cell.apple: + return n # success! + if m.at() in [Board.Cell.wolf, Board.Cell.water]: + return -1 # eaten by wolf or drowned + while True: + a = actions[policy(m)] + new_pos = m.move_pos(m.human,a) + if m.is_valid(new_pos) and m.at(new_pos)!=Board.Cell.water: + m.move(a) # do the actual move + break + n+=1 + + walk(m,random_policy) + ``` + + A chamada para `walk` deve retornar o comprimento do caminho correspondente, que pode variar de uma execução para outra. + +1. Execute o experimento de caminhada várias vezes (digamos, 100) e imprima as estatísticas resultantes (bloco de código 4): + + ```python + def print_statistics(policy): + s,w,n = 0,0,0 + for _ in range(100): + z = walk(m,policy) + if z<0: + w+=1 + else: + s += z + n += 1 + print(f"Average path length = {s/n}, eaten by wolf: {w} times") + + print_statistics(random_policy) + ``` + + Note que o comprimento médio de um caminho é em torno de 30-40 passos, o que é bastante, dado que a distância média até a maçã mais próxima é de cerca de 5-6 passos. + + Você também pode ver como é o movimento de Pedro durante a caminhada aleatória: + + ![Caminhada Aleatória de Pedro](../../../../8-Reinforcement/1-QLearning/images/random_walk.gif) + +## Função de recompensa + +Para tornar nossa política mais inteligente, precisamos entender quais movimentos são "melhores" que outros. Para isso, precisamos definir nosso objetivo. + +O objetivo pode ser definido em termos de uma **função de recompensa**, que retornará algum valor de pontuação para cada estado. Quanto maior o número, melhor a função de recompensa. (bloco de código 5) + +```python +move_reward = -0.1 +goal_reward = 10 +end_reward = -10 + +def reward(m,pos=None): + pos = pos or m.human + if not m.is_valid(pos): + return end_reward + x = m.at(pos) + if x==Board.Cell.water or x == Board.Cell.wolf: + return end_reward + if x==Board.Cell.apple: + return goal_reward + return move_reward +``` + +Uma coisa interessante sobre funções de recompensa é que, na maioria dos casos, *só recebemos uma recompensa substancial no final do jogo*. Isso significa que nosso algoritmo deve, de alguma forma, lembrar os "bons" passos que levaram a uma recompensa positiva no final e aumentar sua importância. Da mesma forma, todos os movimentos que levam a resultados ruins devem ser desencorajados. + +## Q-Learning + +O algoritmo que discutiremos aqui é chamado de **Q-Learning**. Neste algoritmo, a política é definida por uma função (ou uma estrutura de dados) chamada de **Q-Table**. Ela registra a "qualidade" de cada uma das ações em um determinado estado. + +É chamada de Q-Table porque muitas vezes é conveniente representá-la como uma tabela ou matriz multidimensional. Como nosso tabuleiro tem dimensões `largura` x `altura`, podemos representar a Q-Table usando um array numpy com forma `largura` x `altura` x `len(actions)`: (bloco de código 6) + +```python +Q = np.ones((width,height,len(actions)),dtype=np.float)*1.0/len(actions) +``` + +Observe que inicializamos todos os valores da Q-Table com um valor igual, no nosso caso - 0.25. Isso corresponde à política de "caminhada aleatória", porque todos os movimentos em cada estado são igualmente bons. Podemos passar a Q-Table para a função `plot` para visualizar a tabela no tabuleiro: `m.plot(Q)`. + +![Ambiente de Pedro](../../../../8-Reinforcement/1-QLearning/images/env_init.png) + +No centro de cada célula há uma "seta" que indica a direção preferida de movimento. Como todas as direções são iguais, é exibido um ponto. + +Agora precisamos executar a simulação, explorar nosso ambiente e aprender uma melhor distribuição de valores na Q-Table, o que nos permitirá encontrar o caminho para a maçã muito mais rapidamente. + +## Essência do Q-Learning: Equação de Bellman + +Uma vez que começamos a nos mover, cada ação terá uma recompensa correspondente, ou seja, teoricamente podemos selecionar a próxima ação com base na maior recompensa imediata. No entanto, na maioria dos estados, o movimento não alcançará nosso objetivo de chegar à maçã, e assim não podemos decidir imediatamente qual direção é melhor. + +> Lembre-se de que não é o resultado imediato que importa, mas sim o resultado final, que obteremos no final da simulação. + +Para levar em conta essa recompensa atrasada, precisamos usar os princípios da **[programação dinâmica](https://en.wikipedia.org/wiki/Dynamic_programming)**, que nos permitem pensar sobre nosso problema de forma recursiva. + +Suponha que estamos agora no estado *s* e queremos nos mover para o próximo estado *s'*. Ao fazer isso, receberemos a recompensa imediata *r(s,a)*, definida pela função de recompensa, mais alguma recompensa futura. Se supusermos que nossa Q-Table reflete corretamente a "atratividade" de cada ação, então no estado *s'* escolheremos uma ação *a* que corresponda ao valor máximo de *Q(s',a')*. Assim, a melhor recompensa futura possível que poderíamos obter no estado *s* será definida como `max` + +## Verificando a política + +Como a Q-Table lista a "atratividade" de cada ação em cada estado, é bastante fácil usá-la para definir a navegação eficiente em nosso mundo. No caso mais simples, podemos selecionar a ação correspondente ao maior valor da Q-Table: (bloco de código 9) + +```python +def qpolicy_strict(m): + x,y = m.human + v = probs(Q[x,y]) + a = list(actions)[np.argmax(v)] + return a + +walk(m,qpolicy_strict) +``` + +> Se você tentar o código acima várias vezes, pode perceber que, às vezes, ele "trava", e você precisa pressionar o botão STOP no notebook para interrompê-lo. Isso acontece porque podem haver situações em que dois estados "apontam" um para o outro em termos de valor Q-Ótimo, fazendo com que o agente acabe se movendo entre esses estados indefinidamente. + +## 🚀Desafio + +> **Tarefa 1:** Modifique a função `walk` para limitar o comprimento máximo do caminho a um certo número de passos (digamos, 100), e observe o código acima retornar esse valor de tempos em tempos. + +> **Tarefa 2:** Modifique a função `walk` para que ela não volte aos lugares onde já esteve anteriormente. Isso evitará que `walk` entre em loop, no entanto, o agente ainda pode acabar ficando "preso" em um local do qual não consegue escapar. + +## Navegação + +Uma política de navegação melhor seria aquela que usamos durante o treinamento, que combina exploração e aproveitamento. Nessa política, selecionamos cada ação com uma certa probabilidade, proporcional aos valores na Q-Table. Essa estratégia ainda pode fazer com que o agente volte a uma posição que já explorou, mas, como você pode ver no código abaixo, resulta em um caminho médio muito curto até o local desejado (lembre-se de que `print_statistics` executa a simulação 100 vezes): (bloco de código 10) + +```python +def qpolicy(m): + x,y = m.human + v = probs(Q[x,y]) + a = random.choices(list(actions),weights=v)[0] + return a + +print_statistics(qpolicy) +``` + +Após executar este código, você deve obter um comprimento médio de caminho muito menor do que antes, na faixa de 3-6. + +## Investigando o processo de aprendizado + +Como mencionamos, o processo de aprendizado é um equilíbrio entre exploração e aproveitamento do conhecimento adquirido sobre a estrutura do espaço do problema. Vimos que os resultados do aprendizado (a capacidade de ajudar um agente a encontrar um caminho curto até o objetivo) melhoraram, mas também é interessante observar como o comprimento médio do caminho se comporta durante o processo de aprendizado: + +## Os aprendizados podem ser resumidos como: + +- **O comprimento médio do caminho aumenta**. O que vemos aqui é que, no início, o comprimento médio do caminho aumenta. Isso provavelmente ocorre porque, quando não sabemos nada sobre o ambiente, é mais provável que fiquemos presos em estados ruins, como água ou lobo. À medida que aprendemos mais e começamos a usar esse conhecimento, podemos explorar o ambiente por mais tempo, mas ainda não sabemos muito bem onde estão as maçãs. + +- **O comprimento do caminho diminui, conforme aprendemos mais**. Uma vez que aprendemos o suficiente, torna-se mais fácil para o agente alcançar o objetivo, e o comprimento do caminho começa a diminuir. No entanto, ainda estamos abertos à exploração, então frequentemente nos desviamos do melhor caminho e exploramos novas opções, tornando o caminho mais longo do que o ideal. + +- **O comprimento aumenta abruptamente**. O que também observamos nesse gráfico é que, em algum momento, o comprimento aumentou abruptamente. Isso indica a natureza estocástica do processo e que, em algum momento, podemos "estragar" os coeficientes da Q-Table ao sobrescrevê-los com novos valores. Isso idealmente deve ser minimizado diminuindo a taxa de aprendizado (por exemplo, no final do treinamento, ajustamos os valores da Q-Table apenas por um pequeno valor). + +No geral, é importante lembrar que o sucesso e a qualidade do processo de aprendizado dependem significativamente de parâmetros, como taxa de aprendizado, decaimento da taxa de aprendizado e fator de desconto. Esses parâmetros são frequentemente chamados de **hiperparâmetros**, para distingui-los dos **parâmetros**, que otimizamos durante o treinamento (por exemplo, os coeficientes da Q-Table). O processo de encontrar os melhores valores de hiperparâmetros é chamado de **otimização de hiperparâmetros**, e merece um tópico à parte. + +## [Quiz pós-aula](https://ff-quizzes.netlify.app/en/ml/) + +## Tarefa +[Um Mundo Mais Realista](assignment.md) + +--- + +**Aviso Legal**: +Este documento foi traduzido utilizando o serviço de tradução por IA [Co-op Translator](https://github.com/Azure/co-op-translator). Embora nos esforcemos para garantir a precisão, esteja ciente de que traduções automatizadas podem conter erros ou imprecisões. O documento original em seu idioma nativo deve ser considerado a fonte autoritativa. Para informações críticas, recomenda-se a tradução profissional realizada por humanos. Não nos responsabilizamos por quaisquer mal-entendidos ou interpretações equivocadas decorrentes do uso desta tradução. \ No newline at end of file diff --git a/translations/pt-BR/8-Reinforcement/1-QLearning/assignment.md b/translations/pt-BR/8-Reinforcement/1-QLearning/assignment.md new file mode 100644 index 000000000..7cb12fd90 --- /dev/null +++ b/translations/pt-BR/8-Reinforcement/1-QLearning/assignment.md @@ -0,0 +1,32 @@ +# Um Mundo Mais Realista + +Na nossa situação, Peter conseguia se mover quase sem se cansar ou sentir fome. Em um mundo mais realista, ele precisa sentar e descansar de tempos em tempos, além de se alimentar. Vamos tornar nosso mundo mais realista, implementando as seguintes regras: + +1. Ao se mover de um lugar para outro, Peter perde **energia** e ganha **fadiga**. +2. Peter pode recuperar energia comendo maçãs. +3. Peter pode se livrar da fadiga descansando sob uma árvore ou na grama (ou seja, caminhando para uma posição no tabuleiro com uma árvore ou grama - campo verde). +4. Peter precisa encontrar e matar o lobo. +5. Para matar o lobo, Peter precisa ter certos níveis de energia e fadiga; caso contrário, ele perde a batalha. + +## Instruções + +Use o [notebook.ipynb](notebook.ipynb) original como ponto de partida para sua solução. + +Modifique a função de recompensa acima de acordo com as regras do jogo, execute o algoritmo de aprendizado por reforço para aprender a melhor estratégia para vencer o jogo e compare os resultados do passeio aleatório com o seu algoritmo em termos de número de jogos ganhos e perdidos. + +> **Note**: No seu novo mundo, o estado é mais complexo e, além da posição do humano, também inclui os níveis de fadiga e energia. Você pode optar por representar o estado como uma tupla (Tabuleiro, energia, fadiga), ou definir uma classe para o estado (você também pode querer derivá-la de `Board`), ou até mesmo modificar a classe `Board` original dentro de [rlboard.py](../../../../8-Reinforcement/1-QLearning/rlboard.py). + +Na sua solução, mantenha o código responsável pela estratégia de passeio aleatório e compare os resultados do seu algoritmo com o passeio aleatório ao final. + +> **Note**: Pode ser necessário ajustar os hiperparâmetros para fazer o algoritmo funcionar, especialmente o número de épocas. Como o sucesso no jogo (derrotar o lobo) é um evento raro, você pode esperar um tempo de treinamento significativamente maior. + +## Rubrica + +| Critério | Exemplary | Adequate | Needs Improvement | +| --------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------ | +| | Um notebook é apresentado com a definição das novas regras do mundo, algoritmo de Q-Learning e algumas explicações textuais. O Q-Learning consegue melhorar significativamente os resultados em comparação ao passeio aleatório. | O notebook é apresentado, o Q-Learning é implementado e melhora os resultados em comparação ao passeio aleatório, mas não de forma significativa; ou o notebook está mal documentado e o código não está bem estruturado. | Alguma tentativa de redefinir as regras do mundo foi feita, mas o algoritmo de Q-Learning não funciona, ou a função de recompensa não está totalmente definida. | + +--- + +**Aviso Legal**: +Este documento foi traduzido utilizando o serviço de tradução por IA [Co-op Translator](https://github.com/Azure/co-op-translator). Embora nos esforcemos para garantir a precisão, esteja ciente de que traduções automáticas podem conter erros ou imprecisões. O documento original em seu idioma nativo deve ser considerado a fonte oficial. Para informações críticas, recomenda-se a tradução profissional feita por humanos. Não nos responsabilizamos por quaisquer mal-entendidos ou interpretações equivocadas decorrentes do uso desta tradução. \ No newline at end of file diff --git a/translations/pt-BR/8-Reinforcement/1-QLearning/notebook.ipynb b/translations/pt-BR/8-Reinforcement/1-QLearning/notebook.ipynb new file mode 100644 index 000000000..dc150d60a --- /dev/null +++ b/translations/pt-BR/8-Reinforcement/1-QLearning/notebook.ipynb @@ -0,0 +1,467 @@ +{ + "metadata": { + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.7.0" + }, + "orig_nbformat": 2, + "kernelspec": { + "name": "python3", + "display_name": "Python 3.7.0 64-bit ('3.7')" + }, + "interpreter": { + "hash": "70b38d7a306a849643e446cd70466270a13445e5987dfa1344ef2b127438fa4d" + }, + "coopTranslator": { + "original_hash": "17e5a668646eabf5aabd0e9bfcf17876", + "translation_date": "2025-08-30T00:03:26+00:00", + "source_file": "8-Reinforcement/1-QLearning/notebook.ipynb", + "language_code": "br" + } + }, + "nbformat": 4, + "nbformat_minor": 2, + "cells": [ + { + "source": [ + "# Pedro e o Lobo: Introdução ao Aprendizado por Reforço\n", + "\n", + "Neste tutorial, vamos aprender como aplicar o aprendizado por reforço a um problema de busca de caminhos. O cenário é inspirado no conto musical [Pedro e o Lobo](https://en.wikipedia.org/wiki/Peter_and_the_Wolf), do compositor russo [Sergei Prokofiev](https://en.wikipedia.org/wiki/Sergei_Prokofiev). É a história de um jovem pioneiro, Pedro, que corajosamente sai de sua casa para uma clareira na floresta para perseguir um lobo. Vamos treinar algoritmos de aprendizado de máquina que ajudarão Pedro a explorar a área ao redor e construir um mapa de navegação otimizado.\n", + "\n", + "Primeiro, vamos importar algumas bibliotecas úteis:\n" + ], + "cell_type": "markdown", + "metadata": {} + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [], + "source": [ + "import matplotlib.pyplot as plt\n", + "import numpy as np\n", + "import random\n", + "import math" + ] + }, + { + "source": [ + "## Visão Geral do Aprendizado por Reforço\n", + "\n", + "**Aprendizado por Reforço** (RL) é uma técnica de aprendizado que nos permite aprender o comportamento ideal de um **agente** em um determinado **ambiente** por meio da realização de vários experimentos. Um agente nesse ambiente deve ter algum **objetivo**, definido por uma **função de recompensa**.\n", + "\n", + "## O Ambiente\n", + "\n", + "Para simplificar, vamos considerar o mundo de Peter como um tabuleiro quadrado de tamanho `width` x `height`. Cada célula nesse tabuleiro pode ser:\n", + "* **chão**, onde Peter e outras criaturas podem caminhar\n", + "* **água**, onde obviamente não se pode caminhar\n", + "* **uma árvore** ou **grama** - um lugar onde você pode descansar\n", + "* **uma maçã**, que representa algo que Peter ficaria feliz em encontrar para se alimentar\n", + "* **um lobo**, que é perigoso e deve ser evitado\n", + "\n", + "Para trabalhar com o ambiente, definiremos uma classe chamada `Board`. Para não sobrecarregar este notebook, movemos todo o código relacionado ao tabuleiro para um módulo separado chamado `rlboard`, que agora iremos importar. Você pode olhar dentro desse módulo para obter mais detalhes sobre os aspectos internos da implementação.\n" + ], + "cell_type": "markdown", + "metadata": {} + }, + { + "source": [ + "Vamos agora criar um tabuleiro aleatório e ver como ele fica:\n" + ], + "cell_type": "markdown", + "metadata": {} + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [], + "source": [ + "# code block 1" + ] + }, + { + "source": [ + "## Ações e Política\n", + "\n", + "No nosso exemplo, o objetivo de Peter seria encontrar uma maçã, enquanto evita o lobo e outros obstáculos. Defina essas ações como um dicionário e mapeie-as para pares de alterações correspondentes nas coordenadas.\n" + ], + "cell_type": "markdown", + "metadata": {} + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [], + "source": [ + "# code block 2" + ] + }, + { + "source": [ + "A estratégia do nosso agente (Peter) é definida por uma chamada **política**. Vamos considerar a política mais simples chamada **caminhada aleatória**.\n", + "\n", + "## Caminhada aleatória\n", + "\n", + "Vamos primeiro resolver nosso problema implementando uma estratégia de caminhada aleatória.\n" + ], + "cell_type": "markdown", + "metadata": {} + }, + { + "source": [ + "# Let's run a random walk experiment several times and see the average number of steps taken: code block 3" + ], + "cell_type": "code", + "metadata": {}, + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [], + "source": [ + "# code block 4" + ] + }, + { + "source": [ + "## Função de Recompensa\n", + "\n", + "Para tornar nossa política mais inteligente, precisamos entender quais movimentos são \"melhores\" do que outros.\n" + ], + "cell_type": "markdown", + "metadata": {} + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [], + "source": [ + "#code block 5" + ] + }, + { + "source": [ + "## Aprendizado Q\n", + "\n", + "Construa uma Q-Table, ou matriz multidimensional. Como nosso tabuleiro tem dimensões `width` x `height`, podemos representar a Q-Table por um array numpy com formato `width` x `height` x `len(actions)`:\n" + ], + "cell_type": "markdown", + "metadata": {} + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [], + "source": [ + "# code block 6" + ] + }, + { + "source": [ + "Passe a Q-Table para a função `plot` para visualizar a tabela no tabuleiro:\n" + ], + "cell_type": "markdown", + "metadata": {} + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "output_type": "error", + "ename": "NameError", + "evalue": "name 'm' is not defined", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mNameError\u001b[0m Traceback (most recent call last)", + "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0mm\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mplot\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mQ\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", + "\u001b[0;31mNameError\u001b[0m: name 'm' is not defined" + ] + } + ], + "source": [ + "m.plot(Q)" + ] + }, + { + "source": [ + "## Essência do Q-Learning: Equação de Bellman e Algoritmo de Aprendizado\n", + "\n", + "Escreva um pseudocódigo para o nosso algoritmo de aprendizado:\n", + "\n", + "* Inicialize a Tabela Q (Q-Table) com números iguais para todos os estados e ações\n", + "* Defina a taxa de aprendizado $\\alpha\\leftarrow 1$\n", + "* Repita a simulação várias vezes\n", + " 1. Comece em uma posição aleatória\n", + " 1. Repita\n", + " 1. Selecione uma ação $a$ no estado $s$\n", + " 2. Execute a ação movendo-se para um novo estado $s'$\n", + " 3. Se encontrarmos uma condição de fim de jogo ou a recompensa total for muito baixa - saia da simulação \n", + " 4. Calcule a recompensa $r$ no novo estado\n", + " 5. Atualize a Função Q de acordo com a equação de Bellman: $Q(s,a)\\leftarrow (1-\\alpha)Q(s,a)+\\alpha(r+\\gamma\\max_{a'}Q(s',a'))$\n", + " 6. $s\\leftarrow s'$\n", + " 7. Atualize a recompensa total e diminua $\\alpha$.\n", + "\n", + "## Explorar vs. Explorar\n", + "\n", + "A melhor abordagem é equilibrar entre exploração e exploração. À medida que aprendemos mais sobre o nosso ambiente, estaremos mais propensos a seguir a rota ótima, no entanto, escolhendo o caminho inexplorado de vez em quando.\n", + "\n", + "## Implementação em Python\n", + "\n", + "Agora estamos prontos para implementar o algoritmo de aprendizado. Antes disso, também precisamos de uma função que converta números arbitrários na Tabela Q em um vetor de probabilidades para as ações correspondentes:\n" + ], + "cell_type": "markdown", + "metadata": {} + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [], + "source": [ + "# code block 7" + ] + }, + { + "source": [ + "Adicionamos uma pequena quantidade de `eps` ao vetor original para evitar divisão por 0 no caso inicial, quando todos os componentes do vetor são idênticos.\n", + "\n", + "O algoritmo de aprendizado real será executado por 5000 experimentos, também chamados de **épocas**:\n" + ], + "cell_type": "markdown", + "metadata": {} + }, + { + "cell_type": "code", + "execution_count": 56, + "metadata": {}, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "" + ] + } + ], + "source": [ + "\n", + "from IPython.display import clear_output\n", + "\n", + "lpath = []\n", + "\n", + "# code block 8" + ] + }, + { + "source": [ + "Após executar este algoritmo, a Q-Table deve ser atualizada com valores que definem a atratividade de diferentes ações em cada etapa. Visualize a tabela aqui:\n" + ], + "cell_type": "markdown", + "metadata": {} + }, + { + "cell_type": "code", + "execution_count": 43, + "metadata": {}, + "outputs": [ + { + "output_type": "display_data", + "data": { + "text/plain": "
", + "image/svg+xml": "\r\n\r\n\r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n", + "image/png": "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Tz9N/fr1mTRpEuecc47RkY4gpWTOnDmcd9553HHHHSxdupS8vLyIt6sKt6KcBCkl2dnZfPjhh8yaNYusrKyoK47BYJD9+/fz6KOPsnz5cnJzc42OdMqZPn069957L02bNmXKlCm8+eabjB8/Hl3XI9quKtyKcpK6dOlCVlYWVquVTp064ff7jY50hOzsbLp160b37t1ZuHAhV1111fG/SflbxowZw4wZM/jss8/YtGkTt956K5MnT474jShU4VaUkzBr1iwef/xxLr74Ylq3bs20adOYMWOG0bHKSSmZPXs2s2fPxuVyMWbMGAYNGsT8+fONjnbKGTVqFEVFRbjdbq699loyMjIi3qYq3LXEU089Rc+ePfH5fDXmRrCBQIDvvvuO9957j0AgEFVDEb1792bRokU0atSIzz//nOnTp9O7d2+jYx3h4osv5scff+Scc87h3nvvZcWKFVG9e2RNdcMNNzB48GDatWvH6NGjq2XjKlW4a4nx48fz2Wef0aNHD5544gl+/fVXgsGg0bEqJKWkZcuWfPfdd2RlZdGgQYOoGopo2bIlubm5TJw4EQCfz8fTTz/N/v37DU4WIoSgbdu2LFq0iIULF6LrOpmZmcyaNYuioiKj4ymVpAp3LVG2peovv/xC9+7dee2113j11Vf55ptvjI52VF9++SW33nord911Fw6HgyFDhvDpp58aHaucEIIff/yR22+/nauvvpoNGzYwbdo0XnvtNXbs2GF0PADq16/PunXrqF+/Pq+88grr16/niiuuYObMmZSWlhodT6kEVbhrocsuu4xXXnmFRo0a8ccffzBo0CB27txpdKwjxMfH43Q6sdlspKSk4HQ6mTp1qtGx/uLss8+mZ8+eADRu3JjBgwczc+ZM8vPzjQ12mAEDBtC4cehWsD179uTCCy/koYceiqqhJ+XvUQtwaikhBNdffz0ul4vrr7+ecePGsWPHDq655hruu+8+EhIS/nLT3urUo0cP7rzzTnRdp27duvznP//hnXfeoWPHjkyYMIHevXuTmJgYdYsxWrduzfjx4xk4cCDNmjXj5ZdfJjY21uhYR+jevTupqal06tSJ2267jREjRmCxqFJQGdX9c6h63LWcw+GgWbNmfPzxx6xfv55zzz2X/v37s3DhQtatW2dYLiEEW7dupX///rRt25asrCx69+7N+vXr2bJlCzff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\n" + }, + "metadata": { + "needs_background": "light" + } + } + ], + "source": [ + "m.plot(Q)" + ] + }, + { + "source": [ + "## Verificando a Política\n", + "\n", + "Como a Q-Table lista a \"atratividade\" de cada ação em cada estado, é bastante fácil usá-la para definir a navegação eficiente em nosso mundo. No caso mais simples, podemos simplesmente selecionar a ação correspondente ao maior valor na Q-Table:\n" + ], + "cell_type": "markdown", + "metadata": {} + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "2" + ] + }, + "metadata": {}, + "execution_count": 13 + } + ], + "source": [ + "# code block 9" + ] + }, + { + "source": [ + "Se você tentar o código acima várias vezes, pode perceber que, às vezes, ele simplesmente \"trava\", e você precisa pressionar o botão STOP no notebook para interrompê-lo.\n", + "\n", + "> **Tarefa 1:** Modifique a função `walk` para limitar o comprimento máximo do caminho a um certo número de passos (digamos, 100), e observe o código acima retornar esse valor de tempos em tempos.\n", + "\n", + "> **Tarefa 2:** Modifique a função `walk` para que ela não volte aos lugares onde já esteve anteriormente. Isso evitará que `walk` entre em um loop, no entanto, o agente ainda pode acabar \"preso\" em um local do qual não consegue escapar.\n" + ], + "cell_type": "markdown", + "metadata": {} + }, + { + "cell_type": "code", + "execution_count": 58, + "metadata": {}, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Average path length = 5.31, eaten by wolf: 0 times\n" + ] + } + ], + "source": [ + "\n", + "# code block 10" + ] + }, + { + "source": [], + "cell_type": "markdown", + "metadata": {} + }, + { + "cell_type": "code", + "execution_count": 57, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "[]" + ] + }, + "metadata": {}, + "execution_count": 57 + }, + { + "output_type": "display_data", + "data": { + "text/plain": "
", + "image/svg+xml": "\r\n\r\n\r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n", + "image/png": "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\n" + }, + "metadata": { + "needs_background": "light" + } + } + ], + "source": [ + "plt.plot(lpath)" + ] + }, + { + "source": [ + "## Exercício\n", + "## Um mundo mais realista de Pedro e o Lobo\n", + "\n", + "### Introdução\n", + "\n", + "Neste exercício, você criará um mundo mais realista para a história de Pedro e o Lobo. A ideia é usar programação para simular interações entre os personagens e o ambiente. \n", + "\n", + "### Objetivo\n", + "\n", + "O objetivo é praticar conceitos de programação como classes, métodos e interações entre objetos. Além disso, você aprenderá a modelar um sistema simples que imita o comportamento de um mundo real.\n", + "\n", + "### Passos\n", + "\n", + "1. **Crie as classes principais** \n", + " Comece criando classes para os personagens principais: Pedro, o Lobo, e outros animais. Cada classe deve ter atributos e métodos que representem suas características e ações.\n", + "\n", + "2. **Adicione interações** \n", + " Programe interações entre os personagens. Por exemplo, Pedro pode tentar capturar o Lobo, e o Lobo pode reagir de diferentes maneiras dependendo da situação.\n", + "\n", + "3. **Simule o ambiente** \n", + " Crie uma classe para o ambiente onde a história acontece. O ambiente pode incluir elementos como árvores, cercas e outros objetos que influenciam as ações dos personagens.\n", + "\n", + "4. **Teste o sistema** \n", + " Escreva um código para testar as interações e garantir que o sistema funcione como esperado. Experimente diferentes cenários para ver como os personagens reagem.\n", + "\n", + "### Dicas\n", + "\n", + "- Pense em como os personagens se comportariam em um mundo real. Por exemplo, o Lobo pode ter fome e procurar comida, enquanto Pedro pode usar ferramentas para capturá-lo. \n", + "- Use herança para evitar duplicação de código. Por exemplo, se vários animais compartilham características semelhantes, você pode criar uma classe base \"Animal\". \n", + "- Certifique-se de que as interações sejam dinâmicas e interessantes. Isso tornará o exercício mais divertido e desafiador.\n", + "\n", + "### Exemplo\n", + "\n", + "Aqui está um exemplo de como você pode começar:\n", + "\n", + "```python\n", + "class Pedro:\n", + " def __init__(self, nome, idade):\n", + " self.nome = nome\n", + " self.idade = idade\n", + "\n", + " def capturar_lobo(self):\n", + " print(f\"{self.nome} está tentando capturar o lobo!\")\n", + "\n", + "class Lobo:\n", + " def __init__(self, fome):\n", + " self.fome = fome\n", + "\n", + " def reagir(self):\n", + " if self.fome:\n", + " print(\"O lobo está faminto e fica agressivo!\")\n", + " else:\n", + " print(\"O lobo está calmo e foge.\")\n", + "```\n", + "\n", + "### Conclusão\n", + "\n", + "Este exercício é uma ótima maneira de praticar programação orientada a objetos e aprender a modelar sistemas. Divirta-se criando seu próprio mundo de Pedro e o Lobo!\n" + ], + "cell_type": "markdown", + "metadata": {} + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n---\n\n**Aviso Legal**: \nEste documento foi traduzido utilizando o serviço de tradução por IA [Co-op Translator](https://github.com/Azure/co-op-translator). Embora nos esforcemos para garantir a precisão, esteja ciente de que traduções automáticas podem conter erros ou imprecisões. O documento original em seu idioma nativo deve ser considerado a fonte oficial. Para informações críticas, recomenda-se a tradução profissional feita por humanos. Não nos responsabilizamos por quaisquer mal-entendidos ou interpretações equivocadas decorrentes do uso desta tradução.\n" + ] + } + ] +} \ No newline at end of file diff --git a/translations/pt-BR/8-Reinforcement/1-QLearning/solution/Julia/README.md b/translations/pt-BR/8-Reinforcement/1-QLearning/solution/Julia/README.md new file mode 100644 index 000000000..c58234bae --- /dev/null +++ b/translations/pt-BR/8-Reinforcement/1-QLearning/solution/Julia/README.md @@ -0,0 +1,6 @@ + + +--- + +**Aviso Legal**: +Este documento foi traduzido utilizando o serviço de tradução por IA [Co-op Translator](https://github.com/Azure/co-op-translator). Embora nos esforcemos para garantir a precisão, esteja ciente de que traduções automatizadas podem conter erros ou imprecisões. O documento original em seu idioma nativo deve ser considerado a fonte autoritativa. Para informações críticas, recomenda-se a tradução profissional realizada por humanos. Não nos responsabilizamos por quaisquer mal-entendidos ou interpretações equivocadas decorrentes do uso desta tradução. \ No newline at end of file diff --git a/translations/pt-BR/8-Reinforcement/1-QLearning/solution/R/README.md b/translations/pt-BR/8-Reinforcement/1-QLearning/solution/R/README.md new file mode 100644 index 000000000..c58234bae --- /dev/null +++ b/translations/pt-BR/8-Reinforcement/1-QLearning/solution/R/README.md @@ -0,0 +1,6 @@ + + +--- + +**Aviso Legal**: +Este documento foi traduzido utilizando o serviço de tradução por IA [Co-op Translator](https://github.com/Azure/co-op-translator). Embora nos esforcemos para garantir a precisão, esteja ciente de que traduções automatizadas podem conter erros ou imprecisões. O documento original em seu idioma nativo deve ser considerado a fonte autoritativa. Para informações críticas, recomenda-se a tradução profissional realizada por humanos. Não nos responsabilizamos por quaisquer mal-entendidos ou interpretações equivocadas decorrentes do uso desta tradução. \ No newline at end of file diff --git a/translations/pt-BR/8-Reinforcement/1-QLearning/solution/assignment-solution.ipynb b/translations/pt-BR/8-Reinforcement/1-QLearning/solution/assignment-solution.ipynb new file mode 100644 index 000000000..6bcc93dea --- /dev/null +++ b/translations/pt-BR/8-Reinforcement/1-QLearning/solution/assignment-solution.ipynb @@ -0,0 +1,462 @@ +{ + "metadata": { + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.7.0" + }, + "orig_nbformat": 2, + "kernelspec": { + "name": "python3", + "display_name": "Python 3.7.0 64-bit ('3.7')" + }, + "interpreter": { + "hash": "70b38d7a306a849643e446cd70466270a13445e5987dfa1344ef2b127438fa4d" + }, + "coopTranslator": { + "original_hash": "eadbd20d2a075efb602615ad90b1e97a", + "translation_date": "2025-08-30T00:09:53+00:00", + "source_file": "8-Reinforcement/1-QLearning/solution/assignment-solution.ipynb", + "language_code": "br" + } + }, + "nbformat": 4, + "nbformat_minor": 2, + "cells": [ + { + "source": [ + "# Pedro e o Lobo: Ambiente Realista\n", + "\n", + "Na nossa situação, Pedro conseguia se movimentar quase sem se cansar ou sentir fome. Em um mundo mais realista, ele precisaria sentar e descansar de vez em quando, além de se alimentar. Vamos tornar nosso mundo mais realista implementando as seguintes regras:\n", + "\n", + "1. Ao se mover de um lugar para outro, Pedro perde **energia** e ganha um pouco de **fadiga**.\n", + "2. Pedro pode recuperar energia comendo maçãs.\n", + "3. Pedro pode se livrar da fadiga descansando sob uma árvore ou na grama (ou seja, caminhando para uma localização no tabuleiro que tenha uma árvore ou grama - campo verde).\n", + "4. Pedro precisa encontrar e matar o lobo.\n", + "5. Para matar o lobo, Pedro precisa ter certos níveis de energia e fadiga; caso contrário, ele perde a batalha.\n" + ], + "cell_type": "markdown", + "metadata": {} + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "import matplotlib.pyplot as plt\n", + "import numpy as np\n", + "import random\n", + "import math\n", + "from rlboard import *" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [ + { + "output_type": "display_data", + "data": { + "text/plain": "
", + "image/svg+xml": "\n\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n\n", + "image/png": "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\n" + }, + "metadata": { + "needs_background": "light" + } + } + ], + "source": [ + "width, height = 8,8\n", + "m = Board(width,height)\n", + "m.randomize(seed=13)\n", + "m.plot()" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [], + "source": [ + "actions = { \"U\" : (0,-1), \"D\" : (0,1), \"L\" : (-1,0), \"R\" : (1,0) }\n", + "action_idx = { a : i for i,a in enumerate(actions.keys()) }" + ] + }, + { + "source": [ + "## Definindo estado\n", + "\n", + "Nas novas regras do jogo, precisamos acompanhar a energia e o cansaço em cada estado do tabuleiro. Assim, vamos criar um objeto `state` que irá conter todas as informações necessárias sobre o estado atual do problema, incluindo o estado do tabuleiro, os níveis atuais de energia e cansaço, e se podemos derrotar o lobo enquanto estamos no estado terminal:\n" + ], + "cell_type": "markdown", + "metadata": {} + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [], + "source": [ + "class state:\n", + " def __init__(self,board,energy=10,fatigue=0,init=True):\n", + " self.board = board\n", + " self.energy = energy\n", + " self.fatigue = fatigue\n", + " self.dead = False\n", + " if init:\n", + " self.board.random_start()\n", + " self.update()\n", + "\n", + " def at(self):\n", + " return self.board.at()\n", + "\n", + " def update(self):\n", + " if self.at() == Board.Cell.water:\n", + " self.dead = True\n", + " return\n", + " if self.at() == Board.Cell.tree:\n", + " self.fatigue = 0\n", + " if self.at() == Board.Cell.apple:\n", + " self.energy = 10\n", + "\n", + " def move(self,a):\n", + " self.board.move(a)\n", + " self.energy -= 1\n", + " self.fatigue += 1\n", + " self.update()\n", + "\n", + " def is_winning(self):\n", + " return self.energy > self.fatigue" + ] + }, + { + "source": [], + "cell_type": "markdown", + "metadata": {} + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": { + "tags": [] + }, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "0" + ] + }, + "metadata": {}, + "execution_count": 5 + } + ], + "source": [ + "def random_policy(state):\n", + " return random.choice(list(actions))\n", + "\n", + "def walk(board,policy):\n", + " n = 0 # number of steps\n", + " s = state(board)\n", + " while True:\n", + " if s.at() == Board.Cell.wolf:\n", + " if s.is_winning():\n", + " return n # success!\n", + " else:\n", + " return -n # failure!\n", + " if s.at() == Board.Cell.water:\n", + " return 0 # died\n", + " a = actions[policy(m)]\n", + " s.move(a)\n", + " n+=1\n", + "\n", + "walk(m,random_policy)" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Killed by wolf = 5, won: 1 times, drown: 94 times\n" + ] + } + ], + "source": [ + "def print_statistics(policy):\n", + " s,w,n = 0,0,0\n", + " for _ in range(100):\n", + " z = walk(m,policy)\n", + " if z<0:\n", + " w+=1\n", + " elif z==0:\n", + " n+=1\n", + " else:\n", + " s+=1\n", + " print(f\"Killed by wolf = {w}, won: {s} times, drown: {n} times\")\n", + "\n", + "print_statistics(random_policy)" + ] + }, + { + "source": [ + "## Função de Recompensa\n", + "\n", + "### Introdução\n", + "\n", + "A função de recompensa é um componente essencial para treinar um modelo de aprendizado por reforço. Ela define como o agente deve ser recompensado ou penalizado com base em suas ações e estados no ambiente. Projetar uma boa função de recompensa é crucial para garantir que o agente aprenda o comportamento desejado.\n", + "\n", + "### Diretrizes para Criar uma Função de Recompensa\n", + "\n", + "- **Clareza**: Certifique-se de que a função de recompensa seja fácil de entender e implementar. Recompensas complexas podem dificultar o aprendizado do agente.\n", + "- **Consistência**: A recompensa deve ser consistente com os objetivos do problema. Evite recompensas que incentivem comportamentos indesejados.\n", + "- **Escalabilidade**: A função de recompensa deve funcionar bem em diferentes escalas e cenários do ambiente.\n", + "\n", + "### Exemplos de Funções de Recompensa\n", + "\n", + "#### Exemplo 1: Navegação\n", + "\n", + "Se o objetivo do agente é alcançar um destino específico, você pode definir a recompensa da seguinte forma:\n", + "\n", + "- Recompensa positiva ao alcançar o destino.\n", + "- Penalidade por cada passo dado para incentivar trajetórias mais curtas.\n", + "- Penalidade adicional por colisões ou ações inválidas.\n", + "\n", + "#### Exemplo 2: Controle de Recursos\n", + "\n", + "Em um cenário onde o agente deve gerenciar recursos, a função de recompensa pode incluir:\n", + "\n", + "- Recompensa por maximizar a utilização eficiente dos recursos.\n", + "- Penalidade por desperdício ou uso excessivo.\n", + "- Recompensa adicional por atingir metas específicas dentro de um limite de tempo.\n", + "\n", + "### Boas Práticas\n", + "\n", + "- **Teste e Ajuste**: Experimente diferentes configurações de recompensa para encontrar o equilíbrio ideal.\n", + "- **Evite Recompensas Excessivas**: Recompensas muito altas podem levar o agente a explorar menos o ambiente.\n", + "- **Monitore o Comportamento**: Observe como o agente responde à função de recompensa e ajuste conforme necessário.\n", + "\n", + "### Conclusão\n", + "\n", + "Uma função de recompensa bem projetada é fundamental para o sucesso do aprendizado por reforço. Dedique tempo para entender os objetivos do problema e crie uma função que incentive o comportamento desejado.\n" + ], + "cell_type": "markdown", + "metadata": {} + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [], + "source": [ + "def reward(s):\n", + " r = s.energy-s.fatigue\n", + " if s.at()==Board.Cell.wolf:\n", + " return 100 if s.is_winning() else -100\n", + " if s.at()==Board.Cell.water:\n", + " return -100\n", + " return r" + ] + }, + { + "source": [ + "## Algoritmo Q-Learning\n", + "\n", + "O algoritmo de aprendizado em si permanece praticamente inalterado, apenas usamos `state` em vez de apenas a posição do tabuleiro.\n" + ], + "cell_type": "markdown", + "metadata": {} + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [], + "source": [ + "Q = np.ones((width,height,len(actions)),dtype=np.float)*1.0/len(actions)" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [], + "source": [ + "def probs(v,eps=1e-4):\n", + " v = v-v.min()+eps\n", + " v = v/v.sum()\n", + " return v" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "" + ] + } + ], + "source": [ + "\n", + "from IPython.display import clear_output\n", + "\n", + "lpath = []\n", + "\n", + "for epoch in range(10000):\n", + " clear_output(wait=True)\n", + " print(f\"Epoch = {epoch}\",end='')\n", + "\n", + " # Pick initial point\n", + " s = state(m)\n", + " \n", + " # Start travelling\n", + " n=0\n", + " cum_reward = 0\n", + " while True:\n", + " x,y = s.board.human\n", + " v = probs(Q[x,y])\n", + " while True:\n", + " a = random.choices(list(actions),weights=v)[0]\n", + " dpos = actions[a]\n", + " if s.board.is_valid(s.board.move_pos(s.board.human,dpos)):\n", + " break \n", + " s.move(dpos)\n", + " r = reward(s)\n", + " if abs(r)==100: # end of game\n", + " print(f\" {n} steps\",end='\\r')\n", + " lpath.append(n)\n", + " break\n", + " alpha = np.exp(-n / 3000)\n", + " gamma = 0.5\n", + " ai = action_idx[a]\n", + " Q[x,y,ai] = (1 - alpha) * Q[x,y,ai] + alpha * (r + gamma * Q[x+dpos[0], y+dpos[1]].max())\n", + " n+=1" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [ + { + "output_type": "display_data", + "data": { + "text/plain": "
", + "image/svg+xml": "\n\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n\n", + "image/png": "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\n" + }, + "metadata": { + "needs_background": "light" + } + } + ], + "source": [ + "m.plot(Q)" + ] + }, + { + "source": [ + "## Resultados\n", + "\n", + "Vamos ver se conseguimos treinar Peter para enfrentar o lobo!\n" + ], + "cell_type": "markdown", + "metadata": {} + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Killed by wolf = 1, won: 9 times, drown: 90 times\n" + ] + } + ], + "source": [ + "def qpolicy(m):\n", + " x,y = m.human\n", + " v = probs(Q[x,y])\n", + " a = random.choices(list(actions),weights=v)[0]\n", + " return a\n", + "\n", + "print_statistics(qpolicy)" + ] + }, + { + "source": [ + "Agora vemos muito menos casos de afogamento, mas Peter ainda não consegue matar o lobo sempre. Tente experimentar e veja se consegue melhorar esse resultado ajustando os hiperparâmetros.\n" + ], + "cell_type": "markdown", + "metadata": {} + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "[]" + ] + }, + "metadata": {}, + "execution_count": 13 + }, + { + "output_type": "display_data", + "data": { + "text/plain": "
", + "image/svg+xml": "\n\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n\n", + "image/png": "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\n" + }, + "metadata": { + "needs_background": "light" + } + } + ], + "source": [ + "plt.plot(lpath)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n---\n\n**Aviso Legal**: \nEste documento foi traduzido utilizando o serviço de tradução por IA [Co-op Translator](https://github.com/Azure/co-op-translator). Embora nos esforcemos para garantir a precisão, esteja ciente de que traduções automatizadas podem conter erros ou imprecisões. O documento original em seu idioma nativo deve ser considerado a fonte autoritativa. Para informações críticas, recomenda-se a tradução profissional realizada por humanos. Não nos responsabilizamos por quaisquer mal-entendidos ou interpretações equivocadas decorrentes do uso desta tradução.\n" + ] + } + ] +} \ No newline at end of file diff --git a/translations/pt-BR/8-Reinforcement/1-QLearning/solution/notebook.ipynb b/translations/pt-BR/8-Reinforcement/1-QLearning/solution/notebook.ipynb new file mode 100644 index 000000000..3a77faf60 --- /dev/null +++ b/translations/pt-BR/8-Reinforcement/1-QLearning/solution/notebook.ipynb @@ -0,0 +1,577 @@ +{ + "metadata": { + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.7.0" + }, + "orig_nbformat": 2, + "kernelspec": { + "name": "python3", + "display_name": "Python 3.7.0 64-bit ('3.7')" + }, + "interpreter": { + "hash": "70b38d7a306a849643e446cd70466270a13445e5987dfa1344ef2b127438fa4d" + }, + "coopTranslator": { + "original_hash": "488431336543f71f14d4aaf0399e3381", + "translation_date": "2025-08-30T00:07:38+00:00", + "source_file": "8-Reinforcement/1-QLearning/solution/notebook.ipynb", + "language_code": "br" + } + }, + "nbformat": 4, + "nbformat_minor": 2, + "cells": [ + { + "source": [ + "# Pedro e o Lobo: Introdução ao Aprendizado por Reforço\n", + "\n", + "Neste tutorial, aprenderemos como aplicar aprendizado por reforço a um problema de busca de caminhos. O cenário é inspirado no conto musical [Pedro e o Lobo](https://en.wikipedia.org/wiki/Peter_and_the_Wolf) do compositor russo [Sergei Prokofiev](https://en.wikipedia.org/wiki/Sergei_Prokofiev). É uma história sobre o jovem pioneiro Pedro, que corajosamente sai de sua casa para a clareira da floresta para perseguir o lobo. Treinaremos algoritmos de aprendizado de máquina que ajudarão Pedro a explorar a área ao redor e construir um mapa de navegação ideal.\n", + "\n", + "Primeiro, vamos importar algumas bibliotecas úteis:\n" + ], + "cell_type": "markdown", + "metadata": {} + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "import matplotlib.pyplot as plt\n", + "import numpy as np\n", + "import random\n", + "import math" + ] + }, + { + "source": [ + "## Visão Geral do Aprendizado por Reforço\n", + "\n", + "**Aprendizado por Reforço** (RL) é uma técnica de aprendizado que nos permite aprender o comportamento ideal de um **agente** em um determinado **ambiente** por meio da realização de muitos experimentos. Um agente nesse ambiente deve ter algum **objetivo**, definido por uma **função de recompensa**.\n", + "\n", + "## O Ambiente\n", + "\n", + "Para simplificar, vamos considerar o mundo de Peter como um tabuleiro quadrado de tamanho `width` x `height`. Cada célula desse tabuleiro pode ser:\n", + "* **chão**, onde Peter e outras criaturas podem caminhar\n", + "* **água**, onde obviamente não se pode caminhar\n", + "* **uma árvore** ou **grama** - um lugar onde você pode descansar um pouco\n", + "* **uma maçã**, que representa algo que Peter ficaria feliz em encontrar para se alimentar\n", + "* **um lobo**, que é perigoso e deve ser evitado\n", + "\n", + "Para trabalhar com o ambiente, definiremos uma classe chamada `Board`. Para não sobrecarregar este notebook, movemos todo o código relacionado ao trabalho com o tabuleiro para um módulo separado chamado `rlboard`, que agora iremos importar. Você pode olhar dentro desse módulo para obter mais detalhes sobre a implementação interna.\n" + ], + "cell_type": "markdown", + "metadata": {} + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "from rlboard import *" + ] + }, + { + "source": [ + "Vamos agora criar um tabuleiro aleatório e ver como ele fica:\n" + ], + "cell_type": "markdown", + "metadata": {} + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "output_type": "display_data", + "data": { + "text/plain": "
", + "image/svg+xml": "\n\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n\n", + "image/png": "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\n" + }, + "metadata": { + "needs_background": "light" + } + } + ], + "source": [ + "width, height = 8,8\n", + "m = Board(width,height)\n", + "m.randomize(seed=13)\n", + "m.plot()" + ] + }, + { + "source": [ + "## Ações e Política\n", + "\n", + "No nosso exemplo, o objetivo de Peter seria encontrar uma maçã, enquanto evita o lobo e outros obstáculos. Para isso, ele pode basicamente andar por aí até encontrar uma maçã. Portanto, em qualquer posição, ele pode escolher entre uma das seguintes ações: cima, baixo, esquerda e direita. Definiremos essas ações como um dicionário e as mapearemos para pares de mudanças correspondentes nas coordenadas. Por exemplo, mover para a direita (`R`) corresponderia ao par `(1,0)`.\n" + ], + "cell_type": "markdown", + "metadata": {} + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [], + "source": [ + "actions = { \"U\" : (0,-1), \"D\" : (0,1), \"L\" : (-1,0), \"R\" : (1,0) }\n", + "action_idx = { a : i for i,a in enumerate(actions.keys()) }" + ] + }, + { + "source": [ + "A estratégia do nosso agente (Peter) é definida por uma chamada **política**. Vamos considerar a política mais simples chamada **caminhada aleatória**.\n", + "\n", + "## Caminhada aleatória\n", + "\n", + "Vamos primeiro resolver nosso problema implementando uma estratégia de caminhada aleatória.\n" + ], + "cell_type": "markdown", + "metadata": {} + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": { + "tags": [] + }, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "18" + ] + }, + "metadata": {}, + "execution_count": 5 + } + ], + "source": [ + "def random_policy(m):\n", + " return random.choice(list(actions))\n", + "\n", + "def walk(m,policy,start_position=None):\n", + " n = 0 # number of steps\n", + " # set initial position\n", + " if start_position:\n", + " m.human = start_position \n", + " else:\n", + " m.random_start()\n", + " while True:\n", + " if m.at() == Board.Cell.apple:\n", + " return n # success!\n", + " if m.at() in [Board.Cell.wolf, Board.Cell.water]:\n", + " return -1 # eaten by wolf or drowned\n", + " while True:\n", + " a = actions[policy(m)]\n", + " new_pos = m.move_pos(m.human,a)\n", + " if m.is_valid(new_pos) and m.at(new_pos)!=Board.Cell.water:\n", + " m.move(a) # do the actual move\n", + " break\n", + " n+=1\n", + "\n", + "walk(m,random_policy)" + ] + }, + { + "source": [ + "Vamos executar o experimento de caminhada aleatória várias vezes e ver o número médio de passos dados:\n" + ], + "cell_type": "markdown", + "metadata": {} + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Average path length = 32.87096774193548, eaten by wolf: 7 times\n" + ] + } + ], + "source": [ + "def print_statistics(policy):\n", + " s,w,n = 0,0,0\n", + " for _ in range(100):\n", + " z = walk(m,policy)\n", + " if z<0:\n", + " w+=1\n", + " else:\n", + " s += z\n", + " n += 1\n", + " print(f\"Average path length = {s/n}, eaten by wolf: {w} times\")\n", + "\n", + "print_statistics(random_policy)" + ] + }, + { + "source": [ + "## Função de Recompensa\n", + "\n", + "Para tornar nossa política mais inteligente, precisamos entender quais movimentos são \"melhores\" do que outros.\n" + ], + "cell_type": "markdown", + "metadata": {} + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [], + "source": [ + "move_reward = -0.1\n", + "goal_reward = 10\n", + "end_reward = -10\n", + "\n", + "def reward(m,pos=None):\n", + " pos = pos or m.human\n", + " if not m.is_valid(pos):\n", + " return end_reward\n", + " x = m.at(pos)\n", + " if x==Board.Cell.water or x == Board.Cell.wolf:\n", + " return end_reward\n", + " if x==Board.Cell.apple:\n", + " return goal_reward\n", + " return move_reward" + ] + }, + { + "source": [ + "## Q-Learning\n", + "\n", + "Construa uma Q-Table, ou matriz multidimensional. Como nosso tabuleiro tem dimensões `width` x `height`, podemos representar a Q-Table por um array numpy com formato `width` x `height` x `len(actions)`:\n" + ], + "cell_type": "markdown", + "metadata": {} + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [], + "source": [ + "Q = np.ones((width,height,len(actions)),dtype=np.float)*1.0/len(actions)" + ] + }, + { + "source": [ + "Passe a Q-Table para a função de plotagem para visualizar a tabela no tabuleiro:\n" + ], + "cell_type": "markdown", + "metadata": {} + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "output_type": "display_data", + "data": { + "text/plain": "
", + "image/svg+xml": "\n\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n\n", + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAW4AAAFpCAYAAAC8p8I3AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjAsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+17YcXAAAgAElEQVR4nOzdeXhU5f3+8fczk8m+BwIYBGQRZIkoiKIsIm6tuwVEZSkiqC1SXHAB259VYhUVqrUVUURA3FGwFLQKrsAXxJZNBQIkICEEkpBl9plznt8fmaRESEBJODPh8/LKlcmZ5dwkmduT5yyP0lojhBAictisDiCEEOLnkeIWQogII8UthBARRopbCCEijBS3EEJEGCluIYSIMI1W3EqpK5VS25RSO5RSDzXWeoQQ4lSjGuM4bqWUHdgOXAbsBb4BbtZaf9/gKxNCiFNMY21x9wF2aK13aa39wFvAdY20LiGEOKU0VnFnAT8e9vXe0DIhhBAnKMqqFSulxgPjARwOR6/s7GyrohyTz+ejsrKSZs2aWR2lTmVlZTgcDhISEqyOUqfCwkIyMzOx2+1WR6nTnj17aNOmjdUx6hQMBjl48CCtWrWyOkqdnE4nwWCQ1NRUq6PU6eDBgyQnJxMTE2N1lDp99913eDweddQ7tdYN/gH0BT4+7OuHgYfrenxmZqYOZ7m5uXr27NlWx6jXBx98oFevXm11jHo9/vjjurS01OoYdTJNU0+YMMHqGPUqKSnROTk5Vseo19dff60XL15sdYx6zZo1S+fm5lodo16hXjxqZzbWUMk3QCel1BlKqWhgOPBhI61LCCFOKY0yVKK1DiqlJgAfA3bgVa31d42xLiGEONU02hi31noZsKyxXl8IIU5VcuakEEJEGCluIYSIMFLcQggRYaS4hRAiwkhxCyFEhJHiFkKICCPFLYQQEUaKWwghIowUtxBCRBgpbiGEiDBS3EIIEWGkuIUQIsI02eLOy8urvhZ4WDIMgz179lgdo14ul4uDBw9aHaNeBw8exOVyWR2jXnv27MEwDKtj1ElrTV5entUx6uX3+9m3b5/VMepVVlZGWVnZSVmXZTPgNJZt27bx1VdfsXnzZnr06EHPnj3p3bu31bFq+fzzz9m2bRvbtm2ja9euXHnllbRu3drqWLW8/fbbFBQUUFFRQevWrRk5cmRYzRbi8/lYsGABe/fuJSkpiaysLIYPH251rFoKCgpYvnw533//PZ07d+bMM89k0KBBVseqZf369WzYsIFNmzaRnZ1Nv3796NKli9Wxalm6dCn5+fkUFBTQoUMHhgwZElaz62itmTdvHoWFhQC0atWK0aNHo9TRJ69pCE1ui/urr75i7dq1/OlPf2LXrl188MEHVkc6wpw5c3C73TzwwAMsX76cLVu2WB3pCI899hjdunXjhhtu4K9//Stut9vqSLV4PB5mzpzJ9ddfT/fu3XnsscesjnSE7777jmXLljF58mS8Xi+vvPKK1ZGOsHjxYnbt2sWjjz7KunXr+Oqrr6yOdISnn36ajIwMxo4dy4IFC9i/f7/VkWoxTZNp06YxYMAA+vfvz7Rp0zBNs1HX2aSKOy8vj82bNxMTE8O1117LQw89RGxsLKtWrbI6Wo1FixbRt29fPvroIx555BH+/ve/s3DhQsrLy62OVmPKlCn85S9/4aGHHmL16tUsXryY22+/3epYtdx+++1MmTKFMWPGkJqayt///ncefvhhq2PVqKioYP78+XTv3p2rrrqKkSNH0q9fP9577z2ro9VYvXo10dHR7Nq1i9GjR/Pkk0+yZcsWdu3aZXW0Gs8//zx33XUXzz33HPPnz2fBggVMmTIlrIaexo8fzzPPPMOECRMoLS3lvffeY/z48Y26ziY1VNKuXTt69OjBzp07Wb58OfPnz8fr9XLhhRdaHa3GjTfeyOjRo7ntttu4/PLLeeCBB7jllltITk62OlqNadOm0bNnT+bNm0daWho33XQTy5aF15wYL7/8Mpdffjnvv/8+FRUV3H777WzcuNHqWDWSkpIYNWoUb7/9Np9++ikrV65k1apVLFiwwOpoNfr27cuyZcu48MIL+e1vf8tTTz1F9+7dOeOMM6yOVuPuu+9m0KBBPPnkk3Tu3Jnx48fz1FNPYbOFzzbnSy+9RHZ2Nu+//z5Q9R7ftGlTo66zSRW3UoqePXuSl5fHc889h9fr5eKLL27UsaafSynFNddcw8aNG9m2bRuZmZl06NAhrDLabDZGjRrFBx98gM1m49JLLyU+Pt7qWLXExsZy+eWXM2/ePEzTZNSoUWH1ZlZK0b59e1q2bMkLL7yA3+/n2muvDaufs1KKgQMH8vnnn/Pcc88B0LNnz7DLeOutt/Lpp5/yxRdfkJ2dTfPmzcMqo81mY9iwYbz55psADBs2rNF/F5tUcQP07t2b3r17s2rVKi688MKw+gFXGzp0KDfccAPffvst559/vtVxjur++++npKSE0tJSOnXqZHWcI8TFxZGTk0Nubi5paWk0a9bM6khH6NixIzk5Oaxbt45zzjkHh8NhdaQjXHbZZVx66aWsXr2aiy66yOo4RzVu3DhcLhc7d+4kOzvb6jhHsNlsPProo+zduxfgpBxo0OSKu1q4/hJWi4qKCtvSrpaRkUFGRobVMeoVjv9T+ak+ffpYHaFeSqmwf78kJCSEZWkf7mQeGRY+f1sKIYQ4LlLcQggRYaS4hRAiwkhxCyFEhJHiFkKICCPFLYQQEUaKWwghIowUtxBCRBgpbiGEiDBS3EIIEWFO6JR3pVQ+UAkYQFBr3VsplQ68DbQD8oFhWutDJxZTCCFEtYbY4h6kte6pta6eZuYhYIXWuhOwIvS1EEKIBtIYQyXXAfNCt+cB1zfCOoQQ4pR1osWtgX8rpb5VSlVP+dBCa10Yur0faHGC6xBCCHGYE72saz+tdYFSKhP4RCm19fA7tdZaKXXUqdZDRT8eIDExkdzc3BOM0nj27t1LWVlZWGcsLi7GNM2wzuhyucjLy6O4uNjqKHXy+/1h/T2sqKjA5XKFdcb9+/eH/fulrKyMH3/8Ea2PWk9hob55K0+ouLXWBaHPB5RSHwB9gCKlVCutdaFSqhVwoI7nzgZmA2RkZOjPP//8RKI0qrKyMvbu3Us4Z9y5cyfx8fGUlJRYHaVOxcXFrF69Oqxmi/8pp9MZ1j9nr9fLmoNrWPL5Equj1Cm+MJ7BnsGNPmHuiSgoKODbb79lx44dVkepU73fP631L/oAEoCkw26vBq4EngYeCi1/CJh+rNfKzMzU4Sw3N1fPnj3b6hj1+uCDD/Tq1autjlGvxx9/XJeWllodo06maeoJEyZYHaNeJSUluldOL00Y/9fy65Z68eLFVn+r6jVr1iydm5trdYx6hXrxqJ15IlvcLYAPQlODRQFvaK0/Ukp9A7yjlBoL7AaGncA6hBBC/MQvLm6t9S7g7KMsLwEGn0goIYQQdZMzJ4UQIsJIcQshRISR4hZCiAgjxS2EEBFGilsIISKMFLcQQkQYKW4hhIgwUtxCCBFhpLiFECLCSHELIUSEkeIWQogII8UthBARRopbCCEijBS3EEJEmCZb3IsWLQrraYn8fj9Lly61Oka9CgoKWL9+vdUx6vXtt99SUFBgdYx6LV26FL/fb3WMiFZeXh7WMxMBbNu2jW3btp2UdZ3onJNh5/PPP2fOnDn07duX0aNHc8011zB06FCrY9Uya9Ys1q5dS8+ePRk5ciSTJ08mOzvb6li13HvvvRiGQVpaGs8//zwvvvgiCQkJVseq4Xa7ufPOO2nfvj1lZWUopZg5c6bVsWrZvHkz06dPp3fv3txxxx306dOHu+66y+pYEScnJ4c9e/bQvn175syZw1NPPcVpp51mdawapmkyfvx4mjVrhtaakpISZs+ejc3WeNvFTWqL2zAMtm3bRteuXbnpppu4+uqr2bhxI8Fg0OpoNfx+P2vXrmXo0KGMGDGCrKws8vPzw+qvA4/Hw9dff81dd93FnXfeWTP5azipnux1zJgx3HvvvaxatQqPx2N1rBpaa3bv3k2zZs24+eabue222/i///s/2fL+mXw+H1988QXjxo1jzJgxKKUoKioKq/eL2+1m48aNjBs3jokTJ7J582bcbnejrrNJFXdBQQHbtm2jqKiIUaNGcemllxIdHc1//vMfq6PV+Pe//03Pnj2ZM2cOjz/+OHfeeSf//Oc/qaystDpajRkzZnDPPffwu9/9juXLlzN9+nSmTp1qdaxapk6dyogRIxgzZgwHDx7kj3/8I88++6zVsWo4nU4WL15McnIyw4cP56yzzqJXr158/PHHVkeLKPPnz+fmm29m6tSpvPrqq0yZMoUZM2aE1UTEU6dO5Z577mHcuHFs3ryZZ555ptHfL01qqKRNmzZ07dqV5cuXM2fOHB588EEyMzPp06eP1dFqXH311YwcOZJOnTpx5513cvvtt3P//feTnJxsdbQaU6dO5ayzzmLKlCm0bduWoUOHsm7dOqtj1TJz5kx69+7Nq6++yg8//MC0adPYunWr1bFqJCUlMWzYMKZPn86rr77KjBkz2L17NxMnTrQ6WkQZN24cAwcO5IYbbmDQoEGMGDGC119/HbvdbnW0GjNmzKB9+/a88MIL+P1+7rjjDnbt2tWo62xSxQ1w5ZVXcvrppzN58mRuvfVWOnToYHWkIzzwwAPk5+czbdo0Jk+eTK9evayOdISXXnqJ7du3s2LFCl544QUSExOtjlRLQkICf//731m5ciVZWVnMnj3b6khHOPfcc5k8eTI5OTlce+21DB8+3OpIEenpp58mLy+PefPmkZOTQ+vWra2OVIvNZmPOnDls2rQJgDlz5jTq+DY0weJu3bo1rVu35oILLiA5OZnQLPRhpUePHnTv3p2BAweG1Zb24QYMGEDfvn0JBoPExcVZHecIDoeDK664ggEDBhAVFYXD4bA60hGaNWvGFVdcQd++fUlKSgrL38VI0KdPH3r16sVVV10VdhsQAEopLr30Uvr37w9ATExMo6+zyRV3tZSUFKsj1EspFbalXc3hcIRlIR4uHP+n8lPh/nOOBHa7PSxL+3Ano7CrNamdk0IIcSqQ4hZCiAgjxS2EEBFGilsIISKMFLcQQkQYKW4hhIgwUtxCCBFhpLiFECLCHLO4lVKvKqUOKKW2HLYsXSn1iVIqN/Q5LbRcKaWeV0rtUEptUkqd25jhhRDiVHQ8W9yvAVf+ZNlDwAqtdSdgRehrgF8BnUIf44EXGyamECKSyOn9jeuYxa21/hIo/cni64B5odvzgOsPWz5fV/k/IFUp1aqhwgohIkM4XS+7KfqlY9wttNaFodv7gRah21nAj4c9bm9omRBCiAZywjsnddX/Wn/2/16VUuOVUuuVUuvDaeYSIYQId7+0uIuqh0BCnw+ElhcApx/2uNahZUfQWs/WWvfWWveOhCu8CSFEuPill3X9EBgNPBn6vOSw5ROUUm8B5wPlhw2p1MkwDBYvXvwLozS+4uJidu7cGdYZt2zZwu7duykqKrI6Sp3279/PRx99FNaXYq2oqAjrn7Pb7SahMIH2i9tbHaVOSflJbHFtCetx7l27dhEVFcWWLVuO/WCLGIZR533HLG6l1JvAxUAzpdRe4P9RVdjvKKXGAruBYaGHLwN+DewA3MCY4wno9yvuuqvFsR9okfh4k9Gj42nRInwz7t69m1mzUigrC9+MHTvGcP31zcNqtvifioqKCuufs9Pp5LyY83iyxZNWR6nT1kNbqbRVhvX3MT4+nifSn8DdonEn9T0RflX3xNLHLG6t9c113DX4KI/VwO+PO1nN82zs39/35z7tpElJ2UGrViX07Ru+GYuKiigraxHW38fWrVfQq1cv0tLSftHzg8Egs2bN4oknnqi1fPbs2fz6178+4emitNa88cYbYf1zLi0t5ZtvvgnrjKZpUlxcHNYZN23aREmPEso7llsdpU6JtronjmiyM+CIpsXv9/Pqq68yceLEI/4Ev/baa/nwww+58soriYqSX2nR9Mkp7yLsBQIBZsyYwaRJk446bqq1ZtSoUSxYsIBgMGhBQiFOLiluEfZsNhuLFy/G5/PV+ZhDhw6xcuXKRp9dW4hwIL/lIuxt2bKFgwcPHvNx+fn55OXlnYREQlhLiluEPYfDcVxj18f7OCEinRS3CHudOnUiKSnpmI9r0aIFWVlyhQXR9Elxi7Bnt9vJycnB4XDU+ZjmzZszadIk7Hb7SUwmhDWkuEXYs9ls9O/fn/PPP/+oW9Tt27fnwgsv5Nxzz5XLiYpTghS3iAhxcXHMnz+fDh061CpnpRTdu3dn3rx5Mr4tThlS3CLsaa0JBoOMGzeOL7/8stax3FprPvzwQ+6++2601mF9fQwhGooUtwhbWmsMw2DDhg1cdNFFrFixos7HvvHGG1x33XXk5uZimqYUuGjS5G9LEZa01rhcLt544w1ee+011q9fX+/jDcNg2bJlaK256aabuPnmm7Hb7TLmLZokKW4RdrTWmKbJww8/zAsvvHDczzNNk2XLlvHRRx9RUFDA5MmTsdlsUt6iyZGhEhF2/H4/d999N7NmzfrZz60eXnn88ceZPn26XLtENElS3CKsuFwuHn74YV566aUTKl23280TTzzBnDlzCAQCDZhQCOtJcYuwEQgE+POf/8zMmTMxTbNmeVRU1HFdPCoqKqrWCThOp5O77rqLWbNmyc5K0aRIcVvE4/GQk5NjdYywMmXKFJ599tkjlo8YMYIzzzzzmM/v378/gwcPPmJM+6GHHuK5555rsJw/1xNPPIHbHb4zrWitmTJlitUx6rV///5fNHTWVElxW+Dee+/l4osvJjs7m7POOosvvvjC6kiWCgaD3H///Tz//PO1trTj4+O5/vrrmTFjBunp6fW+hlKKNm3asHDhQpYtW0Zi4v9mD3G73TzyyCP8/e9/r/X6je2rr76iS5cudO/enUsuuYRJkyadtHUfr2effZbs7GwuvfRSunbtyltvvWV1pCPcdNNNjBkzhujoaDp37szOnTutjmQ5Ke6TrKCgAMMwmDx5MllZWUyZMoXt27efsuOwWmvWrFnDhx9+iN9fNceeUorOnTuzcuVK3nrrLVJTU4/79Zo1a8Zll13GG2+8Qdu2bWu2vl0uF6+99hq5ubknZdgkEAiwbds2br75ZhITE3nnnXcwTZOCgoJGX/fxKikpoby8nHvvvZfY2FhmzpxJQUEBLpfL6mg1du7cSXx8PBMnTuSCCy5g3LhxbNiw4ZQf+pLiPskKCwtJS0tj8+bNbNiwgbZt27J3795T+uiHQCBQa0u4R48e/PWvf6V3797ExMT87MP57HY7l112GTk5ObRp06ZmeTAYrHfm7IYUDAb58ccf0VrzxRdfEB0dTXp6OoWFhSdl/cejtLQUm81Gfn4+69ato2XLllRWVoZVce/atYt27dqxZs0atm7dSufOnfnhhx+kuK0OcKrp3bs3u3btYs2aNZx77rmMHTuWvn37EhcXZ3U0Syil6NOnD48++igZGRmcc845LFiwgEsuueSErvQXGxvLjTfeyDvvvEOLFi3o1KkTjz32GO3btz8px3XHxcVx0UUX8frrr3P99dczevRocnNz6d27d6Ov+3h16tSJYDDI8uXLufrqqxkxYgRZWVlkZmZaHa3GZZddxsqVK8nPzycxMZG77rqLIUOGnPIzHckJOBZ48cUXKSsrY8qUKaxbt67WeOypKDExkZtuuqlmst+fDo2YpnnMsenqk3a01jXFHBcXR58+ffjuu+9QSpGcnHxSL0Q1aNAgvvnmG+69917mzJnzi2e3b0xTp07lnnvuYfz48Xz55ZfEx8dbHekIS5cuJT8/nwULFrB582aSk5OtjmQ5KW4LJCQkkJCQwLx586yOEjYcDgfNmjU76n3BYJCzzz6bdevW1VngsbGxNVuQP71ud0ZGRoPnPR4Oh4O0tDTmzp1ryfqPR1xcHHFxcSxatMjqKHVKSkqiR48eTJ8+3eooYePU/ntDRITo6GgmTpxY79Zyeno6o0aNqneyBSGaCiluERGONcShlJLZb8QpQ4pbCCEijBS3EEJEGCluIYSIMFLcQggRYaS4hRAiwkhxCyFEhDlmcSulXlVKHVBKbTls2aNKqQKl1IbQx68Pu+9hpdQOpdQ2pdQVjRVcCCFOVcezxf0acOVRls/UWvcMfSwDUEp1BYYD3ULP+YdSSg6uFSfsWBcVOtUvOiROLccsbq31l0Dpcb7edcBbWmuf1joP2AH0OYF8QgAccQ2NqKioWifl2Gw2YmJiTnYsISxxImPcE5RSm0JDKdVXz8kCfjzsMXtDy46glBqvlFqvlFofCHhOIIY4FWRmZtZcjMvhcPDUU09x//3315R3SkqKZdckEeJk+6UXmXoReBzQoc/PArf9nBfQWs8GZgMkJbXQPt8vTCJOCQ6HgzVr1hAMBlFK0bFjR/x+P6NGjUJrTWxs7Em5XKsQ4eAXFbfWuqj6tlLqZWBp6MsC4PTDHto6tEyIE2Kz2Y6Yd9LhcHDWWWdZlEgI6/yioRKlVKvDvrwBqD7i5ENguFIqRil1BtAJWHdiEYUQQhxOHWtvvFLqTeBioBlQBPy/0Nc9qRoqyQfu0FoXhh4/laphkyAwSWu9/FghUlLS9Zln3vtL/w2NzuFw0a1bMW3btrU6Sp3279/Pxo0xeL3hd7H+amlp2+nb94ywvvTq5s2b6dGjh9Ux6hQIBMjPz6dTp05WR6lTaWkpfr+fli1bWh2lTvn5+Xzf/HsCCeE71+v2GdspLy0/6vjfMYv7ZEhKytR+/zarY9QpOTmf005bxdatt1odpU5t237EP/7RnF69elkdpU5//etfGTNmDCkpKVZHqdPUqVPJycmxOkadysrKmD9/PhMnTrQ6Sp3Wr19PSUkJV1wRvqdxLFiwgAEDBoT1xljnzp05cODAUYs7TGbAUfj94bulGAiUYBgxYZ3RMOJISEgIy+mxqjkcDlJSUsI2o9Yau90etvmgKmP1zDrhKj4+HrfbHdYZY2JiSExMDOuM9e1sl1PehRAiwkhxCyFEhJHiFkKICCPFLYQQEUaKWwghIowUtxBCRBgpbiGEiDBS3EIIEWGkuIUQIsJIcQshRISR4hZCiAgjxS2EEBFGilsIISKMFLcQQkQYKW4hhIgwUtxCCBFhpLjFUVVUVLBy5UpmzJhBWVkZpmlaHakWrTVlZWXMnDmTFStWUFFRYXWkIwQCAcrKyhgzZgwFBQW4XC6rIx3B6/Vy6NAhhgwZQllZGT6fz+pIR3A6nWzZsoUHH3yQsrIyDMOwOlItWmvKy8t58803efPNNykvL6exZxaT4hZH1bt3b5YtW0bz5s3p2LEj5eXlVkeqpby8nI4dO5KRkcFHH30UllO2ff755/Tu3Zu7776bMWPGcMcdd1gd6Qg5OTlcfvnlPPnkk/Tr14/58+dbHekIV111FU8++SSXXHIJ3bp1Izc31+pItZimSadOndi7dy979+6lU6dOjb6hI8UtjrBo0SJuueUWEhISaN26NTNnzmTu3LlWx6pl7ty5TJgwgZ07d3LnnXcyduxY3nvvPatj1fB4PKxatYoRI0bw4YcfMn/+fDp27Mj69eutjlZjx44d2O12rrrqKv71r3+xcOFCCgoKOHDggNXRanz66acMGjSIDh064Ha7efHFF1m0aFFY/QX42muv8bvf/Q6n08mll17Kn/70J1577bVGXacUtzhC586d2b59O/369aNNmzZs2bKF7Oxsq2PVkp2dzY8//kj//v1JTU3l+++/p0uXLlbHqhEVFUXr1q1RStG/f38CgQCHDh2iVatWVkerkZaWhmmatGnThvPOO4+ioiKSkpKIj4+3OlqNdu3asWfPHs4//3zOPPNMtm/fTufOneudj/Fky87OJjc3l/79+9OiRQs2btzY6O8XKW5xhO7du1NQUMD8+fN57733eP/99znvvPOsjlXLeeedx5dffsn69eu55557yMvLo3v37lbHquFwOOjcuTNvvvkmLpeLoUOHopQiKyvL6mg1MjIySElJYebMmXi9XiZNmkRWVhaJiYlWR6vRsWNHXC4Xf/vb31i7di0vv/wy55xzTlgVd69evdi4cSPLly/nmWeeYc2aNY0+dBcms7yLcPPFF1/w3Xff8cMPP4TdmCJAcnIyubm5vPfee1x99dVhVdrV+vfvz9atW8nJyWHlypVhtSVb7b777uPee+9lypQpfP/991bHOaq3336bwsJClixZwrZt26yOcwSbzcaWLVv4/PPPUUoxY8aMRl+nFLeoU7du3ejWrZvVMeo1ZMgQqyMc09SpU62OUC+lFH/5y1+sjlGvVq1aceedd1odo14XX3zxSVuXDJUIIUSEkeIWQogII8UthBARRopbCCEijBS3EEJEGCluIYSIMMcsbqXU6Uqpz5RS3yulvlNK/SG0PF0p9YlSKjf0OS20XCmlnldK7VBKbVJKndvY/wghhDiVHM8WdxC4T2vdFbgA+L1SqivwELBCa90JWBH6GuBXQKfQx3jgxQZPLYQQp7BjFrfWulBr/Z/Q7UrgByALuA6YF3rYPOD60O3rgPm6yv8BqUqp8LlAgxBCRLifNcatlGoHnAOsBVporQtDd+0HWoRuZwE/Hva0vaFlP32t8Uqp9Uqp9YGA52fGFkKIU9dxF7dSKhFYBEzSWte6ar2uumr4z7pyuNZ6tta6t9a6t8MR93OeKoQQp7TjKm6llIOq0l6otX4/tLioeggk9Ln6Ir4FwOmHPb11aJkQQogG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1r+LXq+XioqKsM5Y3/tEhcObKD09Xd9///1Wx6iTy+Xi4MGDtGvXzuoodSosLCQmJob09HSro9Rp27ZttG/fPqyHUTZu3MjZZ59tdYw6BQIBvv56F4cONf7F+n+p2NhSzjnHR6tGmv2oIeTl5ZGZmdnoM9WciGeeeYbS0tKj7yTSWlv+kZmZqcNZbm6unj17ttUx6vXBBx/o1atXWx2jXo8//rguLS21OkadTNPUEyZMsDpGvUpKSnSvXjm66pJg4fnRsuXXevHixVZ/q+o1a9YsnZuba3WMeoV68aidKWPcQggRYaS4hRAiwkhxCyFEhJHiFkKICCPFLYQQEUaKWwghIowUtxBCRBgpbiGEiDBS3EIIEWGkuIUQIsJIcQshRISR4hZCiAgjxS2EEBFGilsIISKMFLcQQkQYKW4hhIgwTba4V69eHdZTZAWDQdatW2d1jHqVlJSQm5trdYx67dixg5KSEqtj1Oubb74hGAxaHSOiuVwuNm/ebHWMeu3du5eCgoKTsq4wmXOy4axfv54PPviA2NhY/vWvf3HxxRdz2WWXWR2rlnfffZeNGzcSHR3NkiVLGD16NGeeeabVsWp55plnqKiowGazEQgEeOSRR4iLi7M6Vg2Px8O0adNwOByYpklSUhKTJ0+2OlYtO3bsYO7cucTExLBkyRKys7MZNmyY1bEizssvv8zu3btxOBy89dZbTJo0iebNm1sdq4Zpmjz22GM1G4pKKf70pz9hszXednGT2uLWWrNhwwZM0+QPf/gDLVu25PPPPw+rLW+tNf/85z/p3r07d999N0VFRezatSvsMs6bN48bbriB3/72t3zyySe43W6rY9Xi9Xr597//zejRo7nxxhuZP39+2H0Pd+3axf79+5kwYQJnn302H374YVhljARaaxYuXMill17K+PHj2bhxI8XFxWH1fTRNk7fffpvhw4dz8803884772CaZqOus0kVd35+Pps2baKyspJf/epXjB49mtjYWFavXm11tBrvv/8+F1xwAXPnzmXy5MlMmzaNhQsXUlFRYXW0GlOnTiUnJ4fbbruN5cuX88YbbzB+/HirY9Uybtw4Jk2axI033ojP5+P5559nypQpVseqUVlZyfz588nKymLw4MEMHjyYiy66iEWLFlkdLaL87W9/48477+Shhx7ixRdf5B//+AdTp05t9GL8OcaP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\n" + }, + "metadata": { + "needs_background": "light" + } + } + ], + "source": [ + "m.plot(Q)" + ] + }, + { + "source": [ + "## Essência do Q-Learning: Equação de Bellman e Algoritmo de Aprendizado\n", + "\n", + "Escreva um pseudocódigo para o nosso algoritmo de aprendizado:\n", + "\n", + "* Inicialize a Tabela Q (Q-Table) com números iguais para todos os estados e ações\n", + "* Defina a taxa de aprendizado $\\alpha\\leftarrow 1$\n", + "* Repita a simulação várias vezes\n", + " 1. Comece em uma posição aleatória\n", + " 1. Repita\n", + " 1. Selecione uma ação $a$ no estado $s$\n", + " 2. Execute a ação movendo-se para um novo estado $s'$\n", + " 3. Se encontrarmos uma condição de fim de jogo ou a recompensa total for muito pequena - saia da simulação \n", + " 4. Calcule a recompensa $r$ no novo estado\n", + " 5. Atualize a Função Q de acordo com a equação de Bellman: $Q(s,a)\\leftarrow (1-\\alpha)Q(s,a)+\\alpha(r+\\gamma\\max_{a'}Q(s',a'))$\n", + " 6. $s\\leftarrow s'$\n", + " 7. Atualize a recompensa total e diminua $\\alpha$.\n", + "\n", + "## Explorar vs. Explorar\n", + "\n", + "A melhor abordagem é equilibrar entre exploração e exploração. À medida que aprendemos mais sobre o nosso ambiente, estaremos mais propensos a seguir a rota ótima, no entanto, escolhendo o caminho não explorado de vez em quando.\n", + "\n", + "## Implementação em Python\n", + "\n", + "Agora estamos prontos para implementar o algoritmo de aprendizado. Antes disso, também precisamos de uma função que converta números arbitrários na Tabela Q em um vetor de probabilidades para as ações correspondentes:\n" + ], + "cell_type": "markdown", + "metadata": {} + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [], + "source": [ + "def probs(v,eps=1e-4):\n", + " v = v-v.min()+eps\n", + " v = v/v.sum()\n", + " return v" + ] + }, + { + "source": [ + "Adicionamos uma pequena quantidade de `eps` ao vetor original para evitar divisão por 0 no caso inicial, quando todos os componentes do vetor são idênticos.\n", + "\n", + "O algoritmo de aprendizado real será executado por 5000 experimentos, também chamados de **épocas**:\n" + ], + "cell_type": "markdown", + "metadata": {} + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "" + ] + } + ], + "source": [ + "\n", + "from IPython.display import clear_output\n", + "\n", + "lpath = []\n", + "\n", + "for epoch in range(10000):\n", + " clear_output(wait=True)\n", + " print(f\"Epoch = {epoch}\",end='')\n", + "\n", + " # Pick initial point\n", + " m.random_start()\n", + " \n", + " # Start travelling\n", + " n=0\n", + " cum_reward = 0\n", + " while True:\n", + " x,y = m.human\n", + " v = probs(Q[x,y])\n", + " a = random.choices(list(actions),weights=v)[0]\n", + " dpos = actions[a]\n", + " m.move(dpos,check_correctness=False) # we allow player to move outside the board, which terminates episode\n", + " r = reward(m)\n", + " cum_reward += r\n", + " if r==end_reward or cum_reward < -1000:\n", + " print(f\" {n} steps\",end='\\r')\n", + " lpath.append(n)\n", + " break\n", + " alpha = np.exp(-n / 3000)\n", + " gamma = 0.5\n", + " ai = action_idx[a]\n", + " Q[x,y,ai] = (1 - alpha) * Q[x,y,ai] + alpha * (r + gamma * Q[x+dpos[0], y+dpos[1]].max())\n", + " n+=1" + ] + }, + { + "source": [ + "Após executar este algoritmo, a Q-Table deve ser atualizada com valores que definem a atratividade de diferentes ações em cada etapa. Visualize a tabela aqui:\n" + ], + "cell_type": "markdown", + "metadata": {} + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [ + { + "output_type": "display_data", + "data": { + "text/plain": "
", + "image/svg+xml": "\n\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n\n", + "image/png": "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DBhgaPG22+307NmTbt26hQv1W2+9xWuvvUbv3r0544wzDP/lEqvUr7UIevPNN7n55ptPuWhX8Xg8XHPNNaxcuTJCyequZcuWMWHCBGbMmMFzzz3HE088YXSkOkkIgc1mw2w289RTT7Fs2TKWLl164r9YCywWS/h2dtdddx2apjFv3jw+/vhjo6PFLFW4I2TBggXcddddR/VnCyFwOBwnbDUIIUhISDhq27Zt27j55pv57rvvopK3LiguLmbt2rUsWLCAl19+mcTERFq0aMHatWuNjlbnTZkyhT179sTkxcCxY8fy9NNPs3v3bj744AOj48QkVbhrSNM03n77bSZPnkxZWdlR32vVqhWzZ88+YX+d1WplyZIlpKSkHDVJZ/v27Vx55ZXs2LGjQY42SU5O5qyzzmLZsmWMGzeOyy67jBdffJFdu3ZRVlbWIF+TSLHb7XTp0oWcnJxqRzwZyW63M3bsWDZv3szKlStj/t+6trt0VOGuASklK1eu5Prrr6ekpCS8vXHjxvTv359vv/2WzMzMk/pHPfvss/n111+55557jmp95+bm0q9fP/Lz86PyHGKZxWKhdevWLF68mBUrVjBnzhzuv/9+9u/fz7XXXsvy5cvZs2eP0THrrAsvvJDmzZvz5ptvxmTxdjgcPPjggyxZsiTmuw1r+xeLKtw1oOs6f//734/q027atCnTpk3jk08+oVGjRid9rKrp8ZMmTeK22247agnQiooK5s6dG/Otjmg477zzWLZsGX6/n48//pg777yTKVOm8N5777FmzRreeOMNHnnkEbxer9FRj+nLL7/kvPPOi8klXYUQjBkzBiEE//d//2d0nGMSQvDMM8+wZs2amOzWqZKZmUnLli354YcfauV8qnDXgBCCVq1ahdcZsVqtTJ8+nVGjRpGcnPy73z4JIcjIyOC+++5j/Pjx4e12u73WR1IkJCQwatSomFnf4qabbjpqpl9cXBwPP/wwo0eP5txzz+XKK6/kiSeeCA91ixUrVqzgvPPOIy4uzugo1frLX/5Cy5YtefLJJ2PqtasihOCuu+7il19+4ZNPPonJjFWFe9OmTbVyPlW4a0AIwfTp05k8eTJt27Zl/fr1jB49+jcXGn/vf7S0tDRmzJjByy+/TJs2bZg9e3a4ZVRbqropYr0rok2bNgwaNIi33nqLjh070r17d7766isOHDhg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\n" + }, + "metadata": { + "needs_background": "light" + } + } + ], + "source": [ + "m.plot(Q)" + ] + }, + { + "source": [ + "## Verificando a Política\n", + "\n", + "Como a Q-Table lista a \"atratividade\" de cada ação em cada estado, é bastante fácil usá-la para definir a navegação eficiente em nosso mundo. No caso mais simples, podemos simplesmente selecionar a ação correspondente ao maior valor na Q-Table:\n" + ], + "cell_type": "markdown", + "metadata": {} + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "2" + ] + }, + "metadata": {}, + "execution_count": 13 + } + ], + "source": [ + "def qpolicy_strict(m):\n", + " x,y = m.human\n", + " v = probs(Q[x,y])\n", + " a = list(actions)[np.argmax(v)]\n", + " return a\n", + "\n", + "walk(m,qpolicy_strict)" + ] + }, + { + "source": [ + "Se você tentar o código acima várias vezes, pode perceber que, às vezes, ele simplesmente \"trava\", e você precisa pressionar o botão PARAR no notebook para interrompê-lo.\n", + "\n", + "> **Tarefa 1:** Modifique a função `walk` para limitar o comprimento máximo do caminho a um certo número de passos (digamos, 100), e observe o código acima retornar esse valor de tempos em tempos.\n", + "\n", + "> **Tarefa 2:** Modifique a função `walk` para que ela não volte aos lugares onde já esteve anteriormente. Isso evitará que `walk` entre em um loop, no entanto, o agente ainda pode acabar \"preso\" em um local do qual não consegue escapar.\n" + ], + "cell_type": "markdown", + "metadata": {} + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Average path length = 3.45, eaten by wolf: 0 times\n" + ] + } + ], + "source": [ + "\n", + "def qpolicy(m):\n", + " x,y = m.human\n", + " v = probs(Q[x,y])\n", + " a = random.choices(list(actions),weights=v)[0]\n", + " return a\n", + "\n", + "print_statistics(qpolicy)" + ] + }, + { + "source": [], + "cell_type": "markdown", + "metadata": {} + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "[]" + ] + }, + "metadata": {}, + "execution_count": 15 + }, + { + "output_type": "display_data", + "data": { + "text/plain": "
", + "image/svg+xml": "\n\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n\n", + "image/png": "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\n" + }, + "metadata": { + "needs_background": "light" + } + } + ], + "source": [ + "plt.plot(lpath)" + ] + }, + { + "source": [ + "O que vemos aqui é que, inicialmente, o comprimento médio do caminho aumentou. Isso provavelmente se deve ao fato de que, quando não sabemos nada sobre o ambiente, é mais provável que fiquemos presos em estados ruins, como água ou lobo. À medida que aprendemos mais e começamos a usar esse conhecimento, podemos explorar o ambiente por mais tempo, mas ainda não sabemos bem onde estão as maçãs.\n", + "\n", + "Uma vez que aprendemos o suficiente, torna-se mais fácil para o agente alcançar o objetivo, e o comprimento do caminho começa a diminuir. No entanto, ainda estamos abertos à exploração, então frequentemente nos desviamos do melhor caminho e exploramos novas opções, tornando o caminho mais longo do que o ideal.\n", + "\n", + "O que também observamos neste gráfico é que, em algum momento, o comprimento aumentou abruptamente. Isso indica a natureza estocástica do processo e que, em algum momento, podemos \"estragar\" os coeficientes da Q-Table, sobrescrevendo-os com novos valores. Isso idealmente deve ser minimizado diminuindo a taxa de aprendizado (ou seja, no final do treinamento ajustamos os valores da Q-Table apenas por um valor pequeno).\n", + "\n", + "No geral, é importante lembrar que o sucesso e a qualidade do processo de aprendizado dependem significativamente de parâmetros, como taxa de aprendizado, decaimento da taxa de aprendizado e fator de desconto. Esses parâmetros são frequentemente chamados de **hiperparâmetros**, para distingui-los dos **parâmetros** que otimizamos durante o treinamento (por exemplo, coeficientes da Q-Table). O processo de encontrar os melhores valores de hiperparâmetros é chamado de **otimização de hiperparâmetros**, e merece um tópico à parte.\n" + ], + "cell_type": "markdown", + "metadata": {} + }, + { + "source": [ + "## Exercício\n", + "#### Um Mundo Mais Realista de Pedro e o Lobo\n", + "\n", + "Na nossa situação, Pedro conseguia se mover quase sem ficar cansado ou com fome. Em um mundo mais realista, ele precisa sentar e descansar de vez em quando, além de se alimentar. Vamos tornar nosso mundo mais realista implementando as seguintes regras:\n", + "\n", + "1. Ao se mover de um lugar para outro, Pedro perde **energia** e ganha um pouco de **fadiga**.\n", + "2. Pedro pode ganhar mais energia comendo maçãs.\n", + "3. Pedro pode se livrar da fadiga descansando sob a árvore ou na grama (ou seja, caminhando para uma posição no tabuleiro que tenha uma árvore ou grama - campo verde).\n", + "4. Pedro precisa encontrar e matar o lobo.\n", + "5. Para matar o lobo, Pedro precisa ter certos níveis de energia e fadiga; caso contrário, ele perde a batalha.\n", + "\n", + "Modifique a função de recompensa acima de acordo com as regras do jogo, execute o algoritmo de aprendizado por reforço para aprender a melhor estratégia para vencer o jogo e compare os resultados de uma caminhada aleatória com o seu algoritmo em termos de número de jogos vencidos e perdidos.\n", + "\n", + "> **Note**: Pode ser necessário ajustar os hiperparâmetros para que funcione, especialmente o número de épocas. Como o sucesso do jogo (enfrentar o lobo) é um evento raro, você pode esperar um tempo de treinamento muito maior.\n" + ], + "cell_type": "markdown", + "metadata": {} + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n---\n\n**Aviso Legal**: \nEste documento foi traduzido utilizando o serviço de tradução por IA [Co-op Translator](https://github.com/Azure/co-op-translator). Embora nos esforcemos para garantir a precisão, esteja ciente de que traduções automatizadas podem conter erros ou imprecisões. O documento original em seu idioma nativo deve ser considerado a fonte autoritativa. Para informações críticas, recomenda-se a tradução profissional realizada por humanos. Não nos responsabilizamos por quaisquer mal-entendidos ou interpretações equivocadas decorrentes do uso desta tradução.\n" + ] + } + ] +} \ No newline at end of file diff --git a/translations/pt-BR/8-Reinforcement/2-Gym/README.md b/translations/pt-BR/8-Reinforcement/2-Gym/README.md new file mode 100644 index 000000000..71ccfab06 --- /dev/null +++ b/translations/pt-BR/8-Reinforcement/2-Gym/README.md @@ -0,0 +1,324 @@ +## Requisitos + +Nesta lição, usaremos uma biblioteca chamada **OpenAI Gym** para simular diferentes **ambientes**. Você pode executar o código desta lição localmente (por exemplo, no Visual Studio Code), caso em que a simulação será aberta em uma nova janela. Ao rodar o código online, pode ser necessário fazer alguns ajustes, conforme descrito [aqui](https://towardsdatascience.com/rendering-openai-gym-envs-on-binder-and-google-colab-536f99391cc7). + +## OpenAI Gym + +Na lição anterior, as regras do jogo e o estado foram definidos pela classe `Board`, que criamos manualmente. Aqui, utilizaremos um **ambiente de simulação** especial, que simulará a física por trás do equilíbrio do pêndulo. Um dos ambientes de simulação mais populares para treinar algoritmos de aprendizado por reforço é chamado de [Gym](https://gym.openai.com/), mantido pela [OpenAI](https://openai.com/). Usando este Gym, podemos criar diferentes **ambientes**, desde uma simulação de CartPole até jogos de Atari. + +> **Nota**: Você pode ver outros ambientes disponíveis no OpenAI Gym [aqui](https://gym.openai.com/envs/#classic_control). + +Primeiro, vamos instalar o Gym e importar as bibliotecas necessárias (bloco de código 1): + +```python +import sys +!{sys.executable} -m pip install gym + +import gym +import matplotlib.pyplot as plt +import numpy as np +import random +``` + +## Exercício - inicializar um ambiente de CartPole + +Para trabalhar com o problema de equilíbrio do CartPole, precisamos inicializar o ambiente correspondente. Cada ambiente está associado a: + +- **Espaço de observação**, que define a estrutura das informações que recebemos do ambiente. No problema do CartPole, recebemos a posição do pêndulo, a velocidade e outros valores. + +- **Espaço de ação**, que define as ações possíveis. No nosso caso, o espaço de ação é discreto e consiste em duas ações: **esquerda** e **direita**. (bloco de código 2) + +1. Para inicializar, digite o seguinte código: + + ```python + env = gym.make("CartPole-v1") + print(env.action_space) + print(env.observation_space) + print(env.action_space.sample()) + ``` + +Para entender como o ambiente funciona, vamos executar uma simulação curta de 100 passos. Em cada passo, fornecemos uma das ações a serem realizadas - nesta simulação, selecionamos aleatoriamente uma ação do `action_space`. + +1. Execute o código abaixo e veja o que acontece. + + ✅ Lembre-se de que é preferível rodar este código em uma instalação local do Python! (bloco de código 3) + + ```python + env.reset() + + for i in range(100): + env.render() + env.step(env.action_space.sample()) + env.close() + ``` + + Você deve ver algo semelhante a esta imagem: + + ![CartPole sem equilíbrio](../../../../8-Reinforcement/2-Gym/images/cartpole-nobalance.gif) + +1. Durante a simulação, precisamos obter observações para decidir como agir. Na verdade, a função step retorna as observações atuais, uma função de recompensa e um indicador `done` que mostra se faz sentido continuar a simulação ou não: (bloco de código 4) + + ```python + env.reset() + + done = False + while not done: + env.render() + obs, rew, done, info = env.step(env.action_space.sample()) + print(f"{obs} -> {rew}") + env.close() + ``` + + Você verá algo como isto na saída do notebook: + + ```text + [ 0.03403272 -0.24301182 0.02669811 0.2895829 ] -> 1.0 + [ 0.02917248 -0.04828055 0.03248977 0.00543839] -> 1.0 + [ 0.02820687 0.14636075 0.03259854 -0.27681916] -> 1.0 + [ 0.03113408 0.34100283 0.02706215 -0.55904489] -> 1.0 + [ 0.03795414 0.53573468 0.01588125 -0.84308041] -> 1.0 + ... + [ 0.17299878 0.15868546 -0.20754175 -0.55975453] -> 1.0 + [ 0.17617249 0.35602306 -0.21873684 -0.90998894] -> 1.0 + ``` + + O vetor de observação retornado em cada passo da simulação contém os seguintes valores: + - Posição do carrinho + - Velocidade do carrinho + - Ângulo do pêndulo + - Taxa de rotação do pêndulo + +1. Obtenha os valores mínimos e máximos desses números: (bloco de código 5) + + ```python + print(env.observation_space.low) + print(env.observation_space.high) + ``` + + Você também pode notar que o valor da recompensa em cada passo da simulação é sempre 1. Isso ocorre porque nosso objetivo é sobreviver o maior tempo possível, ou seja, manter o pêndulo em uma posição razoavelmente vertical pelo maior período de tempo. + + ✅ Na verdade, a simulação do CartPole é considerada resolvida se conseguirmos uma recompensa média de 195 em 100 tentativas consecutivas. + +## Discretização do estado + +No Q-Learning, precisamos construir uma Q-Table que define o que fazer em cada estado. Para isso, o estado precisa ser **discreto**, ou seja, deve conter um número finito de valores discretos. Assim, precisamos de alguma forma **discretizar** nossas observações, mapeando-as para um conjunto finito de estados. + +Existem algumas maneiras de fazer isso: + +- **Dividir em intervalos**. Se conhecemos o intervalo de um determinado valor, podemos dividi-lo em um número de **intervalos** e, em seguida, substituir o valor pelo número do intervalo ao qual ele pertence. Isso pode ser feito usando o método [`digitize`](https://numpy.org/doc/stable/reference/generated/numpy.digitize.html) do numpy. Nesse caso, saberemos exatamente o tamanho do estado, pois ele dependerá do número de intervalos que selecionarmos para a digitalização. + +✅ Podemos usar interpolação linear para trazer os valores para algum intervalo finito (por exemplo, de -20 a 20) e, em seguida, converter os números em inteiros arredondando-os. Isso nos dá um pouco menos de controle sobre o tamanho do estado, especialmente se não conhecermos os intervalos exatos dos valores de entrada. Por exemplo, no nosso caso, 2 dos 4 valores não têm limites superiores/inferiores, o que pode resultar em um número infinito de estados. + +No nosso exemplo, usaremos a segunda abordagem. Como você pode notar mais tarde, apesar de os limites superiores/inferiores não estarem definidos, esses valores raramente assumem valores fora de certos intervalos finitos, tornando os estados com valores extremos muito raros. + +1. Aqui está a função que pegará a observação do nosso modelo e produzirá uma tupla de 4 valores inteiros: (bloco de código 6) + + ```python + def discretize(x): + return tuple((x/np.array([0.25, 0.25, 0.01, 0.1])).astype(np.int)) + ``` + +1. Vamos também explorar outro método de discretização usando intervalos: (bloco de código 7) + + ```python + def create_bins(i,num): + return np.arange(num+1)*(i[1]-i[0])/num+i[0] + + print("Sample bins for interval (-5,5) with 10 bins\n",create_bins((-5,5),10)) + + ints = [(-5,5),(-2,2),(-0.5,0.5),(-2,2)] # intervals of values for each parameter + nbins = [20,20,10,10] # number of bins for each parameter + bins = [create_bins(ints[i],nbins[i]) for i in range(4)] + + def discretize_bins(x): + return tuple(np.digitize(x[i],bins[i]) for i in range(4)) + ``` + +1. Agora, vamos rodar uma simulação curta e observar esses valores discretos do ambiente. Sinta-se à vontade para testar tanto `discretize` quanto `discretize_bins` e veja se há diferença. + + ✅ `discretize_bins` retorna o número do intervalo, que começa em 0. Assim, para valores da variável de entrada próximos de 0, ele retorna o número do meio do intervalo (10). Em `discretize`, não nos preocupamos com o intervalo dos valores de saída, permitindo que sejam negativos, de modo que os valores do estado não são deslocados, e 0 corresponde a 0. (bloco de código 8) + + ```python + env.reset() + + done = False + while not done: + #env.render() + obs, rew, done, info = env.step(env.action_space.sample()) + #print(discretize_bins(obs)) + print(discretize(obs)) + env.close() + ``` + + ✅ Descomente a linha que começa com `env.render` se quiser ver como o ambiente é executado. Caso contrário, você pode executá-lo em segundo plano, o que é mais rápido. Usaremos essa execução "invisível" durante nosso processo de Q-Learning. + +## Estrutura da Q-Table + +Na lição anterior, o estado era um simples par de números de 0 a 8, e, portanto, era conveniente representar a Q-Table como um tensor numpy com forma 8x8x2. Se usarmos a discretização por intervalos, o tamanho do nosso vetor de estado também será conhecido, então podemos usar a mesma abordagem e representar o estado por um array com forma 20x20x10x10x2 (aqui, 2 é a dimensão do espaço de ação, e as primeiras dimensões correspondem ao número de intervalos que selecionamos para cada parâmetro no espaço de observação). + +No entanto, às vezes as dimensões precisas do espaço de observação não são conhecidas. No caso da função `discretize`, nunca podemos ter certeza de que nosso estado permanecerá dentro de certos limites, porque alguns dos valores originais não têm limites. Assim, usaremos uma abordagem ligeiramente diferente e representaremos a Q-Table como um dicionário. + +1. Use o par *(state, action)* como chave do dicionário, e o valor corresponderá ao valor da entrada na Q-Table. (bloco de código 9) + + ```python + Q = {} + actions = (0,1) + + def qvalues(state): + return [Q.get((state,a),0) for a in actions] + ``` + + Aqui também definimos uma função `qvalues()`, que retorna uma lista de valores da Q-Table para um estado dado que corresponde a todas as ações possíveis. Se a entrada não estiver presente na Q-Table, retornaremos 0 como padrão. + +## Vamos começar o Q-Learning + +Agora estamos prontos para ensinar Peter a equilibrar! + +1. Primeiro, vamos definir alguns hiperparâmetros: (bloco de código 10) + + ```python + # hyperparameters + alpha = 0.3 + gamma = 0.9 + epsilon = 0.90 + ``` + + Aqui, `alpha` é a **taxa de aprendizado**, que define em que medida devemos ajustar os valores atuais da Q-Table em cada passo. Na lição anterior, começamos com 1 e depois reduzimos `alpha` para valores menores durante o treinamento. Neste exemplo, manteremos constante apenas para simplificar, e você pode experimentar ajustar os valores de `alpha` mais tarde. + + `gamma` é o **fator de desconto**, que mostra em que medida devemos priorizar a recompensa futura em relação à recompensa atual. + + `epsilon` é o **fator de exploração/exploração**, que determina se devemos preferir explorar ou explorar menos. Em nosso algoritmo, em `epsilon` por cento dos casos, selecionaremos a próxima ação de acordo com os valores da Q-Table, e no restante dos casos executaremos uma ação aleatória. Isso nos permitirá explorar áreas do espaço de busca que nunca vimos antes. + + ✅ Em termos de equilíbrio - escolher uma ação aleatória (exploração) agiria como um empurrão aleatório na direção errada, e o pêndulo teria que aprender a recuperar o equilíbrio desses "erros". + +### Melhorar o algoritmo + +Podemos também fazer duas melhorias no nosso algoritmo da lição anterior: + +- **Calcular a recompensa cumulativa média**, ao longo de várias simulações. Imprimiremos o progresso a cada 5000 iterações e faremos a média da recompensa cumulativa nesse período de tempo. Isso significa que, se obtivermos mais de 195 pontos, podemos considerar o problema resolvido, com uma qualidade ainda maior do que a exigida. + +- **Calcular o resultado cumulativo médio máximo**, `Qmax`, e armazenaremos a Q-Table correspondente a esse resultado. Quando você rodar o treinamento, notará que, às vezes, o resultado cumulativo médio começa a cair, e queremos manter os valores da Q-Table que correspondem ao melhor modelo observado durante o treinamento. + +1. Colete todas as recompensas cumulativas em cada simulação no vetor `rewards` para posterior plotagem. (bloco de código 11) + + ```python + def probs(v,eps=1e-4): + v = v-v.min()+eps + v = v/v.sum() + return v + + Qmax = 0 + cum_rewards = [] + rewards = [] + for epoch in range(100000): + obs = env.reset() + done = False + cum_reward=0 + # == do the simulation == + while not done: + s = discretize(obs) + if random.random() Qmax: + Qmax = np.average(cum_rewards) + Qbest = Q + cum_rewards=[] + ``` + +O que você pode notar a partir desses resultados: + +- **Perto do nosso objetivo**. Estamos muito próximos de alcançar o objetivo de obter 195 recompensas cumulativas em mais de 100 execuções consecutivas da simulação, ou talvez já tenhamos alcançado! Mesmo que obtenhamos números menores, ainda não sabemos, porque fazemos a média em 5000 execuções, e apenas 100 execuções são necessárias no critério formal. + +- **Recompensa começa a cair**. Às vezes, a recompensa começa a cair, o que significa que podemos "destruir" valores já aprendidos na Q-Table com aqueles que pioram a situação. + +Essa observação fica mais clara se plotarmos o progresso do treinamento. + +## Plotando o progresso do treinamento + +Durante o treinamento, coletamos o valor da recompensa cumulativa em cada uma das iterações no vetor `rewards`. Veja como ele fica quando o plotamos contra o número de iterações: + +```python +plt.plot(rewards) +``` + +![progresso bruto](../../../../8-Reinforcement/2-Gym/images/train_progress_raw.png) + +A partir deste gráfico, não é possível dizer muita coisa, porque, devido à natureza do processo de treinamento estocástico, a duração das sessões de treinamento varia muito. Para dar mais sentido a este gráfico, podemos calcular a **média móvel** ao longo de uma série de experimentos, digamos 100. Isso pode ser feito convenientemente usando `np.convolve`: (bloco de código 12) + +```python +def running_average(x,window): + return np.convolve(x,np.ones(window)/window,mode='valid') + +plt.plot(running_average(rewards,100)) +``` + +![progresso do treinamento](../../../../8-Reinforcement/2-Gym/images/train_progress_runav.png) + +## Variando os hiperparâmetros + +Para tornar o aprendizado mais estável, faz sentido ajustar alguns de nossos hiperparâmetros durante o treinamento. Em particular: + +- **Para a taxa de aprendizado**, `alpha`, podemos começar com valores próximos de 1 e, em seguida, diminuir o parâmetro gradualmente. Com o tempo, obteremos boas probabilidades na Q-Table, e, assim, devemos ajustá-las levemente, em vez de sobrescrevê-las completamente com novos valores. + +- **Aumentar epsilon**. Podemos querer aumentar o `epsilon` lentamente, para explorar menos e explorar mais. Provavelmente faz sentido começar com um valor menor de `epsilon` e aumentá-lo até quase 1. +> **Tarefa 1**: Experimente ajustar os valores dos hiperparâmetros e veja se consegue alcançar uma recompensa cumulativa maior. Você está conseguindo superar 195? +> **Tarefa 2**: Para resolver formalmente o problema, você precisa alcançar uma recompensa média de 195 em 100 execuções consecutivas. Meça isso durante o treinamento e certifique-se de que resolveu o problema formalmente! + +## Visualizando o resultado em ação + +Seria interessante ver como o modelo treinado se comporta. Vamos executar a simulação e seguir a mesma estratégia de seleção de ações usada durante o treinamento, amostrando de acordo com a distribuição de probabilidade na Q-Table: (bloco de código 13) + +```python +obs = env.reset() +done = False +while not done: + s = discretize(obs) + env.render() + v = probs(np.array(qvalues(s))) + a = random.choices(actions,weights=v)[0] + obs,_,done,_ = env.step(a) +env.close() +``` + +Você deve ver algo como isto: + +![um carrinho equilibrando](../../../../8-Reinforcement/2-Gym/images/cartpole-balance.gif) + +--- + +## 🚀Desafio + +> **Tarefa 3**: Aqui, estávamos usando a cópia final da Q-Table, que pode não ser a melhor. Lembre-se de que armazenamos a Q-Table com melhor desempenho na variável `Qbest`! Experimente o mesmo exemplo com a Q-Table de melhor desempenho copiando `Qbest` para `Q` e veja se você nota alguma diferença. + +> **Tarefa 4**: Aqui, não estávamos selecionando a melhor ação em cada etapa, mas sim amostrando com a distribuição de probabilidade correspondente. Faria mais sentido sempre selecionar a melhor ação, com o maior valor na Q-Table? Isso pode ser feito usando a função `np.argmax` para descobrir o número da ação correspondente ao maior valor na Q-Table. Implemente essa estratégia e veja se ela melhora o equilíbrio. + +## [Quiz pós-aula](https://ff-quizzes.netlify.app/en/ml/) + +## Tarefa +[Treine um Mountain Car](assignment.md) + +## Conclusão + +Agora aprendemos como treinar agentes para alcançar bons resultados apenas fornecendo a eles uma função de recompensa que define o estado desejado do jogo e dando-lhes a oportunidade de explorar inteligentemente o espaço de busca. Aplicamos com sucesso o algoritmo de Q-Learning nos casos de ambientes discretos e contínuos, mas com ações discretas. + +É importante também estudar situações em que o estado de ação também é contínuo e quando o espaço de observação é muito mais complexo, como a imagem da tela de um jogo Atari. Nesses problemas, muitas vezes precisamos usar técnicas de aprendizado de máquina mais poderosas, como redes neurais, para alcançar bons resultados. Esses tópicos mais avançados serão abordados em nosso próximo curso de IA mais avançado. + +--- + +**Aviso Legal**: +Este documento foi traduzido utilizando o serviço de tradução por IA [Co-op Translator](https://github.com/Azure/co-op-translator). Embora nos esforcemos para garantir a precisão, esteja ciente de que traduções automáticas podem conter erros ou imprecisões. O documento original em seu idioma nativo deve ser considerado a fonte oficial. Para informações críticas, recomenda-se a tradução profissional realizada por humanos. Não nos responsabilizamos por quaisquer mal-entendidos ou interpretações equivocadas decorrentes do uso desta tradução. \ No newline at end of file diff --git a/translations/pt-BR/8-Reinforcement/2-Gym/assignment.md b/translations/pt-BR/8-Reinforcement/2-Gym/assignment.md new file mode 100644 index 000000000..d77f61bbe --- /dev/null +++ b/translations/pt-BR/8-Reinforcement/2-Gym/assignment.md @@ -0,0 +1,48 @@ +# Treinar Carro na Montanha + +[OpenAI Gym](http://gym.openai.com) foi projetado de forma que todos os ambientes fornecem a mesma API - ou seja, os mesmos métodos `reset`, `step` e `render`, e as mesmas abstrações de **espaço de ação** e **espaço de observação**. Assim, deve ser possível adaptar os mesmos algoritmos de aprendizado por reforço para diferentes ambientes com mudanças mínimas no código. + +## Um Ambiente de Carro na Montanha + +O [ambiente Mountain Car](https://gym.openai.com/envs/MountainCar-v0/) contém um carro preso em um vale: + +O objetivo é sair do vale e capturar a bandeira, realizando em cada passo uma das seguintes ações: + +| Valor | Significado | +|---|---| +| 0 | Acelerar para a esquerda | +| 1 | Não acelerar | +| 2 | Acelerar para a direita | + +O principal desafio deste problema, no entanto, é que o motor do carro não é forte o suficiente para escalar a montanha em uma única tentativa. Portanto, a única maneira de ter sucesso é dirigir para frente e para trás para ganhar impulso. + +O espaço de observação consiste em apenas dois valores: + +| Num | Observação | Min | Max | +|-----|--------------|-------|-------| +| 0 | Posição do carro | -1.2 | 0.6 | +| 1 | Velocidade do carro | -0.07 | 0.07 | + +O sistema de recompensa para o carro na montanha é bastante desafiador: + + * Uma recompensa de 0 é concedida se o agente alcançar a bandeira (posição = 0.5) no topo da montanha. + * Uma recompensa de -1 é concedida se a posição do agente for menor que 0.5. + +O episódio termina se a posição do carro for maior que 0.5 ou se o comprimento do episódio for maior que 200. + +## Instruções + +Adapte nosso algoritmo de aprendizado por reforço para resolver o problema do carro na montanha. Comece com o código existente no [notebook.ipynb](notebook.ipynb), substitua o ambiente, altere as funções de discretização de estado e tente fazer o algoritmo existente treinar com modificações mínimas no código. Otimize o resultado ajustando os hiperparâmetros. + +> **Nota**: Ajustes nos hiperparâmetros provavelmente serão necessários para que o algoritmo converja. + +## Rubrica + +| Critério | Exemplar | Adequado | Precisa Melhorar | +| -------- | --------- | -------- | ---------------- | +| | O algoritmo de Q-Learning foi adaptado com sucesso a partir do exemplo CartPole, com modificações mínimas no código, sendo capaz de resolver o problema de capturar a bandeira em menos de 200 passos. | Um novo algoritmo de Q-Learning foi adotado da Internet, mas está bem documentado; ou o algoritmo existente foi adaptado, mas não alcança os resultados desejados. | O estudante não conseguiu adotar nenhum algoritmo com sucesso, mas deu passos substanciais em direção à solução (implementou discretização de estado, estrutura de dados da Q-Table, etc.) | + +--- + +**Aviso Legal**: +Este documento foi traduzido utilizando o serviço de tradução por IA [Co-op Translator](https://github.com/Azure/co-op-translator). Embora nos esforcemos para garantir a precisão, esteja ciente de que traduções automatizadas podem conter erros ou imprecisões. O documento original em seu idioma nativo deve ser considerado a fonte autoritativa. Para informações críticas, recomenda-se a tradução profissional realizada por humanos. Não nos responsabilizamos por quaisquer mal-entendidos ou interpretações equivocadas decorrentes do uso desta tradução. \ No newline at end of file diff --git a/translations/pt-BR/8-Reinforcement/2-Gym/notebook.ipynb b/translations/pt-BR/8-Reinforcement/2-Gym/notebook.ipynb new file mode 100644 index 000000000..dc22f04e0 --- /dev/null +++ b/translations/pt-BR/8-Reinforcement/2-Gym/notebook.ipynb @@ -0,0 +1,392 @@ +{ + "metadata": { + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.7.4" + }, + "orig_nbformat": 4, + "kernelspec": { + "name": "python3", + "display_name": "Python 3.7.4 64-bit ('base': conda)" + }, + "interpreter": { + "hash": "86193a1ab0ba47eac1c69c1756090baa3b420b3eea7d4aafab8b85f8b312f0c5" + }, + "coopTranslator": { + "original_hash": "f22f8f3daed4b6d34648d1254763105b", + "translation_date": "2025-08-30T00:12:02+00:00", + "source_file": "8-Reinforcement/2-Gym/notebook.ipynb", + "language_code": "br" + } + }, + "nbformat": 4, + "nbformat_minor": 2, + "cells": [ + { + "source": [ + "## Patinação no CartPole\n", + "\n", + "> **Problema**: Se Peter quer escapar do lobo, ele precisa ser mais rápido do que ele. Vamos ver como Peter pode aprender a patinar, em particular, a manter o equilíbrio, usando Q-Learning.\n", + "\n", + "Primeiro, vamos instalar o gym e importar as bibliotecas necessárias:\n" + ], + "cell_type": "markdown", + "metadata": {} + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "#code block 1" + ] + }, + { + "source": [ + "## Criar um ambiente de cartpole\n" + ], + "cell_type": "markdown", + "metadata": {} + }, + { + "source": [ + "#code block 2" + ], + "cell_type": "code", + "metadata": {}, + "execution_count": null, + "outputs": [] + }, + { + "source": [ + "Para ver como o ambiente funciona, vamos executar uma simulação curta por 100 etapas.\n" + ], + "cell_type": "markdown", + "metadata": {} + }, + { + "source": [ + "#code block 3" + ], + "cell_type": "code", + "metadata": {}, + "execution_count": null, + "outputs": [] + }, + { + "source": [ + "Durante a simulação, precisamos obter observações para decidir como agir. Na verdade, a função `step` nos retorna as observações atuais, a função de recompensa e a flag `done` que indica se faz sentido continuar a simulação ou não:\n" + ], + "cell_type": "markdown", + "metadata": {} + }, + { + "source": [ + "#code block 4" + ], + "cell_type": "code", + "metadata": {}, + "execution_count": null, + "outputs": [] + }, + { + "source": [ + "Podemos obter o valor mínimo e máximo desses números:\n" + ], + "cell_type": "markdown", + "metadata": {} + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "[-4.8000002e+00 -3.4028235e+38 -4.1887903e-01 -3.4028235e+38]\n[4.8000002e+00 3.4028235e+38 4.1887903e-01 3.4028235e+38]\n" + ] + } + ], + "source": [ + "#code block 5" + ] + }, + { + "source": [], + "cell_type": "markdown", + "metadata": {} + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [], + "source": [ + "#code block 6" + ] + }, + { + "source": [ + "Vamos também explorar outro método de discretização usando intervalos:\n" + ], + "cell_type": "markdown", + "metadata": {} + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Sample bins for interval (-5,5) with 10 bins\n [-5. -4. -3. -2. -1. 0. 1. 2. 3. 4. 5.]\n" + ] + } + ], + "source": [ + "#code block 7" + ] + }, + { + "source": [ + "Vamos agora executar uma simulação curta e observar esses valores discretos do ambiente.\n" + ], + "cell_type": "markdown", + "metadata": {} + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "(0, 0, -2, -2)\n(0, 1, -2, -5)\n(0, 2, -3, -8)\n(0, 3, -5, -11)\n(0, 3, -7, -14)\n(0, 4, -10, -17)\n(0, 3, -14, -15)\n(0, 3, -17, -12)\n(0, 3, -20, -16)\n(0, 4, -23, -19)\n" + ] + } + ], + "source": [ + "#code block 8" + ] + }, + { + "source": [], + "cell_type": "markdown", + "metadata": {} + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [], + "source": [ + "#code block 9" + ] + }, + { + "source": [], + "cell_type": "markdown", + "metadata": {} + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [], + "source": [ + "#code block 10" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "0: 22.0, alpha=0.3, epsilon=0.9\n", + "5000: 70.1384, alpha=0.3, epsilon=0.9\n", + "10000: 121.8586, alpha=0.3, epsilon=0.9\n", + "15000: 149.6368, alpha=0.3, epsilon=0.9\n", + "20000: 168.2782, alpha=0.3, epsilon=0.9\n", + "25000: 196.7356, alpha=0.3, epsilon=0.9\n", + "30000: 220.7614, alpha=0.3, epsilon=0.9\n", + "35000: 233.2138, alpha=0.3, epsilon=0.9\n", + "40000: 248.22, alpha=0.3, epsilon=0.9\n", + "45000: 264.636, alpha=0.3, epsilon=0.9\n", + "50000: 276.926, alpha=0.3, epsilon=0.9\n", + "55000: 277.9438, alpha=0.3, epsilon=0.9\n", + "60000: 248.881, alpha=0.3, epsilon=0.9\n", + "65000: 272.529, alpha=0.3, epsilon=0.9\n", + "70000: 281.7972, alpha=0.3, epsilon=0.9\n", + "75000: 284.2844, alpha=0.3, epsilon=0.9\n", + "80000: 269.667, alpha=0.3, epsilon=0.9\n", + "85000: 273.8652, alpha=0.3, epsilon=0.9\n", + "90000: 278.2466, alpha=0.3, epsilon=0.9\n", + "95000: 269.1736, alpha=0.3, epsilon=0.9\n" + ] + } + ], + "source": [ + "#code block 11" + ] + }, + { + "source": [], + "cell_type": "markdown", + "metadata": {} + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "[]" + ] + }, + "metadata": {}, + "execution_count": 20 + }, + { + "output_type": "display_data", + "data": { + "text/plain": "
", + "image/svg+xml": "\r\n\r\n\r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n", + "image/png": "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\n" + }, + "metadata": { + "needs_background": "light" + } + } + ], + "source": [ + "plt.plot(rewards)" + ] + }, + { + "source": [ + "A partir deste gráfico, não é possível determinar nada, porque devido à natureza do processo de treinamento estocástico, a duração das sessões de treinamento varia muito. Para dar mais sentido a este gráfico, podemos calcular a **média móvel** ao longo de uma série de experimentos, digamos 100. Isso pode ser feito de forma conveniente usando `np.convolve`:\n" + ], + "cell_type": "markdown", + "metadata": {} + }, + { + "cell_type": "code", + "execution_count": 22, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "[]" + ] + }, + "metadata": {}, + "execution_count": 22 + }, + { + "output_type": "display_data", + "data": { + "text/plain": "
", + "image/svg+xml": "\r\n\r\n\r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n", + "image/png": "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\n" + }, + "metadata": { + "needs_background": "light" + } + } + ], + "source": [ + "#code block 12" + ] + }, + { + "source": [ + "## Variando Hiperparâmetros e Observando o Resultado na Prática\n", + "\n", + "Agora seria interessante realmente ver como o modelo treinado se comporta. Vamos executar a simulação, e seguiremos a mesma estratégia de seleção de ações utilizada durante o treinamento: amostragem de acordo com a distribuição de probabilidade na Q-Table:\n" + ], + "cell_type": "markdown", + "metadata": {} + }, + { + "cell_type": "code", + "execution_count": 23, + "metadata": {}, + "outputs": [], + "source": [ + "# code block 13" + ] + }, + { + "source": [ + "## Salvando o resultado em um GIF animado\n", + "\n", + "Se você quiser impressionar seus amigos, pode enviar a eles a imagem animada do GIF do bastão de equilíbrio. Para fazer isso, podemos usar `env.render` para produzir um quadro de imagem e, em seguida, salvar esses quadros em um GIF animado usando a biblioteca PIL:\n" + ], + "cell_type": "markdown", + "metadata": {} + }, + { + "cell_type": "code", + "execution_count": 26, + "metadata": {}, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "360\n" + ] + } + ], + "source": [ + "from PIL import Image\n", + "obs = env.reset()\n", + "done = False\n", + "i=0\n", + "ims = []\n", + "while not done:\n", + " s = discretize(obs)\n", + " img=env.render(mode='rgb_array')\n", + " ims.append(Image.fromarray(img))\n", + " v = probs(np.array([Qbest.get((s,a),0) for a in actions]))\n", + " a = random.choices(actions,weights=v)[0]\n", + " obs,_,done,_ = env.step(a)\n", + " i+=1\n", + "env.close()\n", + "ims[0].save('images/cartpole-balance.gif',save_all=True,append_images=ims[1::2],loop=0,duration=5)\n", + "print(i)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n---\n\n**Aviso Legal**: \nEste documento foi traduzido utilizando o serviço de tradução por IA [Co-op Translator](https://github.com/Azure/co-op-translator). Embora nos esforcemos para garantir a precisão, esteja ciente de que traduções automáticas podem conter erros ou imprecisões. O documento original em seu idioma nativo deve ser considerado a fonte oficial. Para informações críticas, recomenda-se a tradução profissional feita por humanos. Não nos responsabilizamos por quaisquer mal-entendidos ou interpretações equivocadas decorrentes do uso desta tradução.\n" + ] + } + ] +} \ No newline at end of file diff --git a/translations/pt-BR/8-Reinforcement/2-Gym/solution/Julia/README.md b/translations/pt-BR/8-Reinforcement/2-Gym/solution/Julia/README.md new file mode 100644 index 000000000..c58234bae --- /dev/null +++ b/translations/pt-BR/8-Reinforcement/2-Gym/solution/Julia/README.md @@ -0,0 +1,6 @@ + + +--- + +**Aviso Legal**: +Este documento foi traduzido utilizando o serviço de tradução por IA [Co-op Translator](https://github.com/Azure/co-op-translator). Embora nos esforcemos para garantir a precisão, esteja ciente de que traduções automatizadas podem conter erros ou imprecisões. O documento original em seu idioma nativo deve ser considerado a fonte autoritativa. Para informações críticas, recomenda-se a tradução profissional realizada por humanos. Não nos responsabilizamos por quaisquer mal-entendidos ou interpretações equivocadas decorrentes do uso desta tradução. \ No newline at end of file diff --git a/translations/pt-BR/8-Reinforcement/2-Gym/solution/R/README.md b/translations/pt-BR/8-Reinforcement/2-Gym/solution/R/README.md new file mode 100644 index 000000000..c58234bae --- /dev/null +++ b/translations/pt-BR/8-Reinforcement/2-Gym/solution/R/README.md @@ -0,0 +1,6 @@ + + +--- + +**Aviso Legal**: +Este documento foi traduzido utilizando o serviço de tradução por IA [Co-op Translator](https://github.com/Azure/co-op-translator). Embora nos esforcemos para garantir a precisão, esteja ciente de que traduções automatizadas podem conter erros ou imprecisões. O documento original em seu idioma nativo deve ser considerado a fonte autoritativa. Para informações críticas, recomenda-se a tradução profissional realizada por humanos. Não nos responsabilizamos por quaisquer mal-entendidos ou interpretações equivocadas decorrentes do uso desta tradução. \ No newline at end of file diff --git a/translations/pt-BR/8-Reinforcement/2-Gym/solution/notebook.ipynb b/translations/pt-BR/8-Reinforcement/2-Gym/solution/notebook.ipynb new file mode 100644 index 000000000..5810d3428 --- /dev/null +++ b/translations/pt-BR/8-Reinforcement/2-Gym/solution/notebook.ipynb @@ -0,0 +1,524 @@ +{ + "metadata": { + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.7.0" + }, + "orig_nbformat": 4, + "kernelspec": { + "name": "python3", + "display_name": "Python 3.7.0 64-bit ('3.7')" + }, + "interpreter": { + "hash": "70b38d7a306a849643e446cd70466270a13445e5987dfa1344ef2b127438fa4d" + }, + "coopTranslator": { + "original_hash": "5c0e485e58d63c506f1791c4dbf990ce", + "translation_date": "2025-08-30T00:14:03+00:00", + "source_file": "8-Reinforcement/2-Gym/solution/notebook.ipynb", + "language_code": "br" + } + }, + "nbformat": 4, + "nbformat_minor": 2, + "cells": [ + { + "source": [ + "## Patinação no CartPole\n", + "\n", + "> **Problema**: Se Peter quer escapar do lobo, ele precisa ser mais rápido do que ele. Vamos ver como Peter pode aprender a patinar, em particular, a manter o equilíbrio, usando Q-Learning.\n", + "\n", + "Primeiro, vamos instalar o gym e importar as bibliotecas necessárias:\n" + ], + "cell_type": "markdown", + "metadata": {} + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Requirement already satisfied: gym in /Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages (0.18.3)\n", + "Requirement already satisfied: Pillow<=8.2.0 in /Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages (from gym) (7.0.0)\n", + "Requirement already satisfied: scipy in /Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages (from gym) (1.4.1)\n", + "Requirement already satisfied: numpy>=1.10.4 in /Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages (from gym) (1.19.2)\n", + "Requirement already satisfied: cloudpickle<1.7.0,>=1.2.0 in /Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages (from gym) (1.6.0)\n", + "Requirement already satisfied: pyglet<=1.5.15,>=1.4.0 in /Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages (from gym) (1.5.15)\n", + "\u001b[33mWARNING: You are using pip version 20.2.3; however, version 21.1.2 is available.\n", + "You should consider upgrading via the '/Library/Frameworks/Python.framework/Versions/3.7/bin/python3.7 -m pip install --upgrade pip' command.\u001b[0m\n" + ] + } + ], + "source": [ + "import sys\n", + "!pip install gym \n", + "\n", + "import gym\n", + "import matplotlib.pyplot as plt\n", + "import numpy as np\n", + "import random" + ] + }, + { + "source": [ + "## Criar um ambiente de cartpole\n" + ], + "cell_type": "markdown", + "metadata": {} + }, + { + "source": [ + "env = gym.make(\"CartPole-v1\")\n", + "print(env.action_space)\n", + "print(env.observation_space)\n", + "print(env.action_space.sample())" + ], + "cell_type": "code", + "metadata": {}, + "execution_count": 2, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Discrete(2)\nBox(-3.4028234663852886e+38, 3.4028234663852886e+38, (4,), float32)\n0\n" + ] + } + ] + }, + { + "source": [ + "Para ver como o ambiente funciona, vamos executar uma simulação curta por 100 etapas.\n" + ], + "cell_type": "markdown", + "metadata": {} + }, + { + "source": [ + "env.reset()\n", + "\n", + "for i in range(100):\n", + " env.render()\n", + " env.step(env.action_space.sample())\n", + "env.close()" + ], + "cell_type": "code", + "metadata": {}, + "execution_count": 3, + "outputs": [ + { + "output_type": "stream", + "name": "stderr", + "text": [ + "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/gym/logger.py:30: UserWarning: \u001b[33mWARN: You are calling 'step()' even though this environment has already returned done = True. You should always call 'reset()' once you receive 'done = True' -- any further steps are undefined behavior.\u001b[0m\n warnings.warn(colorize('%s: %s'%('WARN', msg % args), 'yellow'))\n" + ] + } + ] + }, + { + "source": [ + "Durante a simulação, precisamos obter observações para decidir como agir. Na verdade, a função `step` nos retorna as observações atuais, a função de recompensa e a flag `done` que indica se faz sentido continuar a simulação ou não:\n" + ], + "cell_type": "markdown", + "metadata": {} + }, + { + "source": [ + "env.reset()\n", + "\n", + "done = False\n", + "while not done:\n", + " env.render()\n", + " obs, rew, done, info = env.step(env.action_space.sample())\n", + " print(f\"{obs} -> {rew}\")\n", + "env.close()" + ], + "cell_type": "code", + "metadata": {}, + "execution_count": 4, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "[ 0.03044442 -0.19543914 -0.04496216 0.28125618] -> 1.0\n", + "[ 0.02653564 -0.38989186 -0.03933704 0.55942606] -> 1.0\n", + "[ 0.0187378 -0.19424049 -0.02814852 0.25461393] -> 1.0\n", + "[ 0.01485299 -0.38894946 -0.02305624 0.53828712] -> 1.0\n", + "[ 0.007074 -0.19351108 -0.0122905 0.23842953] -> 1.0\n", + "[ 0.00320378 0.00178427 -0.00752191 -0.05810469] -> 1.0\n", + "[ 0.00323946 0.19701326 -0.008684 -0.35315131] -> 1.0\n", + "[ 0.00717973 0.00201587 -0.01574703 -0.06321931] -> 1.0\n", + "[ 0.00722005 0.19736001 -0.01701141 -0.36082863] -> 1.0\n", + "[ 0.01116725 0.39271958 -0.02422798 -0.65882671] -> 1.0\n", + "[ 0.01902164 0.19794307 -0.03740452 -0.37387001] -> 1.0\n", + "[ 0.0229805 0.39357584 -0.04488192 -0.67810827] -> 1.0\n", + "[ 0.03085202 0.58929164 -0.05844408 -0.98457719] -> 1.0\n", + "[ 0.04263785 0.78514572 -0.07813563 -1.2950295 ] -> 1.0\n", + "[ 0.05834076 0.98116859 -0.10403622 -1.61111521] -> 1.0\n", + "[ 0.07796413 0.78741784 -0.13625852 -1.35259196] -> 1.0\n", + "[ 0.09371249 0.98396202 -0.16331036 -1.68461179] -> 1.0\n", + "[ 0.11339173 0.79106371 -0.1970026 -1.44691436] -> 1.0\n", + "[ 0.12921301 0.59883361 -0.22594088 -1.22169133] -> 1.0\n" + ] + } + ] + }, + { + "source": [ + "Podemos obter o valor mínimo e máximo desses números:\n" + ], + "cell_type": "markdown", + "metadata": {} + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "[-4.8000002e+00 -3.4028235e+38 -4.1887903e-01 -3.4028235e+38]\n[4.8000002e+00 3.4028235e+38 4.1887903e-01 3.4028235e+38]\n" + ] + } + ], + "source": [ + "print(env.observation_space.low)\n", + "print(env.observation_space.high)" + ] + }, + { + "source": [], + "cell_type": "markdown", + "metadata": {} + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [], + "source": [ + "def discretize(x):\n", + " return tuple((x/np.array([0.25, 0.25, 0.01, 0.1])).astype(np.int))" + ] + }, + { + "source": [ + "Vamos também explorar outro método de discretização usando bins:\n" + ], + "cell_type": "markdown", + "metadata": {} + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Sample bins for interval (-5,5) with 10 bins\n [-5. -4. -3. -2. -1. 0. 1. 2. 3. 4. 5.]\n" + ] + } + ], + "source": [ + "def create_bins(i,num):\n", + " return np.arange(num+1)*(i[1]-i[0])/num+i[0]\n", + "\n", + "print(\"Sample bins for interval (-5,5) with 10 bins\\n\",create_bins((-5,5),10))\n", + "\n", + "ints = [(-5,5),(-2,2),(-0.5,0.5),(-2,2)] # intervals of values for each parameter\n", + "nbins = [20,20,10,10] # number of bins for each parameter\n", + "bins = [create_bins(ints[i],nbins[i]) for i in range(4)]\n", + "\n", + "def discretize_bins(x):\n", + " return tuple(np.digitize(x[i],bins[i]) for i in range(4))" + ] + }, + { + "source": [ + "Vamos agora executar uma simulação curta e observar esses valores discretos do ambiente.\n" + ], + "cell_type": "markdown", + "metadata": {} + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "(0, 0, -1, -3)\n(0, 0, -2, 0)\n(0, 0, -2, -3)\n(0, 1, -3, -6)\n(0, 2, -4, -9)\n(0, 3, -6, -12)\n(0, 2, -8, -9)\n(0, 3, -10, -13)\n(0, 4, -13, -16)\n(0, 4, -16, -19)\n(0, 4, -20, -17)\n(0, 4, -24, -20)\n" + ] + } + ], + "source": [ + "env.reset()\n", + "\n", + "done = False\n", + "while not done:\n", + " #env.render()\n", + " obs, rew, done, info = env.step(env.action_space.sample())\n", + " #print(discretize_bins(obs))\n", + " print(discretize(obs))\n", + "env.close()" + ] + }, + { + "source": [], + "cell_type": "markdown", + "metadata": {} + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [], + "source": [ + "Q = {}\n", + "actions = (0,1)\n", + "\n", + "def qvalues(state):\n", + " return [Q.get((state,a),0) for a in actions]" + ] + }, + { + "source": [], + "cell_type": "markdown", + "metadata": {} + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [], + "source": [ + "# hyperparameters\n", + "alpha = 0.3\n", + "gamma = 0.9\n", + "epsilon = 0.90" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "0: 108.0, alpha=0.3, epsilon=0.9\n" + ] + } + ], + "source": [ + "def probs(v,eps=1e-4):\n", + " v = v-v.min()+eps\n", + " v = v/v.sum()\n", + " return v\n", + "\n", + "Qmax = 0\n", + "cum_rewards = []\n", + "rewards = []\n", + "for epoch in range(100000):\n", + " obs = env.reset()\n", + " done = False\n", + " cum_reward=0\n", + " # == do the simulation ==\n", + " while not done:\n", + " s = discretize(obs)\n", + " if random.random() Qmax:\n", + " Qmax = np.average(cum_rewards)\n", + " Qbest = Q\n", + " cum_rewards=[]" + ] + }, + { + "source": [], + "cell_type": "markdown", + "metadata": {} + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "[]" + ] + }, + "metadata": {}, + "execution_count": 20 + }, + { + "output_type": "display_data", + "data": { + "text/plain": "
", + "image/svg+xml": "\r\n\r\n\r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n", + "image/png": "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\n" + }, + "metadata": { + "needs_background": "light" + } + } + ], + "source": [ + "plt.plot(rewards)" + ] + }, + { + "source": [ + "A partir deste gráfico, não é possível dizer nada, porque devido à natureza do processo de treinamento estocástico, a duração das sessões de treinamento varia muito. Para dar mais sentido a este gráfico, podemos calcular a **média móvel** sobre uma série de experimentos, digamos 100. Isso pode ser feito convenientemente usando `np.convolve`:\n" + ], + "cell_type": "markdown", + "metadata": {} + }, + { + "cell_type": "code", + "execution_count": 22, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "[]" + ] + }, + "metadata": {}, + "execution_count": 22 + }, + { + "output_type": "display_data", + "data": { + "text/plain": "
", + "image/svg+xml": "\r\n\r\n\r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n", + "image/png": "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\n" + }, + "metadata": { + "needs_background": "light" + } + } + ], + "source": [ + "def running_average(x,window):\n", + " return np.convolve(x,np.ones(window)/window,mode='valid')\n", + "\n", + "plt.plot(running_average(rewards,100))" + ] + }, + { + "source": [ + "## Variando Hiperparâmetros e Observando o Resultado na Prática\n", + "\n", + "Agora seria interessante ver como o modelo treinado se comporta. Vamos executar a simulação, e seguiremos a mesma estratégia de seleção de ações utilizada durante o treinamento: amostragem de acordo com a distribuição de probabilidades na Q-Table:\n" + ], + "cell_type": "markdown", + "metadata": {} + }, + { + "cell_type": "code", + "execution_count": 23, + "metadata": {}, + "outputs": [], + "source": [ + "obs = env.reset()\n", + "done = False\n", + "while not done:\n", + " s = discretize(obs)\n", + " env.render()\n", + " v = probs(np.array(qvalues(s)))\n", + " a = random.choices(actions,weights=v)[0]\n", + " obs,_,done,_ = env.step(a)\n", + "env.close()" + ] + }, + { + "source": [ + "## Salvando o resultado em um GIF animado\n", + "\n", + "Se você quiser impressionar seus amigos, pode enviar a eles a imagem animada do GIF do bastão de equilíbrio. Para fazer isso, podemos chamar `env.render` para produzir um quadro de imagem e, em seguida, salvar esses quadros em um GIF animado usando a biblioteca PIL:\n" + ], + "cell_type": "markdown", + "metadata": {} + }, + { + "cell_type": "code", + "execution_count": 26, + "metadata": {}, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "360\n" + ] + } + ], + "source": [ + "from PIL import Image\n", + "obs = env.reset()\n", + "done = False\n", + "i=0\n", + "ims = []\n", + "while not done:\n", + " s = discretize(obs)\n", + " img=env.render(mode='rgb_array')\n", + " ims.append(Image.fromarray(img))\n", + " v = probs(np.array([Qbest.get((s,a),0) for a in actions]))\n", + " a = random.choices(actions,weights=v)[0]\n", + " obs,_,done,_ = env.step(a)\n", + " i+=1\n", + "env.close()\n", + "ims[0].save('images/cartpole-balance.gif',save_all=True,append_images=ims[1::2],loop=0,duration=5)\n", + "print(i)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n---\n\n**Aviso Legal**: \nEste documento foi traduzido utilizando o serviço de tradução por IA [Co-op Translator](https://github.com/Azure/co-op-translator). Embora nos esforcemos para garantir a precisão, esteja ciente de que traduções automáticas podem conter erros ou imprecisões. O documento original em seu idioma nativo deve ser considerado a fonte oficial. Para informações críticas, recomenda-se a tradução profissional realizada por humanos. Não nos responsabilizamos por quaisquer mal-entendidos ou interpretações equivocadas decorrentes do uso desta tradução.\n" + ] + } + ] +} \ No newline at end of file diff --git a/translations/pt-BR/8-Reinforcement/README.md b/translations/pt-BR/8-Reinforcement/README.md new file mode 100644 index 000000000..ba0f0b710 --- /dev/null +++ b/translations/pt-BR/8-Reinforcement/README.md @@ -0,0 +1,58 @@ +# Introdução ao aprendizado por reforço + +O aprendizado por reforço, RL, é considerado um dos paradigmas básicos de aprendizado de máquina, ao lado do aprendizado supervisionado e não supervisionado. RL trata de decisões: tomar as decisões certas ou, pelo menos, aprender com elas. + +Imagine que você tem um ambiente simulado, como o mercado de ações. O que acontece se você impuser uma determinada regulamentação? Isso terá um efeito positivo ou negativo? Se algo negativo acontecer, você precisa aceitar esse _reforço negativo_, aprender com ele e mudar de direção. Se o resultado for positivo, você precisa construir sobre esse _reforço positivo_. + +![Pedro e o lobo](../../../translated_images/pt-BR/peter.779730f9ba3a8a8d.webp) + +> Pedro e seus amigos precisam escapar do lobo faminto! Imagem por [Jen Looper](https://twitter.com/jenlooper) + +## Tópico regional: Pedro e o Lobo (Rússia) + +[Pedro e o Lobo](https://en.wikipedia.org/wiki/Peter_and_the_Wolf) é um conto musical escrito pelo compositor russo [Sergei Prokofiev](https://en.wikipedia.org/wiki/Sergei_Prokofiev). É uma história sobre o jovem pioneiro Pedro, que corajosamente sai de sua casa para a clareira da floresta para perseguir o lobo. Nesta seção, treinaremos algoritmos de aprendizado de máquina que ajudarão Pedro a: + +- **Explorar** a área ao redor e construir um mapa de navegação ideal. +- **Aprender** a usar um skate e se equilibrar nele, para se mover mais rápido. + +[![Pedro e o Lobo](https://img.youtube.com/vi/Fmi5zHg4QSM/0.jpg)](https://www.youtube.com/watch?v=Fmi5zHg4QSM) + +> 🎥 Clique na imagem acima para ouvir Pedro e o Lobo de Prokofiev + +## Aprendizado por reforço + +Nas seções anteriores, você viu dois exemplos de problemas de aprendizado de máquina: + +- **Supervisionado**, onde temos conjuntos de dados que sugerem soluções de exemplo para o problema que queremos resolver. [Classificação](../4-Classification/README.md) e [regressão](../2-Regression/README.md) são tarefas de aprendizado supervisionado. +- **Não supervisionado**, no qual não temos dados de treinamento rotulados. O principal exemplo de aprendizado não supervisionado é [Agrupamento](../5-Clustering/README.md). + +Nesta seção, apresentaremos um novo tipo de problema de aprendizado que não requer dados de treinamento rotulados. Existem vários tipos de problemas desse tipo: + +- **[Aprendizado semi-supervisionado](https://wikipedia.org/wiki/Semi-supervised_learning)**, onde temos muitos dados não rotulados que podem ser usados para pré-treinar o modelo. +- **[Aprendizado por reforço](https://wikipedia.org/wiki/Reinforcement_learning)**, no qual um agente aprende como se comportar realizando experimentos em algum ambiente simulado. + +### Exemplo - jogo de computador + +Suponha que você queira ensinar um computador a jogar um jogo, como xadrez ou [Super Mario](https://wikipedia.org/wiki/Super_Mario). Para que o computador jogue, precisamos que ele preveja qual movimento fazer em cada estado do jogo. Embora isso possa parecer um problema de classificação, não é - porque não temos um conjunto de dados com estados e ações correspondentes. Embora possamos ter alguns dados, como partidas de xadrez existentes ou gravações de jogadores jogando Super Mario, é provável que esses dados não cubram suficientemente um número grande de estados possíveis. + +Em vez de procurar dados existentes do jogo, o **Aprendizado por Reforço** (RL) baseia-se na ideia de *fazer o computador jogar* muitas vezes e observar o resultado. Assim, para aplicar o Aprendizado por Reforço, precisamos de duas coisas: + +- **Um ambiente** e **um simulador** que nos permitam jogar muitas vezes. Esse simulador definiria todas as regras do jogo, bem como os estados e ações possíveis. + +- **Uma função de recompensa**, que nos diria quão bem nos saímos durante cada movimento ou partida. + +A principal diferença entre outros tipos de aprendizado de máquina e RL é que, no RL, geralmente não sabemos se ganhamos ou perdemos até terminarmos o jogo. Assim, não podemos dizer se um determinado movimento isolado é bom ou não - só recebemos uma recompensa no final do jogo. Nosso objetivo é projetar algoritmos que nos permitam treinar um modelo sob condições incertas. Vamos aprender sobre um algoritmo de RL chamado **Q-learning**. + +## Lições + +1. [Introdução ao aprendizado por reforço e Q-Learning](1-QLearning/README.md) +2. [Usando um ambiente de simulação Gym](2-Gym/README.md) + +## Créditos + +"Introdução ao Aprendizado por Reforço" foi escrito com ♥️ por [Dmitry Soshnikov](http://soshnikov.com) + +--- + +**Aviso Legal**: +Este documento foi traduzido utilizando o serviço de tradução por IA [Co-op Translator](https://github.com/Azure/co-op-translator). Embora nos esforcemos para garantir a precisão, esteja ciente de que traduções automatizadas podem conter erros ou imprecisões. O documento original em seu idioma nativo deve ser considerado a fonte autoritativa. Para informações críticas, recomenda-se a tradução profissional realizada por humanos. Não nos responsabilizamos por quaisquer mal-entendidos ou interpretações equivocadas decorrentes do uso desta tradução. \ No newline at end of file diff --git a/translations/pt-BR/9-Real-World/1-Applications/README.md b/translations/pt-BR/9-Real-World/1-Applications/README.md new file mode 100644 index 000000000..5909df519 --- /dev/null +++ b/translations/pt-BR/9-Real-World/1-Applications/README.md @@ -0,0 +1,150 @@ +# Pós-escrito: Aprendizado de máquina no mundo real + +![Resumo do aprendizado de máquina no mundo real em um sketchnote](../../../../sketchnotes/ml-realworld.png) +> Sketchnote por [Tomomi Imura](https://www.twitter.com/girlie_mac) + +Neste currículo, você aprendeu várias maneiras de preparar dados para treinamento e criar modelos de aprendizado de máquina. Você construiu uma série de modelos clássicos de regressão, agrupamento, classificação, processamento de linguagem natural e séries temporais. Parabéns! Agora, você pode estar se perguntando para que tudo isso serve... quais são as aplicações reais desses modelos? + +Embora a inteligência artificial, que geralmente utiliza aprendizado profundo, tenha atraído muito interesse na indústria, ainda existem aplicações valiosas para modelos clássicos de aprendizado de máquina. Você pode até estar usando algumas dessas aplicações hoje! Nesta lição, você explorará como oito diferentes indústrias e áreas de conhecimento utilizam esses tipos de modelos para tornar suas aplicações mais eficientes, confiáveis, inteligentes e valiosas para os usuários. + +## [Quiz pré-aula](https://ff-quizzes.netlify.app/en/ml/) + +## 💰 Finanças + +O setor financeiro oferece muitas oportunidades para o aprendizado de máquina. Muitos problemas nessa área podem ser modelados e resolvidos usando ML. + +### Detecção de fraude em cartões de crédito + +Aprendemos sobre [agrupamento k-means](../../5-Clustering/2-K-Means/README.md) anteriormente no curso, mas como ele pode ser usado para resolver problemas relacionados à fraude em cartões de crédito? + +O agrupamento k-means é útil em uma técnica de detecção de fraude chamada **detecção de outliers**. Outliers, ou desvios nas observações de um conjunto de dados, podem nos dizer se um cartão de crédito está sendo usado de forma normal ou se algo incomum está acontecendo. Como mostrado no artigo abaixo, você pode classificar dados de cartões de crédito usando um algoritmo de agrupamento k-means e atribuir cada transação a um grupo com base no quanto ela parece ser um outlier. Em seguida, você pode avaliar os grupos mais arriscados para identificar transações fraudulentas versus legítimas. +[Referência](https://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.680.1195&rep=rep1&type=pdf) + +### Gestão de patrimônio + +Na gestão de patrimônio, um indivíduo ou empresa administra investimentos em nome de seus clientes. O objetivo é sustentar e aumentar a riqueza a longo prazo, sendo essencial escolher investimentos que tenham bom desempenho. + +Uma maneira de avaliar o desempenho de um investimento é por meio de regressão estatística. [Regressão linear](../../2-Regression/1-Tools/README.md) é uma ferramenta valiosa para entender como um fundo se comporta em relação a um benchmark. Também podemos deduzir se os resultados da regressão são estatisticamente significativos ou o quanto eles impactariam os investimentos de um cliente. Você pode expandir ainda mais sua análise usando regressão múltipla, onde fatores de risco adicionais podem ser considerados. Para um exemplo de como isso funcionaria para um fundo específico, confira o artigo abaixo sobre avaliação de desempenho de fundos usando regressão. +[Referência](http://www.brightwoodventures.com/evaluating-fund-performance-using-regression/) + +## 🎓 Educação + +O setor educacional também é uma área muito interessante onde o ML pode ser aplicado. Existem problemas intrigantes a serem resolvidos, como detectar trapaças em testes ou redações e gerenciar vieses, intencionais ou não, no processo de correção. + +### Previsão de comportamento estudantil + +[Coursera](https://coursera.com), um provedor de cursos online abertos, tem um ótimo blog técnico onde discutem muitas decisões de engenharia. Neste estudo de caso, eles traçaram uma linha de regressão para explorar qualquer correlação entre uma baixa classificação de NPS (Net Promoter Score) e a retenção ou abandono de cursos. +[Referência](https://medium.com/coursera-engineering/controlled-regression-quantifying-the-impact-of-course-quality-on-learner-retention-31f956bd592a) + +### Mitigação de vieses + +[Grammarly](https://grammarly.com), um assistente de escrita que verifica erros de ortografia e gramática, utiliza sistemas sofisticados de [processamento de linguagem natural](../../6-NLP/README.md) em seus produtos. Eles publicaram um estudo de caso interessante em seu blog técnico sobre como lidaram com o viés de gênero no aprendizado de máquina, algo que você aprendeu em nossa [lição introdutória sobre justiça](../../1-Introduction/3-fairness/README.md). +[Referência](https://www.grammarly.com/blog/engineering/mitigating-gender-bias-in-autocorrect/) + +## 👜 Varejo + +O setor de varejo pode se beneficiar muito do uso de ML, desde a criação de uma jornada do cliente mais personalizada até o gerenciamento otimizado de estoques. + +### Personalização da jornada do cliente + +Na Wayfair, uma empresa que vende produtos para casa, como móveis, ajudar os clientes a encontrar os produtos certos para seus gostos e necessidades é fundamental. Neste artigo, engenheiros da empresa descrevem como utilizam ML e NLP para "apresentar os resultados certos para os clientes". Notavelmente, seu motor de intenção de consulta foi construído para usar extração de entidades, treinamento de classificadores, extração de ativos e opiniões, e marcação de sentimentos em avaliações de clientes. Este é um caso clássico de como o NLP funciona no varejo online. +[Referência](https://www.aboutwayfair.com/tech-innovation/how-we-use-machine-learning-and-natural-language-processing-to-empower-search) + +### Gestão de estoque + +Empresas inovadoras e ágeis como [StitchFix](https://stitchfix.com), um serviço de assinatura que envia roupas para consumidores, dependem fortemente de ML para recomendações e gestão de estoque. Suas equipes de estilo trabalham em conjunto com suas equipes de merchandising. "Um de nossos cientistas de dados experimentou um algoritmo genético e o aplicou ao vestuário para prever o que seria uma peça de roupa bem-sucedida que ainda não existe. Levamos isso para a equipe de merchandising e agora eles podem usar isso como uma ferramenta." +[Referência](https://www.zdnet.com/article/how-stitch-fix-uses-machine-learning-to-master-the-science-of-styling/) + +## 🏥 Saúde + +O setor de saúde pode aproveitar o ML para otimizar tarefas de pesquisa e também problemas logísticos, como readmissão de pacientes ou controle de doenças. + +### Gestão de ensaios clínicos + +A toxicidade em ensaios clínicos é uma grande preocupação para os fabricantes de medicamentos. Qual é o nível de toxicidade tolerável? Neste estudo, a análise de vários métodos de ensaios clínicos levou ao desenvolvimento de uma nova abordagem para prever as chances de resultados de ensaios clínicos. Especificamente, eles conseguiram usar random forest para produzir um [classificador](../../4-Classification/README.md) capaz de distinguir entre grupos de medicamentos. +[Referência](https://www.sciencedirect.com/science/article/pii/S2451945616302914) + +### Gestão de readmissão hospitalar + +O atendimento hospitalar é caro, especialmente quando os pacientes precisam ser readmitidos. Este artigo discute uma empresa que usa ML para prever o potencial de readmissão usando algoritmos de [agrupamento](../../5-Clustering/README.md). Esses grupos ajudam os analistas a "descobrir grupos de readmissões que podem compartilhar uma causa comum". +[Referência](https://healthmanagement.org/c/healthmanagement/issuearticle/hospital-readmissions-and-machine-learning) + +### Gestão de doenças + +A recente pandemia destacou como o aprendizado de máquina pode ajudar a conter a disseminação de doenças. Neste artigo, você reconhecerá o uso de ARIMA, curvas logísticas, regressão linear e SARIMA. "Este trabalho é uma tentativa de calcular a taxa de disseminação deste vírus e, assim, prever mortes, recuperações e casos confirmados, para que possamos nos preparar melhor e sobreviver." +[Referência](https://www.ncbi.nlm.nih.gov/pmc/articles/PMC7979218/) + +## 🌲 Ecologia e Tecnologia Verde + +A natureza e a ecologia consistem em muitos sistemas sensíveis onde a interação entre animais e o meio ambiente entra em foco. É importante medir esses sistemas com precisão e agir adequadamente se algo acontecer, como um incêndio florestal ou uma queda na população animal. + +### Gestão florestal + +Você aprendeu sobre [Aprendizado por Reforço](../../8-Reinforcement/README.md) em lições anteriores. Ele pode ser muito útil ao tentar prever padrões na natureza. Em particular, pode ser usado para monitorar problemas ecológicos como incêndios florestais e a disseminação de espécies invasoras. No Canadá, um grupo de pesquisadores usou Aprendizado por Reforço para construir modelos de dinâmica de incêndios florestais a partir de imagens de satélite. Usando um inovador "processo de propagação espacial (SSP)", eles imaginaram um incêndio florestal como "o agente em qualquer célula na paisagem". "O conjunto de ações que o fogo pode realizar de um local em qualquer momento inclui se espalhar para o norte, sul, leste ou oeste ou não se espalhar." + +Essa abordagem inverte o cenário usual de RL, já que a dinâmica do Processo de Decisão de Markov (MDP) correspondente é uma função conhecida para a propagação imediata do incêndio. Leia mais sobre os algoritmos clássicos usados por este grupo no link abaixo. +[Referência](https://www.frontiersin.org/articles/10.3389/fict.2018.00006/full) + +### Monitoramento de movimentos de animais + +Embora o aprendizado profundo tenha revolucionado o rastreamento visual de movimentos de animais (você pode construir seu próprio [rastreador de ursos polares](https://docs.microsoft.com/learn/modules/build-ml-model-with-azure-stream-analytics/?WT.mc_id=academic-77952-leestott) aqui), o ML clássico ainda tem um lugar nessa tarefa. + +Sensores para rastrear movimentos de animais de fazenda e IoT utilizam esse tipo de processamento visual, mas técnicas mais básicas de ML são úteis para pré-processar dados. Por exemplo, neste artigo, posturas de ovelhas foram monitoradas e analisadas usando vários algoritmos de classificação. Você pode reconhecer a curva ROC na página 335. +[Referência](https://druckhaus-hofmann.de/gallery/31-wj-feb-2020.pdf) + +### ⚡️ Gestão de Energia + +Em nossas lições sobre [previsão de séries temporais](../../7-TimeSeries/README.md), invocamos o conceito de parquímetros inteligentes para gerar receita para uma cidade com base na compreensão de oferta e demanda. Este artigo discute em detalhes como agrupamento, regressão e previsão de séries temporais se combinam para ajudar a prever o uso futuro de energia na Irlanda, com base em medição inteligente. +[Referência](https://www-cdn.knime.com/sites/default/files/inline-images/knime_bigdata_energy_timeseries_whitepaper.pdf) + +## 💼 Seguros + +O setor de seguros é outro setor que utiliza ML para construir e otimizar modelos financeiros e atuariais viáveis. + +### Gestão de volatilidade + +A MetLife, uma provedora de seguros de vida, é transparente sobre como analisa e mitiga a volatilidade em seus modelos financeiros. Neste artigo, você verá visualizações de classificação binária e ordinal. Também encontrará visualizações de previsão. +[Referência](https://investments.metlife.com/content/dam/metlifecom/us/investments/insights/research-topics/macro-strategy/pdf/MetLifeInvestmentManagement_MachineLearnedRanking_070920.pdf) + +## 🎨 Artes, Cultura e Literatura + +Nas artes, por exemplo no jornalismo, há muitos problemas interessantes. Detectar notícias falsas é um grande desafio, pois já foi comprovado que elas influenciam a opinião das pessoas e até derrubam democracias. Museus também podem se beneficiar do uso de ML em tudo, desde encontrar conexões entre artefatos até planejamento de recursos. + +### Detecção de notícias falsas + +Detectar notícias falsas tornou-se um jogo de gato e rato na mídia atual. Neste artigo, pesquisadores sugerem que um sistema combinando várias das técnicas de ML que estudamos pode ser testado e o melhor modelo implantado: "Este sistema é baseado no processamento de linguagem natural para extrair características dos dados e, em seguida, essas características são usadas para o treinamento de classificadores de aprendizado de máquina, como Naive Bayes, Support Vector Machine (SVM), Random Forest (RF), Stochastic Gradient Descent (SGD) e Regressão Logística (LR)." +[Referência](https://www.irjet.net/archives/V7/i6/IRJET-V7I6688.pdf) + +Este artigo mostra como combinar diferentes domínios de ML pode produzir resultados interessantes que ajudam a impedir a disseminação de notícias falsas e a criação de danos reais; neste caso, o impulso foi a disseminação de rumores sobre tratamentos para COVID que incitaram violência em massa. + +### ML em museus + +Os museus estão na vanguarda de uma revolução da IA, onde catalogar e digitalizar coleções e encontrar conexões entre artefatos está se tornando mais fácil à medida que a tecnologia avança. Projetos como [In Codice Ratio](https://www.sciencedirect.com/science/article/abs/pii/S0306457321001035#:~:text=1.,studies%20over%20large%20historical%20sources.) estão ajudando a desvendar os mistérios de coleções inacessíveis, como os Arquivos do Vaticano. Mas o aspecto comercial dos museus também se beneficia de modelos de ML. + +Por exemplo, o Instituto de Arte de Chicago construiu modelos para prever o que os públicos estão interessados e quando irão visitar exposições. O objetivo é criar experiências de visita individualizadas e otimizadas cada vez que o usuário visita o museu. "Durante o ano fiscal de 2017, o modelo previu a frequência e as admissões com uma precisão de 1%, diz Andrew Simnick, vice-presidente sênior do Instituto de Arte." +[Referência](https://www.chicagobusiness.com/article/20180518/ISSUE01/180519840/art-institute-of-chicago-uses-data-to-make-exhibit-choices) + +## 🏷 Marketing + +### Segmentação de clientes + +As estratégias de marketing mais eficazes segmentam os clientes de diferentes maneiras com base em vários agrupamentos. Neste artigo, os usos de algoritmos de agrupamento são discutidos para apoiar o marketing diferenciado. O marketing diferenciado ajuda as empresas a melhorar o reconhecimento da marca, alcançar mais clientes e gerar mais receita. +[Referência](https://ai.inqline.com/machine-learning-for-marketing-customer-segmentation/) + +## 🚀 Desafio + +Identifique outro setor que se beneficie de algumas das técnicas que você aprendeu neste currículo e descubra como ele utiliza ML. +## [Quiz pós-aula](https://ff-quizzes.netlify.app/en/ml/) + +## Revisão e Autoestudo + +A equipe de ciência de dados da Wayfair tem vários vídeos interessantes sobre como eles utilizam ML na empresa. Vale a pena [dar uma olhada](https://www.youtube.com/channel/UCe2PjkQXqOuwkW1gw6Ameuw/videos)! + +## Tarefa + +[Uma caça ao tesouro de ML](assignment.md) + +--- + +**Aviso Legal**: +Este documento foi traduzido utilizando o serviço de tradução por IA [Co-op Translator](https://github.com/Azure/co-op-translator). Embora nos esforcemos para garantir a precisão, esteja ciente de que traduções automatizadas podem conter erros ou imprecisões. O documento original em seu idioma nativo deve ser considerado a fonte autoritativa. Para informações críticas, recomenda-se a tradução profissional realizada por humanos. Não nos responsabilizamos por quaisquer mal-entendidos ou interpretações equivocadas decorrentes do uso desta tradução. \ No newline at end of file diff --git a/translations/pt-BR/9-Real-World/1-Applications/assignment.md b/translations/pt-BR/9-Real-World/1-Applications/assignment.md new file mode 100644 index 000000000..123d9938c --- /dev/null +++ b/translations/pt-BR/9-Real-World/1-Applications/assignment.md @@ -0,0 +1,18 @@ +# Uma Caça ao Tesouro de ML + +## Instruções + +Nesta lição, você aprendeu sobre muitos casos de uso reais que foram resolvidos usando ML clássico. Embora o uso de aprendizado profundo, novas técnicas e ferramentas em IA, e o aproveitamento de redes neurais tenham ajudado a acelerar a produção de ferramentas para ajudar nesses setores, o ML clássico utilizando as técnicas deste currículo ainda tem grande valor. + +Nesta tarefa, imagine que você está participando de um hackathon. Use o que você aprendeu no currículo para propor uma solução usando ML clássico para resolver um problema em um dos setores discutidos nesta lição. Crie uma apresentação onde você discuta como irá implementar sua ideia. Pontos extras se você conseguir reunir dados de exemplo e construir um modelo de ML para apoiar seu conceito! + +## Rubrica + +| Critério | Exemplar | Adequado | Precisa Melhorar | +| -------- | ------------------------------------------------------------------- | ------------------------------------------------ | ---------------------- | +| | Uma apresentação em PowerPoint é apresentada - bônus por construir um modelo | Uma apresentação básica e não inovadora é apresentada | O trabalho está incompleto | + +--- + +**Aviso Legal**: +Este documento foi traduzido utilizando o serviço de tradução por IA [Co-op Translator](https://github.com/Azure/co-op-translator). Embora nos esforcemos para garantir a precisão, esteja ciente de que traduções automatizadas podem conter erros ou imprecisões. O documento original em seu idioma nativo deve ser considerado a fonte autoritativa. Para informações críticas, recomenda-se a tradução profissional realizada por humanos. Não nos responsabilizamos por quaisquer mal-entendidos ou interpretações equivocadas decorrentes do uso desta tradução. \ No newline at end of file diff --git a/translations/pt-BR/9-Real-World/2-Debugging-ML-Models/README.md b/translations/pt-BR/9-Real-World/2-Debugging-ML-Models/README.md new file mode 100644 index 000000000..30ef43593 --- /dev/null +++ b/translations/pt-BR/9-Real-World/2-Debugging-ML-Models/README.md @@ -0,0 +1,175 @@ +# Pós-escrito: Depuração de Modelos de Machine Learning usando componentes do painel de IA Responsável + +## [Quiz pré-aula](https://ff-quizzes.netlify.app/en/ml/) + +## Introdução + +O aprendizado de máquina impacta nossas vidas cotidianas. A IA está se inserindo em alguns dos sistemas mais importantes que nos afetam como indivíduos e como sociedade, desde saúde, finanças, educação e emprego. Por exemplo, sistemas e modelos estão envolvidos em tarefas diárias de tomada de decisão, como diagnósticos médicos ou detecção de fraudes. Consequentemente, os avanços na IA, juntamente com sua adoção acelerada, estão sendo acompanhados por expectativas sociais em evolução e regulamentações crescentes em resposta. Constantemente vemos áreas onde os sistemas de IA continuam a não atender às expectativas; eles expõem novos desafios; e os governos estão começando a regulamentar soluções de IA. Por isso, é importante que esses modelos sejam analisados para fornecer resultados justos, confiáveis, inclusivos, transparentes e responsáveis para todos. + +Neste currículo, exploraremos ferramentas práticas que podem ser usadas para avaliar se um modelo apresenta problemas relacionados à IA responsável. Técnicas tradicionais de depuração de aprendizado de máquina tendem a ser baseadas em cálculos quantitativos, como precisão agregada ou perda média de erro. Imagine o que pode acontecer quando os dados que você está usando para construir esses modelos carecem de certos grupos demográficos, como raça, gênero, visão política, religião, ou representam esses grupos de forma desproporcional. E se a saída do modelo for interpretada de forma a favorecer algum grupo demográfico? Isso pode introduzir uma super ou sub-representação desses grupos sensíveis, resultando em problemas de justiça, inclusão ou confiabilidade no modelo. Outro fator é que os modelos de aprendizado de máquina são considerados "caixas-pretas", o que dificulta entender e explicar o que impulsiona as previsões de um modelo. Todos esses são desafios enfrentados por cientistas de dados e desenvolvedores de IA quando não possuem ferramentas adequadas para depurar e avaliar a justiça ou confiabilidade de um modelo. + +Nesta lição, você aprenderá a depurar seus modelos usando: + +- **Análise de Erros**: identificar onde na distribuição de dados o modelo apresenta altas taxas de erro. +- **Visão Geral do Modelo**: realizar análises comparativas entre diferentes coortes de dados para descobrir disparidades nas métricas de desempenho do modelo. +- **Análise de Dados**: investigar onde pode haver super ou sub-representação nos dados que podem enviesar o modelo para favorecer um grupo demográfico em detrimento de outro. +- **Importância das Features**: entender quais características estão impulsionando as previsões do modelo em nível global ou local. + +## Pré-requisito + +Como pré-requisito, revise [Ferramentas de IA Responsável para desenvolvedores](https://www.microsoft.com/ai/ai-lab-responsible-ai-dashboard) + +> ![Gif sobre Ferramentas de IA Responsável](../../../../9-Real-World/2-Debugging-ML-Models/images/rai-overview.gif) + +## Análise de Erros + +Métricas tradicionais de desempenho de modelos usadas para medir precisão são, na maioria das vezes, cálculos baseados em previsões corretas versus incorretas. Por exemplo, determinar que um modelo é preciso 89% do tempo com uma perda de erro de 0,001 pode ser considerado um bom desempenho. No entanto, os erros geralmente não são distribuídos uniformemente no conjunto de dados subjacente. Você pode obter uma pontuação de precisão de 89%, mas descobrir que existem diferentes regiões nos dados em que o modelo falha 42% do tempo. As consequências desses padrões de falha em certos grupos de dados podem levar a problemas de justiça ou confiabilidade. É essencial entender as áreas onde o modelo está se saindo bem ou não. As regiões de dados com um alto número de imprecisões no modelo podem acabar sendo um grupo demográfico importante. + +![Analisar e depurar erros do modelo](../../../../9-Real-World/2-Debugging-ML-Models/images/ea-error-distribution.png) + +O componente de Análise de Erros no painel de IA Responsável ilustra como as falhas do modelo estão distribuídas entre vários coortes com uma visualização em árvore. Isso é útil para identificar características ou áreas onde há uma alta taxa de erro no conjunto de dados. Ao ver de onde vêm a maioria das imprecisões do modelo, você pode começar a investigar a causa raiz. Também é possível criar coortes de dados para realizar análises. Esses coortes de dados ajudam no processo de depuração para determinar por que o desempenho do modelo é bom em um coorte, mas apresenta erros em outro. + +![Análise de Erros](../../../../9-Real-World/2-Debugging-ML-Models/images/ea-error-cohort.png) + +Os indicadores visuais no mapa de árvore ajudam a localizar as áreas problemáticas mais rapidamente. Por exemplo, quanto mais escuro o tom de vermelho em um nó da árvore, maior a taxa de erro. + +O mapa de calor é outra funcionalidade de visualização que os usuários podem usar para investigar a taxa de erro usando uma ou duas características para encontrar contribuições para os erros do modelo em todo o conjunto de dados ou coortes. + +![Mapa de calor da Análise de Erros](../../../../9-Real-World/2-Debugging-ML-Models/images/ea-heatmap.png) + +Use a análise de erros quando você precisar: + +* Obter uma compreensão profunda de como as falhas do modelo estão distribuídas em um conjunto de dados e em várias dimensões de entrada e características. +* Dividir as métricas de desempenho agregadas para descobrir automaticamente coortes com erros e informar suas etapas de mitigação direcionadas. + +## Visão Geral do Modelo + +Avaliar o desempenho de um modelo de aprendizado de máquina requer uma compreensão holística de seu comportamento. Isso pode ser alcançado revisando mais de uma métrica, como taxa de erro, precisão, recall, precisão ou MAE (Erro Absoluto Médio), para encontrar disparidades entre as métricas de desempenho. Uma métrica de desempenho pode parecer ótima, mas imprecisões podem ser expostas em outra métrica. Além disso, comparar as métricas para disparidades em todo o conjunto de dados ou coortes ajuda a esclarecer onde o modelo está se saindo bem ou não. Isso é especialmente importante para observar o desempenho do modelo entre características sensíveis e insensíveis (por exemplo, raça, gênero ou idade de pacientes) para descobrir possíveis injustiças que o modelo possa ter. Por exemplo, descobrir que o modelo é mais impreciso em um coorte que possui características sensíveis pode revelar possíveis injustiças no modelo. + +O componente Visão Geral do Modelo do painel de IA Responsável ajuda não apenas na análise das métricas de desempenho da representação de dados em um coorte, mas também oferece aos usuários a capacidade de comparar o comportamento do modelo entre diferentes coortes. + +![Coortes de conjunto de dados - visão geral do modelo no painel de IA Responsável](../../../../9-Real-World/2-Debugging-ML-Models/images/model-overview-dataset-cohorts.png) + +A funcionalidade de análise baseada em características do componente permite que os usuários delimitem subgrupos de dados dentro de uma característica específica para identificar anomalias em um nível granular. Por exemplo, o painel possui inteligência integrada para gerar automaticamente coortes para uma característica selecionada pelo usuário (ex., *"tempo_no_hospital < 3"* ou *"tempo_no_hospital >= 7"*). Isso permite que o usuário isole uma característica específica de um grupo maior de dados para verificar se ela é um influenciador chave dos resultados errôneos do modelo. + +![Coortes de características - visão geral do modelo no painel de IA Responsável](../../../../9-Real-World/2-Debugging-ML-Models/images/model-overview-feature-cohorts.png) + +O componente Visão Geral do Modelo suporta duas classes de métricas de disparidade: + +**Disparidade no desempenho do modelo**: Esses conjuntos de métricas calculam a disparidade (diferença) nos valores da métrica de desempenho selecionada entre subgrupos de dados. Aqui estão alguns exemplos: + +* Disparidade na taxa de precisão +* Disparidade na taxa de erro +* Disparidade na precisão +* Disparidade no recall +* Disparidade no erro absoluto médio (MAE) + +**Disparidade na taxa de seleção**: Essa métrica contém a diferença na taxa de seleção (previsão favorável) entre subgrupos. Um exemplo disso é a disparidade nas taxas de aprovação de empréstimos. Taxa de seleção significa a fração de pontos de dados em cada classe classificados como 1 (em classificação binária) ou a distribuição dos valores de previsão (em regressão). + +## Análise de Dados + +> "Se você torturar os dados por tempo suficiente, eles confessarão qualquer coisa" - Ronald Coase + +Essa afirmação soa extrema, mas é verdade que os dados podem ser manipulados para apoiar qualquer conclusão. Tal manipulação às vezes pode acontecer de forma não intencional. Como seres humanos, todos temos preconceitos, e muitas vezes é difícil saber conscientemente quando estamos introduzindo preconceitos nos dados. Garantir justiça na IA e no aprendizado de máquina continua sendo um desafio complexo. + +Os dados são um grande ponto cego para métricas tradicionais de desempenho de modelos. Você pode ter altas pontuações de precisão, mas isso nem sempre reflete o viés subjacente que pode estar presente no conjunto de dados. Por exemplo, se um conjunto de dados de funcionários possui 27% de mulheres em cargos executivos em uma empresa e 73% de homens no mesmo nível, um modelo de IA de publicidade de empregos treinado com esses dados pode direcionar principalmente um público masculino para posições de alto nível. Ter esse desequilíbrio nos dados enviesou a previsão do modelo para favorecer um gênero. Isso revela um problema de justiça onde há um viés de gênero no modelo de IA. + +O componente de Análise de Dados no painel de IA Responsável ajuda a identificar áreas onde há super ou sub-representação no conjunto de dados. Ele ajuda os usuários a diagnosticar a causa raiz de erros e problemas de justiça introduzidos por desequilíbrios nos dados ou falta de representação de um grupo de dados específico. Isso dá aos usuários a capacidade de visualizar conjuntos de dados com base em resultados previstos e reais, grupos de erros e características específicas. Às vezes, descobrir um grupo de dados sub-representado também pode revelar que o modelo não está aprendendo bem, daí as altas imprecisões. Ter um modelo com viés nos dados não é apenas um problema de justiça, mas mostra que o modelo não é inclusivo ou confiável. + +![Componente de Análise de Dados no painel de IA Responsável](../../../../9-Real-World/2-Debugging-ML-Models/images/dataanalysis-cover.png) + +Use a análise de dados quando você precisar: + +* Explorar as estatísticas do seu conjunto de dados selecionando diferentes filtros para dividir seus dados em diferentes dimensões (também conhecidas como coortes). +* Entender a distribuição do seu conjunto de dados entre diferentes coortes e grupos de características. +* Determinar se suas descobertas relacionadas à justiça, análise de erros e causalidade (derivadas de outros componentes do painel) são resultado da distribuição do seu conjunto de dados. +* Decidir em quais áreas coletar mais dados para mitigar erros que surgem de problemas de representação, ruído de rótulo, ruído de características, viés de rótulo e fatores semelhantes. + +## Interpretabilidade do Modelo + +Modelos de aprendizado de máquina tendem a ser "caixas-pretas". Entender quais características-chave dos dados impulsionam as previsões de um modelo pode ser desafiador. É importante fornecer transparência sobre por que um modelo faz uma determinada previsão. Por exemplo, se um sistema de IA prevê que um paciente diabético está em risco de ser readmitido em um hospital em menos de 30 dias, ele deve ser capaz de fornecer dados de suporte que levaram à sua previsão. Ter indicadores de dados de suporte traz transparência para ajudar clínicos ou hospitais a tomarem decisões bem informadas. Além disso, ser capaz de explicar por que um modelo fez uma previsão para um paciente individual permite responsabilidade com as regulamentações de saúde. Quando você usa modelos de aprendizado de máquina de maneiras que afetam a vida das pessoas, é crucial entender e explicar o que influencia o comportamento de um modelo. A explicabilidade e interpretabilidade do modelo ajudam a responder perguntas em cenários como: + +* Depuração do modelo: Por que meu modelo cometeu esse erro? Como posso melhorar meu modelo? +* Colaboração humano-IA: Como posso entender e confiar nas decisões do modelo? +* Conformidade regulatória: Meu modelo atende aos requisitos legais? + +O componente Importância das Features do painel de IA Responsável ajuda você a depurar e obter uma compreensão abrangente de como um modelo faz previsões. Também é uma ferramenta útil para profissionais de aprendizado de máquina e tomadores de decisão explicarem e mostrarem evidências das características que influenciam o comportamento do modelo para conformidade regulatória. Em seguida, os usuários podem explorar explicações globais e locais para validar quais características impulsionam as previsões do modelo. Explicações globais listam as principais características que afetaram a previsão geral do modelo. Explicações locais exibem quais características levaram à previsão do modelo para um caso individual. A capacidade de avaliar explicações locais também é útil na depuração ou auditoria de um caso específico para entender e interpretar melhor por que um modelo fez uma previsão precisa ou imprecisa. + +![Componente Importância das Features do painel de IA Responsável](../../../../9-Real-World/2-Debugging-ML-Models/images/9-feature-importance.png) + +* Explicações globais: Por exemplo, quais características afetam o comportamento geral de um modelo de readmissão hospitalar para diabetes? +* Explicações locais: Por exemplo, por que um paciente diabético com mais de 60 anos e hospitalizações anteriores foi previsto como readmitido ou não readmitido em menos de 30 dias em um hospital? + +No processo de depuração ao examinar o desempenho de um modelo entre diferentes coortes, a Importância das Features mostra o nível de impacto que uma característica tem entre os coortes. Ela ajuda a revelar anomalias ao comparar o nível de influência que a característica tem em impulsionar as previsões errôneas do modelo. O componente Importância das Features pode mostrar quais valores em uma característica influenciaram positivamente ou negativamente o resultado do modelo. Por exemplo, se um modelo fez uma previsão imprecisa, o componente dá a capacidade de detalhar e identificar quais características ou valores de características impulsionaram a previsão. Esse nível de detalhe ajuda não apenas na depuração, mas também fornece transparência e responsabilidade em situações de auditoria. Por fim, o componente pode ajudar a identificar problemas de justiça. Para ilustrar, se uma característica sensível como etnia ou gênero é altamente influente em impulsionar a previsão do modelo, isso pode ser um sinal de viés de raça ou gênero no modelo. + +![Importância das Features](../../../../9-Real-World/2-Debugging-ML-Models/images/9-features-influence.png) + +Use interpretabilidade quando você precisar: + +* Determinar o quão confiáveis são as previsões do seu sistema de IA, entendendo quais características são mais importantes para as previsões. +* Abordar a depuração do seu modelo entendendo-o primeiro e identificando se o modelo está usando características saudáveis ou apenas correlações falsas. +* Descobrir possíveis fontes de injustiça entendendo se o modelo está baseando previsões em características sensíveis ou em características altamente correlacionadas com elas. +* Construir confiança do usuário nas decisões do modelo gerando explicações locais para ilustrar seus resultados. +* Completar uma auditoria regulatória de um sistema de IA para validar modelos e monitorar o impacto das decisões do modelo sobre os seres humanos. + +## Conclusão + +Todos os componentes do painel de IA Responsável são ferramentas práticas para ajudar você a construir modelos de aprendizado de máquina que sejam menos prejudiciais e mais confiáveis para a sociedade. Eles melhoram a prevenção de ameaças aos direitos humanos; discriminação ou exclusão de certos grupos de oportunidades de vida; e o risco de danos físicos ou psicológicos. Também ajudam a construir confiança nas decisões do modelo, gerando explicações locais para ilustrar seus resultados. Alguns dos possíveis danos podem ser classificados como: + +- **Alocação**, se um gênero ou etnia, por exemplo, for favorecido em detrimento de outro. +- **Qualidade do serviço**. Se você treinar os dados para um cenário específico, mas a realidade for muito mais complexa, isso leva a um serviço de desempenho ruim. +- **Estereotipagem**. Associar um determinado grupo a atributos pré-atribuídos. +- **Denigração**. Criticar injustamente e rotular algo ou alguém. +- **Representação excessiva ou insuficiente**. A ideia é que um determinado grupo não seja visto em uma certa profissão, e qualquer serviço ou função que continue promovendo isso está contribuindo para o problema. + +### Painel Azure RAI + +O [Painel Azure RAI](https://learn.microsoft.com/en-us/azure/machine-learning/concept-responsible-ai-dashboard?WT.mc_id=aiml-90525-ruyakubu) é baseado em ferramentas de código aberto desenvolvidas por instituições acadêmicas e organizações líderes, incluindo a Microsoft. Ele é essencial para cientistas de dados e desenvolvedores de IA entenderem melhor o comportamento dos modelos, identificarem e mitigarem problemas indesejáveis em modelos de IA. + +- Aprenda como usar os diferentes componentes consultando a [documentação do painel RAI.](https://learn.microsoft.com/en-us/azure/machine-learning/how-to-responsible-ai-dashboard?WT.mc_id=aiml-90525-ruyakubu) + +- Confira alguns [notebooks de exemplo do painel RAI](https://github.com/Azure/RAI-vNext-Preview/tree/main/examples/notebooks) para depurar cenários de IA mais responsáveis no Azure Machine Learning. + +--- +## 🚀 Desafio + +Para evitar que vieses estatísticos ou de dados sejam introduzidos desde o início, devemos: + +- ter diversidade de origens e perspectivas entre as pessoas que trabalham nos sistemas +- investir em conjuntos de dados que reflitam a diversidade da nossa sociedade +- desenvolver melhores métodos para detectar e corrigir vieses quando eles ocorrerem + +Pense em cenários da vida real onde a injustiça é evidente na construção e uso de modelos. O que mais devemos considerar? + +## [Quiz pós-aula](https://ff-quizzes.netlify.app/en/ml/) +## Revisão e Autoestudo + +Nesta lição, você aprendeu algumas ferramentas práticas para incorporar IA responsável no aprendizado de máquina. + +Assista a este workshop para se aprofundar nos tópicos: + +- Painel de IA Responsável: Uma solução completa para operacionalizar IA responsável na prática, por Besmira Nushi e Mehrnoosh Sameki + +[![Painel de IA Responsável: Uma solução completa para operacionalizar IA responsável na prática](https://img.youtube.com/vi/f1oaDNl3djg/0.jpg)](https://www.youtube.com/watch?v=f1oaDNl3djg "Painel de IA Responsável: Uma solução completa para operacionalizar IA responsável na prática") + + +> 🎥 Clique na imagem acima para assistir ao vídeo: Painel de IA Responsável: Uma solução completa para operacionalizar IA responsável na prática, por Besmira Nushi e Mehrnoosh Sameki + +Consulte os seguintes materiais para aprender mais sobre IA responsável e como construir modelos mais confiáveis: + +- Ferramentas do painel RAI da Microsoft para depuração de modelos de aprendizado de máquina: [Recursos de ferramentas de IA responsável](https://aka.ms/rai-dashboard) + +- Explore o kit de ferramentas de IA responsável: [Github](https://github.com/microsoft/responsible-ai-toolbox) + +- Centro de recursos de IA responsável da Microsoft: [Recursos de IA Responsável – Microsoft AI](https://www.microsoft.com/ai/responsible-ai-resources?activetab=pivot1%3aprimaryr4) + +- Grupo de pesquisa FATE da Microsoft: [FATE: Justiça, Responsabilidade, Transparência e Ética em IA - Microsoft Research](https://www.microsoft.com/research/theme/fate/) + +## Tarefa + +[Explore o painel RAI](assignment.md) + +--- + +**Aviso Legal**: +Este documento foi traduzido utilizando o serviço de tradução por IA [Co-op Translator](https://github.com/Azure/co-op-translator). Embora nos esforcemos para garantir a precisão, esteja ciente de que traduções automatizadas podem conter erros ou imprecisões. O documento original em seu idioma nativo deve ser considerado a fonte autoritativa. Para informações críticas, recomenda-se a tradução profissional realizada por humanos. Não nos responsabilizamos por quaisquer mal-entendidos ou interpretações equivocadas decorrentes do uso desta tradução. \ No newline at end of file diff --git a/translations/pt-BR/9-Real-World/2-Debugging-ML-Models/assignment.md b/translations/pt-BR/9-Real-World/2-Debugging-ML-Models/assignment.md new file mode 100644 index 000000000..7e5452b43 --- /dev/null +++ b/translations/pt-BR/9-Real-World/2-Debugging-ML-Models/assignment.md @@ -0,0 +1,16 @@ +# Explore o painel Responsible AI (RAI) + +## Instruções + +Nesta lição, você aprendeu sobre o painel RAI, um conjunto de componentes baseados em ferramentas "open-source" para ajudar cientistas de dados a realizar análise de erros, exploração de dados, avaliação de equidade, interpretabilidade de modelos, avaliações contrafactuais/"e se" e análise causal em sistemas de IA. Para esta tarefa, explore alguns dos [notebooks](https://github.com/Azure/RAI-vNext-Preview/tree/main/examples/notebooks) de exemplo do painel RAI e relate suas descobertas em um artigo ou apresentação. + +## Rubrica + +| Critérios | Exemplares | Adequados | Necessita Melhorar | +| --------- | ---------- | --------- | ------------------ | +| | Um artigo ou apresentação em PowerPoint é apresentado discutindo os componentes do painel RAI, o notebook que foi executado e as conclusões tiradas a partir da execução | Um artigo é apresentado sem conclusões | Nenhum artigo é apresentado | + +--- + +**Aviso Legal**: +Este documento foi traduzido utilizando o serviço de tradução por IA [Co-op Translator](https://github.com/Azure/co-op-translator). Embora nos esforcemos para garantir a precisão, esteja ciente de que traduções automatizadas podem conter erros ou imprecisões. O documento original em seu idioma nativo deve ser considerado a fonte autoritativa. Para informações críticas, recomenda-se a tradução profissional realizada por humanos. Não nos responsabilizamos por quaisquer mal-entendidos ou interpretações equivocadas decorrentes do uso desta tradução. \ No newline at end of file diff --git a/translations/pt-BR/9-Real-World/README.md b/translations/pt-BR/9-Real-World/README.md new file mode 100644 index 000000000..8e7cd93ba --- /dev/null +++ b/translations/pt-BR/9-Real-World/README.md @@ -0,0 +1,23 @@ +# Pós-escrito: Aplicações reais de aprendizado de máquina clássico + +Nesta seção do currículo, você será apresentado a algumas aplicações reais do aprendizado de máquina clássico. Pesquisamos na internet para encontrar artigos e publicações sobre aplicações que utilizam essas estratégias, evitando ao máximo redes neurais, aprendizado profundo e IA. Descubra como o aprendizado de máquina é usado em sistemas empresariais, aplicações ecológicas, finanças, artes e cultura, entre outros. + +![chess](../../../translated_images/pt-BR/chess.e704a268781bdad8.webp) + +> Foto por Alexis Fauvet no Unsplash + +## Aula + +1. [Aplicações Reais de Aprendizado de Máquina](1-Applications/README.md) +2. [Depuração de Modelos de Aprendizado de Máquina usando componentes do painel de IA Responsável](2-Debugging-ML-Models/README.md) + +## Créditos + +"Aplicações Reais" foi escrito por uma equipe de pessoas, incluindo [Jen Looper](https://twitter.com/jenlooper) e [Ornella Altunyan](https://twitter.com/ornelladotcom). + +"Depuração de Modelos de Aprendizado de Máquina usando componentes do painel de IA Responsável" foi escrito por [Ruth Yakubu](https://twitter.com/ruthieyakubu) + +--- + +**Aviso Legal**: +Este documento foi traduzido utilizando o serviço de tradução por IA [Co-op Translator](https://github.com/Azure/co-op-translator). Embora nos esforcemos para garantir a precisão, esteja ciente de que traduções automatizadas podem conter erros ou imprecisões. O documento original em seu idioma nativo deve ser considerado a fonte autoritativa. Para informações críticas, recomenda-se a tradução profissional realizada por humanos. Não nos responsabilizamos por quaisquer mal-entendidos ou interpretações equivocadas decorrentes do uso desta tradução. \ No newline at end of file diff --git a/translations/pt-BR/AGENTS.md b/translations/pt-BR/AGENTS.md new file mode 100644 index 000000000..49040a0b1 --- /dev/null +++ b/translations/pt-BR/AGENTS.md @@ -0,0 +1,336 @@ +# AGENTS.md + +## Visão Geral do Projeto + +Este é o **Machine Learning para Iniciantes**, um currículo abrangente de 12 semanas e 26 aulas que cobre conceitos clássicos de aprendizado de máquina usando Python (principalmente com Scikit-learn) e R. O repositório foi projetado como um recurso de aprendizado autônomo com projetos práticos, questionários e tarefas. Cada aula explora conceitos de aprendizado de máquina através de dados reais de diversas culturas e regiões ao redor do mundo. + +Componentes principais: +- **Conteúdo Educacional**: 26 aulas cobrindo introdução ao aprendizado de máquina, regressão, classificação, clustering, NLP, séries temporais e aprendizado por reforço +- **Aplicativo de Questionário**: Aplicativo de questionário baseado em Vue.js com avaliações antes e depois das aulas +- **Suporte Multilíngue**: Traduções automáticas para mais de 40 idiomas via GitHub Actions +- **Suporte a Duas Linguagens**: Aulas disponíveis em Python (notebooks Jupyter) e R (arquivos R Markdown) +- **Aprendizado Baseado em Projetos**: Cada tópico inclui projetos práticos e tarefas + +## Estrutura do Repositório + +``` +ML-For-Beginners/ +├── 1-Introduction/ # ML basics, history, fairness, techniques +├── 2-Regression/ # Regression models with Python/R +├── 3-Web-App/ # Flask web app for ML model deployment +├── 4-Classification/ # Classification algorithms +├── 5-Clustering/ # Clustering techniques +├── 6-NLP/ # Natural Language Processing +├── 7-TimeSeries/ # Time series forecasting +├── 8-Reinforcement/ # Reinforcement learning +├── 9-Real-World/ # Real-world ML applications +├── quiz-app/ # Vue.js quiz application +├── translations/ # Auto-generated translations +└── sketchnotes/ # Visual learning aids +``` + +Cada pasta de aula geralmente contém: +- `README.md` - Conteúdo principal da aula +- `notebook.ipynb` - Notebook Jupyter em Python +- `solution/` - Código de solução (versões em Python e R) +- `assignment.md` - Exercícios práticos +- `images/` - Recursos visuais + +## Comandos de Configuração + +### Para Aulas em Python + +A maioria das aulas utiliza notebooks Jupyter. Instale as dependências necessárias: + +```bash +# Install Python 3.8+ if not already installed +python --version + +# Install Jupyter +pip install jupyter + +# Install common ML libraries +pip install scikit-learn pandas numpy matplotlib seaborn + +# For specific lessons, check lesson-specific requirements +# Example: Web App lesson +pip install flask +``` + +### Para Aulas em R + +As aulas em R estão nas pastas `solution/R/` como arquivos `.rmd` ou `.ipynb`: + +```bash +# Install R and required packages +# In R console: +install.packages(c("tidyverse", "tidymodels", "caret")) +``` + +### Para o Aplicativo de Questionário + +O aplicativo de questionário é uma aplicação Vue.js localizada no diretório `quiz-app/`: + +```bash +cd quiz-app +npm install +``` + +### Para o Site de Documentação + +Para executar a documentação localmente: + +```bash +# Install Docsify +npm install -g docsify-cli + +# Serve from repository root +docsify serve + +# Access at http://localhost:3000 +``` + +## Fluxo de Trabalho de Desenvolvimento + +### Trabalhando com Notebooks de Aula + +1. Navegue até o diretório da aula (ex.: `2-Regression/1-Tools/`) +2. Abra o notebook Jupyter: + ```bash + jupyter notebook notebook.ipynb + ``` +3. Trabalhe no conteúdo e nos exercícios da aula +4. Verifique as soluções na pasta `solution/` se necessário + +### Desenvolvimento em Python + +- As aulas utilizam bibliotecas padrão de ciência de dados em Python +- Notebooks Jupyter para aprendizado interativo +- Código de solução disponível na pasta `solution/` de cada aula + +### Desenvolvimento em R + +- As aulas em R estão no formato `.rmd` (R Markdown) +- Soluções localizadas em subdiretórios `solution/R/` +- Use RStudio ou Jupyter com kernel R para executar os notebooks em R + +### Desenvolvimento do Aplicativo de Questionário + +```bash +cd quiz-app + +# Start development server +npm run serve +# Access at http://localhost:8080 + +# Build for production +npm run build + +# Lint and fix files +npm run lint +``` + +## Instruções de Teste + +### Teste do Aplicativo de Questionário + +```bash +cd quiz-app + +# Lint code +npm run lint + +# Build to verify no errors +npm run build +``` + +**Nota**: Este é principalmente um repositório de currículo educacional. Não há testes automatizados para o conteúdo das aulas. A validação é feita através de: +- Conclusão dos exercícios das aulas +- Execução bem-sucedida das células dos notebooks +- Verificação dos resultados contra as soluções esperadas + +## Diretrizes de Estilo de Código + +### Código em Python +- Siga as diretrizes de estilo PEP 8 +- Use nomes de variáveis claros e descritivos +- Inclua comentários para operações complexas +- Os notebooks Jupyter devem ter células markdown explicando os conceitos + +### JavaScript/Vue.js (Aplicativo de Questionário) +- Segue o guia de estilo do Vue.js +- Configuração do ESLint em `quiz-app/package.json` +- Execute `npm run lint` para verificar e corrigir problemas automaticamente + +### Documentação +- Arquivos markdown devem ser claros e bem estruturados +- Inclua exemplos de código em blocos de código delimitados +- Use links relativos para referências internas +- Siga as convenções de formatação existentes + +## Construção e Implantação + +### Implantação do Aplicativo de Questionário + +O aplicativo de questionário pode ser implantado no Azure Static Web Apps: + +1. **Pré-requisitos**: + - Conta no Azure + - Repositório GitHub (já bifurcado) + +2. **Implantar no Azure**: + - Crie um recurso Azure Static Web App + - Conecte ao repositório GitHub + - Defina a localização do aplicativo: `/quiz-app` + - Defina a localização de saída: `dist` + - O Azure cria automaticamente o workflow do GitHub Actions + +3. **Workflow do GitHub Actions**: + - Arquivo de workflow criado em `.github/workflows/azure-static-web-apps-*.yml` + - Constrói e implanta automaticamente ao fazer push na branch principal + +### PDF da Documentação + +Gerar PDF a partir da documentação: + +```bash +npm install +npm run convert +``` + +## Fluxo de Trabalho de Tradução + +**Importante**: As traduções são automatizadas via GitHub Actions usando o Co-op Translator. + +- As traduções são geradas automaticamente quando alterações são feitas na branch `main` +- **NÃO traduza o conteúdo manualmente** - o sistema cuida disso +- Workflow definido em `.github/workflows/co-op-translator.yml` +- Utiliza serviços Azure AI/OpenAI para tradução +- Suporta mais de 40 idiomas + +## Diretrizes de Contribuição + +### Para Contribuidores de Conteúdo + +1. **Bifurque o repositório** e crie uma branch de recurso +2. **Faça alterações no conteúdo das aulas** se estiver adicionando/atualizando aulas +3. **Não modifique arquivos traduzidos** - eles são gerados automaticamente +4. **Teste seu código** - certifique-se de que todas as células dos notebooks sejam executadas com sucesso +5. **Verifique se os links e imagens** funcionam corretamente +6. **Envie um pull request** com uma descrição clara + +### Diretrizes para Pull Request + +- **Formato do título**: `[Seção] Breve descrição das alterações` + - Exemplo: `[Regression] Corrigir erro de digitação na aula 5` + - Exemplo: `[Quiz-App] Atualizar dependências` +- **Antes de enviar**: + - Certifique-se de que todas as células dos notebooks sejam executadas sem erros + - Execute `npm run lint` se estiver modificando o quiz-app + - Verifique a formatação do markdown + - Teste quaisquer novos exemplos de código +- **O PR deve incluir**: + - Descrição das alterações + - Motivo das alterações + - Capturas de tela se houver alterações na interface +- **Código de Conduta**: Siga o [Código de Conduta de Código Aberto da Microsoft](CODE_OF_CONDUCT.md) +- **CLA**: Você precisará assinar o Acordo de Licença de Contribuidor + +## Estrutura das Aulas + +Cada aula segue um padrão consistente: + +1. **Questionário pré-aula** - Teste de conhecimento inicial +2. **Conteúdo da aula** - Instruções e explicações escritas +3. **Demonstrações de código** - Exemplos práticos em notebooks +4. **Verificações de conhecimento** - Confirme a compreensão ao longo da aula +5. **Desafio** - Aplique os conceitos de forma independente +6. **Tarefa** - Prática estendida +7. **Questionário pós-aula** - Avalie os resultados do aprendizado + +## Referência de Comandos Comuns + +```bash +# Python/Jupyter +jupyter notebook # Start Jupyter server +jupyter notebook notebook.ipynb # Open specific notebook +pip install -r requirements.txt # Install dependencies (where available) + +# Quiz App +cd quiz-app +npm install # Install dependencies +npm run serve # Development server +npm run build # Production build +npm run lint # Lint and fix + +# Documentation +docsify serve # Serve documentation locally +npm run convert # Generate PDF + +# Git workflow +git checkout -b feature/my-change # Create feature branch +git add . # Stage changes +git commit -m "Description" # Commit changes +git push origin feature/my-change # Push to remote +``` + +## Recursos Adicionais + +- **Coleção Microsoft Learn**: [Módulos de ML para Iniciantes](https://learn.microsoft.com/en-us/collections/qrqzamz1nn2wx3?WT.mc_id=academic-77952-bethanycheum) +- **Aplicativo de Questionário**: [Questionários online](https://ff-quizzes.netlify.app/en/ml/) +- **Fórum de Discussão**: [Discussões no GitHub](https://github.com/microsoft/ML-For-Beginners/discussions) +- **Tutoriais em Vídeo**: [Playlist no YouTube](https://aka.ms/ml-beginners-videos) + +## Tecnologias Principais + +- **Python**: Linguagem principal para aulas de aprendizado de máquina (Scikit-learn, Pandas, NumPy, Matplotlib) +- **R**: Implementação alternativa usando tidyverse, tidymodels, caret +- **Jupyter**: Notebooks interativos para aulas em Python +- **R Markdown**: Documentos para aulas em R +- **Vue.js 3**: Framework do aplicativo de questionário +- **Flask**: Framework de aplicação web para implantação de modelos de aprendizado de máquina +- **Docsify**: Gerador de site de documentação +- **GitHub Actions**: CI/CD e traduções automatizadas + +## Considerações de Segurança + +- **Sem segredos no código**: Nunca comprometa chaves de API ou credenciais +- **Dependências**: Mantenha os pacotes npm e pip atualizados +- **Entrada do usuário**: Exemplos de aplicativos web Flask incluem validação básica de entrada +- **Dados sensíveis**: Os conjuntos de dados de exemplo são públicos e não sensíveis + +## Solução de Problemas + +### Notebooks Jupyter + +- **Problemas no kernel**: Reinicie o kernel se as células travarem: Kernel → Restart +- **Erros de importação**: Certifique-se de que todos os pacotes necessários estão instalados com pip +- **Problemas de caminho**: Execute os notebooks a partir do diretório onde estão localizados + +### Aplicativo de Questionário + +- **npm install falha**: Limpe o cache do npm: `npm cache clean --force` +- **Conflitos de porta**: Altere a porta com: `npm run serve -- --port 8081` +- **Erros de build**: Exclua `node_modules` e reinstale: `rm -rf node_modules && npm install` + +### Aulas em R + +- **Pacote não encontrado**: Instale com: `install.packages("nome-do-pacote")` +- **Renderização de RMarkdown**: Certifique-se de que o pacote rmarkdown está instalado +- **Problemas no kernel**: Pode ser necessário instalar IRkernel para Jupyter + +## Notas Específicas do Projeto + +- Este é principalmente um **currículo de aprendizado**, não código de produção +- O foco está em **compreender conceitos de aprendizado de máquina** através de prática prática +- Exemplos de código priorizam **clareza em vez de otimização** +- A maioria das aulas é **autossuficiente** e pode ser concluída de forma independente +- **Soluções fornecidas**, mas os alunos devem tentar os exercícios primeiro +- O repositório utiliza **Docsify** para documentação web sem etapa de construção +- **Sketchnotes** fornecem resumos visuais dos conceitos +- **Suporte multilíngue** torna o conteúdo acessível globalmente + +--- + +**Aviso Legal**: +Este documento foi traduzido utilizando o serviço de tradução por IA [Co-op Translator](https://github.com/Azure/co-op-translator). Embora nos esforcemos para garantir a precisão, esteja ciente de que traduções automatizadas podem conter erros ou imprecisões. O documento original em seu idioma nativo deve ser considerado a fonte oficial. Para informações críticas, recomenda-se a tradução profissional realizada por humanos. Não nos responsabilizamos por quaisquer mal-entendidos ou interpretações equivocadas decorrentes do uso desta tradução. \ No newline at end of file diff --git a/translations/pt-BR/CODE_OF_CONDUCT.md b/translations/pt-BR/CODE_OF_CONDUCT.md new file mode 100644 index 000000000..e0734dee6 --- /dev/null +++ b/translations/pt-BR/CODE_OF_CONDUCT.md @@ -0,0 +1,14 @@ +# Código de Conduta de Código Aberto da Microsoft + +Este projeto adotou o [Código de Conduta de Código Aberto da Microsoft](https://opensource.microsoft.com/codeofconduct/). + +Recursos: + +- [Código de Conduta de Código Aberto da Microsoft](https://opensource.microsoft.com/codeofconduct/) +- [FAQ do Código de Conduta da Microsoft](https://opensource.microsoft.com/codeofconduct/faq/) +- Entre em contato com [opencode@microsoft.com](mailto:opencode@microsoft.com) para dúvidas ou preocupações + +--- + +**Aviso Legal**: +Este documento foi traduzido utilizando o serviço de tradução por IA [Co-op Translator](https://github.com/Azure/co-op-translator). Embora nos esforcemos para garantir a precisão, esteja ciente de que traduções automatizadas podem conter erros ou imprecisões. O documento original em seu idioma nativo deve ser considerado a fonte autoritativa. Para informações críticas, recomenda-se a tradução profissional realizada por humanos. Não nos responsabilizamos por quaisquer mal-entendidos ou interpretações equivocadas decorrentes do uso desta tradução. \ No newline at end of file diff --git a/translations/pt-BR/CONTRIBUTING.md b/translations/pt-BR/CONTRIBUTING.md new file mode 100644 index 000000000..ce8bf4afb --- /dev/null +++ b/translations/pt-BR/CONTRIBUTING.md @@ -0,0 +1,16 @@ +# Contribuindo + +Este projeto aceita contribuições e sugestões. A maioria das contribuições exige que você concorde com um Acordo de Licença de Contribuidor (CLA), declarando que você tem o direito de, e realmente concede a nós, os direitos de usar sua contribuição. Para mais detalhes, visite https://cla.microsoft.com. + +> Importante: ao traduzir textos neste repositório, certifique-se de não usar tradução automática. Verificaremos as traduções por meio da comunidade, então, por favor, só se ofereça para traduzir em idiomas nos quais você seja proficiente. + +Quando você enviar um pull request, um CLA-bot determinará automaticamente se você precisa fornecer um CLA e decorará o PR de forma apropriada (por exemplo, com rótulos ou comentários). Basta seguir as instruções fornecidas pelo bot. Você só precisará fazer isso uma vez em todos os repositórios que utilizam nosso CLA. + +Este projeto adotou o [Código de Conduta de Código Aberto da Microsoft](https://opensource.microsoft.com/codeofconduct/). +Para mais informações, veja as [Perguntas Frequentes sobre o Código de Conduta](https://opensource.microsoft.com/codeofconduct/faq/) +ou entre em contato com [opencode@microsoft.com](mailto:opencode@microsoft.com) para quaisquer dúvidas ou comentários adicionais. + +--- + +**Aviso Legal**: +Este documento foi traduzido utilizando o serviço de tradução por IA [Co-op Translator](https://github.com/Azure/co-op-translator). Embora nos esforcemos para garantir a precisão, esteja ciente de que traduções automatizadas podem conter erros ou imprecisões. O documento original em seu idioma nativo deve ser considerado a fonte autoritativa. Para informações críticas, recomenda-se a tradução profissional realizada por humanos. Não nos responsabilizamos por quaisquer mal-entendidos ou interpretações equivocadas decorrentes do uso desta tradução. \ No newline at end of file diff --git a/translations/pt-BR/PyTorch_Fundamentals.ipynb b/translations/pt-BR/PyTorch_Fundamentals.ipynb new file mode 100644 index 000000000..0ed1a09ef --- /dev/null +++ b/translations/pt-BR/PyTorch_Fundamentals.ipynb @@ -0,0 +1,2828 @@ +{ + "nbformat": 4, + "nbformat_minor": 0, + "metadata": { + "colab": { + "provenance": [], + "gpuType": "T4", + "authorship_tag": "ABX9TyOgv0AozH1FKQBD+RkgT2bV", + "include_colab_link": true + }, + "kernelspec": { + "name": "python3", + "display_name": "Python 3" + }, + "language_info": { + "name": "python" + }, + "accelerator": "GPU", + "coopTranslator": { + "original_hash": "0ca21b6ee62904d616f2e36dc1cf0da7", + "translation_date": "2025-08-29T22:44:51+00:00", + "source_file": "PyTorch_Fundamentals.ipynb", + "language_code": "br" + } + }, + "cells": [ + { + "cell_type": "markdown", + "metadata": { + "id": "view-in-github", + "colab_type": "text" + }, + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "EHh5JllMh1rG", + "outputId": "f55755ad-c369-414c-85ec-6e9d4f061a02", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 35 + } + }, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "'2.2.1+cu121'" + ], + "application/vnd.google.colaboratory.intrinsic+json": { + "type": "string" + } + }, + "metadata": {}, + "execution_count": 1 + } + ], + "source": [ + "import torch\n", + "torch.__version__" + ] + }, + { + "cell_type": "code", + "source": [ + "print(\"I am excited to run this\")" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "UPlb-duwXAfz", + "outputId": "cfd687e4-1238-49f4-ab6b-ee1305b740d2" + }, + "execution_count": null, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "I am excited to run this\n" + ] + } + ] + }, + { + "cell_type": "code", + "source": [ + "import torch\n", + "import pandas as pd\n", + "import numpy as np\n", + "import matplotlib.pyplot as plt\n", + "print(torch.__version__)" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "byWVlJ9wXDSk", + "outputId": "fd74a5c4-4d4a-41b2-ef3c-562ea3e4811f" + }, + "execution_count": null, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "2.2.1+cu121\n" + ] + } + ] + }, + { + "cell_type": "markdown", + "source": [], + "metadata": { + "id": "Osm80zoEYklS" + } + }, + { + "cell_type": "code", + "source": [ + "# scalar\n", + "scalar = torch.tensor(7)\n", + "scalar" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "-o8wvJ-VXZmI", + "outputId": "558816f5-1205-4de1-fe1f-2f96e9bd79e6" + }, + "execution_count": null, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "tensor(7)" + ] + }, + "metadata": {}, + "execution_count": 4 + } + ] + }, + { + "cell_type": "code", + "source": [ + "scalar.ndim" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "mCZ2tXC4Y_Sg", + "outputId": "2d86dbdc-56e1-45c6-d3dd-14515f2a457a" + }, + "execution_count": null, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "0" + ] + }, + "metadata": {}, + "execution_count": 5 + } + ] + }, + { + "cell_type": "code", + "source": [ + "scalar.item()" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "ssN00By0ZQgS", + "outputId": "490f40d1-5135-4969-a6d3-c8c902cdc473" + }, + "execution_count": null, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "7" + ] + }, + "metadata": {}, + "execution_count": 6 + } + ] + }, + { + "cell_type": "code", + "source": [ + "# vector\n", + "vector = torch.tensor([7, 7])\n", + "vector\n", + "#vector.ndim\n", + "#vector.item()" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "Bws__5wlZnmF", + "outputId": "944e38f9-5ba1-4ddc-a9c6-cfb6a19bb488" + }, + "execution_count": null, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "tensor([7, 7])" + ] + }, + "metadata": {}, + "execution_count": 7 + } + ] + }, + { + "cell_type": "code", + "source": [ + "vector.shape" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "9pjCvnsZZzNG", + "outputId": "e030a4da-8f81-4858-fbce-86da2aaafe52" + }, + "execution_count": null, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "torch.Size([2])" + ] + }, + "metadata": {}, + "execution_count": 8 + } + ] + }, + { + "cell_type": "code", + "source": [ + "# Matrix\n", + "MATRIX = torch.tensor([[7, 8],[9, 10]])\n", + "MATRIX" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "a747hI9SaBGW", + "outputId": "af835ddb-81ff-4981-badb-441567194d15" + }, + "execution_count": null, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "tensor([[ 7, 8],\n", + " [ 9, 10]])" + ] + }, + "metadata": {}, + "execution_count": 9 + } + ] + }, + { + "cell_type": "code", + "source": [ + "MATRIX.ndim" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "XdTfFa7vaRUj", + "outputId": "0fbbab9c-8263-4cad-a380-0d2a16ca499e" + }, + "execution_count": null, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "2" + ] + }, + "metadata": {}, + "execution_count": 10 + } + ] + }, + { + "cell_type": "code", + "source": [ + "MATRIX[0]\n", + "MATRIX[1]" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "TFeD3jSDafm7", + "outputId": "69b44ab3-5ba7-451a-c6b2-f019a03d0c96" + }, + "execution_count": null, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "tensor([ 9, 10])" + ] + }, + "metadata": {}, + "execution_count": 11 + } + ] + }, + { + "cell_type": "code", + "source": [ + "# Tensor\n", + "TENSOR = torch.tensor([[[1, 2, 3],[3,6,9], [2,4,5]]])\n", + "TENSOR" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "ic3cE47tah42", + "outputId": "f250e295-91de-43ec-9d80-588a6fe0abde" + }, + "execution_count": null, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "tensor([[[1, 2, 3],\n", + " [3, 6, 9],\n", + " [2, 4, 5]]])" + ] + }, + "metadata": {}, + "execution_count": 12 + } + ] + }, + { + "cell_type": "code", + "source": [ + "TENSOR.shape" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "Wvjf5fczbAM1", + "outputId": "9c72b5b8-bafe-4ae7-9883-b051e209eada" + }, + "execution_count": null, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "torch.Size([1, 3, 3])" + ] + }, + "metadata": {}, + "execution_count": 13 + } + ] + }, + { + "cell_type": "code", + "source": [ + "TENSOR.ndim" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "mwtXZwiMbN3m", + "outputId": "331a5e36-b1b0-4a5f-a9b8-e7049cbaa8f9" + }, + "execution_count": null, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "3" + ] + }, + "metadata": {}, + "execution_count": 14 + } + ] + }, + { + "cell_type": "code", + "source": [ + "TENSOR[0]" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "vzdZu_IfbP3J", + "outputId": "e24e7e71-e365-412d-ff50-fc094b56d2f3" + }, + "execution_count": null, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "tensor([[1, 2, 3],\n", + " [3, 6, 9],\n", + " [2, 4, 5]])" + ] + }, + "metadata": {}, + "execution_count": 15 + } + ] + }, + { + "cell_type": "markdown", + "source": [], + "metadata": { + "id": "A8OL9eWfcRrJ" + } + }, + { + "cell_type": "code", + "source": [ + "random_tensor = torch.rand(3,4)\n", + "random_tensor" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "hAqSDE1EcVS_", + "outputId": "946171c3-d054-400c-f893-79110356888c" + }, + "execution_count": null, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "tensor([[0.4414, 0.7681, 0.8385, 0.3166],\n", + " [0.0468, 0.5812, 0.0670, 0.9173],\n", + " [0.2959, 0.3276, 0.7411, 0.4643]])" + ] + }, + "metadata": {}, + "execution_count": 16 + } + ] + }, + { + "cell_type": "code", + "source": [ + "random_tensor.ndim" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "g4fvPE5GcwzP", + "outputId": "8737f36b-6864-4059-eaed-6f9156c22306" + }, + "execution_count": null, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "2" + ] + }, + "metadata": {}, + "execution_count": 17 + } + ] + }, + { + "cell_type": "code", + "source": [ + "random_tensor.shape" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "XsAg99QmdAU6", + "outputId": "35467c11-257c-4f16-99aa-eca930bcbc36" + }, + "execution_count": null, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "torch.Size([3, 4])" + ] + }, + "metadata": {}, + "execution_count": 18 + } + ] + }, + { + "cell_type": "code", + "source": [ + "random_tensor.size()" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "cii1pNdVdB68", + "outputId": "fc8d2de6-9215-43de-99f7-7b0d7f7d20fa" + }, + "execution_count": null, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "torch.Size([3, 4])" + ] + }, + "metadata": {}, + "execution_count": 19 + } + ] + }, + { + "cell_type": "code", + "source": [ + "random_image_tensor = torch.rand(size=(3, 224, 224)) #color channels, height, width\n", + "random_image_tensor.ndim, random_image_tensor.shape" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "aTKq2j0cdDjb", + "outputId": "6be42057-20b9-4faf-d79d-8b65c42cc27e" + }, + "execution_count": null, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "(3, torch.Size([3, 224, 224]))" + ] + }, + "metadata": {}, + "execution_count": 20 + } + ] + }, + { + "cell_type": "code", + "source": [ + "random_tensor_ofownsize = torch.rand(size=(5,10,10))\n", + "random_tensor_ofownsize.ndim, random_tensor_ofownsize.shape\n" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "IyhDdj-Pd6nC", + "outputId": "43e5e334-6d4d-4b67-f87d-7d364c6d8c67" + }, + "execution_count": null, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "(3, torch.Size([5, 10, 10]))" + ] + }, + "metadata": {}, + "execution_count": 21 + } + ] + }, + { + "cell_type": "markdown", + "source": [], + "metadata": { + "id": "UOJW08uOert_" + } + }, + { + "cell_type": "code", + "source": [ + "zero = torch.zeros(size=(3, 4))\n", + "zero" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "uGvXtaXyefie", + "outputId": "d40d3e28-8667-4d2f-8b62-f0829c6162ad" + }, + "execution_count": null, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "tensor([[0., 0., 0., 0.],\n", + " [0., 0., 0., 0.],\n", + " [0., 0., 0., 0.]])" + ] + }, + "metadata": {}, + "execution_count": 22 + } + ] + }, + { + "cell_type": "code", + "source": [ + "zero*random_tensor" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "OyUkUPkDe0uH", + "outputId": "26c2e4be-36ba-4c6c-9a90-2704ec135828" + }, + "execution_count": null, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "tensor([[0., 0., 0., 0.],\n", + " [0., 0., 0., 0.],\n", + " [0., 0., 0., 0.]])" + ] + }, + "metadata": {}, + "execution_count": 23 + } + ] + }, + { + "cell_type": "code", + "source": [ + "ones = torch.ones(size=(3, 4))\n", + "ones\n" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "y_Ac62Aqe82G", + "outputId": "291de5d9-b9df-49de-c9d1-d098e3e9f4d8" + }, + "execution_count": null, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "tensor([[1., 1., 1., 1.],\n", + " [1., 1., 1., 1.],\n", + " [1., 1., 1., 1.]])" + ] + }, + "metadata": {}, + "execution_count": 24 + } + ] + }, + { + "cell_type": "code", + "source": [ + "ones.dtype" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "TvGOA9odfIEO", + "outputId": "45949ef4-6649-4b6c-d6af-2d4bfb8de832" + }, + "execution_count": null, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "torch.float32" + ] + }, + "metadata": {}, + "execution_count": 25 + } + ] + }, + { + "cell_type": "code", + "source": [ + "ones*zero" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "--pTyge-fI-8", + "outputId": "c4d9bb7e-829b-43db-e2db-b1a2d64e61f0" + }, + "execution_count": null, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "tensor([[0., 0., 0., 0.],\n", + " [0., 0., 0., 0.],\n", + " [0., 0., 0., 0.]])" + ] + }, + "metadata": {}, + "execution_count": 26 + } + ] + }, + { + "cell_type": "markdown", + "source": [], + "metadata": { + "id": "qDcc7Z36fSJF" + } + }, + { + "cell_type": "code", + "source": [ + "one_to_ten = torch.arange(start = 1, end = 11, step = 1)\n", + "one_to_ten" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "w3CZB4zUfR1s", + "outputId": "197fcba1-da0a-4b4a-ed11-3974bd6c01aa" + }, + "execution_count": null, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "tensor([ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10])" + ] + }, + "metadata": {}, + "execution_count": 27 + } + ] + }, + { + "cell_type": "code", + "source": [ + "ten_zeros = torch.zeros_like(one_to_ten)\n", + "ten_zeros" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "WZh99BwVfRy8", + "outputId": "51ef8bfb-6fa0-4099-ff66-b97d65b2ddea" + }, + "execution_count": null, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "tensor([0, 0, 0, 0, 0, 0, 0, 0, 0, 0])" + ] + }, + "metadata": {}, + "execution_count": 28 + } + ] + }, + { + "cell_type": "markdown", + "source": [], + "metadata": { + "id": "pGGhgsbUgqbW" + } + }, + { + "cell_type": "code", + "source": [ + "float_32_tensor = torch.tensor([3.0, 6.0,9.0], dtype = None, device = None, requires_grad = False)\n", + "float_32_tensor" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "JORJl4XkfRsx", + "outputId": "71114171-0f49-481f-b6fc-6cb48e2fb895" + }, + "execution_count": null, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "tensor([3., 6., 9.])" + ] + }, + "metadata": {}, + "execution_count": 29 + } + ] + }, + { + "cell_type": "code", + "source": [ + "float_32_tensor.dtype" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "6wOPPwGyfRLn", + "outputId": "f23776a1-b682-404a-9f67-d5bcb0402666" + }, + "execution_count": null, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "torch.float32" + ] + }, + "metadata": {}, + "execution_count": 30 + } + ] + }, + { + "cell_type": "code", + "source": [ + "float_16_tensor = float_32_tensor.type(torch.float16)\n", + "float_16_tensor.dtype" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "tFsHCvmZfOYe", + "outputId": "d3aa305a-7591-47f5-97fd-61bff60b44bd" + }, + "execution_count": null, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "torch.float16" + ] + }, + "metadata": {}, + "execution_count": 31 + } + ] + }, + { + "cell_type": "code", + "source": [ + "float_16_tensor*float_32_tensor" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "TQiCGTPuwq0q", + "outputId": "98750fce-1ca3-4889-e269-8b753efdea96" + }, + "execution_count": null, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "tensor([ 9., 36., 81.])" + ] + }, + "metadata": {}, + "execution_count": 32 + } + ] + }, + { + "cell_type": "code", + "source": [ + "int_32_tensor = torch.tensor([3, 6, 9], dtype = torch.int32)\n", + "int_32_tensor" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "5hlrLvGUw5D_", + "outputId": "41d890a0-9aee-446c-d906-631ce2ab0995" + }, + "execution_count": null, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "tensor([3, 6, 9], dtype=torch.int32)" + ] + }, + "metadata": {}, + "execution_count": 33 + } + ] + }, + { + "cell_type": "code", + "source": [ + "int_32_tensor*float_32_tensor" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "ihApD9u3xTNW", + "outputId": "d295eed0-6996-4e0f-8502-ff4b55cd1373" + }, + "execution_count": null, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "tensor([ 9., 36., 81.])" + ] + }, + "metadata": {}, + "execution_count": 34 + } + ] + }, + { + "cell_type": "code", + "source": [ + "x = torch.arange(0,100,10)" + ], + "metadata": { + "id": "utKhlb_KxWDQ" + }, + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "x" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "p78D74E9Rj7Y", + "outputId": "781a1614-a900-41f5-9e5d-358f0b2390aa" + }, + "execution_count": null, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "tensor([ 0, 10, 20, 30, 40, 50, 60, 70, 80, 90])" + ] + }, + "metadata": {}, + "execution_count": 36 + } + ] + }, + { + "cell_type": "code", + "source": [ + "x.min()" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "4BcSs5NeRkcj", + "outputId": "3f24a8dc-58e9-4a5f-9834-e85856a34f9d" + }, + "execution_count": null, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "tensor(0)" + ] + }, + "metadata": {}, + "execution_count": 37 + } + ] + }, + { + "cell_type": "code", + "source": [ + "x.max()" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "hinqvXVLRm4q", + "outputId": "5c7d8a53-3913-4ac1-bba3-5ba8ff68250a" + }, + "execution_count": null, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "tensor(90)" + ] + }, + "metadata": {}, + "execution_count": 38 + } + ] + }, + { + "cell_type": "code", + "source": [ + "torch.mean(x.type(torch.float32))" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "k7okc0_vRpnB", + "outputId": "91e5494f-dc57-417c-ea4d-25dbc547c893" + }, + "execution_count": null, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "tensor(45.)" + ] + }, + "metadata": {}, + "execution_count": 39 + } + ] + }, + { + "cell_type": "code", + "source": [ + "x.type(torch.float32).mean()" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "29QcDTjHRq10", + "outputId": "62937c6c-78e0-49f2-dde3-1543ee8f7907" + }, + "execution_count": null, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "tensor(45.)" + ] + }, + "metadata": {}, + "execution_count": 40 + } + ] + }, + { + "cell_type": "code", + "source": [ + "x.sum()" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "wlpY_G_sbdKF", + "outputId": "475d8258-af65-4011-a258-b93d4d8142d4" + }, + "execution_count": null, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "tensor(450)" + ] + }, + "metadata": {}, + "execution_count": 41 + } + ] + }, + { + "cell_type": "code", + "source": [ + "x.argmax()" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "GT6HJzwhbk4n", + "outputId": "2e455c20-c322-4bcf-d07c-1259d3ccefc6" + }, + "execution_count": null, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "tensor(9)" + ] + }, + "metadata": {}, + "execution_count": 42 + } + ] + }, + { + "cell_type": "code", + "source": [ + "x.argmin()" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "egL3oi2Mb19P", + "outputId": "f71fb32f-6338-44a3-b377-75bea0a3ab54" + }, + "execution_count": null, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "tensor(0)" + ] + }, + "metadata": {}, + "execution_count": 43 + } + ] + }, + { + "cell_type": "code", + "source": [ + "x[0]" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "p2U8DZKib3DP", + "outputId": "b9f613b9-74e9-45f4-ed01-05babb6a6793" + }, + "execution_count": null, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "tensor(0)" + ] + }, + "metadata": {}, + "execution_count": 44 + } + ] + }, + { + "cell_type": "code", + "source": [ + "x[9]" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "24qBFlGYcABe", + "outputId": "5813cfcb-7f63-4bd7-ee46-f95ccbfda939" + }, + "execution_count": null, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "tensor(90)" + ] + }, + "metadata": {}, + "execution_count": 45 + } + ] + }, + { + "cell_type": "code", + "source": [ + "x = torch.arange(1, 10)\n", + "x.shape" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "0GPOxEzkcBHO", + "outputId": "aefbd903-4f4c-4d2c-c90f-eccd682fe018" + }, + "execution_count": null, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "torch.Size([9])" + ] + }, + "metadata": {}, + "execution_count": 46 + } + ] + }, + { + "cell_type": "code", + "source": [ + "x_reshaped = x.reshape(1,9)\n", + "x_reshaped, x_reshaped.shape" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "spmRgQjwddgp", + "outputId": "85a7c55c-2909-4ea2-fc68-386dddc65742" + }, + "execution_count": null, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "(tensor([[1, 2, 3, 4, 5, 6, 7, 8, 9]]), torch.Size([1, 9]))" + ] + }, + "metadata": {}, + "execution_count": 47 + } + ] + }, + { + "cell_type": "code", + "source": [ + "x_reshaped.view(1,9)" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "tH2ahWGydqqP", + "outputId": "65d92263-4fc4-434a-c06d-c5e08436f7fe" + }, + "execution_count": null, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "tensor([[1, 2, 3, 4, 5, 6, 7, 8, 9]])" + ] + }, + "metadata": {}, + "execution_count": 48 + } + ] + }, + { + "cell_type": "code", + "source": [ + "x_stacked = torch.stack([x, x, x, x], dim = 1)\n", + "x_stacked" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "jgCeJcaud_-1", + "outputId": "7f293a37-6ef1-43b6-aee5-9d6d91c94f9e" + }, + "execution_count": null, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "tensor([[1, 1, 1, 1],\n", + " [2, 2, 2, 2],\n", + " [3, 3, 3, 3],\n", + " [4, 4, 4, 4],\n", + " [5, 5, 5, 5],\n", + " [6, 6, 6, 6],\n", + " [7, 7, 7, 7],\n", + " [8, 8, 8, 8],\n", + " [9, 9, 9, 9]])" + ] + }, + "metadata": {}, + "execution_count": 49 + } + ] + }, + { + "cell_type": "code", + "source": [ + "x_stacked.squeeze()" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "XhJHIK6cfPse", + "outputId": "06c47b89-3a9e-453e-bcc3-00cbcb0b8b49" + }, + "execution_count": null, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "tensor([[1, 1, 1, 1],\n", + " [2, 2, 2, 2],\n", + " [3, 3, 3, 3],\n", + " [4, 4, 4, 4],\n", + " [5, 5, 5, 5],\n", + " [6, 6, 6, 6],\n", + " [7, 7, 7, 7],\n", + " [8, 8, 8, 8],\n", + " [9, 9, 9, 9]])" + ] + }, + "metadata": {}, + "execution_count": 50 + } + ] + }, + { + "cell_type": "code", + "source": [ + "x_stacked.unsqueeze(dim=1)" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "ej2c3Xxzf0tq", + "outputId": "94024061-eb37-446d-c4a8-e4d16cb6de81" + }, + "execution_count": null, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "tensor([[[1, 1, 1, 1]],\n", + "\n", + " [[2, 2, 2, 2]],\n", + "\n", + " [[3, 3, 3, 3]],\n", + "\n", + " [[4, 4, 4, 4]],\n", + "\n", + " [[5, 5, 5, 5]],\n", + "\n", + " [[6, 6, 6, 6]],\n", + "\n", + " [[7, 7, 7, 7]],\n", + "\n", + " [[8, 8, 8, 8]],\n", + "\n", + " [[9, 9, 9, 9]]])" + ] + }, + "metadata": {}, + "execution_count": 52 + } + ] + }, + { + "cell_type": "code", + "source": [ + "x_stacked.squeeze()" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "4DJYo1a0f5M0", + "outputId": "efca2b47-1b14-44de-9a9a-2c83629d153f" + }, + "execution_count": null, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "tensor([[1, 1, 1, 1],\n", + " [2, 2, 2, 2],\n", + " [3, 3, 3, 3],\n", + " [4, 4, 4, 4],\n", + " [5, 5, 5, 5],\n", + " [6, 6, 6, 6],\n", + " [7, 7, 7, 7],\n", + " [8, 8, 8, 8],\n", + " [9, 9, 9, 9]])" + ] + }, + "metadata": {}, + "execution_count": 53 + } + ] + }, + { + "cell_type": "code", + "source": [ + "x_stacked.unsqueeze(dim=-2)" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "J4iEjn2ah2HL", + "outputId": "22395593-7c16-4162-beae-dd2bbe7bda35" + }, + "execution_count": null, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "tensor([[[1, 1, 1, 1]],\n", + "\n", + " [[2, 2, 2, 2]],\n", + "\n", + " [[3, 3, 3, 3]],\n", + "\n", + " [[4, 4, 4, 4]],\n", + "\n", + " [[5, 5, 5, 5]],\n", + "\n", + " [[6, 6, 6, 6]],\n", + "\n", + " [[7, 7, 7, 7]],\n", + "\n", + " [[8, 8, 8, 8]],\n", + "\n", + " [[9, 9, 9, 9]]])" + ] + }, + "metadata": {}, + "execution_count": 55 + } + ] + }, + { + "cell_type": "code", + "source": [ + "import torch\n", + "tensor = torch.tensor([1, 2, 3])\n", + "tensor = tensor - 10\n", + "tensor" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "cFfiD7Nth7Z_", + "outputId": "1139e1f8-fc1a-46ca-d636-f2bc4fd2eef6" + }, + "execution_count": null, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "tensor([-9, -8, -7])" + ] + }, + "metadata": {}, + "execution_count": 7 + } + ] + }, + { + "cell_type": "code", + "source": [ + "torch.mul(tensor, 10)" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "dyA7BM_GHhqE", + "outputId": "0e3b9671-d9e8-4a32-87bb-59bc05986142" + }, + "execution_count": null, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "tensor([-90, -80, -70])" + ] + }, + "metadata": {}, + "execution_count": 9 + } + ] + }, + { + "cell_type": "code", + "source": [ + "torch.sub(tensor, 100)" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "owtUsZ1KNegI", + "outputId": "189b7b23-0041-4e09-b991-cd209a48506a" + }, + "execution_count": null, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "tensor([-109, -108, -107])" + ] + }, + "metadata": {}, + "execution_count": 10 + } + ] + }, + { + "cell_type": "code", + "source": [ + "torch.add(tensor, 100)" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "K5STXlQONsyc", + "outputId": "00cbb79a-0a1d-4e21-86ec-5c91c37a2d01" + }, + "execution_count": null, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "tensor([91, 92, 93])" + ] + }, + "metadata": {}, + "execution_count": 11 + } + ] + }, + { + "cell_type": "code", + "source": [ + "torch.divide(tensor, 2)" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "xqMGnzIUNvp0", + "outputId": "c894cf3e-f148-45f8-cfc8-d78740735306" + }, + "execution_count": null, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "tensor([-4.5000, -4.0000, -3.5000])" + ] + }, + "metadata": {}, + "execution_count": 13 + } + ] + }, + { + "cell_type": "code", + "source": [ + "torch.matmul(tensor, tensor)" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "ruGzKpV8NyBc", + "outputId": "fddb63bf-006f-48b6-ae28-287fbcda8bc5" + }, + "execution_count": null, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "tensor(194)" + ] + }, + "metadata": {}, + "execution_count": 15 + } + ] + }, + { + "cell_type": "code", + "source": [ + "tensor@tensor" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "8GS3r9yTeGfD", + "outputId": "c80b12ac-30b5-4f3d-c38c-9e41ba511b0e" + }, + "execution_count": null, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "tensor(194)" + ] + }, + "metadata": {}, + "execution_count": 16 + } + ] + }, + { + "cell_type": "code", + "source": [ + "%%time\n", + "tensor@tensor" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "QmuYHqXTemC0", + "outputId": "402fe3ba-70b5-4bb2-c83b-254db84ff810" + }, + "execution_count": null, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "CPU times: user 622 µs, sys: 0 ns, total: 622 µs\n", + "Wall time: 516 µs\n" + ] + }, + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "tensor(194)" + ] + }, + "metadata": {}, + "execution_count": 17 + } + ] + }, + { + "cell_type": "code", + "source": [ + "%%time\n", + "torch.matmul(tensor,tensor)" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "dGr1fzdNepd8", + "outputId": "97bd6c91-bc25-4b38-cdf5-f22dcdef243e" + }, + "execution_count": null, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "CPU times: user 424 µs, sys: 998 µs, total: 1.42 ms\n", + "Wall time: 1.43 ms\n" + ] + }, + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "tensor(194)" + ] + }, + "metadata": {}, + "execution_count": 18 + } + ] + }, + { + "cell_type": "code", + "source": [ + "torch.rand(3,2)" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "pGYDoK2gevfo", + "outputId": "2c8783d5-0453-47c5-c7ed-af10d25d6989" + }, + "execution_count": null, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "tensor([[0.5999, 0.0073],\n", + " [0.9321, 0.3026],\n", + " [0.3463, 0.3872]])" + ] + }, + "metadata": {}, + "execution_count": 20 + } + ] + }, + { + "cell_type": "code", + "source": [ + "torch.matmul(torch.rand(3,2), torch.rand(2,3))" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "KGBGQoB8e2DP", + "outputId": "4c2ef361-a2d0-41ee-c328-3992cbbc138d" + }, + "execution_count": null, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "tensor([[0.3528, 0.1893, 0.0714],\n", + " [1.2791, 0.7110, 0.2563],\n", + " [0.8812, 0.4553, 0.1803]])" + ] + }, + "metadata": {}, + "execution_count": 23 + } + ] + }, + { + "cell_type": "code", + "source": [ + "import torch" + ], + "metadata": { + "id": "ib8DMtkBe_LJ" + }, + "execution_count": 1, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "x = torch.rand(2,9)" + ], + "metadata": { + "id": "nJo8ZBdrQY1b" + }, + "execution_count": 2, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "x" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "wi6oRv4MQfgf", + "outputId": "55c99f55-31f6-4cf5-ba4e-19a47c3a0167" + }, + "execution_count": 3, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "tensor([[0.5894, 0.4391, 0.2018, 0.5417, 0.3844, 0.3592, 0.9209, 0.9269, 0.0681],\n", + " [0.0746, 0.1740, 0.6821, 0.6890, 0.0999, 0.7444, 0.2391, 0.4625, 0.8302]])" + ] + }, + "metadata": {}, + "execution_count": 3 + } + ] + }, + { + "cell_type": "code", + "source": [ + "y=torch.randn(2,3,5)\n", + "y" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "Zpx8myAUQgoc", + "outputId": "07756d70-56bd-437c-c74e-9aecc1a77311" + }, + "execution_count": 5, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "tensor([[[ 1.5552, -0.4877, 0.5175, -1.7958, -0.6187],\n", + " [-0.3359, -1.9710, 0.0112, -1.7578, -1.5295],\n", + " [ 0.0932, 1.4079, 0.9108, 0.3328, -0.6978]],\n", + "\n", + " [[-0.9406, -1.0809, -0.2595, 0.1282, 1.6605],\n", + " [ 1.1624, 1.0902, 1.7092, -0.2842, -1.3780],\n", + " [-0.1534, -1.2795, -0.5495, 0.9902, 0.1822]]])" + ] + }, + "metadata": {}, + "execution_count": 5 + } + ] + }, + { + "cell_type": "code", + "source": [ + "x_original = torch.rand(size=(224,224,3))\n", + "x_original" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "s4U-X9bJQnWe", + "outputId": "657a7a76-962c-4b41-a76b-902d0482266c" + }, + "execution_count": 6, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "tensor([[[0.4549, 0.6809, 0.2118],\n", + " [0.4824, 0.9008, 0.8741],\n", + " [0.1715, 0.1757, 0.1845],\n", + " ...,\n", + " [0.8741, 0.6594, 0.2610],\n", + " [0.0092, 0.1984, 0.1955],\n", + " [0.4236, 0.4182, 0.0251]],\n", + "\n", + " [[0.9174, 0.1661, 0.5852],\n", + " [0.1837, 0.2351, 0.3810],\n", + " [0.3726, 0.4808, 0.8732],\n", + " ...,\n", + " [0.6794, 0.0554, 0.9202],\n", + " [0.0864, 0.8750, 0.3558],\n", + " [0.8445, 0.9759, 0.4934]],\n", + "\n", + " [[0.1600, 0.2635, 0.7194],\n", + " [0.9488, 0.3405, 0.3647],\n", + " [0.6683, 0.5168, 0.9592],\n", + " ...,\n", + " [0.0521, 0.0140, 0.2445],\n", + " [0.3596, 0.3999, 0.2730],\n", + " [0.5926, 0.9877, 0.7784]],\n", + "\n", + " ...,\n", + "\n", + " [[0.4794, 0.5635, 0.3764],\n", + " [0.9124, 0.6094, 0.5059],\n", + " [0.4528, 0.4447, 0.5021],\n", + " ...,\n", + " [0.0089, 0.4816, 0.8727],\n", + " [0.2173, 0.6296, 0.2347],\n", + " [0.2028, 0.9931, 0.7201]],\n", + "\n", + " [[0.3116, 0.6459, 0.4703],\n", + " [0.0148, 0.2345, 0.7149],\n", + " [0.8393, 0.5804, 0.6691],\n", + " ...,\n", + " [0.2105, 0.9460, 0.2696],\n", + " [0.5918, 0.9295, 0.2616],\n", + " [0.2537, 0.7819, 0.4700]],\n", + "\n", + " [[0.6654, 0.1200, 0.5841],\n", + " [0.9147, 0.5522, 0.6529],\n", + " [0.1799, 0.5276, 0.5415],\n", + " ...,\n", + " [0.7536, 0.4346, 0.8793],\n", + " [0.3793, 0.1750, 0.7792],\n", + " [0.9266, 0.8325, 0.9974]]])" + ] + }, + "metadata": {}, + "execution_count": 6 + } + ] + }, + { + "cell_type": "code", + "source": [ + "x_permuted=x_original.permute(2, 0, 1)\n", + "print(x_original.shape)\n", + "print(x_permuted.shape)" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "DD19_zvbQzHo", + "outputId": "1d64ce1b-eb48-47e3-90b6-7f1340e7f2b2" + }, + "execution_count": 9, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "torch.Size([224, 224, 3])\n", + "torch.Size([3, 224, 224])\n" + ] + } + ] + }, + { + "cell_type": "code", + "source": [ + "x_original[0,0,0]" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "NnPmMk4ZRF7w", + "outputId": "2cd5da7f-4a23-4a76-8c4a-bb982113f2a4" + }, + "execution_count": 10, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "tensor(0.4549)" + ] + }, + "metadata": {}, + "execution_count": 10 + } + ] + }, + { + "cell_type": "code", + "source": [ + "x_permuted[0,0,0]" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "Z0ylNoAARgTo", + "outputId": "ddca0298-cddf-4048-9b71-a791655e5bed" + }, + "execution_count": 11, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "tensor(0.4549)" + ] + }, + "metadata": {}, + "execution_count": 11 + } + ] + }, + { + "cell_type": "code", + "source": [ + "x_original[0,0,0]=0.989" + ], + "metadata": { + "id": "RXw0xXsDRi4L" + }, + "execution_count": 13, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "x_original[0,0,0]" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "1sFdV6wzRo3f", + "outputId": "1cf87d2c-6d88-453a-d136-0f625a2800f1" + }, + "execution_count": 14, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "tensor(0.9890)" + ] + }, + "metadata": {}, + "execution_count": 14 + } + ] + }, + { + "cell_type": "code", + "source": [ + "x_permuted[0,0,0]" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "xTX-hx2SR1wp", + "outputId": "0d4908c4-c3bc-44e3-8ec6-1487104cc209" + }, + "execution_count": 15, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "tensor(0.9890)" + ] + }, + "metadata": {}, + "execution_count": 15 + } + ] + }, + { + "cell_type": "code", + "source": [ + "x=torch.arange(1,10).reshape(1,3,3)\n", + "x, x.shape" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "mZomOe7gR4Q8", + "outputId": "0b3c922f-ec11-46de-b8a5-9f9533d866ad" + }, + "execution_count": 18, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "(tensor([[[1, 2, 3],\n", + " [4, 5, 6],\n", + " [7, 8, 9]]]),\n", + " torch.Size([1, 3, 3]))" + ] + }, + "metadata": {}, + "execution_count": 18 + } + ] + }, + { + "cell_type": "code", + "source": [ + "x[0]" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "3y7v4SQvSBs1", + "outputId": "8c53307d-e628-404d-db66-56c6bdffab7c" + }, + "execution_count": 19, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "tensor([[1, 2, 3],\n", + " [4, 5, 6],\n", + " [7, 8, 9]])" + ] + }, + "metadata": {}, + "execution_count": 19 + } + ] + }, + { + "cell_type": "code", + "source": [ + "x[0][0]" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "hf9uG4xLSNya", + "outputId": "3075bc42-9ffa-426b-8a86-95628ffcd824" + }, + "execution_count": 21, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "tensor([1, 2, 3])" + ] + }, + "metadata": {}, + "execution_count": 21 + } + ] + }, + { + "cell_type": "code", + "source": [ + "x[0][0][0]" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "zA4G2Se4SRB3", + "outputId": "324312d2-ed0a-49eb-f81f-e904e53992fe" + }, + "execution_count": 22, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "tensor(1)" + ] + }, + "metadata": {}, + "execution_count": 22 + } + ] + }, + { + "cell_type": "code", + "source": [ + "x[0][2][2]" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "Mwy3zmKKSdbk", + "outputId": "d35172c3-b099-40a6-ddf1-a453c2adfa44" + }, + "execution_count": 23, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "tensor(9)" + ] + }, + "metadata": {}, + "execution_count": 23 + } + ] + }, + { + "cell_type": "code", + "source": [ + "x[:,1,1]" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "fE3nCM1KS7XT", + "outputId": "01f5d755-9737-4235-9f73-dce89ff6ba16" + }, + "execution_count": 24, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "tensor([5])" + ] + }, + "metadata": {}, + "execution_count": 24 + } + ] + }, + { + "cell_type": "code", + "source": [ + "x[0,0,:]" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "luNDINKNTTxp", + "outputId": "091195ef-2f71-4602-e95f-529a69193150" + }, + "execution_count": 25, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "tensor([1, 2, 3])" + ] + }, + "metadata": {}, + "execution_count": 25 + } + ] + }, + { + "cell_type": "code", + "source": [ + "x[0,:,2]" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "KG8A4xbfThCL", + "outputId": "5866bc41-9241-4619-be7b-e9206b3f80ab" + }, + "execution_count": 26, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "tensor([3, 6, 9])" + ] + }, + "metadata": {}, + "execution_count": 26 + } + ] + }, + { + "cell_type": "code", + "source": [ + "import numpy as np" + ], + "metadata": { + "id": "CZ3PX0qlTwHJ" + }, + "execution_count": 27, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "array = np.arange(1.0, 8.0)" + ], + "metadata": { + "id": "UOBeTumiT3Lf" + }, + "execution_count": 28, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "array" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "RzcO32E9UCQl", + "outputId": "430def24-c42c-461f-e5e7-398544c695d3" + }, + "execution_count": 29, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "array([1., 2., 3., 4., 5., 6., 7.])" + ] + }, + "metadata": {}, + "execution_count": 29 + } + ] + }, + { + "cell_type": "code", + "source": [ + "tensor = torch.from_numpy(array)\n", + "tensor" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "JJIL0q1DUC6O", + "outputId": "8a3b1d7c-4482-4d32-f34f-9212d9d3a177" + }, + "execution_count": 32, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "tensor([1., 2., 3., 4., 5., 6., 7.], dtype=torch.float64)" + ] + }, + "metadata": {}, + "execution_count": 32 + } + ] + }, + { + "cell_type": "code", + "source": [ + "array[3]=11.0" + ], + "metadata": { + "id": "j3Ce6q3DUIEK" + }, + "execution_count": 33, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "array" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "dc_BCVdjUsCc", + "outputId": "65537325-8b11-4f36-fc73-e56f30d6a036" + }, + "execution_count": 34, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "array([ 1., 2., 3., 11., 5., 6., 7.])" + ] + }, + "metadata": {}, + "execution_count": 34 + } + ] + }, + { + "cell_type": "code", + "source": [ + "tensor" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "VG1e_eITUta2", + "outputId": "a26c5198-23b6-4a6d-d73a-ba20cd9782b8" + }, + "execution_count": 35, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "tensor([ 1., 2., 3., 11., 5., 6., 7.], dtype=torch.float64)" + ] + }, + "metadata": {}, + "execution_count": 35 + } + ] + }, + { + "cell_type": "code", + "source": [ + "tensor = torch.ones(7)\n", + "tensor, tensor.dtype\n", + "numpy_tensor = tensor.numpy()\n", + "numpy_tensor, numpy_tensor.dtype" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "Swt8JF8vUuev", + "outputId": "c9e5bf6a-6d2c-41d6-8327-366867ffdd2d" + }, + "execution_count": 37, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "(array([1., 1., 1., 1., 1., 1., 1.], dtype=float32), dtype('float32'))" + ] + }, + "metadata": {}, + "execution_count": 37 + } + ] + }, + { + "cell_type": "code", + "source": [ + "import torch\n", + "random_tensor_A = torch.rand(3,4)\n", + "random_tensor_B = torch.rand(3,4)\n", + "print(random_tensor_A)\n", + "print(random_tensor_B)\n", + "print(random_tensor_A == random_tensor_B)" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "uGcagTteVFTD", + "outputId": "49405790-08e7-4210-b7f1-f00b904c7eb9" + }, + "execution_count": 38, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "tensor([[0.9870, 0.6636, 0.6873, 0.8863],\n", + " [0.8386, 0.4169, 0.3587, 0.0265],\n", + " [0.2981, 0.6025, 0.5652, 0.5840]])\n", + "tensor([[0.9821, 0.3481, 0.0913, 0.4940],\n", + " [0.7495, 0.4387, 0.9582, 0.8659],\n", + " [0.5064, 0.6919, 0.0809, 0.9771]])\n", + "tensor([[False, False, False, False],\n", + " [False, False, False, False],\n", + " [False, False, False, False]])\n" + ] + } + ] + }, + { + "cell_type": "code", + "source": [ + "RANDOM_SEED = 42\n", + "torch.manual_seed(RANDOM_SEED)\n", + "random_tensor_C = torch.rand(3,4)\n", + "torch.manual_seed(RANDOM_SEED)\n", + "random_tensor_D = torch.rand(3,4)\n", + "print(random_tensor_C)\n", + "print(random_tensor_D)\n", + "print(random_tensor_C == random_tensor_D)" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "HznyXyEaWjLM", + "outputId": "25956434-01b6-4059-9054-c9978884ddc1" + }, + "execution_count": 46, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "tensor([[0.8823, 0.9150, 0.3829, 0.9593],\n", + " [0.3904, 0.6009, 0.2566, 0.7936],\n", + " [0.9408, 0.1332, 0.9346, 0.5936]])\n", + "tensor([[0.8823, 0.9150, 0.3829, 0.9593],\n", + " [0.3904, 0.6009, 0.2566, 0.7936],\n", + " [0.9408, 0.1332, 0.9346, 0.5936]])\n", + "tensor([[True, True, True, True],\n", + " [True, True, True, True],\n", + " [True, True, True, True]])\n" + ] + } + ] + }, + { + "cell_type": "code", + "source": [ + "!nvidia-smi" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "vltPTh0YXJSt", + "outputId": "807af6dc-a9ca-4301-ec32-b688dbde8be8" + }, + "execution_count": 2, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Thu May 23 02:57:59 2024 \n", + "+---------------------------------------------------------------------------------------+\n", + "| NVIDIA-SMI 535.104.05 Driver Version: 535.104.05 CUDA Version: 12.2 |\n", + "|-----------------------------------------+----------------------+----------------------+\n", + "| GPU Name Persistence-M | Bus-Id Disp.A | Volatile Uncorr. ECC |\n", + "| Fan Temp Perf Pwr:Usage/Cap | Memory-Usage | GPU-Util Compute M. |\n", + "| | | MIG M. |\n", + "|=========================================+======================+======================|\n", + "| 0 Tesla T4 Off | 00000000:00:04.0 Off | 0 |\n", + "| N/A 60C P8 11W / 70W | 0MiB / 15360MiB | 0% Default |\n", + "| | | N/A |\n", + "+-----------------------------------------+----------------------+----------------------+\n", + " \n", + "+---------------------------------------------------------------------------------------+\n", + "| Processes: |\n", + "| GPU GI CI PID Type Process name GPU Memory |\n", + "| ID ID Usage |\n", + "|=======================================================================================|\n", + "| No running processes found |\n", + "+---------------------------------------------------------------------------------------+\n" + ] + } + ] + }, + { + "cell_type": "code", + "source": [ + "import torch\n", + "torch.cuda.is_available()" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "L6mMyPDyYh1j", + "outputId": "279c5dd8-c2a8-4fbd-f321-2f5d7c6e90e6" + }, + "execution_count": 3, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "True" + ] + }, + "metadata": {}, + "execution_count": 3 + } + ] + }, + { + "cell_type": "code", + "source": [ + "device = \"cuda\" if torch.cuda.is_available() else \"cpu\"\n", + "device" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 35 + }, + "id": "oOdiYa7ZYytx", + "outputId": "d73b04fc-8963-4826-9722-08d118d5ab91" + }, + "execution_count": 5, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "'cuda'" + ], + "application/vnd.google.colaboratory.intrinsic+json": { + "type": "string" + } + }, + "metadata": {}, + "execution_count": 5 + } + ] + }, + { + "cell_type": "code", + "source": [ + "torch.cuda.device_count()" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "vOdsazLqZFM5", + "outputId": "8189cd6a-9017-4663-a652-3e15c517d9c3" + }, + "execution_count": 6, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "1" + ] + }, + "metadata": {}, + "execution_count": 6 + } + ] + }, + { + "cell_type": "code", + "source": [ + "tensor = torch.tensor([1,2,3], device = \"cpu\")\n", + "print(tensor, tensor.device)" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "cdik9Vw3ZMv0", + "outputId": "044a68fd-83a1-409d-8e3b-655142ca0270" + }, + "execution_count": 7, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "tensor([1, 2, 3]) cpu\n" + ] + } + ] + }, + { + "cell_type": "code", + "source": [ + "tensor_on_gpu = tensor.to(device)\n", + "tensor_on_gpu" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "Zmp835rrZp-z", + "outputId": "37fa3413-18a3-47bf-ae51-5b36ff85a3ef" + }, + "execution_count": 8, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "tensor([1, 2, 3], device='cuda:0')" + ] + }, + "metadata": {}, + "execution_count": 8 + } + ] + }, + { + "cell_type": "code", + "source": [ + "tensor_on_gpu.numpy()" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 159 + }, + "id": "jhriaa8uZ1yM", + "outputId": "bc5a3226-1a12-4fea-8769-a44f21cdc323" + }, + "execution_count": 10, + "outputs": [ + { + "output_type": "error", + "ename": "TypeError", + "evalue": "can't convert cuda:0 device type tensor to numpy. Use Tensor.cpu() to copy the tensor to host memory first.", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mTypeError\u001b[0m Traceback (most recent call last)", + "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0mtensor_on_gpu\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mnumpy\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", + "\u001b[0;31mTypeError\u001b[0m: can't convert cuda:0 device type tensor to numpy. Use Tensor.cpu() to copy the tensor to host memory first." + ] + } + ] + }, + { + "cell_type": "code", + "source": [ + "tensor_on_cpu = tensor_on_gpu.cpu().numpy()" + ], + "metadata": { + "id": "LHGXK3GgaOzL" + }, + "execution_count": 12, + "outputs": [] + }, + { + "cell_type": "code", + "source": [], + "metadata": { + "id": "j-El4LlCajfq" + }, + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n---\n\n**Aviso Legal**: \nEste documento foi traduzido utilizando o serviço de tradução por IA [Co-op Translator](https://github.com/Azure/co-op-translator). Embora nos esforcemos para garantir a precisão, esteja ciente de que traduções automatizadas podem conter erros ou imprecisões. O documento original em seu idioma nativo deve ser considerado a fonte autoritativa. Para informações críticas, recomenda-se a tradução profissional realizada por humanos. Não nos responsabilizamos por quaisquer mal-entendidos ou interpretações equivocadas decorrentes do uso desta tradução.\n" + ] + } + ] +} \ No newline at end of file diff --git a/translations/pt-BR/README.md b/translations/pt-BR/README.md new file mode 100644 index 000000000..cdc9f7edb --- /dev/null +++ b/translations/pt-BR/README.md @@ -0,0 +1,223 @@ +[![Licença GitHub](https://img.shields.io/github/license/microsoft/ML-For-Beginners.svg)](https://github.com/microsoft/ML-For-Beginners/blob/master/LICENSE) +[![Contribuidores GitHub](https://img.shields.io/github/contributors/microsoft/ML-For-Beginners.svg)](https://GitHub.com/microsoft/ML-For-Beginners/graphs/contributors/) +[![Issues GitHub](https://img.shields.io/github/issues/microsoft/ML-For-Beginners.svg)](https://GitHub.com/microsoft/ML-For-Beginners/issues/) +[![Pull requests GitHub](https://img.shields.io/github/issues-pr/microsoft/ML-For-Beginners.svg)](https://GitHub.com/microsoft/ML-For-Beginners/pulls/) +[![PRs Bem-vindos](https://img.shields.io/badge/PRs-welcome-brightgreen.svg?style=flat-square)](http://makeapullrequest.com) + +[![Observadores GitHub](https://img.shields.io/github/watchers/microsoft/ML-For-Beginners.svg?style=social&label=Watch)](https://GitHub.com/microsoft/ML-For-Beginners/watchers/) +[![Forks GitHub](https://img.shields.io/github/forks/microsoft/ML-For-Beginners.svg?style=social&label=Fork)](https://GitHub.com/microsoft/ML-For-Beginners/network/) +[![Estrelas GitHub](https://img.shields.io/github/stars/microsoft/ML-For-Beginners.svg?style=social&label=Star)](https://GitHub.com/microsoft/ML-For-Beginners/stargazers/) + +### 🌐 Suporte Multilíngue + +#### Suportado via GitHub Action (Automatizado e Sempre Atualizado) + + +[Árabe](../ar/README.md) | [Bengali](../bn/README.md) | [Búlgaro](../bg/README.md) | [Birmanês (Myanmar)](../my/README.md) | [Chinês (Simplificado)](../zh-CN/README.md) | [Chinês (Tradicional, Hong Kong)](../zh-HK/README.md) | [Chinês (Tradicional, Macau)](../zh-MO/README.md) | [Chinês (Tradicional, Taiwan)](../zh-TW/README.md) | [Croata](../hr/README.md) | [Tcheco](../cs/README.md) | [Dinamarquês](../da/README.md) | [Holandês](../nl/README.md) | [Estoniano](../et/README.md) | [Finlandês](../fi/README.md) | [Francês](../fr/README.md) | [Alemão](../de/README.md) | [Grego](../el/README.md) | [Hebraico](../he/README.md) | [Hindi](../hi/README.md) | [Húngaro](../hu/README.md) | [Indonésio](../id/README.md) | [Italiano](../it/README.md) | [Japonês](../ja/README.md) | [Kannada](../kn/README.md) | [Coreano](../ko/README.md) | [Lituano](../lt/README.md) | [Malaio](../ms/README.md) | [Malaiala](../ml/README.md) | [Marathi](../mr/README.md) | [Nepali](../ne/README.md) | [Pidgin Nigeriano](../pcm/README.md) | [Norueguês](../no/README.md) | [Persa (Farsi)](../fa/README.md) | [Polonês](../pl/README.md) | [Português (Brasil)](./README.md) | [Português (Portugal)](../pt-PT/README.md) | [Punjabi (Gurmukhi)](../pa/README.md) | [Romeno](../ro/README.md) | [Russo](../ru/README.md) | [Sérvio (Cirílico)](../sr/README.md) | [Eslovaco](../sk/README.md) | [Esloveno](../sl/README.md) | [Espanhol](../es/README.md) | [Suaíli](../sw/README.md) | [Sueco](../sv/README.md) | [Tagalog (Filipino)](../tl/README.md) | [Tâmil](../ta/README.md) | [Telugu](../te/README.md) | [Tailandês](../th/README.md) | [Turco](../tr/README.md) | [Ucraniano](../uk/README.md) | [Urdu](../ur/README.md) | [Vietnamita](../vi/README.md) + +> **Prefere clonar localmente?** + +> Este repositório inclui mais de 50 traduções de idiomas, o que aumenta significativamente o tamanho do download. Para clonar sem as traduções, use sparse checkout: +> ```bash +> git clone --filter=blob:none --sparse https://github.com/microsoft/ML-For-Beginners.git +> cd ML-For-Beginners +> git sparse-checkout set --no-cone '/*' '!translations' '!translated_images' +> ``` +> Isso fornece tudo que você precisa para completar o curso com download muito mais rápido. + + +#### Junte-se à Nossa Comunidade + +[![Microsoft Foundry Discord](https://dcbadge.limes.pink/api/server/nTYy5BXMWG)](https://discord.gg/nTYy5BXMWG) + +Estamos realizando uma série Discord sobre aprender com IA, saiba mais e junte-se a nós em [Série Aprenda com IA](https://aka.ms/learnwithai/discord) de 18 a 30 de setembro de 2025. Você receberá dicas e truques de como usar o GitHub Copilot para Ciência de Dados. + +![Série Aprenda com IA](../../translated_images/pt-BR/3.9b58fd8d6c373c20.webp) + +# Aprendizado de Máquina para Iniciantes - Um Currículo + +> 🌍 Viaje pelo mundo enquanto exploramos Aprendizado de Máquina através das culturas mundiais 🌍 + +Os Cloud Advocates da Microsoft têm o prazer de oferecer um currículo de 12 semanas, com 26 lições, totalmente dedicado ao **Aprendizado de Máquina**. Neste currículo, você aprenderá sobre o que às vezes é chamado de **aprendizado de máquina clássico**, usando principalmente a biblioteca Scikit-learn e evitando deep learning, que é abordado em nosso [currículo AI para Iniciantes](https://aka.ms/ai4beginners). Combine estas lições com nosso [currículo Ciência de Dados para Iniciantes](https://aka.ms/ds4beginners), também! + +Viaje conosco pelo mundo enquanto aplicamos essas técnicas clássicas a dados de diversas regiões. Cada lição inclui testes antes e depois da aula, instruções escritas para completar a lição, uma solução, um desafio, e mais. Nossa pedagogia baseada em projetos permite que você aprenda enquanto constrói, uma forma comprovada de fixar novos conhecimentos. + +**✍️ Agradecimentos sinceros aos nossos autores** Jen Looper, Stephen Howell, Francesca Lazzeri, Tomomi Imura, Cassie Breviu, Dmitry Soshnikov, Chris Noring, Anirban Mukherjee, Ornella Altunyan, Ruth Yakubu e Amy Boyd + +**🎨 Agradecimentos também aos nossos ilustradores** Tomomi Imura, Dasani Madipalli, e Jen Looper + +**🙏 Agradecimentos especiais 🙏 aos nossos autores, revisores e colaboradores do Microsoft Student Ambassador**, especialmente Rishit Dagli, Muhammad Sakib Khan Inan, Rohan Raj, Alexandru Petrescu, Abhishek Jaiswal, Nawrin Tabassum, Ioan Samuila, e Snigdha Agarwal + +**🤩 Gratidão extra aos Microsoft Student Ambassadors Eric Wanjau, Jasleen Sondhi, e Vidushi Gupta pelas nossas lições em R!** + +# Começando + +Siga estes passos: +1. **Faça um Fork do Repositório**: Clique no botão "Fork" no canto superior direito desta página. +2. **Clone o Repositório**: `git clone https://github.com/microsoft/ML-For-Beginners.git` + +> [encontre todos os recursos adicionais para este curso em nossa coleção Microsoft Learn](https://learn.microsoft.com/en-us/collections/qrqzamz1nn2wx3?WT.mc_id=academic-77952-bethanycheum) + +> 🔧 **Precisa de ajuda?** Consulte nosso [Guia de Solução de Problemas](TROUBLESHOOTING.md) para soluções comuns com instalação, configuração e execução das aulas. + + +**[Estudantes](https://aka.ms/student-page)**, para usar este currículo, faça fork do repositório completo para a sua conta do GitHub e complete os exercícios sozinho ou em grupo: + +- Comece com um quiz pré-aula. +- Leia a aula e complete as atividades, pausando e refletindo em cada verificação de conhecimento. +- Tente criar os projetos compreendendo as lições ao invés de apenas executar o código da solução; embora esse código esteja disponível nas pastas `/solution` em cada lição orientada por projeto. +- Faça o quiz pós-aula. +- Complete o desafio. +- Entregue o assignment. +- Após completar um grupo de aulas, visite o [Fórum de Discussões](https://github.com/microsoft/ML-For-Beginners/discussions) e “aprenda em voz alta” preenchendo a rubrica PAT apropriada. Um 'PAT' é uma Ferramenta de Avaliação de Progresso (Progress Assessment Tool) que é uma rubrica que você preenche para aprofundar seu aprendizado. Você também pode reagir a outras PATs para aprendermos juntos. + +> Para estudos adicionais, recomendamos seguir estes módulos e trilhas de aprendizado do [Microsoft Learn](https://docs.microsoft.com/en-us/users/jenlooper-2911/collections/k7o7tg1gp306q4?WT.mc_id=academic-77952-leestott). + +**Professores**, incluímos [algumas sugestões](for-teachers.md) sobre como usar este currículo. + +--- + +## Vídeos explicativos + +Algumas lições estão disponíveis em formato de vídeo curto. Você pode encontrá-los integrados nas lições, ou na [playlist ML for Beginners no canal Microsoft Developer no YouTube](https://aka.ms/ml-beginners-videos) clicando na imagem abaixo. + +[![Banner ML para iniciantes](../../translated_images/pt-BR/ml-for-beginners-video-banner.63f694a100034bc6.webp)](https://aka.ms/ml-beginners-videos) + +--- + +## Conheça a Equipe + +[![Vídeo promocional](../../images/ml.gif)](https://youtu.be/Tj1XWrDSYJU) + +**Gif por** [Mohit Jaisal](https://linkedin.com/in/mohitjaisal) + +> 🎥 Clique na imagem acima para um vídeo sobre o projeto e as pessoas que o criaram! + +--- + +## Pedagogia + +Escolhemos dois princípios pedagógicos ao construir este currículo: garantir que seja **baseado em projetos práticos** e que inclua **quizzes frequentes**. Além disso, este currículo tem um **tema comum** para dar coerência. + +Garantindo que o conteúdo esteja alinhado com projetos, o processo se torna mais envolvente para os alunos, aumentando a retenção dos conceitos. Além disso, um quiz de baixa pressão antes da aula define a intenção do estudante para aprender o tópico, enquanto um segundo quiz após a aula assegura maior retenção. Este currículo foi projetado para ser flexível e divertido, podendo ser feito em sua totalidade ou em partes. Os projetos começam pequenos e se tornam progressivamente mais complexos até o fim do ciclo de 12 semanas. O currículo também inclui um posfácio sobre aplicações reais de ML, que pode ser usado como crédito adicional ou base para discussão. + +> Encontre nosso [Código de Conduta](CODE_OF_CONDUCT.md), diretrizes sobre [Contribuição](CONTRIBUTING.md), [Tradução](TRANSLATIONS.md) e [Solução de Problemas](TROUBLESHOOTING.md). Agradecemos seu feedback construtivo! + +## Cada lição inclui + +- sketchnote opcional +- vídeo suplementar opcional +- vídeo explicativo (algumas lições apenas) +- [quiz pré-aula](https://ff-quizzes.netlify.app/en/ml/) +- lição escrita +- para lições baseadas em projeto, guias passo a passo de como construir o projeto +- verificações de conhecimento +- um desafio +- leitura suplementar +- assignment +- [quiz pós-aula](https://ff-quizzes.netlify.app/en/ml/) + +> **Uma nota sobre os idiomas**: Estas lições são principalmente escritas em Python, mas muitas também estão disponíveis em R. Para completar uma lição em R, vá para a pasta `/solution` e procure as lições em R. Elas incluem a extensão .rmd que representa um arquivo **R Markdown**, que pode ser definido como uma integração de `blocos de código` (em R ou outras linguagens) e um `cabeçalho YAML` (que orienta como formatar saídas como PDF) em um `documento Markdown`. Assim, serve como um excelente framework para autoria em ciência de dados, pois permite combinar seu código, sua saída e suas anotações em Markdown. Além disso, documentos R Markdown podem ser convertidos para formatos de saída como PDF, HTML ou Word. +> **Uma nota sobre quizzes**: Todos os quizzes estão contidos na [pasta Quiz App](../../quiz-app), totalizando 52 quizzes com três perguntas cada. Eles estão vinculados dentro das lições, mas o aplicativo de quiz pode ser executado localmente; siga as instruções na pasta `quiz-app` para hospedar localmente ou implantar no Azure. + +| Número da Aula | Tema | Agrupamento de Aula | Objetivos de Aprendizagem | Aula Vinculada | Autor | +| :------------: | :-----------------------------------------------------------: | :-----------------------------------------------------: | ------------------------------------------------------------------------------------------------------------------------------- | :--------------------------------------------------------------------------------------------------------------------------------------: | :------------------------------------------------: | +| 01 | Introdução ao aprendizado de máquina | [Introdução](1-Introduction/README.md) | Aprenda os conceitos básicos por trás do aprendizado de máquina | [Aula](1-Introduction/1-intro-to-ML/README.md) | Muhammad | +| 02 | A História do aprendizado de máquina | [Introdução](1-Introduction/README.md) | Aprenda a história por trás deste campo | [Aula](1-Introduction/2-history-of-ML/README.md) | Jen e Amy | +| 03 | Justiça e aprendizado de máquina | [Introdução](1-Introduction/README.md) | Quais são as importantes questões filosóficas sobre justiça que os estudantes devem considerar ao construir e aplicar modelos ML? | [Aula](1-Introduction/3-fairness/README.md) | Tomomi | +| 04 | Técnicas para aprendizado de máquina | [Introdução](1-Introduction/README.md) | Quais técnicas os pesquisadores de ML usam para construir modelos de ML? | [Aula](1-Introduction/4-techniques-of-ML/README.md) | Chris e Jen | +| 05 | Introdução à regressão | [Regressão](2-Regression/README.md) | Comece com Python e Scikit-learn para modelos de regressão | [Python](2-Regression/1-Tools/README.md) • [R](../../2-Regression/1-Tools/solution/R/lesson_1.html) | Jen • Eric Wanjau | +| 06 | Preços da abóbora na América do Norte 🎃 | [Regressão](2-Regression/README.md) | Visualize e limpe dados em preparação para ML | [Python](2-Regression/2-Data/README.md) • [R](../../2-Regression/2-Data/solution/R/lesson_2.html) | Jen • Eric Wanjau | +| 07 | Preços da abóbora na América do Norte 🎃 | [Regressão](2-Regression/README.md) | Construa modelos de regressão linear e polinomial | [Python](2-Regression/3-Linear/README.md) • [R](../../2-Regression/3-Linear/solution/R/lesson_3.html) | Jen e Dmitry • Eric Wanjau | +| 08 | Preços da abóbora na América do Norte 🎃 | [Regressão](2-Regression/README.md) | Construa um modelo de regressão logística | [Python](2-Regression/4-Logistic/README.md) • [R](../../2-Regression/4-Logistic/solution/R/lesson_4.html) | Jen • Eric Wanjau | +| 09 | Um App Web 🔌 | [App Web](3-Web-App/README.md) | Construa um aplicativo web para usar seu modelo treinado | [Python](3-Web-App/1-Web-App/README.md) | Jen | +| 10 | Introdução à classificação | [Classificação](4-Classification/README.md) | Limpe, prepare e visualize seus dados; introdução à classificação | [Python](4-Classification/1-Introduction/README.md) • [R](../../4-Classification/1-Introduction/solution/R/lesson_10.html) | Jen e Cassie • Eric Wanjau | +| 11 | Culinárias deliciosas asiáticas e indianas 🍜 | [Classificação](4-Classification/README.md) | Introdução a classificadores | [Python](4-Classification/2-Classifiers-1/README.md) • [R](../../4-Classification/2-Classifiers-1/solution/R/lesson_11.html) | Jen e Cassie • Eric Wanjau | +| 12 | Culinárias deliciosas asiáticas e indianas 🍜 | [Classificação](4-Classification/README.md) | Mais classificadores | [Python](4-Classification/3-Classifiers-2/README.md) • [R](../../4-Classification/3-Classifiers-2/solution/R/lesson_12.html) | Jen e Cassie • Eric Wanjau | +| 13 | Culinárias deliciosas asiáticas e indianas 🍜 | [Classificação](4-Classification/README.md) | Construa um app web recomendador usando seu modelo | [Python](4-Classification/4-Applied/README.md) | Jen | +| 14 | Introdução ao agrupamento | [Agrupamento](5-Clustering/README.md) | Limpe, prepare e visualize seus dados; Introdução ao agrupamento | [Python](5-Clustering/1-Visualize/README.md) • [R](../../5-Clustering/1-Visualize/solution/R/lesson_14.html) | Jen • Eric Wanjau | +| 15 | Explorando gostos musicais nigerianos 🎧 | [Agrupamento](5-Clustering/README.md) | Explore o método de agrupamento K-Means | [Python](5-Clustering/2-K-Means/README.md) • [R](../../5-Clustering/2-K-Means/solution/R/lesson_15.html) | Jen • Eric Wanjau | +| 16 | Introdução ao processamento de linguagem natural ☕️ | [Processamento de linguagem natural](6-NLP/README.md) | Aprenda o básico sobre PLN construindo um bot simples | [Python](6-NLP/1-Introduction-to-NLP/README.md) | Stephen | +| 17 | Tarefas comuns de PLN ☕️ | [Processamento de linguagem natural](6-NLP/README.md) | Aprofunde seu conhecimento de PLN entendendo tarefas comuns quando lidar com estruturas de linguagem | [Python](6-NLP/2-Tasks/README.md) | Stephen | +| 18 | Tradução e análise de sentimento ♥️ | [Processamento de linguagem natural](6-NLP/README.md) | Tradução e análise de sentimento com Jane Austen | [Python](6-NLP/3-Translation-Sentiment/README.md) | Stephen | +| 19 | Hotéis românticos da Europa ♥️ | [Processamento de linguagem natural](6-NLP/README.md) | Análise de sentimento com avaliações de hotéis 1 | [Python](6-NLP/4-Hotel-Reviews-1/README.md) | Stephen | +| 20 | Hotéis românticos da Europa ♥️ | [Processamento de linguagem natural](6-NLP/README.md) | Análise de sentimento com avaliações de hotéis 2 | [Python](6-NLP/5-Hotel-Reviews-2/README.md) | Stephen | +| 21 | Introdução à previsão de séries temporais | [Séries temporais](7-TimeSeries/README.md) | Introdução à previsão de séries temporais | [Python](7-TimeSeries/1-Introduction/README.md) | Francesca | +| 22 | ⚡️ Consumo de energia mundial ⚡️ - previsão com ARIMA | [Séries temporais](7-TimeSeries/README.md) | Previsão de séries temporais com ARIMA | [Python](7-TimeSeries/2-ARIMA/README.md) | Francesca | +| 23 | ⚡️ Consumo de energia mundial ⚡️ - previsão com SVR | [Séries temporais](7-TimeSeries/README.md) | Previsão de séries temporais com Regressor de Vetor de Suporte | [Python](7-TimeSeries/3-SVR/README.md) | Anirban | +| 24 | Introdução ao aprendizado por reforço | [Aprendizado por reforço](8-Reinforcement/README.md) | Introdução ao aprendizado por reforço com Q-Learning | [Python](8-Reinforcement/1-QLearning/README.md) | Dmitry | +| 25 | Ajude Peter a evitar o lobo! 🐺 | [Aprendizado por reforço](8-Reinforcement/README.md) | Ambiente Gym para aprendizado por reforço | [Python](8-Reinforcement/2-Gym/README.md) | Dmitry | +| Pós-escrito | Cenários e aplicações reais de ML | [ML na prática](9-Real-World/README.md) | Aplicações reais interessantes e reveladoras de ML clássico | [Aula](9-Real-World/1-Applications/README.md) | Equipe | +| Pós-escrito | Depuração de modelos em ML usando dashboard RAI | [ML na prática](9-Real-World/README.md) | Depuração de modelos em ML usando componentes do dashboard Responsible AI | [Aula](9-Real-World/2-Debugging-ML-Models/README.md) | Ruth Yakubu | + +> [encontre todos os recursos adicionais para este curso em nossa coleção Microsoft Learn](https://learn.microsoft.com/en-us/collections/qrqzamz1nn2wx3?WT.mc_id=academic-77952-bethanycheum) + +## Acesso offline + +Você pode executar esta documentação offline usando [Docsify](https://docsify.js.org/#/). Faça um fork deste repositório, [instale o Docsify](https://docsify.js.org/#/quickstart) em sua máquina local e então, na pasta raiz deste repositório, digite `docsify serve`. O site será servido na porta 3000 em seu localhost: `localhost:3000`. + +## PDFs + +Encontre um pdf do currículo com links [aqui](https://microsoft.github.io/ML-For-Beginners/pdf/readme.pdf). + + +## 🎒 Outros Cursos + +Nossa equipe produz outros cursos! Confira: + + +### LangChain +[![LangChain4j para iniciantes](https://img.shields.io/badge/LangChain4j%20for%20Beginners-22C55E?style=for-the-badge&&labelColor=E5E7EB&color=0553D6)](https://aka.ms/langchain4j-for-beginners) +[![LangChain.js para iniciantes](https://img.shields.io/badge/LangChain.js%20for%20Beginners-22C55E?style=for-the-badge&labelColor=E5E7EB&color=0553D6)](https://aka.ms/langchainjs-for-beginners?WT.mc_id=m365-94501-dwahlin) + +--- + +### Azure / Edge / MCP / Agentes +[![AZD para iniciantes](https://img.shields.io/badge/AZD%20for%20Beginners-0078D4?style=for-the-badge&labelColor=E5E7EB&color=0078D4)](https://github.com/microsoft/AZD-for-beginners?WT.mc_id=academic-105485-koreyst) +[![Edge AI para iniciantes](https://img.shields.io/badge/Edge%20AI%20for%20Beginners-00B8E4?style=for-the-badge&labelColor=E5E7EB&color=00B8E4)](https://github.com/microsoft/edgeai-for-beginners?WT.mc_id=academic-105485-koreyst) +[![MCP para iniciantes](https://img.shields.io/badge/MCP%20for%20Beginners-009688?style=for-the-badge&labelColor=E5E7EB&color=009688)](https://github.com/microsoft/mcp-for-beginners?WT.mc_id=academic-105485-koreyst) +[![Agentes de IA para iniciantes](https://img.shields.io/badge/AI%20Agents%20for%20Beginners-00C49A?style=for-the-badge&labelColor=E5E7EB&color=00C49A)](https://github.com/microsoft/ai-agents-for-beginners?WT.mc_id=academic-105485-koreyst) + +--- + +### Série de IA Generativa +[![IA Generativa para Iniciantes](https://img.shields.io/badge/Generative%20AI%20for%20Beginners-8B5CF6?style=for-the-badge&labelColor=E5E7EB&color=8B5CF6)](https://github.com/microsoft/generative-ai-for-beginners?WT.mc_id=academic-105485-koreyst) +[![IA Generativa (.NET)](https://img.shields.io/badge/Generative%20AI%20(.NET)-9333EA?style=for-the-badge&labelColor=E5E7EB&color=9333EA)](https://github.com/microsoft/Generative-AI-for-beginners-dotnet?WT.mc_id=academic-105485-koreyst) +[![IA Generativa (Java)](https://img.shields.io/badge/Generative%20AI%20(Java)-C084FC?style=for-the-badge&labelColor=E5E7EB&color=C084FC)](https://github.com/microsoft/generative-ai-for-beginners-java?WT.mc_id=academic-105485-koreyst) +[![IA Generativa (JavaScript)](https://img.shields.io/badge/Generative%20AI%20(JavaScript)-E879F9?style=for-the-badge&labelColor=E5E7EB&color=E879F9)](https://github.com/microsoft/generative-ai-with-javascript?WT.mc_id=academic-105485-koreyst) + +--- + +### Aprendizado Básico +[![ML para Iniciantes](https://img.shields.io/badge/ML%20for%20Beginners-22C55E?style=for-the-badge&labelColor=E5E7EB&color=22C55E)](https://aka.ms/ml-beginners?WT.mc_id=academic-105485-koreyst) +[![Ciência de Dados para Iniciantes](https://img.shields.io/badge/Data%20Science%20for%20Beginners-84CC16?style=for-the-badge&labelColor=E5E7EB&color=84CC16)](https://aka.ms/datascience-beginners?WT.mc_id=academic-105485-koreyst) +[![IA para Iniciantes](https://img.shields.io/badge/AI%20for%20Beginners-A3E635?style=for-the-badge&labelColor=E5E7EB&color=A3E635)](https://aka.ms/ai-beginners?WT.mc_id=academic-105485-koreyst) +[![Cibersegurança para Iniciantes](https://img.shields.io/badge/Cybersecurity%20for%20Beginners-F97316?style=for-the-badge&labelColor=E5E7EB&color=F97316)](https://github.com/microsoft/Security-101?WT.mc_id=academic-96948-sayoung) +[![Desenvolvimento Web para Iniciantes](https://img.shields.io/badge/Web%20Dev%20for%20Beginners-EC4899?style=for-the-badge&labelColor=E5E7EB&color=EC4899)](https://aka.ms/webdev-beginners?WT.mc_id=academic-105485-koreyst) +[![IoT para Iniciantes](https://img.shields.io/badge/IoT%20for%20Beginners-14B8A6?style=for-the-badge&labelColor=E5E7EB&color=14B8A6)](https://aka.ms/iot-beginners?WT.mc_id=academic-105485-koreyst) +[![Desenvolvimento XR para Iniciantes](https://img.shields.io/badge/XR%20Development%20for%20Beginners-38BDF8?style=for-the-badge&labelColor=E5E7EB&color=38BDF8)](https://github.com/microsoft/xr-development-for-beginners?WT.mc_id=academic-105485-koreyst) + +--- + +### Série Copilot +[![Copilot para Programação Emparelhada com IA](https://img.shields.io/badge/Copilot%20for%20AI%20Paired%20Programming-FACC15?style=for-the-badge&labelColor=E5E7EB&color=FACC15)](https://aka.ms/GitHubCopilotAI?WT.mc_id=academic-105485-koreyst) +[![Copilot para C#/.NET](https://img.shields.io/badge/Copilot%20for%20C%23/.NET-FBBF24?style=for-the-badge&labelColor=E5E7EB&color=FBBF24)](https://github.com/microsoft/mastering-github-copilot-for-dotnet-csharp-developers?WT.mc_id=academic-105485-koreyst) +[![Aventura Copilot](https://img.shields.io/badge/Copilot%20Adventure-FDE68A?style=for-the-badge&labelColor=E5E7EB&color=FDE68A)](https://github.com/microsoft/CopilotAdventures?WT.mc_id=academic-105485-koreyst) + + +## Obter Ajuda + +Se você travar ou tiver alguma dúvida sobre como criar aplicativos de IA. Junte-se a outros aprendizes e desenvolvedores experientes nas discussões sobre MCP. É uma comunidade de apoio onde perguntas são bem-vindas e o conhecimento é compartilhado livremente. + +[![Microsoft Foundry Discord](https://dcbadge.limes.pink/api/server/nTYy5BXMWG)](https://discord.gg/nTYy5BXMWG) + +Se você tiver feedback de produto ou erros enquanto estiver construindo, visite: + +[![Microsoft Foundry Developer Forum](https://img.shields.io/badge/GitHub-Microsoft_Foundry_Developer_Forum-blue?style=for-the-badge&logo=github&color=000000&logoColor=fff)](https://aka.ms/foundry/forum) + +--- + + +**Aviso Legal**: +Este documento foi traduzido utilizando o serviço de tradução por IA [Co-op Translator](https://github.com/Azure/co-op-translator). Embora nos esforcemos pela precisão, esteja ciente de que traduções automáticas podem conter erros ou imprecisões. O documento original em sua língua nativa deve ser considerado a fonte autorizada. Para informações críticas, recomenda-se tradução profissional feita por humanos. Não nos responsabilizamos por quaisquer mal-entendidos ou interpretações errôneas decorrentes do uso desta tradução. + \ No newline at end of file diff --git a/translations/pt-BR/SECURITY.md b/translations/pt-BR/SECURITY.md new file mode 100644 index 000000000..6ef98df80 --- /dev/null +++ b/translations/pt-BR/SECURITY.md @@ -0,0 +1,42 @@ +## Segurança + +A Microsoft leva a segurança de seus produtos e serviços de software muito a sério, incluindo todos os repositórios de código-fonte gerenciados por meio de nossas organizações no GitHub, que incluem [Microsoft](https://github.com/Microsoft), [Azure](https://github.com/Azure), [DotNet](https://github.com/dotnet), [AspNet](https://github.com/aspnet), [Xamarin](https://github.com/xamarin) e [nossas organizações no GitHub](https://opensource.microsoft.com/). + +Se você acredita ter encontrado uma vulnerabilidade de segurança em qualquer repositório pertencente à Microsoft que atenda à [definição de vulnerabilidade de segurança da Microsoft](https://docs.microsoft.com/previous-versions/tn-archive/cc751383(v=technet.10)?WT.mc_id=academic-77952-leestott), por favor, reporte-a conforme descrito abaixo. + +## Relatando Problemas de Segurança + +**Por favor, não reporte vulnerabilidades de segurança por meio de issues públicas no GitHub.** + +Em vez disso, reporte-as ao Microsoft Security Response Center (MSRC) em [https://msrc.microsoft.com/create-report](https://msrc.microsoft.com/create-report). + +Se preferir enviar sem fazer login, envie um e-mail para [secure@microsoft.com](mailto:secure@microsoft.com). Se possível, criptografe sua mensagem com nossa chave PGP; faça o download dela na [página de Chave PGP do Microsoft Security Response Center](https://www.microsoft.com/en-us/msrc/pgp-key-msrc). + +Você deve receber uma resposta dentro de 24 horas. Se, por algum motivo, não receber, entre em contato novamente por e-mail para garantir que sua mensagem original foi recebida. Informações adicionais podem ser encontradas em [microsoft.com/msrc](https://www.microsoft.com/msrc). + +Por favor, inclua as informações solicitadas abaixo (o máximo que puder fornecer) para nos ajudar a entender melhor a natureza e o escopo do possível problema: + + * Tipo de problema (ex.: buffer overflow, SQL injection, cross-site scripting, etc.) + * Caminhos completos dos arquivos de código-fonte relacionados à manifestação do problema + * A localização do código-fonte afetado (tag/branch/commit ou URL direto) + * Qualquer configuração especial necessária para reproduzir o problema + * Instruções passo a passo para reproduzir o problema + * Código de prova de conceito ou exploit (se possível) + * Impacto do problema, incluindo como um atacante poderia explorar o problema + +Essas informações nos ajudarão a priorizar seu relatório mais rapidamente. + +Se você estiver reportando para um programa de recompensa por bugs, relatórios mais completos podem contribuir para um prêmio maior. Por favor, visite nossa página do [Programa de Recompensa por Bugs da Microsoft](https://microsoft.com/msrc/bounty) para mais detalhes sobre nossos programas ativos. + +## Idiomas Preferidos + +Preferimos que todas as comunicações sejam feitas em inglês. + +## Política + +A Microsoft segue o princípio de [Divulgação Coordenada de Vulnerabilidades](https://www.microsoft.com/en-us/msrc/cvd). + +--- + +**Aviso Legal**: +Este documento foi traduzido utilizando o serviço de tradução por IA [Co-op Translator](https://github.com/Azure/co-op-translator). Embora nos esforcemos para garantir a precisão, esteja ciente de que traduções automatizadas podem conter erros ou imprecisões. O documento original em seu idioma nativo deve ser considerado a fonte autoritativa. Para informações críticas, recomenda-se a tradução profissional realizada por humanos. Não nos responsabilizamos por quaisquer mal-entendidos ou interpretações equivocadas decorrentes do uso desta tradução. \ No newline at end of file diff --git a/translations/pt-BR/SUPPORT.md b/translations/pt-BR/SUPPORT.md new file mode 100644 index 000000000..cea6cd5fe --- /dev/null +++ b/translations/pt-BR/SUPPORT.md @@ -0,0 +1,20 @@ +# Suporte +## Como registrar problemas e obter ajuda + +Antes de registrar um problema, verifique nosso [Guia de Solução de Problemas](TROUBLESHOOTING.md) para encontrar soluções para problemas comuns relacionados à instalação, configuração e execução das lições. + +Este projeto utiliza o GitHub Issues para rastrear bugs e solicitações de recursos. Por favor, pesquise os problemas existentes antes de registrar novos para evitar duplicações. Para novos problemas, registre seu bug ou solicitação de recurso como um novo Issue. + +Para obter ajuda e esclarecer dúvidas sobre o uso deste projeto, você também pode: +- Verificar o [Guia de Solução de Problemas](TROUBLESHOOTING.md) +- Visitar nosso [canal de Discussões no Discord #ml-for-beginners](https://aka.ms/foundry/discord) +- Registrar um problema + +## Política de Suporte da Microsoft + +O suporte para este repositório está limitado aos recursos listados acima. + +--- + +**Aviso Legal**: +Este documento foi traduzido utilizando o serviço de tradução por IA [Co-op Translator](https://github.com/Azure/co-op-translator). Embora nos esforcemos para garantir a precisão, esteja ciente de que traduções automatizadas podem conter erros ou imprecisões. O documento original em seu idioma nativo deve ser considerado a fonte oficial. Para informações críticas, recomenda-se a tradução profissional realizada por humanos. Não nos responsabilizamos por quaisquer mal-entendidos ou interpretações equivocadas decorrentes do uso desta tradução. \ No newline at end of file diff --git a/translations/pt-BR/TROUBLESHOOTING.md b/translations/pt-BR/TROUBLESHOOTING.md new file mode 100644 index 000000000..bf482ae03 --- /dev/null +++ b/translations/pt-BR/TROUBLESHOOTING.md @@ -0,0 +1,601 @@ +# Guia de Solução de Problemas + +Este guia ajuda você a resolver problemas comuns ao trabalhar com o currículo de Machine Learning para Iniciantes. Se não encontrar uma solução aqui, consulte nossas [Discussões no Discord](https://aka.ms/foundry/discord) ou [abra uma issue](https://github.com/microsoft/ML-For-Beginners/issues). + +## Índice + +- [Problemas de Instalação](../..) +- [Problemas com Jupyter Notebook](../..) +- [Problemas com Pacotes Python](../..) +- [Problemas com o Ambiente R](../..) +- [Problemas com o Aplicativo de Quiz](../..) +- [Problemas com Dados e Caminhos de Arquivos](../..) +- [Mensagens de Erro Comuns](../..) +- [Problemas de Desempenho](../..) +- [Ambiente e Configuração](../..) + +--- + +## Problemas de Instalação + +### Instalação do Python + +**Problema**: `python: command not found` + +**Solução**: +1. Instale o Python 3.8 ou superior em [python.org](https://www.python.org/downloads/) +2. Verifique a instalação: `python --version` ou `python3 --version` +3. No macOS/Linux, pode ser necessário usar `python3` em vez de `python` + +**Problema**: Múltiplas versões do Python causando conflitos + +**Solução**: +```bash +# Use virtual environments to isolate projects +python -m venv ml-env + +# Activate virtual environment +# On Windows: +ml-env\Scripts\activate +# On macOS/Linux: +source ml-env/bin/activate +``` + +### Instalação do Jupyter + +**Problema**: `jupyter: command not found` + +**Solução**: +```bash +# Install Jupyter +pip install jupyter + +# Or with pip3 +pip3 install jupyter + +# Verify installation +jupyter --version +``` + +**Problema**: O Jupyter não abre no navegador + +**Solução**: +```bash +# Try specifying the browser +jupyter notebook --browser=chrome + +# Or copy the URL with token from terminal and paste in browser manually +# Look for: http://localhost:8888/?token=... +``` + +### Instalação do R + +**Problema**: Pacotes R não instalam + +**Solução**: +```r +# Ensure you have the latest R version +# Install packages with dependencies +install.packages(c("tidyverse", "tidymodels", "caret"), dependencies = TRUE) + +# If compilation fails, try installing binary versions +install.packages("package-name", type = "binary") +``` + +**Problema**: IRkernel não está disponível no Jupyter + +**Solução**: +```r +# In R console +install.packages('IRkernel') +IRkernel::installspec(user = TRUE) +``` + +--- + +## Problemas com Jupyter Notebook + +### Problemas com o Kernel + +**Problema**: Kernel continua morrendo ou reiniciando + +**Solução**: +1. Reinicie o kernel: `Kernel → Restart` +2. Limpe a saída e reinicie: `Kernel → Restart & Clear Output` +3. Verifique problemas de memória (veja [Problemas de Desempenho](../..)) +4. Tente executar as células individualmente para identificar o código problemático + +**Problema**: Kernel Python errado selecionado + +**Solução**: +1. Verifique o kernel atual: `Kernel → Change Kernel` +2. Selecione a versão correta do Python +3. Se o kernel estiver ausente, crie-o: +```bash +python -m ipykernel install --user --name=ml-env +``` + +**Problema**: Kernel não inicia + +**Solução**: +```bash +# Reinstall ipykernel +pip uninstall ipykernel +pip install ipykernel + +# Register the kernel again +python -m ipykernel install --user +``` + +### Problemas com Células do Notebook + +**Problema**: Células estão executando, mas não mostram saída + +**Solução**: +1. Verifique se a célula ainda está em execução (procure o indicador `[*]`) +2. Reinicie o kernel e execute todas as células: `Kernel → Restart & Run All` +3. Verifique o console do navegador para erros de JavaScript (F12) + +**Problema**: Não é possível executar células - sem resposta ao clicar em "Run" + +**Solução**: +1. Verifique se o servidor Jupyter ainda está em execução no terminal +2. Atualize a página do navegador +3. Feche e reabra o notebook +4. Reinicie o servidor Jupyter + +--- + +## Problemas com Pacotes Python + +### Erros de Importação + +**Problema**: `ModuleNotFoundError: No module named 'sklearn'` + +**Solução**: +```bash +pip install scikit-learn + +# Common ML packages for this course +pip install scikit-learn pandas numpy matplotlib seaborn +``` + +**Problema**: `ImportError: cannot import name 'X' from 'sklearn'` + +**Solução**: +```bash +# Update scikit-learn to latest version +pip install --upgrade scikit-learn + +# Check version +python -c "import sklearn; print(sklearn.__version__)" +``` + +### Conflitos de Versão + +**Problema**: Erros de incompatibilidade de versão de pacotes + +**Solução**: +```bash +# Create a new virtual environment +python -m venv fresh-env +source fresh-env/bin/activate # or fresh-env\Scripts\activate on Windows + +# Install packages fresh +pip install jupyter scikit-learn pandas numpy matplotlib seaborn + +# If specific version needed +pip install scikit-learn==1.3.0 +``` + +**Problema**: `pip install` falha com erros de permissão + +**Solução**: +```bash +# Install for current user only +pip install --user package-name + +# Or use virtual environment (recommended) +python -m venv venv +source venv/bin/activate +pip install package-name +``` + +### Problemas ao Carregar Dados + +**Problema**: `FileNotFoundError` ao carregar arquivos CSV + +**Solução**: +```python +import os +# Check current working directory +print(os.getcwd()) + +# Use relative paths from notebook location +df = pd.read_csv('../../data/filename.csv') + +# Or use absolute paths +df = pd.read_csv('/full/path/to/data/filename.csv') +``` + +--- + +## Problemas com o Ambiente R + +### Instalação de Pacotes + +**Problema**: Instalação de pacotes falha com erros de compilação + +**Solução**: +```r +# Install binary version (Windows/macOS) +install.packages("package-name", type = "binary") + +# Update R to latest version if packages require it +# Check R version +R.version.string + +# Install system dependencies (Linux) +# For Ubuntu/Debian, in terminal: +# sudo apt-get install r-base-dev +``` + +**Problema**: `tidyverse` não instala + +**Solução**: +```r +# Install dependencies first +install.packages(c("rlang", "vctrs", "pillar")) + +# Then install tidyverse +install.packages("tidyverse") + +# Or install components individually +install.packages(c("dplyr", "ggplot2", "tidyr", "readr")) +``` + +### Problemas com RMarkdown + +**Problema**: RMarkdown não renderiza + +**Solução**: +```r +# Install/update rmarkdown +install.packages("rmarkdown") + +# Install pandoc if needed +install.packages("pandoc") + +# For PDF output, install tinytex +install.packages("tinytex") +tinytex::install_tinytex() +``` + +--- + +## Problemas com o Aplicativo de Quiz + +### Construção e Instalação + +**Problema**: `npm install` falha + +**Solução**: +```bash +# Clear npm cache +npm cache clean --force + +# Remove node_modules and package-lock.json +rm -rf node_modules package-lock.json + +# Reinstall +npm install + +# If still fails, try with legacy peer deps +npm install --legacy-peer-deps +``` + +**Problema**: Porta 8080 já está em uso + +**Solução**: +```bash +# Use different port +npm run serve -- --port 8081 + +# Or find and kill process using port 8080 +# On Linux/macOS: +lsof -ti:8080 | xargs kill -9 + +# On Windows: +netstat -ano | findstr :8080 +taskkill /PID /F +``` + +### Erros de Construção + +**Problema**: `npm run build` falha + +**Solução**: +```bash +# Check Node.js version (should be 14+) +node --version + +# Update Node.js if needed +# Then clean install +rm -rf node_modules package-lock.json +npm install +npm run build +``` + +**Problema**: Erros de lint impedindo a construção + +**Solução**: +```bash +# Fix auto-fixable issues +npm run lint -- --fix + +# Or temporarily disable linting in build +# (not recommended for production) +``` + +--- + +## Problemas com Dados e Caminhos de Arquivos + +### Problemas com Caminhos + +**Problema**: Arquivos de dados não encontrados ao executar notebooks + +**Solução**: +1. **Sempre execute notebooks a partir do diretório onde estão localizados** + ```bash + cd /path/to/lesson/folder + jupyter notebook + ``` + +2. **Verifique os caminhos relativos no código** + ```python + # Correct path from notebook location + df = pd.read_csv('../data/filename.csv') + + # Not from your terminal location + ``` + +3. **Use caminhos absolutos, se necessário** + ```python + import os + base_path = os.path.dirname(os.path.abspath(__file__)) + data_path = os.path.join(base_path, 'data', 'filename.csv') + ``` + +### Arquivos de Dados Ausentes + +**Problema**: Arquivos de conjunto de dados estão ausentes + +**Solução**: +1. Verifique se os dados deveriam estar no repositório - a maioria dos conjuntos de dados está incluída +2. Algumas lições podem exigir o download de dados - consulte o README da lição +3. Certifique-se de ter puxado as alterações mais recentes: + ```bash + git pull origin main + ``` + +--- + +## Mensagens de Erro Comuns + +### Erros de Memória + +**Erro**: `MemoryError` ou kernel morre ao processar dados + +**Solução**: +```python +# Load data in chunks +for chunk in pd.read_csv('large_file.csv', chunksize=10000): + process(chunk) + +# Or read only needed columns +df = pd.read_csv('file.csv', usecols=['col1', 'col2']) + +# Free memory when done +del large_dataframe +import gc +gc.collect() +``` + +### Avisos de Convergência + +**Aviso**: `ConvergenceWarning: Maximum number of iterations reached` + +**Solução**: +```python +from sklearn.linear_model import LogisticRegression + +# Increase max iterations +model = LogisticRegression(max_iter=1000) + +# Or scale your features first +from sklearn.preprocessing import StandardScaler +scaler = StandardScaler() +X_scaled = scaler.fit_transform(X) +``` + +### Problemas com Gráficos + +**Problema**: Gráficos não aparecem no Jupyter + +**Solução**: +```python +# Enable inline plotting +%matplotlib inline + +# Import pyplot +import matplotlib.pyplot as plt + +# Show plot explicitly +plt.plot(data) +plt.show() +``` + +**Problema**: Gráficos do Seaborn parecem diferentes ou geram erros + +**Solução**: +```python +import warnings +warnings.filterwarnings('ignore', category=UserWarning) + +# Update to compatible version +# pip install --upgrade seaborn matplotlib +``` + +### Erros de Unicode/Codificação + +**Problema**: `UnicodeDecodeError` ao ler arquivos + +**Solução**: +```python +# Specify encoding explicitly +df = pd.read_csv('file.csv', encoding='utf-8') + +# Or try different encoding +df = pd.read_csv('file.csv', encoding='latin-1') + +# For errors='ignore' to skip problematic characters +df = pd.read_csv('file.csv', encoding='utf-8', errors='ignore') +``` + +--- + +## Problemas de Desempenho + +### Execução Lenta de Notebooks + +**Problema**: Notebooks estão muito lentos para executar + +**Solução**: +1. **Reinicie o kernel para liberar memória**: `Kernel → Restart` +2. **Feche notebooks não utilizados** para liberar recursos +3. **Use amostras menores de dados para testes**: + ```python + # Work with subset during development + df_sample = df.sample(n=1000) + ``` +4. **Faça o perfil do seu código** para identificar gargalos: + ```python + %time operation() # Time single operation + %timeit operation() # Time with multiple runs + ``` + +### Uso Alto de Memória + +**Problema**: Sistema ficando sem memória + +**Solução**: +```python +# Check memory usage +df.info(memory_usage='deep') + +# Optimize data types +df['column'] = df['column'].astype('int32') # Instead of int64 + +# Drop unnecessary columns +df = df[['col1', 'col2']] # Keep only needed columns + +# Process in batches +for batch in np.array_split(df, 10): + process(batch) +``` + +--- + +## Ambiente e Configuração + +### Problemas com Ambiente Virtual + +**Problema**: Ambiente virtual não ativa + +**Solução**: +```bash +# Windows +python -m venv venv +venv\Scripts\activate.bat + +# macOS/Linux +python3 -m venv venv +source venv/bin/activate + +# Check if activated (should show venv name in prompt) +which python # Should point to venv python +``` + +**Problema**: Pacotes instalados, mas não encontrados no notebook + +**Solução**: +```bash +# Ensure notebook uses the correct kernel +# Install ipykernel in your venv +pip install ipykernel +python -m ipykernel install --user --name=ml-env --display-name="Python (ml-env)" + +# In Jupyter: Kernel → Change Kernel → Python (ml-env) +``` + +### Problemas com Git + +**Problema**: Não é possível puxar as alterações mais recentes - conflitos de merge + +**Solução**: +```bash +# Stash your changes +git stash + +# Pull latest +git pull origin main + +# Reapply your changes +git stash pop + +# If conflicts, resolve manually or: +git checkout --theirs path/to/file # Take remote version +git checkout --ours path/to/file # Keep your version +``` + +### Integração com VS Code + +**Problema**: Notebooks Jupyter não abrem no VS Code + +**Solução**: +1. Instale a extensão Python no VS Code +2. Instale a extensão Jupyter no VS Code +3. Selecione o interpretador Python correto: `Ctrl+Shift+P` → "Python: Select Interpreter" +4. Reinicie o VS Code + +--- + +## Recursos Adicionais + +- **Discussões no Discord**: [Faça perguntas e compartilhe soluções no canal #ml-for-beginners](https://aka.ms/foundry/discord) +- **Microsoft Learn**: [Módulos de ML para Iniciantes](https://learn.microsoft.com/en-us/collections/qrqzamz1nn2wx3?WT.mc_id=academic-77952-bethanycheum) +- **Tutoriais em Vídeo**: [Playlist no YouTube](https://aka.ms/ml-beginners-videos) +- **Rastreador de Issues**: [Reporte bugs](https://github.com/microsoft/ML-For-Beginners/issues) + +--- + +## Ainda com Problemas? + +Se você tentou as soluções acima e ainda está enfrentando problemas: + +1. **Pesquise issues existentes**: [GitHub Issues](https://github.com/microsoft/ML-For-Beginners/issues) +2. **Verifique discussões no Discord**: [Discussões no Discord](https://aka.ms/foundry/discord) +3. **Abra uma nova issue**: Inclua: + - Seu sistema operacional e versão + - Versão do Python/R + - Mensagem de erro (traceback completo) + - Passos para reproduzir o problema + - O que você já tentou + +Estamos aqui para ajudar! 🚀 + +--- + +**Aviso Legal**: +Este documento foi traduzido utilizando o serviço de tradução por IA [Co-op Translator](https://github.com/Azure/co-op-translator). Embora nos esforcemos para garantir a precisão, esteja ciente de que traduções automatizadas podem conter erros ou imprecisões. O documento original em seu idioma nativo deve ser considerado a fonte oficial. Para informações críticas, recomenda-se a tradução profissional realizada por humanos. Não nos responsabilizamos por quaisquer mal-entendidos ou interpretações equivocadas decorrentes do uso desta tradução. \ No newline at end of file diff --git a/translations/pt-BR/docs/_sidebar.md b/translations/pt-BR/docs/_sidebar.md new file mode 100644 index 000000000..247a06ce7 --- /dev/null +++ b/translations/pt-BR/docs/_sidebar.md @@ -0,0 +1,48 @@ +- Introdução + - [Introdução ao Aprendizado de Máquina](../1-Introduction/1-intro-to-ML/README.md) + - [História do Aprendizado de Máquina](../1-Introduction/2-history-of-ML/README.md) + - [Aprendizado de Máquina e Justiça](../1-Introduction/3-fairness/README.md) + - [Técnicas de Aprendizado de Máquina](../1-Introduction/4-techniques-of-ML/README.md) + +- Regressão + - [Ferramentas do Ofício](../2-Regression/1-Tools/README.md) + - [Dados](../2-Regression/2-Data/README.md) + - [Regressão Linear](../2-Regression/3-Linear/README.md) + - [Regressão Logística](../2-Regression/4-Logistic/README.md) + +- Construir um Aplicativo Web + - [Aplicativo Web](../3-Web-App/1-Web-App/README.md) + +- Classificação + - [Introdução à Classificação](../4-Classification/1-Introduction/README.md) + - [Classificadores 1](../4-Classification/2-Classifiers-1/README.md) + - [Classificadores 2](../4-Classification/3-Classifiers-2/README.md) + - [Aprendizado de Máquina Aplicado](../4-Classification/4-Applied/README.md) + +- Agrupamento + - [Visualize seus Dados](../5-Clustering/1-Visualize/README.md) + - [K-Means](../5-Clustering/2-K-Means/README.md) + +- PLN + - [Introdução ao Processamento de Linguagem Natural](../6-NLP/1-Introduction-to-NLP/README.md) + - [Tarefas de PLN](../6-NLP/2-Tasks/README.md) + - [Tradução e Sentimento](../6-NLP/3-Translation-Sentiment/README.md) + - [Avaliações de Hotéis 1](../6-NLP/4-Hotel-Reviews-1/README.md) + - [Avaliações de Hotéis 2](../6-NLP/5-Hotel-Reviews-2/README.md) + +- Previsão de Séries Temporais + - [Introdução à Previsão de Séries Temporais](../7-TimeSeries/1-Introduction/README.md) + - [ARIMA](../7-TimeSeries/2-ARIMA/README.md) + - [SVR](../7-TimeSeries/3-SVR/README.md) + +- Aprendizado por Reforço + - [Q-Learning](../8-Reinforcement/1-QLearning/README.md) + - [Gym](../8-Reinforcement/2-Gym/README.md) + +- Aprendizado de Máquina no Mundo Real + - [Aplicações](../9-Real-World/1-Applications/README.md) + +--- + +**Aviso Legal**: +Este documento foi traduzido utilizando o serviço de tradução por IA [Co-op Translator](https://github.com/Azure/co-op-translator). Embora nos esforcemos para garantir a precisão, esteja ciente de que traduções automatizadas podem conter erros ou imprecisões. O documento original em seu idioma nativo deve ser considerado a fonte autoritativa. Para informações críticas, recomenda-se a tradução profissional realizada por humanos. Não nos responsabilizamos por quaisquer mal-entendidos ou interpretações equivocadas decorrentes do uso desta tradução. \ No newline at end of file diff --git a/translations/pt-BR/for-teachers.md b/translations/pt-BR/for-teachers.md new file mode 100644 index 000000000..c957fd41f --- /dev/null +++ b/translations/pt-BR/for-teachers.md @@ -0,0 +1,28 @@ +## Para Educadores + +Gostaria de usar este currículo em sua sala de aula? Fique à vontade! + +Na verdade, você pode utilizá-lo diretamente no GitHub, usando o GitHub Classroom. + +Para isso, faça um fork deste repositório. Você precisará criar um repositório para cada aula, então será necessário extrair cada pasta em um repositório separado. Dessa forma, [GitHub Classroom](https://classroom.github.com/classrooms) poderá identificar cada aula individualmente. + +Estas [instruções completas](https://github.blog/2020-03-18-set-up-your-digital-classroom-with-github-classroom/) vão te ajudar a configurar sua sala de aula. + +## Usando o repositório como está + +Se você preferir usar este repositório no formato atual, sem utilizar o GitHub Classroom, isso também é possível. Você precisará comunicar aos seus alunos qual aula trabalhar juntos. + +Em um formato online (Zoom, Teams ou outro), você pode criar salas de grupo para os quizzes e orientar os alunos para ajudá-los a se prepararem para aprender. Depois, convide os alunos para os quizzes e peça que enviem suas respostas como 'issues' em um horário determinado. Você pode fazer o mesmo com as tarefas, caso queira que os alunos trabalhem colaborativamente de forma aberta. + +Se preferir um formato mais privado, peça aos seus alunos para fazerem fork do currículo, aula por aula, para seus próprios repositórios privados no GitHub e concederem acesso a você. Assim, eles podem completar quizzes e tarefas de forma privada e enviá-los para você via issues no repositório da sua sala de aula. + +Existem várias maneiras de fazer isso funcionar em um formato de sala de aula online. Por favor, nos informe o que funciona melhor para você! + +## Por favor, compartilhe suas opiniões! + +Queremos que este currículo funcione para você e seus alunos. Por favor, nos envie [feedback](https://forms.microsoft.com/Pages/ResponsePage.aspx?id=v4j5cvGGr0GRqy180BHbR2humCsRZhxNuI79cm6n0hRUQzRVVU9VVlU5UlFLWTRLWlkyQUxORTg5WS4u). + +--- + +**Aviso Legal**: +Este documento foi traduzido utilizando o serviço de tradução por IA [Co-op Translator](https://github.com/Azure/co-op-translator). Embora nos esforcemos para garantir a precisão, esteja ciente de que traduções automatizadas podem conter erros ou imprecisões. O documento original em seu idioma nativo deve ser considerado a fonte autoritativa. Para informações críticas, recomenda-se a tradução profissional realizada por humanos. Não nos responsabilizamos por quaisquer mal-entendidos ou interpretações equivocadas decorrentes do uso desta tradução. \ No newline at end of file diff --git a/translations/pt-BR/quiz-app/README.md b/translations/pt-BR/quiz-app/README.md new file mode 100644 index 000000000..ca455daa3 --- /dev/null +++ b/translations/pt-BR/quiz-app/README.md @@ -0,0 +1,118 @@ +# Questionários + +Esses questionários são os quizzes pré e pós-aula para o currículo de ML em https://aka.ms/ml-beginners + +## Configuração do projeto + +``` +npm install +``` + +### Compila e recarrega automaticamente para desenvolvimento + +``` +npm run serve +``` + +### Compila e minimiza para produção + +``` +npm run build +``` + +### Verifica e corrige arquivos + +``` +npm run lint +``` + +### Personalizar configuração + +Veja [Referência de Configuração](https://cli.vuejs.org/config/). + +Créditos: Agradecimentos à versão original deste aplicativo de questionário: https://github.com/arpan45/simple-quiz-vue + +## Implantando no Azure + +Aqui está um guia passo a passo para ajudá-lo a começar: + +1. Faça um fork do repositório no GitHub +Certifique-se de que o código do seu aplicativo web estático esteja no seu repositório do GitHub. Faça um fork deste repositório. + +2. Crie um Azure Static Web App +- Crie uma [conta no Azure](http://azure.microsoft.com) +- Acesse o [portal do Azure](https://portal.azure.com) +- Clique em “Criar um recurso” e procure por “Static Web App”. +- Clique em “Criar”. + +3. Configure o Static Web App +- Básico: + - Assinatura: Selecione sua assinatura do Azure. + - Grupo de Recursos: Crie um novo grupo de recursos ou use um existente. + - Nome: Forneça um nome para seu aplicativo web estático. + - Região: Escolha a região mais próxima dos seus usuários. + +- #### Detalhes de Implantação: + - Fonte: Selecione “GitHub”. + - Conta do GitHub: Autorize o Azure a acessar sua conta do GitHub. + - Organização: Selecione sua organização no GitHub. + - Repositório: Escolha o repositório que contém seu aplicativo web estático. + - Branch: Selecione o branch do qual deseja implantar. + +- #### Detalhes de Build: + - Presets de Build: Escolha o framework com o qual seu aplicativo foi construído (por exemplo, React, Angular, Vue, etc.). + - Localização do App: Especifique a pasta que contém o código do seu aplicativo (por exemplo, / se estiver na raiz). + - Localização da API: Se você tiver uma API, especifique sua localização (opcional). + - Localização de Saída: Especifique a pasta onde a saída do build é gerada (por exemplo, build ou dist). + +4. Revisar e Criar +Revise suas configurações e clique em “Criar”. O Azure configurará os recursos necessários e criará um workflow do GitHub Actions no seu repositório. + +5. Workflow do GitHub Actions +O Azure criará automaticamente um arquivo de workflow do GitHub Actions no seu repositório (.github/workflows/azure-static-web-apps-.yml). Esse workflow cuidará do processo de build e implantação. + +6. Monitorar a Implantação +Acesse a aba “Actions” no seu repositório do GitHub. +Você verá um workflow em execução. Esse workflow irá construir e implantar seu aplicativo web estático no Azure. +Assim que o workflow for concluído, seu aplicativo estará ativo no URL fornecido pelo Azure. + +### Exemplo de Arquivo de Workflow + +Aqui está um exemplo de como pode ser o arquivo de workflow do GitHub Actions: +name: Azure Static Web Apps CI/CD +``` +on: + push: + branches: + - main + pull_request: + types: [opened, synchronize, reopened, closed] + branches: + - main + +jobs: + build_and_deploy_job: + runs-on: ubuntu-latest + name: Build and Deploy Job + steps: + - uses: actions/checkout@v2 + - name: Build And Deploy + id: builddeploy + uses: Azure/static-web-apps-deploy@v1 + with: + azure_static_web_apps_api_token: ${{ secrets.AZURE_STATIC_WEB_APPS_API_TOKEN }} + repo_token: ${{ secrets.GITHUB_TOKEN }} + action: "upload" + app_location: "/quiz-app" # App source code path + api_location: ""API source code path optional + output_location: "dist" #Built app content directory - optional +``` + +### Recursos Adicionais +- [Documentação do Azure Static Web Apps](https://learn.microsoft.com/azure/static-web-apps/getting-started) +- [Documentação do GitHub Actions](https://docs.github.com/actions/use-cases-and-examples/deploying/deploying-to-azure-static-web-app) + +--- + +**Aviso Legal**: +Este documento foi traduzido utilizando o serviço de tradução por IA [Co-op Translator](https://github.com/Azure/co-op-translator). Embora nos esforcemos para garantir a precisão, esteja ciente de que traduções automatizadas podem conter erros ou imprecisões. O documento original em seu idioma nativo deve ser considerado a fonte autoritativa. Para informações críticas, recomenda-se a tradução profissional realizada por humanos. Não nos responsabilizamos por quaisquer mal-entendidos ou interpretações equivocadas decorrentes do uso desta tradução. \ No newline at end of file diff --git a/translations/pt-BR/sketchnotes/LICENSE.md b/translations/pt-BR/sketchnotes/LICENSE.md new file mode 100644 index 000000000..f20428241 --- /dev/null +++ b/translations/pt-BR/sketchnotes/LICENSE.md @@ -0,0 +1,105 @@ +Direitos, então o banco de dados em que Você incluiu os conteúdos deve ser licenciado sob os mesmos termos desta Licença Pública; + + c. Você não pode oferecer ou impor quaisquer termos ou condições adicionais ou diferentes, ou aplicar Medidas Tecnológicas Eficazes ao banco de dados licenciado ou seus conteúdos que restrinjam o exercício dos Direitos Licenciados por qualquer destinatário do banco de dados licenciado. + + +Seção 5 -- Isenção de Garantias e Limitação de Responsabilidade. + + a. Salvo conforme expressamente estabelecido nesta Licença Pública, na medida máxima permitida pela lei aplicável, o Licenciador oferece o Material Licenciado "como está" e "conforme disponível", sem garantias ou condições de qualquer tipo, seja expressa, implícita, estatutária ou de outra forma, incluindo, sem limitação, garantias ou condições de título, comercialização, adequação a um propósito específico, não violação, ou ausência de defeitos latentes ou outros defeitos, precisão, ou a presença ou ausência de erros, sejam ou não detectáveis. + + b. Na medida máxima permitida pela lei aplicável, em nenhum caso o Licenciador será responsável por Você por qualquer teoria jurídica (incluindo, sem limitação, negligência) ou de outra forma por quaisquer perdas, custos, despesas ou danos resultantes direta ou indiretamente do uso do Material Licenciado, mesmo que o Licenciador tenha sido avisado da possibilidade de tais perdas, custos, despesas ou danos. + + +Seção 6 -- Termo e Rescisão. + + a. Este termo da Licença Pública começa quando Você aceita os Direitos Licenciados e permanece em vigor enquanto os Direitos Autorais e Direitos Similares aplicáveis ao Material Licenciado não expirarem. Se Você não cumprir as condições desta Licença Pública, Seus direitos sob esta Licença Pública terminam automaticamente. + + b. Quando Seu direito sob esta Licença Pública terminar automaticamente, todas as seguintes disposições permanecem em vigor: + + 1. Qualquer licença perpétua concedida por Você sob esta Licença Pública permanecerá em vigor; + + 2. Qualquer disposição desta Licença Pública necessária para interpretar a licença perpétua permanecerá em vigor. + + c. Não obstante o exposto, o Licenciador pode oferecer Você uma permissão individual para restabelecer os Direitos Licenciados sob esta Licença Pública. + + d. Esta Seção 6 não afeta quaisquer direitos que o Licenciador possa ter para buscar recursos por violações desta Licença Pública. + + +Seção 7 -- Outras Condições e Informações. + + a. Cada vez que Você compartilha o Material Licenciado ou Material Adaptado, o Licenciador oferece ao destinatário uma licença para o Material Licenciado sob os mesmos termos e condições desta Licença Pública. + + b. Se qualquer disposição desta Licença Pública for considerada inválida ou inexequível, isso não afetará a validade ou exequibilidade das disposições restantes. + + c. Nenhum termo ou condição adicional ou diferente pode ser imposto por Você ou por qualquer pessoa ao Material Licenciado ou ao Material Adaptado além dos termos desta Licença Pública. + + d. Esta Licença Pública não é uma renúncia de quaisquer direitos sob a lei aplicável. + + +Creative Commons Corporation não é parte desta Licença Pública e não oferece qualquer garantia em relação ao Material Licenciado. Creative Commons não será responsável perante Você ou qualquer outra parte por quaisquer danos, incluindo, sem limitação, quaisquer danos gerais, especiais, incidentais ou consequenciais decorrentes desta Licença Pública ou do uso do Material Licenciado. Não obstante as duas frases anteriores, se Creative Commons tiver expressamente identificado-se como o Licenciador aqui, terá todos os direitos e obrigações do Licenciador. Exceto conforme expressamente permitido sob esta Licença Pública, nenhuma parte pode usar a marca "Creative Commons" ou qualquer outra marca ou logotipo de Creative Commons sem permissão prévia por escrito de Creative Commons. Para evitar dúvidas, esta restrição de marca não constitui parte desta Licença Pública. +Direitos, então o banco de dados no qual você possui Direitos de Banco de Dados Sui Generis (mas não seus conteúdos individuais) é Material Adaptado, + +incluindo para os propósitos da Seção 3(b); e +c. Você deve cumprir as condições da Seção 3(a) se compartilhar todo ou uma parte substancial dos conteúdos do banco de dados. + +Para evitar dúvidas, esta Seção 4 complementa e não substitui suas obrigações sob esta Licença Pública quando os Direitos Licenciados incluem outros Direitos Autorais e Direitos Similares. + +--- + +Seção 5 -- Isenção de Garantias e Limitação de Responsabilidade. + +a. SALVO DISPOSIÇÃO EM CONTRÁRIO ASSUMIDA SEPARADAMENTE PELO LICENCIADOR, NA MEDIDA DO POSSÍVEL, O LICENCIADOR OFERECE O MATERIAL LICENCIADO "COMO ESTÁ" E "CONFORME DISPONÍVEL", E NÃO FAZ REPRESENTAÇÕES OU GARANTIAS DE QUALQUER TIPO RELACIONADAS AO MATERIAL LICENCIADO, SEJA EXPRESSA, IMPLÍCITA, LEGAL OU OUTRA. ISSO INCLUI, SEM LIMITAÇÃO, GARANTIAS DE TÍTULO, COMERCIALIZAÇÃO, ADEQUAÇÃO A UM PROPÓSITO ESPECÍFICO, NÃO VIOLAÇÃO, AUSÊNCIA DE DEFEITOS LATENTES OU OUTROS, PRECISÃO, OU A PRESENÇA OU AUSÊNCIA DE ERROS, SEJAM OU NÃO CONHECIDOS OU DETECTÁVEIS. ONDE ISENÇÕES DE GARANTIAS NÃO SÃO PERMITIDAS TOTAL OU PARCIALMENTE, ESTA ISENÇÃO PODE NÃO SE APLICAR A VOCÊ. + +b. NA MEDIDA DO POSSÍVEL, EM NENHUMA CIRCUNSTÂNCIA O LICENCIADOR SERÁ RESPONSÁVEL PERANTE VOCÊ SOB QUALQUER TEORIA LEGAL (INCLUINDO, SEM LIMITAÇÃO, NEGLIGÊNCIA) OU DE OUTRA FORMA POR QUAISQUER PERDAS DIRETAS, ESPECIAIS, INDIRETAS, INCIDENTAIS, CONSEQUENCIAIS, PUNITIVAS, EXEMPLARES OU OUTROS DANOS, CUSTOS, DESPESAS OU PREJUÍZOS DECORRENTES DESTA LICENÇA PÚBLICA OU DO USO DO MATERIAL LICENCIADO, MESMO QUE O LICENCIADOR TENHA SIDO INFORMADO DA POSSIBILIDADE DE TAIS PERDAS, CUSTOS, DESPESAS OU DANOS. ONDE UMA LIMITAÇÃO DE RESPONSABILIDADE NÃO É PERMITIDA TOTAL OU PARCIALMENTE, ESTA LIMITAÇÃO PODE NÃO SE APLICAR A VOCÊ. + +c. A isenção de garantias e a limitação de responsabilidade fornecidas acima devem ser interpretadas de maneira que, na medida do possível, mais se aproximem de uma isenção absoluta e renúncia de toda responsabilidade. + +--- + +Seção 6 -- Vigência e Rescisão. + +a. Esta Licença Pública se aplica durante o período dos Direitos Autorais e Direitos Similares licenciados aqui. No entanto, se você não cumprir esta Licença Pública, seus direitos sob esta Licença Pública serão automaticamente rescindidos. + +b. Quando seu direito de usar o Material Licenciado tiver sido rescindido sob a Seção 6(a), ele será restabelecido: + +1. automaticamente na data em que a violação for corrigida, desde que seja corrigida dentro de 30 dias após sua descoberta da violação; ou +2. mediante restabelecimento expresso pelo Licenciador. + +Para evitar dúvidas, esta Seção 6(b) não afeta qualquer direito que o Licenciador possa ter de buscar reparações por suas violações desta Licença Pública. + +c. Para evitar dúvidas, o Licenciador também pode oferecer o Material Licenciado sob termos ou condições separadas ou parar de distribuir o Material Licenciado a qualquer momento; no entanto, isso não encerrará esta Licença Pública. + +d. As Seções 1, 5, 6, 7 e 8 sobrevivem à rescisão desta Licença Pública. + +--- + +Seção 7 -- Outros Termos e Condições. + +a. O Licenciador não será vinculado por quaisquer termos ou condições adicionais ou diferentes comunicados por você, a menos que expressamente acordado. + +b. Quaisquer arranjos, entendimentos ou acordos relacionados ao Material Licenciado não declarados aqui são separados e independentes dos termos e condições desta Licença Pública. + +--- + +Seção 8 -- Interpretação. + +a. Para evitar dúvidas, esta Licença Pública não reduz, limita, restringe ou impõe condições sobre qualquer uso do Material Licenciado que possa ser legalmente feito sem permissão sob esta Licença Pública. + +b. Na medida do possível, se qualquer disposição desta Licença Pública for considerada inexequível, ela será automaticamente reformada na extensão mínima necessária para torná-la exequível. Se a disposição não puder ser reformada, ela será separada desta Licença Pública sem afetar a exequibilidade dos termos e condições restantes. + +c. Nenhum termo ou condição desta Licença Pública será renunciado e nenhum descumprimento será consentido, a menos que expressamente acordado pelo Licenciador. + +d. Nada nesta Licença Pública constitui ou pode ser interpretado como uma limitação ou renúncia de quaisquer privilégios e imunidades que se aplicam ao Licenciador ou a você, incluindo em relação aos processos legais de qualquer jurisdição ou autoridade. + +--- + +======================================================================= + +Creative Commons não é parte de suas licenças públicas. Não obstante, a Creative Commons pode optar por aplicar uma de suas licenças públicas ao material que publica e, nesses casos, será considerada o "Licenciador". O texto das licenças públicas da Creative Commons é dedicado ao domínio público sob a Dedicação ao Domínio Público CC0. Exceto para o propósito limitado de indicar que o material é compartilhado sob uma licença pública da Creative Commons ou conforme permitido pelas políticas da Creative Commons publicadas em creativecommons.org/policies, a Creative Commons não autoriza o uso da marca "Creative Commons" ou qualquer outra marca ou logotipo da Creative Commons sem seu consentimento prévio por escrito, incluindo, sem limitação, em conexão com quaisquer modificações não autorizadas de suas licenças públicas ou quaisquer outros arranjos, entendimentos ou acordos relacionados ao uso do material licenciado. Para evitar dúvidas, este parágrafo não faz parte das licenças públicas. + +A Creative Commons pode ser contatada em creativecommons.org. + +--- + +**Aviso Legal**: +Este documento foi traduzido utilizando o serviço de tradução por IA [Co-op Translator](https://github.com/Azure/co-op-translator). Embora nos esforcemos para garantir a precisão, esteja ciente de que traduções automatizadas podem conter erros ou imprecisões. O documento original em seu idioma nativo deve ser considerado a fonte autoritativa. Para informações críticas, recomenda-se a tradução profissional realizada por humanos. Não nos responsabilizamos por quaisquer mal-entendidos ou interpretações equivocadas decorrentes do uso desta tradução. \ No newline at end of file diff --git a/translations/pt-BR/sketchnotes/README.md b/translations/pt-BR/sketchnotes/README.md new file mode 100644 index 000000000..ee7675b0c --- /dev/null +++ b/translations/pt-BR/sketchnotes/README.md @@ -0,0 +1,12 @@ +Todas as sketchnotes do currículo podem ser baixadas aqui. + +🖨 Para impressão em alta resolução, as versões TIFF estão disponíveis neste [repositório](https://github.com/girliemac/a-picture-is-worth-a-1000-words/tree/main/ml/tiff). + +🎨 Criado por: [Tomomi Imura](https://github.com/girliemac) (Twitter: [@girlie_mac](https://twitter.com/girlie_mac)) + +[![CC BY-SA 4.0](https://img.shields.io/badge/License-CC%20BY--SA%204.0-lightgrey.svg)](https://creativecommons.org/licenses/by-sa/4.0/) + +--- + +**Aviso Legal**: +Este documento foi traduzido utilizando o serviço de tradução por IA [Co-op Translator](https://github.com/Azure/co-op-translator). Embora nos esforcemos para garantir a precisão, esteja ciente de que traduções automatizadas podem conter erros ou imprecisões. O documento original em seu idioma nativo deve ser considerado a fonte autoritativa. Para informações críticas, recomenda-se a tradução profissional realizada por humanos. Não nos responsabilizamos por quaisquer mal-entendidos ou interpretações equivocadas decorrentes do uso desta tradução. \ No newline at end of file diff --git a/translations/pt-PT/.co-op-translator.json b/translations/pt-PT/.co-op-translator.json new file mode 100644 index 000000000..c645163b0 --- /dev/null +++ b/translations/pt-PT/.co-op-translator.json @@ -0,0 +1,596 @@ +{ + "1-Introduction/1-intro-to-ML/README.md": { + "original_hash": "69389392fa6346e0dfa30f664b7b6fec", + "translation_date": "2025-09-05T08:44:57+00:00", + "source_file": "1-Introduction/1-intro-to-ML/README.md", + "language_code": "pt-PT" + }, + "1-Introduction/1-intro-to-ML/assignment.md": { + "original_hash": "4c4698044bb8af52cfb6388a4ee0e53b", + "translation_date": "2025-09-03T17:48:53+00:00", + "source_file": "1-Introduction/1-intro-to-ML/assignment.md", + "language_code": "pt-PT" + }, + "1-Introduction/2-history-of-ML/README.md": { + "original_hash": "6a05fec147e734c3e6bfa54505648e2b", + "translation_date": "2025-09-05T08:45:22+00:00", + "source_file": "1-Introduction/2-history-of-ML/README.md", + "language_code": "pt-PT" + }, + "1-Introduction/2-history-of-ML/assignment.md": { + "original_hash": "eb6e4d5afd1b21a57d2b9e6d0aac3969", + "translation_date": "2025-09-03T17:52:53+00:00", + "source_file": "1-Introduction/2-history-of-ML/assignment.md", + "language_code": "pt-PT" + }, + "1-Introduction/3-fairness/README.md": { + "original_hash": "9a6b702d1437c0467e3c5c28d763dac2", + "translation_date": "2025-09-05T08:43:41+00:00", + "source_file": "1-Introduction/3-fairness/README.md", + "language_code": "pt-PT" + }, + "1-Introduction/3-fairness/assignment.md": { + "original_hash": "dbda60e7b1fe5f18974e7858eff0004e", + "translation_date": "2025-09-03T17:41:05+00:00", + "source_file": "1-Introduction/3-fairness/assignment.md", + "language_code": "pt-PT" + }, + "1-Introduction/4-techniques-of-ML/README.md": { + "original_hash": "9d91f3af3758fdd4569fb410575995ef", + "translation_date": "2025-09-05T08:44:28+00:00", + "source_file": "1-Introduction/4-techniques-of-ML/README.md", + "language_code": "pt-PT" + }, + "1-Introduction/4-techniques-of-ML/assignment.md": { + "original_hash": "70d65aeddc06170bc1aed5b27805f930", + "translation_date": "2025-09-03T17:45:19+00:00", + "source_file": "1-Introduction/4-techniques-of-ML/assignment.md", + "language_code": "pt-PT" + }, + "1-Introduction/README.md": { + "original_hash": "cf8ecc83f28e5b98051d2179eca08e08", + "translation_date": "2025-09-03T17:33:50+00:00", + "source_file": "1-Introduction/README.md", + "language_code": "pt-PT" + }, + "2-Regression/1-Tools/README.md": { + "original_hash": "fa81d226c71d5af7a2cade31c1c92b88", + "translation_date": "2025-09-05T08:37:58+00:00", + "source_file": "2-Regression/1-Tools/README.md", + "language_code": "pt-PT" + }, + "2-Regression/1-Tools/assignment.md": { + "original_hash": "74a5cf83e4ebc302afbcbc4f418afd0a", + "translation_date": "2025-09-03T16:40:39+00:00", + "source_file": "2-Regression/1-Tools/assignment.md", + "language_code": "pt-PT" + }, + "2-Regression/1-Tools/solution/Julia/README.md": { + "original_hash": "a39c15d63f3b2795ee2284a82b986b93", + "translation_date": "2025-09-03T16:41:13+00:00", + "source_file": "2-Regression/1-Tools/solution/Julia/README.md", + "language_code": "pt-PT" + }, + "2-Regression/2-Data/README.md": { + "original_hash": "7c077988328ebfe33b24d07945f16eca", + "translation_date": "2025-09-05T08:38:38+00:00", + "source_file": "2-Regression/2-Data/README.md", + "language_code": "pt-PT" + }, + "2-Regression/2-Data/assignment.md": { + "original_hash": "4485a1ed4dd1b5647365e3d87456515d", + "translation_date": "2025-09-03T16:45:03+00:00", + "source_file": "2-Regression/2-Data/assignment.md", + "language_code": "pt-PT" + }, + "2-Regression/2-Data/solution/Julia/README.md": { + "original_hash": "a39c15d63f3b2795ee2284a82b986b93", + "translation_date": "2025-09-03T16:45:32+00:00", + "source_file": "2-Regression/2-Data/solution/Julia/README.md", + "language_code": "pt-PT" + }, + "2-Regression/3-Linear/README.md": { + "original_hash": "40e64f004f3cb50aa1d8661672d3cd92", + "translation_date": "2025-09-05T08:35:13+00:00", + "source_file": "2-Regression/3-Linear/README.md", + "language_code": "pt-PT" + }, + "2-Regression/3-Linear/assignment.md": { + "original_hash": "cc471fa89c293bc735dd3a9a0fb79b1b", + "translation_date": "2025-09-03T16:25:01+00:00", + "source_file": "2-Regression/3-Linear/assignment.md", + "language_code": "pt-PT" + }, + "2-Regression/3-Linear/solution/Julia/README.md": { + "original_hash": "a39c15d63f3b2795ee2284a82b986b93", + "translation_date": "2025-09-03T16:25:30+00:00", + "source_file": "2-Regression/3-Linear/solution/Julia/README.md", + "language_code": "pt-PT" + }, + "2-Regression/4-Logistic/README.md": { + "original_hash": "abf86d845c84330bce205a46b382ec88", + "translation_date": "2025-09-05T08:37:08+00:00", + "source_file": "2-Regression/4-Logistic/README.md", + "language_code": "pt-PT" + }, + "2-Regression/4-Logistic/assignment.md": { + "original_hash": "8af40209a41494068c1f42b14c0b450d", + "translation_date": "2025-09-03T16:34:59+00:00", + "source_file": "2-Regression/4-Logistic/assignment.md", + "language_code": "pt-PT" + }, + "2-Regression/4-Logistic/solution/Julia/README.md": { + "original_hash": "a39c15d63f3b2795ee2284a82b986b93", + "translation_date": "2025-09-03T16:35:29+00:00", + "source_file": "2-Regression/4-Logistic/solution/Julia/README.md", + "language_code": "pt-PT" + }, + "2-Regression/README.md": { + "original_hash": "508582278dbb8edd2a8a80ac96ef416c", + "translation_date": "2025-09-03T16:17:17+00:00", + "source_file": "2-Regression/README.md", + "language_code": "pt-PT" + }, + "3-Web-App/1-Web-App/README.md": { + "original_hash": "e0b75f73e4a90d45181dc5581fe2ef5c", + "translation_date": "2025-09-05T08:45:52+00:00", + "source_file": "3-Web-App/1-Web-App/README.md", + "language_code": "pt-PT" + }, + "3-Web-App/1-Web-App/assignment.md": { + "original_hash": "a8e8ae10be335cbc745b75ee552317ff", + "translation_date": "2025-09-03T17:57:40+00:00", + "source_file": "3-Web-App/1-Web-App/assignment.md", + "language_code": "pt-PT" + }, + "3-Web-App/README.md": { + "original_hash": "9836ff53cfef716ddfd70e06c5f43436", + "translation_date": "2025-09-03T17:53:31+00:00", + "source_file": "3-Web-App/README.md", + "language_code": "pt-PT" + }, + "4-Classification/1-Introduction/README.md": { + "original_hash": "aaf391d922bd6de5efba871d514c6d47", + "translation_date": "2025-09-05T08:48:08+00:00", + "source_file": "4-Classification/1-Introduction/README.md", + "language_code": "pt-PT" + }, + "4-Classification/1-Introduction/assignment.md": { + "original_hash": "b2a01912beb24cfb0007f83594dba801", + "translation_date": "2025-09-03T18:15:46+00:00", + "source_file": "4-Classification/1-Introduction/assignment.md", + "language_code": "pt-PT" + }, + "4-Classification/1-Introduction/solution/Julia/README.md": { + "original_hash": "a39c15d63f3b2795ee2284a82b986b93", + "translation_date": "2025-09-03T18:16:19+00:00", + "source_file": "4-Classification/1-Introduction/solution/Julia/README.md", + "language_code": "pt-PT" + }, + "4-Classification/2-Classifiers-1/README.md": { + "original_hash": "1a6e9e46b34a2e559fbbfc1f95397c7b", + "translation_date": "2025-09-05T08:46:23+00:00", + "source_file": "4-Classification/2-Classifiers-1/README.md", + "language_code": "pt-PT" + }, + "4-Classification/2-Classifiers-1/assignment.md": { + "original_hash": "de6025f96841498b0577e9d1aee18d1f", + "translation_date": "2025-09-03T18:05:08+00:00", + "source_file": "4-Classification/2-Classifiers-1/assignment.md", + "language_code": "pt-PT" + }, + "4-Classification/2-Classifiers-1/solution/Julia/README.md": { + "original_hash": "a39c15d63f3b2795ee2284a82b986b93", + "translation_date": "2025-09-03T18:05:38+00:00", + "source_file": "4-Classification/2-Classifiers-1/solution/Julia/README.md", + "language_code": "pt-PT" + }, + "4-Classification/3-Classifiers-2/README.md": { + "original_hash": "49047911108adc49d605cddfb455749c", + "translation_date": "2025-09-05T08:47:46+00:00", + "source_file": "4-Classification/3-Classifiers-2/README.md", + "language_code": "pt-PT" + }, + "4-Classification/3-Classifiers-2/assignment.md": { + "original_hash": "58dfdaf79fb73f7d34b22bdbacf57329", + "translation_date": "2025-09-03T18:11:49+00:00", + "source_file": "4-Classification/3-Classifiers-2/assignment.md", + "language_code": "pt-PT" + }, + "4-Classification/3-Classifiers-2/solution/Julia/README.md": { + "original_hash": "a39c15d63f3b2795ee2284a82b986b93", + "translation_date": "2025-09-03T18:12:21+00:00", + "source_file": "4-Classification/3-Classifiers-2/solution/Julia/README.md", + "language_code": "pt-PT" + }, + "4-Classification/4-Applied/README.md": { + "original_hash": "61bdec27ed2da8b098cd9065405d9bb0", + "translation_date": "2025-09-05T08:47:20+00:00", + "source_file": "4-Classification/4-Applied/README.md", + "language_code": "pt-PT" + }, + "4-Classification/4-Applied/assignment.md": { + "original_hash": "799ed651e2af0a7cad17c6268db11578", + "translation_date": "2025-09-03T18:08:58+00:00", + "source_file": "4-Classification/4-Applied/assignment.md", + "language_code": "pt-PT" + }, + "4-Classification/README.md": { + "original_hash": "74e809ffd1e613a1058bbc3e9600859e", + "translation_date": "2025-09-03T17:59:39+00:00", + "source_file": "4-Classification/README.md", + "language_code": "pt-PT" + }, + "5-Clustering/1-Visualize/README.md": { + "original_hash": "730225ea274c9174fe688b21d421539d", + "translation_date": "2025-09-05T08:40:50+00:00", + "source_file": "5-Clustering/1-Visualize/README.md", + "language_code": "pt-PT" + }, + "5-Clustering/1-Visualize/assignment.md": { + "original_hash": "589fa015a5e7d9e67bd629f7d47b53de", + "translation_date": "2025-09-03T17:16:25+00:00", + "source_file": "5-Clustering/1-Visualize/assignment.md", + "language_code": "pt-PT" + }, + "5-Clustering/1-Visualize/solution/Julia/README.md": { + "original_hash": "a39c15d63f3b2795ee2284a82b986b93", + "translation_date": "2025-09-03T17:16:57+00:00", + "source_file": "5-Clustering/1-Visualize/solution/Julia/README.md", + "language_code": "pt-PT" + }, + "5-Clustering/2-K-Means/README.md": { + "original_hash": "7cdd17338d9bbd7e2171c2cd462eb081", + "translation_date": "2025-09-05T08:41:51+00:00", + "source_file": "5-Clustering/2-K-Means/README.md", + "language_code": "pt-PT" + }, + "5-Clustering/2-K-Means/assignment.md": { + "original_hash": "b8e17eff34ad1680eba2a5d3cf9ffc41", + "translation_date": "2025-09-03T17:20:01+00:00", + "source_file": "5-Clustering/2-K-Means/assignment.md", + "language_code": "pt-PT" + }, + "5-Clustering/2-K-Means/solution/Julia/README.md": { + "original_hash": "a39c15d63f3b2795ee2284a82b986b93", + "translation_date": "2025-09-03T17:20:30+00:00", + "source_file": "5-Clustering/2-K-Means/solution/Julia/README.md", + "language_code": "pt-PT" + }, + "5-Clustering/README.md": { + "original_hash": "b28a3a4911584062772c537b653ebbc7", + "translation_date": "2025-09-03T17:02:00+00:00", + "source_file": "5-Clustering/README.md", + "language_code": "pt-PT" + }, + "6-NLP/1-Introduction-to-NLP/README.md": { + "original_hash": "1c2ec40cf55c98a028a359c27ef7e45a", + "translation_date": "2025-09-05T08:52:17+00:00", + "source_file": "6-NLP/1-Introduction-to-NLP/README.md", + "language_code": "pt-PT" + }, + "6-NLP/1-Introduction-to-NLP/assignment.md": { + "original_hash": "1d7583e8046dacbb0c056d5ba0a71b16", + "translation_date": "2025-09-03T19:02:44+00:00", + "source_file": "6-NLP/1-Introduction-to-NLP/assignment.md", + "language_code": "pt-PT" + }, + "6-NLP/2-Tasks/README.md": { + "original_hash": "5f3cb462e3122e1afe7ab0050ccf2bd3", + "translation_date": "2025-09-05T08:50:27+00:00", + "source_file": "6-NLP/2-Tasks/README.md", + "language_code": "pt-PT" + }, + "6-NLP/2-Tasks/assignment.md": { + "original_hash": "2efc4c2aba5ed06c780c05539c492ae3", + "translation_date": "2025-09-03T18:50:02+00:00", + "source_file": "6-NLP/2-Tasks/assignment.md", + "language_code": "pt-PT" + }, + "6-NLP/3-Translation-Sentiment/README.md": { + "original_hash": "be03c8182982b87ced155e4e9d1438e8", + "translation_date": "2025-09-05T08:52:47+00:00", + "source_file": "6-NLP/3-Translation-Sentiment/README.md", + "language_code": "pt-PT" + }, + "6-NLP/3-Translation-Sentiment/assignment.md": { + "original_hash": "9d2a734deb904caff310d1a999c6bd7a", + "translation_date": "2025-09-03T19:08:02+00:00", + "source_file": "6-NLP/3-Translation-Sentiment/assignment.md", + "language_code": "pt-PT" + }, + "6-NLP/3-Translation-Sentiment/solution/Julia/README.md": { + "original_hash": "a39c15d63f3b2795ee2284a82b986b93", + "translation_date": "2025-09-03T19:08:56+00:00", + "source_file": "6-NLP/3-Translation-Sentiment/solution/Julia/README.md", + "language_code": "pt-PT" + }, + "6-NLP/3-Translation-Sentiment/solution/R/README.md": { + "original_hash": "81db6ff2cf6e62fbe2340b094bb9509e", + "translation_date": "2025-09-03T19:08:33+00:00", + "source_file": "6-NLP/3-Translation-Sentiment/solution/R/README.md", + "language_code": "pt-PT" + }, + "6-NLP/4-Hotel-Reviews-1/README.md": { + "original_hash": "8d32dadeda93c6fb5c43619854882ab1", + "translation_date": "2025-09-05T08:50:55+00:00", + "source_file": "6-NLP/4-Hotel-Reviews-1/README.md", + "language_code": "pt-PT" + }, + "6-NLP/4-Hotel-Reviews-1/assignment.md": { + "original_hash": "bf39bceb833cd628f224941dca8041df", + "translation_date": "2025-09-03T18:57:40+00:00", + "source_file": "6-NLP/4-Hotel-Reviews-1/assignment.md", + "language_code": "pt-PT" + }, + "6-NLP/4-Hotel-Reviews-1/solution/Julia/README.md": { + "original_hash": "a39c15d63f3b2795ee2284a82b986b93", + "translation_date": "2025-09-03T18:58:27+00:00", + "source_file": "6-NLP/4-Hotel-Reviews-1/solution/Julia/README.md", + "language_code": "pt-PT" + }, + "6-NLP/4-Hotel-Reviews-1/solution/R/README.md": { + "original_hash": "81db6ff2cf6e62fbe2340b094bb9509e", + "translation_date": "2025-09-03T18:58:07+00:00", + "source_file": "6-NLP/4-Hotel-Reviews-1/solution/R/README.md", + "language_code": "pt-PT" + }, + "6-NLP/5-Hotel-Reviews-2/README.md": { + "original_hash": "2c742993fe95d5bcbb2846eda3d442a1", + "translation_date": "2025-09-05T08:53:24+00:00", + "source_file": "6-NLP/5-Hotel-Reviews-2/README.md", + "language_code": "pt-PT" + }, + "6-NLP/5-Hotel-Reviews-2/assignment.md": { + "original_hash": "daf144daa552da6a7d442aff6f3e77d8", + "translation_date": "2025-09-03T19:14:19+00:00", + "source_file": "6-NLP/5-Hotel-Reviews-2/assignment.md", + "language_code": "pt-PT" + }, + "6-NLP/5-Hotel-Reviews-2/solution/Julia/README.md": { + "original_hash": "a39c15d63f3b2795ee2284a82b986b93", + "translation_date": "2025-09-03T19:15:06+00:00", + "source_file": "6-NLP/5-Hotel-Reviews-2/solution/Julia/README.md", + "language_code": "pt-PT" + }, + "6-NLP/5-Hotel-Reviews-2/solution/R/README.md": { + "original_hash": "81db6ff2cf6e62fbe2340b094bb9509e", + "translation_date": "2025-09-03T19:14:46+00:00", + "source_file": "6-NLP/5-Hotel-Reviews-2/solution/R/README.md", + "language_code": "pt-PT" + }, + "6-NLP/README.md": { + "original_hash": "1eb379dc2d0c9940b320732d16083778", + "translation_date": "2025-09-03T18:45:46+00:00", + "source_file": "6-NLP/README.md", + "language_code": "pt-PT" + }, + "6-NLP/data/README.md": { + "original_hash": "ee0670655c89e4719319764afb113624", + "translation_date": "2025-09-03T18:58:47+00:00", + "source_file": "6-NLP/data/README.md", + "language_code": "pt-PT" + }, + "7-TimeSeries/1-Introduction/README.md": { + "original_hash": "662b509c39eee205687726636d0a8455", + "translation_date": "2025-09-05T08:39:49+00:00", + "source_file": "7-TimeSeries/1-Introduction/README.md", + "language_code": "pt-PT" + }, + "7-TimeSeries/1-Introduction/assignment.md": { + "original_hash": "d1781b0b92568ea1d119d0a198b576b4", + "translation_date": "2025-09-03T16:56:31+00:00", + "source_file": "7-TimeSeries/1-Introduction/assignment.md", + "language_code": "pt-PT" + }, + "7-TimeSeries/1-Introduction/solution/Julia/README.md": { + "original_hash": "a39c15d63f3b2795ee2284a82b986b93", + "translation_date": "2025-09-03T16:57:23+00:00", + "source_file": "7-TimeSeries/1-Introduction/solution/Julia/README.md", + "language_code": "pt-PT" + }, + "7-TimeSeries/1-Introduction/solution/R/README.md": { + "original_hash": "81db6ff2cf6e62fbe2340b094bb9509e", + "translation_date": "2025-09-03T16:57:03+00:00", + "source_file": "7-TimeSeries/1-Introduction/solution/R/README.md", + "language_code": "pt-PT" + }, + "7-TimeSeries/2-ARIMA/README.md": { + "original_hash": "917dbf890db71a322f306050cb284749", + "translation_date": "2025-09-05T08:39:06+00:00", + "source_file": "7-TimeSeries/2-ARIMA/README.md", + "language_code": "pt-PT" + }, + "7-TimeSeries/2-ARIMA/assignment.md": { + "original_hash": "1c814013e10866dfd92cdb32caaae3ac", + "translation_date": "2025-09-03T16:51:42+00:00", + "source_file": "7-TimeSeries/2-ARIMA/assignment.md", + "language_code": "pt-PT" + }, + "7-TimeSeries/2-ARIMA/solution/Julia/README.md": { + "original_hash": "a39c15d63f3b2795ee2284a82b986b93", + "translation_date": "2025-09-03T16:52:32+00:00", + "source_file": "7-TimeSeries/2-ARIMA/solution/Julia/README.md", + "language_code": "pt-PT" + }, + "7-TimeSeries/2-ARIMA/solution/R/README.md": { + "original_hash": "81db6ff2cf6e62fbe2340b094bb9509e", + "translation_date": "2025-09-03T16:52:13+00:00", + "source_file": "7-TimeSeries/2-ARIMA/solution/R/README.md", + "language_code": "pt-PT" + }, + "7-TimeSeries/3-SVR/README.md": { + "original_hash": "482bccabe1df958496ea71a3667995cd", + "translation_date": "2025-09-05T08:40:23+00:00", + "source_file": "7-TimeSeries/3-SVR/README.md", + "language_code": "pt-PT" + }, + "7-TimeSeries/3-SVR/assignment.md": { + "original_hash": "94aa2fc6154252ae30a3f3740299707a", + "translation_date": "2025-09-03T17:01:06+00:00", + "source_file": "7-TimeSeries/3-SVR/assignment.md", + "language_code": "pt-PT" + }, + "7-TimeSeries/README.md": { + "original_hash": "61342603bad8acadbc6b2e4e3aab3f66", + "translation_date": "2025-09-03T16:46:07+00:00", + "source_file": "7-TimeSeries/README.md", + "language_code": "pt-PT" + }, + "8-Reinforcement/1-QLearning/README.md": { + "original_hash": "911efd5e595089000cb3c16fce1beab8", + "translation_date": "2025-09-05T08:49:11+00:00", + "source_file": "8-Reinforcement/1-QLearning/README.md", + "language_code": "pt-PT" + }, + "8-Reinforcement/1-QLearning/assignment.md": { + "original_hash": "68394b2102d3503882e5e914bd0ff5c1", + "translation_date": "2025-09-03T18:36:57+00:00", + "source_file": "8-Reinforcement/1-QLearning/assignment.md", + "language_code": "pt-PT" + }, + "8-Reinforcement/1-QLearning/solution/Julia/README.md": { + "original_hash": "a39c15d63f3b2795ee2284a82b986b93", + "translation_date": "2025-09-03T18:38:40+00:00", + "source_file": "8-Reinforcement/1-QLearning/solution/Julia/README.md", + "language_code": "pt-PT" + }, + "8-Reinforcement/1-QLearning/solution/R/README.md": { + "original_hash": "81db6ff2cf6e62fbe2340b094bb9509e", + "translation_date": "2025-09-03T18:38:17+00:00", + "source_file": "8-Reinforcement/1-QLearning/solution/R/README.md", + "language_code": "pt-PT" + }, + "8-Reinforcement/2-Gym/README.md": { + "original_hash": "107d5bb29da8a562e7ae72262d251a75", + "translation_date": "2025-09-05T08:49:47+00:00", + "source_file": "8-Reinforcement/2-Gym/README.md", + "language_code": "pt-PT" + }, + "8-Reinforcement/2-Gym/assignment.md": { + "original_hash": "1f2b7441745eb52e25745423b247016b", + "translation_date": "2025-09-03T18:44:00+00:00", + "source_file": "8-Reinforcement/2-Gym/assignment.md", + "language_code": "pt-PT" + }, + "8-Reinforcement/2-Gym/solution/Julia/README.md": { + "original_hash": "a39c15d63f3b2795ee2284a82b986b93", + "translation_date": "2025-09-03T18:45:10+00:00", + "source_file": "8-Reinforcement/2-Gym/solution/Julia/README.md", + "language_code": "pt-PT" + }, + "8-Reinforcement/2-Gym/solution/R/README.md": { + "original_hash": "81db6ff2cf6e62fbe2340b094bb9509e", + "translation_date": "2025-09-03T18:44:50+00:00", + "source_file": "8-Reinforcement/2-Gym/solution/R/README.md", + "language_code": "pt-PT" + }, + "8-Reinforcement/README.md": { + "original_hash": "20ca019012b1725de956681d036d8b18", + "translation_date": "2025-09-03T18:26:35+00:00", + "source_file": "8-Reinforcement/README.md", + "language_code": "pt-PT" + }, + "9-Real-World/1-Applications/README.md": { + "original_hash": "83320d6b6994909e35d830cebf214039", + "translation_date": "2025-09-05T08:42:15+00:00", + "source_file": "9-Real-World/1-Applications/README.md", + "language_code": "pt-PT" + }, + "9-Real-World/1-Applications/assignment.md": { + "original_hash": "fdebfcd0a3f12c9e2b436ded1aa79885", + "translation_date": "2025-09-03T17:27:09+00:00", + "source_file": "9-Real-World/1-Applications/assignment.md", + "language_code": "pt-PT" + }, + "9-Real-World/2-Debugging-ML-Models/README.md": { + "original_hash": "df2b538e8fbb3e91cf0419ae2f858675", + "translation_date": "2025-09-05T08:42:52+00:00", + "source_file": "9-Real-World/2-Debugging-ML-Models/README.md", + "language_code": "pt-PT" + }, + "9-Real-World/2-Debugging-ML-Models/assignment.md": { + "original_hash": "91c6a180ef08e20cc15acfd2d6d6e164", + "translation_date": "2025-09-03T17:33:04+00:00", + "source_file": "9-Real-World/2-Debugging-ML-Models/assignment.md", + "language_code": "pt-PT" + }, + "9-Real-World/README.md": { + "original_hash": "5e069a0ac02a9606a69946c2b3c574a9", + "translation_date": "2025-09-03T17:22:00+00:00", + "source_file": "9-Real-World/README.md", + "language_code": "pt-PT" + }, + "AGENTS.md": { + "original_hash": "93fdaa0fd38836e50c4793e2f2f25e8b", + "translation_date": "2025-10-03T11:06:05+00:00", + "source_file": "AGENTS.md", + "language_code": "pt-PT" + }, + "CODE_OF_CONDUCT.md": { + "original_hash": "c06b12caf3c901eb3156e3dd5b0aea56", + "translation_date": "2025-09-03T16:16:22+00:00", + "source_file": "CODE_OF_CONDUCT.md", + "language_code": "pt-PT" + }, + "CONTRIBUTING.md": { + "original_hash": "977ec5266dfd78ad1ce2bd8d46fccbda", + "translation_date": "2025-09-03T16:13:34+00:00", + "source_file": "CONTRIBUTING.md", + "language_code": "pt-PT" + }, + "README.md": { + "original_hash": "da2ceed62f16a0820259556e3a873c95", + "translation_date": "2026-01-29T18:18:45+00:00", + "source_file": "README.md", + "language_code": "pt-PT" + }, + "SECURITY.md": { + "original_hash": "5e1b8da31aae9cca3d53ad243fa3365a", + "translation_date": "2025-09-03T16:14:27+00:00", + "source_file": "SECURITY.md", + "language_code": "pt-PT" + }, + "SUPPORT.md": { + "original_hash": "09623d7343ff1c26ff4f198c1b2d3176", + "translation_date": "2025-10-03T11:56:28+00:00", + "source_file": "SUPPORT.md", + "language_code": "pt-PT" + }, + "TROUBLESHOOTING.md": { + "original_hash": "134d8759f0e2ab886e9aa4f62362c201", + "translation_date": "2025-10-03T12:43:39+00:00", + "source_file": "TROUBLESHOOTING.md", + "language_code": "pt-PT" + }, + "docs/_sidebar.md": { + "original_hash": "68dd06c685f6ce840e0acfa313352e7c", + "translation_date": "2025-09-03T17:21:04+00:00", + "source_file": "docs/_sidebar.md", + "language_code": "pt-PT" + }, + "for-teachers.md": { + "original_hash": "b37de02054fa6c0438ede6fabe1fdfb8", + "translation_date": "2025-09-03T16:15:32+00:00", + "source_file": "for-teachers.md", + "language_code": "pt-PT" + }, + "quiz-app/README.md": { + "original_hash": "6d130dffca5db70d7e615f926cb1ad4c", + "translation_date": "2025-09-03T17:58:32+00:00", + "source_file": "quiz-app/README.md", + "language_code": "pt-PT" + }, + "sketchnotes/LICENSE.md": { + "original_hash": "fba3b94d88bfb9b81369b869a1e9a20f", + "translation_date": "2025-09-03T18:20:53+00:00", + "source_file": "sketchnotes/LICENSE.md", + "language_code": "pt-PT" + }, + "sketchnotes/README.md": { + "original_hash": "a88d5918c1b9da69a40d917a0840c497", + "translation_date": "2025-09-03T18:16:42+00:00", + "source_file": "sketchnotes/README.md", + "language_code": "pt-PT" + } +} \ No newline at end of file diff --git a/translations/pt-PT/1-Introduction/1-intro-to-ML/README.md b/translations/pt-PT/1-Introduction/1-intro-to-ML/README.md new file mode 100644 index 000000000..8c0d81d74 --- /dev/null +++ b/translations/pt-PT/1-Introduction/1-intro-to-ML/README.md @@ -0,0 +1,150 @@ +# Introdução ao machine learning + +## [Questionário pré-aula](https://ff-quizzes.netlify.app/en/ml/) + +--- + +[![ML para iniciantes - Introdução ao Machine Learning para Iniciantes](https://img.youtube.com/vi/6mSx_KJxcHI/0.jpg)](https://youtu.be/6mSx_KJxcHI "ML para iniciantes - Introdução ao Machine Learning para Iniciantes") + +> 🎥 Clique na imagem acima para assistir a um vídeo curto sobre esta lição. + +Bem-vindo a este curso sobre machine learning clássico para iniciantes! Quer seja completamente novo neste tema ou um praticante experiente de ML que procura rever uma área, estamos felizes por tê-lo connosco! Queremos criar um ponto de partida amigável para o seu estudo de ML e ficaremos felizes em avaliar, responder e incorporar o seu [feedback](https://github.com/microsoft/ML-For-Beginners/discussions). + +[![Introdução ao ML](https://img.youtube.com/vi/h0e2HAPTGF4/0.jpg)](https://youtu.be/h0e2HAPTGF4 "Introdução ao ML") + +> 🎥 Clique na imagem acima para assistir a um vídeo: John Guttag do MIT apresenta o machine learning + +--- +## Começando com machine learning + +Antes de começar com este currículo, é necessário configurar o seu computador e prepará-lo para executar notebooks localmente. + +- **Configure o seu computador com estes vídeos**. Utilize os seguintes links para aprender [como instalar Python](https://youtu.be/CXZYvNRIAKM) no seu sistema e [configurar um editor de texto](https://youtu.be/EU8eayHWoZg) para desenvolvimento. +- **Aprenda Python**. Também é recomendado ter uma compreensão básica de [Python](https://docs.microsoft.com/learn/paths/python-language/?WT.mc_id=academic-77952-leestott), uma linguagem de programação útil para cientistas de dados que utilizamos neste curso. +- **Aprenda Node.js e JavaScript**. Utilizamos JavaScript algumas vezes neste curso ao criar aplicações web, por isso será necessário ter [node](https://nodejs.org) e [npm](https://www.npmjs.com/) instalados, bem como [Visual Studio Code](https://code.visualstudio.com/) disponível para desenvolvimento em Python e JavaScript. +- **Crie uma conta no GitHub**. Como nos encontrou aqui no [GitHub](https://github.com), talvez já tenha uma conta, mas, se não, crie uma e depois faça um fork deste currículo para usar por conta própria. (Sinta-se à vontade para nos dar uma estrela também 😊) +- **Explore o Scikit-learn**. Familiarize-se com [Scikit-learn](https://scikit-learn.org/stable/user_guide.html), um conjunto de bibliotecas de ML que referenciamos nestas lições. + +--- +## O que é machine learning? + +O termo 'machine learning' é um dos mais populares e frequentemente utilizados atualmente. Existe uma possibilidade significativa de que já tenha ouvido este termo pelo menos uma vez, caso tenha algum tipo de familiaridade com tecnologia, independentemente da área em que trabalha. No entanto, a mecânica do machine learning é um mistério para a maioria das pessoas. Para um iniciante em machine learning, o tema pode, por vezes, parecer avassalador. Por isso, é importante entender o que realmente é machine learning e aprender sobre ele passo a passo, através de exemplos práticos. + +--- +## A curva de hype + +![ml hype curve](../../../../1-Introduction/1-intro-to-ML/images/hype.png) + +> O Google Trends mostra a recente 'curva de hype' do termo 'machine learning' + +--- +## Um universo misterioso + +Vivemos num universo cheio de mistérios fascinantes. Grandes cientistas como Stephen Hawking, Albert Einstein e muitos outros dedicaram as suas vidas à busca de informações significativas que desvendassem os mistérios do mundo ao nosso redor. Esta é a condição humana de aprender: uma criança humana aprende coisas novas e descobre a estrutura do seu mundo ano após ano, à medida que cresce até à idade adulta. + +--- +## O cérebro da criança + +O cérebro e os sentidos de uma criança percebem os factos do seu ambiente e, gradualmente, aprendem os padrões ocultos da vida que ajudam a criança a criar regras lógicas para identificar padrões aprendidos. O processo de aprendizagem do cérebro humano torna os humanos a criatura viva mais sofisticada deste mundo. Aprender continuamente, descobrindo padrões ocultos e depois inovando com base nesses padrões, permite-nos melhorar cada vez mais ao longo da nossa vida. Esta capacidade de aprendizagem e evolução está relacionada a um conceito chamado [plasticidade cerebral](https://www.simplypsychology.org/brain-plasticity.html). Superficialmente, podemos traçar algumas semelhanças motivacionais entre o processo de aprendizagem do cérebro humano e os conceitos de machine learning. + +--- +## O cérebro humano + +O [cérebro humano](https://www.livescience.com/29365-human-brain.html) percebe coisas do mundo real, processa as informações percebidas, toma decisões racionais e realiza certas ações com base nas circunstâncias. Isto é o que chamamos de comportamento inteligente. Quando programamos uma réplica do processo de comportamento inteligente numa máquina, chamamos isso de inteligência artificial (IA). + +--- +## Alguns termos + +Embora os termos possam ser confundidos, machine learning (ML) é um subconjunto importante da inteligência artificial. **ML está relacionado ao uso de algoritmos especializados para descobrir informações significativas e encontrar padrões ocultos a partir de dados percebidos, corroborando o processo de tomada de decisão racional**. + +--- +## IA, ML, Deep Learning + +![AI, ML, deep learning, data science](../../../../1-Introduction/1-intro-to-ML/images/ai-ml-ds.png) + +> Um diagrama mostrando as relações entre IA, ML, deep learning e ciência de dados. Infográfico por [Jen Looper](https://twitter.com/jenlooper) inspirado por [este gráfico](https://softwareengineering.stackexchange.com/questions/366996/distinction-between-ai-ml-neural-networks-deep-learning-and-data-mining) + +--- +## Conceitos a abordar + +Neste currículo, vamos abordar apenas os conceitos principais de machine learning que um iniciante deve conhecer. Abordamos o que chamamos de 'machine learning clássico', utilizando principalmente o Scikit-learn, uma excelente biblioteca que muitos estudantes utilizam para aprender o básico. Para entender conceitos mais amplos de inteligência artificial ou deep learning, um conhecimento fundamental sólido de machine learning é indispensável, e é isso que queremos oferecer aqui. + +--- +## Neste curso, irá aprender: + +- conceitos principais de machine learning +- a história do ML +- ML e equidade +- técnicas de regressão em ML +- técnicas de classificação em ML +- técnicas de clustering em ML +- técnicas de processamento de linguagem natural em ML +- técnicas de previsão de séries temporais em ML +- aprendizagem por reforço +- aplicações reais de ML + +--- +## O que não iremos abordar + +- deep learning +- redes neurais +- IA + +Para proporcionar uma melhor experiência de aprendizagem, evitaremos as complexidades das redes neurais, 'deep learning' - construção de modelos com várias camadas utilizando redes neurais - e IA, que discutiremos num currículo diferente. Também ofereceremos um futuro currículo de ciência de dados para focar nesse aspeto deste campo mais amplo. + +--- +## Por que estudar machine learning? + +Machine learning, do ponto de vista de sistemas, é definido como a criação de sistemas automatizados que podem aprender padrões ocultos a partir de dados para ajudar na tomada de decisões inteligentes. + +Esta motivação é vagamente inspirada por como o cérebro humano aprende certas coisas com base nos dados que percebe do mundo exterior. + +✅ Pense por um momento por que uma empresa gostaria de tentar usar estratégias de machine learning em vez de criar um motor baseado em regras codificadas. + +--- +## Aplicações de machine learning + +As aplicações de machine learning estão agora quase em todo lugar e são tão ubíquas quanto os dados que circulam pelas nossas sociedades, gerados pelos nossos smartphones, dispositivos conectados e outros sistemas. Considerando o imenso potencial dos algoritmos de machine learning de última geração, os investigadores têm explorado a sua capacidade para resolver problemas reais multidimensionais e multidisciplinares com resultados muito positivos. + +--- +## Exemplos de ML aplicado + +**Pode usar machine learning de várias formas**: + +- Para prever a probabilidade de uma doença com base no histórico médico ou relatórios de um paciente. +- Para utilizar dados meteorológicos e prever eventos climáticos. +- Para entender o sentimento de um texto. +- Para detetar notícias falsas e impedir a propagação de propaganda. + +Finanças, economia, ciência da terra, exploração espacial, engenharia biomédica, ciência cognitiva e até áreas das humanidades têm adaptado o machine learning para resolver os problemas árduos e pesados em processamento de dados dos seus domínios. + +--- +## Conclusão + +Machine learning automatiza o processo de descoberta de padrões ao encontrar insights significativos a partir de dados reais ou gerados. Provou ser altamente valioso em aplicações empresariais, de saúde e financeiras, entre outras. + +Num futuro próximo, entender os fundamentos de machine learning será indispensável para pessoas de qualquer área devido à sua ampla adoção. + +--- +# 🚀 Desafio + +Desenhe, em papel ou utilizando uma aplicação online como [Excalidraw](https://excalidraw.com/), a sua compreensão das diferenças entre IA, ML, deep learning e ciência de dados. Adicione algumas ideias sobre os problemas que cada uma destas técnicas é boa em resolver. + +# [Questionário pós-aula](https://ff-quizzes.netlify.app/en/ml/) + +--- +# Revisão e Autoestudo + +Para aprender mais sobre como pode trabalhar com algoritmos de ML na nuvem, siga este [Percurso de Aprendizagem](https://docs.microsoft.com/learn/paths/create-no-code-predictive-models-azure-machine-learning/?WT.mc_id=academic-77952-leestott). + +Faça um [Percurso de Aprendizagem](https://docs.microsoft.com/learn/modules/introduction-to-machine-learning/?WT.mc_id=academic-77952-leestott) sobre os fundamentos de ML. + +--- +# Tarefa + +[Prepare-se e comece](assignment.md) + +--- + +**Aviso Legal**: +Este documento foi traduzido utilizando o serviço de tradução por IA [Co-op Translator](https://github.com/Azure/co-op-translator). Embora nos esforcemos para garantir a precisão, é importante notar que traduções automáticas podem conter erros ou imprecisões. O documento original na sua língua nativa deve ser considerado a fonte autoritária. Para informações críticas, recomenda-se a tradução profissional realizada por humanos. Não nos responsabilizamos por quaisquer mal-entendidos ou interpretações incorretas decorrentes da utilização desta tradução. \ No newline at end of file diff --git a/translations/pt-PT/1-Introduction/1-intro-to-ML/assignment.md b/translations/pt-PT/1-Introduction/1-intro-to-ML/assignment.md new file mode 100644 index 000000000..1ea5c438a --- /dev/null +++ b/translations/pt-PT/1-Introduction/1-intro-to-ML/assignment.md @@ -0,0 +1,14 @@ +# Comece a Trabalhar + +## Instruções + +Neste exercício não avaliado, deve rever Python e preparar o seu ambiente para executar notebooks. + +Siga este [Percurso de Aprendizagem de Python](https://docs.microsoft.com/learn/paths/python-language/?WT.mc_id=academic-77952-leestott), e depois configure os seus sistemas assistindo aos vídeos introdutórios abaixo: + +https://www.youtube.com/playlist?list=PLlrxD0HtieHhS8VzuMCfQD4uJ9yne1mE6 + +--- + +**Aviso Legal**: +Este documento foi traduzido utilizando o serviço de tradução por IA [Co-op Translator](https://github.com/Azure/co-op-translator). Embora nos esforcemos para garantir a precisão, é importante ter em conta que traduções automáticas podem conter erros ou imprecisões. O documento original na sua língua nativa deve ser considerado a fonte autoritária. Para informações críticas, recomenda-se a tradução profissional realizada por humanos. Não nos responsabilizamos por quaisquer mal-entendidos ou interpretações incorretas decorrentes da utilização desta tradução. \ No newline at end of file