From 7aaf8cbc291fff776dda1efd0e7ca008b6af5238 Mon Sep 17 00:00:00 2001 From: reveurmichael Date: Fri, 20 Oct 2023 10:55:29 +0000 Subject: [PATCH] deploy: 5f80d7d134e75ab26bb3b77d9f60ef59b4488282 --- _images/boxplot_byrole.png | Bin 8393 -> 0 bytes _images/boxplot_explanation.png | Bin 55216 -> 0 bytes ...1_18_1.png => california_housing_18_1.png} | Bin ...1_21_1.png => california_housing_21_1.png} | Bin ...1_23_1.png => california_housing_23_1.png} | Bin ...1_24_1.png => california_housing_24_1.png} | Bin ...1_26_1.png => california_housing_26_1.png} | Bin ...1_29_1.png => california_housing_29_1.png} | Bin ...1_31_1.png => california_housing_31_1.png} | Bin _images/data-science-word-cloud.png | Bin 324125 -> 0 bytes _images/hype-cycle-for-ai.png | Bin 117584 -> 0 bytes ...introduction-and-data-structures_122_1.png | Bin 0 -> 19987 bytes _images/kernel-method_11_0.png | Bin 28237 -> 28201 bytes _images/kernel-method_15_0.png | Bin 84028 -> 83948 bytes _images/kernel-method_19_0.png | Bin 36183 -> 36952 bytes _images/kernel-method_26_0.png | Bin 50787 -> 51861 bytes ...> linear-regression-from-scratch_12_1.png} | Bin ...=> linear-regression-from-scratch_4_0.png} | Bin ...=> linear-regression-from-scratch_6_1.png} | Bin ...png => linear-regression-metrics_28_0.png} | Bin ...on_8_3.png => logistic-regression_8_4.png} | Bin _images/ml-linear-regression-2_13_0.png | Bin 100858 -> 0 bytes _images/ml-linear-regression-2_4_1.png | Bin 20720 -> 0 bytes _images/ml-linear-regression-2_6_0.png | Bin 33542 -> 0 bytes _images/normal-histogram.png | Bin 21538 -> 0 bytes _images/pandas_118_1.png | Bin 20053 -> 0 bytes _images/the-data-science-venn-diagram.png | Bin 76684 -> 0 bytes _images/tools-of-the-trade_13_0.png | Bin 36999 -> 37233 bytes _images/visualization-relationships_12_0.png | Bin 33632 -> 33409 bytes _images/visualization-relationships_16_0.png | Bin 30223 -> 29799 bytes _images/visualization-relationships_20_0.png | Bin 89234 -> 88234 bytes _images/weight-boxplot.png | Bin 3609 -> 0 bytes _images/weight-height-relationship.png | Bin 8416 -> 0 bytes _images/weight-histogram.png | Bin 3948 -> 0 bytes .../create-a-regression-model.ipynb | 2 +- .../exploring-visualizations.ipynb | 2 +- .../california_housing.ipynb} | 2 +- .../linear-regression/gradient-descent.ipynb | 410 +- .../linear-regression-from-scratch.ipynb} | 0 .../linear-regression-metrics.ipynb | 124 - .../ml-linear-regression-2.ipynb | 329 - .../ml-fundamentals/parameter-play.ipynb | 2 +- .../regression-with-scikit-learn.ipynb | 2 +- .../retrying-some-regression.ipynb | 2 +- .../data-science-in-the-wild.ipynb | 2 +- .../data-science-lifecycle/analyzing.ipynb | 2 +- .../communication.ipynb | 2 +- .../data-science-lifecycle.ipynb | 2 +- .../data-science-lifecycle/introduction.ipynb | 2 +- .../introduction/data-science-ethics.ipynb | 265 +- .../introduction/data-science-ethics.md | 304 - .../introduction/defining-data-science.ipynb | 200 +- .../introduction/defining-data-science.md | 169 - .../introduction/defining-data.ipynb | 77 +- .../introduction/defining-data.md | 85 - ...uction-to-statistics-and-probability.ipynb | 843 +- ...roduction-to-statistics-and-probability.md | 320 - .../introduction/introduction.ipynb | 124 +- .../data-science/introduction/introduction.md | 38 - .../working-with-data/data-preparation.ipynb | 84 +- .../working-with-data/data-preparation.md | 2 +- .../working-with-data/numpy.ipynb | 696 +- .../working-with-data/pandas.ipynb | 10560 ---------------- .../data-science/working-with-data/pandas.md | 2152 +--- .../pandas/advanced-pandas-techniques.ipynb | 5054 ++++++++ .../pandas/data-selection.ipynb | 4490 +++++++ .../introduction-and-data-structures.ipynb | 7268 +++++++++++ .../relational-databases.ipynb | 2 +- .../working-with-data/working-with-data.ipynb | 2 +- _sources/deep-learning/autoencoder.ipynb | 58 +- _sources/deep-learning/cnn.ipynb | 26 +- _sources/deep-learning/difussion-model.ipynb | 54 +- _sources/deep-learning/dqn.ipynb | 10 +- _sources/deep-learning/gan.ipynb | 26 +- .../deep-learning/image-classification.ipynb | 26 +- .../deep-learning/image-segmentation.ipynb | 74 +- _sources/deep-learning/object-detection.ipynb | 22 +- _sources/deep-learning/rnn.ipynb | 6 +- _sources/deep-learning/time-series.ipynb | 82 +- .../data-engineering.ipynb | 2 +- .../model-deployment.ipynb | 2 +- .../model-training-and-evaluation.ipynb | 2 +- .../overview.ipynb | 10 +- .../problem-framing.ipynb | 2 +- .../ensemble-learning/bagging.ipynb | 14 +- .../feature-importance.ipynb | 36 +- ...tting-started-with-ensemble-learning.ipynb | 2 +- .../ensemble-learning/random-forest.ipynb | 42 +- .../gradient-boosting-example.ipynb | 36 +- .../gradient-boosting/gradient-boosting.ipynb | 2 +- .../introduction-to-gradient-boosting.ipynb | 2 +- ...xgboost-k-fold-cv-feature-importance.ipynb | 82 +- .../gradient-boosting/xgboost.ipynb | 24 +- _sources/ml-advanced/kernel-method.ipynb | 422 +- ...-app-to-use-a-machine-learning-model.ipynb | 30 +- .../regression/logistic-regression.ipynb | 58 +- .../regression/managing-data.ipynb | 42 +- ...gression-models-for-machine-learning.ipynb | 2 +- .../regression/tools-of-the-trade.ipynb | 32 +- .../python-programming-advanced.ipynb | 346 +- .../fibonacci_module.cpython-39.pyc | Bin 1207 -> 1207 bytes .../__pycache__/__init__.cpython-39.pyc | Bin 246 -> 246 bytes .../__pycache__/__init__.cpython-39.pyc | Bin 254 -> 254 bytes .../effects/__pycache__/echo.cpython-39.pyc | Bin 417 -> 417 bytes assignments/README.html | 199 +- .../analyzing-COVID-19-papers.html | 199 +- assignments/data-science/analyzing-data.html | 199 +- .../analyzing-text-about-data-science.html | 199 +- .../data-science/apply-your-skills.html | 199 +- .../build-your-own-custom-vis.html | 199 +- .../data-science/classifying-datasets.html | 199 +- .../data-science/data-preparation.html | 199 +- .../data-processing-in-python.html | 199 +- ...nce-in-the-cloud-the-azure-ml-sdk-way.html | 199 +- ...ta-science-project-using-azure-ml-sdk.html | 199 +- .../data-science/data-science-scenarios.html | 199 +- .../data-science/displaying-airport-data.html | 199 +- .../data-science/dive-into-the-beehive.html | 199 +- .../estimation-of-COVID-19-pandemic.html | 199 +- .../evaluating-data-from-a-form.html | 199 +- .../explore-a-planetary-computer-dataset.html | 199 +- .../data-science/exploring-for-anwser.html | 199 +- ...duction-to-statistics-and-probability.html | 199 +- .../data-science/lines-scatters-and-bars.html | 199 +- ...code-data-science-project-on-azure-ml.html | 199 +- assignments/data-science/market-research.html | 199 +- .../data-science/matplotlib-applied.html | 199 +- .../nyc-taxi-data-in-winter-and-summer.html | 199 +- .../data-science/small-diabetes-study.html | 199 +- assignments/data-science/soda-profits.html | 199 +- assignments/data-science/tell-a-story.html | 199 +- assignments/data-science/try-it-in-excel.html | 199 +- .../write-a-data-ethics-case-study.html | 199 +- .../autoencoder/autoencoder.html | 289 +- ...ising-autoencoder-dimension-reduction.html | 331 +- ...onal-autoencoder-and-faces-generation.html | 283 +- .../how-to-choose-cnn-architecture-mnist.html | 443 +- ...bject-recognition-in-images-using-cnn.html | 277 +- ...nguage-digits-classification-with-cnn.html | 287 +- .../dqn/dqn-on-foreign-exchange-market.html | 241 +- assignments/deep-learning/gan/art-by-gan.html | 299 +- .../deep-learning/gan/gan-introduction.html | 313 +- ...model-with-tweet-volume-and-sentiment.html | 245 +- .../nn-classify-15-fruits-assignment.html | 257 +- .../nn-for-classification-assignment.html | 325 +- ...ification-classify-images-of-clothing.html | 303 +- .../google-stock-price-prediction-rnn.html | 227 +- .../intro_to_tensorflow_for_deeplearning.html | 299 +- .../time-series-forecasting-assignment.html | 341 +- ...rintuitive-challenges-in-ml-debugging.html | 265 +- .../data-engineering.html | 247 +- .../debugging-in-classification.html | 325 +- .../debugging-in-regression.html | 349 +- ...d-random-forests-more-ensemble-models.html | 307 +- .../ensemble-learning/decision-trees.html | 343 +- ...-forest-classifier-feature-importance.html | 419 +- .../random-forests-for-classification.html | 277 +- .../random-forests-intro-and-regression.html | 301 +- .../boosting-with-tuning.html | 451 +- .../gradient-boosting-assignment.html | 241 +- ...perparameter-tuning-gradient-boosting.html | 469 +- .../decision_trees_for_classification.html | 307 +- .../decision_trees_for_regression.html | 271 +- .../kernel-method-assignment-1.html | 657 +- ...rt_vector_machines_for_classification.html | 265 +- ...upport_vector_machines_for_regression.html | 265 +- .../dropout-and-batch-normalization.html | 253 +- .../lasso-and-ridge-regression.html | 265 +- ...ng-curve-to-identify-overfit-underfit.html | 325 +- .../model-selection-assignment-1.html | 265 +- .../regularized-linear-models.html | 241 +- .../build-classification-model.html | 217 +- .../build-classification-models.html | 301 +- .../create-a-regression-model.html | 229 +- .../delicious-asian-and-indian-cuisines.html | 211 +- .../explore-classification-methods.html | 231 +- .../exploring-visualizations.html | 223 +- .../linear-and-polynomial-regression.html | 211 +- .../california_housing.html} | 689 +- .../linear-regression/gradient-descent.html | 757 +- .../linear-regression-from-scratch.html} | 719 +- .../linear-regression-metrics.html | 473 +- .../linear-regression/loss-function.html | 325 +- .../ml-fundamentals/managing-data.html | 211 +- .../ml-linear-regression-2.html | 1858 --- .../ml-logistic-regression-1.html | 309 +- .../ml-logistic-regression-2.html | 217 +- .../ml-fundamentals/ml-neural-network-1.html | 265 +- .../ml-fundamentals/ml-overview-iris.html | 199 +- .../ml-overview-mnist-digits.html | 199 +- .../ml-fundamentals/parameter-play.html | 229 +- .../pumpkin-varieties-and-color.html | 217 +- .../ml-fundamentals/regression-tools.html | 211 +- .../regression-with-scikit-learn.html | 205 +- .../retrying-some-regression.html | 229 +- .../ml-fundamentals/study-the-solvers.html | 229 +- .../try-a-different-model.html | 229 +- .../python-programming-advanced.html | 199 +- .../python-programming-basics.html | 199 +- .../python-programming-introduction.html | 199 +- assignments/project-plan-template.html | 199 +- assignments/set-up-env/first-assignment.html | 199 +- assignments/set-up-env/second-assignment.html | 199 +- .../fibonacci_module.cpython-39.pyc | Bin 1207 -> 1207 bytes .../__pycache__/__init__.cpython-39.pyc | Bin 246 -> 246 bytes .../__pycache__/__init__.cpython-39.pyc | Bin 254 -> 254 bytes .../effects/__pycache__/echo.cpython-39.pyc | Bin 417 -> 417 bytes .../data-science-in-the-cloud.html | 199 +- .../introduction.html | 199 +- .../the-azure-ml-sdk-way.html | 199 +- .../the-low-code-no-code-way.html | 199 +- data-science/data-science-in-the-wild.html | 199 +- .../data-science-lifecycle/analyzing.html | 199 +- .../data-science-lifecycle/communication.html | 199 +- .../data-science-lifecycle.html | 199 +- .../data-science-lifecycle/introduction.html | 199 +- .../data-visualization.html | 199 +- .../meaningful-visualizations.html | 199 +- .../visualization-distributions.html | 205 +- .../visualization-proportions.html | 199 +- .../visualization-relationships.html | 201 +- .../introduction/data-science-ethics.html | 259 +- .../introduction/defining-data-science.html | 253 +- data-science/introduction/defining-data.html | 243 +- ...duction-to-statistics-and-probability.html | 416 +- data-science/introduction/introduction.html | 252 +- .../working-with-data/data-preparation.html | 207 +- .../non-relational-data.html | 199 +- data-science/working-with-data/numpy.html | 201 +- data-science/working-with-data/pandas.html | 8508 +------------ .../pandas/advanced-pandas-techniques.html | 5235 ++++++++ .../pandas/data-selection.html | 4789 +++++++ .../introduction-and-data-structures.html | 6508 ++++++++++ .../relational-databases.html | 199 +- .../working-with-data/working-with-data.html | 206 +- deep-learning/autoencoder.html | 199 +- deep-learning/cnn.html | 199 +- deep-learning/difussion-model.html | 199 +- deep-learning/dl-overview.html | 199 +- deep-learning/dqn.html | 199 +- deep-learning/gan.html | 199 +- deep-learning/image-classification.html | 199 +- deep-learning/image-segmentation.html | 199 +- deep-learning/lstm.html | 199 +- deep-learning/object-detection.html | 199 +- deep-learning/rnn.html | 199 +- deep-learning/time-series.html | 199 +- genindex.html | 199 +- intro.html | 199 +- .../data-engineering.html | 199 +- .../model-deployment.html | 199 +- .../model-training-and-evaluation.html | 199 +- .../overview.html | 199 +- .../problem-framing.html | 199 +- ...lustering-models-for-machine-learning.html | 199 +- .../introduction-to-clustering.html | 199 +- .../clustering/k-means-clustering.html | 199 +- ml-advanced/ensemble-learning/bagging.html | 199 +- .../ensemble-learning/feature-importance.html | 199 +- ...etting-started-with-ensemble-learning.html | 199 +- .../ensemble-learning/random-forest.html | 199 +- .../gradient-boosting-example.html | 199 +- .../gradient-boosting/gradient-boosting.html | 199 +- .../introduction-to-gradient-boosting.html | 199 +- .../xgboost-k-fold-cv-feature-importance.html | 199 +- ml-advanced/gradient-boosting/xgboost.html | 201 +- ml-advanced/kernel-method.html | 205 +- ml-advanced/model-selection.html | 199 +- ml-advanced/unsupervised-learning.html | 199 +- ...b-app-to-use-a-machine-learning-model.html | 199 +- .../applied-ml-build-a-web-app.html | 199 +- .../getting-started-with-classification.html | 199 +- .../introduction-to-classification.html | 199 +- .../classification/more-classifiers.html | 237 +- .../classification/yet-other-classifiers.html | 403 +- ml-fundamentals/ml-overview.html | 199 +- .../linear-and-polynomial-regression.html | 207 +- .../regression/logistic-regression.html | 209 +- ml-fundamentals/regression/managing-data.html | 199 +- ...egression-models-for-machine-learning.html | 199 +- .../regression/tools-of-the-trade.html | 199 +- objects.inv | Bin 9592 -> 9644 bytes .../python-programming-advanced.html | 199 +- prerequisites/python-programming-basics.html | 199 +- .../python-programming-introduction.html | 199 +- search.html | 199 +- searchindex.js | 2 +- .../data-science-in-real-world.html | 199 +- .../data-science-in-the-cloud.html | 199 +- .../data-science-introduction.html | 199 +- .../data-science/data-science-lifecycle.html | 199 +- slides/data-science/data-visualization.html | 199 +- slides/data-science/numpy-and-pandas.html | 199 +- ...relational-vs-non-relational-database.html | 199 +- slides/deep-learning/cnn.html | 199 +- slides/deep-learning/gan.html | 199 +- slides/introduction.html | 203 +- slides/ml-advanced/kernel-method.html | 199 +- slides/ml-advanced/model-selection.html | 199 +- slides/ml-advanced/unsupervised-learning.html | 199 +- .../ml-fundamentals/build-an-ml-web-app.html | 199 +- slides/ml-fundamentals/linear-regression.html | 199 +- .../logistic-regression-condensed.html | 199 +- .../ml-fundamentals/logistic-regression.html | 199 +- slides/ml-fundamentals/ml-overview.html | 199 +- slides/ml-fundamentals/neural-network.html | 199 +- .../python-programming-advanced.html | 199 +- .../python-programming-basics.html | 199 +- .../python-programming-introduction.html | 199 +- 309 files changed, 61100 insertions(+), 47191 deletions(-) delete mode 100644 _images/boxplot_byrole.png delete mode 100644 _images/boxplot_explanation.png rename _images/{ml-linear-regression-1_18_1.png => california_housing_18_1.png} (100%) rename _images/{ml-linear-regression-1_21_1.png => california_housing_21_1.png} (100%) rename _images/{ml-linear-regression-1_23_1.png => california_housing_23_1.png} (100%) rename _images/{ml-linear-regression-1_24_1.png => california_housing_24_1.png} (100%) rename _images/{ml-linear-regression-1_26_1.png => california_housing_26_1.png} (100%) rename _images/{ml-linear-regression-1_29_1.png => california_housing_29_1.png} (100%) rename _images/{ml-linear-regression-1_31_1.png => california_housing_31_1.png} (100%) delete mode 100644 _images/data-science-word-cloud.png delete mode 100644 _images/hype-cycle-for-ai.png create mode 100644 _images/introduction-and-data-structures_122_1.png rename _images/{linear-regression-implementation-from-scratch_12_1.png => linear-regression-from-scratch_12_1.png} (100%) rename _images/{linear-regression-implementation-from-scratch_4_0.png => linear-regression-from-scratch_4_0.png} (100%) rename _images/{linear-regression-implementation-from-scratch_6_1.png => linear-regression-from-scratch_6_1.png} (100%) rename _images/{linear-regression-metrics_30_0.png => linear-regression-metrics_28_0.png} (100%) rename _images/{logistic-regression_8_3.png => logistic-regression_8_4.png} (100%) delete mode 100644 _images/ml-linear-regression-2_13_0.png delete mode 100644 _images/ml-linear-regression-2_4_1.png delete mode 100644 _images/ml-linear-regression-2_6_0.png delete mode 100644 _images/normal-histogram.png delete mode 100644 _images/pandas_118_1.png delete mode 100644 _images/the-data-science-venn-diagram.png delete mode 100644 _images/weight-boxplot.png delete mode 100644 _images/weight-height-relationship.png delete mode 100644 _images/weight-histogram.png rename _sources/assignments/ml-fundamentals/{ml-linear-regression-1.ipynb => linear-regression/california_housing.ipynb} (99%) rename _sources/assignments/ml-fundamentals/{linear-regression-implementation-from-scratch.ipynb => linear-regression/linear-regression-from-scratch.ipynb} (100%) delete mode 100644 _sources/assignments/ml-fundamentals/ml-linear-regression-2.ipynb delete mode 100644 _sources/data-science/introduction/data-science-ethics.md delete mode 100644 _sources/data-science/introduction/defining-data-science.md delete mode 100644 _sources/data-science/introduction/defining-data.md delete mode 100644 _sources/data-science/introduction/introduction-to-statistics-and-probability.md delete mode 100644 _sources/data-science/introduction/introduction.md delete mode 100644 _sources/data-science/working-with-data/pandas.ipynb create mode 100644 _sources/data-science/working-with-data/pandas/advanced-pandas-techniques.ipynb create mode 100644 _sources/data-science/working-with-data/pandas/data-selection.ipynb create mode 100644 _sources/data-science/working-with-data/pandas/introduction-and-data-structures.ipynb rename assignments/ml-fundamentals/{ml-linear-regression-1.html => linear-regression/california_housing.html} (81%) rename assignments/ml-fundamentals/{linear-regression-implementation-from-scratch.html => linear-regression/linear-regression-from-scratch.html} (68%) delete mode 100644 assignments/ml-fundamentals/ml-linear-regression-2.html create mode 100644 data-science/working-with-data/pandas/advanced-pandas-techniques.html create mode 100644 data-science/working-with-data/pandas/data-selection.html create mode 100644 data-science/working-with-data/pandas/introduction-and-data-structures.html diff --git a/_images/boxplot_byrole.png b/_images/boxplot_byrole.png deleted file mode 100644 index 15226014c0e523554f849db3d9517decf0395244..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8393 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

SFTb)C@Ouj47xbHOaLmFW+c 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 diff --git a/_images/ml-linear-regression-1_18_1.png b/_images/california_housing_18_1.png similarity index 100% rename from _images/ml-linear-regression-1_18_1.png rename to _images/california_housing_18_1.png diff --git a/_images/ml-linear-regression-1_21_1.png b/_images/california_housing_21_1.png similarity index 100% rename from _images/ml-linear-regression-1_21_1.png rename to _images/california_housing_21_1.png diff --git a/_images/ml-linear-regression-1_23_1.png b/_images/california_housing_23_1.png similarity index 100% rename from _images/ml-linear-regression-1_23_1.png rename to _images/california_housing_23_1.png diff --git a/_images/ml-linear-regression-1_24_1.png b/_images/california_housing_24_1.png similarity index 100% rename from _images/ml-linear-regression-1_24_1.png rename to _images/california_housing_24_1.png diff --git a/_images/ml-linear-regression-1_26_1.png b/_images/california_housing_26_1.png similarity index 100% rename from _images/ml-linear-regression-1_26_1.png rename to _images/california_housing_26_1.png diff --git a/_images/ml-linear-regression-1_29_1.png b/_images/california_housing_29_1.png similarity index 100% rename from _images/ml-linear-regression-1_29_1.png rename to _images/california_housing_29_1.png diff --git a/_images/ml-linear-regression-1_31_1.png b/_images/california_housing_31_1.png similarity index 100% rename from _images/ml-linear-regression-1_31_1.png rename to _images/california_housing_31_1.png diff --git a/_images/data-science-word-cloud.png b/_images/data-science-word-cloud.png deleted file mode 100644 index 24432c825c59710611dcd761ce852fcb53d517ab..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 324125 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�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�<4ib2`)Npa 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�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

Y&-3)g<`$OuShIMp{0B2A*ASiD&C;a*; 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 G@&5oAUE>b` diff --git a/_images/introduction-and-data-structures_122_1.png b/_images/introduction-and-data-structures_122_1.png new file mode 100644 index 0000000000000000000000000000000000000000..6dfce5f0423b6db2f956cf5356b0f01c9f75193b GIT binary patch literal 19987 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

UTq#5!1jByO_EQZffi@+N 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 diff --git a/_images/kernel-method_15_0.png b/_images/kernel-method_15_0.png index 8fcc5a33439c391c1a54c04b01b8dae83685daea..490d5b4ab4b9befc78075f2fe1581f78dc334feb 100644 GIT binary patch literal 83948 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%0Dec(qc=rSZ|WUbxSCJ3NJvRnH`8o?9d*;iuw{7? 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

lakVq7H{W+Mt#>A(5J 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 diff --git a/_images/kernel-method_19_0.png b/_images/kernel-method_19_0.png index 3b6e41fccbb7c13afd005485b6b7ed4b192ad844..4d1bd5ce818a2cb09ea0539da4d67ae33be62a74 100644 GIT binary patch literal 36952 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 diff --git a/_images/kernel-method_26_0.png b/_images/kernel-method_26_0.png index fa2e23eb27cd50db2e176dfee533887c91d9c696..ed5694624b046472646088fb71a92e74961c593e 100644 GIT binary patch literal 51861 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 diff --git a/_images/linear-regression-implementation-from-scratch_12_1.png b/_images/linear-regression-from-scratch_12_1.png similarity index 100% rename from _images/linear-regression-implementation-from-scratch_12_1.png rename to _images/linear-regression-from-scratch_12_1.png diff --git a/_images/linear-regression-implementation-from-scratch_4_0.png b/_images/linear-regression-from-scratch_4_0.png similarity index 100% rename from _images/linear-regression-implementation-from-scratch_4_0.png rename to _images/linear-regression-from-scratch_4_0.png diff --git a/_images/linear-regression-implementation-from-scratch_6_1.png b/_images/linear-regression-from-scratch_6_1.png similarity index 100% rename from _images/linear-regression-implementation-from-scratch_6_1.png rename to _images/linear-regression-from-scratch_6_1.png diff --git a/_images/linear-regression-metrics_30_0.png b/_images/linear-regression-metrics_28_0.png similarity index 100% rename from _images/linear-regression-metrics_30_0.png rename to _images/linear-regression-metrics_28_0.png diff --git a/_images/logistic-regression_8_3.png b/_images/logistic-regression_8_4.png similarity index 100% rename from _images/logistic-regression_8_3.png rename to _images/logistic-regression_8_4.png diff --git a/_images/ml-linear-regression-2_13_0.png b/_images/ml-linear-regression-2_13_0.png deleted file mode 100644 index 878b8d368725e38d3ef70b918dfc44e163a24551..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 100858 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

yfJG5#80#z?t-bn>PsC2-3_nwqM0HEI7B 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 NeDQ{ClC-A#{{z{J+bjS8 diff --git a/_images/ml-linear-regression-2_4_1.png b/_images/ml-linear-regression-2_4_1.png deleted file mode 100644 index 1be8d694792fcbfa738ca71d11d369d8de0b91fd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 20720 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 A-T(jq diff --git a/_images/ml-linear-regression-2_6_0.png b/_images/ml-linear-regression-2_6_0.png deleted file mode 100644 index 6ae6c8cf0bd184181f6d00ab1e1e94f3c7031c02..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 33542 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 ASpWb4 diff --git a/_images/normal-histogram.png b/_images/normal-histogram.png deleted file mode 100644 index af40eca903ee1a51ef822551477f6f9fbc54d436..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 21538 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�t9?=(2T>vm?Pz{%%^E>a!k&w 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

(A8m!!YX>&cH(q`yTHZ8rD6r4uU_?( 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 NqphKjE>p7#{XdaBocsU) diff --git a/_images/tools-of-the-trade_13_0.png b/_images/tools-of-the-trade_13_0.png index 8befd276cd95c5d8c7c3531f2cf1810754a130b7..c7152dc5580aa08cd4ad57665c745fcc527c5fbe 100644 GIT binary patch literal 37233 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 p+xmj>uhf|(5{7a9zttCxJ$Fy4}-@f>L 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 A761SM diff --git a/_images/visualization-relationships_20_0.png b/_images/visualization-relationships_20_0.png index 560c299b35fec97c4bb91e9e52ac5726d0b9b801..e82c624bb2fb398a5275dff6bca2dc981a1eaace 100644 GIT binary patch literal 88234 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�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 h#Qtah2Os~jNA=BhRq9`PL%ibi(-aE+(*|Ym~ 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 diff --git a/_images/weight-height-relationship.png b/_images/weight-height-relationship.png deleted file mode 100644 index 523a09a9ce24305cc3e6c5bc7a25cb1550a2a8c1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8416 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 diff --git a/_images/weight-histogram.png b/_images/weight-histogram.png deleted file mode 100644 index 832c41ddff9091b806e11686644481aaf70d45d3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3948 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 H{^S1voNmIn diff --git a/_sources/assignments/ml-fundamentals/create-a-regression-model.ipynb b/_sources/assignments/ml-fundamentals/create-a-regression-model.ipynb index 5f341e4300..182590436c 100644 --- a/_sources/assignments/ml-fundamentals/create-a-regression-model.ipynb +++ b/_sources/assignments/ml-fundamentals/create-a-regression-model.ipynb @@ -2,7 +2,7 @@ "cells": [ { "cell_type": "markdown", - "id": "2af31651", + "id": "c796e548", "metadata": {}, "source": [ "# Create a regression model\n", diff --git a/_sources/assignments/ml-fundamentals/exploring-visualizations.ipynb b/_sources/assignments/ml-fundamentals/exploring-visualizations.ipynb index da66d2cfcf..19f8f88390 100644 --- a/_sources/assignments/ml-fundamentals/exploring-visualizations.ipynb +++ b/_sources/assignments/ml-fundamentals/exploring-visualizations.ipynb @@ -2,7 +2,7 @@ "cells": [ { "cell_type": "markdown", - "id": "3c3109bd", + "id": "b274befa", "metadata": {}, "source": [ "# Exploring visualizations\n", diff --git a/_sources/assignments/ml-fundamentals/ml-linear-regression-1.ipynb b/_sources/assignments/ml-fundamentals/linear-regression/california_housing.ipynb similarity index 99% rename from _sources/assignments/ml-fundamentals/ml-linear-regression-1.ipynb rename to _sources/assignments/ml-fundamentals/linear-regression/california_housing.ipynb index ab467ed829..a50ea326d9 100644 --- a/_sources/assignments/ml-fundamentals/ml-linear-regression-1.ipynb +++ b/_sources/assignments/ml-fundamentals/linear-regression/california_housing.ipynb @@ -6,7 +6,7 @@ "id": "81e5f991-6918-4b4f-89f5-ce606f3d54f7", "metadata": {}, "source": [ - "# ML linear regression - assignment 1\n", + "# Linear regression - California Housing\n", "\n", "In this assignment, we will predict the price of a house by its region, size, number of bedrooms, etc.\n", "\n", diff --git a/_sources/assignments/ml-fundamentals/linear-regression/gradient-descent.ipynb b/_sources/assignments/ml-fundamentals/linear-regression/gradient-descent.ipynb index 35553a25da..9dca445ec0 100644 --- a/_sources/assignments/ml-fundamentals/linear-regression/gradient-descent.ipynb +++ b/_sources/assignments/ml-fundamentals/linear-regression/gradient-descent.ipynb @@ -169,14 +169,30 @@ "import pandas as pd\n", "import sklearn\n", "import matplotlib.pyplot as plt\n", - "from sklearn.model_selection import train_test_split" + "from sklearn.model_selection import train_test_split\n", + "from mpl_toolkits.mplot3d import Axes3D" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "# Linear Regression With Gradient Descent" + "## 1. One-dimensional gradient descent\n", + "One-dimensional gradient descent is a simple optimization algorithm used to find the minimum (or maximum) of a univariate function. " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Here are the main steps: " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "> step 1: Choose an initial point on the function curve. For example, we choose an initial x value." ] }, { @@ -185,55 +201,357 @@ "metadata": {}, "outputs": [], "source": [ - "class LinearRegression:\n", - " def __init__(self, learning_rate=0.0003, n_iters=3000):\n", - " self.lr = learning_rate\n", - " self.n_iters = n_iters\n", - " self.weights = None\n", - " self.bias = None\n", - "\n", - " def fit(self, X, y):\n", - " n_samples, n_features = X.shape\n", - "\n", - " # Initialize parameters\n", - " self.weights = np.zeros(n_features)\n", - " self.bias = 0\n", - "\n", - " # Gradient Descent\n", - " for _ in range(self.n_iters):\n", - " # Approximate y with a linear combination of weights and x, plus bias\n", - " y_predicted = np.dot(X, self.weights) + self.bias\n", - "\n", - " # Compute gradients\n", - " dw = (1 / n_samples) * np.dot(X.T, (y_predicted - y))\n", - " db = (1 / n_samples) * np.sum(y_predicted - y)\n", - " \n", - " # Update parameters\n", - " self.weights -= self.lr * dw\n", - " self.bias -= self.lr * db\n", - "\n", - " def predict(self, X):\n", - " y_predicted = np.dot(X, self.weights) + self.bias\n", - " return y_predicted\n", - "\n", - "# Load data and perform linear regression\n", - "prostate = pd.read_table(\"https://static-1300131294.cos.ap-shanghai.myqcloud.com/data/prostate.data\")\n", - "prostate.drop(prostate.columns[0], axis=1, inplace=True)\n", + "x = 10" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "> step 2: Compute the derivative of the function at the current point. In this case, the derivative of the function is computed as follows:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "def df(x):\n", + " return 2 * x + 5" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "> step 3: Update the position along the function curve using the gradient and the learning rate. The learning rate determines the size of the step." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "learning_rate = 0.3\n", + "x -= learning_rate * df(x)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "> step 4: Repeat the process for a specified number of iterations." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "max_iter = 100\n", + "for i in range(max_iter):\n", + " gradient = df(x)\n", + " x -= learning_rate * gradient" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "> step 5: Output the result, which is the minimum value of x that corresponds to the minimum of the function." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "print('x_min:', x)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Let's try!" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Define the target function\n", + "def f(x):\n", + " return x ** 2 + 5 * x + 10\n", "\n", - "X = prostate.drop([\"lpsa\", \"train\"], axis=1)\n", - "y = prostate[\"lpsa\"]\n", + "# Define the guidance of the target function\n", + "def df(x):\n", + " return 2 * x + 5\n", "\n", - "regressor = LinearRegression()\n", + "x = np.linspace(-10, 10, 100)\n", + "y = f(x)\n", + "plt.plot(x, y, label='f(x)')" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Define gradient descent function\n", + "def gradient_descent(learning_rate, max_iter, x_init):\n", + " # step 1:start with an initial value for the input variable, denoted as x_int.\n", + " x = x_init\n", + " x_history = [x]\n", + " for i in range(max_iter):\n", + " # step 2:compute the derivative of the function at the current point.\n", + " gradient = df(x)\n", + " x -= learning_rate * gradient\n", + " # step 3:update the position along the function curve.\n", + " x_history.append(x)\n", + " # step 4:repeat the process.\n", + " return x, x_history" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Set the learning rate and initial value\n", + " # learning rate: the size of the step for gradient descent.\n", + " # max_iter: number of gradient descent iterations.\n", + "learning_rate = 0.3\n", + "max_iter = 100\n", + "x_init = 10\n", + "\n", + "# Run gradient descent function\n", + "x_min, x_history = gradient_descent(learning_rate, max_iter, x_init)\n", + "\n", + "# Draw the target function and the process of gradient descent\n", + "x = np.linspace(-10, 10, 100)\n", + "y = f(x)\n", + "y_history = f(np.array(x_history))\n", + "plt.plot(x, y, label='f(x)')\n", + "plt.plot(x_history, y_history, 'ro-', label='Gradient Descent')\n", + "plt.xlabel('x')\n", + "plt.ylabel('f(x)')\n", + "plt.legend()\n", + "plt.title('One-Dimensional Gradient Descent')\n", + "plt.show()\n", + "\n", + "print('x_min:', x_min)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "you can change `learning rate` and `max_iter` to see different images." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 2. Two-dimensional gradient descent\n", + "Two-dimensional gradient descent is an optimization algorithm used to find the minimum (or maximum) of a function with two input variables." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Here are the main steps: " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "> step 1: Choose an initial point on the function surface by specifying initial values for both x and y." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "x_init = -5\n", + "y_init = 5" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "> step 2: Compute the partial derivatives of the function at the current point. These partial derivatives represent the rate of change of the function with respect to x and y." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "def dfx(x, y):\n", + " return 2 * x + 5\n", "\n", - "regressor.fit(X, y)\n", - "y_pred = regressor.predict(X)\n", + "def dfy(x, y):\n", + " return 2 * y + 2" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "> step 3: Update the positions along the function surface for both x and y using their respective partial derivatives and the learning rate." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "learning_rate = 0.1\n", + "x -= learning_rate * dfx(x, y)\n", + "y -= learning_rate * dfy(x, y)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "> step 4: Repeat the process for a specified number of iterations." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "max_iter = 100\n", + "for i in range(max_iter):\n", + " gradient_x = dfx(x, y)\n", + " gradient_y = dfy(x, y)\n", + " x -= learning_rate * gradient_x\n", + " y -= learning_rate * gradient_y" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "> step 5: Output the results, which are the minimum values of x and y that correspond to the minimum of the function." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "print('x_min:', x)\n", + "print('y_min:', y)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Let's try!" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Define the target function\n", + "def f(x, y):\n", + " return x ** 2 + y ** 2 + 5 * x + 2 * y + 10\n", "\n", - "print(regressor.__dict__)\n", - "print(y - y_pred)\n", + "# Take the partial derivative of the objective function with respect to x\n", + "def dfx(x, y):\n", + " return 2 * x + 5\n", "\n", - "plt.scatter(y, y_pred)\n", - "plt.plot([0, 5], [0, 5])\n", - "plt.show()\n" + "# Take the partial derivative of the objective function with respect to y\n", + "def dfy(x, y):\n", + " return 2 * y + 2" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Define the two-dimensional gradient descent function\n", + "def gradient_descent(learning_rate, max_iter, x_init, y_init):\n", + " # step 1:start with an initial value for the two input variables, denoted as (x_init, y_init).\n", + " x = x_init\n", + " y = y_init\n", + " x_history = [x]\n", + " y_history = [y]\n", + " for i in range(max_iter):\n", + " # step 2:compute the partial derivatives of the function at the current point.\n", + " gradient_x = dfx(x, y)\n", + " gradient_y = dfy(x, y)\n", + " x -= learning_rate * gradient_x\n", + " y -= learning_rate * gradient_y\n", + " # step 3:update the positions along the function surface.\n", + " x_history.append(x)\n", + " y_history.append(y)\n", + " # step 4:repeat the process.\n", + " return x, y, x_history, y_history" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Set the learning rate and initial value\n", + "learning_rate = 0.1\n", + "max_iter = 100\n", + "x_init = -5\n", + "y_init = 5\n", + "\n", + "# Run two-dimensional gradient descent function\n", + "x_min, y_min, x_history, y_history = gradient_descent(learning_rate, max_iter, x_init, y_init)\n", + "\n", + "# Draw the target function and the process of gradient descent\n", + "x = np.linspace(-10, 10, 100)\n", + "y = np.linspace(-10, 10, 100)\n", + "X, Y = np.meshgrid(x, y)\n", + "Z = f(X, Y)\n", + "\n", + "fig = plt.figure()\n", + "ax = fig.add_subplot(111, projection='3d')\n", + "ax.plot_surface(X, Y, Z, cmap='viridis', alpha=0.8)\n", + "ax.plot(x_history, y_history, f(np.array(x_history), np.array(y_history)), 'ro-', label='Gradient Descent')\n", + "ax.set_xlabel('x')\n", + "ax.set_ylabel('y')\n", + "ax.set_zlabel('f(x, y)')\n", + "ax.legend()\n", + "ax.set_title('Two-Dimensional Gradient Descent')\n", + "plt.show()\n", + "\n", + "print('x_min:', x_min)\n", + "print('y_min:', y_min)\n" ] } ], diff --git a/_sources/assignments/ml-fundamentals/linear-regression-implementation-from-scratch.ipynb b/_sources/assignments/ml-fundamentals/linear-regression/linear-regression-from-scratch.ipynb similarity index 100% rename from _sources/assignments/ml-fundamentals/linear-regression-implementation-from-scratch.ipynb rename to _sources/assignments/ml-fundamentals/linear-regression/linear-regression-from-scratch.ipynb diff --git a/_sources/assignments/ml-fundamentals/linear-regression/linear-regression-metrics.ipynb b/_sources/assignments/ml-fundamentals/linear-regression/linear-regression-metrics.ipynb index 4694de02ab..27fcc51a9e 100644 --- a/_sources/assignments/ml-fundamentals/linear-regression/linear-regression-metrics.ipynb +++ b/_sources/assignments/ml-fundamentals/linear-regression/linear-regression-metrics.ipynb @@ -1,36 +1,5 @@ { "cells": [ - { - "cell_type": "code", - "execution_count": 2, - "id": "a23a2854-7e54-4a24-9ae4-0f8904f899ee", - "metadata": {}, - "outputs": [], - "source": [ - "# Install the necessary dependencies\n", - "\n", - "import os\n", - "import sys\n", - "!{sys.executable} -m pip install --quiet pandas scikit-learn numpy matplotlib jupyterlab_myst ipython\n" - ] - }, - { - "cell_type": "markdown", - "id": "3780e038-4395-44e7-9294-a54ae4bc731d", - "metadata": {}, - "source": [ - "---\n", - "license:\n", - " code: MIT\n", - " content: CC-BY-4.0\n", - "github: https://github.com/ocademy-ai/machine-learning\n", - "venue: By Ocademy\n", - "open_access: true\n", - "bibliography:\n", - " - https://raw.githubusercontent.com/ocademy-ai/machine-learning/main/open-machine-learning-jupyter-book/references.bib\n", - "---" - ] - }, { "cell_type": "markdown", "id": "63961ec0-328a-4289-8667-cc86f09db8f1", @@ -397,97 +366,6 @@ "Residual analysis is a crucial step in understanding the limitations of the model and can provide insights into potential areas of improvement." ] }, - { - "cell_type": "markdown", - "id": "812056ec", - "metadata": {}, - "source": [ - "## Adjusted R-squared" - ] - }, - { - "cell_type": "markdown", - "id": "bd2af42b", - "metadata": {}, - "source": [ - "The adjusted R-squared is a modified version of the R-squared score that takes into account the number of independent variables in the model. It penalizes the inclusion of unnecessary variables that do not significantly contribute to explaining the variance in the dependent variable." - ] - }, - { - "cell_type": "markdown", - "id": "e810e46e", - "metadata": {}, - "source": [ - "### The Formula" - ] - }, - { - "cell_type": "markdown", - "id": "a90544c6", - "metadata": {}, - "source": [ - "The formula for Adjusted R-squared is:\n", - "$$ \\text{Adjusted } R^2 = 1 - \\frac{{(1 - R^2)(n - 1)}}{{n - k - 1}} $$\n", - "Where:\n", - "\n", - "\n", - "- $n$ is the number of data points\n", - "- $k$ is the number of independent variables" - ] - }, - { - "cell_type": "markdown", - "id": "7a9a9fa5", - "metadata": {}, - "source": [ - "### Python Implementation" - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "id": "53f70b1d", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Adjusted R-squared Score: 0.7552043176561298\n" - ] - } - ], - "source": [ - "# Define the number of independent variables (k)\n", - "'''\n", - "In this code, you'll need to replace num_independent_variables with the actual number of independent variables in your model.\n", - "'''\n", - "num_independent_variables = 2 # Replace with the actual number of independent variables\n", - "\n", - "# Calculate adjusted R2 score\n", - "adjusted_r2_score = 1 - ((1 - r2_score) * (len(actual_values) - 1)) / (len(actual_values) - num_independent_variables - 1)\n", - "\n", - "# Print the adjusted R2 score\n", - "print(\"Adjusted R-squared Score:\", adjusted_r2_score)" - ] - }, - { - "cell_type": "markdown", - "id": "bc0b5d20", - "metadata": {}, - "source": [ - "### Interpretation" - ] - }, - { - "cell_type": "markdown", - "id": "78eb9684", - "metadata": {}, - "source": [ - "The adjusted R-squared score provides a more accurate representation of the model's explanatory power, especially when dealing with multiple independent variables.\n", - "A higher adjusted R-squared indicates that a larger proportion of the variance in the dependent variable is explained by the independent variables." - ] - }, { "cell_type": "markdown", "id": "74fa14ed", @@ -666,8 +544,6 @@ "\n", "- R-squared (R2) Score: Indicates the proportion of the variance in the dependent variable that is predictable from the independent variables.\n", "\n", - "- Adjusted R-squared: A modified R2 score that considers the number of independent variables in the model.\n", - "\n", "- Mean Absolute Error (MAE): Measures the average absolute differences between actual and predicted values.\n", "\n", "- Mean Absolute Percentage Error (MAPE): Measures the average absolute percentage difference between actual and predicted values.\n", diff --git a/_sources/assignments/ml-fundamentals/ml-linear-regression-2.ipynb b/_sources/assignments/ml-fundamentals/ml-linear-regression-2.ipynb deleted file mode 100644 index 5b1ebeb484..0000000000 --- a/_sources/assignments/ml-fundamentals/ml-linear-regression-2.ipynb +++ /dev/null @@ -1,329 +0,0 @@ -{ - "cells": [ - { - "attachments": {}, - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# ML linear regression - assignment 2\n", - "In this assignment, we will explain the principle of one-dimensional gradient descent and multidimensional gradient descent." - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## One-dimensional gradient descent\n", - "One-dimensional gradient descent is a simple optimization algorithm used to find the minimum (or maximum) of a univariate function. " - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Here are the main steps: \n", - "\n", - "> step 1: choose an initial point on the function curve.\n", - "\n", - "> step 2: compute the derivative of the function at the current point.\n", - "\n", - "> step 3: update the position along the function curve.\n", - "\n", - "> step 4: repeat the process.\n", - "\n", - "> step 5: output the result." - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "metadata": {}, - "outputs": [], - "source": [ - "%matplotlib inline\n", - "import numpy as np\n", - "import matplotlib.pyplot as plt" - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "[]" - ] - }, - "execution_count": 5, - "metadata": {}, - "output_type": "execute_result" - }, - { - "data": { - "image/png": "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", - "text/plain": [ - "

" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "# Define the target function\n", - "def f(x):\n", - " return x ** 2 + 5 * x + 10\n", - "\n", - "# Define the guidance of the target function\n", - "def df(x):\n", - " return 2 * x + 5\n", - "\n", - "x = np.linspace(-10, 10, 100)\n", - "y = f(x)\n", - "plt.plot(x, y, label='f(x)')" - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "metadata": {}, - "outputs": [], - "source": [ - "# Define gradient descent function\n", - "def gradient_descent(learning_rate, max_iter, x_init):\n", - " # step 1:start with an initial value for the input variable, denoted as x_int.\n", - " x = x_init\n", - " x_history = [x]\n", - " for i in range(max_iter):\n", - " # step 2:compute the derivative of the function at the current point.\n", - " gradient = df(x)\n", - " x -= learning_rate * gradient\n", - " # step 3:update the position along the function curve.\n", - " x_history.append(x)\n", - " # step 4:repeat the process.\n", - " return x, x_history" - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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TEiyI0xW/fr1mTNnDsOHD6dBgwYMGTKEYsWKERYWxvz58zlw4ABz5szJVN1DWvt+5513ePPNNzl48CCNGjXC0dGR8PBw9uzZQ6VKlXj33Xczta+QkBBcXV1JSkrixo0bbNu2jeXLl1OkSBF+//13/aWn3ODk5MTXX39Nnz59uHv3Ll26dKFIkSLcunWLo0ePcuvWLRYuXJilfU6YMIFr167RrFkzfHx8uH//PnPnzjWoR0nL1KlTad68OU2bNmX06NHY2NiwYMECTpw4wapVq7KcWAQGBlKwYEEGDhzIxIkTsba25scff3xqoMas6NGjBydPnuTzzz/n6NGj9O3bl9KlS6PVarl69SrLly8HwNnZOcfis7Cw4NNPP6Vfv368+uqr9O/fn/v37zNp0qQ0L209afLkyQQFBREYGMh7771H2bJliY+P5/Lly2zcuJFFixZleIknLZUqVQJg+vTp+p7RypUrZ/hZ1Wq1+lvYExISCAsL46+//uKnn36ifPny/PTTT/q2fn5+TJ48mfHjx3Pp0iVatWpFwYIFuXnzJv/++y+Ojo588sknHDt2jCFDhvDaa69RunRpbGxs+Pvvvzl27Bhjx47V7+vDDz/k008/JS4uTn+7+KlTp7h9+zaffPJJrvwepL5PO3bs4Pfff8fLywtnZ2fKli2b5f0IE2C82mghMmffvn2qS5cuysPDQ1lZWakiRYqoTp06qb179z7VNr07pFLvAAoNDTVY/v3336s6deooR0dHZW9vr0qWLKneeOMNdfDgwWfGlfpaqQ9bW1vl5eWlWrRooebOnauio6Of2ia9u7EGDx5ssCz1zpovvvjCYPn27dsVoH7++WeD5Tt37lRt27ZVbm5uytraWhUtWlS1bdvWoF1m35s//vhDtW7dWhUtWlTZ2NioIkWKqDZt2qjdu3c/Fd/jd2MppdTu3bvVSy+9pH8/69atq37//fc0Xy84ODjNY9u+fbt+2d69e1W9evWUg4ODKly4sOrXr586dOjQU6+d2UEFU+3atUt169ZN+fj4KGtra+Xg4KAqVKig3n333afOfePGjVXFihXT3E9m41NKqf/973+qdOnSysbGRpUpU0Z9//336X4eHr8bSymlbt26pd577z3l7++vrK2tlZubm6pRo4YaP368/i6+9D4zae0zISFB9evXTxUuXFhpNJo0fzce16dP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n84fQHBwsMGxBQUFAfDaa69luJ2pnr8HDx5QpUoV5s2bl+b67Pwt3LdvH926daN3794cPXqU3r1707VrVw4cOJBzgSuRI5YsWaJcXV2fWr5x40ZlYWGhrl+/rl+2atUqZWtrq6KiotLc1/3795W1tbVavXq1ftn169eVhYWF2rRpU47Hnl2JiYmqSJEiavLkyRm269Onj3rllVfyJqgcULx4cTV79uxMt9dqtcrT01NNmzZNvyw+Pl65urqqRYsW5UKEOWvGjBnK398/wzamfA5r166tBg4caLCsXLlyauzYsWm2f//991W5cuUMlg0YMEDVrVs312LMKZGRkQpQO3fuTLfN9u3bFaDu3buXd4E9h4kTJ6oqVapkun1+Pn9KKTVs2DBVsmRJpdVq01yfn84foNavX6//Obt/C7t27apatWplsKxly5aqe/fuORar9Ozksn379hEQEIC3t7d+WcuWLUlISCAkJCTNbUJCQkhKSqJFixb6Zd7e3gQEBLB3795cjzmzfvvtN27fvk3fvn2f2XbHjh0UKVKEMmXK0L9/fyIjI3M/wOcwffp03N3dqVq1Kp9//nmGl3lCQ0OJiIgwOF+2trY0btzYpM5XeqKionBzc3tmO1M8h4mJiYSEhBi89wAtWrRI973ft2/fU+1btmzJwYMHSUpKyrVYc0JUVBRAps5XtWrV8PLyolmzZmzfvj23Q3su58+fx9vbG39/f7p3786lS5fSbZufz19iYiIrVqzgrbfeeuak0/np/KXK7t/C9M5pTv79lGQnl0VERODh4WGwrGDBgtjY2BAREZHuNjY2NhQsWNBguYeHR7rbGMPixYtp2bIlvr6+GbZr3bo1P/74I3///TdffvklwcHBvPTSSyQkJORRpFkzbNgwVq9ezfbt2xkyZAhz5sxh0KBB6bZPPSdPnmdTO19puXjxIl9//TUDBw7MsJ2pnsPbt2+TkpKSpfc+rd9JDw8PkpOTuX37dq7F+ryUUowcOZIGDRoQEBCQbjsvLy++/fZb1q5dy7p16yhbtizNmjVj165deRht5tWpU4cffviBzZs389133xEREUFgYCB37txJs31+PX8AGzZs4P79+xn+AzG/nb/HZfdvYXrnNCf/fsqs52mYNGkSn3zySYZtgoODn1mnkiqtDF4p9czMPie2yYzsHO+1a9fYvHkzP/300zP3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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "x_min: -2.5\n" - ] - } - ], - "source": [ - "# Set the learning rate and initial value\n", - " # learning rate: the size of the step for gradient descent.\n", - " # max_iter: number of gradient descent iterations.\n", - "learning_rate = 0.3\n", - "max_iter = 100\n", - "x_init = 10\n", - "\n", - "# Run gradient descent function\n", - "x_min, x_history = gradient_descent(learning_rate, max_iter, x_init)\n", - "\n", - "# Draw the target function and the process of gradient descent\n", - "x = np.linspace(-10, 10, 100)\n", - "y = f(x)\n", - "y_history = f(np.array(x_history))\n", - "plt.plot(x, y, label='f(x)')\n", - "plt.plot(x_history, y_history, 'ro-', label='Gradient Descent')\n", - "plt.xlabel('x')\n", - "plt.ylabel('f(x)')\n", - "plt.legend()\n", - "plt.title('One-Dimensional Gradient Descent')\n", - "plt.show()\n", - "\n", - "print('x_min:', x_min)" - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "metadata": {}, - "source": [ - "you can change `learning rate` and `max_iter` to see different images." - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Multidimensional gradient descent\n", - "Two-dimensional gradient descent is an optimization algorithm used to find the minimum (or maximum) of a function with two input variables." - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Here are the main steps: \n", - "\n", - "> step 1: choose an initial point on the function curve.\n", - "\n", - "> step 2: compute the partial derivatives of the function at the current point.\n", - "\n", - "> step 3: update the position along the function curve.\n", - "\n", - "> step 4: repeat the process.\n", - "\n", - "> step 5: output the result." - ] - }, - { - "cell_type": "code", - "execution_count": 8, - "metadata": {}, - "outputs": [], - "source": [ - "import numpy as np\n", - "import matplotlib.pyplot as plt\n", - "from mpl_toolkits.mplot3d import Axes3D" - ] - }, - { - "cell_type": "code", - "execution_count": 9, - "metadata": {}, - "outputs": [], - "source": [ - "# Define the target function\n", - "def f(x, y):\n", - " return x ** 2 + y ** 2 + 5 * x + 2 * y + 10\n", - "\n", - "# Take the partial derivative of the objective function with respect to x\n", - "def dfx(x, y):\n", - " return 2 * x + 5\n", - "\n", - "# Take the partial derivative of the objective function with respect to y\n", - "def dfy(x, y):\n", - " return 2 * y + 2" - ] - }, - { - "cell_type": "code", - "execution_count": 10, - "metadata": {}, - "outputs": [], - "source": [ - "# Define the two-dimensional gradient descent function\n", - "def gradient_descent(learning_rate, max_iter, x_init, y_init):\n", - " # step 1:start with an initial value for the two input variables, denoted as (x_init, y_init).\n", - " x = x_init\n", - " y = y_init\n", - " x_history = [x]\n", - " y_history = [y]\n", - " for i in range(max_iter):\n", - " # step 2:compute the partial derivatives of the function at the current point.\n", - " gradient_x = dfx(x, y)\n", - " gradient_y = dfy(x, y)\n", - " x -= learning_rate * gradient_x\n", - " y -= learning_rate * gradient_y\n", - " # step 3:update the positions along the function surface.\n", - " x_history.append(x)\n", - " y_history.append(y)\n", - " # step 4:repeat the process.\n", - " return x, y, x_history, y_history" - ] - }, - { - "cell_type": "code", - "execution_count": 17, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAZsAAAGjCAYAAAD6sbg4AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy88F64QAAAACXBIWXMAAA9hAAAPYQGoP6dpAAEAAElEQVR4nOy9d5xddZ3//zzt9ja9JJNMOqGGUJNIUZooYAVBXeWrq34X5QvWx1ddFb/+1oK466674hYFFRTLiqKsgAhBkB6STHqd3mdu7/ec8/n9cefeuXcyPTPJTDjPxyMPmHNP+Zz2eZ335/MukhBCYGFhYWFhMY/IJ7sBFhYWFhanPpbYWFhYWFjMO5bYWFhYWFjMO5bYWFhYWFjMO5bYWFhYWFjMO5bYWFhYWFjMO5bYWFhYWFjMO5bYWFhYWFjMO5bYWFhYWFjMO4tebCRJmta/rVu3nvC2XX755cXjy7KM1+tl9erV3Hjjjfz617/GNM1jtmlububWW2894W2da+6//34kSaKtre1kNwXI34vLL798WuuapskDDzzANddcQ21tLZqmEQgEuPjii7nnnnsYGhqa38aWMPZ52Lp16wl5nr///e9z//33T3v95ubmsmfd7/ezfv16PvCBD/DEE0/MX0NPIj09Pdx1113s2LHjZDdlUaCe7AYcLy+88ELZ31/72td4+umneeqpp8qWn3766SeyWUVWrlzJgw8+CEAikaC1tZXf/va33HjjjVxyySX8/ve/x+/3F9d/+OGH8fl8J6Wtc8lb3/pWXnjhBRoaGk52U2ZEKpXibW97G08++STvec97+Jd/+RcaGxuJRqM8//zzfPvb3+Z3v/sdzz777Elp38aNG3nhhRfm/Xn+/ve/T3V19Yw+fLZs2cI999wDQDwe58CBAzz00ENcc801vOtd7+LnP/85mqbNU4tPPD09PXz1q1+lubmZDRs2nOzmLHzEKcYHP/hB4Xa7T3YzhBBCXHbZZeKMM84Y97cf/ehHAhA33XTTCW7V65PLLrtMXHbZZVOu99GPflQA4mc/+9m4vycSCfEf//Efk+7DNE2RTCZn08xjWL58ufjgBz84J/uaCWeccca0rleB5cuXi7e+9a3j/vaVr3xFAOJzn/vcHLVuYfDKK68IQNx3330nuymLglNebN797neL008/vWyd6667TgDil7/8ZXHZtm3bBCAeeeSR4rJdu3aJG264QQQCAWG328U555wj7r///mm3ZTKxEUKIt7zlLUKSJNHW1lZcNrZzefrppwUgHnzwQfG5z31O1NfXC7fbLa677jrR19cnotGo+MhHPiKqqqpEVVWVuPXWW0UsFis7jmma4t/+7d/EOeecIxwOhwgEAuJd73qXOHLkyLjtffnll8Ub3vAG4XQ6xYoVK8Q3vvENYRhGcT3DMMTXvvY1sXbtWuFwOITf7xdnnXWW+O53v1tc57777hOAaG1tLTvGD3/4Q3H22WcLu90uKioqxNvf/naxd+/esnUK9/DQoUPi2muvFW63WyxdulR86lOfEul0umzdu+66S1x44YWioqJCeL1ece6554r/+q//EqZpHnNuU3WePT09QlXVCTvNiQDExz/+cXHvvfeK0047TWiaJu69994ZtS+bzYrPfvazoq6uTjidTrFlyxbx0ksvTfg8PP3002Xbv/LKK+L6668XFRUVwm63iw0bNohf/OIXZesU7slTTz0l/vf//t+iqqpKVFZWine84x2iu7u7uN7y5csFUPZv+fLlk16DycRGiLx4uVwukUqlissymYz42te+JtatWydsNpuorq4Wt956qxgYGCjb9s9//rO47LLLRGVlpXA4HKKpqUm8853vFIlEorhOOp0WX/3qV8Vpp50m7Ha7qKysFJdffrn461//WlxnLt+Dwn0Y++8rX/nKpNfp9cyin7OZiiuvvJK9e/fS29sLgK7rPPPMMzidTv70pz8V13vyySdRVbU4rn/gwAE2b97Mnj17+Jd/+Rd+85vfcPrpp3Prrbdy9913z0nbbrjhBoQQ0xqS+cIXvsDAwAD3338/3/nOd9i6dSu33HIL73rXu/D7/fz85z/nc5/7HD/96U/5whe+ULbtxz72Me68806uvPJKfvvb3/L973+fPXv2sHnzZvr7+8vW7evr433vex/vf//7eeSRR7j22mv5/Oc/zwMPPFBc5+677+auu+7illtu4dFHH+UXv/gFH/7whwmHw5Oewze+8Q0+/OEPc8YZZ/Cb3/yGf/7nf6alpYVNmzZx6NChsnVzuRw33HADV1xxBb/73e/40Ic+xD/90z/xrW99q2y9trY2Pvaxj/HLX/6S3/zmN7zzne/k9ttv52tf+9qU13QsTz/9NLquc8MNN8x429/+9rfce++9fPnLX+bxxx/nkksumVH7PvKRj3DPPffwgQ98gN/97ne8613v4p3vfCehUGha7d6yZQvhcJgf/OAH/O53v2PDhg285z3vGXfe5W//9m/RNI2f/exn3H333WzdupX3v//9xd8ffvhhVq5cybnnnssLL7zACy+8wMMPPzzja1LK9ddfTzKZ5NVXXwXy82Jve9vb+OY3v8l73/teHn30Ub75zW/ypz/9icsvv5xUKgXkr99b3/pWbDYbP/rRj3jsscf45je/idvtJpvNAvl3+tprr+VrX/sa1113HQ8//DD3338/mzdvpqOjo9iGuXwPNm7cyH333QfA3//93xev09/+7d8e13U6pTnZajfXjLVsDh8+LADxk5/8RAghxHPPPVc06VesWFFc76qrrhKbN28u/n3zzTcLu90uOjo6yvZ/7bXXCpfLJcLh8JRtmcqy+eMf/ygA8a1vfau4bKIv2euvv75s2zvvvFMA4v/8n/9Ttvztb3+7qKysLP79wgsvCEB85zvfKVuvs7NTOJ3OsqGNyy67TADipZdeKlv39NNPF9dcc03x7+uuu05s2LBhkjM/1rIJhULC6XSKt7zlLWXrdXR0CLvdLt773vcWl33wgx88xvIUIm8Jrlu3bsJjGoYhcrmc+H//7/+JqqqqMuthOpbNN7/5TQGIxx577Jjfcrlc2b9SAOH3+0UwGJx0/xO1b9++fQIQn/zkJ8vWf/DBBwUwpWVz2mmniXPPPfeYdl133XWioaGh+DVeuCe33XZb2Xp33323AERvb29x2VwOowkhxL333iuAorX185//XADiv//7v8vWKwxNff/73xdCCPHrX/9aAGLHjh0T7vsnP/mJAMR//ud/TrjOfLwH1jDazDjlLZtVq1bR3NzMk08+CcCf/vQnzjrrLN7//vfT2trKkSNHyGQyPPfcc1x55ZXF7Z566imuuOIKmpqayvZ36623kkwmi44Jpmmi63rxn2EY026bmEEpoeuuu67s7/Xr1wP5ifixy4PBIPF4HIA//OEPSJLE+9///rJ21tfXc8455xzj1VRfX8+FF15Ytuzss8+mvb29+PeFF17Izp07ue2223j88ceJRqNTtv+FF14glUodM+Hc1NTEm970Jv785z+XLZckieuvv37SdkD+Pl155ZX4/X4URUHTNL785S8zPDzMwMDAlO2aDjt27EDTtLJ/Yz3S3vSmN1FRUXHMttNp39NPPw3A+973vrJtb7rpJlR1ch+ew4cPs3///uK2pff4LW95C729vRw4cKBsm7GW29lnnw1wzLWdS8Y+63/4wx8IBAJcf/31ZW3esGED9fX1xedyw4YN2Gw2PvrRj/LjH/+Yo0ePHrPvP/7xjzgcDj70oQ9NePz5eA8sZsYpLzYAV1xxRbEze/LJJ7nqqqs466yzqKur48knn+Svf/0rqVSqTGyGh4fH9aRqbGws/g7woQ99qKwTuuKKK6bdrsKDW9jnZFRWVpb9bbPZJl2eTqcB6O/vRwhBXV3dMR3miy++eEynWVVVdcyx7XZ7cVgD4POf/zz33HMPL774Itdeey1VVVVcccUVxSGS8Shcr4muaeH3Ai6XC4fDcUw7CucF8PLLL3P11VcD8J//+Z/89a9/5ZVXXuGLX/wiQFmbp8OyZcuAYzvddevW8corr/DKK6/wkY98ZNxtxzuv6bavcO719fVl26uqOu79KKUw/POZz3zmmPt72223AUx5j+12e1l75oOxz3p/fz/hcBibzXZMu/v6+optXrVqFU8++SS1tbV8/OMfZ9WqVaxatYp//ud/Lu57cHCQxsZGZHni7mw+3gOLmbHoXZ+nwxVXXMEPf/hDXn75ZV566SX+/u//Hsh/jf7pT3+ivb0dj8fDxRdfXNymqqqqOM9TSk9PDwDV1dUA3HXXXXziE58o/u71eqfdrkceeQRJkrj00ktndV7Tobq6GkmSePbZZ4udSinjLZsKVVX51Kc+xac+9SnC4TBPPvkkX/jCF7jmmmvo7OzE5XIds03h5Z3omhau50x46KGH0DSNP/zhD2XC9Nvf/nbG+4J8LI6qqjzyyCN89KMfLS53Op2cf/75QP4LeTwkSZp1+wrXpq+vjyVLlhSX67p+jAiPpXDdPv/5z/POd75z3HXWrVs36T7mGyEEv//973G73cXrWF1dTVVVFY899ti425S+R5dccgmXXHIJhmHw6quv8r3vfY8777yTuro6br75ZmpqanjuuecwTXNCwZmP98BiZrxuxEaSJL70pS8hy3Kxc7/yyiv57Gc/S3t7O5deemlZDMAVV1zBww8/TE9PT5nl8ZOf/ASXy1UUpubmZpqbm2fcpvvuu48//vGPvPe97y1+Uc8H1113Hd/85jfp7u7mpptumvP9BwIB3v3ud9Pd3c2dd95JW1vbuDEgmzZtwul08sADD3DjjTcWl3d1dfHUU0/x7ne/e8bHliQJVVVRFKW4LJVK8dOf/nRW59LQ0MCHPvQh/uM//oOHHnqIm2++eVb7mWn7Ck4pDz74IOedd15x+S9/+Ut0XZ/0GOvWrWPNmjXs3LmTr3/968fV3lLm8iv+q1/9Knv37uULX/hCUXSvu+46HnroIQzD4KKLLprWfhRF4aKLLuK0007jwQcf5LXXXuPmm2/m2muv5ec//zn333//hENp8/EenAiL8FTidSE2tbW1nHnmmTzxxBO88Y1vLH55X3nllQSDQYLBIP/4j/9Yts1XvvIV/vCHP/DGN76RL3/5y1RWVvLggw/y6KOPcvfdd5cFYk5GKpXixRdfLP7/0aNH+e1vf8sf/vAHLrvsMn7wgx/M7cmOYcuWLXz0ox/lf/2v/8Wrr77KpZdeitvtpre3l+eee46zzjqLv/u7v5vRPq+//nrOPPNMzj//fGpqamhvb+e73/0uy5cvZ82aNeNuEwgE+NKXvsQXvvAFPvCBD3DLLbcwPDzMV7/6VRwOB1/5yldmfG5vfetb+cd//Efe+9738tGPfpTh4WHuueee4/pK/e53v0trayvve9/7eOSRR3jb295GY2MjyWSS/fv389BDD+FwOKYVnDjd9q1fv573v//9fPe730XTNK688kp2797NPffcM60A33//93/n2muv5ZprruHWW29lyZIlBINB9u3bx2uvvcavfvWrGV+Hs846i4ceeohf/OIXrFy5EofDwVlnnTXpNuFwuPisJxKJYlDns88+y0033cRXv/rV4ro333wzDz74IG95y1u44447uPDCC9E0ja6uLp5++mne9ra38Y53vIMf/OAHPPXUU7z1rW9l2bJlpNNpfvSjHwEUh71vueUW7rvvPv73//7fHDhwgDe+8Y2YpslLL73E+vXrufnmm+flPVi1ahVOp5MHH3yQ9evX4/F4aGxsnNaw+OuSk+qeMA9MFNT5yU9+UgDiH/7hH8qWr1mzRgCipaXlmG127dolrr/+euH3+4XNZhPnnHPOjDxPCl4thX9ut1usXLlSvPvd7xa/+tWvymJXCkzkjfarX/2qbL2CZ9Err7xStrwQQDc4OFi2/Ec/+pG46KKLhNvtFk6nU6xatUp84AMfEK+++mpZe8fznvvgBz9YFmfxne98R2zevFlUV1cLm80mli1bJj784Q+XxQtNFGfzX//1X+Lss88WNptN+P1+8ba3vU3s2bPnmOONdw8L5zb2vNatWyfsdrtYuXKl+MY3viF++MMfHnPs6QZ1CpH3GvvJT34irrrqKlFdXS1UVRV+v19ceOGF4ktf+pLo6uoqW5+ROJvxmG77MpmM+PSnPy1qa2uFw+EQF198sXjhhRemHWezc+dOcdNNN4na2lqhaZqor68Xb3rTm8QPfvCD4joTPTPj7bOtrU1cffXVwuv1TjvOpvCcS5IkPB6PWLdunfibv/kb8fjjj4+7TS6XE/fcc08x7sXj8YjTTjtNfOxjHxOHDh0SQuS9yN7xjneI5cuXC7vdLqqqqsRll11WFg8nhBCpVEp8+ctfFmvWrBE2m01UVVWJN73pTeL5558/5n7M1XsgRN6rrhBbhRVnMymSEDNwibKwsLCwsJgFrwtvNAsLCwuLk4slNhYWFhYW844lNhYWFhYW844lNhYWFhYW844lNhYWFhYW844lNhYWFhYW844lNhYWFhYW844lNhYWFhYW844lNhYWFhYW844lNhYWFhYW844lNhYWFhYW844lNhYWFhYW844lNhYWFhYW887rop6NhcVcYBgGuVzuZDfDwmJcNE0rK9S30LDExsJiCoQQ9PX1EQ6HT3ZTLCwmJRAIUF9fP26Z8pONJTYWFlNQEJra2lpcLteCfJEtXt8IIUgmkwwMDAD5EucLDUtsLCwmwTCMotBUVVWd7OZYWEyI0+kEYGBggNra2gU3pGY5CFhYTEJhjsblcp3kllhYTE3hOV2Ic4uW2FhYTANr6MxiMbCQn1NLbCwsLCws5h1LbCwsLOaMW2+9lbe//e3Fvy+//HLuvPPOk9Yei4WDJTYWFicCw4CtW+HnP8//1zDm/ZB9fX3ccccdrF69GofDQV1dHW94wxv4wQ9+QDKZnPfjA/zmN7/ha1/72pzuc6ygTbaeJElIkoSmadTV1XHVVVfxox/9CNM057RN881dd93Fhg0bTnYzjgvLG83CYr75zW/gjjugq2t02dKl8M//DO9857wc8ujRo2zZsoVAIMDXv/51zjrrLHRd5+DBg/zoRz+isbGRG264Ydxtc7kcmqbNSTsqKyvnZD+z5c1vfjP33XcfhmHQ39/PY489xh133MGvf/1rHnnkEVTV6gJPGMLCwmJCUqmU2Lt3r0ilUrPbwX//txCSJASU/5Ok/L///u+5bfAI11xzjVi6dKmIx+Pj/m6aZvH/AXHvvfeKG264QbhcLvHlL39Z6LouPvShD4nm5mbhcDjE2rVrxXe/+92yfei6Lj75yU8Kv98vKisrxWc/+1nxgQ98QLztbW8rrnPZZZeJO+64o/h3JpMRn/3sZ0VjY6NwuVziwgsvFE8//XTx9/vuu0/4/X7x2GOPidNOO0243W5xzTXXiJ6eHiGEEF/5ylcEUPavdPtSPvjBD5a1pcCf//xnAYj//M//LC4Lh8PiIx/5iKipqRFer1e88Y1vFDt27Cj+vmPHDnH55ZcLj8cjvF6v2Lhxo3jllVeKvz/33HPi0ksvFU6nUwQCAXH11VeLYDBYvNbf+ta3xIoVK4TD4RBnn322+NWvflXc9umnnxaAePLJJ8V5550nnE6n2LRpk9i/f3/xmow95/vuu2/ccz7u53UescTGwmISjnl5TVOIeHx6/yIRIZYsOVZoSgVn6dL8etPZX4lATMbQ0JCQJEl84xvfmNb6gKitrRU//OEPxZEjR0RbW5vIZrPiy1/+snj55ZfF0aNHxQMPPCBcLpf4xS9+UdzuW9/6lvD7/eLXv/612Lt3r/jwhz8svF7vpGLz3ve+V2zevFn85S9/EYcPHxbf/va3hd1uFwcPHhRC5DtWTdPElVdeKV555RWxbds2sX79evHe975XCCFELBYTN910k3jzm98sent7RW9vr8hkMuOe10RiI4QQ55xzjrj22muFEHkx2LJli7j++uvFK6+8Ig4ePCg+/elPi6qqKjE8PCyEEOKMM84Q73//+8W+ffvEwYMHxS9/+cuiGG3fvl3Y7Xbxd3/3d2LHjh1i9+7d4nvf+54YHBwUQgjxhS98QZx22mniscceE0eOHBH33XefsNvtYuvWrUKIUbG56KKLxNatW8WePXvEJZdcIjZv3iyEECKZTIpPf/rT4owzziieczKZHPe8LLGxsFikHPPyxuMTi8d8/5vAShnLiy++KADxm9/8pmx5VVWVcLvdwu12i8997nPF5YC48847p9zvbbfdJt71rncV/25oaBDf/OY3i3/ncjmxdOnSCcXm8OHDQpIk0d3dXbbfK664Qnz+858XQox+xR8+fLj4+7/927+Jurq64t+TiUgpk633nve8R6xfv14Ikbd0fD6fSKfTZeusWrVK/Pu//7sQQgiv1yvuv//+cfd1yy23iC1btoz7WzweFw6HQzz//PNlyz/84Q+LW265RQhRbtkUePTRRwVQfO6+8pWviHPOOWfyExYLW2ysAUsLi1OUsTEXL7/8MqZp8r73vY9MJlP22/nnn3/M9j/4wQ/4r//6L9rb20mlUmSz2eIkdSQSobe3l02bNhXXV1WV888/HyHEuO157bXXEEKwdu3asuWZTKYsO4PL5WLVqlXFvxsaGoppWOYKIUTx+mzbto14PH5MhohUKsWRI0cA+NSnPsXf/u3f8tOf/pQrr7ySG2+8sdjGHTt2cOONN457nL1795JOp7nqqqvKlmezWc4999yyZWeffXbx/wvpZgYGBli2bNlxnOnCwRIbC4uZ4HJBPD69df/yF3jLW6Ze73/+By69dHrHngarV69GkiT2799ftnzlypXAaFqTUtxud9nfv/zlL/nkJz/Jd77zHTZt2oTX6+Xb3/42L7300rTaMB6maaIoCtu2bTsmlYrH4yn+/1jnBEmSJhSw2bJv3z5WrFhRbFdDQwNbt249Zr1AIADkvcHe+9738uijj/LHP/6Rr3zlKzz00EO84x3vGPd6Fih4vT366KMsWbKk7De73V72d+l5F4RwsXnNTYYlNhYWM0GSYEzHPCFXX533Ouvuzg+EjbevpUvz681hHquqqiquuuoq/vVf/5Xbb7/9GCGZDs8++yybN2/mtttuKy4rfOUD+P1+GhoaePHFF7l0RCh1XWfbtm1s3Lhx3H2ee+65GIbBwMAAl1xyyYzbVMBms2Ech+v4U089xa5du/jkJz8JwMaNG+nr60NVVZqbmyfcbu3ataxdu5ZPfvKT3HLLLdx333284x3v4Oyzz+bPf/4zX/3qV4/Z5vTTT8dut9PR0cFll1026zYf7zkvBKw4GwuL+UJR8u7NkBeWUgp/f/e7cyo0Bb7//e+j6zrnn38+v/jFL9i3bx8HDhzggQceYP/+/VMmaVy9ejWvvvoqjz/+OAcPHuRLX/oSr7zyStk6d9xxB9/85jd5+OGH2b9/P7fddtukZRjWrl3L+973Pj7wgQ/wm9/8htbWVl555RW+9a1v8T//8z/TPrfm5mZaWlo4cOAAQ0NDk+YBy2Qy9PX10d3dzWuvvcbXv/513va2t3HdddfxgQ98AIArr7ySTZs28fa3v53HH3+ctrY2nn/+ef7+7/+eV199lVQqxSc+8Qm2bt1Ke3s7f/3rX3nllVdYv349AJ///Od55ZVXuO2222hpaWH//v3ce++9DA0N4fV6+cxnPsMnP/lJfvzjH3PkyBG2b9/Ov/3bv/HjH/94Rufc2trKjh07GBoaOmYYdFFwcqeMLCwWNnMy4frf/533Oiud7G9qmje35wI9PT3iE5/4hFixYoXQNE14PB5x4YUXim9/+9sikUgU1wPEww8/XLZtOp0Wt956q/D7/SIQCIi/+7u/E//3//7fsknqXC4n7rjjDuHz+UQgEBCf+tSnpnR9Lni5NTc3C03TRH19vXjHO94hWlpahBCjrs+lPPzww6K0qxoYGBBXXXWV8Hg8U7o+M+IqrKqqqKmpEVdeeaX40Y9+JAzDKFs3Go2K22+/XTQ2NgpN00RTU5N43/veJzo6OkQmkxE333yzaGpqEjabTTQ2NopPfOITZc/E1q1bxebNm4XdbheBQEBcc801IhQKCSHy3m7//M//LNatWyc0TRM1NTXimmuuEc8884wQYtRBoLC+EHkPN0C0trYW78e73vUuEQgEFq3rsyTEHA+GWlicQqTTaVpbW1mxYgUOh2P2OzIMePZZ6O2Fhga45JJ5sWgsXt/M2fM6D1hzNhYWJwJFgcsvP9mtsLA4aVhzNhYWFhYW844lNhYWFhYW8441jGZxQhFCYBgGmUwGRVGK/2TZ+u6xsDiVscTG4oQhhCCXy6HrepnrpizLqKqKqqoLVnwsPxqLxcBCfk4tsbE4IRiGQS6XwzRNJEkqCorI5+cjl8uRzWaL9UcWivgUorqTyeSkkeIWFguBQp2iuSoRMZdYYmMxrwgh0HUdXdcBigJTSMdREJeCmAghME2TXC5XDNYrrGuz2dA0DVVVT1itdUVRCAQCxdxcLpdrQdd5t3h9IoQgmUwyMDBAIBCYMmj3ZGDF2VjMGwXRKOR3KghLYXlh2WQUxOfFF19k3bp1BAIBZFlGUZQy62c+BUAIQV9f36TR8RYWC4FAIEB9ff2C/CCyLBuLOafUOilYMWMf/lLrZjIKQ26F/yqKUtx3YditID6aphXXmcuXTZIkGhoaqK2tnTQ1ioXFyaTw/C9ULLGxmFMK8y+7d++mtraW6urqOen4S4fdSl+oUmErFZ+xcz5z0YbCviwsLGaOJTYWc0ah0zcMg1gsRkVFxZxZGBOlmS8Vn8LvpmmSzWbJZDLzKj4WFhbTxxIbi+OmEDuj6zqmaSLL8rzUIJmKgoBY4mNhsfCwxMbiuCgMmxVqbRSEpuB1NlfMRrzGE5/Cv0wmQzabLbbZEh8Li/nFEhuLWVOwGEqtmVImEoeT1ZGXOiooinKM+JRaPgUX60KMjyU+FhbHhyU2FjOmMGxW8DYbrzOeyhKZaec9H8Nyk4lPOp0urmOJj4XF8WOJjcWMME0TXdePGTYby8mYszlepis+Y2N8LPGxsJgaS2wspsV0YmdKmWuxOVkOB+OJj2maRfGRZfmYOR9LfCwsjsUSG4spGZtyZiqhKayz2CybqZhMfDKZDOl0GlmW0XUdm82Gw+GwxMfCYgRLbCwmpTR2pjSH2VScCpbNVIwV3YL47N27l+rqahoaGsrmfArDb9MRawuLUw1LbCzGZaLYmekyH+Kw0MRmLAURKU2tU3odS38bm9fNEh+LUx1LbCyOYaLYmZkwH5bNYqFw3uNltC4MSeZyuTLxKc3rttBq+VhYzAWW2FiUMVXszHR5PVo2U2GJj8XrGUtsLIDpxc7MhMnEJhQKcejQIdxuNxUVFQQCgSmLPS0my2a6TCU+sDiqmFpYTAdLbCzmZNhsLOOJjRCCo0ePcvToUZYuXYqu6xw5coRkMonX66WioqIoPuNlV15Mls1srt9E4rNQq5haWMwES2xe55SWa55LF92xYpPJZGhpaSGVSnHBBRcUSyxLkkQmkyEUChEKhThw4ACZTAafz1cUH7/fv6gsm7kSxelWMS0VnxNZxdTCYiZYYvM6ZbxyzXNdcKzQ6Q4PD9PS0kJFRQXnnnsuiqIUh+sA7HY79fX11NfXF6P1C+LT09ODruvF4SS3243H43ldfs1Pp5ZPqficiCqmFhbTxRKb1yFjyzXPR8ctSRKGYXDo0CHa2to47bTTWLp06bRypjmdTpxOJ42NjcXa6rt27SKVSrFjxw6EEEWrp6KiArfb/brsUKdbSG4+q5haWEwXS2xeR5R2RnM9bDYWwzAYGBhAVVUuvvhivF7vrPYjSRJutxun00l1dTWNjY3EYjFCoRDDw8McPXoUWZbLxMfpdJ70DvVkHP9kVjG1sJgKS2xeJxSGp/bv38/atWvntZMZHByku7sbh8PBpk2bUNW5e8wkScLn8+Hz+Vi+fDmmaRKNRgmFQvT393Pw4EFsNluZ+Dgcjjk7/nRYKI4MVhVTi4WEJTavA0onlTs6OlizZs28dCimaXLo0CE6OjqoqqrCbrfPmdBMNPwmyzKBQIBAIMCKFSswDINIJEIoFKK7u5v9+/fjcDjKxMdms81JmxYTk1Ux3bt3LzabjWXLllniYzFvWGJzCjM25czYjmYuSaVS7Ny5E13X2bRpE319fSSTyTk/zlQoikJlZSWVlZUA6LpOOBwmFArR3t7Onj17ivE9043xORUpFR/TNItWUCGpqFXF1GKuscTmFGW82JkCBceAuWJgYIBdu3ZRV1fH+vXr56VDmm1GAlVVqa6uprq6GoBsNlsUn9IYn8rKyqKb9XgxPrNp72KhtGREaU63yaqYFtysrYzWFtPFEptTkKliZ+bKsjFNk4MHD9LZ2ckZZ5xBY2Nj8TdJkuZc1OYCm81GbW0ttbW1AGVu1vv27SObzeL3+4uWj8/nm7G33kKZs5kuhYwRpVhVTC3mGktsTiFKY2cmK9c8FyKQTCbZuXMnpmmyefNm3G73MceZS+arxIDD4aChoYGGhgaEEKRSqaL4dHV1YRgGgUCgKD5er/eU60wLls1kWFVMLY4XS2xOEcaLnRnvJZdl+bg77b6+Pnbv3k1jYyPr1q0bd9hpOuIwnU5u7PrziSRJuFwuXC4XS5YsQQhBIpEoik97eztAmfhMFOOzmDrYmd4HmF4VU0t8LEqxxGaRM9NyzbIsz9qyMQyDAwcO0NPTw5lnnkl9ff2E654KJQYkScLj8eDxeGhqakIIURbjc+TIERRFOSbGZ7ExG7EZy3SrmFoltF+/WGKziBnrBDCdIlyzFYFEIsHOnTuRJInNmzfjcrnm5TiTcbLnQqYb42MYBqFQCL/fj91uP6ltng4Fb7S5ZOyzWBAfwzAwDGNChwOrkNypiyU2i5TScs0z+TqcjWXT09PDnj17WLp0KevWrZvWhPmpYNlMxUQxPnv37iUYDNLd3Y3L5Spzs16IMT5zYdlMxUQZra0qpq8fLLFZZJzIcs2GYbBv3z76+/s555xzih5cc32c6XKyLZupKMT42O12mpubqaioKLpZt7a2kkgk8Hg8ZeIzl9kVZsuJEJuxzKSQ3NhhN4vFycl/0i2mzVzUnZmuZROPx9mxYweqqrJ58+YZz0W8HiybqRgvxqfgbHDo0CHS6XRZHZ+5ivGZKSdDbMYyE/GxqpguTiyxWSScyHLN3d3d7N27l2XLlrFmzZpZvdCvR8umwETttNls1NXVUVdXB8xPjM9s23uyxWYsU4lPKBRCCEF9fb1VSG6RYInNAmeuyzVPZtnous7evXsZHBxkw4YN1NTUzPo4lmUzNVPF+JimWSY+8xXjsxDFZixjxScajWIYBlVVVZOm1rHEZ+Fgic0CxjRNdF2f93LNALFYjB07dmCz2diyZctxZ0qeTGxmM+k7X0Gd88Vszm+yGJ+2tjYkSSpzs3a5XHMiEotBbMZSsPALc15WFdOFjyU2C5CZxs7MhLGWjRCCrq4u9u/fT3NzM6tWrZqTr8HFJg4LjbExPqZpEo/HCYVCDA4OcvjwYVRVPaaUwmyek8UqNqUJVCer5TOe+FhVTE88ltgsMMaWa55r189SEdB1nd27dxMKhdi4cSNVVVXzcpyFuL/5ZD7aKcvyMTE+hVIKvb29HDhwALvdXiY+043xWaxiM9lH0WTiY1UxPTlYYrOAKI2dKR2fnksKlk0kEmHnzp04nU42b94858GHi0kcFiOl1Ukh76ZecLPu7Oxk7969ZTE+FRUVE5ZSOBXFZizTFR+rnML8YYnNAuB4Y2dmyvDwMPv372flypWsXLlyXo41ldhYczZzi6IoVFVVFa3TXC5XFuOze/fuCWN8xsv6vNA53jaXio9VxfTEYInNSWYuYmemSy6XIxaLYRgG5513XrHA2Hyw2MThVEPTNGpqaooehZPF+BiGseju1Uwtm8kozekGlvjMF5bYnERM06S/v59QKDRvFkaBcDjMzp07AVi+fPm8Cg1MLjamaXLkyBEAKisr8Xq9U3YckrQw6+OMx0LsuCeL8dF1ne3btxfdrKd7T04mcyk2Y5lMfKwqprPHEpuTQGnsTCKRYGhoiFWrVs3bsdra2jh8+DCrV68mGo2ekE5kIrFJJpPs2LEDIQR2u53Ozk4gn7a/UC1zIpfehdiJL1ZKY3wGBwc5/fTTi9ZPIcantJSCx+NZUB3pfIrNWErFZ7wqpqXiY1UxnRhLbE4wY4fNVFWdty/2bDbLrl27iMViXHDBBQQCAXbt2nVCOu3xxKZQPrqhoYFVq1YVJ6ZjsRjBYLDo0qtpWvELu+BVtdhe2sXWXpfLRU1NzTExPsFgkNbW1nmL8ZktJ1JsxjJROQWriunkWGJzAhmvXPPx1JeZjFAoxM6dO/H5fGzZsqXoiTRfxxtLqdiYpsmhQ4fo6Ogolo8u9boruPQ2NzcXMyeXelW53e7ii6vr+oJIXnkqMdYbbbwYn0Idn4lifE50HZ+TKTZjscRnelhv7QlgbOxM6UM2152/EIKjR49y9OhR1q5dy7Jly47pSE6kZZNOp9m5cye5XI5Nmzbh8Xgm3a6QObmyspJVq1YV82C1t7cTiUR49tln8fl8ZckrF0qnU2CxDfdN5fosyzJ+vx+/309zc/OcxvjMlvmowTNXTCY+HR0dxGIxVq9e/bqrYmqJzTwztlzz2CDNuRSbTCZDS0sLyWSSCy+8EL/ff8w6J9KyMQyD559/nurqas4777xZWSSaplFbW0s8Hsfj8bBixQqCwSChUIju7m4Mwyjr5Bba3MJCp9AJzuSajY3x0XX9GGt0ujE+s2UhWTZTUfrOF0IcCu/h66mKqSU280Rp0NhksTNz1fkPDw/T0tJCRUUFmzdvnvDlPhFeXYUUOKZpsmbNGpYuXXrMuc8mzgbyE9uNjY00NjYW5xYK4tPa2lrsCAvzPSerTPNi6SQKVtjxtFdV1SljfMaWUjjeodDFJDalGIZxTILQyaqYnkriY4nNPDCT2BlFUY6r8xdCcOTIEVpbW1m3bh1NTU1TDokUckXNBwWnhGg0iiRJNDU1zdm+xw5Plc4tLFu2rFimORgMFod3HA5HmfjM9Rf2dNq5kJkLsRnL2BifTCZDOBwmGAxy4MABMplM2VCoz+ebcR2fxS42pUxUTqFUfG655RY++MEPcsstt5yMZs8JltjMMTMt13w8lk06naalpYVMJsPFF1+M1+udcpv5tGzC4TA7duzA5/Nx3nnn8cILL8zZvqfTGZaWaYb88M5EX9iVlZUnrVjZQmI+xGYsdru9LMantJRCT08Puq4fU0phKiFZjFkPYHyxGct44tPX17foHWMWd+sXELNNOTNbsRkaGqKlpYXq6mo2btw47QdRluV5KWrW0dHBwYMHWb16Nc3NzaRSqTlNV1M4zkwYWykzk8mUFSvL5XLHBDIu5mGK2XAixGYsTqcTp9NZHApNJpPF+9LZ2TlljE9hiHqxio3NZpvRNpIkkUwmcblc89SqE4MlNnPA8aScKXT+052kNU2Tw4cP097ezvr161myZMmMOoq59kYrzRx9/vnnFyeNC22aqySPc7EPu91OfX099fX1xWJlhfmejo4OgGIHV1lZidPpnPVxF4tonQyxKUWSJNxuN263m6VLlyKEKJZSKJ2HKxWfQq2lxSg2pmnO2JouzE1OZ+RiIWOJzXEyXuzMTCi8MNN5CFOpFDt37kTX9Wm5EU90vLkaRovFYmzfvn3czNHzITZzXbKgUKys0MlNJ7h0Orze52yOB0mS8Hq9eL3e4jzceDE+kA8SrqqqOmlOILOhMLw+UxKJBG63ex5adOKwxGaWlMbOHE+55umKTSH6vq6ujvXr1896rmGuOu2uri727dtHc3Mzq1evntDbbLJjLaROeaLg0mAwWBZcWhCf0qzJi5mFJjZjGRvjYxgGw8PD7N69m76+Pg4dOlSM8Sl8FMx0mOpEMp05m/FIJpOWZfN6ZC7LNRfExjCMcT2lTNPk4MGDdHZ2FqPvj4fjtWwMw2Dv3r0MDAxw7rnnFudDxjKV2MxUaE50FunS4FKgGFxamjW54FFVWVmJz+cr+2JdqJ33WOa6Eux8oygKPp8PgPPOO68s40RHRwd79uwpfhQUSimcCA/EMkQaMEA61hKZjdhks1lyudysRjIWEpbYzID5KNdc2H48AUgmk+zcuRPTNNm8efOcmNHH442WSCTYsWMHiqKwZcuW4tj5RMeBubVeTqYlVAgura2tBco9qnbt2lU2qW2a5oKy2iZjMRdOkyRpwhifYDDIkSNHihZBqfjMqweiMNFyD5DTPjxh22d6/Hg8DmCJzeuFsU4Ac/U1OFF+tL6+Pnbv3k1jYyPr1q2bsxdktt5ohfYsWbKEdevWTaskAMydQCy0DnGsR1VpcGkul6OlpYWqqqqi5TOZMJ9MFqvYTNTm8WJ8Ch8F48X4zHW6IzX3U0CGCdo3mzmbeDxenGNczFhiMw1mGjszU0rFxjRN9u/fT09PD2eeeSb19fVzeqyZWjamaXLgwAG6u7tn1J5TzbKZjLHBpc8++ywrVqwgm82WBZcW5hROVHDpdFisYjPdDrvUAxHmJsZnwnZlH0Y1niGj3TnhOrMZRiu4PS9G77tSLLGZhBNVrrkgNolEoljgbPPmzfPyJTMTyyaVSrFjxw5M02TTpk0zGsY71S2bySh1NoDR4NJCuv5CcGlBfE5mcOmpLjZjmSzGp6OjAyFEWU43t9s9resj9KdQjL+SkZowldOZaIvZiE08Hp92OxYylthMwIks1yzLMoODg7S3t097mGq2THeifXBwkJaWlll7v72eLJupmCi4NBgMnvTg0teb2JQyWYxPMBjk6NGjZUlHC7n2xl4vob+Kmfl3kNchpGpkafxutTDnO9N36VRwewZLbMalUHt8Pq2ZAgXLqa2tjXPOOac4AT1fTOWNJoTg8OHDtLW1cfrpp7NkyZJZHef1bNlMdc5jg0vHfl3D3AWXTqeti+nawvzlRZsoxicYDNLf38+hQ4eKsVfFUgpaK2bmn9BpRDXbkLXrJm03YFk2FuXlmo8ndma6xOPx4jDV6aefPu9CA5PP2RRKFKTT6WnnWpvqWBN1vONd1yPxIQKakyr7+F9xi9WymYyxX9emaRKPxwkGgwwMDHDo0CFsNltxyK2ysnJO40gWcl2YiThRedFKY3xWrFhR5mbd3d3NkdZnWLf8dyiqBloKn80AZcOE+ysdJZkJyWTSsmxOJQqxM6+++ipLliyhrq5uXl/C7u5u9u7dy7JlyxgeHj5hAYITzdkEg0F27txJRUUF55577py0Z6axMX8ZPMzh+BBfOv0aHEr5BPpi6xCPJ+5qOsGlBfE53uBSy7KZPqWxV4bZRzTxM2yGnWguCgmFzqFqBkLbJ4zxma3YFCybxc7rXmzGxs4UgjXn6wXUdZ19+/YxMDDAhg0bqKmp4aWXXjohBc3gWMtGCEFbWxuHDx8et7Ln8R5rumJjCsFr4S6iuTT/dvhZ7lx7OYpU/lKeipbNVEwUXBoMBsuCSwviMza4dCossZk5hjlMOHkXDiVAThI4FPC5Bab8TtyBFYRCoXFjfAp1aWZ6vROJxKKPsYHXudiMLddcCBIrfIHMNbFYjB07dmCz2cqCIk9U9czCsQqddi6XK9aeueCCC4qp+eeKyV6qsb8diA2gm/nr3hLp4SdtL/O/Vlw8rX0tNOZTFCcKLg0Gg8WCdYFAoCg+U431W2Iz02NHiKS+iiHi5ISCIIYmN2CgodouoLbWVbw348X4ABw9enRGMT7JZNISm8VMaexMae2I+ej4C5Ur9+/fT3NzM6tWrSp7yE6k2BQsm0gkwo4dO/B4PGzevHle8klNZdmUdnIvDXXilFxkpCiGEGwdPEyt3c9bG9cX13k9WjZTMdaVt+BNNTw8zJEjR1BVtczZYGxwqSU208cw40TT92AYg+TkJjRxGABF8pOTq7HJ5aEKYx1B+vv7OXjwIKlUqhjjU5rNeiIvxFPFG21xRwnNgoI1k81mi0GapQ+uoihzatnouk5LSwuHDh1i48aNrFmz5pgX5WSIzcsvv0xTUxMbN26ct8SF0x1GE0LwSrCL/nScOlsFCEGF5uLn7dt5ZuBIcV+LiZPR3oI31bJly9iwYQOXXnopZ5xxBk6nk56eHl544QVefPFFDhw4wMDAQFnapcXEyXBqMESKnsQ/oeuHSEn1FN4YU3jImH1oyvmTbl8YNbHb7Zxxxhls2bKFCy64gOrqaqLRKDt27ODZZ5+lpaWFzs5O4vF48d2Jx+Oztmy+8Y1vcMEFF+D1eqmtreXtb387Bw4cKFvn1ltvLWZEKfy7+OKLy9bJZDLcfvvtVFdX43a7ueGGG+jq6ppRW15Xls10YmdkWZ4zsSk8RE6nky1btkyYov5EiY2u68UHbePGjcV8UvPFRGJTyEoQDoepqKggaIdwNgVARyLCSk81SDBEmh8efRmf5mCJpFmWzQwpjRFZuXLluMGlTqcTwzAIBoOLpnLpibZsTJGiK3E3KgnS8lKyRjdetRJhOjDlBmTRhqZeMOV+SgM6J4rxCQaDDA8Pc/ToUVpaWnjqqaew2WysXLlyVh8GzzzzDB//+Me54IIL0HWdL37xi1x99dVFR5MCb37zm7nvvvuKf4/9AL3zzjv5/e9/z0MPPURVVRWf/vSnue6669i2bdu0n5nXjdhMN3ZGUZTj7vhLK1euXLmSlStXTvqQzKXATUQ8Hmf79u1F75hCkbP5ZDyxSafT7NixA8MwaGhoIBwO82jbfmK5GKqqoioKh6NB1nnzua1MIfjewb/ysfpzWPjdYJ6FKorjBZe2trYyODhYFlxamO9ZqJVLT6TYmCJFZ+LbJHOH8WjLyRhHUHAhzEFSUgNOTDRlA5I0dU2dyQI6S2N8li9fjmma+P1+urq6ePzxx3niiSd45JFHeNOb3sQVV1zB+9///mndm8cee6zs7/vuu4/a2lq2bdvGpZdeWlxeGPIbj0gkwg9/+EN++tOfcuWVVwLwwAMP0NTUxJNPPsk111wzZTvgdSA2M42dURSFXC436+Plcjl2795NOBzmvPPOK3oRTcZ8WzY9PT3s2bOH5cuXs2zZMrZu3XpCXtixYlNwr66qqmL9+vUYhsGSJUv49/Rh3CkXumGQ03XkjM5r0U6WuN2EpCxCFTzcf4g3GP55be/rDbvdjt/vJ5lMcu655xaDS4PBIG1tbUiSVFYnZj6DS2fCiRIbQ6TpTtxLMncI5FVkjPyQrkupJEOAnNmFW3aiqRMHcpbtbwapamRZZsOGDWzYsIFDhw7x8Y9/nLPPPpunnnqKJ554gr/5m7+Z1TlFIhGAY/qlrVu3UltbSyAQ4LLLLuMf/uEfio4O27ZtI5fLcfXVVxfXb2xs5Mwzz+T555+3xAZml3LmeKyMcDjMzp07cbvdbNmyZdpzIfMlNoZhsH//fvr6+orZCQqedyfi67sgNkII2tvbOXToEOvWraOpqan4EXAwOkRCzyErCjZFwWazscxRweHwMIPZLF4Jguk43cLgp2KINX0rWFPbuOCTEi6ETnk6lH6AjQ0uLVTILExsF4qUzUdw6UyYTcqXmWKINHui/4ZN7AFlJTJZEPl3x0Alax7FJtcgJB1NmXoIDY6vSmdlZSVXXnll0bKYDUIIPvWpT/GGN7yBM888s7j82muv5cYbb2T58uW0trbypS99iTe96U1s27YNu91OX18fNpvtmNGQuro6+vr6pn38U1ZsZluueTbDaKWd6erVq2lubp5RZyPLclEE5opkMsmOHTuQJInNmzcXS+eWVgadbyRJQtd1du7cSSgUKnOvLojd8wOd+CQ3w0QxyS9L6Ll8oKKqgqKyxl7B0VCQbE7nazv+zHvsS1hWWVOMP3G5XIumc19oTDQPMF6FzHA4XEyps3fvXjweT1F4/H7/CQtMNk1zXrNm62aKPbF/QTJjCGUZcaOLarUaQwDSOrLmfgBskhddWoosTy9h7vFU6ZwL1+dPfOITtLS08Nxzz5Utf8973lP8/zPPPJPzzz+f5cuX8+ijj/LOd75zwv3NdA7plBObsbEzM005M1NvtGw2y65du4jFYpx//vmzmguZa8tmYGCAlpYWGhsbOe2008atIHkiLBshBPv27cPlcrF58+ZjHCRMIXhpsJtQNkWzp4KubBCfamcwnSyukzZ0HLKPgN3FkBHFcNt5QkvwMU9z0b1X07Si8CyEssALdc5mPKbbYSiKUlakLJvNFp0NSuvEFO7D8aTqn06b52vfOTPOnti/EM91ELAtJ24cQRIKpuhFyGtQyIEQmEIjacapdJw77X3PxiIr1Eo6Xtfn22+/nUceeYS//OUvLF26dNJ1GxoaWL58OYcOHQKgvr6ebDZLKBQq698GBgbYvHnztNtwSolNIXam0HHPpsDZTIbRQqEQO3fuxOfzsWXLlll/bc2V2JimyaFDh+jo6ODMM8+koaHhmHUK12S+LZv+/n6SySS1tbVs2LBh3M7hQGSI0IgXWls8wkpfJZIE4XS4bL1oNodpyDhQAYmcgPuGD/PlDZfjUbRiOpf29nb27NlTjNqurKwkEAgs+CG3k8lsXZ9tNtsxwaWF4nGzCS6dCfM1Z5M2ohxK/Jh4rgNFXkHW7AbIe56hEtG7qNUqMEwFSV6NIVpxqRunvX/DMGZl/cXj8VnnKRRCcPvtt/Pwww+zdetWVqxYMeU2w8PDdHZ2FvuP8847D03T+NOf/sRNN90EQG9vL7t37+buu++edltOCbEpTTlzvJmapzOMJoSgtbWVI0eOsGbNGpYvX35cL9JciE06nWbnzp3kcjk2bdo0qdk905xlM6FU8JxOJ0uWLJmwY3h+sLPs76PRCGu95e7YblVjIJUgp+vYTAWnohKwOWmNhvmHnX/hSxsuK0vnks1mCQaDBINB9u7dWwycK6xzorLnLpZhvbmKsync6yVLlkwaXFoQn+OpXDofYpM0grwY+nec0gCKsgJBGkPkLWwJLxHjCCoODKOXnLwSO1kc6rnI0vTPwzCMWVndx5Ou5uMf/zg/+9nP+N3vfofX6y3Osfj9fpxOJ/F4nLvuuot3vetdNDQ00NbWxhe+8AWqq6t5xzveUVz3wx/+MJ/+9KepqqqisrKSz3zmM5x11lkzmkNa9GIz13VnphpGy2Qy7Nq1i0QiwYUXXojff/weUscrNsPDw+zcuZPq6mrOP//8KU31+XJIyGaz7Ny5k3Q6zaZNm9i1a9eEomYIk5cHu8uW+VUHh8NhGr0+etJRAKptHmKZCBIQM3WqJAfpXP7+tMfDfG3HM3xpw2V4tfwQnc1mOyZ9f0F8jh49iqqqZUNuE8U+vV6YjwDJ8VL1l2ZL3r9/P06ns8z6nMmowFyLTUzv56Xwv2NDBrmOiN5Lva2GnAmKtJyE0Y1A4FUrMKgioXdhU1Q82ttmdJzZzNkUnuHZDqPde++9AFx++eVly++77z5uvfVWFEVh165d/OQnPyEcDtPQ0MAb3/hGfvGLX5RZU//0T/+EqqrcdNNNpFIprrjiCu6///4Znc+iFpv5KNc82TDa8PAwLS0tVFRUsHnz5jmbpJxtbI8QgiNHjtDa2sr69etZsmTJtK7BfFg24XCYHTt2EAgEilmjJzvO7uEBxv5SaXcSyWQZSKSocbkZzCRI6yX3Qggyev5e22SFrGnQHg/zg32v8tHTzsdvKxeOUg+rpqamYqdXmkG5dJI7EAjMiZfTqThnczyMF1xayBlWSFjp8/mK98Hn8016H+ZSIMO5Tl6K/Ae6kcapLSWit+aPIQZRpOXoAmTyQ70CJzHjCG6lGqTsjIbQCu2e6fOVTqcxDOO4htEmw+l08vjjj0+5H4fDwfe+9z2+973vzaodsEjFZj7LNY/X8Zd26gXX3bl8QWdjaWSzWVpaWkgmk1x00UXFEsTzdbyJKM37NtYTbzKx+UtPO5qpYJMUsiIvKLFsPr4pa5rEUjr1Ti+9ycTIFvl9VtqctEYj1LvchPQkWdPgYDjIV7dt5csbLyNgn3hYo7TTW7VqFblcrmj17N+/vyyosbKyEo/Hs2iGw2bLyUhXo6oqNTU11NTkA3czmUxxvmfPnj3ouj7pfZgr1+fu9EEOJx9DNzPIciNpcwAAn1IBSAzrw9RpFWRN0KRVxIyjAGiSC1U5C0ma2cfmbCybRCL//FuJOE8C812ueewwWjqdLhYUm2mnPl1m2vkXHBP8fj+bNm2asYU1V5aNYRjs3buXwcHBcdPfTHScrGHw8kA3iVyGJW4ffdkIfs3JUIkXWtLQacCLR80R07MACCA14mXYl0zQ4HKDLOhNJIlkM3z51a18+bxLqXZMzxVV0zTq6uqoq6tDCFGc5C4ENcqyXOzwKisrZzTktlhEaiHkRrPb7TQ0NNDQ0FA29BkKhYr3odTZYC5KgBxJbufFyO+oUSWQahFkyYl8x67JXob1DhACwxxAlZoRCMAE00ZSitPk2DDjY84mziaRSCDLcjF0YTGzqMRmtrEzM6F0GG1oaIiWlhaqq6vZuHHjvMURTFdsSuN5jscxYS4sm0IcjyzLbN68edwJ34nEZttgD0k9b8V0J2I0eyuQFYlQOlO2XiKbQzVUXIogZhi4JJn+oqUDvckEp/mqCUoZMsKgLxXna9ue4f9ueAMN7pkNO0iShMvlwuVyFYMao9EowWCQ7u5u9u3bh9vtLpvkXgx5xKZiIYhNKeMNfZaWZj548CCQLz5omuasXN1bYk/REn8av1pBhhwJI0iDrYaUAXZ5KQkjiMAkoFaBJBjSh6nX3ORMBU1diSm68apnzPjcZmvZnAoloWGRiE1p7Mx8l2suDKMdPHiQ9vb2Gc2FzJbpdP6FNDiRSGTW8TwFjteyGRwcpKWlhYaGhmPieKZznGd72sv+botFWDfGC82jaPQnEwig2uEkK+WwSxrxMfsaSCQIqE4iRoq0aaBJKl9+aStfOP8SVvgCsz7Hwtd0IBBg5cqVxaJloVCIgwcPkslkyoZ6SvOIWXM2c8d4pZmff/55VFUturpPd97NEAbbon/mYPJZ7JIXFRcRoyP/mxnCLi8lI0xk8s4pmuwhmOvCho2c2YcprUAihV+7AEma+YfGbMSmUKVzId+j6bLgxaZQrnm+hs3GUsiL1t/fP6UL8VwxldiUZo+ei9ozs7VsSueuzjjjDBobGyddfzyxSeSybBvoKVtWY3dyMBhkeSBAeyo8ssxNPJPP4zSUTlGpOYjpGSg59Sq7k2AiDUC104UsZZEERHNZvvryM3zm3E2cWVU74/Mcj7FFy0rziHV05DusUhfsxcJCF5uxFCpdNjU14ff7i8GGpQXK/H5/UXwKwaVpM8VjQ79GIopTriSS01GkYQC8ihdJstOfG2aJrYqUCTbqCev9CAx8WhVCBEjofahqjgrb+2bV9tnMNZ0qtWxgAYvN2HLNswnQnCkDAwPs2rULgPPPP/+EjZNO1vl3dXWxb98+VqxYwapVq+bkGszGssnlcrS0tJBIJLj44oun5R0z3nFe7OmmzuGhMxkpLvOqDoZI0xGJstTvoysVJZkrT9+TyulIORlNlsmNXCu/6iBIXmyGUkmqnS7i2fz8TsrQ+ca2v3LH2RdwYf3kEdOzoTDktmTJkrKhnt7eXgC2b99ejEkolAReiMxnNP58Udpmm81WnHeD8YNLbZUqe9wvklFSLHVUEcyl8SousiIEgEOuoD/bCZJAF8PYpDpM7JgiPXJAOxG9Fb9ai01WcSurZ9Xu2c7ZWJbNPCKEIBqNEovFqKqqmnehKQybdXZ2cvrpp7Nr164TenPHE5vSyfdzzz23mBZ+vo43GdFolO3bt+PxeGbkkDCe2DzT2cZgLEm1y8VgOg5CMJwccS0Vgv5oghX+AK3RSNl2VTYn+/UYa1QPA7k4ujCJZMrneByySiydpcLmIJRNowuT+/a00JdIcsOqtdM+35kydqjnqaeeorm5mXg8zpEjR0ilUicslctMWWyWDUweZzM2uPTA8H7+HPkN6VwSW9TLIXs7iqoQsNvJqQKP2kzMCIMk8Ck+JHSG9Qx1mkZagEtuJqznsz2rsgOHeuasrlfh49mybBYQBWsmFApx9OhRtmzZMq/HSyaT7Ny5E9M02bx5M263mz179sx7fZlSxsb2JBIJtm/fjqqqE06+Hw8zsWy6u7vZu3fvtOryTHWc4VSSPUODCAS2tIJHseHRbPTHRr3QcqaJrMtU21wMZUeXp0bibXrjcRrdHnKKwWB89HcABYloNoPb1KhxuDARDCdSPLh/FwPJBP/rjHNQ5rmTL5xvZWVlcZgxlUoVh9w6O/NZEwrDPJWVlSfV02gxWjbTDep8JbqNw7ndSBrUOdeg+nSGMvm4lWRmkHTYQUjtxe2KoSoKTtXNsD6IKQxy5iB2eRlgAAJV8hHJDbHSdd6s2lx4v2c7Z3MqsGDEZmzsjKZp897h9/f3s2vXLhobG1m3bl3xQTiRZZrHHq+Qc6ipqYm1a9fOS0cwnfMzTZP9+/fT29vLhg0bijERM2Gs2Pyls33EhRRi2SxVDgcu2QaUi0Y0kyWt6wTsdsLZDD7NxmA8Vfy9JxHntIoqwnKGnDnyEiMxkMjvJ6HnyCVNVgT8DCfy2/2p4yjhTJrbzjkf1zxmDC5QKspOpxOn00ljYyNCiGO8q+x2O1VVVcUYoPnMaDyWxWbZFEpWTPZe5Mwcfxx6nH2JAzQ5fDiVenozg1TZ8jE+lfYATsVJ0jFAPV5iRoxc0k5bog1sOSqVCgychKRB6jUbsuRCk2tRpCxu9dh8g9Oh8L7NxrI5FWJsYIGIzXixM6qqzpvYFDrSnp4ezjzzzGMq1M008/PxUnhx9u7dS09PD2effXZxDHo+mCoRZzqdZvv27Qgh2LRpEy7X9OJWxjtOqdhs7Sz3Qgum03gUG4okYRQsAruDoWReNHyyHZ9qo8rmIkz5kNlQPEWN6mIolyQrDBrcXrqjseLvWdMglMjQ7AnQFg/nt0kl+fvntvK5CzdR7z45L7AkSfh8Pnw+H83NzceUai4kEi1YPT6fb14tj8UmNoXndqJrMpwN8/vB39OfHcAlOYnqOjEjTrXNT0YMIAmlOEcjSRKKLUMFS8k5VXSzC12XkLIaPXovqqERdgQxpFoqHGEa3ZfNut2F2KCZXuvjSVWz0DjpYjNRuWZFUea8xgvkvxR27twJwObNm8ftSE+02GRG5h5CodCEbZpLZFmecBitkGetpqaG008//bhiSUrFpjUcojceK/u90e2hIxJlmd9PWyIMEvg1J6ERYYlmMlQ4HGT1fAdTsIoq7U6CIxZLrdtF2EyjUt75VNgdDCaTkISVFRUcjYXI5Ax6E3G++OxW/s/GCzindu4FfaaOF+OVai4Elu7atasYS1I65DaX4nAqic3e+GGeGX6RqDlAQK1CkzSG9bzno0tR0HUNSaoiboQB8CpuJCSGcikabD5iQiZgb0C3D+EWbmqkSmLZFJlclFA8hHFQJ+LfXbwfMxn+nG1KrXg8blk2x8tU5ZoLHf5cvgy9vb3s2bOHJUuWsG7dugm/jo6nWudMKcSsAGzcuPGEjN+PN2cjhKCtrY3Dhw9z2mmn0dTUNKfHebq1jaUuX97KGLmdssj/T0ckmheEeIhQOl2+ExMyaQOnqlII5wzYHIRHXJ4HEklqXC6iY5wFKmwOwsn8srZQhJWBCrpHxC6Ry/Ktl5/nA6efzZtXrjru85xLxkbTx+NxgsEgg4ODHD58uKx2T2Vl5XEPuS1WsSlts27qPD70V16KtLDcWUmVUk93OshSx0gnLSBnZjBEAIkcSTP/HHgVH4O5fgxhkBVBnHItkqRhmFkQEqamopNgibsRj3w+yyovPmb4s+BtOFVw6WwLpyUSieOKqVtInBSxmU7KmYKr6FzkQTIMg3379tHf38/ZZ59djJWYiNkmxpwJpmly+PDhYuDo7t27T9hLP3bORtd1du3aRSQSmbNM1jAqNrpp8lxnB9FMhlWVlRyJBbErCr3x0RDNtlCE06qqOBAKlu0jYHPQHo7gt9mIjlgv4VS5INlkGT1j4tPsRHN5gSnkWSsgTKjQnMSNDAk9h02W+enuXewZGuTvzj1vzudx5spFvZA9efny5cVqmWNr9xSEx+/3z3jIbT6yPs8nYy2bwUyYRwe3cjTViSYp6KZEb3YIDYWInndtrtQqCebSpMw4yx2VhA3wKvVEjTiGMKjQ/MgYDOdSNNgBAX5tBRH9cP6Y2Kiwn47fUR5cOvZeeDyeoviMDS6drdikUqk5+fBbCJwUsSlN1DjRg164MbO9SQXi8Tg7duwoenZNx3KY72G0TCbDzp07yWQyxcDRPXv2nDCnhFKLIx6Ps337dhwOx5wEjI53nO19fUXLozUYYkVFACFBWzBM6d3PZkXZHAtQ3C6UTuMyZepdHnqjCUpRJYVwOo7HZqPK7kQXZnHep4BumAwmEnhsNmqcblyqSkckyqu9vXwh+jR3XnAhzf7AnJ37fDC2WmYmkyl6uRUSWJYOuU2nXPZitGwKQvNSaD9/HHgR5AQexYsmOenN9gNQY/cSMZL4lRpkNFJmGICsiOJTGkkYGcRIpgC37KY/24+CRMoYwKE0w8hQrldZSkQfpMF+Zlk7xqtcWrgX4wWXzrYfi8fj8z6sfqI4acNok80bFH6H/Ff3bDvAgtvusmXLWLNmzbS/+uZzGC0YDLJz504qKyvL8q2dSA+4wrH6+vrYtWsXy5cvZ82aNfNS10QIwdOtrWXLO8NRVgQC5esCg4kEqZzOsoCPjkSUaoeTYHzUionqBmuxE1GzxdxqiizRP2IhxbNZ7KbK8gof0dSohWRXFPpK1knpOtWVo0MT/YkE/7F9O5c2LePNq45vWO1Epqqx2+1ltXsSiQTBYLCsYFnpkNt479FiFJusbHBf5+PsjrXR5AygSE560lGWOl15T2VAlQQVaiMdySDV9nwnH1BdqJKD7swQyxyVRHRwy9UM5YYxRI5aezWS5GcgM0CtzcApNyCQaLSfjTJFhufS4NJCUtdSd/eCSHZ2dk77QwAsb7QTgiRJs/ZI03Wdffv2MTAwMCu33fkYRiut7jlemYIT7W49ODhIe3v7vHu+xbJZtvX1li3z2mx0DkXwKTJhU0eRZRo9XnrC+bH0nkicJT4fNlkuZggAQAj64gmcsoqkQSKXo97loScy6niQ0XUi8QxNbh+difyXa73LQ0dkNEhUQeLIYIhmv5/OZBTDFGR1g5+0tLBrYICPbdyIb5EVVZMkCY/Hg8fjYdmyZRiGMW7tntIhN0VRFp3Y7Ip38ox2hHRMoEoqChodqXxpgGyhsqYpkTM1ujPDVNu8pMxhEAKP4qc70z2ybhSPUoMpVLJm3tlEkWz0ZbqotlUiSymGc3H8qk6T4/oZtbE0qWshuLS1tZX+/n6GhobKPgQKls9EGcVPJbFZ0NFcsxnOisVivPDCCySTSbZs2TKr+JC5HkbLZrO89tprdHZ2cuGFF7Js2bJjXvATJTaZTIbBwUFSqRSbNm2aV6GRZZnXBoZZMiYDs1+xEYpGiUQTSKkU8XicRDRGTs+NRFoLBqNxhFFuJQQUlWgmSzCVxmYqeG02FMqvo99upz+epDsUY4UnAIA+5rrWud3owqQ9HKFKdVLtdBWto+19fXzuz39me2/fcZ37ye7AFUWhsrKS1atXc8EFF/CGN7yB5cuXk8vl2LdvH88++yw7duwgnU6TyWQWfPLQuJ7mvo6t/KT3OaJKigrVh4aLnsxIfjPVQUSPYpfs1Nkb6R5Z7lZVZGR8agMRPf/BUaF6UHExkE3gUMTIsib6R4TIKWtE9Bx+1YdTDlBlW3lcbZckCU3TcLvdnHvuuVxyySWcfvrp2O12uru7+etf/8qLL77IwYMHGRwcLPPCna3r8ze+8Q0uuOACvF4vtbW1vP3tb+fAgQNl6wghuOuuu2hsbMTpdHL55ZezZ8+esnUymQy333471dXVuN1ubrjhBrq6umZ1HU6aZTOdl3EmnX5pEa/m5mZWrVo16/iEuez4I5EI27dvx+v1Tlrd80SITSgUKs5fVVRUnBD//VcGh0jKMnUeD/3JOLlcjrbePjRNQ7HZ8NnteMkxnEiTyeVImWkURabB7aFrOEq9301fKj9HY5cKNRMhnM5Q6XSQHpNDrcLuJJLMIoC2YIQVFQG6RyycIiX96mAySbPPj8uj0RnLd0bCFNzz/Atcunw5HzjnLJwnMMhyvhg7zFOoGRONRmlra6Orq6tsvmchlct+LdzGL3qeJ66nqFJd5LIS/ekUjU4fwZHMElWak4yQCWdNvEo+Px4CMmYKu1RFxsyQG8kZ7lW89GT7kATE9SF86lKQTAQCu+xiOBcmJ7I4ZBv19rPm5BxKHZ0KHwKFpK25XK7obFBIb/TXv/6VYDCIoiizuhfPPPMMH//4x7ngggvQdZ0vfvGLXH311ezdu7f43t9999384z/+I/fffz9r167l//v//j+uuuoqDhw4UMx9eOedd/L73/+ehx56iKqqKj796U9z3XXXsW3bthnPQS3YYTTIe6RNJ9ZG13X27NnD8PDwnOQRmwvLRghBZ2cnBw4cYNWqVaxYsWJSgZ3PeSIhBB0dHRw8eJA1a9aQyWTmJYZpLF3xBP3JFE6nk0Qqi6YbKNkcWZsdu6blc+Bls6ypqEA3I6g2G6Yw0XUDWRfE4nFSiQQBr5OoqRPJGZRWfvaoNoKJFNVOJ0OpvAzFM9nyczcENZqLoJ4ibRgoskx/vNzBwDAEXdEYyyv89CbjVDmdxDJZnmlvZ1f/AB8571zOqZ+eBbjQLQQorxnT19dHU1MTdrv9mNo9hQ5xrsplz5ShTIwHOl8iaSaJ6yl8qhu7odAtgrhxo8mj11qWbPSlIiAkQnr+WajWfKQMg4geodlZwbAOAaWO4VwYU5jU2yrQZInu9DBLHBqa5MKtVBM12lCFnYge56LAOXNyLpMl4dQ0raxyaTqdZmBggF//+tccOHCAG2+8kcsvv5wrrriCt7zlLZx++ulTHu+xxx4r+/u+++6jtraWbdu2cemllyKE4Lvf/S5f/OIXeec73wnAj3/8Y+rq6vjZz37Gxz72MSKRCD/84Q/56U9/ypVXXgnAAw88QFNTE08++STXXHPNjK7Bghab6XT6pen3t2zZMidfZLIsH1dnrOs6u3fvJhQKcd55500r7fxUDhOzxTCMohAX6uAcOnTohHSKLw0MAfkOeDAcwSVLNNXW0hVLlBoXJNI5qjQnAyIJJjjsCmlTwePxYhgGqaxJrarQYWbIJRKoioKqqpimSTKXwzBNGjwe0qbOUCJV1gbDNOmLJfA77LgdNpyaRldk1NKxyaPOAx2hKAGHvRj/AxBMp/jFrr38pa2DD2w4C/8c56k72QghUBSlGCsCFHMTlnpWFSplnohy2TnT4LH+PfxPfws506De4aDRXktHMoxbSucj/5EJ5SKokkK1VsuRRB8CWOLwETYG8SsBNNnBUDY/HJoyo1SojaSNHJmRuR277KQz3UNAc5M1o+SEF4M4Mgp+rR6brOBW5iYMYCbeaA6Hg/e85z3cdNNNNDY28pOf/ITOzk6efPJJhoeH+cY3vjHj40dG5iwLfVFrayt9fX1cffXVxXXsdjuXXXYZzz//PB/72MfYtm0buVyubJ3GxkbOPPNMnn/++cUjNsc7jFZqOcwmSeRUx82MCRKcLrFYjB07dmC329m8efO0xW8+htGSyWQxoeemTZuKCT1PxJBdRtfZMTiMKQTxRBxZVtCcLiRDQZEldDMvNz6bjf5YHAE0+rz0pmM0ur10hfKT/vkXVMHv9VKRzpK2aflCepkMh7p7kRSFrKqS1XXW1lURSozeN6eq0BfLWzGRdAYtK1NTVe5GWu/20BkeFZ+sYdAxHGVlRYD2eATDNBlOpWgLR2jpG+DGM9dz5aoVyFM8ayd7zma6jJdnrLR2z0TlskuH3OYyUey2YCeP9u6mI5Of9K+2eTGEoDURpNrmIpjJexnWOzzoZMgYKqYwih8vNgWqpBq6kjGqHHnnkirNg02y05EaZqUrQCYHlVoj3Zk+QOBXHcQMCUGWpB5Ck+vJiAjrXVfN2XkZhjHjANzCcOc555zDO9/5Tu64445ZHVsIwac+9Sne8IY3cOaZeRfuvr68CI+ds62rq6O9vb24js1mOyaotK6urrj9TFjwls14FkahamU4HJ625TDT486mMy64Wjc3N7N69eoZdThzPYw2MDBAS0vLuNkSpsqNNhe81N6FRt7Ks9tt2O0Olvp8dAxFWFrhpyMRQQBVDifxZH7oqycaY6nfixjTNE2W6Y3GSWQMmmtq6E0mWO710T4cRjfyFVwzmQwHU2mqPE769RyKolLrcpcJiQDaBsOs8AdoT4QxOXbYq9blpj0ToS0YodLlwOe0czSc/ypM5HL8Yvde/tLawd9sOIt1NeXVRRcjU3mjjVcuOxaLMTw8TG9vLwcOHMDpdJYNuc2mdk9bIsjPO7axLzrAKq8fVVKot1UgSdCZzlvIPpudYCZ/v5yyk7ZUkpyZxa3ml8lCwjQ12pND1Nm9JMxhJAFuxUNHug9JSMSMIBVqI0KYmMJAQSVu5IjoEZbZK9FxkjGTSGaaJsfUw1XTZTbB6clkEiHEtGpHTcYnPvEJWlpaeO655475bey9n4534mw9GBe02Izn+hyJRNixYwdut5stW7bMaRBigZnO2ZRmKJhthuS5sjaEEBw+fJi2tjbOPPNMGhqOzVI7X0N2pW34zSs7SCfSeGwaij3/5ZvJ5q9pVyjCiqoARyJBwsnybADBRIoalwuJ0Xn8Bq+HzuEIuhAMR5IsrfCiGyayImNTbNhsNqocDgaicfriaao0he5kjMGcTsYwUVUVRVaod7vpDsfoCEao83pIox8zf5PVR+97MJnGb7Oz0uunKxEnaxrUuty0BsP8v6ee5aKmRm4+63RqvaOuqYthzqaUmXYcpbV7IP8xURhyO3ToEOl0esJy2eMxmI7zy44WjiQGGMrm74UqqajCwdF4mEb3aBB2XE+goeIynXSmQuRMA49qJ5iLokoqjY5a2pL5XGhuTSGdVXApVQxmwwA0OHzYZIXO9BDLHG5kSaVSayCo57/kTRSGcn0ssVXT6DgHRZq77nE2QZ2JRP56HI/r8+23384jjzzCX/7yF5YuHS0iWEg+3NfXV9ZHDAwMFK2d+vr6YrBqqXUzMDDA5s2bp92GwjO2aIbRhBC0t7dz6NAhVq9eTXNz87wNVcyk4y8MVcmyPO0MBcd7zInIZrO0tLSQTCYnraY5n5ZNLpfjyZde5tBwEE3V8MkqhqzgsWn0R0fT07QPh1lfXcWB4fL0NLVuNx3BCMsrfLTHogjALHGB1k2TeCJDwFU+dOO12wkqaVQln0PtjLoAPdEopqmTHMkmEB1Jk6SoKgOxBMsr/HgUG10jOdNcqkpfLF6231AyTSSdwWu3Ue91oRuj1+2lzh4G40nWVFXytjPWLsr5nOONs1FVtWxyu3TIrVAue7zaPcOZBL/t2sMzA614NBtxI0mF5sSjuDgYHUYAPtXGcDZ/Pyo1Zz4djZ5FkSBr5oN6a+xO4oZJ1rCRNkeHUNNGCk0KIDBImfkPGpvkoDPdi1u2EzMi2KRqxEimgHrbUgZy7WBCTkg0O8+Y9TUZj9lW6ZytN5oQgttvv52HH36YrVu3smLFirLfV6xYQX19PX/6058499xzgXz/8cwzz/Ctb30LgPPOOw9N0/jTn/7ETTfdBIyWQLn77run3ZZCf7OgLZuC2GSzWXbv3k00Gi1Ocp+I405FoR7OVIk9p8Pxik3Bxdrn801ZTXO+LJt4PM5rr73GtqEIHreHXC5LOJ1lbWUlmioTiZVbMemsTrPPT1tJVc5EJt+JdIaiLK/wMZhO0hstzxZd6XTSMRShuXpkWyGKWaALqLJKhd2Nx+kkmskiIwhncmRzOcx0BlmWicgSw5kcK2oq6UzGqHG76ciOtqXK5SQ4UkcnlsmS0XVqPG4qHHZC6QyyBL3ROK3BMM+0tnP16pVcvboZWFxzNnPZ1rGVMqPRaFnyyoxNZruUJKTk6NLjSJJEtd1JhemkIxHG63EWLdpqp5OudBJFUqjSfBxMDJAxcvhVG4VPAhWVcAZMkcYgP+RebwsQ19PE9Bgr3AESGajSGoqpbKptHlKmk0guhpBSVKiNmOSHcmvtTUiSTpU2t/Fns7Vs3G73rPqVj3/84/zsZz/jd7/7HV6vtzjH4vf7i5nD77zzTr7+9a+zZs0a1qxZw9e//nVcLhfvfe97i+t++MMf5tOf/nSxxPlnPvMZzjrrrKJ32lT09vbyve99Lz93POOzOIGoqkosFuP555/H5/PNee6uiZhKbAplpLu6usathzMbjkdsurq62Ldv37RcrGF+LJv+/n5aWlpoXNrE0e7gSBvy7eiJxFg55gPBpij0ReLkDJPlVT7ao1GqnE6GS6pvdoairKupYn96uGzbxIh7c8dQhBXVflKGTv+YfGmZrE4omcahqTR43GiKTGcohluz5TtYYTKUzMf27O3opsLpIC0lynJveW02goyKWL3XQ0coiixLrKjwYyCKc0IZ3eClzm4eP3iE5RicnUpT7Vn4dUjmMxGnJEnFITepuoK/du7luf42srkcblmQ0rPUal76jQhhkUNRFLJiNIFqVuSo1nwkcoKBbJz895EgKlKo2FjqqOVQYgAhoMnlZyg3SJVWgSwrxDLpfOXWXBi/WodARxc6CippUzCUDbPUEUCVvQxkwvi0FH5lCVmR4hzPBXN+LWYzZ3M85QXuvfdeAC6//PKy5ffddx+33norAJ/73OdIpVLcdttthEIhLrroIp544omyEZF/+qd/QlVVbrrpJlKpFFdccQX333//tM5l9+7dfOhDH2L9+vWcc845C3cYTQhBOBxmaGiI0047jeXLl5/QrMgTiU06nWbHjh0YhsGmTZvmLDByNk4JpXNFGzduLCYFnIq5tGxK54jOOussDscz2GSFJKOdxhKfl6MDQVbUVNAaymfibfB6aBsKA9AVjNJU4UWRZEKUWyhDsSTLvD46RqyfgMPOcEnVzvahCKfVVTHAqDu1x6bRP+KFls7pZMI6a0sm8yVJoilQQVc4imqzY5omJiY9wzF8msSAnkNVVQZHcrsVnjtjxIPONAXtwxFWVgZY4ffTGYuhmyYuLX/c1+IxPv2HJ7lm3Sre0NzEsoq5cZ+dD+YzXY0pBNuGe3i86zChbIqedARZUWh0uvHZHfTH4yT1HIlMAt0wsCHRlkugqAo+zYFi2uhKRqjQHIRGSoTXKk4ypPHIAXRhUniMFdmk1lZLTzKGx55/9uocPkwB3ekQK9xuVEOlSqtlMJuf17HLNjrSvSx1VKBIHsJ6DKeSZrXzzHHP53g4HstmNkzn/ZYkibvuuou77rprwnUcDgff+973+N73vjfjNlRUVHDbbbdx44034na7F6ZlU5h7iEQi+P1+mpubT+jxJ+r4h4aG2LlzJ7W1tcddWGwsM7VsUqkU27dvR5KkGc8VzZVlk8vlaGlpIZFIFOeI/vV3f0Y2JRyqQjaXL3hWmHNpHwzlh77CEdLZUS9DIaA/HGeJv3yOqdLpYDiWYpgUSwNe9sdj+O12osnRwE1FkmgfjLDE7WUgkyRrGFS7XCRSo8NhNkXhSH+QZQEvfan8OoWXUZJAUWSaAhW0D0dII1jm9iKETnc0nrd0FBmnzUZ3OALS6JBGfyxBMpvDZdOo9nvLauropslfWzv5477DnFZbxZVrV3Le0gbUeay6ORvmQ2xCmRRP97SxbbiHw7H8nNwKrw9FkljqDKDKCoejeQ+zFf4K2lP5e7HU4aIjOYw3p0Eyy+54N6qi0KDaiY600ylphHI5Upk4qpKfI9MkBSE02hNBlrp8BPUhHJINCY2+zBBORSOmx9CkAEj5567WVkNnuhcQ2GSVrnQfS+yVLHOeiSbPffaE2czZJJPJaSfsXIgsWbKkaEUJIU6u2IxXxKuQFbmiooK1a9fS3d19wts1dhhNCMGRI0dobW1l/fr1ZV4dc8VMBKAgevX19axfv37GD/FcWDaF+RmXy1WcI2odCnF0aCQOwu8hkUpjU1R6SxJldg5HWV1TyZHBYJnHWa3bTc9wjMaAh56RIEuvzV5MxNkdjlEhq0RS5fFP9V4PPeEYPZEYVW4nKUUnli7PIlDncdMZjNIVihFwOtA89mMcAUa90CTC6RwrKv1UePy0RUJkczkCqkL3iLWkKir1Xg/hkbmfZDZHIpUlpxss9/nYH49T7XYSHCnwtn9gmHAqzU9ebWFLcxOXrGyiKbAwrJ25EpusYbBjuI8/d7eyc7gfp6qQEvmO3S4pKJKCTdhojUaocY1+GGVLLGC7ZmO5u4HOZJSGgJdoMoKu6wwlwiT1NNWyn3YpiiEL6lQ3w9k4DtlGo6OSo4n8nIQmm7gVF8K00z8Sk9Ng8xAzbQxnYyBBlVaDLEkIBBVqJT2ZAfJPospK59y5O5cyG8vmVKjSmcvl0DSNp556auFYNqUdeiEr8uDg4Aktz1yg1MrIZrPs3LmTVCo1qYfX8aIoCrlcbtJ1hBAcPXqUo0ePHpfoHa9lU3CMKJRuKHRWT+w9XFynLxKnweUmnU4RL9E1IQToggavh56SiX9Z5AM9B8MJGgIe+uJxBmPlNWkwwSkU0opMdsQrrFRmhxMp6rxudMqFtNSDLJxKs8zuY6nHR/vI0JxLK/eUAwgnM4RTaSqcTuweL4oiExX54VXd0BHZLPFEElmWURUFzeVgKJ0lls6imhL1LjeZnEFipIibXVXpiyX44/7D/HH/Yc5dUs/q6kouXNZIvffkdSjHIzZZw2DnUB8v9ffwykAPdR53sRZRjdNNNJfGrzrJmQaHI/nhU7/NzlAmL9ouVaM/HUeRZJY5KuiIR8iZJi5VZTCbzxRR6/KgyeDMgWIYZFMxhC4wIlEUm0RSMonI+XunyQq6ECRzEjUOlYGsiUu2kzB1grkYS5x+VAm6UxHqnBI+pQKHohHPGdRrjRgY1NmPf/51PGYzZ3M8w2gLhdIimAtCbArFxNLpNBdddBE+nw+Y/yJmE1E4bsHKCgQCbN68eVbBatNlqmG0XC7Hrl27iMVix11Nc7aWzdj5mVLHiHgmy/NHO8vW74smqFLkMkWQZYm+cAzDFNS4XQwkkrhso9aPbgqGwgnW1lZyYKDULVpCQWIgmqDa5yYh6+imQd8YkXCqKt3BGE0VPjqjUVyaRl+kfB3DEPQMR2mq9DKYTlLjdtGeHuOFNuLdFk6lsWUU6v1uPHYb8UwWRZERNjte8mmNdF2nNxgintWRFQXDNOkejpDOGSwL+MiYBsHk6DyTIkvs7h1ge1cfv9qxl3W1VaytqWLDkjpWVVWgnMChtpmKzWAywc6hfrYP9NMZi9A/EhsjCcFQOoEMLHH6UJEJJbMEybLC7ytuX+VwEB25tnUuN6bpJJjKogtBbuT5r3W66EylkZCosXk5GBvCRLDC42cgqyDLMrW+Wg7HhkDP0B4KgSzRpPnpzEVAkalGw624cEouhnL5bAQu2UFbqp86hweZDOFcDlOKU6HWkRNZzvOcN0dXtZx8JvPZic1it2wKz9ZVV1118ofRBgcHaWlpobq6uqyYGJw8sSkMS7366qusXbv2hDgnTCY2sViM7du3F4esjtcjbzaWzXjzM6U8e6ANn93GcEmn2uBx094f5PQVS2kLhQFY4vPRNZTv2JPJLFUOBz6HnfbkaGevm4JMSmeJz0N3tPDVKhPJ6DhcdoZjKfwuO41+D0eGQqONEIJQPI1umHQPRWmu8YME7ZnRfTtVlb4RYesOxvA4bKii/N56HbYyV+par4uO4SiaIrOiwk8Gnd5Iopg6vtbnJZhM49JM9FwOJ4LuoRCSJJFMJqn1eVAVleaAn4FEkgqXne7wqABmdJ3f7znI7/ccxKmpXLhsCQ0+D+tqq2iuCKAq8yM+o/NWEz/bffE4B0LDHAgOs2doEEmB3kS+7SsCAUY8hlnq8aHIMoN6isFEkpxkFu3L4ezotUwYeUuv3uHF1CXaRmKc/M7RZzordCo0F5KhMpBOYCJQkRnMRJGFxFKtgtZMBMWm0ez205MZoho/aT1BMpPGZkgMZjNkZI2lHhUE1NuqaU/1I4SJR7XRl0lSZXehSBpRPY1NTnOae/0cXdlyCn3YbOJsFrtlU8pJFZuDBw8W50GWLFlyzEM/Ubqa+aSQCgdg48aNx51BerpMJDY9PT3s2bNnVilwJjvWTCybQulop9M5bgyPaQqe2H2YXNbErWkkRoYDjRHHgI7BCE3VfjrDEQx99BxTWR0JiZxS/kHh0lS6QzEkCZZWeOmKxmjweggPh4vrRJIZfDY7NW4Xg4n8cFudx8NAZNQFumMwwuqaChyKQnrkha/xuOgcLik5IATtfWFW1PjpisXImSaRMVkNCpcqZ5i0D0VYVV3Bcr9KRySfcsfndBBKplFkGcmm4coKZIcrP+Sm65iZNN3xND3DMpqqUW93sMzvoy8eJ2uYxaE2yA9NvdDeVZxDavB5cNhUmisCNAV8NPl91HrdVLpmFzxcfl6jYhPPZumLx+mOxehPJjgUDNIaCVPlctI+UnrBqWqkSlyTBbDSHSCazqKi0BoJA7DM56c9kd+m1uVicCQw06vZEAIabQGGkymyUv5eORSV/nRedNyKhh2NvmQKv10mksvf20aXh5SZJmPaMUuGSQ106m01DGWSCM3ArblpdlTQkRgmpWfoi/Wh6TYitjApLU1A89KfiZA2szhlH93pCI12H6vcZ6DJ8xNWURCb16NlU8pJFRu73T7pPEghXc2JqiYYjUbZvn178WviRN7osWJjmiYHDhygu7ubc845h9ra2nk71mRMND9Tyo6OXgZG4lxqvC6yhonXbmMwmM8AIBD0BWOsrK6gdSBUtq3XbiMez+J32Imk85P/tR43HekICOgLxlhW5UPXTSgplOZ12OgKRlEVuShIjjHDnH6nnSP9IXxOO16XjcFkimyuXNiq3HnPtY7BCD6nncoKJ0eD4eLvNlkpn88RgoFogng6S8Blx+u2E0uVi1PKMJA0CUVR8/+cdjzkP5xMw+BAVx8500TTVJoCXjRkfHYb0UyWOq+bnpJhP5uq0DocpnVEaCtdDoLJdN7KqgygKQoBpwOP3Ua1ywmShENVUWUJZcQiMk2BJEE8myOt6ySyWWK5LMFUigO9/Tzz/AscGnFJd2oaKVNHjHTofjHqmVXjcpIxbLgUjZxh0BGKFtfLSaPXtVQMPJrGYBZq7W4qbU72RfIxU81eH+3J/DnVu9x0psPU2T14VQeHRjzVAnY7kVRhfsdObzRBxMjiEPnz8ilOMrrEQCbMSk+AnkyCensVETOFUCVWeWuxyRJt8SBuRaBmFXLJDCF7FJ/ipt3oBwWEpHKae34cAyAvNpIkzdiyicfjJ+xjd74ZHBw8uWLT3Nw86TBZ4UtgNuOdM6G08Fohg/QTTzxxQofwSgWgNJZn8+bNuFyuKbaeGeN5AY5lsvmZsTy+61Dx/wdjSZZU+NBUmcEScdBNE1nPWxaDJYGbdllhMJ3AI9nw221EMlliJR5nQkAsnsHvKndHrXLlE3jqhknvcIzmat8xgZ0VTgfRRIZoKoOSkVhVU0HrULnYJTOjX+rRVIYKh4NmX76uTUY3qPPlPdkK1Po8DI5YT5FkBkWSQMAyX36OyG+30xON4x3JXFPldjKcSCFJMppmo7HaQ284jmoaGLpOKpXhyEAon0nZ7cBhCJZ6PYQyGRLZHOH0qJAFHHaCI1ZXzjDJGAYHB0fntfwuR3H9Bq+H3vioaNX7PPSOeODVed30JeMgBLFsDk/JMWrcTtpj+fO1yTKGKVjhDZDLmZg6DIzcu+UBf1FoalwuBkYm/W2yQm9y1PFDAhptfnpiMSRPyfPA6MeOLEGToyJvQZV830X0FHZJpVbzczgaRBcGFbJG3MxS76jEq9ppS+WFKS1SNNpriOtZYuaIQCkOjib7qXV4kOUMmurAFzCx5VScuspgth9P2kkwESacCiJXUiyXPZfMtv9KJpOL3rIpeOHdc889C8NBYCIKN2g2boPTRdd19u7dy9DQUFlg5GwzP8+WQiBpwSmhqqqKM844Y17Oe6o5m4IzQjwen9IDrysYYXf3QNmywWiCpYVJ4WLQnUTvSNmASpeTYDKFQ1OKy+KpLF6njWUBH12lw1xAhctJx2CYWrtGQgCSIJQY7SCFACMnqHO76YxEGIm9JJwcFS3DFJg5k6VeL/2pBFndxO+0M1Tq8TaS9iaezuK0a9T63MVAzgJOrfyV8TkctA2HCSfT+Bw26t1u+odGBcDrsDFcMv+jKTJI+edLURRcXjceZAw977J9sGeAjJHvnBp9HuxCpsLvz3tp2TTC6dFzSpQIZaXLwXCJaNjU0efGoarFmj0AjpFzEIBTkRlKJXGqKn6bA7dio9ntJ5XTcdpU2kfqoNhUBV0afWbSxujwtsdmK4pNndtNTypGs8uPisyREYvJo9noT+fXcSoKvakYMtDsrqA3ESdl6Hg0G32pfDtrHC5skkzGkDBtJrrIf/g5ZYlKLcBAKo3hzC+r1BzYcXA0HmK1108sA0sctbQnBwGosDnpz+i4FIWcyGJKDkxXimXyCkxfmvOUM8jF8+Wyc7lcWSLRuajdM5sYG5h9SeiFRKH/Ovvssxe22MiyjCRJ6Lo+L2lq4vE4O3bsQNM0Nm/eXFaX40Q7J0iSRCqVYtu2bUXX7/lMNDqRZTPV/MxYnth5iGUVPjpCowLR6PfSNhBimd/LwZEOcInfR9dgvuNSZRm/047fbqMjFS3aP7FUllqPG5/DRrQQKyMEoZGMAUOJHOuWVZFFMBgZ4xYtoHMoQp3fTTiXwWO3MTRmnVg6Syiewuu0UeHVcGgq0ZL6N7U+d3G/qUwOM2xS4XJS7XIylEwhAcNj3LEjJUNosXQWFQk1Byv8fsLZDOESK02WKHPndmkaA7G8o4GqaTRVVdAbiaOaJrqhYxo6h3oi+d9VJe9ooOfniPxOOybgDfgxBbjsKk5NwxAmhikwDJMalwsZCb/TTjyXQ5EkZCQ05BFrRSeSyqILjXTKIJJNM5RIYYw8G0u10Y+MOo+bjhGLx6lp9CdHrchQNn8N/JoDj2LDaWh0hKOsKMmcUONyEhu51nUuNznTJJ0zMAWkRoSrxuGkPZlGlWQqbS4ORIbzsTDO/DOoIGEYEp2pOA0eH+FcDFVSqdA8HEkMIiMRzEWpt9UghImBiUd20Z+JkdDTLHFUMZjT8Ws2FFkhrmdwqgYXLT0fWZKL9WMKWawLtXsKwjPbctmz/Vg+FeJsID9K8r73vW9hi40kSfPW6ReylxbmIsZ+eZxIsdF1nY6ODrLZLBdddBGBQGBejzeRZVOogTPZ/EwpsVSG5/a3Ywqo9bsZiCVAiGIH3jUco9ZhIwlkMqNfwvFMFp9sJysZ5L+v88fRFIXO4Sg2VSnO4dT7vfSHRr/KO4dinLGkhqA02ik6NJX+Ee+u/kgCr8NGwG5niNGOvdLtJBQbSaqZyhJPZVlVV4kiSSX7KRfWWq+bzuG8GDZX+zEVUeZcUOl2FAM3IT9HFIynyJmCjqEIVW4nqqLg8/voiecTfZa6ald7XHSESjIdqApIFEsnKC4HXiFhGAY2oDcUzdeTSSRQKnz0p7LFTqzS4yy6V9d5XPSERoeyNFkuupZXe1wMhvPXRZgmimFijDgj1Hk9xSE0TZbLrKHST5Nat4u2WBjI1yNyKxpuu8ZQMsWRbKjowhzMjF6bpFHI0uxGFgrdsXx7HLbRTjhlZqlzeEhnTLqTMQQi7z2YjhJQXVRqbnYl2rDjwKfZ0HGgmBr92Xybl7jy5QzaEiGWehx4FTd+1U1vpg+HbGM4lySmp2iwu+hIRWhy+dngPRd5JCtEabnsQu2eQiLR7u5u9u/fj8vlmnG57NmKzakwjAYLJOvz8VbrnA2mabJ//356enomnXg/EdUsIe9xUkg743A45l1oYNQFs+B4MZP5mVL+vPsIuZGAyWQiS8DpwGXT6Bse7eiGYhk2rK3ncF95KQGnppJO67hsGqmR1DX1fjedQ1GyuoHLplHpcqJK5R8BmizR2h+m1uMmmEmR0Y28KAyVZo7OMjBMmcXltduKYgNQ6XFxpDdIldeJKUMwmWJozJxP4dwEeaupuTrAiooA3dEYWcPA67CXiU3A6SBckrfN7bDRMTQ6DFVpcyB7oS8WxwRyJc+1RLnVE3AWhCzvaLC0yk/7cAQhTHRdJ5HJkkrl1/c7HfRFsqiKiizLOGwaJArXSy7LluC2aQwmC/dAYzAZL06TmNKopNR73XQW5m4UpejuDJATBktdXlRkFFnmaDgMwFKfl85Efptqp4vBkRgcj2YjaxosdwQYTiYZTucb4FZVekeGzXyaDadkoy0aoc7loX8kF1q9y43ATU8ijlfT888sYAhBNicRsCsM5jLYZRUZhY5kkGq7C1MYJHICl5LGIduptwfoyvZSoXjpSoeQhIQhJM70rmMiZFkmEAgQCARYuXLluOWyp1O7Z7Zicyq5PsuyvLAtG5hb9+dkMsmOHTsAppx4PxGWTcHTq6mpierqanbt2jWvxytQEBvTNBFC0NLSMq35mVJyusGfWkYzBiSzOQKaMiZmRUIAetakwectKxVgk1X6E3ECbjvYJFLZHOkS6yeZzeXnCSi/B3U+N33hJP3hOBUeB3ZVITkmPU2Dz0NPME48nWV5jZ/uaLQseSeAx64RBIZjKWRZYl19JYcHR50HnDataC3lzwQGInGS2fxcRmOF/5i0OPGRvwsdTqRkziirG7QPhkmPbF8XcJMTJjZZyRdl87qLyUMhbyWFSoboCrnkJEkm4HGTzObweLwYhkHAZSMajpI28+lzukwdXeSf4Tqfm86SdEGlDgdVbgcDkYJVKdNXWkiu5DbWed0MJpM0eryoSPREY2RGrKGAe3ToubSj9dg1BnNQaXdS73CzLzxMSGRoDgRoHckyUOt20ZYM0+T0Y5dVDkfznmpOTYFs/hlRUDgcDaLJCv2ZvJCtcFXQmYhhCJNaxY5b2HFJTrrS+f1W2Vx0psI4FIWYnkTBRdyM41U8eDQH8UyY5c4G6u0VuJTp1yAqLZcNlA25dXR0IEnSuOWySzOJTxchBIlEYt4ylpwMFrzYjFetczYMDAywa9cuGhoaOO2006a8+XNdprkU0zQ5dOgQHR0dRUsiEomcMIeEQqcQj8dpaWmZ9vxMKS8f6iym+i8iQM8aKIqMYZhIUt4S6R7Kp+Wv8boYjCVx2TR6g1F0XWc4alDlc1MRcNATLK9b47fb6Q/Fqfd7isNPpa7LoXiaOr+bsbNPpZ1e52CE5ho/oTE51Yajo1aEaQpSaR2fZkezKQzEEtR4XXSUBIPW+/NeZJCPD0oksmRzOs0BPz3ROG6HVhYIWukerYVT2L4gXumsjmlAz3AMRZZo9HkIOBxgwlAyiSEE8ezotfXYNQZKhKDa46I9mG+boihINjtutxshBH5bvjCcbuStgKBkks0Z+SJnHhdDJWKTKalKWud10zkytKVIEqFUiiVuLzZJQTYlsmmDzlS+xlBhu0qnk+F0/hxVWS7zQgNY5vDTFY2iSaNzhGlz9INCkiSW2Hx0RmJUuu3FY/el49TaPahC4Ug0/wHQ6HHTlw5TZTjJChNDmNhHhFo3FBwOBVM3qbX56UpFyJg6y11eQjkZVYKsqaObKkGGqdHqiOgR3hG4nOOhUC57yZIlxXLZwWDwmHLZBdfnmWLF2cwhJ2IYrbRjP+OMM2hsbJzWdvPljVbItZZOp9m0aVPxYTpRw3aFYwG8/PLLLFu2jLVr187oZRBC8PtX9tPo99EZDOdTJwN+h4OOwTBLqnx0jdR5qbBppE0TTIjHs1S6nPgcNvYP96HrOYTIZ7BurvKhSYKsOfpcJFJZsrrBcCjB0iovHekkQ7EkslzuadUzFGV5tY/2cBSnptJbMscD+eDSVCLLskofHeEoDX4PfSXrqLJMfzhBVjeQJFhW7SOnlz9zY6P4vU4bwXiK5EAEu6bQ4PGQyxnERrzFPA5bmdiUeofB6BCaYQr6w3FiqQzJTA5FkVhW4UPIEm5/PkDW47QRHx4VvnRutMP2OWwMjQS1SpJEhddDVDcQAhQJYkYOXdfJZDJ4hE5azwuPx+lgIJEECRyqgkvVWOH1I4TAJsscCYZJJuKosoxQKHr4Zc3R6+J12IvZAeo9HrriEZZ5fHkrJZgfNvXZbUVnAo/NRn8qjl1WaHYFOBoOogtBlcPBcCZ/Dg0uD5qi0BaN0Oz3I7L5A6uSREDx0m70k83GQcrXsOlMRciaOm4NGuyVyJJEWs/hkDSCuTShbIK13goGszmqbHYUyU5O6DQ4aqi1VzJXlJbLXrFiRVm57KGhIXK5HNu2bStaPT6fb8p37lTwRitlwVs2xzOMlk6n2blzJ7lcrqxjn+5x59qyCYfD7NixA7/fz6ZNm8pS88xnqeZSCsk8AU477TSamppmvI/trb3FCegVtRW0DodxqCq9I/Eo3cNRltcEaB0cJpbR0Zz5r9Z0TkcG+sIRTNMYeZEkFGAwmkbGRDcNchQ8w+L5+2AKegdjVGoqwZJbIkswFElgmIKugSjNdSPpaQZHO2ZNkRkIJ8gZJl2DUZqqvchK+UteH/DQNRQduT4QiafJ5UyWV/jpCEWQZKksMwFClAlJJmfQH4yTSeks9Xvoy6aJlMzlSOTdwQs4bSr9JYGbtX53cf/5rAsSHSXnYBcKAcWO26Fh1xQE0DziDu12aKjJFLphYAiTZDaLQ8nnD6vxuAmnUqheGVWW0CRwpFLkMlnkeAITCUOXyCVztOvh4hxVU4WvaC3W+9x0jFg8Tk2lLzF6HpERLzSPpuFVNbyyna5wjOYSL7QKl4twLC/ANU4nVTgZSqTICQN9xNrxOewMx5NU21xoKLSOJEiN5PLXeKnTR08iSUrPUamopIVJs6uamJ4la+rUOty4ZI32RIQmrwuXYqPO5qcj3Y9TtjGUTRLT0zQ63BxN9rPaU82F/rOZT0rLZauqSiqVorKykmAwSGdnPofgeOWyC5imecpZNguruMY4zLbTHx4e5vnnn8fpdHLxxRfP+KbN5TCaEILOzk5eeeUVli9fzoYNG45J6lmwpOajXHMBXdfZvn07PT354lGzjU5+9NX9xf9vGwizvCpAg99b7KwAOgbDrKmpIF0y7GUYBnoqQS4LjdVVSJKMJEFTdQBFtSGpDqq8fio8LhQz74Yaj8dJpVLkcjmCsRzLAl4KvlGNAS+pknmezv4Iqinjso0OB9b7PSXlA2AwlCQezdLgG30ejDEiX+F2ks7pdA5EqLA5WF1dUTbkVOvzEEuNDnNVup2EE2lMU9AzHEfKgWrINFf4cWgq9X5PWf2eGq+b0tvsGBO7Ey8ZnnTZVPqjecunLxRHGPk0PJ2DEfqGY0RiacLhFPFYFjc2hoMpskmDdDyHmTWJxjIEIyn0rKArnCSUEcTRcPgrSBiQMQU2PUswEiGVSmHqufIy3CVf37UeV/H5rHI58ag2mpw+9IzgcDBEPJtFCMFQelSIY3peaJrcfnI5QXs4SiKXI66XuLZnU6xwVZLI6HSNDMXVOl2EsymaXVWokkpKz3uz6Rg0OSoJZzIMZPLrBmwu2uJhfJqNRC4Dpo20SONUbDQ4/UT1FEvtFbQmBwiobgwhsdY984+s2WKaJna7ncbGRs4880wuueQSNmzYgNfrpb+/nxdffJEXXniBAwcOMDg4SCqVIjEi6rOds/nLX/7C9ddfT2NjI5Ik8dvf/rbs91tvvRVJksr+XXzxxWXrZDIZbr/9dqqrq3G73dxwww10dXXN+hqcVLGZztDNTOdsCqUKXnvtNdasWcNZZ501q2zNczWMZhgGu3fv5tChQ2zcuHHCss2lHmLzQTwe54UXXsA0TTZt2jStLALjcbBniEO95WWae4ajiHGuVSyWpWYkRiKXy5FIJHDZnUiKDXIC30jyxXhJMbRERserObE7XHg9HpwOB7Is41UF6ZzB4c5BKlUFSZjFomwFKj1O2vpCqIZErTc//DB2OKzO7yYSTzMwFGd5wI/PZStzBACIlkzshxNpUskcDW43dSNlnp228ufJ6yyPAbOpMqF4io7+CHrKwGezszTgzQd0kk+8WUppYKnfVV6JtHqMMJVu63XYyjzY3I5RkVUVmf4SLzSvY7SNTk1lMJFCVVUkSaKmtgaX04Usy7hlCEajJBIJ9GyGznC4mBwuZxo0ur0sd/sJqA66gjG6IjHqPC70kftf53ETy+avX8Bhxy6p1Gse4qksXYmRoF67g8ERj7RlHj+ykc+rVut2kRP5/QRsdmptflqjYaLGSByPakeYMu3xKJVOOxISy53VtMXz8zq1Dje6KYMkiOopZGEjrMeosQVANrHLGl7NyUWB9Se0INnYoE5JkvD5fDQ3N7Nx40YuueSSYqjBkSNHuPTSS7nqqqtoaGgojszMlEQiwTnnnMO//uu/TrjOm9/8Znp7e4v//ud//qfs9zvvvJOHH36Yhx56iOeee454PM511103q4/wReONNt2Ty2azxcj3403DPxfDaAXvN1mWjwkaHUuph9hsoo0noxA/09TUVJyfme0c0aMv7mdJwEt3ePTrd4nfR/9QrCwVTY3HxdBwnFg8x7J6N+3RFI1VFcRSBkh5zy23Q2N5VYDOgUjZMbwOO4OhBNVeN0PxJIqqUuH3MhTtRVVV+kIJvDaJjp5+DGRUVc3PQzhshKIpEuksqUyOVQ0BWgfCZfsurW3TNRChuS6AV7UXz6fa6ypzHrBrCv3heDGp6NIqTzEuJU/5kBpCEM8aaCO3WgI6B8KkcwaqIrG8Mj8f47KpJLM69X43fSVDdH6XoywQtHR+xmXLB4EWqPA4iZZYQaGSBKJ1PjddJV5opVVEa7wuOsL5vHWKBP3xRDGjQXWFj0Q4gqHrVNo1BpMJfJKCw2ajfzCCIcnIsoyvJH2QUdJvO20apGGJ24tbs3EwlJ+7aa7wE4qNiIbTTiqZpd7hRQDBEUsoN5IloMnpozeRIKZnqXE6GcrEqbF78KkqO8QgPhyEc0nqbAFMTHKmTqXmZiATJ6ZnWOutIJgVuFQFWZJI5HIkzSRe1UvSSHGubw0nEsMwJn33VVWlurq6ONLwi1/8goceeojvf//73HzzzWQyGd74xjfy+c9//hjrYyKuvfZarr322knXsdvtE4Y5RCIRfvjDH/LTn/6UK6+8EoAHHniApqYmnnzySa655ppptQMgFArxxBNPLI5htOnM2YTDYZ5//vlimeTjERo4/mG0wcFBXnjhBQKBABdeeOGkD1vheMCcztsU4md27tzJGWecwbp164pfdLOxbNr7Q7S09hIMJ6n2uAoHIZ7MkNMNUqkcAVf+PF2qNpI7S9A9GGXd0npqxgwJxFNZVEPC5yyPyo4nMqSzOvFYhnq/B6/DRn8ohkT+xXQ6nDTU1hJwealw28lmsyTiMY529pHJZDAMI5+eJito9HqLw1Qeh42BMc4D0USGvsEYTX4fbruGyz4msNPnKQoNgDChbyDOEq+XWq+LWr+7bEit2ucmnRu9h3UBT3EoUR+Zj+nsj5BO6lQ7nAQcThr8Huxa3oEgViIebrvGYIm4VHtdZVZOsiRbdLXXRbTU465EAArJOwsUgi4Rggq7Vhz+VGSJYCrFEq+XNVU11PgCOG1u0rINm81GIpMlkUggZ1L0RcLoeg67LNM3UiZAmCYKMrWam55wnIHkqGhHRqwdBKjIyIZCZyRK/0icjUezMZxJs9wZQJgQGxlm89hsLHdVEEql6c/k123y+JBNje5kjKzIUWv34dHsxPQMbsXOcDZJKJfEq9oYzKSotttxyx6cssIllWejySf2G3umcTYrV67krW99K7Is09fXxzPPPDPlx+ps2Lp1K7W1taxdu5aPfOQjDAyMpp3atm0buVyOq6++urisMAz4/PPPz+g4fX193HHHHQvfG01VVTKZzIS/CyHo6Ojg4MGDrF69mubm5jkxkRVFIfv/s/enQZLk53kn+PP7Do8zI/Kqqw80bnTjaHQTHAKkCAojUZQ4Jo12TDSukVrRRmZjRqMofaBsxmAyDlZD2VBckWYzK1ESwRlxRY1mqZmhVktCWhEkBDSIBvpGX1WVWZmRGfftcfi9HzwyMqK6uru6ugrdzdFr1madlZ7hHh4e/+f/vu/zPk8QvPmBt7ieM8fRt8J+u9tgE0URzz77LJPJ5JbzM3eS2fwf33wRyGZGVD/C0VVcQ6fRyZrrcz8kJ4lUczbHnSGz5WJjWRYTL0S1Nx83S1M4ag0xdRXX1BnNMipzuzddnafXn3LfToFXpv3VApqSMpr4zIMERZZ5cK9GnCTU20OSKMrOm6bU4xA/Atc2qOVsdEXiaHr+meZtnf5y0PO0O0ZTJBRb2LCrDsLNjc4ZK+1scPX+nSJqQeJkMCEFdEXaWOhFcfNZXCwBIk3J2Gx+mFktCLBfdEAUcAoqfhShazKHa8Oqb1hCUxW6y/9XJHFjZidnaivdNEtRVjRyXZYwUqi5LmmSokoS1/oDZtNsxikWUtI0e1YkTcM0s57NlmMyHQzw/QA7iViQsmM5aLrK9e4ABCibJp0lw6xkGHT8GTXDxpYUrvazstdeLsfxPHt/O7ZNczrlxnjEvps9q1IKQgoH4xF7tkN9PsBFAUS6/oSSpiMj0Vh4bFsGtqRR1R0O5y0qqs2N+QDSlDBN6AdTckqJT+Rff4jzXsWdCHF6nodlWYiiyMMPP8zDDz98V6/pC1/4An/xL/5FLl68yMHBAf/1f/1f84M/+IN8+9vfRtM0ms0mqqpSKBQ2/q5ardJsNt/SuS5dusTP/dzPvbfLaFEU8fzzzzMYDPjEJz7xmhtzr877evFmBmNvFGdNursBNmf6Zrquv67Z2lvNbE66I77z6sn5OeYBRcckiTavdzzzuaApLKZTZFkmCILMcTFncdIesVNyVky2smNxYzrAmweYiULBMlBuUgxI05RGa8KFkst3px6QUss7tHrZghlGCY3OhPt2iiiKgqIopCkULZVmd0IcR7S6c3oDiQtbLmkagyAiIOAYGsPJ+Y6/YBscng4pODqaLjPxgw0WmiyJtAfnPwsC1LtjFkFEzlApuga9NUVrRRI3pHYcQ6WzVqKrFWwafW/5PrNFfZ2FtpU3sUQZR1exdJWYlIsFlzhJMHUFbbYgThKiJMEPIyxVQRCgZJuMFz6yKCKLIhIil1wXgUwepj9d4C0CFn5AK/AZJdk5d4vOKnPaciyOR9kmwtIUWss5HwGYJDGarnPRtLAViaudPvWhR0ER8MIAWZYRDXVVEi7oOoasUB+PMfJrFQcRVEFi18jRm80ZBz6GLHM6n1BQdCq6xStLuwFJgh3NoT7xOVkCVFm3eHXSxVU15nFIkoh48YyS6mArKoP5hAfsCjcWTS6bFS6aW5jSW9c2e7txJ0KcZ1I196q39J//5//56v8/9KEP8YlPfIKLFy/yr//1v+bHf/zHX/fv7sTuxTAM/tbf+lvvPNi82aL3emW0M/dKwzB4/PHH70gg743irZbRzrxwbNt+ywOSd3rOW8Wt+jOvd663Amy//61XsQ11o2SkiCJizLm+WAppEvHy9VOq5TzTJKUfBAgC9EdT4iSh0/PYKTm0hh7d4fnCPfNDNEUivEkxYLtg0+hMmDYDtgyVSZqdbz0sXeWg3me7YDNYLFiEEZaho2kBoGXDjobMcXuMLgMSzGNodFKSJF0tBGfSOMPJAibwwF6Rrjij72WAVMtbnHTP+yDVgkOzv6Zarat4Y5+yolDOZxTrDS0129i4f/JNC9A6MeEMmNIU5n7EBUXmaP21HGNFJCg7Ju3+Wi9HTRiNsmsuOQYHa4C3lbdWgLflGFzvZq+hSCLNtWxo3ZOmbJt4w2yB3845qLKElohM5wEdL0SUZWxFIVEFjEAmDiOakzFxGOPKKgdhBx9QZJnW0p9Gl2XSNMUUFKahT29Jc65aFgkpzckUS8nulSFJmTnbdEhOkZkDl8wCN6YDkjSlqluczMfYskxKwjSImCdTdrQS/WjEtlZmHE35XOnDvBNxJ3I10+n0rluLvFFsb29z8eJFXn01swup1WoEQcBgMNjYxLfbbR5//PHbft0zcArD8L3Rs7l5AT45OeGJJ55ge3ubT3ziE3cdaM7Oe7uL8cnJCd/85jfZ29vjkUceuSOggbc32PlG/ZlbxVvJbBq9MV97/hBFkFDWhhOlVKDZn7CTd0jTlPlijpFGaLrJZBFTtgxEAXaKDt5ykY2WgHNftbThJQOQMzRGowW1/DkteZ1x1hsH7DgWg7XsAKBkG6RpSqs/QU0FagWbVn9NakYQcB0LwzAQZIMUjStll8k0o1ZPp1OSKKTeGbIuOdkdzBgNFuwXcrimRnzTRyPdVCITBZEkSRlMQ5qdCVIscKngUs1ZCJzL2QBIkkBrDWxLTkafPouibWz0Z+Zr5bybGWvrfSZFEmmuzfBYmrpx3DrBIF47QTVnr8gTuixt6KlFScIl16WmW2iCyFFvxGC2oGyba/M4NovlonqxVORKuYapOyimyTSKWCwWKIs5vfEIKYrZMyxORhNGvr+6RlWQkFKRo9EYVRI5mU9QRYmLdp5r4yFpkjInYl/PE6cpiziiotnUZ2OmUUBRMxj4ARXDpKwUSImxJIOEhA85F3GVd2ZA8k7A5nut+Nzr9Tg+PmZ7exuAj3/84yiKwle+8pXVMWfixbcLNmdA89xzz/Hn/tyfe+czmzeLdepzHMe8+OKLtFotHn744XvqYnc7ZbQzUc9Go8HHPvYxKpXK2zrnnYLNm/Vn3u65/vevv0iapAzGc2olh+ZoQjlnrYY4j1tDbCVhnsSIiouUZgtjq++RV2QCfzMzjZKE8WjOTt7hZCmUKQrQG84Io5he32OvnMPzfdr9zYa+mIIpKaiGxGgeIMAG+HjzgIJtsJN3uNEdAkI22Hn2OkIGCrKks5svImsSJ/0ReUPhtDeBFCRZpuKaDMZTBFHkpD3C1lVUVSBnaoxnPoosbZTIZEmkvbbI64rMSXdMshy9r7kmqiRjFGTa3jQrK64Jltq6Sm9NKHR91sYxN8tveeucsSbARumumrepr5m9reurlZ1zmRtdkWhPZ6v20nomU3Es5lGELSukCdxYqhcIgKafLxlnsy/ZB5PZPpc1k1SAw+V5HMtET7LjSraB64c0xx4HrSZeEqPKMsfjhIqRDWaeydNULBM1FEljgfay91MzTCZezOFkxLZjsK1nagW9cEJVczicDvCTCEUQuTbt8X63yPVplwedEp8tfYh3Ku6kZ/N2RTg9z+Pq1XPtwoODA55++unVEOkXv/hF/rP/7D9je3ubw8NDfuEXfoFyucxf+At/AchM5H76p3+av/E3/galUoliscjP//zP8+EPf3jFTnuzOAObJ598Es/z3nmwuZ0yWhzHTKdTnn76aSRJ4vu+7/vuOjPjVud9o8V4sVjw1FNPkaYpjz322F1Jee8EbG6nP3OruN3M5qQ74o9fOl793OxN2K+6xMtdcBLHTGczFpLMxx64wKv18xkcgYy9pQnSRtO96tp0eh4CsFvOcTKYsFN0OG1ni2SmGDDmgb0S4/Ga5XKaMp4GLIIEXZOp5S0EQaC1tmgDzOYh/dGM3bLDcLGg4JicrPVCdEWi1fey9+DBfdUSESm2n72fKI4gDvG8GaIkIksyVdeg3srUBPbLDqouc615LtxZzducdM8X+Yprcbx+Tk3haEnxFgWwXIVLBZcgienNZhv06bylbwBP0dosv43WWGdbrrXhULpu9lbJWRuaarO1eY2tnM3VTnZvVVEkjGIuuS5RnJCECb3RjB5wsXzeY9l2bU6WtgM5XcvkboCSriMlAvNZxMl8jKAsy5KisFKL3jZtojimG0SU83l64Rw9jikrErEfcThss2Ob+GmYUdkFEW8RUtB1Wr6Hq2jICPTikItL4c6657FlaVQ1B0tW6IQxD9oVrk3b7Og5DmY9tvUcRSVHWcvxTsWdltHeDtg8+eSTfO5zn1v9/HM/93MA/ORP/iT/w//wP/Dcc8/xm7/5mwyHQ7a3t/nc5z7Hb//2b29sVP/+3//7yLLMX/pLf4n5fM4P/dAP8Ru/8Rtv+b18/vOf58d+7MfeebB5szhjhX3jG99gd3eX973vfXd9DuVW8Ub9k16vxzPPPEOlUuEDH/jAXXPTfKtgc7v9mbdzrn/7x6+iSiL+mibWbBbi6AphGDKfz9E1DU3T6PamXKjkOeoMl0cKiCmctsfs1/Ic90ekgLLUNkvSlFZnzH41hx/cxPoSBY5OBlwou9nrCQIFS8WbZQ3ohR/hd6fcv1eixTnYFB2D/tKvpdmdYOgK+k26ZluuTb11DgSe57PwQy6VXY56I2RZIhElbCdz0IyimE53wGSeLYSHJz7bZZeabSHKIqfDycb8DrChGAAw9M5BU5ZFbjQHREtgqBYsFmHMhXwOURRQVYkkTZjMA1LYUJcu2JseOtqa+oCuyDTXZmvWh09zhkrXy0RQc5qKIcnsmRajGLZtZ5WJWJrCND4HpXVnUFE+v49FSycXq0RhgqrI3Fj68uzkcyuTte2czSj02ZYtRFHgcFmac02N/nhOzbaxFJUbkxGObTOVUoQgpejHPHV8hCTL5BWJLdUgjgVOlr41Zc3glXGfLcNEFgW6szkzfcEFo4gXzymrDrIELiYpCZ/furfSNG8Wd0IQeLtSNZ/97GffcDP5e7/3e2/6Grqu86u/+qv86q/+6h1dw9l73t3dBd7l2mhJknB0dEQURXzsYx+7bZ+VuxG3KqOlacrh4SFXr169Y12xNzvn7QDAOr36Qx/60KrO+lbidjKbo9aQrz19wFbRpjWZrkpChizzykEL20gRDBNZyfxWTlojxp7PftXluDui6BgcHY1xnGyAcr/qMpr7K6o0ZAKPwTx6zXxLrehw0hxRb47Yq7g0RhOEeBNMTV3h2lGPvUqO1tgjjBMsTWXAmgCmJHF4NOBC1aU58QiimNlis1fk2jpjb0G9MSRv6xQLmdfNmYNmpZBjOJljmgpRFCEJCYf1NoIoIskS1YKDLoiYqsxkHmMoIt01FlvFteis/VzN2xyv3QNVkWkNpys9NdfSmc4CZEGgVrSJkzQDIkFA1xRyqkaSpiSkCGnmjApg6wqzIEIUBAQhc7a86Oay+6IrLOYRiyBEDFM6wyl+EBCFEYU1i+dSzsRbAk/JNujOl6rOUuaL42oaRV1nMgtWdtdb7vkOPF7mr6YsY0oKjZHHJAmouOeZf9+fc8XO053N6C9tA3bzObwooKDbmJpEfzRATBL82YLT2YyaqbNIfbYFg+uTAWmaUtR0Xp302bdtJFHEi3wkKUFCYhb7mJLOBSPHtp6/+dH+nsWZBNX3OrN5p+MXf/EXOTg44Bd+4Re47777gHeBNtrr7cbn8znf/OY3GS090KvV6vfysl6T2URRxNNPP82NGzf41Kc+ddeBBm5PjPNM3+zk5IRHH330joAGbi+z+Z0/eC5rvPcm7BWzMkTR1rl6o0EYhoSxysVqEdKsdAXZDEyjPWa3mMPS1OVYZxb11oht12G9CQ+gyTL1xpCLlfOSzXRtHua0kyk1zxab2ULJyeY+TttjHEWjlDNe0+Nxl9L1J60RRipxeatA/ya76PWfx96CxSyk5lhUctmX3VlOy0uShKZpXNqtYdk2mqZCCsF8youv1hl2xhQViaKubJAH1t0oIaNrn4UosAFEpZzJaDmAmaRpJjsz8DhpjzlqDWl0xxy3Rpy0x6RRynFrRLM7odmdMPJ8TjpjjtsjfD/moDXkuDumOfDoefPV8GYldy6BoyviRhlufVDUWkrc6LLMlUKekqIz8Xymi3AFNLamrmjRhqowmM+4knMxkHi11ydOUvKGRnup/Hwh5yLFIoeDESXLJFleiC2rzBYRXuBzOvNQZZn3V2qMJAnLtkgMmS3BIExC+uMRbgDPd5uEcYQmyhx4A0qajhdEuKqCH6WYksTntz7KOxln37G3CjbvdZfOH/zBHwTgr/7Vv8pP//RP8+u//uvvPNjcKjqdDl//+tdxHIdPfOITwN2drL+dWM8yznTFoii6K+oEt3POW8V0OuUb3/gGcRzz2GOPkcvdeR36zTKbV446PHe1sfq53hyyV7SZjUakaYptWQiiSLvr8cBOcaNJn6Qps1mwNoNzbt9847jHXsldNaYtQ6G17HUcnw65UHap5i2Gaz0LyKbO5URYgUdGpz4/53Ayx5HUjV22KAr0hpvkAYKEvWJuVWKqlRyma/0QQ1No9Tw6/Sn93pRd1yEONzPc8czPsh5ZQdd1DNvFtCxEKesFjSYB86FHXoKyqWzM8lj6pilbtehslNxMfTPDG6yV37bym2oF0lp50NLVDWVpVVkveRkM1kpv0zVAcQ11BTyuqa3khixFRkFk17SJ5hHTRUB7OUS6fo1F28iGWWWJi7kchBmhwDX1tdfN5mwuWpmFwXBJWhgGC3RJ5n6nwMu9PkEcU3UsNEmiolh0l8SAvZyLpVj005hQEfhAaRfd0AiiEHee8FTzBoofczDqIqQpvWCKKSlUNJdd4+7N3t1JnG1Y32oZ7XvNRrubkaYpjz/+OH/37/5dfuInfoLBYMA/+Sf/5N1VRlu3J/7ABz6wMiWCbEd/t3ojtxNnZbQzut/FixdXYnn3Kt4o21jvzzzwwANvu2/1ZpnN73/9ZXRVXi2EURxxctKiYFsEprqako+ThNk4oJTb1BTLmzqN9pi8Ia0mZ2oFm6PTASetIbtbLqeDMSXboO6dL6D1xpAH9sr0xdmq2S2JAp3+lLkfIXoBO7U8qQDN9s3EgIDeaMZe1aU99ii7No32eblKlgTaAw/fj9A1hb2yS5pu3oNS3qLeHJ7/Q5LSbE/YqeQI05hkyZo7i4JjMBjPkUQRSVXZKtjUmz0M3aAzmOPoC4bTkJJrYFg6tqVzuFbGu4k9vXEPy661UY7T1E2K8zpolRwDr5vdR0natERwTJXeshzmGtq58GcK8zgBMbMgqDkWeV1ntgiQJYnrrYwAYarKigotwgqQIPO3uey6nA49utPZSh17HC5dS9M0G9QNUtrBlEDK7veWbSLKInGQEpMupY2yfl4aCqBl6tFFLSMCteZTtjQNIYk5mU8xdZH3l3aJxRAWGmYKzfkIHZHhIqFomDxeu3hHQ4h3M86M0+5kqPO9WkYTBIHZbEalUuGnfuqn+Kmf+imeeeaZdz6zOXsQfN/nySefpNls8ulPf3rVVDqbrL/XFs2vFy+88AIf+chH3nID/k7iVgBw1p9Zn5+5GwSJNyrZfeelOs++ckrBNBBFgSAImM1mFJ0ck3nKdvmcsbJTzNHqTfBn4coi2FQVGu0xURwzm8VsuRayKNJdGzw8bY/YztsMhpsZTM7UuH6jR9kyV4Zj26UciyBEQCCKElqtMY6srqvCUMoZ9JaZzmlrhCHIaDfdp2rRwV/SsBd+SH8wJfETis55P8GbbkojicvPvNkZ0+tOKekGO8Xz93+z4nOWMQnIsoyu61QqZQzDZDyLOWmOuHGjSeJNyUtQs1WiMF4Nd1YL9sbs0Xr5TRQ3y21bBXvD0mFdU62Wt9csEdJVyQsgb2e+KbamsO0YmKLEtmUhRtAaTDnujOhN5shrZICKa67M06quzSwMqZgmDxQLtAdTbvRG2LpCb7YcMrUNerM5O7bNfYXMbnsRxVRdmzjJrLBdVac59PCCgL4/RwAezBcz07YoRFNl9kwHMRU5mY6RBQFNkjkNFuw7DkXFYhgsmMchqqwyV1MulbaRCiYlw6WS6rRePOCP/uiPeP755zk9PWWx5lL6vYo7YaLBezuzgczC4A/+4A8A+PVf/3W2trbeHZnNYDDg6aefplAo8PDDD7/GVOxeGJm9Ufi+z7PPPgvAJz/5yXtWNrs5bgabKIp47rnnGI/HPProo2+rbHarc92qjBYnCf/vf/cckNGcHR1Gvs/FWmU1ld7vT1e77nCZ+cwWAbao4ZgaRcvguDFYvl7KaDjjyn6Zq0fdjXNJiNiKQhjFK8+ZvG3gjX06PQ83Z6CpMvPZukZdSt42uH7YpVZxGMwXLIII4yaCgSAI1OtDLtZc6v0xcZIS3VQOq7gm9cYIQRDYr+aIhJTGmkKArsobw6GSKFBvDfH9iLyt4zoa47VrE0WB7mi+AkFVlWj1p4iiiKqqVHMu/fEMIYrpDOe4vk937CPLEq5jYkkCF4o5EsAPQ+aLEEHIpGyqBWfDNnt9ILNgGyuNt/VQZZGqaxElKcWlOVccJpiCzNQL0S2Z1mSBEQls5azVwKckCRvaat6y7KaIIjlNI4oSOqOM2XbWc8kZGv3lYl4wdBRRojH0Vr0+AC8K2LYcwiDicHSmSGAzDBfsGA5+nOU4hqwgIXA08bhUyDGeSewZOV4aNZAEgSSFo+mIhwoFTmYTtm2TWSRhyCJBpFE2Df6vl76PLc1mMpnQ6/VWVs2maa5mTfL5/D2vltzJjA2893s2v//7v89f+St/BYC/+Tf/Ju9///vfebA5OTnh2Wef5cEHH+TChQu3zB7ejlvnW4114APuiTrB68U62EynU77zne+85fmZ243Xy2y+9p3rtHuTZd9lxnSa8v4ru4TB+UIdhjEzz+e+WpGDtbkab+ZTzttM1noUAgJhFDPoTqkVz+VdBGA8XjCeLCjmTWZySBQntDrnC+poPKdWdohuKnU5psZoOKfdmWBZKoWiRbu7WVLLWzreaEH9dEg+Z2A66gbdGWCyJCGkacpJc8SFWoELZZfG0COMYso3ldSqJWdVlpt4CyxdYTpcsFfJEaYJoihQX7M02CpsUqxtU2Mwnq8sEdyCzTweE0URk+mcwVWPJM0GmXfKOfqejyiKaKqEIYhsmSayJKKqEmGSsO/mgBTTUDFEmSRJEESB6SRAjUXiIEGwhZVoaDlnrol3poz8YAWM+hpNupq3qS8tFwpWNt9yKefS9+Zca/eJkhRJEDb00trTGa6mkdc0jgdjFlGMLkucLl0+y5aOKSocDcZcKOboLsExp6mMFj79cE4oJSiixAUnx0vDLoooMQmzTUwqpciI1FSDo+mIkmZQn00I4xg/jhkGc0RJRRFE9swiVT3LPnO5HLlcjsuXLxOG4cqq+aWXXiIMQ/L5PMVikVKphGmad716caeZzXudjfan//Sf5r/5b/6bVa/7t3/7t995sCmVSnzyk58kn8+/7jHfi8xmXT36gQce4OLFi7Rare9pRnUGNne7P/N657o5s5nNA37vay9h6hKtzhBJljAMC+KMkbQecz8knEfYpoa3pullqTJjP8bUlFVJaKeUo92ZInsi25Ucjd6Y3Uqek9MhAIPhDNvW2C7ZHNQHG+eRgG5vxl41xyvTGbIkbQDSdJoJgm4XnWxoUuA1JbvheI5jalwou5wOspmYSsGi21sT2ZQlmp0xYRij6wrbZXeDOACsqN+reygIxEnC6RJQLtTy7BUcmklIyk2zNgKrMh+AbWZ2B2dZz+5WjuP2KHMzjSKmUw/P8zPSSKRy6IekCCDAhWqe0845aJumynQ5i7NXcZnMlv0VSaC9bketKZyNJFXzNke9zGtGEjaPS8j8iGxFQRQFri/npvbLLuNhdp5awaa+dPTczTuIgkC9PyanqiyWWepWzuZwNOSSm89eZ5C9ziwOkUSRKzmXV3oZjfliwWUYLpASkcbSrXM/Z9OazQiSmFiOcQQVX4gpayYFTeNwNucBt8S1aZcrTp5+MMVVFf7T2q3VAhRFYWtri62tLdLlZqrf79Pv97l+/TqKoqyAp1Ao3LHs1HrcyYxNmqZMp9M7dul8N8SXvvQlfumXfomnn36a6XTKv/t3/+6dBxvDMN7USfOtunW+1YjjmBdeeIFer7ehHn233DpvNwRBoNfrcXh4eMfzM2/lXDeDze9+9QWanRFCEmCbBkgyggCLWchoMl8BBWSL2mljhOsYK2DRFJlWZ0IQxORzBmgwIWOmQWZc1m1P2NnKsZhvzrpMpz6aKFHOWyuBTttSaXYmmfJzY0Q1p6GbBr3BObilwHiyYDyZs7PlMJj5lFyT08Z5RiFJIp2+h++H2JaG6WqINw16Vkv26m8Wi5D51CdYRFyouDQGHqoi0e6dl9Q0VV4pT0O2kNdbI8IoYj4Pue9CCVWWkQo23fGUSt5eZRgAhZy50os7uzcZw03GNDSiJMWyZKIowtFFTgfe6vf9sZfV1gSBraK1obG2bkNQK9jUlwrbosAmW22tH1Qr2LRGU7ZdB0OR6ExmTBYBfcBc60kt1oY9EwGKho4tqyRJytFwqf6wlhgIgkDNsDgZjJHU7H6Xraycl5c0wjSbQUmXFO+ZF1GxTDqzKRdtl3EQMo1C7i8U6C3mREmMkAokUUyTCVU1R2MxYk/P0w+nFFSDjxW2KahvruYhCAKWZWFZFvv7+8RxzGg0otfrcXBwwAsvvIDjOCvwyeVyd5T13Glm814vo125coVf+ZVfYTwe85nPfIZ/8A/+wTsPNrcT9zKzmc1mPPXUU8iyzGOPPbYhg/O97BVFUUSv18P3/bven7lV3NwfanRG/Js/fJ75YoFpmNTKeTqjKbtll/pplm10e1MqBZvO0GO2LEGNJnOKeZMkSakVHI5OsmOH4zn5nEHZ0RiN50hS9qjFSQphiqkqrJtLb1dyNBojFFliu+zQ6E4o2AazyTmwdPoLLqoGuqawWGZN1ZJNZ7nLb7UzxQBV3PxyV0s2jWX24U19giCmXLBwTJXJEghv1m8zdZX+cMbsNEDXFPbLOW60RqvzVgo29dZwdXy5YHG8VnJTFZnjRvazLInYisyFiss8iOhNZozXqMiWodIabDb/653RKusxbBsnFIjibGC02RuRJNmgYGBlGzFRksiZKp3hZoayugd5h9NlaUySBPregpKhoQgCmiAjRCnN7oQLW+5KsaCat2mMz6f+W8sS3E7OQohgOFrgaxGLpcOmo6s0JhNMRWY/l+OVXp80hf1ijhvjMaIAJdPg1eW/B2KMJAjcVyjycj/LshIh4YpTwI8juosZFc2kO58zDBZsqxon4Zz7CwZ+HKMqAjImigQEArah8iPVD3AnIUnSqpcDWd+21+vR7/ep1+sAFAqFlU7Y7cpl/Z+1jAaZAoGu63zlK1/h4sWL7x2wuRc9m7Ny1evJ4NwNyf/biel0utJZ29rauudAA5s9myiK+PL/8geZGZZlI0oird6E/VqB/lo5KopjvLHP/Tslrt84h4r+cEatkqN3kwvmcDxHB3RVIdxwu0w5PR2wv53naLlg+8tMJ4xi2q0Jl3bzNDqbfZiSo9FoTyjkbay8RW84fY3dgK4pHN3osb+dpzmcEIYJwU3EgK2STf10iCSJXKi5zIJoo+wmSeJGFjNfhLRaE5J5xP6WyzQImN1UYttgsaXQX6MwS6LAjdMh8fJ+VwoWKXCh5JIIKZqmcNQeEETZPfLXFJ4dU6Uz9GCZ1dQqeQJGpElCmsa0h17G1BME8rpDGGWSOoam0FxSow1VxtYULpZcSFJUJaM1zxcLNElkFA5XJcJ1++h1RlrBNsglOtOZjybKK3mbSs7icClVU3IMiqlBY+ixiOPVnM0iiamYJlIKB4MRSZqV3iaRT1E1mS4VDFxNQ0wFDodDdgsOe1YOWRA4nI24aOe4OmghCgJ+nNCYTrhUcOnOp+T0TFXhI/ldTPnu9DY1TWNnZ4ednR3SNL1josGdEATiOGY+n7+nM5v1uHjxIvAukKu5XbfOu7nor8/zvFG56ntRRut0OjzzzDPs7e0hSRLz+WtZRfcizoB0NpvxL/+Pr/LC1R4PXN6msVbqERMouyZHa9pcURQzHfmv6dWoooitavh+vNIJq5Udrl0dU90yUVWR6TykkjfpLJv5J6cD9rddwjihvTYzk6YpSZRSLVicdMarct8Z88mbBUjzkMt7eW6cDDfel6UrDIGTxhDb0tiumStm3Fl4XnbdcZxQPxlyaa+AseVy0hmRptl1n6xlLVtFm+6SlXbaGFLMmwgC7JVdWgOPnK2d92NSyNvKRr+nUtwkCmiKTL19/nM+ZxDPYhxDoZgziAUhAwZA12XGWkCcpsRJTJwklGydlMxpdLIIst5RGEIakZcgChcYcoqYiISJgBCkHDQG5wrUpXOTtIKj0/ezz6ucM+ksxTW1peZb1bHQRInecLaySEjW1s6x7yMJsOfmGE19BrMFiizSWM7lFAwNU5Q5Go3YK7oEi+XQqKrQ9makMnTCGQVNp2joXBsNcHUNGYkboxEV1+CS7SIsDVAvWg4nszHvK5S4Pu1zJecyjQJUSeSHth7kXoQgCLdNNCgWi1iWtVrX7qRn4y3FTt/LPZtbxTsONrcTd7OcFQQBzz77LLPZ7E3l+O9lGS1NU65fv87169dX9tHXr1//nvWIzgav/uiP/gNPvjjEMi16vRmVvEVnOMU2NJrNEVGUcGH3PAPZrbjUTwbkHB1DU5j7YTZ13xoTRjFbZYfOaEacJMRLBlvGOLOxTRXlpl1e/WTI/RdKdNZ6SIIgMBzOmM4CKmWb8dzH0GROT3ur/l6cpsRBynbJoTee4QdR1kdZAy1v6pN3dPbKLp3xFD+IqBRtOt01OrMk0myN8YMY19GxbG1l3XwWqrJ5zaauUl+WyBRFomxnDqNnQ5aiKGwo8szXSnSyKNJZK5mVXHMFVLN5SClvcbpWjsvZOuNl1lQt2bSa50OquiitMs9KwaI99gGZJBGRU4neeEocxZRdlekiQZZlHEunuSynkcIsjDmb0DV0BWZQMHW2HIvm0KMzmLJdsFdAU3EtWtPlOXMmuiqTBClhlDBYyuzUXJuj0Zi9pdHa9X72fqZRgC5L7Ds5Xun0SYGdvE0u1RjN5hzH2XvbMi1eGfSp2haGJHPqTdANCQeFTjTnolOk5Xvsmy6TyMeWVX5054OvMaO7V/FWiAZBENyRVA3wJyazOYv/U4HNaDTi6aefxnGc23LTfDtmZm8Urzc/c6/Od6tYlQXGBkEsgpCVyWbTgJyl4+oap6NskTs5HbJXc+kOp6v+yHiyoOBm2laVvEV92atpdydsVRwkWaSx1qQfewtqlRzz+TndOE1Tiq7B9etdtrZset6CKErY3nJoNLKFp9P1cCwN1zI4Xbt+RZbodCYEYYxlqeQKFrqmUF8y3CCTbGl3slKaoSuUKy7pTYl0rexw2hyt3pMoZECxU85x2h1npIc1WrUkbpbYkjjluD7EDyIsXcEtW3QHA2RJJEoS8o5Bb62PUi3ZnKyJcBqGCmsstcHavEylYNFZUyu4WZ5m3aJ6veFfdC360wWGYQIpqqEi+BP8IMCSYzw/RpZkbE1mNPfRNZ2yYyEjUFR1hqMFsiAyPvPMkc5vmqpJSAuBvZyDIAgcdpe+NfZ5+UoUBfYsh/bQQ1gSAyo5C0kUUFMpIwaQMQ1FoD4cc6nocjqbcNF2ORiNEABHVXl11Oe+Yp5R4JOKoMs6iCk2GookMFhEPJgr8XBhj3ci3oxoMJ1OUVWV69ev3zbRYDqdomnamxKn3mvxrlEQeKO4Gz2ber3OH//xH7O/v8/DDz98W7TGe5HZTKdTnnjiCaIoeo2+2fcCbJIk4YUXXqDf75OKJteOxhvum/NFSMHQGKwtZGkKrfaY/aq7YQUwGM0oOya9m/xk2p0JuiivFsezko2YQjiPKKwpABuqAgK0Ox6OqmBoMrNpkGU5aSbjGccx7ZMR5dz5zFOtZK96MdNpQL87RRGEDQHMrVKOMExW72vYn5IsIgo5Y3WMf5NbqG2pDMdzmo0xeV3n4nZ+4/fVikOwdg+qFWd1T+aLkCRKGA0C5BB2XJuqa1F0jFWms967ksWMJXd+vTaTtd7PujyNqogbZm3FvLHKBDOxzjV5Guv8PhUcg/EiRNd1bMtCs3OoioIhi+jE5ARI5wFpGHDQHDCcLijY+krSRlfljd6PgoieSjT7U06WdgamqnA69tBkkQdKeU66Y05HE7YLDn4Uo0oSeU2jOfRYRBHN6RRXVbm/VOD6YIiQQpgkmKKKIGbOR/e5Ra6OBrhKNizam88QBIHmfEZKyjQMaMwnbBkWf2bnzkgB9yLOiAYPPPAAjz76KFtbWziOw2w245lnnuGP/uiPeO65595Q0cDzvI1S3J+UeMfB5nbi7fRskiTh+eef5+WXX+aRRx7hypUrt/0h3m2w6XQ6fOMb36BcLvPxj3/8NYOa9xpsgiDgW9/6FsPhkP39C/zBtxp0e5kawHrMvQBb1zYaxLapcno8pJzfpJVKKTiahrwGWNuVHIc3upQdcwk4KXnHoNEcMZsHTEdzKkWbgmvSak8QBQFREBiNF5RsY/VQpiyzn5yZyct0F2wXLCSBTVM1sgzlxmGfvKFnYJKmG8OlAKWCRbvjMe7P2K+4VMs2vcF55iBL4kaJbTxZ0G176EjsV/OYukIQbD4P4U3kg/ninOjQ6XqcngwZdWeYgsSlsoshSdSKDqamUC3ZG+C9fg8VWaK9Bi5bRWdlWAcwWgOlaskhXM62CAJ01jIlx9TQFZmqa3NftYij6hR0CxGVSSAw8VPCJGUym+JNJkynU4Q0XD33W65FwTK4kM+xZVsctofMg4hawVrJ5ZRdk/1cDjkRCeJ0pW4wiyN2cjZ5VeV6P8t8t/MOZcMgDBJ6iyyLu1Bw6XgzJgs/sxlQDUJiirrOlmUxDhY8VCzTCOZcclx6/hxHV6gZDu/Lldk387xbQxAEXNflQx/6EN///d/Pxz72MWzbptFo8I1vfINvfvObvPrqq/R6vdU9PwObO4k//MM/5Ed/9EfZ2dlBEAT+1b/6Vxu/T9OUL37xi+zs7GAYBp/97Gd54YUXNo7xfZ//6r/6ryiXy1iWxZ/7c39uxch7O/GuAJs3W/zvdNE/symYTCY8/vjjlEqlt/T3d4uNdqZv9vTTT/OBD3yAhx566JZNw3tJSJhMJnz9619H0zQeffRRnnulR6Od7Yab7TH71TyQDQz2hzO6fY+tgsXZR2NrGr4f4U2yPghA3tE5bYzo9DxKtrHKZPxZtuC2uxMcTUZVJCxNWe3EgzBm2JtSzpnnaQ9Z5yAOE2Zjn90tF0EQURSZbtdbld2azQl75Rxpsm5eANFSYXownDEZzLn/QhlvjV4sCDBYAkuaZqVBQ5TZr7qrbCjLUs4/73LRYjReMF+EnNSz41UEqiWbFMg5Op21klqpYDJcA8Fq2Vl55/h+BCnUTwZ0mmP8SYAYQzVnsV92ubiVR0yhmrdwLY1aObcBZOt9pHLeYrRSg85ELF1TZ8u1uVIrsWWbXCzm2HEsJuMFwTRclhwjTrtjpouQWjHTTxNFkZLrEAoqtm2jayqdyYxwMceIfLrdAc3OiKPOiOma0+c0jBCAfddhOgs46o6I43Ql2FmyDAxRptH3MHWVOElRJBEJgZPBhLyp0ZvNuezkmYcRQRyzn3fxw5hFFBEkMXM/puNP2dFztBYeVUmnHy2o6iayIGErMn9+952ze76dWKc+nxENLl++zMc//nE+85nPcPnyZeI45qWXXuKrX/0qP/ZjP8a/+Bf/4o4ZqdPplI9+9KP82q/92i1//0u/9Ev88i//Mr/2a7/Gt771LWq1Gj/8wz/MZHJenfjZn/1Zfud3fod//s//OV/72tfwPI8/+2f/7NteC98TRcE7KaN1u12eeeYZarUa73//++9oCv9uLP5n/ZnRaPSm8zP3KrNpNps899xzXLlyhStXrtAfznjhlfZKaRegfjrkyoUijbWeR6M1Zm87TxgnNJZ9Dd+PkEQB19YwZJnREizOejWqJlNfUwEYTwIu7uXor5V5BMA0NG4c9NjbKVBfssVKRZv2MrNoNUZc3CuQkFKvD1YlB0VRmHsBwTSgVrFpdDyKS4absGx0J0nKdOLjGhqiKtEbzKhWHJprzXVVkWg0hkRRgmmq5Msmi5tmbdZdMAEsU131hHKWRq1gI6bCyg7B0DYz1fWZWUGAwfi8H2NbGqetMWeAubud3yAGGJKCFIKsiBQcg+k0xFU1SFNsVWEmyURxgqHJNBvjzNETUCrCilG4XXZWoCTL4sbw5/qyUcwZTHoBiixxsVxiEUa0Bh66odAcTYjiCFkOuNGcIcsylZyFIcsUNZ04Phf6rBVsjoYjLrg5kARu9LPeS28+p2JligRnZAFNk9gVc8zCkLY/Zde2GQU+kyDgwVKBa6Mhu65DkMSIEliixljK5HwUWWIa+zxWfgBTubsyTnc73mjO5maiwXA45NFHH+X3fu/3ePHFF7lw4QI/8iM/wo/8yI/wZ/7Mn7kt6/kvfOELfOELX7jl79I05Vd+5Vf423/7b/PjP/7jAHz5y1+mWq3yW7/1W/zMz/wMo9GIf/yP/zH/0//0P/Gn/tSfAuB//p//Z/b39/m3//bf8iM/8iN3eCfeJZnNm8VbKaOdZRFPPfUU73vf+/jgBz94x3Ivb7eMtt6fefzxx990t3K3weaM4v3cc8/xkY98ZOWY98/+1z+mfjqm4m7qvoWziHJhkwFz2hzi3LSIzuYhjqEzvUkhudfzEGM2ekACkIQxmihhm9pKiytnaSRJykl9wP52ptigrDXAU+DkZABBjD+frxqxW2WH/mBGGCa0TsfslB0MVYT0nHSQczTa7TGj4ZxhZ8reVg5ukprZKjurbGg2C1hMAwIvYG+Z6eiaTGutkS9JwkaJbTEPqB8PGPdnlCyDC9X8Rv/HNrUNYsFW2dmYxcm7BuuZ2XzNdiBnZxlTmqaEQYyqyXgzn4m3YOFHnHbGzBchYRjjOsbqVUxdprnWA0rWCgbVorPqcdmGSmswISXrG0mCyH4+hxyLzPyQ096EOEmxLR1N07BMi72dGpqqUjFU4vmUlw9POO0O8COfdPnMioJA2TDpjGecLBUFdooOJcOgP54RLDXuarZFf7LgdDxB0yQu5/IIiPQXc67k8lwfDZEQWUQRrakHokB3NsVLIlxNpb+YsWPYfP/WZd7tcbtDnYIgUCgU+IVf+AV++qd/mu/7vu/jn/7Tf0qhUODv/J2/szKRfDtxcHBAs9nk85///OrfNE3jB37gB/j6178OwLe//W3CMNw4Zmdnhw996EOrY+403hVgc7fKaGEY8tRTT1Gv1/nUpz7F3t7bY6i8ncX/zfozd/t8N8eZs+jJyQmf/vSnV06nf/jEVV662kIA+oMFtXIGLttlh9PGkFZzRHXNQmCvmuf69Q77a41yQYC5t0BIs93+WexU89TrfYqOgSJnAODmdI6OujSbPfzpHNtUM/rtkjoMUK8PuLRboLc2WAlQyhu88soJjqmxXSuCkE3mg7C0nhCZjBfMxyHl4jlIWkYmoZKmKUmaMPN8Jv0Zu9Ul2Kcp4/HmPJOuK0w9n8bxAFOUuFBzNwZGq2Vno79SreRWmdBgOCOJE3ptD0eRKdsq2xVngzIt3mRcMxityf67m4w11zE2/q679rutsr0qrwkCG2rPpby9KlWaurIBPP7y+yMAtaLNfilHWVMomxqHjQEnnTGaKq3IAJqSqTZDRk5QJYmSYeHHEqFiYJgmlq5S74+I5jPyxLxcb9EaTNhyTaIkpWKZCCnc6I6wdY36eMzlvIuuyEyCgJymQSJw2B8RCjGXneWQqyRzMZ+jM59xf6FIa+ax6zhoiUCYxmwZFv+Xyx/jvRB3MtQ5m81wHIc/9af+FH/v7/09nnvuubsiXdVsNoHXuh5Xq9XV75rNJqqqriS7bnXMncZ7poz2ZmAzmUx46qmnME3zrqkkS5JEEARvfuBa3Gp+5nbjboHNmQSPoigb96LdnfDNJw+ygwSBJE0ZDGZUihazZTM9TlIG/SklN2vKt1vZ7rxeH7C/V+C4MWRvCSoAuZyBZaqEYUxvuZPvdCYUSxbjmU/BtgnnGfhNJnM8b0axoDGbR8iysmyKC4SLmJyu4CsS3iwgCHxazSmarhFHIrPxgkt7RY6O+hvvtZS3qNcHCAJc3CvQHc3odL2s17QktOm6zGAwZV4PKBUsnILBjRvnr6Np8up9QiZI2mqMEaKU/arLcLrYABpg1ZA/i8UyM/GmAf5igSyPiOYhJdfEzmlESYJr64y8BdWKs5H1WEs16Oxj2XQX3So7NLrnGda6usBWydkAlHUJnGLexGuPMFSFkmMgyiK7rk1/eX8mc5/ZzGfH0DkTtik4BuOlAdtWwWa88MnpGqIgcLics9rfcrnRHyFJEhe28ll22hsh6wrJfMw8mHHQ9CnqBv58QXsaIQgiJcfEChRaI49QSnE1lZJlcG0wpOqYSGSDoI6loiDS9WfsGA5df0bVsAnSGEWCFIGHS9tsG/deZeNuxJ0Mdd5rqZqbN/e3YzB3N0zo3hWZzZuFLMtv2LM5PT3liSeeYHt7+7aziNuJt1pGO8smjo+PefTRR98S0MDdAZt+v883vvENCoUCn/jEJ1b3Io4TvvzPn6B+OqRStLNyVpo163OayrqKfxjGzOchlYK9QfOtnwy4sFPYoDqPx3MUQWRny80W3DRrWfd6HtWCxWQ8RxQlVFXDNC22tor4U4FS3mAxnzOZTBAJObrRpt/1SIMYUwVDS0FQUZc1+ShKiP2Y3a1cljUBiiKu5n7SFOrHA2oFm2LeQhBEBFHAMFQ67QlL7KE/mLIYLagWLXJONolfKdkbTK9qxcHzfMIw5qQ+QE0FlDRj2YkCuI6+UVIruCb9NVZb3tWYzgLSNMt60jilcTJiMpijpQKmLLNXdtmv5tku54jCGFNXEQQhIxWsqQ8ka6U2N2dsDIQKy2xJV2X2tnIYqsJ+2WW/mCMNU2xJxp9mCgPHjSHN7oRCzmCynJ/RFInOMjMSBehMZiiSyH4xRxInjEcL6q0R3pox28QPUESRS8XMm+eoO0JXFfp+hGEYfPDSHjnToT0LSOIAz5tiRCEHzTbH/SFbrsWWZSKmAjdGIxxVRZYlTsYT9vM5JouQvKmjIKMpIkIqYCgSY9/HS2J2TJs/vfO+N/0evFviTrTR7pVxWq1WA3hNhtJut1fZTq1WIwgCBoPB6x5zp/GuAJs7LaMlScKLL77Id7/7XT760Y/eddvmt7L4n/VnwjC8rf7M653v7fSIjo+P+fa3v82DDz7IBz7wgY0d1f/n3z7P4VGPOE6Yej62pZGSSbEc3uihSBLamqdJztIYdqcbZTJSEKKEorvZqIyjGK8/wzLUjHSwXB/9WYgqidjW+WvkTB0QWUxTHnpwD8u0cEyNMAjxPI9Ou0+vPWKrkEeWzq/HNBRajRGnJ0MsTaFYMKlu5VbOm9n9g057TK81Zq/qoqkKW2WbJAFBEBEFIQOKjke7Ocbrz9gt2ywW4Zox8cbwPwCGodBuT2idDjFEiWrR3rgHpvkGM1tpukHTVhSJo5MBp40RJ/UhUirQbk5YTALEIEVOIW9olB2D/UoOIUzZLthsF2wqOZNqzqJim9Rci+lwgRxB6IUIMbRbY05Oh4RRwkl7xGwRZpbaaw6f62rXOUslSVNEAS5u5SmZBlIMfhBxusy8Sq65mrnZck0cVUUTJKIkZbxUFSjlzKX4poMfxkyDmIJjk2g6H9zZwXVs5mGEP5/T6XS4dtpBEVLyqoarZeW1/VyO40m2KfCCgLE/Zxj4aJLE8XRM3lDJCSI/tvvQ90wp4G7EnYDNvcpsLl++TK1W4ytf+crq34Ig4Ktf/SqPP/44AB//+MdRFGXjmEajwfPPP7865k7jPVVGW0/lFosFzzzzzKr5fjtMjTs975vFur7Zgw8+eMeEhDvNbJIk4aWXXqLRaPDxj398pVx7Fq9ebfHM8+c8+fkixNBFdFUkmGXZyHA0o1J2Vr0DfxYy8RbkXZNYk1n4EXnX4GTJNNvZdlc+LnnH4LQ+wLY1bEvDm/psb7m0lswt09LIuxldurlUFUjTlNPjAfddLnN02MMwTWZLGZRy0eT6K03yRQ1vkSKKMvlajoa3nPQfzZEVEdfcJDjUqi6NpVbaaX2AaWmICWTwIQACbs7EG/ucWWAmSUq/NWGnlssWzxRarbOylYCmShu6bWGYcHTUJwgiXEfHdQ0Wa3Rp01AYDD0sKwOgrYqzoThQLFrUT8+bvcFaWcw0VRqt8YrFtreTX5nCyZLIcDxflfN2twu0l348mirTXFc5kNd6TZUcJ8synGkoK/M6SRQQSdjJWcz8hIUfrkpymiavfG90TUbzJbZdm5iU40527dZyAyGRGamFfsxciugutf128zbN8ZTT4QTdUqm4OXZch++2O+hKwmI+p+HNKDoaZU0njiMUUaRmW5zOPHZzOaZRQCIk7JoOIRGXZYMruc1n+90ed9qzudMejed5XL16dfXzwcEBTz/9NMVikQsXLvCzP/uzfOlLX+KBBx7ggQce4Etf+hKmafJf/Bf/BQCu6/LTP/3T/I2/8TdWCtc///M/z4c//OEVO+1O4z0DNpDtEmRZpt/v88wzz1AqlfjgBz94z6xd3wxs3k5/5lZxZmj2VuqjQRDw9NNPE4Yhjz322GtAdzxZ8E//2TeYzwMKrslgOfA38QLyhsJ0zda4051Qq7kokkj9OOtpDEczisWs8ayJEuMlq6vdHLNdcwnDiNOlVM1kssC2dfI5g7l3zryaTX20SKZacxn3z8tNAMEspJg3OD7pIkkSumFgWxYLW8Cfx+RMiSAOuPpqHVIxc7lUZLbLLkcHHbYqDoswZuz5zKeb/bW8a1C/0aNSdogFmM78FZAIAIJAmggICDSb2a760pUSqiwthz1TSiWLxhk4CFCtOivTt8lkQc7W6TbGWIZCvmAhKgnT6a0ziex+njf03ZxOZ40UUcibTBvB8lTpBolgq+JwuhTvTGFtzgYqZXtlb2DoyoZvTrjavKRUizZRlNljC4LAq/UmqhJTKtgrdQJDU2gsPXByppKRJCLoDmfMkgzoirZBezxlL59DUySutbPP3zQU1NBnx3GoDybMw4i9Uo6YlKE3p+lNUSSJ+2sVXu722dsqo4gpjZGH4k8zhe7FDEPTmAY+uqqwSCJCIaZimHxElu6JkeC9iiTJ/HruJLO50zLak08+yec+97nVzz/3cz8HwE/+5E/yG7/xG/ytv/W3mM/n/PW//tcZDAY8+uij/P7v//6GRuTf//t/H1mW+Ut/6S8xn8/5oR/6IX7jN37jba+z7wqwebOF9UwjKIoi6vU6r776Ku973/vY39+/p5IOb5RpvJX5mbdyPrj93dBkMuE73/kOuVyORx555DVaSkmS8uV/9vUV8yryI0xDZTYPqJYsjg7aPPBAkUZnfC6n4ocoqnLmzQVAv+9x5VKJ46PzOm4SJ3SaI/Z2CvSWfysIAtOpz36hsCG7AmDbOqc3emzX3NXMTr5gUj/qMpvNKZUdNNPAMDQ6zRGCkE3UhwFc3K8x90PqJ32iKML3fU6OfQIfGo0IXVO5/1KJa4e9jXPOltdwRly47/4qp80h0ZLNlS+YdNccLxVFpHE8xPcjqmULSZWYeovzAluambyt6mzCuYL0fB7i+yMkGaJ5zFZew80bxGlKMWcwnMwpl53VHBGAZWkMl8QMgZTBGjGgWnE3iAHBGiFhq7yZLa3f61LR4qg1xNAyYoAgiezkbYbjOb3ejMlSqbu2lVlKI0DOMRgu+zjlgkkQJ4hJNptztMxeayUHrzcEsrkcURQ47Y4pLBUlDFUhTUBDJgXmYYQkCciSyHF3yG4xxyCYUzMtjkdjNFnCNXQOhiMe3K1yYzTiUsWkPh4ixSEHrQGuoeJaGrJi8uN7D3HQfvY9BTZnG9U7IQjcKdh89rOffY0p4noIgsAXv/hFvvjFL77uMbqu86u/+qv86q/+6h1dw+vFuwJs3izOAOWFF15gPB6/qY303YrXy2zO/GdUVeXxxx+/a4SEtwI2rVaLZ599lsuXL3PffffdEnT/j3/zDJO1HbA39SkWTCRRwxtl/95sjtjbLVBvDDN6bphw0h5wYck8g6ys0qwPKboGvcGMOM7a1rWtHPUbPbZrOZrLjEFRJDqtzF2zXDq3XhbTjKTQOh2yt1+gfjIkDnxmszmGYRAGIAoRxfxmrVqRJVqnI3w/4sqFCo3uhHLJ4uS4B0LEYrFgPpsjEmKpKoKi4nk+W9UcneZ5uUoQBJonA8JFxP5OnnbfwzRUhqwt8Fs5TpbMtn5vylY1R7xIuLBdYDiZo2oy3bVFvly06XXXRDarOY5PMsAbjec4jp7NCpEJeJqyzE4pEylNyO6HY6rMFmHGOlvz70mFNWKAa6wsDuBckFNTZcp5kyhN2d9ys7JglJBTVKZegJgzV59hrezQWL6GZapr5TSR9tAjZ6oULANvFtIbzxAAa6kUIQrQ8aaUHRNDljloDoiTNFOA9qY4mko1b3O1tbSZVkXKtomrq1ztLp8hRSKdpSimjJpG5HWNw+GIi67L4WhEXtdoLeZs5wu0/CkfKO0RRD6LcM7uNObG088DWf+gXC5jGOf08HdrnG1Uv5eZzbs53hNgcya57fs+jz/+OJqmvclf3J24Fdic9Wdez3Dt7Z4PeMO+zXrp7sMf/vCKYXJzPP3sMV/5d99FkkRKJYvectHvD6ZcuVDmWt9b9QZOTgZc2CtCklA/zhbHen3A/n6R49MBlbzFSX3AfB5Srebo9KdIosCg65EkKe3mmJ2dzCa6WnE4OSvB9ROq1RykKe21Xk39Rp9CUeb4qI9lmav37boGx9e77F0ocrxc9KvVHPUlTfnkeIBbMFFEEUWWUeRsF13IG7QbQ6JoQRLHbKsBwbBBnBqIbqayu11zOV32m+pHfXKugZSCokqEQUxK+hq9NdJsePO0vqQDXy5hqArdocdiHiFL4sYuMoyiVdYjwIaYqWEqHB8PVlnSzra7uicAYpKSUxUURcI0VfwgoZbPFhzb1tAEcenOKTIZzJATCGchuBkxALJS25lVtSiJtNfmc1jbjBRcA6+decDsb+UIIjJbCU2jtzR9q5UdTpdzNvuV/EpVYL/qZm6rZPfuoubSHk6pD7Jr2C45KLLEcW+EJGWaDvdXilzt9rMNkZARECJD5ZLrkkpQMUxUVUJPFYI0Ys92SIQE09J5v1Plpx58ZFU673Q6XL16FV3XKZVKlEqlNzQveyfjjPb8Vqsv/xFs7mG80YfRarV47rnnkCSJhx566HsGNLBZRkvTlIODA65du3ZX+jO3irP78Ealu+eff57hcPiGXjwnp0N+87e+AWS759nUx7F1Jt6C/e0Ch9c6bFdzvOqdL0azqY+pbT4O9eM+91+pcO1qe/VvrdaYSsVGUSRO68Nlnz2leTri4sXiChggY6l1m2P2984HxDL/jzmyIHP5QpXxNFjRq6Mgc3es3+izve0ymfp0WuelJABdk2ge9dnbL1I/HSAAuqaiqhrabI5QP0b3eoSizIV4wYlbI6hWGWjiRi8s5+jUb/RRVYn9nTypwIr8ANn8ULt9fm7TzOR1zl5jfycPokDO1plMfVzXoNP1SJYc8sqWcz67I4DrmnjT4er11hUDbEen0TwvZZqWujKYkyWR4WS+EgDd282yMlj2Z9ayofWNT23Lob5s5juWtmr+u5aKLIpUcxaHdY+x5zOZZ/d/nWadkLKdt0niFG8R0BvPEAXoehkY7RUzs7TxzGd/y+WoP6JkG6RJyo3OkIpr4fkBVcti6C9I0pQHykWu9vsUbRMRgf5sjusY+HGEgghCSpqkiJKAIAq4qsZfvvIhBEHAMAxEUeSRRx4hiiIGgwG9Xm/DvOwMfO4FWehO4k5mbOBPhiX0reJdATa3ijRNeeWVVzg6OuLDH/4wr7766vfM6+UszjKb9UX+U5/6FK7r3pPzZVPxwi3f53w+5zvf+Q6yLL9h6W48nvM//qM/oFbJcXTSX/5tiJuT2anlVrv7RmNM0VWJ0qw2H/sRJ+0Ju7t5TpY7blkSs77MbmHpV5PRmqMgRkzIykHxORgH05Cd7Tz1k3PA2a7mOFpmK0f1HrPZnGLBIJhBrzMl5xrouoJpqDTXWFrNxoiLl0p4kwX+4pyxlYRJNkh4o0e5bKOaKo2TIcJwiHBwHQA9DukrDhPJYHvUQh8c81L0CL5pIEkSmqZmCgZpShDE1G/0qdVy7NZcJrOA8XiO7egbKgOFoslsOTR5BjhnGVzBNamUbSCi0ZyiqhpJnKyyGEkQ6Pa8VR+sWLQ27LZdV1+VO0VRoLdGotiqOpyuNN1S+muKzqWitSIGmKa2wUibLwFcVxVqJQd3ETGZLLB0lcPlQK5jKAy8BbIk4+Z0mgMPRRLZLeUYzhYMvQXlvEVvSX3eLufwoxhbzqwAxjM/oyr7AReLLn4U0RgtQc3UGPd9BE1gOJ9zwXUzEzRZxlBkjgZj7t8q8Gp/wANbRQ6HA/KOgaWrxGlmS/AXLr8fS8k2l0mSrBZuWZapVCpUKpWVeVmv16Pb7a6ynjPzskKh8I5lPXdCe07TlOl0+ifOpRPepWATBAHPPPMMi8WCxx57DNu2uX79+j1zzXy9OJt7eeKJJ+56f+b14lbin4PBgKeeeopqtfqGoqK+H/E//qOvMhzOGA5nGUicZuAShjFSnOlXxaSZXE3f54Mf3CaNk9WuvnE6Yns7a+JvV3PUj/pMJgt2l4AjkPVf2s0xlarDYDwnCmOqW7kVWOxdyI5VFZnBsiF+dNBBMxJCRcLSLcJ5toCNR1kvpGBv1uBVRaJVHxKGUdbjqQ+yPsxa6anX9djdLbC37dJ47lkSwA2nNPTzTKqt5qnOB9xff4XuZz7HeDIn5yq0TkcIgoAsy5RKNs3TYQb2wO5+YeMzECVxRSTIPiOR7trCvlgEvPxindlsgWWa7O2WEUSBve08s1mAYamcNDLL6TTNiAjpko4t3WRrUK3mlgKdWaxnQLWqm5E5WBIK1qRqigWToDvGtQ0cUyOIYlJdx5v6HJ8OV/NIin6++EmKAFGW6ZVyJjlDo9OfEicpwyX4qZoEHuQtHRGB7mCKpkiEfgakFysug9mCo/GIWsVGlSQullxeWfZvDE3GChUESUCXZGxL5XA04oFKkVcHfR4oFzkaDdkvuKRCSkKKooj80O5lrjjnNOd1sFmPdfOyCxcuEMfxKut55ZVXCIIA13U3sp7vlU/MnYANZG2Dd0t2djfjXQE26x/+cDjk6aefxnVdHnvssRXD6l5aNL9eDIdDAEql0l3vz7xe3MyAOz4+5qWXXuJ973sfFy5ceN2/i+OE3/rnT9Bdo702GkOqWzm6vQm2pnByMsyApDVa1fDjMN6Y7E3SlHZrzOVLJW5c6wDLmZh6n93dAqIgcLIslXVaE0oVG28WMFujOtePBuzuFRAEODnqE4Yhi/mcONZ5/0O7nC5nYc6iXLI4Puiwf7HEcX0AgkB1ST4AODnsU63lNozRICt1NeoD0vGE4qiPJCZoScRYOv+ilvwxLS0PCYitPpfff4HFIsJx0lXWGkYLJpMZsiQhywpJHNE8nWBbGvmyjSiLHN3orl5zq+rSWIJ4moKqpvS6PpZpIUkigsAqgwRQRJGCqaObWU8mSVOqS/M309ZodcarSaBgzVagVLLW/HZSBCElZ+toioRla0RRTMHUiaIYbzQnmcf051O0bXk1A7Wznae+pEwXCyadZR/HNBSGkzn7Wy6iKFFvjAjjONNHW1KfHVNjtgjZKzhEcbKasakUbXrTGVXHYhqEjGY+xZxBnIAhy8yiDCCvlPPc6GXPmivqTOY+iiqx6zhMo4ALTo5J5FO1bOI0AxnEhA+XKnz/9sWNzzpJkts2WiyXy5TLZdI0ZT6f0+v16PV6XL9+HVVVV/MjhULhnrph3smMDfAfM5t7HWmaUq/Xeemll7j//vu5dOnSxsP1ZpI1d/tazvozAPfff//3jHJ5BjZvNqh58/X+s996gqeeukGxaBMECXEckyQpw/6MizsFDq9nC3ejMWJvr8BRvY+uivTbY6IooVZzaS7ZW6IIo7ZHuWRnvYMUUgG88XxDJBKg1/G4crnM6ZqwJsBkPMc2FKIwYLHwMUwTXVdpn47QFQlNkxmPF0iiwGSY7dBPbvSobeeZ+wGtm14vTVMGrTHb23kay9/ZtsZkOEMIQ4aKjR3NMKIFehSwkLMMVItDWA74x37mpDnue+zvFej2p4iiwGIWYNs2URQRxxE3DpqEYcpisWA08iiVHMquiW5pDIYzZkv6cJrCfD4jjkUsy0IUBVR1U2etWLLoLTOXyXjO7n7xHIjSFCFJiWcRkiBQKlt4wzn2cgG0FJmpkD0PpqXTPMmyGg8QEVYDnzvbLqNelolo2qaN9WxNiVrTFbSFRCVvY+gy3c6ARnvCxb0S4XIjVy7aHHVHlByTgmNw7bTPkDm1Skbtl8SMwRYsYiI1WUncFGyda60BeUun480yn5swJE5S7qsWeLXbZ7fgMI8iVEWEVEBWREYLHyunECYJSZqwbzv8hcuvdd68k4VbEARM08Q0zZVl83A4pNfrcfXqVRaLxarXUywW77o75p30bMIwxPf9/0gQuFcRxzHPP/88nU6HRx555JYmZ9+rzGa9P/PJT36SJ554gjiOb8tG+m6EKIoEQcCTTz5JEAS3HNS8OX73Xz/Dk9/OBDb7fY/atps1nMnUijvNCbal4i2HHuv1AXu7eY4Pp8vmvEC3PWZrK0e7PaZaynF63EdWJIpFm17fyzxoVIXTo17WnK8PAcjldI4Ouli2hmSKqyFRQ5U4eLWBYUmYRZcgzADtZJmtaJrCVtVBVeTVvwG0G0MuXiozkSR6nfPyUhon+IuI5nGf7d08QRTTXGZIqaIgAPlwSl0ro8Uh+34bTzFoaGsgrcj4i5AojDm50UOWRPbur9Bqjpl4PqqqsrO3xenxAEmMiKIIVUuoH7eRJAlZltnZLZKksFNzaTQ75As6/kJYLVLlrdxqyPXsfZ6FIEC/P13ZLJS3cnR7HoIoQpqiqDLzJZXaMLJMNEmznMexdUbLmZxcTl8BDcBiTb+uXLKpL/s4paJNZzTFtTXytsEijEkWCa3WBMWQVj2kgXdejhMEge2czWAyZzL3SUnJOzqNwZi9Yg5FkbneXL4/SWA7byOkcL01IAVKOYto6BElCePAZy/vUB+N2bJMZlGYzd8oGkEYMYp8tnM2fpwgKQJFS+evPPBhJOG1C/TtZjZvFJIkrcppkJWr+v3+KutRFGX1+7uR9dypLhrwHzObexVhGK5kZ3Rdv+Ux3wuwmc1mfOc739noz7xew/5eRZqmvPDCCxQKhVsOat4c//J/fZI//OrL7O4VOFmWdpqNEft7xUxI8rhHmkI+b6Jp8qp2L0QpmiwSxdmCE0cJw+Xw5uGrnaWXSsRkOKdcctBUicZScfnkqM/exRL14wG6KjOJEsbDOZajkcsZaJrI4dVG9n5iHV1RyBdVWmvlM98PGfdmVKubXyrTVKkf9kiSlL2LRU7qA7ZqOdprf9s8GXLhYgmtJmdZjm1jSikNLevV+KJCXS1xedbEkH1OjTIoCpUrO3TWGGaiJHJ0rUMUxmzv5IlTmE0DEARkRUFWFEolh8gfEEYRYRjS7XXxxlE2GS6KXLm/hJAXESSRiTdntDaYaZgqrbVZn+q2e65GAChLLToB0AyVTmeKKAjZol22qZ8OszKdItJsjzKatQCOo68UBIoFc6USfWbQlrN1HFND1WT8echkuMC1DNrLvtPOTm5VWqtWHIZTn/2KiyyLHCyN7PZqeW4sZ2TKroUkiJx2xli57PtZck0UQeSkO2a3lgMB7q8UuNbMnrdSwWQShEiySMUyEUWBYeCzm3cYBT45Q0USRSISNFXEVCX+ygMfwVJvzTZ9vZ7N24mzrGdvb2+V9fT7fa5du8Z8Pt/o9dxJ1nMnYHM25vEf2Wj3KAzD4OGHH37DY+7ErfOtRKfT4dlnn2VnZ2ejP/O97BW1223m8zm1Wo2PfvSjb/hwp2nK7/7uM/zhV18G4PRkSLXm0lrW6hezAEtXVrM0w+GMSsWhH83Y3spxcqPHZOLzwEPVVflMU2W6pyMKRZP+ci4nDGPSKOZmuD250eOBB7a4+vI5LXo68dGMmIU3QxREdMNAEGAymZPPGxSK1sZiXy7bHF/vsr1XoNvzCMOYfN7kdJwteCcHPco1B/GmiWjHNagfZjTk6k6e6TTA/ej7aHz7pRV92Ilm3NC2SAWBymxA+ugnXyOwWak6q/5T82TI1rYLYczebp5Od4phKXRaY0RJQpMktqp5et0JaRpmdFxL4tVX6pmEjiyzu19iOJhRLdooqoRmqfR6U8aTBUmcrOjLkOnFNdeAqFyxs2xRELIZpuE8U64WUraqOerL0qEinwOPLIk4jo6uKcsSnsRJc8zcj0jDFM8PlqC46YkzXQpoOrqMKkkQptQbQwrFLIMWBIGeN2Mrb6NLEtdP+yRJys6WS30w5kLJJSbhpDsmZ2lM/ZCSYbKIYpI05b5akeudAcayGtAaTakWbZIkJUgSFEEkXhIl4iRCEQX+4gMfpGK+/gJ7L8BmPdazngceeGDV6+n3+xweHm78vlAo3Fal405FOA3DeFfODb3deFeADWQP+BvJLNwrsFnvz3zgAx9gd3f3Nee912CzPqhpmiZbW1tvCDRxnPBb/68nePrpYwoFi8FgSpqm9LoexaJFHCVMRwv67Qm7O/mVllenM+HSpTKnh90zHUqaJwO294q0WiM0SaQ/mKEFMoWiyWAwRyBFQmDQ8ShXnBUryzBU6gfdjCl23AcEoihCDn38acrFK1Xay1JeqexQP+giCAK7F4qcnAxwHJ3mkoLbrA9wXIPKVo7G8aZfjSJJ9NtjtnddGifZ4mzbGt6ycd4+HeK4BuLeLsLAJ71+kJm2hTM8zSBVVTpXPkqpsoWYJJTKNr2uhySJ9NcYZpAtaKPBjNFghigJlHZcdFmi050QxymSnFHQNU1DVVVqOy4nx32iMCTwfZrNFvNpwmQ8RdNUNF3F9yMEYHvbJYgTdqouoiSgmxrzWUCyNHhLk0xxIU3ByelMZwGOrSGJApoqc3GnQJqmqJrEcLRgNguAlNNmgzgUSCKFYtleZa75gsGkkfWWqtUcJ0uQ395ykCSRVE8YjeccN0aIkshWyaG1pC1fqOWZ+SHtrsfetkuSpECKLIuUTQNvHtCfzxEEqLgW19sDcqZGfzpnx3UYzBfossKWa3G9O+T+aoGr/QH3bxU56A+oFGxkSSSMI2RN4Efvf5DL7qZZ181xr8Hm5jAMg729Pfb29kiSZNXrOTg44IUXXiCXy63Ax7btW35f76TP5HneXe8dvVviXQM2bxayLOP7/psfuBZxknA6mbD/OnMxtzM/c7etml9zjXHMc889t/Iff+mll97wfL4f8du//U2efPIQgECRMC2N2dQnCmNEBCRRZLykzLaaI6pbOVrtMY6t0a4P2aq6q75Cmqa0myMuXyxx/ZUmCEK2QAoChYKBbWqrnsqoN6Wy5dBpT3BzOq2TISc3euzsF7hx2EEQIoKpjCwpdE5HGbDUByRLZeM0TTm90WP3YpE4TlaAATAZzbEtle0dl9N6BiqCCNPJnGAR0rzRp7ZXIEpTWst+0Vk4OZ369S5OrYL9wrfxFJPT9z1Coqhg21m2IEu0l6BbqeawCwYHr3ZWr1Gq2HTXGvuGqXLwSps0SVE1GbegMOwPsGwTUcjYYO3mGEmSkCSJ7bJNrz1GUbJej6SE9LrTpXCoQioIqx6ULIlIirSykd7eza9KlNlDkazmcGrbeQ6vnzPh7JzOxPOBlN0LNtoH/n+kicjwmc+tpHQUWdogCYiiwH7VxfN8kjil0c7ugyQLnG2jBAl2SjmCRcjQWzCczNE1mcbAI2dqVAs2r5xm17hTdShJBqaqcK3dJ0mg5Fqc9MdIsoAUi+R1jRv9EfeVCxwMRtxXKnA0HHGxUiBKExBTBEngc/sX+Uj51ioY65Gm6TumiyaKIsVicUXSWSwWK4bbjRs3kCRpNddTLBZXWc+70TjtnYz3jKrdnWQYkiiiSBL/24svEd+0gM9mM5544gmCIODxxx9/3UHNe5nZzOdzvvnNb+L7Po899hi5XO4NwW04nPH/+Adf4cWXGphLiffp1EfTZJQlHdafBoRBhK6fPfCZ82Z1y0FGWMqvDNjdL64UTLYqNkdX21Sq5/dgsQjRFGmD0hxFMYOOx333Vdb6LykHr56iaTGVch5p6UGTJhll+b77Kwx7m3bPwSIkWoQYa145lWqW1TRu9NjeyaFqEts7eSZrPZBWfYAuidR2zq/TtFRaZ6rTnREtOU8tHGNf2QfHAUGgULRXQAPQ60zo1IcUXIOd3XwmGKls7kDzeYt0uaOfjD0mownRVERNJaolh+1tF8cxOKvbqaqMIIqoqoppGliWi24YmbJ0GnD1lWNm0ylBEFDesldAA2y4gJa3nI2Bz2jtWahtu0ugAVkW0B789xjFIWa5z/ZjX0NSw4w2XnUo5gx2Sja7ZYd6fbAcyoXWkhqfc3QGXoimyFzeKTDzAhqtEYoqM1zO71TLDjt5h/k0oL/sEeVtDUkQGYznJBKIgsj9tSJXmz0WYYgqy/THM2RVZMu2CIjZcWwWSUTFtoiSBEkWSIh5eKfKZ/evcDvxvc5s3ih0XWd3d5ePfOQjfP/3fz8f/OAHUVWVw8NDvva1r/Hkk09ycHDAfD6/Y7D5k5jZvDs+PW7PQO1Oymg12+bBcolf+foTdKfZwtXtdvnGN75BqVTacLO8VbxdQ7PXi8FgwDe+8Q1yuRyf/OQnVzI8rwc2Bwcd/uE/+gPqx32mno+uq6sFctCfUqvlkNMUb7JgNJxj2xqyfC7sqQgiJOdlypOjPoWiRi6n02uMM4JANyuVQTZUOR8vmE3mFIrnOy1Nk2kc9tjeza+kZ6IoplopIyGiG2uGZ5bK8dU2W1UHZXmtggDhIqTXGkOSUN7KzheuLb7N4z6mLkOyed+LZYeTwx6NGz22thxsRyO/LBsCEARY8ZwDa4dxz2N7J49la6j6JpBs7xaYThYMex6NGz1KBQtZFLCd7DPQdWXpxZMyny+IkxhiFUmSs/s0mHL0aodxx8OQZC7sFVAkgXLFQVUkqtsFxqMFsiyj6zqXruxhmhayLBOGAcfHTabeFH/hk8trK2o0gCSfX2uhaG0MfJ5bUafs/ifXiWQfQRBQZJFIELn8p5+mXE4YDxe0WxMazTHBUuY+TVN0Q14NlhYLFkVTJg0S/CBeqUEHaYKqSFys5mn1Jhy3hpSLNt3xjN2Sg21qHLdH5CyNMIpxFBUvCNBkiftrJa63BlRdi+E0Y7L5YYwki4zmPpIigpAwjwN2iw4/fv9rKc6vF+8msFkPURQpFArcf//9PProozz++OPs7OzgeR79fp/j42NeeOEFms3mbVnM/0nObN5TZbQ7XfTfX6nQn8/5B19/gg9ZFoXp+Jb9mVvFrSb6327U63VefPHFW9ok3Aps/v2/f4n/7X9/CtNU0Q2FxTyk3/Oy2ZjWiHzOYNDyyBdMxks1525nQm3bpd0ZUy05NI77WLae9TuWu+OZF6EwwZtEyEomajnqTylXHBRJoHlWrkoXlEpZr8O2NDqNEY2jPrqdMp+nbFWL9JoTojDGcU0UV2YyWuC6Os3jGe3TIW7BIjYUXNfg5DArC82nPot5wJUHq1x7qcn6duPMkmD3YonG6ZAkTjJV6mW0T4eZf0yaiVPGcYIQBOTDKZ5aJU1TGkc9CmUHWRAwbW2VpU3WfGIgk905PeiCILBVc3EKBofXusxmM9I05f6Hdmkcnzfzt2o56odZSWkxD4njhNOlgClCNtZTrdgoqkxKShInFAoW83lAsbxFozFEEGKiMMKbTph4fiYZk7doNEar+6CbKozmyJJIqWyRpLBXyyFfeRlp55A4Tpl0CxiGwlxb2jZ85glu/PsPI+BQLFjLWSIR01TwZn4mvOnHHB71GI9DalVnZWVQLWebgmmcWXsvlv0fVZPZdi0Wi5DefIEsipRck+vNAVuFbCDTUhSO+iP2Cjm8JEQWBUISZERa0ym7BYeIhFG8YLvo8Nc/+ujtfVmW8W4Fm5tD0zR2dnbY2dnhmWeeWTX7j46O+O53v0sul1uV3HK53Gs22ffKEvrdEO/+T28Zb7ec9ejODltJxO++/DIvyQZ6/o0bknfrvOtxZmP98ssv88gjj3DhwoXXPGzrYDOZLPiH/+ir/NEfvUISJ3iTBZalrSTmm80Rly+V8b2A2dTndKnUfBbNxpD7LlZoLEsoU2+BKApouowoCuxUy0zHKZWaxWK+YDKZMB5NIAoI5mtlHj9iPJpx5b4KncaIOI7xPI9R1+eBB3exTXXlETMZzQgXIRevlGiuNftHgynicuFdD0WRaBz0qNVcdCMr/Zm2llGdUzg97JGzdS5crtBdY28BmQzM9S6WoVLdzuMkPg2lAGuZqqZKnB728CcLdnYL7F8uM1nTF3Ncg9bakOWw53F0tc10PKJY0rl8X43J6FwNWpJFumvOnbqhbKg3F0s2J8d92qcjTg57CAk0j3pMeh7RLCANY2xdpZy3uf++GqVcgUu7ZSoFE02OEaIZUhrgGCLDzhhVgMQPEVPoNkaMtOcRL32XIIiJ44QFGp2ZsGLhLeY6uf/kGdT9FpqlYpsa+9U8tVKO2STgtDFG1WVmszmSJOLkdAxNYa/kkMYJ9caQOE5oj6YYmsJ9u0WOG0NafQ/NUKjmLWoFi2vNAaQppq7QHUzJWTpbjoUoCRiyjGvrmIqCpstULBM/immHE0xT429+/Pte8914s3ivgM16JEmCbdvcd999fOpTn+L7vu/72N3dZTab8cwzz/C1r32NF154gUajscp67qZUzRe/+MWV3uLZf+sq8Wma8sUvfpGdnR0Mw+Czn/0sL7zwwl05963iPfPpvR022ll/5pN5lx/5yEc49Kb83X/7R3zlxWuv6eXc6rx3A2yCIODb3/42vV6Pxx577JaDq3AONk89fcR/+6Xf5fnn6ky8BU4um9zvdT0qWw4I2WBh/VqXcuV8J1Q/6rO3VwBS9rYLXHu5yd6FcwAaj7LG7852jn5ngizLTIYR7/vABSzLolSyqR90OT5sICuZUVkcx9i2xslBB7eoMZ1mYpOGbkCSNaTXQTOJYgatMTtrwAdgGRrNG312L5RWNORKNcdiFtA+GSIiUKnlyOetFXhBlm1NehN294tIywUnX7RoLrOJyXBG+6jH1qhJPppmdaIUimV71VtK4pTGjR7jTuZGWlqWC21H32BBFisWg/4IEpGFl6JIEr63oLbtsLuXZ/dCgcXsHIhLWw5RdP4MqWvK2aK4aTNQqji0m2Nmns9oMIM0pdueMOjNSSKRxUyCRMOfpyQktNsDBv0RghhTr/fQ91vkP/Xy6t4FY4u4EBM5IZORS+yVWegeiipQfPSAafUFZt6UbsfLqNNpBr7XjlukacrFvQoSIv4sZBHEtPpeRiffsqk4JkmQMJwuSNOUkmsgCQLtnkcE5E2dK9tFrrcG5Eyd8cKnNZwgSiKj2ZyUTDnaW/jEQsKNuI9myPydxz97R6DxXgSbm6nPmqaxvb3Nhz70IT7zmc/wkY98BMMwqNfr/M7v/A6f/OQn+epXv7pUsrg7G9wPfvCDNBqN1X/PPffc6ne/9Eu/xC//8i/za7/2a3zrW9+iVqvxwz/8w0wmkzd4xTuPd00Z7XbcOu/kA+h2uzzzzDOr+ZlPCgKj4FvU+2N+57kX+eb1Y/7TDz3IIxdvbRlwN9honufxne98B9u2+fSnP/2Gg5qjkc+//+rLtNsL9naLzKY+/iJE02Q0XcFfhDQaI9533xZXX2oCmc/Lzl5hJYNycjzggfu3uPZyK/v5qM/uhSL1oz6kKbalMp/4KKpMuGxOnxz1uHxfhc7pCNM0SZOUYB7j5BWGvSnd5gJ/HtPrJVy8XGXQW5BbZgVxFLO1k2fQ9wiDmErNpXHYwxvO2b1U4uS4x1bVXWU6pwddart54jSlsWZJMPd8dF1BlaRVaQxge79A47DLsOvh5E00S0cUYG2IiMLRKxwGIqlgsHf8EuNhC+XD7wfO69/bFwo0bvQZL1lwO0sQFmWJJIpBSLlxvYGqKGialikbD2dEYUyrPkAQs3JczlFxXCPT3lqz1c7ljWWvJ4vabmFDI01Wzz933VRormVEpWqO+vEAQRSxbIMwFHAchziOsRyNWVzH+ugrCEJKGEaEnsXCSBATAVkWEVQLT4oRfZUoDSDME+zWUXM98qcP07yWkKQpohRQdDR0zcLQtJVqtKzJKLLETjlHdzTDmwdUSzaN4YS9sktESr09olK0UGSR/iikLaTsFXOkIrQnHtvFHMe9ETtlh+FsATIopsSrcY+KZvJLn/lh5DucH7lTnbF3Mt5ozkYURVzXxXVdrly5wpUrV+j3+/zLf/kvefbZZ6lUKnz+85/nC1/4Aj/xEz9xx0Ary/ItPa/SNOVXfuVX+Nt/+2/z4z/+4wB8+ctfplqt8lu/9Vv8zM/8zB2d743iPbNVeKsZxtnsylNPPcVDDz20UksWBYH/26c+TskxKTsmjanHP/yjJ/kHv/8Nnj1qvu3z3hztdpsnnniC7e1tHn744dcFmuFoxm//L9/iX/6rl2g0shr6yemA2nbGvBqPMudH01TZKTtcfanJ3lrm0FgOdQrLjOfg5TbVmru6F/UbvWxnvlvg9LBPv+uRyxmrxr0kS3iDGaVyliUJooAkysQLkQ984BL+IskW/xRuXG9h2Cmh76/Aqn06xLZ0dvaLNNbsmU8Pe2xvFwgXm1lp+2SIJokUSudZWbpUoz496GBZKoWShayIDNfmYSbDGcQRIimGrcHSWsCYTpZ/LXCqFDAmI7T/8B+wF0uVZIGVBtvaCWlc76KkUCwZKEaCKCorskZtr4C3ZjNQ2yswHS+YDGec3ughCAKD5hBDFtkq21QqDts7eYolC1WVma4x+XJ5k9YauJQrzgpMZVnaKM1Vtl3CMEIQssxrrk4o/uk6gWYhRCYEBr6SIkoJcRgz7ylMlDlTFnipxLxbZiotMyoZTq88hf6xNoa6wJvGzOdCtmlZKkhXijaaJGHICggCsyX13TBVyrZFGMU0+hNyyzLnUXNItWyR0zXCKGEWhlRzDt3pjIuVPH4Uk7NVxuqC5xctiqrOf/8Dn0d9G/IvfxIymzeKUqnEf/lf/pc88sgj/LW/9tf4N//m3/DQQw/xu7/7u2/rfb/66qvs7Oxw+fJl/vJf/stcv57ZcBwcHNBsNvn85z+/OlbTNH7gB36Ar3/963d8vjeKd01m82ZxtuivG2C9XrzZ/IwiSfz1xz7Jr/2Hb7IIIjRN5IVmm1ebPe6rFPnk5V0+df8eiizdMRttfVj0Qx/6ENvb27c8rtOZ8O//8CWOjvvcuNFjsQjI5VSSKNvZd3sexZJNv+chApWCxfFyMa8f99nZLXB6MiBNU0ajGRf3i9y4ljXgu+0JpYpDdznQl8Ypa27D9DoTSlsOo+GUcsmmVR8w6HrsXixxspz72KrmePHpAwoVg8VMyCwK4gRVUvDDrM8jSxKyojAceEgCFEoWgzW6syhAHETkCuYqq9jeL2TDpaLA7sUy9aMe23sFmsuZnnHfQxAFLr+vxuGr5yoFaQpRmNA9HSErIvuHzxH4AU0l/5p7W1cKiC9dY/vPfBbZUDhem6uxczrN4z4pMBlPGfQG5PI2lYKDXTCZTBZ4686dAhs/S5K4sk9YzANESaDXnqyy4OpegX7HI58zUDUZ2zVwbD2jm4tLK4Mlo88wNeaLbPhTEDP5mt1aniROUCo+vfe/RCLFIIl0xxpiJCDm54BI5MnMlRgpgSSBaGQTlCOEgY1lxwSGBEnAuHiM9Mk8yVEB8bRAsWzT7nnsVHKEScLx6RBFEWmPpuRMjUrR5urS4rq8ZXOpWiBO0swkLWcwmMwZz3wu7xbodqc4VQ3ZF4iJGUgzbgRDZCR2NIf//gd+BONtWnO8F8HmTrKx6XRKsVjk0Ucf5dFH3xqJ4uZ49NFH+c3f/E0efPBBWq0Wv/iLv8jjjz++YscBVKvVjb+pVqvcuHHjbZ339eJdAza3Q32GbLfwRmWo2WzGU089hSzLPPbYY6/r7GkoCj/z6U/y6098h9ZwTMUx8RYBLzbatEce/+pb3+XhC9tsKRHb7lvzOz8TFh0MBjz66KPkcrmN3/t+xPMvnvDEHx8wHs84XZZe9vYKXLvWZDhccP9925yeDoiimDCMuHShxNFBhzSFvQvFFRg0G1lGMxnPMRSZRn1IoWgx6HtEYcyoP6VQtDA0heZRnzSFnf3z8k6vPeHyfWVO1rKRkyULbOrNufbiMYIgEkwF9i+VOTnqsb1boHMygBQefGiP03of3w8RRZ/DV0dousrWXpFBZ0axbHN62IU0RVZkant5Bl2P/tKzJU1STg46bO8X8dd6IZARBQ5famK7Boom02tP2LlQpLEEpKg/4iTQ2Q2n7MQ9TrQiAgLVcEhLdhGANIhov3gDvVahup0jjFP67Ql2zmAynLNYLIiikCvv26VzMmI8mDIeTKntF5l5Prv7RXw/QtHkDXWD6l6B0zUB0XzZ2fg59CPCIGLUjzBtbQlES0voiyXqx9mxogiGra+yoJ0LRepH2WZBLYZID36XVM5KdWKiMkMkMRLKQZ4gmRGqEqqWEiUJycgkzocQQaKmTIYqugqxEZN6FlF+QfLQCezMGcxD4rbGwg9pL2eZdmp54iSh0RrRlbLv4/62y3jq059NMVyNy9UCiZByOvC4b7fEq60+l6p5Dtp99C2Z58M2QiogCiLbhsPf+9wPY98Fd933Itjc6VDn3WKjfeELX1j9/4c//GEee+wx7rvvPr785S/z6U9/Gnjtuns7m/k7jXcN2LxZnAHMG4HNWX9me3ubhx566E0/6Jyu8ZOf/Cj/z//wJLN5gKmqFHWD4+4QVzd49rjFYb3NhbzF++tzPnypxn07RQrO67NFFosF3/nOdxBFcQV2aZrS7k44uNHj2RfqvHK1hWPqdLoTJEmkXLLp9jxOToeUSxat9pjTxpD9vSJREDMdzRn0PDRNYbEIqR/32V/2YJIkJY2TTJl3SVWWJDGbNB/NCYMY21TxRguWjsU06uc9nt29PIcvNSlt5RiPF6uyWKc5gHSBJMnoy8Xi5LDLhfsqtJdAA9A+GVGtFdAMhZNrHXRDJ4oijq81cSs6g16fwE8yi4gwonmjx33v3+bwldbGfRMFgeloRm2/sGr8247BdDBn3JtmhIgrFabjcyYZUUgtHHKiZuXEkj9BFmICcfP5qFkCJ6M50yXleftiEdIU318QRxG5fI7JYLPENp1k5bLxssFfrLpUqzlkVWY681cZGmQU5XWR0cp2ns4acy5fsjldbg4kSaS/5jlU2y2u1BwEQWC8vMbUCDB++ABfyYBGSmVGnkyiZ5/PMIFkkkOrTpFECXHkMLfnKLJCsEgIfJXUTRhHEULDxqhkGaYyzzHPzziyriHIFgtcRNHgol6j2RnjBxE723kG0xn7lRwjz2c0XXBpr8jQm+PNfQRFpGgbNEYelW2LZ4Im05pPGgnIZJvCqmrx337mB7AV5a4AxTupIHAnkabpHWuj3SvFZ8uyVq7Hf/7P/3kAms3mRtWl3W6/Jtu5W/GeARtRFBEE4ZYlrTRNOTw85OrVq7c9P3MWJcvkpz79MP/4iacI5iF+FFNyLFRJYjCes12yudGZICpdnnzlBDkFQ1XYKTrkbYOqa6NpMpauMhlPuPrqVQzTIV+o8Dv/3+c4aY4Q0pSrB10kUaBSsJgvQpI0JZfTGY8XePMA29bxvAXD8QLHUXEdi3AeosoS3lJavlzJmE9RFHN83M8MypJssl5WRNyCwWgwYzb1sWwNy9Yp5E3qBz10QyFXMBgP5qRJBjhXHtji4MVMnbnXHlOoOEynAov5nLnnk4QSV+7f5nSpYSYIArPhnELRprUYLifsYeYtSKMYt2AxHk5R5Gx4sFzIMZ3MWMwmeN4CURKp1FxeeeaIUtUlTlImozmFks3pjS4k0DzsU71QRJAEmgfnmQIpCEmC7/lsXyhwetRHUhVmwnl5pi9bbAcZAG8lQ9pKHiWN6PnCytMGIAoiDl89RVYk7nvfLoatcfjyOfjVLpRoHp2fu7Zf3KBx71ws0+4PKZcdNENBt1T63SmT8YxoaVt9FrqpbJAGtnbz56QBATzvvDRX281zejokNULCH7zBcC6gL+tqUZJDtBdIooSUyHhTGd8OSfs5hNTHNxYIgkgUJoRTndgMSeMUbebg12LGUYxY18CekfgpwlgnyocMxT6xrNA1O4i6huJrOLbExPOxJZWxP+fidp4b/T6z2GdrN8fBuItSkhiFPgs5QkollEgmSTN9wz0jx//9Bz6Hq+srbyY4/w4LgvCWgeO9ltmcvec7UX2+Vy6dvu/z4osv8v3f//1cvnyZWq3GV77ylZUIchAEfPWrX+W/++/+u3ty/ncN2NyuC9/NYHM7+mZvFrWcw0988qN8+ZtPIQoCYSoQxQmiICAJAluuzmA+x1z6pgyX/h8vXGuRt3W8iU8cBQTejFRQubKvcfr0dykXM5HMJE7Z28lTPx0y8Ba4rsFoNEdTZHRDYT4PcXOZeq8kSCSRT7wIaY8XCMJSO+tkuBrUbLVGqKoMcUISZ437OM6+jLajMxnPmXoLLl8uZzvuFBazTKk4lzcYD+fUtl1uvNRkZ7/I6XJhHXQmyDoockSwkFEVmcZRj9pegU5zTG3XzYYfyXbvw+GMMIiwLJXu6QhFk6lsu3QaI8q1HO36CJKUSrkAksBoMGE2njGdzpgdzNANla39EmmUsi4r3TkdUCxaG1mO5eo0jnokUUzjoENxK4f7wBY3rh1CGCAAUpowFnWm4lIG3x+SNwRekY3VoGSuaHDwygmiKKIqGv3mGEEUcBwdp2Ax9RZ4Nw19zqbnjX5BFBgNpkRBTK8xQjMV4jhdUbV3LhYJ/IjtnTyiJKAZKvNZQJykpHFKSkqhaJKmGXvNm/iUyw6iKKCoErXLFu2HXwAr+0z9qYsYpwT2FEJIY5EkUvCXpbVYkZnMBIxZiFJImHU1YidEBCTPwjMCFFFGnGrMCjGKqqP0FRI5Jgp9krFInAsQFxJiRWAm+fRHU/wHYrrJmH55TjMdMHAXFAWba9EBuaLJLJhjyirJFFQlAxoZgS0txy//8OfJLxfMJDkz8suUDM4W4TPAuV3g+T8L2Hied9cym5//+Z/nR3/0R7lw4QLtdptf/MVfZDwe85M/+ZMIgsDP/uzP8qUvfYkHHniA/z97fx5k6X2Wd+Of77Offe+9p2cfaTTSbJIlOza2Ae82kg0pjAlQ5Pe+QBL4FSEEqIQEExxXOdT7R6hKOQvhNfmFJARvgMGxwbYsb2B7Fmk00uzTPb2ffT/P/v398XSf6ZFH0kxrlp7BV5WqNN3n9HnO9lzPfd/XfV179uzhox/9KPF4nA996EO35PFfinvn3eN70zr7/f413mKbIZp1bMtl+KnHDqFqKkIRKIognbTo+wHNjsNMMUMqYWK7XrSZ3eoxVkpRbfXQ9YBmu0umkCWVirNc7VAqJKnWe4yNZCIDynKL0VIKx/EJpSRm6bS70ZKmZeqk4iYj+STd5oBadYBQBGYsiggor3ai3RqirJpdO0roMqpOKuUOpbE0Ekm/5yClJJWJMTGWYe58GdPUhhYyg56L7wVs25FndaFOGIYszdeZmIn2Xvr9AYoMsLQEmdzVvvHqQoPpnUUqG7JYKstNYjGd6e0Fqms/9xyfylKTqR1FnK4ztMfpNPr0WwN275tAhCqpVGqt3RbSabZoNqt4gYPruYQyZHwqT3W5xcpslZGJNIm0STJlRfLk9fe+Y7N8qcLoge1k/D4SGHcbQ6KRQF8YzG57mEzGYnw6B0LSbrdQVY1YLI5AMDKRxR14dBp9li5VSMR1lDBgYluewkiKsek87Q1eZWPTeXobhALF0cw1O0GeE1Bb7bBypU5tpc2VCxWW52qU5+vousLKbI1muUOz0qFd79Mod6ittFAUwdzCMnN7T9LXIgm554a0+yo900AOdGSoIIIU9hrRaJ5J0/PxYwGDmEZYL+DHPQI/QOladE03clPvagyMEF3XMO0YTStgEFfxmil8DOJ2DNnT6Dsufh0cyycjY1Rln7hv0hEulqvT9hzyYRLfFiAUbEeSMGIoUqCFCuNGin//zncMiQaiakZfk5IbhoFhGNfMX33fx3VdfN+/pgp6Ke41slm/KL6bRpwLCwv8xE/8BPv27eMDH/gAhmHwN3/zN8zMRJHbv/Zrv8Yv//Iv84//8T/m0UcfZXFxkS9+8Yu3rY0n5Cv5+t9BhGGI53mveJuvfe1rPPjggxSLxZuez9woLpRr/PF3TtHuuSRUjW6nR6PVQQiTQjxOEEpSho6uqcytNNClR7neZ9/MOMurkTVMrdpF1zRiukqrbTM9nmVhsYGuqyRjBo3mgMmxDJoE3w1RBSwvNpAIclmThfkqiWSKQj4RzV28ANPUyGZjqFKwshgZaS7O19cG7yqptEW90oskw5kYjUqXwSA6KWXzkVWKPfAZn8jQqfdQDWU4dwilJJaMVFB2I0pEjKcsNEOl3ehTGEnSqHRJpmP4XkB/rfVTGs/QrXeJp2PUNjgmj01lASK3AS86eRTH01QXG4zPFKmsNPG9gGQ6xqBr4zoeqi7Q4iq9tk3gBKhCRdM1FEVhbFsBTVNYnq8PHQgmZgosrbkhK+0m284doyUsWlr0RZWGzsTB3Sx6Efl4vo+RlKQzaQJPoduyseIGvh/gr+XMqKqCGdfprxlRCiHIjqTRDQ1N1xj0HVwvoLfmKGAljKituUY2hbH0Na/DxPbC0DFbKNFr2ltriY5N5VjZQN7xcYPa4bPInI1uaLhOgNeM4Wej+AHhCvSuihjzIzWgb+KpOq7w8f2AuJOhIrooDozoMRpGHxSIixh9KaOQMt+k4fmgSmJujJ7loaHidgWuHpAJLdrCweirdKWPJTUCQ4CrEiTAtHVCIzJ3jas6oQ9IUKXKtniK333X20nHblxM89KqZ/1UdL2q59vf/jY7d+6kWCze8N+/m+j1enznO9/hLW95yw3fR0rJgw8+yP/8n/+TH/iBH7h9B3eXsGUuFW60jeb7PpcvX+bEiRPs27eP/fv339Irnt0jBX78dY+QSZj0fQ/bD4hpClOjOeqDAaGU2EHA+StlVG+APfA5tHcGXVXZva2EgmD7VIFkzCCRNBktRHOW3TNFxgtpEqbBSDrOynwD3w0or7ZYWm4yOR05ClQqXfKFNbeAeo98MYlpaYwUk9hth97a3sfifJ2p6TySKOCs13XYtj1P6PgsXaljWBrm2l5Es94jFjOYnsmxOl+n17Vx7YBMPkEQhPR6PTRFo5DNDd+HfsfG7ruMTWfptWxCP6Bd7wKSbCFJImXRrnYY9Bwa5TZj2yL7n/HpHCtzVVbmqiTTFqlsDN3S6LcH0V7LbJVYzCBXSmHFdAIvRFVUCBT8jmTPA9PE4hZBGNDr9egPXiqYUgAAiVtJREFUepSXKsyeWSKRMBiZyEXKr9mrtvthOoMvVDrCZGIqS+yRB0i96XEWg4hoXM+l3+9h6TFaK3269S7FkSQTM9c6HIxuyw2JBmB8pkBjtUN5vsHSpQqxmI7bdSiWkkxsyzOxLU8ybaGsGZ6KDe5uZkxndQOZjE/nh0QjgcEGO6DCriRXDl3EFgoECoEX4rXiuKkATVMjaTlJBiUNpZVA2CoDX6HvO3hegNqKUVGi7X8NgyUkqpci6aZoOwF24KN5Gi0vAFWSlQl6pkfgSVTHwNUDcjJGU3URroaXUEkm4gQxDd8VuLpP2AwZ4GI7PnGh49kSPNBClR3JDP/Pu995U0QD31v16Lr+ilXPvVTZbHYJ9XbObO427p13j+jDefnyZebm5njd617H1NTUbXmc3aU8P/66h0nEDJJxg7bjMnA9JgsZYjGNeruLJlwadsjk+AiXFut4XsjFuSqqEFyarZKwdJYXW/h+QL3a5eJsFd8LWFxq4ocSw9BYKbcZn4xO0guL9aGvWa02YHo6R8zUMFSFkXyShdkanfYAhCAeN0BK5q/UmJzORcKDQorqUgtzLVqg1egTixlYlo6UkkTCoNsYYKz93u47dJo9UFympvP0ai5LszUmt1+1kkGC03FIZ6+eRCIScsgXEzhrlVMYhKzMVtm2u0R1+erGfKvawe47TG7L09/Qeuo0+sRiemTtsuEaY3wmz5UzK8Qsk537pkilUszsHqffcbBtm8W5FS6fnUfVAlLrcvRmk/yp77AsUoQIluZq2KfPUezXyGQT2E503x37Jhm0vavPa+Ay+8Ii+D5jU1nGpnM0N2TAqKpCs35VcabqCvVyB8/xqS63aFTazJ5dobnaJnQ8JqazEAaMTWaZmM4xuS1PaSTFyHiG0kgKGUoyuTiZXJxtO4oIBPlCksy0xfzhiyiFEJkTqDKN6KYJsyGapuDZAU5NoyUG+L6kLn06zThCV5CA0rTopzxkKEkQR8Z1QkXS8XxqUsXuG2hNCz/UUU1BwrOoSZvAlySDOH3NJR1YNFUPxVFQDRURCGw3QENFsVQSxFGSKlqoEvcU+i2H0PURfsiMmeL/efc7SFqvTd6sKAqapg1bbYZhoGlRZWvbNo7jDLsf69XQVsZmlGhwe9Vodxtbpo0mpXxFC+5+v883vvENTNPk8ccff9n9mVuJy5UG//Xpv6W8XCOXzyN9STBwqNdajBfzxONxZpcaTORSlGtdCqk49UaPkUyC1UqHbWORKGCslKa8GiUi5pMxKrUuI8UU9VqXMAiZnlxPu4RiPkat0mBybBRFRF5nAFPT+WFLJpOLM+i7OLZHoZAklTCYuxBd6ccSBrqmDJ2N86UkMVMfOi1ncgkc26PV7OI4Djv3jIMvI8v/NYxtK1BdaZFOW9RX2qDAxPYiS3O1aDYymWXlSi362drf1XSVeNzEtDTazT7OWnjb+HSB5dkKEztLrF5pEAQhyWwMu2vjuz6F8SyO40cqLt/Hta9e8U/tHqFd79Gu95ASwjAgO5Jg5XKFIAyY1F3kmYvEQo+aenXGNOq3WVHTuFOTGNMFcoUCdteh37k66B+dybO6wSpnYmeJ8kKdwlgGRVPQDJ35C1eXQCd3FlncEGI2sbPI0obdpPxomvra8mwsYUZGmWszpontxaH0GQHpfJJWo0eQ8Oi/t0FfWWvbSYHsxnEUn7jqo2UEdlXFSQTohobfk3iehowLpCtJ91V6ORsQqLaGi4KvS4QnEIHBQA/QQhVN6PQCj1hXIZYyaIcDYtKgbwXQFQQxgfRBVzScMCR0IWbpdGyPnBbHdQM0oUWVkBrZN0k3ZIcV4wNjeWKmSbFYpFgsUigUXnEP7mYxGAz47ne/Sy6XY8+ePde02yAiqfX/thJqtRrnz58f7rPcCBzHoVQqsbi4yMTE9e2z7mVsGbIBXjaJc30+o+s6U1NT7Nx5Y4FLtwLPz87zn77wNRLJPE67S6PTZ6JQxPUk/a7D9EiGwA/x3JB6q0fc0On1HDIxi3qzx0QpzfJKm8nRDItLDSxTJ6brNFt9JkYzrCw30TWVbZM5XNunVm7heX1CL5L0Tkxkh3sYU9N5FtYIZ2QkhamrLM7Wri5qXoluF08aaKpCGEoMVUGGksHAxRm4SAmqHjIYOExPl6gstNA0lfxIahgwJhTBtp0lFi+V8d2rV5ATO4sgJUuXrm70j28vUl5sUBrLsLJ28k1kYphxA8/1sTtXd3eyxRQhoKmC+oY9FE1Xmd47xuUXloY/kxJKY9EJfHx7kZX5Opqmggxx+l7UpnjhNFP9VYRQqGtJ+oqBQkgycGgpMaSmER54iKldo7TrXdKFJPVyh3gqds3jx5ImnusPZze6pSMEmDGDVDaOFIJ+z6FVjYQCyWyMftcZSpxHpnLR7tH667RGzBAF+BlJk8Ha0ubYtjzLCw2clEf3jRVkIXJvJgTdT9FUotvpoYrRVrDza/+WOq6rEcai90dratTUAenAQAkDHA2UpIpvh0hHg7SC8ARuF4I4KH2BpwnQBSnHpK/5KB1JKCSpRIxuzyUW0/E9iappNPo2adOi7jqkVQPfk+i6giIVtFBwaHSc337XWyN1ZrNJpVKhWq0yGAzI5XJD8nktw+5er8exY8cYGRlh3759CCGG8511N5FXm/XcLZTLZebm5njsscdu+D71ep3t27fTarW+ZxH8fsCWJpuN+zMPPvggjUYDy7LYs2fPHTumbrfLn3/5q3xntUtv4BOPZSgm43hegG17NFsDxrNRZZOPWwggYUYqsjAI8H2JhsLAdsmmYvT7DpahI6TEdwN0TWX+cg0pJRMTWebnqgwGfXbtmKC82kYIwchoitXlVuQeMJ0DP6C60iaVjtFu9PDcEKHA2ER2uNg5tS3PoDOgvuYrlsklsAcu9VoLKUP27Z+mXevTXbPbVxSFkcksqwsNRsYzrF6pkxtJMeg62Gtmk+Pb8oRBQHW1RbBBgbV93xirV+rDEyqsZaDsKDB35lq/uckdRWQgo72aNYzNFFi5VKEwnsELJO16j4mZ4jWkFk9bjG4rcOn5hWg20u1gnX0RlZCB0FFlyHjQQSVgzigN72c+/ABeLDEkEqEKpnaP4Toe1eUWgR8yvqPI8uWNVUuJpUuV7/l3LGWSysZJZhP0eg5236PbHpDMxmmtRTIn0jEGPXfY5pnYUWRprYISiiCejlFV2yy9sY5laejeAGmEBH0TOyEjMYAUxMIUHd0hbxvIhEO3B44WzXCoK3RiHoqqonkqrqeQEhpqLESi0td8fCcEW0UmFWRPIg0NqYHaEPTjIbqvgBopL71egDQECQy6vouhaOio9KVHUpiEgURVFLRAIALBG7ZN8xtvf9N156z9fp9qtUq1WqVer2NZFqVSiWKxSC6Xu2ES6Ha7HDt2jPHxcfbs2fOyM911kcG6rHqrVD3rLstHjhy54ftcuXKFAwcO4HneLa0Otwq2FNm4rjv8sKxbvtTrdY4cOUImk+GFF15AURQeeOCBO3ZMKysrnDx5kniuwN+WB/heQK0xQPqSYjJOGIbMrbXSGq0+Jiog8Z0ATVGQQYjnBqTjJrV6j+mJqGWWScfwHB974DI9mWf+Sh1FQCEf59LFZQqFHJl0jFplzWWglEATgnq5S6GQGNrVFEdSNGuRM7FQYGIqB0HI0lyNeMJE01XazX70RRQeQlGZGM2zutAgljAxLH14olQUwczuES6/sDx8/slMDKEKYpZOZbGBDCXZkRSO7THo2oxM5Cgv1IklTGJJa1gxjM/kI2nyTIF6tYtne1GrabkZ7d5M54fLqoHjDfNzFE1hcs8olfkG9ob9luJEhupig9xoJsqUOX2Z6fMnWNSyw9vEQwcfhWLYx1Z06loKa9coZSWNrkWKssmdI8MKTDc1xneUcGyP6kqknEtkYgx6DuFabMBL/50bSUWeaGvfmokdRRq1LrGEiW5qxNMxnMG6PF8iVAXfC5BEtjRlvcnZh5cJ1Uj1pzsKlqvQz3hRVIEvUWyLrh69HqqnotkaoeUSmCEJJ0ZVGSCEQly18FwF34gIKmhKVCCW0Og7Pk4sJKmY2H6Ir0r0tkrX9EnrFo4bEiARjkBaAtPX6AUuSd3EcQKEoaC5CjFdw3MkigRDKLxj727+8ZtvzLPL933q9fqQfHzfJ5/PD6sey7Kue79Op8OxY8eYnp5m586dN2yfsrHquR7xbHahdDNYXFykWq1y8ODBG77Piy++yA/+4A/SbrfvemV2O7Al6XOjv9kb3vCG4XwmitV9ZXn0rcTi4uIwTOjvPXqEA7bLf/vqcSzLRUel2u0RV3UmCilUoZBNxWj3HFRfYsZ0Bl2XmKUT+CE9xyOTiTG/1GBqKsfiQoN8LlKDzS/WmVqzn6nWe6TSOp4X0OnaTE3nCNyAeqVLKmliD1wWF1wmtuVZulKnWu5QHE3RqPYoFpO0612SqWh43u85WHGTeMpgdalGMh1nYjxPd026O+g5BH5IYTRNs9KlOJri8guLTOwosXi5ikDQbQ0YncpCGA4dA5rlDlbCYHJHifJ8DaRk0I2EAxM7i8hQsnwxqkpW52okMjGykzl6zd5w96YyX8ewdCZ2lpjd0D4L/AC7NUBTBCPTOcrzDRRNwVmrrhqrEZlt25ZlcP7aj28mHLCsZlhSoxbENruMXTpAuw+u4+LbHlcuLRK4Ek2LUjT77QHVpSaqrjIyniaZT1BZatFZk4WnsvGhzQ2sxQSsncNUVaHV6DHo2gy6NtlSKlqiXes8TuwssngxqpA0XaW/o8aVA9VoPqJq+J0A2xE0LZ9kWRAmQmRPx82G4IHqKCi6SSvmooQqxXacSqyLrmvEhEmvJ3FUHz1QCdtgxySmqtPtC4RpkPc0On0XNxGQ8izaCY80Fr2eT6BKMmqMrumSCHR6eCR1i8HAI22YDLo+ccNgMPDQhYKFwo8deIiffP2hG/7+aJrGyMgIIyMjSCnpdrtUq1WWlpY4c+YMyWRySDyZTAYhBK1Wi+PHj7N9+3Z27Nhxw48FV3da1gfzt2qhdDPYjC9at9slkUjcNm+yu40tRzavtD+jqiq2bb/CvW8NwjDk3LlzLC4ucvDgQU6cOEEYhuQTMf6vH3yMP/r6SRbKLdIJi4HtAQIZhlTqXbaN5KKTb9/DyKk06n3SKZNOa4CqCFJJk8WVFhOTWZYWm5SKKZr1HguLdaamc9QqHVxnwPZtRVYWGlSWW1imhjPwCIOQQjFFrdphaaExJByn7zE9nWNxtobv+fTaNuPb8ixfqdNudglCl5ndIwwaLitXoiokU0jSqnVxHY9eRzC1o8Dc2aiiWbpcYXxbgcpii3QuTn2lie8G1wgChIB2tUNpPDv8mQwlTs9B11V0S8dbG/Z3W30SaYtcMcmgayOD6GxdnMgy+/wCpTXTy15rwOSOEktrRNVt9ihN54mnLObOXK22hCJoqjHaRppxu46vaGgiZFnduNQracWzNLqCZNIkv2sMzVC5dHqRAB/btkkVLK5cXELTNDSp4XkBl04tgIRYyqI0mcP3AvIjKVr1HoXxDOX1qGxgdKbA0uzVdpthGhBGJBVLmdfMcbxHNZZSNaQSHb/sgueq+FaIbmp0vACzYhGOR24Eqq3ioRCqAYamEuvoLGgOZttCExI7IXDUABGC7uu0Yx6mqmG4Kk3NxfI0Kr6Hp0tKXopu6GF2NDAU4lInoRo0Og5xoaOZKmYvRDUUVBQCB+K6gRf4xNAwpMr//feO8M4Dezf9nRIiyudJpVLs2LED13Wp1WpUq1VOnDgRuVuk0zQaDXbs2HHTRHM9bGyhvbTq2ehEcjvabZtRo93PsmfYQmSzbsl//vx5HnzwwevKml9LWueNwvM8nn32WQaDAU888QSxtd2BIAjQdZ2kZfCzbznK//z6SebLLYQrMHUdz/EZKaWYLzfIJWN4XoDb9ylmE6hAZjxH6IWoqkI+EyBD2LG9SOAGpCZz2F2XerlDLhvj7AsV5mWddNKgXu2iKIJMLk6r0afdsckXk9SrXVqNPjv3jjB3ZpVuo0dxNE1rLcBseaFOKm+wdKUTRRvXBqQyMey+y6Dn4K9VNP2ug6krzJ1buYZMVq7UmNpZolXtDrNoli5XmNhZpLbSwjR1mpU2nUaP8R0lVhcaWJZOv9Vn0HVIZmMkMzEaq22mdpZYXCOQ7EgaGUoUVWHlcnSirszX0XSN6b2jrGzYnwEIvIArLy4xPlOkUe1i9x3GtxdZ/M5ZlFCyoqZQZcC412FUbbOqpZEIpv0mV7YfBgF2z6FT69JrDyiOZUmkLFrNHr4X4KgdPNdjMBigWuDYHpqu0e8M6LVMamsZNIomUICx6RyKpkTqScfDjBk4A5fSZC6Ksl5Dtphkea6ORFI74rM81YrcHeoGZk6l6fuEZvQ6yD4oWPSLkrStE8Ono4ZgQuAGqA2FStqBUCFUFAa6Bu0QU1MxYiZdw0d1BWao08BB8wRCUxFWSN62qCg2qiciayQh0QeCZWmTVgxsJWTQcUnETdq2Tc6M4zoeoSowQpWEpvHLP/QGHt85fUu/Z4ZhMD4+zvj4OGEYsrCwwLlz5zAMg0uXLlGr1SgWi5RKpVtytf9qVc/6eeVWVT2bIZvvVzZ3ELZt89hjj5HNZq/7+82mdd4o1hM1E4kEr3/964dDunUVzDoMTeWnfuAIn/rbU5yfr9HrOvheQC5usW0yz+JKk4xloSQEjVafTDrGykKdYi5JrdYlGTPwHR/HCRgpJFhYaTM2msZ1fZaXW2TzJq7r0e1DrpCkUe/BBl8zJRtnZnuBhUtVLjf7UYUzV6O62qYwkqLd6NFqdQmlywMPTbN0MZpRNP0wmrEsNfAcD0GMfCHO4towfGm2ysSOSOJbGElRvlLDMHXShUTkvAysXGkwtSOa+axj+XKFwngWTRWsrqmwus0BQrHZvn+CuRcXh7dtlttYcYORyTzN1auKsCAM6Na6xOIGmXxi2NpybZcwCFm6VEYzNGb2jbF67CzK5UvD+074HebXqpqs2yVtSsoPPQqxq/sKVsKk0+jRXG3RXG0xsWuEQdehsG+SbsfGShjMX1ghCAOcnkNuLMnC5ZWo6tE0xmZKQ184iEQD1TWDUkVVEKEkm4+hGxqxhInnB4xuy/Li3hq1UQctVAAFJWFgdyRKKgQpifk6HSfEMzx0NDodF1dCSlPpCQe9rtJKhGhoaK4gFAqBIRCqiuxE2/xaAGgaTcvFClQ0Q6cbeMSaCu2Uj+4qGLpG3/cxbIGXVMl4BrYaorkCM2bScRwKRoLACTDRUH1BzorxL97zJvaOXRVc3A7U6/Whie7ExASDwWA457l06RKGYQzbbfl8/pYkdr606tn4362oejabZXOr4gW2IrYM2Qgh2L9//ysua73W1MxXQqVS4dlnn2V6epq9e/dec3VxvcdVFMHff/0jfDF2nr89cwU9ZtFqDTCEQjGXRAklphbFGzebA4qlFNVyh1IxRbXSIZW0kHhU6j1GRtKsrEaEU15u0u74pFOCZtPGdS0y2RhhEJLLJUjFTZau1GmbGtlCgnq5w9KVyN9saa5GZbWNZoQUihZ2S7J0sc7kjhKLlysEfkBlucnYtgJChqxeifzRNlY0S5er7HhgjKVLFVzbw7U9dFNjZDpHdalJcSTJlTMrJDIx4iNpGuVIMacKSX2lFSnL1ggnkbZYOr9MrhgJCtbdD9K5BHMvLpIdSaOoCo3VNuMzRRYvXHVeHp0pYloaV85eVbMFXkC73Eaev8CU16CipUiEDgvqVZloU4lhKj5+OsPEVIFe1yaWMK+pmBLZOKtXagReQGM1MhBVgG27xhBC0Gn31vaEXGzbRtEU5i4uRRb6mka2mBpm6kAkZ17a4FBdms6xVG2w+KhNLx8S2NFn2mio1HMBvhZi1RTSlkodn9CIPv96W6GtB4SKoK0LjCWdfjLEskxinkZfC5EGBH0f1VYJUyq+HaAHCkpcIz8wsB0PLx4SGyjYSYhJDcfzcZUQy1UIkwpKV9LXfWJSJwhDVB9SoQmuRJUKaggTqST/5kd/mGLq1vh0vRzK5TKnTp3ioYceGsYXx2IxpqenmZ6eJggCGo0G1WqVs2fP4jjONSKD2E26FlwP12u3rRPPZqueV8vduh5upS/aVsSWIRu4sQC1W91G2yivfuihh667TKWq6suS4NsP7SGXjPHXx8+jmwqmouG6PiFQb3TJJ+MU8nEMVWX7TJFyuU1xJEm13CWdtJBSUmv2KI2kWFlpMTqWQVUVYpZGLivptfrUazUMRaW+2iSVjpPJx2jVB7RbksJomtpqm6UrdUYm0zSqdZxeQMrKIBI+g67D4uXqkFBUTUGEIUJE0myIKprJHSUWLkUhZlfOLJMtpugLgd13oq35xSYze0e4fDoa5vdaAwY9h4kdJWQYsrwmU16ZqzK+o0Sz0kYR4Aw8nEEzUn5tLyKEYPF8RCDNNaLavn+SxQvXSqRlGLJ4boXJnSUqi01cx2NiZ4mFExdQ3YAFJYMZ+GSCPramDaMGJsI2S06asNpg0fHRTR3TUJnYUaJebmP3HBLpGL3mVXeAkan8sM0HMLFrhIbTZvvucVRdRdEFi7MVuoM+tj1ATwrsgYumaVgxk3q5e/Vvbcsz165x7s0engF5x6Cr2Zg1jV5eGXrF4Ss0AhXdkzjJgKwfo6K7KJqGrgiMlqCZCVGFTnxV0LU8AkugDEA4Cl5MoAeQFAb9ZEjY9alLUBIa8Z6CY0iSHQXH9UknLBRH4IYBYUti6DquF0bHogvsQYChqigK4En2j4/wW+//QUzj9p4eVlZWOH36NA8//DAjIyPXvY2qqkNikVLS6/WoVqusrq5y9uxZ4vE4pVKJQqFANpt9zXOXl2u3rRPQjVY9m82y+T7ZbBHc6somCAJOnz5NrVZ7xXiCV4uGfmz3FIVkjM9+6wXarQFCCAxTZXQ0TbncJhuPYdsOg55LLh2jVukyVkrh2T6JXBwRgOt6bJvMUV3tUCqkWF1q0gXGxwoMejUCKbHigkq5gRXTScYtBr1IKj46kcVzXRYuLVMazeL1onCvZDpGMhuj2xywNFtjZu8YjZUmy2tD7YntpeGAe+FShV0PjjN3ZpkwCKmvtkikY2RLKdqNPsVSksvPLzI6U6C20sJ3g0gOHIbIIETTo3A0gJXZKhPbC0MvMFhLrnQ8CCWJTJze2n5PLGmyfHEFVVUY215kZbZKLGHSrnQI/IDF8yuYcYOZB8dYuLCK2+2yfi1bCrtcVvMoYcikbOIKlYay9ts11WJpMjsUHAghmHlwAs8NiKUsBh2bTCnF0uUNcdG5BCtzUZTB+u9b9R5ISTadZHSmSLvVwTRUbMdFtXykL4mlDRShUE7bvHjEI1CjZNKGHZBumLTzElVREXpIqmfQykukBM9UKXUtyjEn2s1yA7SeQl0PUaRCKjRp6i4iUCjaFrYIsBMhZqjgdUPapkfc0RgAiqWSdjSqikMak17ooyU0bDtgQEDGMPEI8KTEECqOHqJLgaGpqFIgPHjzvp380jufuO1zg3VF2sGDB2/YXFMIQTKZJJlMsn37djzPo16vU6lUOHXqFGEYUigUhuRkvMYoanh5kcHG6mf92DZWPZslm++30bYIbuXMxrZtTpw4AcDrX//6l9X8w42R3M6xAj/zw0f5468+S7PZx7UDVKBUSEIoUQSEUqfZGZAvJlmtdCjmk6yutkkmTJy+R6Pep5hPsLzUZGw8Q2WlzfJKi6mZyO5E1UxmdmYoLzfpD1wMSyKUgMUrXXQdhNRo11wmt0cttW57gBU3KI5nMHSFuTPLFEfT6KaO53gszVYYncrTrHfJZuNcen6B3Eg6EhF0bXrtAVbSZHpnkbk1efLqXI10IQGKIJmKsbTW+krlE2h6nEalzeh0noXzqwhFMLmrxNLlCslsgnalgzNw0QyNyV0jQ1POWjOaBw06AwqTORIpiysb1Ge+F1CZr9HvdhmdSNFfXiAd2iwqUfssFAqLIs1E0CIhbXL0WLZMsuPZaxZDNUOlvFCPTEGB3EiaTDGJrqs0VjsEQUA8adJtXI0U0A0tsjMg8oBrVjp016qiVD5Js9rBdfp4vsfg8RiXdwUIBEIKhCNRugrluGR0YNLQB1hNlWrGA1cgQ0msqbCakygtBVORoCp0jEg2mw8sGsJDszTiUqPR93BFSMmPJMpuQpJTLPoiiGZ6jk4NlxQGfigRikD3FQaKT1Y16QxcTE1DDQU2AfFQQxWCwA+xNJ0PPnGA9z9x4NW/PK8R62KAQ4cOkc/nX/0OLwNd1xkdHWV0dBQpJe12m2q1ypUrVzh9+jSZTGZIPKlU6raJDF5a9Qgh8H3/ph+v2+1+n2y2Cm5VZdNsNjlx4gTFYpH9+/e/6hXIq1U26yik4vx/3v4Yn/7G81yer0WhYEhs12PQdxgvpJFpSb3eJVdMUK/1yBUSNGs9EgkTxRFU6z1GxzOsLLcYHUtTLXdZWmoyOZNnZaGJbujs2TdOs9Kl17URoUu/50T5O1mTXqPP7AWPqZkitdU2uUKCbrOHsAwIJdXlFulCAsPU6LUHOAOXfD4xNKFslNvEUxa5Ugp74EUk9cISE7tGohO3hHatx+Su0jUuAp16D0VV2Ll/ggvPXUEQnUwXL5QpTeWjiIC1x/Bdn8ULq8w8OEGn3r3mNbRiBlfOLDO+o0S70aPX7JMdTTL7wgKGadD0Y6SEJB306akGjog+wuNBm6U18pGGgZVPk0iaMJqhtrZoWprKD6sciJYsZ59fAEDVVLY/MI7r+oxM5ek0+2RLKZY3OB2Mbi+ydPFqFWTFTdRGHyOhsPR4nFrOR7dDPEti2oKB5xNaKkII6viYqxr9fFTx+LaP1Vawsyq+F6ApgsCVWEKQyBokXJ2a6hL6EqMT0jN8PFVieSptGRAmVEqBRbdjoyLIxixquGQVk17gI+2QuKHjC4nlqwx8n5xu4gwCdF3gOxLFEIgQCqbF//cdb+DI7htPuN0srly5wsWLFzl8+DC5XO6W/V0hBJlMhkwmw65du3AcZygymJ2dHbbjSqUS+Xz+lmzov1zV0+v1Iid1TcN13RteKO33+99vo90p3MjMZv1KYrNXKUtLS5w+fZo9e/YwMzNzw9EGN+oyaxoaP/HWQ/zV8fMcf3GewA1JrLk0L1db5FJRJo70AoqFBLoiSE7n8WwfLW0Nt8+37SgSOD7bZnIETkCvYzMxkWbhch1VUygUEywvdgDJjj2T1FbaeE7I6LYkK3M1KuUypqmzcGkVIQU9zWZse4GV2RrtWo9YymRmzyjz51dp+iHxtEWulKZRadPv2MSTJsWRJPPnospl6WKZ4mSWbmtAvpRi4Vw0Y5nYWaKyGMUljM0UuPjsFUqTefodm35ngKoqSD9gdaEWVTOXq5EoYUeJuecXQMD4zhEaq21S+ThLF1ejKIJLFRRNYWxXnssvLmBaJoZuQLNJ1m1zWeTQw5Ap2WAgNJriamUqJ6fIj+e48mJUjSVzcYpTedq1HpLIaDqWsqguXVXUKZrCypUqg7XWn2EZ9Fo9iqMZdEtH1RU8LyBdSDDoORTGsqzM1RgkJGcel3hF8FyQvkamo9CKh4RW5NtleAKvGzBIqsRdDcuFQDWxcxJFEaRclV7gEsZV2iGkliUyIyCQxGxBkFLx/JCsNHDNiMRiTUkj4RFogmyo05QBVk/BswJMW2AYJl4nIAwCEnGLjuOiSIFQBEEAcU1HC2AileJffODNjBc3Hzx4o7h8+TKzs7NDR5DbCdM0mZycZHJykjAMh/5t58+fv6X+betYJxHHcTh16hQTExPDOdONLpT2ej1GR0df87FsVWwpsnk1rF+NbEbpIaXk3LlzzM/Pc/jw4ZsKYdpMRfW2I3uYKqT4/LfO4g48dEMlUUzRaQ/IZGLUal0sP4qednoulqVjd90oHlgIyq0mExMZZi9UKBST9LoOjVqXyR0F5i9VuHxpmcJIArsTUq/0GN9WoFHtkEokyR5IMnt2GaftYMYV+r0B/b6kf37A9I4RvIGPEJLFi2VKE1lWr9Tpt20c3WNspoCQktUrNUI/ZGLXCMuXy8gQqktNpnaNMNiQ+bJ0qUK6kCA3kmbudCRxri5G7gDjOyI3gZW1Vtbi+RUyxRSZYoqFc2ttMgnLF8tkSyksS4+qyDAEJEKTXHxujlgsxtTucRqrLbIvnGNBRBWMh8K8SDMetkkRkhEDVo0chf3bI9Jaw6BnU12o01kLesuNZDCSJosXrlY5pYncNS234mT2Gn+00nSeyprcWzc1uq0+3Z0aZx4JwFQgDNF1lbSt0U5KMq6gm/BJejqdICRMhYggJHQCGq7E8j3kmI5aC2nqEtVQwYdET2GQVegGHhnHwDA0+l6A1pf0YpHha7IncNIKmlRISpWeHqJ3JG5MkEBjgI8SSKSmkDJ0WgOHnGkxcDwMTcOQCgSSR7eP8asfeDO6fntPA1JKLl26xPz8PEePHr3jJpOKopDP58nn8+zbt+8a/7bz589v2r/tpej3+xw7dozR0dFrFK03ulD6fYHAFsLGYKWbIZuNi5qvf/3rb/oNvdE22kvx4MwYpUyKP3n6OTqtAYOeS7B2pTNaSjHoR20S1dTw/AAjphO4AU4QkCskWFpqMbmtwOKVGplsHE1TuXK5jBmXuK6K3YfpnSVCzyfwAoqF1HBnZnLHCKtrrbx8IY+UAd12j3q1ClLSb7goisbqfJ3JnaW1+0kUog339UTMpYtlChNZ7L5DImUxf3YZocDkrhEW19pqyUyc+TPLTO4aZfFSVJm4toeQkVw5no7Tb0dzDhmGrFwuM7KtQLPSwe46qIYCSK6cWSKZS5DKJ7lyfhHVBVO3EDJSsKWFi9Ftk1JidERkYTQVtlgQV6+S006HRL+Fl0/SrkYtutFtxaECrt8ekCmmmH12HqEK8iNpMsUU/a6DlTCxew7Fyfw1RDO+o8TyBul0YVueb8ZqrE6C2ZN4igQ7RO8JGrnIF89GkpuHVinAkyEEUJAx6sIhjAkGCsQWAjxNgilQAzA9DTcjUIQg2YGm7qMLMOohgSpJSgVVaLTTIcKRSDdgkFBJ9BX6cYnlKnQDl6xl0fM8EkKn7/uUjBihJ0koOvigKwo/8tgDfOgHD9/0Z/pmIaXkwoULLC0t8eijj26JmUQ8Hmfbtm1s27btGv+206dP37B/20sxGAyGDtUvXZ3YOOtZr3Cut1C6tLR0S3aItiq2FNm8Wktrvfy8mRN/r9fj+PHjxONxnnjiCXRdv+njupk22ktRzCb4h+9+jD/72vOcvVQml4vTbPYxVQ1dU2m0ekyMZgj8gNAL8cPIQr/bcyiNpllYaDA1U2B1qUk8rqKZPslEmumpNK1al4VLFSa35VldbCAQUc7K5SorV+qUxrM0a118L2B0Iks2m2D5cpXAD0kVEnTqHdrtPv3TfWb2juL2/OFJtjSVp13t4Aw8+h2bZNoa5rPIEBYvlilOZIklTebXhvmLF1ejfBrbI5NLDE/wuqkxsXuU5mrksuwMXJYvldFNnYndI4R+MJROd+o9yotVCtMpErEU1bVqQlEVDM/nisggpGQsbKMRsqJce5WcwuXKxQoy55MdSZMfy17TLrMSFo217B4ZSJrVLp7j06lHooDU2jxrcmeJIJQErk+3fbWSM3ek+T8TdbrptatWQydWdulbgkFSQQQhIoR4R9AtGqgtD12HuK9Si7mgCjRVIecZ1LIOQhGMeBrdvkM77qF7CnoTmnGBYeiYzRAnqaKpCrIjaageqZ6OP/CJxQ20gULXdckqBn4YktLjtFs2KUPHDwOMEAIlMv0khKxl8YvveZwje2+tI8D1IKXk7NmzlMtlHn300S151X49/7ZKpfKK/m0vxXrmTqlU+h6ieSnWieelC6Vf+9rXOHHiBD/4gz94e57oFsCWcn1eT+J7JXzpS1/iscceu6FS/JUWNW8Gzz//PKZpbiraYL1nGwQB33x+jm+evITbD4nrGr7jYQ98Oo0BI/kklXKbTMqi0xyQTli0Gj1GR9MszddJpTWWZqtksmly2ST1SofimluAa3uMTeWoLrYIgpDRySzV5RaxhEG+kKBd60YCACGY2FYYEkoibaHpAknA8uUKRkJFFSqeHaJrOqlcglwxSWWxjt11IlfpnZFQIAwlUztKVBfr5EazrGwYpE/tHom2/i+Wh6aVuqVTmswy6NjUNzgHTO4apV3rkMjEWL5cod/vU5jKMKi6CCHIjmawEiaKKlg6cRHl/HkANAKSYeQKncSjrCYpyj5LIk24dw8kkxiWERlgtvpkiimS+SRGTGf+7ArBmovz5J5RFs9fbblN7BkdKuwAxnaMsDJXRTM1WrtMXtwvCYSEtYFvpqfQMAJyrko7JdEdUHzBwAAkKCHE+6DqGjXNQXEkcTSaoYeiKGQDna70CRTI+hqe69NNErk329DTBYZQUAcCx5DkNAs7DAnCkJiv0JE+Rd2iGbgkfJW+GpARBgM/ch0XQUhMN5C+ZKaQ5jd/4ofJpl/7IuSrQUrJiy++SK1W49FHH70ly5d3Ghv926rVKkKIa0LidF3Htm2++93vUigUeOCBBzZ1jvnWt77F+9//fj72sY/xC7/wC/etXc09RzZPP/00Bw8efEUly40sat4MXnjhBVRVZd++fTd1v42afIgqt7nVBn/+zGn6bYfACTEUBSWEbscmZuosLzYZG0lRXm4zUkqxstAgmRSsLrXZNjNCtzFAhpJCKUV5sUkmG8f3fXqtAcXRNO7AI5WyEALqyy0GXQcrbhBPm0P7/4mZAsuzVUan8vTafRJJi5XZKqEMESoYcZXacpPiRJpezWF8e4nKlTrrGc6lqRympbGwQZ48tqNEo9yhMJZh8Xz088J4liCIFlPThQS1xQZCCMZ3jlBfaVEYz7C4JjQIwxAlHsmJO8uDodwYYHxniX57QCJlUfn0FwhQmAxbLIqrdjQZaZPCxVN1lo+8ERCMbS8N50UAE7tHh7Y3udEMyVzk6NxYbeO7AYXJHPWV5tDdemR7ifKVGp4O5x/Wac0YWDWXbg40FxJSp6VG1Z6ma8QrPv0E+LpAMzXUto8MBCR1PM8n0ZFIHboWkVS5pzBIKiAhIVWkomCHAXrXJ6HrtKQXveQSfE2Q8hU6MkSVCindxBYBqVCj4TskQw3fEMhBQCJm4jg+Sd1A+iGqUPjBh3fyf7/38TtyIgvDkBdeeIFWq8XRo0dvuBW1lRGGIa1Wa0g86/HN/X6ffD7Pww8/vKlZz3e+8x2efPJJ/s2/+Tf80i/90n1LNLDFyObVoqEBvva1r/Hggw++7IB/46LmrVK9nD17liAI2L9//w3fZ+NA8KXKk/7A5TPPPM/cfBUz1LAHDv22S9IyMHQVEYQoqkJlpUUY2tRXB+zeM87qQpNsPoG7ZqY5OZ2n1x6QSsVQFWhWe5ErQBDSafaJJy0MQ6VZ6aKoCqNTWZbnqoxM5NB1hdpSE7sfVQcTO0ssX4qEAKlsjPxIigunruB5Pr7vkxlJ4PV9LMskmYrTbfQpTmaHUQIIwdSeUVzbZXXDfEO3NKZ3jTF3dukaqfTk7pGh6sxzPfqDAbmRNCJQyJZShBJqa/k1nXo3WhjtdEicf5GpsMWSSNMTUUtURZKVNjURXT2bj+xn/NF9dGo9qot1ZChJFZLYfTdaLCWqtAxTp9fqI4QgN5YhkY4TSkngBZFVjxNwJeZw/mGdMKEOq6F03ScYtej5axk8CDIDlYYWYrgQS+r4HZeBIUCLWr+xVkg/BqiCXKChKSotS+J5PrGOJEzp2J6PZYMa0xn4PllhEAoIBj5qIPEMCH2JooETguGBiGkk0QkAxZdoiorrBwgpMDWVrGnyD9/9GE/sn7m5D/0mEYYhzz//PN1ul6NHj96R+Pa7gWazycmTJ1FVFdd1N+XfduLECd773vfyL//lv+Sf/bN/dl8TDdyDZPPNb36TnTt3Dn2UNmLjoubhw4dv2RXVhQsXGAwGPPzwwzd0+41Esz5nuh6ePn6Rbz87i7RDTEWlXusRN3Vc26fX7CFDm17TY9eeCbqtQbT82YviiHUlIqOJ6fyaDY1KaTTN6lpOTDpjUV1qoukaxdEUlaUmIxNZDF3hyrkVZBilX5qWPsyIKU3ksCyN5UsVfM+nMJFdkzDbBL5PdjTBYNCnvtRBU9fDyEbptyK3gpU1N4Kx7SVa1Tae45MrpanM10hk46TyCVZmq5Sm8tSXGgR+gJnQ8fDAE1iWNVy4BJjYNYpQrtrbiIUFiquXacgYEsEoXSQCTYQsiqtt1fTDe+nGM/hegBkzyE9kMWIm5Ss1Bt1I2jy+c2Q4J4K1qmfDDk5+d4nvWG1q2w1CUyDWKtD0QKFlSpKeYGCGaCHooUZXiYhUkYKUrSAEtKxIbWh1JE3VRyigOaD6gjCmYvSi+U4/qyADyHgqjgmBBKsd4iYUAjfEdECmdeKeoBf6KL5AICMl48DH0hU8CQlNRxEqqiLQpcLO0Rz//ENvJpO8M7b1YRjy3HPPYds2R44cuSUb/FsRjuPw3e9+l2w2O/RzXPdvq1QquK77qv5tp06d4t3vfje/8iu/wr/4F//ivicauAfJ5m//9m+ZmppicvLaBbT10KVCocBDDz10S1Udly5dot1uc+jQoVe97Y0SzToWyy0+/aVTtOs9pBOStAzsvs3SwioxI0Y6laDbtMlmYjSqHZJJC6/v4jg+hWKS8kKDkbEMjUoHzw2YnMmzeLmCoiiMT+XwbRdVU1AVwcKFaIZSHM/QbfWxe260yzKdj+ZHPRvX9kimY1TXsljMuEG2lEJVFZYurCKlZGRbnsWLqziui2pAKhMnFrNoLneGFVwyG6c0mePyqYVrWmIz+yfpNnvUlhq4rotjO6RzKUa3lZChZHVt9qPpKqlckvpKk9xohljSpPfZzxN4Af0NupZJ2aGJSR6bnmLQFQbWo4dohVeFIJN7xoaElSmmKEzmGXRtus0+nUYvaretPa4E5JEi380O8AyB5kqslI7XcQkBz1RQNRXfD0g1Q5SUQVsLQILhSEzDpBtG6qK80HE6Lp2UBAFJW8FRBFKN5jAxT6FvSJJSQ/Y9OkaI0BTMrsSJKVhCRUNgKxKtHTAwJHnDou95xBWdnueR1U0afZuYphLYPoqUGKrCOw7v5Cfe+RjJZPKOnMiCIODZZ5/F8zyOHDmyKSHOvQDHcTh27BjpdJqHHnroe17bjf5t1WqVZrM59G9rt9scOHCAixcv8u53v5t/9I/+ER/+8If/ThANbDGygejNfCUcO3aMUqnEtm3bhj9bX9TcvXs327dvv+Vv3tzc3LAt93LYKAQAhhvDN4IwDPmTLz3HC+eWoWfTabRJxlIYik4maUUKrrWKxrU9PDcgHtOpVzpMTudYulwjk0+gKwqqKojHTezuYFjNlOdrBEHIyGSOZqWDO/CIpUziCRNFCMIgQNdVqksNfNePhAQ7iixfqpDOJxFIYkmL1SvVYSssU0iRzMWozNfoNDr4vk88b+LZAYamE4/H6DX65MezgKC+3KA0ladRbhF4PslSnNpyHVO3yI1kqa0pxnJrgoAwDK9tx9l9Rk5/B42QuojTQ6fAgBYGPldblDOGjffUBxj0HeorTUa3j7C6IeAsXUjS79jR8yTK1zHjFpqh0tVCnpvwWU6GQ8NMQ1fRKx6BBnZSQbd0wp6HOZDYCS1qkXU8JIIgZ+C4a6+Po9BTJZ4MiTkh2WSMuh6CFCRDlV7PxVchbugEHR9Xh7iuYbgCXY/2unquh7A0dF/gGJAOVOquTVGPMwg94lJHUQRhAIQhmlAZzST44Jv3EtM8arUamqYNd0hulT3/S+H7PidPnkRKyeHDh2/Jdv5WhOu6fPe7331ZorkeNvq3fehDH2JlZYVUKsXRo0f5gz/4g5c1IL0fcc+RzcmTJ8lkMuzYseOaRc2DBw9SKt2e3I2FhQWWl5d57LHHrvv765ny3SzhSSn5wtPf5s+fOUshkSEfT9Lr2Pi2TzJuUl5sUiomqVe6lEpJ2o0++UKS2kqLTDZOZakZzR7yccrzDdL5BKHv020OyJVSuAOHXntAMh3DtDQMU8fu2cQTV5cbU7k4mqrQqLTXWmQlasvNoaVMKp/AMDSqy02mdo6wMltmbCYipXUhRLqYADVk6fwqEFny67rO7oMzVBfqdBtdBrZN4AdkCmmm94yzfKmC3bv6vk/sGqHX7JPIJlidqxIGAaOiT/m7L0avL5Jp2QYJiyJFICKymZZtrozsQq4F75WmixgxnTCUtMptXNcnmY3TqnSG71NhIkd5ucHSdpPFXRZJqdA0IsJN+wqBouBpAgTkQhVfBgwUQaCAUBQ0X2K5glCBUAFHlcQH0DUic1XVDshYcVq+h+VKUjGDSuiDgIyiY4cBUlNJodHu2wQCippJ3XVIagYylNiOR8YycUOJoSj0Bh4xQwdfRg4NASQNncf3b+PnPvAEmnbVu6vRaFCpVIbtnXWjylKpdEvmKZ7ncfLkSRRF4eDBg/c90aRSKQ4cOLCpC9pz587x0z/906RSKRzH4cSJEzz22GP81//6X3nooYduw1FvLWw5snFdl1c6pFOnTmFZFtu3b+e5556j1+tx5MiR27ostrS0xPz8PI8//vj3/O6VhAA3Ct/3OXXq1Npc6BH+95dOc+b8MhnFJK6qKFIShlBbblMoJFierzMxkWVxtsrkdJ6V+TrpTJzADei0BkzOREuJuqmRKyQozzdIZWNk8wk826W+2qY4lh5KoEem87TKayaZpsq2tYVNu+ugm9o12/XJTIzieIb5M8vDgXkqn8CM6WiaQmW+ju/6ZEpppAgpX6mSKFo0l9sYhk5qNEFrtUsiniA/mqEyX0U3dUZnilSXmxTGcyyeWxq+NrGUxfiuMVb/8qsMVqOwMk0GpKVDjRgWPkUG6ARcERmCqW3IkRK6qRNPx2hV2sO/Nb1/isANEAoMOjaxbJxTjRpzD8SwYwqGpeM6HvFuAKHELZr4a5WKEQosG/wgxI0JRFLHqLo4uiDUFFRNQe/4aK7EL5n0HJdYJ0CkLbwgRAkhEajYloIlBQkUmr6HLSTZUKMlfNQQsrpJVwYYtsTTQPVAMzUCN3qt45qOHfjEFA2NtdC2hMU/+rE3cGDPy6su19s768TTbrdJpVLDqmczRpWe53H8+HF0XefgwYP37UKi67ocO3aMRCLBgQMHNvUdn52d5V3vehfve9/7+L3f+z0URWFlZYXPf/7zPPXUU7fUJ26r4p4jmxdffBHf92k2m8RiMQ4ePHjb+8Orq6tcvHiRN7zhDdf8/GbnM9fDuqjBMAweeeSR4XM5M7vK/+/Pvkto+xT0GNIP6bdt8rk4BBLXdjENjdpqm3jCpN8aRLHD6TiDrk0unyBwPcIgRNNU5i+sIAPJ5I5ilN0iYWymQG25ied4pLJx8iPREmWv1ac0laPb6tNvRwP10W15DF1lZbaCZ/vR8qOlU1tsItSo7RYEksZyE7t7NVpg18FtrMxWaFZaDAbR8N9MGRTGMzTm2yjiqpnh1L4JwiCkXevSbUTV1OSecRbOLqE9e5KxsENIpAZe5urFRQ6bHjoKktzjjxBMTaNqKksbMnIm904M5zYA8QdKHE/ayJROL61G8cxBSLIHXSXEUBW8gYsTU0i0A4KUibu21BqXCmo/oJOM3m/D1NBrHn1LQdM1cDzinsRNG4SKQtwFOwgIVAFOgOEJ/LiKdEJiQZQiSigJJXQ8F8MFP6WRDDR6oY/pg2ZohHaAoWl4foguFCxd44mHtvN//ejrbtpyxnXd4UB7M+229RNwLBbjkUceec05MlsV688zHo9vWt68uLjI29/+dt7+9rfz8Y9//L59rV4N9xzZnDx5knK5zLZt29i3b98dGa5VKhXOnDnDm970puHPbgXRtFotTp48SalU4oEHHvieD2EYhvzPzx/j69+9TMmKkTctWvUeqYRJvdwmlTAZdB1MXaXXtslk45QXm0xsy7MyWyGWsIjFNGorbQqjaQadPv2OTWEsy6AzoN+2GZ8pYJoqS5ejZM6JHSVWLlcIgxDD0smPZ3AHLtIL6Lb6FMev5sMgYObBCfrtAeUr0XzFsHRKU3lWr1QpTeRZvrQKAvSUwqDhkEwn0U2V6mIdzVLQEyqdSp+x7SPUF1qoqoIQCqPbi8SSJpdPLSA6HcTaMueUbA8FAV1hYKOiAh0i5ZPcs4fJI3tYvBC5GVhJE1VTWZ2r4QxcbEuh8kiGpSzDfZpUIAiCEF9KPFNFMzR818eyJWYgGBQMwiC6bdoRDFRJICDugWaqDBwfW4l+r/Wi4LzQUDE1Db3l4ZgCkgZq2yPQFVRLI+4rkSu0KjC6AbYpiCkaKuALgey6YKnEFR3bDTB1FY1oJ0cTCmOZBD/7gSd4aM/3qjJvFjfbblsfkieTyU1f6d8L8DxvSKibJZrl5WXe+c538sY3vpHf//3fv2+rvxvBliMbz/Ouaw0jpWRubo6zZ8+SyWR44okn7tgx1et1Tp06xZvf/OZrXFxfC9Gsrq5y+vRpdu7c+aru0wvLDX7/U3/DymqLkhWjlIijhCGNSpdE0qS80GR0LM3SbI3JbXmW5mrkC0mcvku/YzO+LcfS5SqGqZMvJAjXTCMVBebProAQTO4osnRxFRlCpphEAEKApqkIoF3rDA04S1N57L5DKpdg9XK0JJkfyw7NL1P5BMl0FGW9eHGFwWCAYRhM7BwjmYqxeGFluO8ipaS0Pc+gN6A8Xyf0It+7qX3jVGdr5MZyJK5coPrCLKOyz/yGisYgoMgAFegLjZqSZPxH335N6ma6kMS1PbqhR+3BHL28Ricu8MOQIAgxnBDTV7CDADQI4hqKLzHbPv2Yhm5qqG0XqYIIIciYeE6k+soEGm0ZYLkhjiUw3ZCuoaAKQVo3CAYBnqGgqYK4A14QQEzDb3sMdEiYBqoncVSIeYKO55G2TMJQoqJgux4pw8D2fBKajgwgpmu87fV7+fvvOnRbTlyv1m7TdZ1jx46RzWZveEh+L2KdaCzL2nTltrq6yrvf/W6OHDnCH/7hH96386wbxT1BNmEYcvr0aarVKmNjYwwGg1dUht1qtFotjh07xlvf+tZbIgSYnZ3l8uXLHDhw4KbUKF/+5jk+9VfP4nkBo4aJ7kIyZhB4IaauRPv9QYBQlGg2AagqQ5dnu+dQW24yvr24NlsJGN9eoLrYwHN9ciNpQj/AjGmEfohhaCxdKiNDiWHpFMcyLF5cpTiRQwYhVsJg5XJl6JmWH8+SzMZZvrASJXN6HlpSIW7FSWdT1BbreI6HlbAoTuaoLtTJjmaG+y66qZEdS+H6LotnlpFSoqkasaVFdrQX8FHwEZRJoBBSwKbM1R2S6ak03hveiJTQLLeQEoKUwYVMSGXcRCoCTddQOg5SkWge+FlrLbJCQZWSbKjQUkL8tfdVSEj0Q/oqpHWduuKTcCFE4BsKUkrinsTxfCyh4lgKKTRqTpS8mVI1bNvHVyCl6fheiNAV0qpGrxtV8aal4wNxTaPdczCFgmHo+E6AaWj4XogmBHunS/zcT7yR0ZEUdwovbbcFQUAikWDPnj23Td12t7E+izIMg4MHD26KaKrVKu9+97t58MEH+R//43/ct1Lwm8GWp9p11YaUkte//vVUq1W63e6r3/EWYj1iYKP1zGY+gGEYXuMXdbNW6z/4hr284egO/tunvs3fPHcZU9MoeFAwDCrVLrlMjEa5Qzobp1FuUxpJs3Chyti2fDRbUZRIPTZbJZWNoxsay7M1krk4IzkLGUhaFZtkymRxrrpW5aRQNUF9uUWvY7PtgXHalQ7NtcF7Kp8gnrRo17oYhsaVF5YY216kslSl07aJiRj5bTl81yeRidMst7B7NpWFOrnRDKqmDt2WPcfHNAyqc3V27t9OEAYsXVxmprPEHFdfqxQuI/TpYKy7uVCiz7JXwl2b07hZk9b+PNUYCAVURaKoCkHXQXdCPE3BSFoM3KjCinVdtKTFqu8S7weEKY2kLxgEAS1NQdc1Wn2beC/As1SClI7suxj9gHZCiw7CDTACQd+1MYXE1DR6qkSN6ZSkSt11EYEko2iUHYespuMpMLADTE3F9gNiqk7oyYiUQlBDQTYR40ffeZC3vOHm7JJuBQzDYGJigkwmQ7PZJJ/PY1kWZ86cuS3qtrsNz/OGM9TNEk2j0eDJJ59k9+7d/NEf/dH3iWYNW66y8X1/uKvSarU4ceIE+Xx+uKi5vLzM3NzcHW2j9Xo9vva1r3H48GHy+fymPoDrMQe+73Po0KHX7G6wuFLn//3jv+XiQo0gDBk1LaayKVQJveaAWExneb5GoZiiXeuiKgqxuEG71mN8WxanFy17aprC6mwVu+cwsaNIZaGO5/pkSymEhPpqi+JElmQ6xtKlVdy+i1AUxneUKF+p4rkekztHCYKAQcemVW5jOw5B6LPr4RkIGFraCAGjMyUQkm69R2ctflnVVMZ3lNB0ldnT89c8zx1ZhfDLX6GDThMLDRkRC5GDsEXABB18FFYndrH84E5WZxIMSrHhLo0IJDnDwOnYuEkdoSkoqkIYSFL9AJsQL64PW3uWIzE1A8d1sGMqmqZgdQIGqkAqkTrMbDh4gsiRWShkApWeFj3JmEc0/wklRj9AM1RcVaBKCaZGEII2CHBNhbiv4GmgORJfSFJrcmdNCgxd5e8d3sGHfvRxDOPuVRDdbpdjx44xMTHB7t27EULcFnXb3Ybv+xw/fhxN0zatrmu1Wrzvfe9jdHSUT3/60/cFAd8qbFmyWV5e5vnnn/+eRc1yucy5c+d44xvfeEeOR0qJ53mcO3eO1dVoJlEqlRgZGbnhNkKv1+PkyZMkEgkefvjhW9p6ePb0Av/rT7/Lcq0TbakrGilPUkonaNd7pFMW7XqPXCHJ0myF8ek85YVIfZTNxVmZq5HKxzF0jdpSg3jKIpWN0Wn0yRaTqKpg+WIZz/WxEia5kTRLF1cRwOTuUVRNMPfCIusRmLGcQavcZnrnBLXFJiAZ3VaksljH6btM7ByhfKVKfjxLGIZU1ux1sqUU5StVSlMFNEOjOl+jNFNk5c+/AmsqthJ90rhUidNaEwTksWnEEyzunaDyyHaCQpKcotHUopmM1vNImRZ1zyVuB/RTGrqpozZtCMAxVbK6Ttt3URGYPriJaDcHBPlA4CIjIpGQUFT8gc+AkBBJciBBgp2ISEft+diWgq6qxD3o6wIDBdUOsZUQywGpCRKWiT1wMXWdIAjRNQ3X9TF1HV0I9u8s8TMf/HsUC3c3/6XdbnP8+HGmp6fZuXPnyxLIa1W33W3cCqLpdDo8+eSTpNNp/uzP/uy+MCC9ldhyZON5HmfOnOHKlSvXXdSs1Wo8//zzvPnNb76tx3E9IYCUklarRblcplwu43nesIWwPjx9Ker1Os899xyTk5PDq8LbgS98+TR/8aXnqXcGSEUQV1UKponW9shnYzRW22TyCbpr1UQyaVFeqDE6laddi5YcxyZz+I5Hp9nHsHR6jR7dVp94yiKdT7JyuQwCtj8wQeD5XDkT7cNkR9Jousrc2QUSWZNCKY9lmVQX68NlzXjaYmymxPLl8jX+Z5N7x9B1lfkzS8PZj25olKYLCEXB/eNPUiOGSUAGlzKRz1RK9XCnU1zeNU0zlaSfTxBYJqquEnohsbaL0DWCQhzCELH2/uU8Qd/x6K41kHVTh66L5gQgBEHBwnV8LDtAQcE3NQI/IGYHxFIxqoEXbesHIZZUGWgCVVHIa3rUZl2reru2T6BCSmoMvADT1DBR6Ho+KU2j7/mkDZPuwCFu6CihQFcE28ay/MSPvo59t0Bl9lqxbgG1Y8cOtm/ffsP3uxPLpLcSvu9z4sQJFEXh0KHNCS96vR4f+MAH0DSNz33uc1syu+duY8uRzenTp1laWnrZRc31Yf3tDBm6EUcAKSWdTodyuUylUqHX65HP5xkZGRl+oRYXFzlz5gwPPPDA93i53Q4EQchnPneCp795jp7tEYSSvu9RjFukpcpUJo4/8DBNDafvomkq7sCh0+yTKyZZulTGipnkStH/67rK6HSe5csV4ukYhdE0ds+JbPuFYGymSKfRoV3rEgif/FgKA3NoPaMZGiPbitHuTKVFr9VH1VRGt5fotXrEU3HKV6pDw8zSVB7XcXH77nAmpBw/zig9EnjUtRiXxyfojGfo7CnhaPp6XA75RhNn73bUrkfX8/FVgS4Ax8ePacT6IWrCoh8GCD/EDCVq2kK1A/r6eia8IOVFf7Gtsma+KUn4MFAhCCWm4yODkEEsancZboCu6/S8AD2UxHWDduCTVTVURSFYi/52HR9d19A1DWfgEotdtf+XoWSilOHHnjzCkUN3xp351dBoNDh58iS7du26xhrqZrHV221BEHD8+PHXRDSDwYAf+7Efw/d9/vIv/5JU6s4JOO4lbDmy6ff7a9Lc6w/Vut0u3/rWt3jb2952Wx7/pRk0Nzqf6ff7w4qn3W5jGAae57F//37Gx8dvy7G+HBzH439/5jt8+/gVugMXoUSyWzcMMYVCFoWMUIkLhW6zx8h4lqXZCulcAk1TqC01GJnKowrWTpQeiiKGlc349hLtWodes08yF8MTDk7DRfrRSWNkW4HA8XEGLolMjMp8nbHtRTr1Lu1aBytukh2NXJk1TWVlroIMJWMzRRqrTRLZSHRQW66jHfsmqyNFVmdG6YxnQRUYoU+s06eRzyCCEKvVxxCSQbqIF1cIFYERM9C8SNrsux69mDrclTHdkLhp4gw8PAMCTSGt63gtB9uIiCejaLg9G9dUUSydwPXRuh6+rqKYOvrARwOUtIkrIYlCV4bghRg+2CrDZUwpQfFCpKKgC4GCAjJy7i7lErzn7Y/wA2/ae0c/I6+EWq3Gs88+y969e5las/65VdhK7bYgCK5xid/MY9u2zQc/+EHa7TZf+MIXbkmkyf2KLUc2QRAMM7mvh8FgwFe/+lXe8Y533PIrovWKJgiCTe/PrLvfttttEokErVaLRCIxrHju5JWc63l8+jMn+MbfnKdrezhBgK6pBEKiKgI3DMlqGjlNI62opHSVXmuAbmi0qx16rT5jMwXa1S799oD8WAaBpFXpUJrK44cucy/OI0KVRDLG6EyR2nITkBTHsri2iwwZLnwKRbDjwBR212ZxQxpmMheP5joLdSqdHr24Ri+lE4yn6LcaCCkxmz3ahTQGAb4PRttGcz28fAKhKZEUOZlGtX3SCYtud4BjagiitpzSc8ANCA0F39JBShRFIeELYrpKS8j1sRNpVPp+gCcgJRQUKen4Pr4AU9UwHUmXyJdM63p4iiBh6eAFqKaGFALckEATaB4IVUEJJDKU6JqGkIJCNsZ73vEwb3nLg3fks3CjqFQqnDp1igceeOA1hw6+Gu5muy0IAk6ePEkYhhw5cmRTROM4Dv/gH/wDVldX+au/+qu/E5YzrwVbjmxeLa3T8zy+9KUv8cM//MO3dEnqVlnPrAcqHTx4cFjdrF/JVatVdF0fZp5ns9k7Qjy+H/AXf/EsX/3GWVpdh1BK7DBEBkEUIGY7GDGdnu2R13WsUCI7DpMjGXorLTRfMr6rROD4uAM3ympptCjPV0mmk0zvHKO61EA3NTKFBDKEVrlFtxnNh7IjaVK5BHbXHhJPrJRCyydohT7NIKDtuXRTBsLSUVSFuISW6xD6Hvg+Vtcm2+3gWCa9ZAJfqKhIjN4Ax9BRUVDMGCITxw8lKQQdXWIgEG2HARAogryh0ww89L5PAMi4EVVYXoAVgkzFogVPCTlNpztw8ZDoUhJXNRwvJIhpZHUdJwjxkcSlQn/go2gKZgiOkKR0g+7AJWHohCEYmkCEMDWa453vPMDrX7/7tr/vN4tyucypU6c4cOAAo6Ojd/SxX67dtk48t/IibSPRbNal2vM8fvqnf5rZ2Vm+/OUvUygUbsmx3c+458gmDEO++MUv8ta3vvWWXfmsz2deC9F0Op2hTHv//v3Xbb8FQUC9Xh/OeeDmlW2vBVJKvvylF/nqM2dYXGmBgFAR+GGAh8RSVaQiCaTEF+CEIaofuQ14fRc9lBRSMdrlJt7AYWwkhyoEhq4R+lFMQafRo9+zkYpCZiyFJ8EX0Kx3CeI6ImXR9T0UP4SEwcDz0PWoAhE9By9lQCBR+h5xTUMzNHrVMp6uEyDQ+w5SFaimgtUdoHkhA0NHLZQYxCKbGRFKTDsgnozRGdh4hopQBAlDR3cCfBQMFXq6QA8kug89GanLhB8QCyXCMBgoAnyfmARXqAShJBYKAgmh5xMzNDRNI0Biqip9xwUfrJiJCCUaCmEQoqsqM1M5nnz/YR56aPq2vsebxcrKCqdPn+bhhx/eErb3t6vdtt558H2fI0eObIpofN/nH/7Df8iZM2f48pe/vCVer3sB9xzZAHzhC1/gjW9842tWfLyWDJqNWG89rKt2buRvSClpNps3pWy7lTj9/AKf/8vnuDhXZTBwUXUFx4vabB3HBQ00V6IldHzPJwglxDQGjoshJKFpEIYhWt/DT0THGtpelCwTN0CA4Uv6nocwo9wV0XPxNYES05FSYkgIBi4yDNGEghE3EYGkq4Ln+SDBNHXo2Tj+gGS/j762CzMINex8NIhV0kkUCbGBh2LqDHQVFEEYhEg/JDbw0BMWdc9bs+ERZFQNuzMAIQiTBiKUKAMfVxGopobfd9FsDz2mE6oquqoiNBUfQUxCKASDgYfuBSgxA0soBDLa6VGVyLImZujs3z/Gj/7Yo4yObd0Wy9LSEmfOnOGRRx552bj1u4lb1W4Lw/CagLfNEE0QBPz8z/88J06c4Ctf+cp1E4O/j+vjniSbL33pSzz22GM3vYG/EZsVArz0b1y5coWLFy/y0EMPbbr1IKWk2+0Oied6yrbbhW7X5s8/e5xj352l0RkghcD1PCxLx/UDdEOj57h4AlTHpS8hFtNR3IBASqyEgecGBL5PLGUhBDg9B9cPMGI6uqoy6NkIRcFImIRSgufT9gNCRaAIQT5m0iLEczykBN0L0GM6hqaihhLH8fEGHlIJCAOfAAWBJBP4aKMlXD+k60UtUE1ViEmJs1bhBKaO0FQCLyApo4VMG1ifCiZVldCL/mKoAEIg3YDuWqWm9jxcKVF0FdV2UXWNeMJChCJK9QxYswWKYqMVAcVCkte/fjdvf/cjEVluYczPz3P+/HkOHTpEPp+/24fzqthsu22daFzX3XSSaBAE/NIv/RLf+MY3ePrpp++IwvR+wpYjmxuJhn766ac5ePDgpgdyt0IIEIYhZ86coVKpcOjQoVuqQllXtlUqFVqtFul0ejjnicdvX578sb+9zDNfeZELsxUcxyMAFFVgOx4hAY4fkoiZKAJCAZqm4EnJwA8QQqILQcfxEYogber0fB+pKggBSSFohyG+FyAlZDRBYGoIX+J1bUQYgqqiJy18BVzHR7NdbFNDiMhN2vRBF+D6IU4Ygq7i2R6mH+DqCplYlD/jqyqKAEtVsAnRvRA/kLiqigzCSL4sQ5SUxcAJUIC4IpBCwfFCtMDFskxCRSGQAlMIugMfVUo0BRw/wBAQhgqmpqCrOqm4wb5947zt3Q+ze++9cbU7NzfHpUuXOHz4MNls9m4fzqZwI+22MAx57rnncBxn00QThiH/9J/+U770pS/xla98hZmZrSFRv5dwT5LN1772NR544IFNJXPeCiGA53k899xzuK7LoUOHiMViN/03bhSO41CpVCiXy9TrdRKJxHDOc7uUbbbt8fQXn+e7f3uZ+cU6vf6AQBFoiopuavh+NED3NIHt+CQNlQGSwA1IxlSkqiKlxO67xE0dXwHH9sALMJImvioIAgkDF6kIQlND1VRUAfRdbCHRghBD14hZOlJCy/Xxg2jvKW3qOK6Hpgh0VSMUEAhQvIAeoPoBKcuk2xkQCIEJqEkTr+MggUDXUBQFre8CEjNt0bV9VDdAqOApkSxc11ScICSpawShJHQDhCowVS26UEGSy+pM74zz2Ot3MDY+dtsvCG4VLl++zOzsLEeOHLlv5LrXa7fl83kcxyEMQx577LFNE82v//qv8+d//uc8/fTT7Ny58zYc/ffimWee4Xd/93c5duwYy8vLfOYzn+Gpp54a/l5KyW//9m/zn//zf6bRaPD444/zH/7Df9iyqZ/3JNl885vfZOfOnTfdL70VQoB+v8/JkyeHGRd30jbc932q1SrlcvkaZVupVCKXy91y4mk2m3zrm99m8bLP0nyf1XIbz/MjggAkAmSIG4aoAnzXR49Fm/TOwMNIRLMbJQSpKZG0WIa4A48gDNEMDdPSUYWg03Xww5BQUUgYGhgKtpR4tocIQww/xErFEIAfghNKzDBEmiqO7aJ6IUhQLQM1lNhINEUQNzQ8X2KHkrgS+bARSgZBSCgElhAIX9L3A/TQR/pRS3U90AwpUAQQClQFDENlajLHoSPbedPbHiIeN7Bte3iCq9frxONxSqUSpVKJTCazpTzCpJRcvHiRhYUFjh49et8uIK4vXT///PMMBgPCMCSdTt+0ui0MQ/7Vv/pX/O///b/5yle+wt69d24f6vOf/zzf+MY3OHLkCD/6oz/6PWTzsY99jH/7b/8tn/jEJ9i7dy8f+chHeOaZZzh79uyWfF+3HNlAdDX/Svj2t7/N5OTkDfdMb5UQoNlscvLkScbHx9m7d+9dPYmEYUitVhtWPXBrlW3lcpnnn3+ePXv2MD0dKaj6PYdvPn2G547PsTBXp+/6eF50tQ+SUIAqRFRpBBJNg4EXYLsBhqFiagptx0dRFSxNQVUEA9cncH1UCbGkgVCihcd+x0EGAVJTIR65OyPBCkNsLyBm6fhuQN/1MVUlIjkBOiBktENkaiphsB5XIfCkJAgllhBoa48jAWSIPXBB1UhYBo7jR/MiBBCSTsaZ2VHg8GM7eN2b9mIYL3+B4fs+tVpteEGgKMqQeO62R5iUkvPnz7O8vMzRo0dva5T63UYYhjz//PP0ej2OHj0KcNPqNiklv/M7v8MnPvEJvvKVr/Dgg3dvJ0oIcQ3ZSCmZmJjgl3/5l/n1X/91IDpvjo6O8rGPfYyf//mfv2vH+nK4J8nm2LFjlEqlG7LReKkQYLNEs7y8zAsvvMDevXuHJ9+tgo3Kto1qnZGRkU0p29aHxq+UtyOl5NzpZY5/6wIXzi1TLndxXBdFUfHDELFGOp4fpUx6YYgTgnR9TF3BEYIwlGhSYlga/UCiCNCCEM/1EKpCPG4iw6hiCUNJ3wsQekQgRhCgGBq6piIluEF0O0MVUZSAF+D7EldKYrqK4odIQNWjCkuR4IeC0PeQvo9pWqxLRCxDYWy8wK59o7zujXvYuW9zM5gwDGk2m8MLAtd1r1EcGoaxqb+7GUgpOXv2LJVKhSNHjtzX3l0vJZqXvs6vpG4rFArEYjGklHzsYx/j4x//OF/+8pd5+OGH79KzifBSsrl06RK7du3i+PHjHD58eHi7J598kmw2yx/+4R/epSN9eWzJPJt1C/OXw3q+zKvhVsxnpJRcunRpaAy6FaWhQghyuRy5XI69e/cOlW2zs7OcPn2afD4/rHpeSdkmpeTChQssLi5y5MiRVxwaCyHYd2CCfQcmhvc9/dwVTn17lrmLFer1Lp22jaGoeG6AJgQ6IA0NL5BYSDRNoTfwcAIfUxXoqoIjBaqio4YSxQuJHGYkmhCYXhi5AOgaaJF5peJHrstxBB4Sxw4wRIiqgK4pGG6AdKMguDAICZ1IsUYoEa6DSkixkGF0Isv23aMcfGw7e/ZP3pKqVVEU8vk8+Xx++L5UKhXm5+d54YUXyGQyw6rndp78pZS8+OKL1Ot1Hn300ds6Y7zbkFJy+vRput0ujz766HUJXVEUCoUChUKBffv2DdVtS0tL/OZv/ibPPfccu3fv5plnnuHpp5++60RzPaysRLlNL1XAjo6OMjc3dzcO6VWxJcnm1aBp2ita2sCtIZogCDh9+jStVovHHnvsnmg7CCFIpVKkUil27dpFv9+nUqmwsrLC2bNnh8q2l57g1tNQ15/rzZ78hBAcODjDgYNXVTrdzoAXT84zd26VK7NVmvUu3a7LYOAg1kgooSqRYeWaOtAUoCoCtMi9WRUgEIRhQMzQCaTEdQIMCYahEQQSISDwQ9QwJKWpa++1RPhR0qamKpH5pmmQTBnk8gkUyyNfMnnvj72VfOH2D8g3vi87d+68Zs5z4cKF2zbnCcOQF154gVarxaOPPnpf296vE02n07luRXM9CCFIJpMkk0l27NjB5OQkH/nIR/irv/orgiDgR37kR3jve9/LT/7kT/KmN73pDjyLm8P1DIK30oxwI+5Jsnm1yuZWCAEcx+HZZ58F4PHHH7+jLY9biXg8zszMDDMzM0Nl28YT3PqM5+LFi4RhyOte97pb9lyTqRiPvWkvj73EZLLXcZg7t8zyYoPKYoN6o0e/69LtDPCcAMf1CLyQYK3ClRJCoSJDiRqGWIYKCEQQYigKqibQLB3T0DBiBvGEQSxmUBhNUxrPMD6ZZ/veMeJJc7hB7rouhw8fvmt295ZlMT09zfT09HDOU6lUhlb3t2LOE4Yhp06dotfr8eijj245a/9bCSnlNaS6mecqpeRzn/scn/3sZ/n85z/P0aNHeeaZZ/jzP/9zjh8/vqXIZl0ctbKyco3Rb7lcvuNWQzeKLUk2N9JGu97i50uFAJslmm63y4kTJ8hms+zfv3/LBz/dKEzTZGpqiqmpqaGybXl5mcuXL6MoChMTE3S7XbLZ7KaWXG8UiZTJ/qPb2X90+w3dPlIoelFUMpGhp2HqqOrNHaPneZw8eRKAo0ePbpm4Xk3TGB0dZXR09Jo5z9mzZ3Ec55r5241eCARBMNwtebl20v2CdaJpNpscPXp000TziU98gt/6rd/ic5/7HG94wxsAeNvb3nbbHOZfC3bs2MHY2Bh/9Vd/NZzZuK7LV7/6VT72sY/d5aO7PrYk2bwaVFVlMBhc87MbyaC5EVSrVU6dOsW2bdteMZnwXoemaSQSCTqdDhMTE5RKpeFzl1IOr6wLhcJdJ1shBKZp8FouzB3H4fjx41iWxSOPPHLXn9PL4VbMeTb6f20lUr0dWJ9HNRqNTbcJpZT80R/9Eb/xG7/Bn/7pn/IDP/ADt+FIbx7dbpcLFy4M/3358mVOnjxJPp9n27Zt/PIv/zIf/ehH2bNnD3v27OGjH/0o8XicD33oQ3fxqF8eW1KN5nnekDSuh9nZWer1OkeOHAGunc9EIVibuyqfn5/n3LlzdyWD5k6jXq/z7LPPMjMzw44dO4akuq5s26igei3Ktq2Afr/P8ePHh5Xq7azabiduZJ/H931OnjyJlHLTjsb3CqSUnDlzhlqt9pqI5k/+5E/4xV/8RT75yU/yzne+8zYc6ebw9NNP89a3vvV7fv4zP/MzfOITnxgudf6n//SfrlnqPHDgwF042lfHliQb3/dfcSazsLDA8vIyjz322C1TnJ09e5aVlRUOHTp0z1p33CjWZdwPPvjgK2aWXM+zLZfLDQUG98KwudPpcPz4ccbGxu76btStxMY5T6VSGSqsWq0WpmluOgzsXsFGojl69OimFXaf+cxn+Lmf+zn++I//mPe+9723+Ci/j424J8lmeXmZ2dlZnnjiiddMNL7vc+rUKQaDAYcPH77vZaGzs7PMzs7yyCOP3HQGx2AwGBLPumfbuqR6K+5tNJtNTpw48T3V2/2GMAypVqu88MILw+/NZuY89wo27gy9Fin35z73OX72Z3+W//7f/zvvf//7b/FRfh8vxT1JNuVymXPnzvHEE08MpX6bOZEMBgNOnjyJYRg88sgj92SL6EaxfiVYLpc5cuTIa7azcF13uERaq9WGyrbb6dl2M1iPfdjogHC/wnVdjh07Rjwe58CBA0O5e6VSodPp3LF9njsBKSXnzp2jXC6/JqL5P//n//BTP/VT/MEf/AE//uM/fouP8vu4HrYk2bxSNPT6TOE73/kOY2OR8WGhULjpPnyr1eLkyZOMjIywb9++e7aPfyMIgoBTp07R7/dvS/V2Pc+29Yrndivbrof1NuFDDz103+eN2LbN8ePHSaVSPPTQQ9/zWtu2PXxvtrpv26th3W5nZWWFRx99dNOGp1/+8pf54Ac/yH/8j/+Rn/zJn7ynXoN7GfcU2Wy0ntk4xPZ9f3hyuxH11OrqKqdPn2bXrl1s27btvv6wua7LyZMnEUJw6NCh2169hWF4TRrpnVa2XblyhQsXLnDw4MH7Pqp3MBhw7Ngxcrkc+/fvf9XP8fXmPMVi8Y4lxb4WrLtbLC8vvyaieeaZZ/j7f//v8+///b/nZ3/2Z+/r7/5Wwz1DNhuJZmPbTEpJu92mXC6zuro69J9a71dvVONIKYfW6g8//PCmIgruJfT7fU6cODG86r3TJxMpJa1WazjncRznmvfmVhLfuq3Q/Pz83wmRR7/f59ixYxSLRR544IGbPmlu3OepVCrDfZ71C4OtNOdZJ5qlpSUeffTRTbcCv/nNb/KBD3yAf/fv/h0///M//32iucPYkmTz0rTOlyOal2Kjemp1dZXBYEA+n2d0dJRCocD58+ep1+scPnx4S1pw30qstwm3igpr43tTqVTodru3TNm2PjBen0fdC7ZCrwW9Xo9jx44xOjp6S97b9fTL9fdmK8151iMRFhcXXxPRfOc73+HJJ5/kd37nd/jFX/zFu/59+LuILU02644Am7WeWf8Crays0O12UVWVnTt3MjExsaWu3G411ofju3bt2rKJgrdK2bbR0+21SGDvFaxLuScnJ9m1a9dtCs/bOnOejdk7m72IOHHiBO9973v5zd/8TX7lV37l+0Rzl7BlycZ13VviCNDr9Thx4gTxeJxcLjfMLc9ms0P11L2wL3KjWFhY4Ny5czz00ENb1iPppXBd95o00lgsNqx40un0y77vW8Xn7E6h3W5z/PjxobvFncDGOU+1WkUIccfmPOtu648++uimiebUqVO8+93v5ld/9Vf5jd/4je8TzV3EliQb3/exbXv4782qmda35Kempti9e/fwg2bb9vCqutlsDp2QR0dH79kr4/V2w/rMIpfL3e1D2hReGj6mqurwomCjss3zPE6cOHHHhA93G+s7Qzt27GD79u135Rju5Jzn8uXLzM3NvSaieeGFF3jXu97FP/kn/4Tf+q3f+j7R3GVsSbL5mZ/5GS5evMhTTz3Fj/zIjzA5efP5IgsLC5w9e5YHHnjgFRM91/dF1q+qk8nkkHjulZ2EdRv5RqPB4cOH75uZxfWUbcVikVwux9zcHPF4nIcffnhLq6huBRqNBidOnNhSO0Prc571ivRWznnWiea1xFafPXuWd73rXfzsz/4sH/3oR79PNFsAW5JsFhYW+OQnP8mnP/1pvvnNb/Loo4/y5JNP8uSTTzIzM/OKH5x1Lf7S0hKPPPII+Xz+hh/X87zhl6dWqw3bOaOjoySTyS35gfV9n2effRbP8+7rVtK6sm1xcZHl5WWAYTunVCrdt5VNrVbj2WefZd++fTccg343sD7nWfdti8Vim5rzrDtcvBaiuXjxIu985zv54Ac/yO/+7u/e1zt09xK2JNmsQ0rJ8vIyn/nMZ/j0pz/NM888wyOPPDIkno2tMbi6vNjr9Th06NBrurp66aKiYRiMjo4yMjLyinOEOwnHcThx4sTQAeF+Nl2Eq8Px0dFRJicnhxcGt1LZtpWwLvR48MEH7ylj2Jeb87zartXc3ByXLl3i6NGjpNPpTT327Ows73rXu3jf+97H7/3e732faLYQtjTZbISUkmq1OiSeL3/5yzzwwAND4rEsi1/4hV/gn//zf85b3vKWW3qlGwTBcI5QqVSGc4TR0VGy2exdIZ71zJ18Ps+DDz5433+pGo0GJ0+eZPv27Wzfvv2a13wwGAyJp9lskkqlhnOee6UV+lKsrq7y/PPPc+DAgXtG6HE93Oic58qVK1y8ePE1Ec3CwgLveMc7ePvb387HP/7x+/47ca/hniGbjZBS0mg0+LM/+zM+9alP8YUvfGGYU/LRj36UI0eO3LYP2sY5QrlcRghBqVRidHSUXC53Rz7g6yfe6enp2yZ/3UpYv8Lfu3cvU1NTr3jb6ynb1iXVW6UifTWs2+088sgj99Xi8cvNeXRdp16vc/ToUTKZzUV0Ly8v8853vpM3velN/Jf/8l/u2hzvwx/+ML/92799zc9GR0dZWVm5K8ezlXBPks1GfPazn+WnfuqneO9734tt23zxi19kfHycJ598kqeeeorDhw/fVuJpNpvDJdJ1a5bN+rXdCNatdm7kxHs/YP3Eu5kr/JdTtpVKpTt2YXCzWFxc5OzZs38n7HZs2+b8+fOsrq4CXCN5v5k5z+rqKu9617t49NFH+cM//MO7Khj58Ic/zCc/+Un++q//evgzVVXvq4uGzeKebvI/++yz/NRP/RT/7b/9t6FFeLfb5S//8i/51Kc+xXve8x7y+Tw/8iM/wlNPPcVjjz12Sz+IG1MV9+3bR6vVYnV1lTNnzuB53pB4isXiLXncubk5Ll68+HfCageu+pwdOnRoUyfel8Yt1+t1KpUKzz//PGEY3pSf3p3A/Pw858+f59ChQzclbLlXsS4oWJc3r8951r38bmTOU61Wed/73scjjzzCJz7xiS3xPmqadt8bwG4G93xlMz8//7Jy0H6/zxe+8AU+9alP8Rd/8RckEgne97738dRTT/H617/+tg3UpZR0Oh1WV1cpl8vYtn2NcupmH3fdVn15eZnDhw9vutVwr2Cjz9nteL7X82xbz3+5W8q29eH44cOH73tfN7i6fHz48OHv2Qm70TlPvV7nPe95Dzt37uSP//iPt4QryIc//GF+93d/l0wmg2maPP7443z0ox+9Y0u4Wxn3PNncKGzb5q//+q/59Kc/zZ/+6Z+iaRrve9/7eP/7388b3/jG23aCWe9TrxNPr9e75sT2al+QIAg4ffo0nU6Hw4cPb9rt9l7BnfY52+gLtlHZtl713All2/qm/JEjRzY9HL+XsN4qvB7RvBQb5zyVSoWlpSU+9rGP8eY3v5mvf/3rjI+P8+lPf3rLSP4///nP0+/32bt3L6urq3zkIx/hzJkznD59+r5vi74a/s6QzUZ4nsdXvvIVPvWpT/HZz36WIAh4z3vew1NPPcVb3vKW2/rB3Xhi63Q6Q8nuyMjI9zyu53nDPPlDhw5tiSu324l1n7N2u82RI0fuipvDnVS2rbs+rHt/3e/msABLS0ucOXNm063CarXK7//+7/Mnf/InnDt3jt27dw8VqU888cSWaKNtRK/XY9euXfzar/0av/Irv3K3D+eu4u8k2WyE7/t8/etf50/+5E/47Gc/S6/X4z3veQ9PPvkkP/RDP3RbT3gvNaPMZDKMjo4O5zHrnm5/F7bkN/qcHTlyZEsQ60uVbZZlDYnntSrb1lujq6urHD169J6VaN8MlpeXefHFF1/TTKrb7fKBD3wAwzD4X//rf/H1r3+dP/3TP+Xzn/88p0+f3pKzzLe97W3s3r2bj3/843f7UO4q/s6TzUYEQcC3vvUtPvnJT/KZz3yGRqPBO9/5Tp588kne/va339YTguM4Q+JpNBoApFIpDhw4cN+fiNZ9zhRF4eDBg1vSDeBWKtvWI7qr1SpHjx6971ujcJVoXovKrt/v82M/9mOEYchf/uVfXtNiXXeF32pwHIddu3bxcz/3c/zrf/2v7/bh3FV8n2xeBmEY8p3vfGdIPMvLy7z97W/nySef5F3vetdta3nUajVOnjxJsVgkCALq9TqJROIav7Z7YVfkRmHbNidOnCAWi90zFVwYhjQajeHFwc0o26SUQx+7vwuRCAArKyu88MILr4lobNvmx3/8x+l2u3zhC1/YsrOtX/3VX+V973sf27Zto1wu85GPfISvfvWrnDp1asvGfdwpfJ9sbgBhGHLy5Mkh8czOzvJDP/RDPPnkk7znPe+5ZRkfS0tLvPjii+zfv39oT+J53jW2OZZlDW1zUqnUPU08/X6f48ePk81m2b9//5a8Mn01rCvb1ttttm2/rLJtfSbV6XQ4cuTIfWOr80pYd0I4ePAgxWJxU3/DcRx+8id/kkqlwhe/+MUt7Wj+wQ9+kGeeeYZqtUqpVOKJJ57gd37nd9i/f//dPrS7ju+TzU1CSsnp06eHRqFnzpzhrW99K0899RTvec97KBQKN00A63HVc3NzHPz/t3fvYVHV+R/A34NxUZGbw1VFEFAQVC6Sio+mpeANZsxKV/PS+hSta7voY/i0/Sxt1bxtuuVimpVZ7WbJ5A1RlIuZosUAoqKCV0RgYLhf53Lm/P5o56wjasDMYWaYz+t5+qMjDZ9p6rznnPP9fj6jRj3xfjbDMJDL5ZDJZFy/Nu0zhO4eaqUvbZ8zU5kkaghPW9kmFApRXFyMlpYWhIeHm8zqKT5pg0afTggqlQqLFi3CvXv3kJ6ebvEruswZhY0etA95k5OTkZycjIKCAkyYMAEikQhxcXFwc3P73ZOoRqPh7t93Zly19habTCbT6dfm5uYGZ2dnkz55P63PWU+iXdkmk8lQV1cHKysreHt7w9PTs8eMgXiSyspKXL58Wa+gUavV+OMf/4jr168jMzPTJB/+k46jsDEQ7UbE5ORkSCQS5OTkICoqCnFxcRCJRPDy8mp3UmUYBgUFBWhra0NYWFiXb6tonyFog4dlWS54XFxcTOr2VGf6nPUEDMMgPz8fKpUKXl5eqKmpQXV1tUFXtpmaqqoqFBQUYMSIEXBzc+vSazAMg/j4eOTl5SEzM5N25PcAFDY8YFkW9+/f54InOzsbkZGRXNscb29vlJaW4quvvsK0adMMugJL26RUeyuHYRiTacuiT58zc6RWq5GXlwcACAsL4zpHaG+Hajcqantnaa9KTenLQWdpg0afz5hhGLz11ls4d+4csrKyTHqOD+k4ChuesSyLsrIybjTC2bNnERgYiMrKSowYMQISiYTXtjkNDQ1c9wKlUsm1zREKhd06/0bb58wSGkwC/1vO3atXL4SGhj4x5J+0sk37nMccVudpyeVyXLp0Sa+g0Wg0SEhIQEZGBjIzMy1+BVdPQmHTjViWRWpqKl555RUMHjwYxcXFCAwMhFgshkgkQmBgIG+3U1iWRVNTExc8ra2t3dIP7OFd8pbQ1w34bTNobm4ubG1tMXLkyA4HhvbLgTZ4Hl7ZJhQKTWKj65PI5XIUFBRg+PDhXb7lpdFokJiYiGPHjiErK4v6ifUwFDbd6OTJk5gzZw42b96MZcuWoba2FocPH0ZycjJOnz6NIUOGcKMRgoODeb2d0tTUpLNqysXFhXuGYKiTmnbzYlVVVbf0OTMFCoUCubm5XOeHrn6Gj5v94uTkxH05MKX9OdrR1foGzf/93//hhx9+QFZWFgICAgxcJTE2CptudOvWLVy5cgUikajdn9XX1+Po0aPcMLgBAwZwwRMaGspr8LS0tHDB09DQACcnJ65tjj6LFq5cucLtKTGlkyNf2traIJVK4eDgYPAvC21tbdxnVFdXB3t7e52ebcZaYFBTU4P8/Hy9RlezLIsPPvgAX331FbKyshAYGGjgKokpoLAxQY2NjdxMntTUVAiFQq5DdWRkJK/Boz2pyWQy1NfXw8HBgdtE2tHAMMU+Z3xrbW2FVCqFs7Mzhg8fzuvJX6lUcht9H17Z1tmhY/rSBk1gYCC8vLy69Bosy2LTpk349NNPkZmZiZCQEANXSUwFhY2Ja2lpwYkTJ7iZPPb29tyqtnHjxvH6AFmhUHD7RGpra2Fvb88Fz5P6tT3c5yw0NLRbFyEYS0tLC6RSKVxdXTFs2LBuvcow1sq22tpa5OXl6R0027dvx/bt25Geno7Q0FDDFklMCoWNGWlra8OpU6e4mTw2NjbcFc/48eN5bWCpUqm44Kmurub6tbm5ucHe3h4CgcAs+5zpq6mpCVKpFJ6enggICDDqfpmHV7ZVVVWBYRid1YeG+jy0QTNs2LAuL0tmWRY7d+7E5s2bcfLkSURGRhqkNmK6KGzMlFKp1JnJo9FoMGvWLG4mD5+3rtRqtU7bHDs7Ozg7O6Oqqgr9+/c32z5nndXY2AipVIqBAwfCz8/PpDZmPmll26PTLjurrq4Oubm5em3KZVkWe/bswbp165Camopx48Z16XWIeaGw6QHUajXOnj3LzeRpbW3VmcnDZ8NHhmFQWlqKmzdvgmVZ2Nraclc8Tk5OJnUCNqT6+nrk5ubCx8cHvr6+xi7ndzU1Nem9sq2urg55eXnw9/d/4ij238OyLPbt24d33nkHx44dw8SJE7v0OsT8UNj0MAzD4Pz58zh48CAOHTqEuro6xMTEQCwWIzo62uCzUx7uc+bt7Y2amhruNo5AINDp19ZTrna0J90hQ4aY5aZD7SKQqqoq7lnc761s04arvkHzzTffYNWqVThy5AgmT56s71shZsRkw2bDhg1ISUlBfn4+bGxsUFdX1+5nSkpK8Oc//xkZGRno3bs35s+fj23btlnE6qeO0Gg0+OWXX7jRCDKZDFOnToVYLMa0adP0nsnztD5nj+6MZ1lWp22OuQaPdgVWQEBAl0+6pkT7LO7hlW3az0m7sk0bNH5+fvD29u7S72FZFt9//z3eeustJCcnIyYmxsDvpPOSkpKwdetWlJeXIzg4GDt27MCECROMXVaPZbJh8/7778PJyQmlpaX4/PPP24UNwzAIDQ2Fq6sr/vGPf6C6uhqLFy/Giy++iE8++cQ4RZswjUaDvLw8bjRCSUkJpkyZApFIhBkzZnR6yax29k5HWpOwLIu6ujoueNRqNYRCIdzd3Y3er60ztJsX9XkwbsoYhuGmkVZVVcHKygpOTk6Qy+Xw8/ODj49Pl19bIpEgPj4eBw4cwKxZswxXdBcdOHAACxcuRFJSEsaPH4/du3dj7969KCws7HKgkqcz2bDR2rdvHxISEtqFTWpqKmbNmoX79+9zSy+/++47LFmyBJWVlSY7yc8UsCyLK1eucMFTVFSkM5PHxcXlqcGjT5+zhx9cy2QyKBQKLni6u19bZ2iv4vTZvGhONBoNHjx4gBs3bnBfBrQr2/r379+pz+nYsWN47bXX8M0332D27Nl8ldwpY8aMQXh4OHbt2sUdCwoKglgsxocffmjEynou87yXASA7OxshISE6a/xjYmKgUCgglUqNWJnpEwgEGDFiBNatW4eCggJcunQJEyZMwJ49ezBkyBDExcVh7969kMlkePi7iEajQXFxMW7fvo2IiIguNdQUCARwdHREQEAAxo8fj2effRb29va4ffs2zpw5g7y8PJSVlUGlUhnyLetFJpOhoKAAwcHBFhE0ANDc3Ixbt27B398fkyZN4iaL3rp1i/ucHjx4AKVS+dTXOXHiBF577TV8+eWXJhM0SqUSUqkU0dHROsejo6Nx/vx5I1XV85nm18gOqKioaHf7xtnZGTY2NqioqDBSVeZHIBAgMDAQ7777Lv72t7/h1q1bSE5OxrfffouVK1ciKiqKu9X23nvvoXfv3ti2bZtB+pwJBAL069cP/fr1g5+fHzflsqSkBIWFhbz0a+us8vJyXLt2Ta8hYOZGu6R78ODB3K0zR0dH7kuC9nMqLS3FtWvXnriyLT09HYsWLcKePXvw8ssvG+ndtCeXy8EwTLvzh7u7O507eNStYbN27VqsW7fuqT/z66+/YvTo0R16vcfd6mFZtscut+WbQCCAv78/Vq9ejcTERJSUlCA5ORkHDx7EmjVr4ODggKVLl3KbOg3977lv377w9fWFr68vWltbIZPJUFZWhuvXr3MnNDc3N16Xcj+stLQURUVFFjMWAfjfJlVvb+8nLul++HNqa2vjFhgUFRUhIyMDarUaw4cPR2JiIj755BPMnz/fJP+ffLQmOnfwq1vDZvny5Zg3b95Tf6ajDyE9PDxw8eJFnWO1tbVQqVQWMZiLbwKBAIMHD0Z8fDxOnjyJgIAAzJ07F6dOncKWLVswatQobjTCkCFDDP4/ae/evbmx0Q83oSwqKoKDgwMXPIZeyq1VUlKCW7duISwsDM7Ozrz8DlOjDZpBgwZ1uL2/nZ0dBg0ahEGDBkGlUqGiogL79u3D7t274eLigsLCQmRnZ2Ps2LEmswJR203h0auYyspKOnfwqFvDRigUQigUGuS1xo0bhw0bNqC8vJy7j56WlgZbW1tEREQY5HcQYOXKlVCpVDh79iwcHBzwzjvvQCaT4dChQ5BIJPjggw+4B6sikYiX3mB2dnbw9vaGt7c3lEolFzw3b97U2SNiqBEGd+/exZ07dxAWFgYnJyeDvKapa25uhlQqxYABA+Dn59el17C2tsbQoUNRWFiIzZs3w9fXF4cOHcKsWbMQFxeHffv2GbboLrKxsUFERAROnTql8xzp1KlTj+3ITgzDZFejlZSUoKamBkeOHMHWrVtx9uxZAIC/vz/s7e25pc/u7u7YunUrampqsGTJEojFYlr6bEDaW2aPu3XFsixqamp0ZvL4+/tzoxH4blvz6B6R3r17w83NDe7u7ly/ts5gWRZ37txBSUkJwsPDLWZFY3NzM3Jycrig6eqXhdzcXMTGxmLNmjVYsWIF9zoqlQq1tbVwc3MzZNl60S59/vTTTzFu3Djs2bMHn332Ga5evWqWG3XNgcmGzZIlS/DVV1+1O56ZmYlJkyYB+C2Qli1b1m5Tp62tbTdXS1iW1ZnJk5aWhoEDB3LBM2rUKF6DR9uvrbKyEnK5HDY2NlzwODg4/O4JlGVZ3Lx5E2VlZYiIiLCIQW/A/65oPD094e/v3+WgKSgowMyZM/H2229j9erVZvHsIykpCVu2bEF5eTlCQkKwfft2ap/DI5MNG2LeGhsbkZKSguTkZJw4cQJCoRBxcXGYPXs2Ro8ezWvwPLo5sVevXjptcx73YLioqAgymQwRERFPHJ/Q07S0tCAnJwceHh56dawuLCzE9OnTsXz5crz33ntmETSk+1HYEN41NzfjxIkTkEgkOHbsGBwcHLiZPGPHjuW1g4BGo+H6tVVWVkIgEMDV1RXu7u5c8Fy7dg3V1dWIiIjgbcGBqdHO4HFzc8PQoUO7HBA3btzA9OnTsXTpUqxfv56ChjwRhQ3pVq2trdxMniNHjsDW1haxsbEQi8W8z+TRaDRc2xyZTAaNRgNra2swDIPRo0dbzBVNa2srcnJy9A6amzdvYvr06fjDH/6ALVu2mMxqM2KaKGyI0SiVSmRkZHAzeQBwM3mee+45XjdyMgyDvLw8NDY2olevXjr92gw5aMzUaING36mid+/exbRp0yAWi7Fjxw4KGvK7KGx44uPjg3v37ukcW716NTZt2mSkikybWq3GTz/9xM3kaWtrw6xZsyASifD8888bdCOnRqPB5cuX0dLSgoiICFhbW6OxsZG74mlra9OZcMnn1VZ3amtrQ05ODvr374/AwMAuB839+/cRExODadOmISkpiYKGdAiFDU98fHywdOlSvP7669wxe3t7i1nlpA+GYXDu3DluJk99fT33LXrq1Kl6PVdhGAYFBQVQKpUIDw9vFyQsy6K5uRkymQyVlZVobm5G//79uXYs5jq+Qhs0Li4uCAoK6nLQlJeXIyYmBhMnTsRnn33WY68AieFR2PDEx8cHCQkJSEhIMHYpZk2j0eDixYvcTJ7KykpER0dDLBYjJiamUzN5GIZBfn4+GIZBWFhYh65YtH3AtBMunZ2duZVt5rLEvq2tDVKpFM7OznoFjUwmw/Tp0xEZGYl9+/ZR0PzX/v37sWLFCpSVlen8NzFnzhz07dsX+/fvN2J1poPChic+Pj5QKBRQKpUYNGgQXn75Zbz99ttm+83YFGg0GuTm5nKjEe7fv48pU6ZALBZjxowZT91Po1arkZeXB4FAgNDQ0C6NMmhtbeWCp76+Ho6OjlzwdHS0cndTKBTIycmBk5MThg8f3uWgqaqqwsyZMxEcHIxvv/3WZEdBGENrays8PT3x2WefcQ1H5XI5BgwYgBMnTtBE0v+isOHJ9u3bER4eDmdnZ/zyyy945513IBKJsHfvXmOX1iNoNBqdmTzFxcV4/vnnIRKJ2s3kaWlpweXLl2FtbY1Ro0YZ5Bu5QqHggqe2thb9+vXTGa1sCrTjNhwcHBAcHNzloKmpqcGMGTPg5+eH77//vsc8wzKkZcuW4e7duzh+/DgA4J///Cc+/vhj3Lx5k5aD/xeFTSfo07U6OTkZL730EuRyucV0EO4uLMvi+vXrXPBcuXIFzz33HEQiEZ599lm8+uqrePPNNxEfH8/Lw2ylUqnTNqdv375c9wI+umN3tKacnBy9g6aurg6xsbHw9PSERCKhK/MnyMvLQ2RkJO7du4cBAwYgNDQUc+bMwZo1a4xdmsmgsOkEuVwOuVz+1J/x8fF57MqpBw8eYODAgbhw4QLGjBnDV4kWj2VZ3Lp1CwcPHsSBAwdw48YN+Pv7Y+HChZg9ezY8PT15PfmrVCqdtjl2dnZc8PTr169bgkcbNP369UNISEiXf2dDQwPEYjEcHR1x+PDhbhvtYK4iIiLw0ksvISYmBpGRkbh79y4GDRpk7LJMBoVNNzl27BhiY2Nx7949mnHeDUpLS/HCCy8gODgYY8eOxZEjR3DhwgU8++yzEIlEEIlEGDRoEK8nf4ZhIJfLIZPJIJfLYW1tzQWPo6MjL79bO4Wyb9++CAkJ6fKVXFNTE1588UXY2NggJSXFZJ9JmZJdu3Zh+/btiI6ORnFxMU6ePGnskkwKhQ0PsrOzceHCBUyePBmOjo749ddfsWLFCowePRqHDx82dnk9HsuymDhxIoKCgvDpp5/CysoKLMviwYMHkEgkkEgkOHfuHEJDQ7nRCL6+vrwHz8Ntcx7u1+bk5GSQ23vaoOnTpw9GjBjR5ddsaWnBSy+9BJZlkZKSQsv1O6ihoQGenp5Qq9XYv38/5s6da+ySTAqFDQ9yc3OxbNkyXL9+HQqFAoMHD8a8efOQmJhoMb23jK2srOyJt8xYloVMJsOPP/4IiUSCrKwsBAcHcx2q9Wnh0hEajQa1tbWQyWSoqqoCy7Jc8Li4uHQpJFQqFaRSKXr37q1X0LS1tWHu3LlcPztLGbNgKIsWLUJKSkq7ZdCEwoZYOJZlUV1dzc3kSU9PR0BAANehOigoiNcd8izLoq6ujttEyjAMXF1d4ebmhv79+3do5Zw2aOzs7DBy5Mgu16tQKLBgwQLI5XKkpaVZzOA4Q5o6dSqCgoLw8ccfG7sUk0NhQ8h/aWfyHDlyhJvJ4+3tzQWPPifyjv7+hoYGLniUSqVO25zH7W1RqVTIzc2FjY2NXjODlEolFi1ahPv37yM9PR0uLi76vh2LUlNTg7S0NCxYsACFhYUYNmyYsUsyORQ2hDxBQ0ODzkweNzc3LngiIiJ4D56mpiYueFpbW3Xa5lhbW0OtViM3N5fbP9TVelQqFZYuXYobN24gIyMDrq6uBn43+jP1XoM+Pj6ora3FmjVrsGrVKmOXY5IobAjpgObmZqSmpkIikSAlJQWOjo7cTJ4xY8bw3rqlqamJW1zQ1NQEZ2dntLa2ws7ODmFhYV3+/Wq1GvHx8bh06RIyMzPh7u5u4MoNg3oNmj8KG0I6qbW1FWlpaZBIJDh69Cjs7Ox0ZvLw3cqlsbER+fn5UKvVYBgGTk5O3AKDzuyFYRgGy5cvR3Z2NrKysuDl5cVj1fqhXoPmj8LGgiUlJWHr1q0oLy9HcHAwduzYgQkTJhi7LLOiVCpx+vRpSCQSHD58GAKBADNnzsTs2bMxceJEg++41/Z4s7KyQmhoKFQqFTcaob6+Hg4ODtxenqftjdFoNEhISEBmZiYyMzNNfu8X9Ro0fxQ2FurAgQNYuHAhkpKSMH78eOzevRt79+5FYWGhyZ94TJVKpeJm8hw+fBgKhQIzZ86EWCzG5MmT9d6Brx34pm0m+uitM4VCgaqqKshkMtTW1sLe3h7u7u7t+rVpNBokJiYiJSUFWVlZ8PX11auu7kC9Bs0fhY2FGjNmDMLDw7Fr1y7uWFBQEMRiMT788EMjVtYzMAyDn3/+mZvJ09DQgOnTp0MsFmPKlCmd3m+lDRoAHXpGo1KpuOCprq6GQCBAamoq5syZg8OHD0MikSAzMxMBAQFdfo/6ol6DloXCxgIplUr06dMHP/zwA2bPns0d/+tf/4r8/HycOXPGiNX1PBqNBhcuXOCCp6qqSmcmz+895NbO4dFoNAgPD+/0YgC1Wo3Lly9jzZo1OH/+PABg4cKFeOONNzB69GijdSWmXoOWhYZSWCC5XA6GYdqtPHJ3d0dFRYWRquq5rKysEBUVhaioKGzbtg1SqRTJycn4+9//jvj4eEyZMgUikeixM3kYhsGlS5eg0Wi6vOrsmWeeQWhoKKKionD9+nUkJiYiJycHU6ZMgZOTE44fP47g4GBDvuUOEQqFEAqFXfpntVd5np6ehiyJ8IjCxoI9+o2WZVmavcEzKysrREZGIjIyEhs3bkRBQQGSk5Px0UcfYdmyZXjhhRcQFxeHWbNmwcbGBm+88QYWLFiAmJiYLq9yY1kWH330EXbt2oWMjAyMGjUKwG/PeNLT0zFkyBBDvkWDe1Kvwbi4OHq+aEboNpoFottopodlWVy7do2byXP16lUMHjwYAoEABw8ehL+/f5e+CLAsi08++QRbtmxBWlraY59/mDrqNdgzUNhYqDFjxiAiIgJJSUncseHDh0MkEtECASNTKBSYMWMGioqKMGDAAEilUkRFRUEsFiMuLg4eHh4dCh6WZbF792588MEHOHHiBMaOHdsN1RPyePz12yAmbeXKldi7dy+++OILXLt2DStWrEBJSQnefPNNY5dm0RiGwdy5c1FfX4/Lly8jOzsbRUVFiI2NxcGDBzFs2DBER0dj586duH//Pp70XZFlWXz55ZdYu3Ytjh49SkFDjI6ubCxYUlIStmzZgvLycoSEhGD79u2YOHGiscuyeJ9//jlmz57drhkmy7IoLS3VmckTHh7OzeTx8fGBQCAAy7L4+uuv8fbbb+Po0aOYNGmScd4IIQ+hsCHEDLEsi4qKCm4mz5kzZxASEgKRSARbW1ts2LABEokE0dHRxi6VEAAUNoSYvYdn8vz73/9GRkYGvvnmGyxYsMDYpRHCobAhpAfRjr8eOHCgsUshRAeFDSGEEN7RajRCCCG8o7AhhBDCOwobYjbWrl0LgUCg85eHh4exyyKEdAD1RiNmJTg4GKdPn+b+nu9xzIQQw6CwIWblmWeeoasZQswQ3UYjZqW4uBheXl7w9fXFvHnzcPv2bWOXRAjpAFr6TMxGamoqWlpaMHToUMhkMqxfvx7Xr1/H1atXaVojISaOwoaYrebmZvj5+SExMRErV640djmEkKeg22g9QFVVFTw8PLBx40bu2MWLF2FjY4O0tDQjVsavvn37YsSIESguLjZ2KYSQ30Fh0wO4urriiy++wNq1a5GTk4Ompia8+uqrWLZsWY9uxKhQKHDt2jUaDdzNNmzYgKioKPTp0wdOTk6P/ZmSkhLExsaib9++EAqF+Mtf/gKlUtm9hRKTQqvReogZM2bg9ddfx4IFCxAZGQk7Ozts2rTJ2GUZ1KpVqxAbGwtvb29UVlZi/fr1aGhowOLFi41dmkVRKpV4+eWXMW7cOHz++eft/pxhGMycOROurq74+eefUV1djcWLF3NTQ4mFYkmP0dLSwg4ZMoS1trZmL126ZOxyDG7u3Lmsp6cna21tzXp5ebEvvvgie/XqVWOXZbG+/PJL1tHRsd3x48ePs1ZWVuyDBw+4Y//5z39YW1tbtr6+vhsrJKaErmx6kNu3b6OsrAwajQb37t3DyJEjjV2SQX333XfGLoF0QHZ2NkJCQuDl5cUdi4mJgUKhgFQqxeTJk41YHTEWCpseQqlUYsGCBZg7dy4CAwOxdOlSXL58Ge7u7sYujViYioqKdv/dOTs7w8bGBhUVFUaqihgbLRDoId59913U19fj448/RmJiIoKCgrB06VJjl0XMxOP6zj36V05OTodfTyAQtDvGsuxjjxPLQFc2PUBWVhZ27NiBzMxMODg4AAC+/vprjBw5Ert27cKf/vQnI1dITN3y5csxb968p/6Mj49Ph17Lw8MDFy9e1DlWW1sLlUpFV9oWjMKmB5g0aRJUKpXOMW9vb9TV1RmnIGJ2hEIhhEKhQV5r3Lhx2LBhA8rLy7ll6WlpabC1tUVERIRBfgcxP3QbjRAe/PTTT4iNjYWXlxcEAgEOHTqk8+csy2Lt2rXw8vJC7969MWnSJFy9etU4xXZSSUkJ8vPzUVJSAoZhkJ+fj/z8fDQ1NQEAoqOjMXz4cCxcuBB5eXlIT0/HqlWr8Prrr3NX3sTyUNgQwoPm5maMGjUKO3fufOyfb9myBR999BF27tyJX3/9FR4eHpg6dSoaGxu7udLOe++99xAWFob3338fTU1NCAsLQ1hYGPdMp1evXkhJSYGdnR3Gjx+PV155BWKxGNu2bTNy5cSYqDcaITwTCAT48ccfIRaLAfx2VePl5YWEhASsXr0awG/dENzd3bF582bEx8cbsVpC+EFXNoR0szt37qCiokKnlZCtrS2ee+45nD9/3oiVEcIfChtCupl2r8mjK7Pc3d1pHwrpsShsCDGSR/ec0D4U0pNR2BDSzbRjrR+9iqmsrKR9KKTHorAhpJv5+vrCw8MDp06d4o4plUqcOXMGUVFRRqyMEP7Qpk5CeNDU1ISbN29yf3/nzh3k5+fDxcUF3t7eSEhIwMaNGxEQEICAgABs3LgRffr0wfz5841YNSH8oaXPhPAgKyvrsd2NFy9ejH379oFlWaxbtw67d+9GbW0txowZg3/9618ICQkxQrWE8I/ChhBCCO/omQ0hhBDeUdgQQgjhHYUNIYQQ3lHYEEII4R2FDSGEEN5R2BBCCOEdhQ0hhBDeUdgQQgjhHYUNIYQQ3lHYEEII4R2FDSGEEN5R2BBCCOHd/wNKpnRv+V6gsQAAAABJRU5ErkJggg==", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "x_min: -2.5000000005092593\n", - "y_min: -0.9999999987777783\n" - ] - } - ], - "source": [ - "# Set the learning rate and initial value\n", - "learning_rate = 0.1\n", - "max_iter = 100\n", - "x_init = -5\n", - "y_init = 5\n", - "\n", - "# Run two-dimensional gradient descent function\n", - "x_min, y_min, x_history, y_history = gradient_descent(learning_rate, max_iter, x_init, y_init)\n", - "\n", - "# Draw the target function and the process of gradient descent\n", - "x = np.linspace(-10, 10, 100)\n", - "y = np.linspace(-10, 10, 100)\n", - "X, Y = np.meshgrid(x, y)\n", - "Z = f(X, Y)\n", - "\n", - "fig = plt.figure()\n", - "ax = fig.add_subplot(111, projection='3d')\n", - "ax.plot_surface(X, Y, Z, cmap='viridis', alpha=0.8)\n", - "ax.plot(x_history, y_history, f(np.array(x_history), np.array(y_history)), 'ro-', label='Gradient Descent')\n", - "ax.set_xlabel('x')\n", - "ax.set_ylabel('y')\n", - "ax.set_zlabel('f(x, y)')\n", - "ax.legend()\n", - "ax.set_title('Two-Dimensional Gradient Descent')\n", - "plt.show()\n", - "\n", - "print('x_min:', x_min)\n", - "print('y_min:', y_min)\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.10.9" - }, - "orig_nbformat": 4 - }, - "nbformat": 4, - "nbformat_minor": 2 -} diff --git a/_sources/assignments/ml-fundamentals/parameter-play.ipynb b/_sources/assignments/ml-fundamentals/parameter-play.ipynb index 2093040996..b04c71b96d 100644 --- a/_sources/assignments/ml-fundamentals/parameter-play.ipynb +++ b/_sources/assignments/ml-fundamentals/parameter-play.ipynb @@ -2,7 +2,7 @@ "cells": [ { "cell_type": "markdown", - "id": "c5f3a3a3", + "id": "77832121", "metadata": {}, "source": [ "# Parameter play\n", diff --git a/_sources/assignments/ml-fundamentals/regression-with-scikit-learn.ipynb b/_sources/assignments/ml-fundamentals/regression-with-scikit-learn.ipynb index f252d6f4e6..4113d54808 100644 --- a/_sources/assignments/ml-fundamentals/regression-with-scikit-learn.ipynb +++ b/_sources/assignments/ml-fundamentals/regression-with-scikit-learn.ipynb @@ -2,7 +2,7 @@ "cells": [ { "cell_type": "markdown", - "id": "f76233d0", + "id": "304850dd", "metadata": {}, "source": [ "# Regression with Scikit-learn\n", diff --git a/_sources/assignments/ml-fundamentals/retrying-some-regression.ipynb b/_sources/assignments/ml-fundamentals/retrying-some-regression.ipynb index 9133ed89df..bbff63991c 100644 --- a/_sources/assignments/ml-fundamentals/retrying-some-regression.ipynb +++ b/_sources/assignments/ml-fundamentals/retrying-some-regression.ipynb @@ -2,7 +2,7 @@ "cells": [ { "cell_type": "markdown", - "id": "8a49419f", + "id": "7798e2d4", "metadata": {}, "source": [ "# Retrying some regression\n", diff --git a/_sources/data-science/data-science-in-the-wild.ipynb b/_sources/data-science/data-science-in-the-wild.ipynb index 0ae49d7650..6a1f23755f 100644 --- a/_sources/data-science/data-science-in-the-wild.ipynb +++ b/_sources/data-science/data-science-in-the-wild.ipynb @@ -2,7 +2,7 @@ "cells": [ { "cell_type": "markdown", - "id": "c6629ea5", + "id": "4711b4dd", "metadata": {}, "source": [ "# Data Science in the real world\n", diff --git a/_sources/data-science/data-science-lifecycle/analyzing.ipynb b/_sources/data-science/data-science-lifecycle/analyzing.ipynb index bf93021992..c45d86aa10 100644 --- a/_sources/data-science/data-science-lifecycle/analyzing.ipynb +++ b/_sources/data-science/data-science-lifecycle/analyzing.ipynb @@ -2,7 +2,7 @@ "cells": [ { "cell_type": "markdown", - "id": "0282a4b2", + "id": "9f8e437d", "metadata": {}, "source": [ "# Analyzing\n", diff --git a/_sources/data-science/data-science-lifecycle/communication.ipynb b/_sources/data-science/data-science-lifecycle/communication.ipynb index 5096630609..1ea8616853 100644 --- a/_sources/data-science/data-science-lifecycle/communication.ipynb +++ b/_sources/data-science/data-science-lifecycle/communication.ipynb @@ -2,7 +2,7 @@ "cells": [ { "cell_type": "markdown", - "id": "9634469f", + "id": "74fb713d", "metadata": {}, "source": [ "# Communication\n", diff --git a/_sources/data-science/data-science-lifecycle/data-science-lifecycle.ipynb b/_sources/data-science/data-science-lifecycle/data-science-lifecycle.ipynb index eaad85eefb..545b88d296 100644 --- a/_sources/data-science/data-science-lifecycle/data-science-lifecycle.ipynb +++ b/_sources/data-science/data-science-lifecycle/data-science-lifecycle.ipynb @@ -2,7 +2,7 @@ "cells": [ { "cell_type": "markdown", - "id": "bf82b6ba", + "id": "97a4e306", "metadata": {}, "source": [ "# Data Science lifecycle\n", diff --git a/_sources/data-science/data-science-lifecycle/introduction.ipynb b/_sources/data-science/data-science-lifecycle/introduction.ipynb index 527cd00697..a47666df39 100644 --- a/_sources/data-science/data-science-lifecycle/introduction.ipynb +++ b/_sources/data-science/data-science-lifecycle/introduction.ipynb @@ -2,7 +2,7 @@ "cells": [ { "cell_type": "markdown", - "id": "bda42245", + "id": "bb0c4c27", "metadata": {}, "source": [ "# Introduction to the Data Science lifecycle\n", diff --git a/_sources/data-science/introduction/data-science-ethics.ipynb b/_sources/data-science/introduction/data-science-ethics.ipynb index f727f84317..1afff4e80b 100644 --- a/_sources/data-science/introduction/data-science-ethics.ipynb +++ b/_sources/data-science/introduction/data-science-ethics.ipynb @@ -2,8 +2,34 @@ "cells": [ { "cell_type": "markdown", - "id": "93794650", - "metadata": {}, + "id": "c85b489d-2fc5-485c-80c9-85411cddf3e3", + "metadata": { + "tags": [ + "hide-cell" + ] + }, + "source": [ + "---\n", + "jupytext:\n", + " cell_metadata_filter: -all\n", + " formats: md:myst\n", + " text_representation:\n", + " extension: .md\n", + " format_name: myst\n", + " format_version: 0.13\n", + " jupytext_version: 1.11.5\n", + "kernelspec:\n", + " display_name: Python 3\n", + " language: python\n", + " name: python3\n" + ] + }, + { + "cell_type": "markdown", + "id": "4ffb7bc3", + "metadata": { + "tags": [] + }, "source": [ "# Data Science ethics\n", "\n", @@ -13,15 +39,38 @@ "\n", "Trends also indicate that we will create and consume over [180 zettabytes](https://www.statista.com/statistics/871513/worldwide-data-created/) of data by 2025. As **Data Scientists**, this gives us unprecedented levels of access to personal data. This means we can build behavioral profiles of users and influence decision-making in ways that create an [illusion of free choice](https://www.verywellmind.com/what-is-the-illusion-of-choice-5224973) while potentially nudging users towards outcomes we prefer. It also raises broader questions on data privacy and user protections.\n", "\n", - "Data ethics are now _necessary guardrails_ for data science and engineering, helping us minimize potential harms and unintended consequences from our data-driven actions. The [Gartner Hype Cycle for AI](https://www.gartner.com/smarterwithgartner/2-megatrends-dominate-the-gartner-hype-cycle-for-artificial-intelligence-2020/) identifies relevant trends in digital ethics, responsible AI, and AI governance as key drivers for larger megatrends around the _democratization_ and _industrialization_ of AI.\n", - "\n", - "```{figure} ../../../images/hype-cycle-for-ai.png\n", + "Data ethics are now _necessary guardrails_ for data science and engineering, helping us minimize potential harms and unintended consequences from our data-driven actions. The [Gartner Hype Cycle for AI](https://www.gartner.com/smarterwithgartner/2-megatrends-dominate-the-gartner-hype-cycle-for-artificial-intelligence-2020/) identifies relevant trends in digital ethics, responsible AI, and AI governance as key drivers for larger megatrends around the _democratization_ and _industrialization_ of AI." + ] + }, + { + "cell_type": "markdown", + "id": "597df7c8", + "metadata": { + "attributes": { + "classes": [ + "./../../images/hype-cycle-for-ai.png" + ], + "id": "" + }, + "jp-MarkdownHeadingCollapsed": true, + "tags": [] + }, + "source": [ + ":::{figure} https://static-1300131294.cos.ap-shanghai.myqcloud.com/images/hype-cycle-for-ai.png\n", "---\n", "name: 'Gartner Hype Cycle for AI - 2020'\n", "---\n", - "Gartner Hype Cycle for AI - 2020{cite}`MishraKamalGartner2021`\n", - "```\n", - "\n", + "Gartner Hype Cycle for AI - 2020\n", + ":::" + ] + }, + { + "cell_type": "markdown", + "id": "98009b0b", + "metadata": { + "tags": [] + }, + "source": [ "In this section, we'll explore the fascinating area of data ethics - from core concepts and challenges, to case studies and applied AI concepts like governance - that help establish an ethics culture in teams and organizations that work with data and AI.\n", "\n", "## Basic definitions\n", @@ -46,16 +95,29 @@ "\n", "Every data ethics strategy begins by defining _ethical principles_ - the \"shared values\" that describe acceptable behaviors, and guide compliant actions, in our data & AI projects. You can define these at an individual or team level. However, most large organizations outline these in an _ethical AI_ mission statement or framework that is defined at corporate levels and enforced consistently across all teams.\n", "\n", - "**Example:** Microsoft's [Responsible AI](https://www.microsoft.com/en-us/ai/responsible-ai) mission statement reads: _\"We are committed to the advancement of AI-driven by ethical principles that put people first\"_ - identifying 6 ethical principles in the framework below:\n", - "\n", - "```{figure} https://docs.microsoft.com/en-gb/azure/cognitive-services/personalizer/media/ethics-and-responsible-use/ai-values-future-computed.png\n", + "**Example:** Microsoft's [Responsible AI](https://www.microsoft.com/en-us/ai/responsible-ai) mission statement reads: _\"We are committed to the advancement of AI-driven by ethical principles that put people first\"_ - identifying 6 ethical principles in the framework below:" + ] + }, + { + "cell_type": "markdown", + "id": "07848ddb", + "metadata": { + "tags": [] + }, + "source": [ + ":::{figure} https://docs.microsoft.com/en-gb/azure/cognitive-services/personalizer/media/ethics-and-responsible-use/ai-values-future-computed.png\n", "---\n", "name: 'Responsible AI at Microsoft'\n", "---\n", - "Responsible AI at Microsoft{cite}`JcodellaEthicsNodate`\n", - "\n", - "```\n", - "\n", + "Responsible AI at Microsoft\n", + ":::" + ] + }, + { + "cell_type": "markdown", + "id": "311efc7b", + "metadata": {}, + "source": [ "Let's briefly explore these principles. _Transparency_ and _accountability_ are foundational values that other principles built upon - so let's begin there:\n", "\n", "* **Accountability** makes practitioners _responsible_ for their data & AI operations, and compliance with these ethical principles.\n", @@ -63,16 +125,50 @@ "* **Fairness** - focuses on ensuring AI treats _all people_ fairly, addressing any systemic or implicit socio-technical biases in data and systems.\n", "* **Reliability & Safety** - ensures that AI behaves _consistently_ with defined values, minimizing potential harms or unintended consequences.\n", "* **Privacy & Security** - is about understanding data lineage, and providing _data privacy and related protections_ to users.\n", - "* **Inclusiveness** - is about designing AI solutions with intention, and adapting them to meet a _broad range of human needs_ & capabilities.\n", - "\n", - "```{seealso}\n", + "* **Inclusiveness** - is about designing AI solutions with intention, and adapting them to meet a _broad range of human needs_ & capabilities." + ] + }, + { + "cell_type": "markdown", + "id": "d71c0f63", + "metadata": { + "attributes": { + "classes": [ + "seealso" + ], + "id": "" + } + }, + "source": [ + ":::{seealso}\n", "Responsible AI principles from Microsoft. (n.d.). Microsoft. Retrieved 1 October 2022, from https://www.microsoft.com/en-us/ai/responsible-ai\n", - "```\n", - "\n", - "```{seealso}\n", + ":::" + ] + }, + { + "cell_type": "markdown", + "id": "34d78c4c", + "metadata": { + "attributes": { + "classes": [ + "seealso" + ], + "id": "" + } + }, + "source": [ + ":::{seealso}\n", "🚨 Think about what your data ethics mission statement could be. Explore ethical AI frameworks from other organizations - here are examples from [IBM](https://www.ibm.com/cloud/learn/ai-ethics), [Google](https://ai.google/principles) ,and [Facebook](https://ai.facebook.com/blog/facebooks-five-pillars-of-responsible-ai/). What shared values do they have in common? How do these principles relate to the AI product or industry they operate in?\n", - "```\n", - "\n", + ":::" + ] + }, + { + "cell_type": "markdown", + "id": "ae2d55c9", + "metadata": { + "tags": [] + }, + "source": [ "### Ethics challenges\n", "\n", "Once we have ethical principles defined, the next step is to evaluate our data and AI actions to see if they align with those shared values. Think about your actions in two categories: _data collection_ and _algorithm design_.\n", @@ -204,19 +300,53 @@ "| **Algorithmic fairness** | 2018 - The MIT [Gender Shades Study](http://gendershades.org/overview.html) evaluated the accuracy of gender classification AI products, exposing gaps in accuracy for women and persons of color. A [2019 Apple Card](https://www.wired.com/story/the-apple-card-didnt-see-genderand-thats-the-problem/) seemed to offer less credit to women than men. Both illustrated issues in algorithmic bias leading to socio-economic harms.|\n", "| **Data misrepresentation** | 2020 - The [Georgia Department of Public Health released COVID-19 charts](https://www.vox.com/covid-19-coronavirus-us-response-trump/2020/5/18/21262265/georgia-covid-19-cases-declining-reopening) that appeared to mislead citizens about trends in confirmed cases with non-chronological ordering on the x-axis. This illustrates misrepresentation through visualization tricks. |\n", "| **Illusion of free choice** | 2020 - Learning app [ABCmouse paid $10M to settle an FTC complaint](https://www.washingtonpost.com/business/2020/09/04/abcmouse-10-million-ftc-settlement/) where parents were trapped into paying for subscriptions they couldn't cancel. This illustrates dark patterns in choice architectures, where users were nudged towards potentially harmful choices. |\n", - "| **Data privacy & user rights** | 2021 - Facebook [Data Breach](https://www.npr.org/2021/04/09/986005820/after-data-breach-exposes-530-million-facebook-says-it-will-not-notify-users) exposed data from 530M users, resulting in a $5B settlement to the FTC. It however refused to notify users of the breach violating user rights around data transparency and access. |\n", - "\n", - "```{seealso}\n", + "| **Data privacy & user rights** | 2021 - Facebook [Data Breach](https://www.npr.org/2021/04/09/986005820/after-data-breach-exposes-530-million-facebook-says-it-will-not-notify-users) exposed data from 530M users, resulting in a $5B settlement to the FTC. It however refused to notify users of the breach violating user rights around data transparency and access. |" + ] + }, + { + "cell_type": "markdown", + "id": "6cd699fd", + "metadata": { + "attributes": { + "classes": [ + "seealso" + ], + "id": "" + } + }, + "source": [ + ":::{seealso}\n", "Want to explore more case studies? Check out these resources:\n", "* [Ethics Unwrapped](https://ethicsunwrapped.utexas.edu/case-studies) - ethics dilemmas across diverse industries.\n", "* [Data Science Ethics course](https://www.coursera.org/learn/data-science-ethics#syllabus) - landmark case studies explored.\n", "* [Where things have gone wrong](https://deon.drivendata.org/examples/) - deon checklist with examples\n", - "```\n", - "\n", - "```{note}\n", + ":::" + ] + }, + { + "cell_type": "markdown", + "id": "53f0abbc", + "metadata": { + "attributes": { + "classes": [ + "note" + ], + "id": "" + } + }, + "source": [ + ":::{note}\n", "🚨 Think about the case studies you've seen - have you experienced, or been affected by, a similar ethical challenge in your life? Can you think of at least one other case study that illustrates one of the ethical challenges we've discussed in this section?\n", - "```\n", - "\n", + ":::" + ] + }, + { + "cell_type": "markdown", + "id": "312d4d5d", + "metadata": { + "tags": [] + }, + "source": [ "## Applied ethics\n", "\n", "We've talked about ethics concepts, challenges, and case studies in real-world contexts. But how do we get started _applying_ ethical principles and practices in our projects? And how do we _operationalize_ these practices for better governance? Let's explore some real-world solutions:\n", @@ -229,12 +359,31 @@ "\n", "* [Oxford Munich](http://www.code-of-ethics.org/code-of-conduct/) Code of Ethics\n", "* [Data Science Association](http://datascienceassn.org/code-of-conduct.html) Code of Conduct (created 2013)\n", - "* [ACM Code of Ethics and Professional Conduct](https://www.acm.org/code-of-ethics) (since 1993)\n", - "\n", - "```{note}\n", + "* [ACM Code of Ethics and Professional Conduct](https://www.acm.org/code-of-ethics) (since 1993)" + ] + }, + { + "cell_type": "markdown", + "id": "012bc6ba", + "metadata": { + "attributes": { + "classes": [ + "note" + ], + "id": "" + } + }, + "source": [ + ":::{note}\n", "🚨 Do you belong to a professional engineering or data science organization? Explore their site to see if they define a professional code of ethics. What does this say about their ethical principles? How are they \"incentivizing\" members to follow the code?\n", - "```\n", - "\n", + ":::" + ] + }, + { + "cell_type": "markdown", + "id": "10c57020", + "metadata": {}, + "source": [ "### Ethics checklists\n", "\n", "While professional codes define required _ethical behavior_ from practitioners, they [have known limitations](https://resources.oreilly.com/examples/0636920203964/blob/master/of_oaths_and_checklists.md) in enforcement, particularly in large-scale projects. Instead, many data Science experts [advocate for checklists](https://resources.oreilly.com/examples/0636920203964/blob/master/of_oaths_and_checklists.md), that can **connect principles to practices** in more deterministic and actionable ways.\n", @@ -273,7 +422,7 @@ "\n", "## Your turn! 🚀\n", "\n", - "[Write a data ethics case study](../../assignments/data-science/write-a-data-ethics-case-study.md)\n", + "[Write a data ethics case study](https://static-1300131294.cos.qp-shanghai.myqcloud.com/assignments/data-science/write-a-data-ethics-case-study.md)\n", "\n", "## Self study\n", "\n", @@ -289,27 +438,30 @@ "\n", "Thanks to Microsoft for creating the open-source course [Data Science for Beginners](https://github.com/microsoft/Data-Science-For-Beginners). It inspires the majority of the content in this chapter.\n", "\n", - "---\n", - "\n", - "```{bibliography}\n", + "---" + ] + }, + { + "cell_type": "markdown", + "id": "04941c48", + "metadata": { + "attributes": { + "classes": [ + "bibliography" + ], + "id": "" + } + }, + "source": [ + ":::{bibliography}\n", ":filter: docname in docnames\n", - "```" + ":::" ] } ], "metadata": { - "jupytext": { - "cell_metadata_filter": "-all", - "formats": "md:myst", - "text_representation": { - "extension": ".md", - "format_name": "myst", - "format_version": 0.13, - "jupytext_version": "1.11.5" - } - }, "kernelspec": { - "display_name": "Python 3", + "display_name": "Python 3 (ipykernel)", "language": "python", "name": "python3" }, @@ -323,12 +475,9 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.9.18" - }, - "source_map": [ - 14 - ] + "version": "3.11.4" + } }, "nbformat": 4, "nbformat_minor": 5 -} \ No newline at end of file +} diff --git a/_sources/data-science/introduction/data-science-ethics.md b/_sources/data-science/introduction/data-science-ethics.md deleted file mode 100644 index 1cfd17c238..0000000000 --- a/_sources/data-science/introduction/data-science-ethics.md +++ /dev/null @@ -1,304 +0,0 @@ ---- -jupytext: - cell_metadata_filter: -all - formats: md:myst - text_representation: - extension: .md - format_name: myst - format_version: 0.13 - jupytext_version: 1.11.5 -kernelspec: - display_name: Python 3 - language: python - name: python3 ---- - -# Data Science ethics - -We are all data citizens living in a datafied world. - -Market trends tell us that by 2022, 1-in-3 large organizations will buy and sell their data through online [Marketplaces and Exchanges](https://www.gartner.com/smarterwithgartner/gartner-top-10-trends-in-data-and-analytics-for-2020/). As **app developers**, we'll find it easier and cheaper to integrate data-driven insights and algorithm-driven automation into daily user experiences. But as AI becomes pervasive, we'll also need to understand the potential harms caused by the [weaponization](https://www.youtube.com/watch?v=TQHs8SA1qpk) of such algorithms at scale. - -Trends also indicate that we will create and consume over [180 zettabytes](https://www.statista.com/statistics/871513/worldwide-data-created/) of data by 2025. As **Data Scientists**, this gives us unprecedented levels of access to personal data. This means we can build behavioral profiles of users and influence decision-making in ways that create an [illusion of free choice](https://www.verywellmind.com/what-is-the-illusion-of-choice-5224973) while potentially nudging users towards outcomes we prefer. It also raises broader questions on data privacy and user protections. - -Data ethics are now _necessary guardrails_ for data science and engineering, helping us minimize potential harms and unintended consequences from our data-driven actions. The [Gartner Hype Cycle for AI](https://www.gartner.com/smarterwithgartner/2-megatrends-dominate-the-gartner-hype-cycle-for-artificial-intelligence-2020/) identifies relevant trends in digital ethics, responsible AI, and AI governance as key drivers for larger megatrends around the _democratization_ and _industrialization_ of AI. - -```{figure} ../../../images/hype-cycle-for-ai.png ---- -name: 'Gartner Hype Cycle for AI - 2020' ---- -Gartner Hype Cycle for AI - 2020{cite}`MishraKamalGartner2021` -``` - -In this section, we'll explore the fascinating area of data ethics - from core concepts and challenges, to case studies and applied AI concepts like governance - that help establish an ethics culture in teams and organizations that work with data and AI. - -## Basic definitions - -Let's start by understanding the basic terminology. - -The word "ethics" comes from the [Greek word "ethikos"](https://en.wikipedia.org/wiki/Ethics) (and its root "ethos") meaning _character or moral nature_. - -**Ethics** is about the shared values and moral principles that govern our behavior in society. Ethics is based not on laws but on widely accepted norms of what is "right vs. wrong". However, ethical considerations can influence corporate governance initiatives and government regulations that create more incentives for compliance. - -**Data ethics** is a [new branch of ethics](https://royalsocietypublishing.org/doi/full/10.1098/rsta.2016.0360#sec-1) that "studies and evaluates moral problems related to _data, algorithms and corresponding practices_". Here, **"data"** focuses on actions related to generation, recording, curation, processing dissemination, sharing, and usage, **"algorithms"** focuses on AI, agents, Machine Learning, and robots, and **"practices"** focuses on topics like responsible innovation, programming, hacking and ethics codes. - -**Applied ethics** is the [practical application of moral considerations](https://en.wikipedia.org/wiki/Applied_ethics). It's the process of actively investigating ethical issues in the context of _real-world actions, products, and processes_, and taking corrective measures to make that these remain aligned with our defined ethical values. - -**Ethics culture** is about [_operationalizing_ applied ethics](https://hbr.org/2019/05/how-to-design-an-ethical-organization) to make sure that our ethical principles and practices are adopted in a consistent and scalable manner across the entire organization. Successful ethics cultures define organization-wide ethical principles, provide meaningful incentives for compliance, and reinforce ethics norms by encouraging and amplifying desired behaviors at every level of the organization. - -## Ethics concepts - -In this section, we'll discuss concepts like **shared values** (principles) and **ethical challenges** (problems) for data ethics - and explore **case studies** that help you understand these concepts in real-world contexts. - -### Ethics principles - -Every data ethics strategy begins by defining _ethical principles_ - the "shared values" that describe acceptable behaviors, and guide compliant actions, in our data & AI projects. You can define these at an individual or team level. However, most large organizations outline these in an _ethical AI_ mission statement or framework that is defined at corporate levels and enforced consistently across all teams. - -**Example:** Microsoft's [Responsible AI](https://www.microsoft.com/en-us/ai/responsible-ai) mission statement reads: _"We are committed to the advancement of AI-driven by ethical principles that put people first"_ - identifying 6 ethical principles in the framework below: - -```{figure} https://docs.microsoft.com/en-gb/azure/cognitive-services/personalizer/media/ethics-and-responsible-use/ai-values-future-computed.png ---- -name: 'Responsible AI at Microsoft' ---- -Responsible AI at Microsoft{cite}`JcodellaEthicsNodate` - -``` - -Let's briefly explore these principles. _Transparency_ and _accountability_ are foundational values that other principles built upon - so let's begin there: - -* **Accountability** makes practitioners _responsible_ for their data & AI operations, and compliance with these ethical principles. -* **Transparency** ensures that data and AI actions are _understandable_ (interpretable) to users, explaining the what and why behind decisions. -* **Fairness** - focuses on ensuring AI treats _all people_ fairly, addressing any systemic or implicit socio-technical biases in data and systems. -* **Reliability & Safety** - ensures that AI behaves _consistently_ with defined values, minimizing potential harms or unintended consequences. -* **Privacy & Security** - is about understanding data lineage, and providing _data privacy and related protections_ to users. -* **Inclusiveness** - is about designing AI solutions with intention, and adapting them to meet a _broad range of human needs_ & capabilities. - -```{seealso} -Responsible AI principles from Microsoft. (n.d.). Microsoft. Retrieved 1 October 2022, from https://www.microsoft.com/en-us/ai/responsible-ai -``` - -```{seealso} -🚨 Think about what your data ethics mission statement could be. Explore ethical AI frameworks from other organizations - here are examples from [IBM](https://www.ibm.com/cloud/learn/ai-ethics), [Google](https://ai.google/principles) ,and [Facebook](https://ai.facebook.com/blog/facebooks-five-pillars-of-responsible-ai/). What shared values do they have in common? How do these principles relate to the AI product or industry they operate in? -``` - -### Ethics challenges - -Once we have ethical principles defined, the next step is to evaluate our data and AI actions to see if they align with those shared values. Think about your actions in two categories: _data collection_ and _algorithm design_. - -With data collection, actions will likely involve **personal data** or personally identifiable information (PII) for identifiable living individuals. This includes [diverse items of non-personal data](https://ec.europa.eu/info/law/law-topic/data-protection/reform/what-personal-data_en) that _collectively_ identify an individual. Ethical challenges can relate to _data privacy_, _data ownership_, and related topics like _informed consent_ and _intellectual property rights_ for users. - -With algorithm design, actions will involve collecting & curating **datasets**, then using them to train & deploy **data models** that predict outcomes or automate decisions in real-world contexts. Ethical challenges can arise from _dataset bias_, _data quality_ issues, _unfairness_, and _misrepresentation_ in algorithms - including some issues that are systemic in nature. - -In both cases, ethics challenges highlight areas where our actions may encounter conflict with our shared values. To detect, mitigate, minimize, or eliminate, these concerns - we need to ask moral "yes/no" questions related to our actions, then take corrective actions as needed. Let's take a look at some ethical challenges and the moral questions they raise: - -**1\. Data ownership** - -Data collection often involves personal data that can identify the data subjects. [Data ownership](https://permission.io/blog/data-ownership) is about _control_ and [_user rights_](https://permission.io/blog/data-ownership) related to the creation, processing, and dissemination of data. - -The moral questions we need to ask are: - -* Who owns the data? (user or organization) -* What rights do data subjects have? (ex: access, erasure, portability) -* What rights do organizations have? (ex: rectify malicious user reviews) - -**2\. Informed consent** - -[Informed consent](https://legaldictionary.net/informed-consent/) defines the act of users agreeing to an action (like data collection) with a _full understanding_ of relevant facts including the purpose, potential risks, and alternatives. - -Questions to explore here are: - -* Did the user (data subject) give permission for data capture and usage? -* Did the user understand the purpose for which that data was captured? -* Did the user understand the potential risks of their participation? - -**3\. Intellectual property** - -[Intellectual property](https://en.wikipedia.org/wiki/Intellectual_property) refers to intangible creations resulting from the human initiative, that may _have economic value_ to individuals or businesses. - -Questions to explore here are: - -* Did the collected data have economic value to a user or business? -* Does the **user** have intellectual property here? -* Does the **organization** have intellectual property here? -* If these rights exist, how are we protecting them? - -**4\. Data privacy** - -[Data privacy](https://www.northeastern.edu/graduate/blog/what-is-data-privacy/) or information privacy refers to the preservation of user privacy and protection of user identity with respect to personally identifiable information. - -Questions to explore here are: - -* Is users' (personal) data secured against hacks and leaks? -* Is users' data accessible only to authorized users and contexts? -* Is users' anonymity preserved when data is shared or disseminated? -* Can a user be de-identified from anonymized datasets? - -**5\. Right to be forgotten** - -The [Right to be forgotten](https://en.wikipedia.org/wiki/Right_to_be_forgotten) or [Right to erasure](https://www.gdpreu.org/right-to-be-forgotten/) provides additional personal data protection to users. Specifically, it gives users the right to request deletion or removal of personal data from Internet searches and other locations, _under specific circumstances_ - allowing them a fresh start online without past actions being held against them. - -Questions to explore here are: - -* Does the system allow data subjects to request erasure? -* Should the withdrawal of user consent trigger automated erasure? -* Was data collected without consent or by unlawful means? -* Are we compliant with government regulations for data privacy? - -**6\. Dataset bias** - -Dataset or [Collection bias](http://researcharticles.com/index.php/bias-in-data-collection-in-research/) is about selecting a _non-representative_ subset of data for algorithm development, creating potential unfairness in result outcomes for diverse groups. Types of bias include selection or sampling bias, volunteer bias, and instrument bias. - -Questions to explore here are: - -* Did we recruit a representative set of data subjects? -* Did we test our collected or curated dataset for various biases? -* Can we mitigate or remove any discovered biases? - -**7\. Data quality** - -[Data Quality](https://lakefs.io/data-quality-testing/) looks at the validity of the curated dataset used to develop our algorithms, checking to see if features and records meet requirements for the level of accuracy and consistency needed for our AI purpose. - -Questions to explore here are: - -* Did we capture valid _features_ for our use case? -* Was data captured _consistently_ across diverse data sources? -* Is the dataset _complete_ for diverse conditions or scenarios? -* Is information captured _accurately_ in reflecting reality? - -**8\. Algorithm fairness** - -[Algorithm fairness](https://towardsdatascience.com/what-is-algorithm-fairness-3182e161cf9f) checks to see if the algorithm design systematically discriminates against specific subgroups of data subjects leading to [potential harms](https://docs.microsoft.com/en-us/azure/machine-learning/concept-fairness-ml) in _allocation_ (where resources are denied or withheld from that group) and _quality of service_ (where AI is not as accurate for some subgroups as it is for others). - -Questions to explore here are: - -* Did we evaluate model accuracy for diverse subgroups and conditions? -* Did we scrutinize the system for potential harm (e.g., stereotyping)? -* Can we revise data or retrain models to mitigate identified harms? - -Explore resources like [AI Fairness checklists](https://query.prod.cms.rt.microsoft.com/cms/api/am/binary/RE4t6dA) to learn more. - -**9\. Misrepresentation** - -[Data misrepresentation](https://www.sciencedirect.com/topics/computer-science/misrepresentation) is about asking whether we are communicating insights from honestly reported data in a deceptive manner to support a desired narrative. - -Questions to explore here are: - -* Are we reporting incomplete or inaccurate data? -* Are we visualizing data in a manner that drives misleading conclusions? -* Are we using selective statistical techniques to manipulate outcomes? -* Are there alternative explanations that may offer a different conclusion? - -**10\. Free choice** - -The [Illusion of Free Choice](https://www.datasciencecentral.com/profiles/blogs/the-illusion-of-choice) occurs when system "choice architectures" use decision-making algorithms to nudge people towards taking a preferred outcome while seeming to give them options and control. These [dark patterns](https://www.darkpatterns.org/) can cause social and economic harm to users. Because user decisions impact behavior profiles, these actions potentially drive future choices that can amplify or extend the impact of these harms. - -Questions to explore here are: - -* Did the user understand the implications of making that choice? -* Was the user aware of (alternative) choices and the pros & cons of each? -* Can the user reverse an automated or influenced choice later? - -### Case studies - -To put these ethical challenges in real-world contexts, it helps to look at case studies that highlight the potential harms and consequences to individuals and society, when such ethics violations are overlooked. - -Here are a few examples: - -| Ethics Challenge | Case Study | -|--- |--- | -| **Informed consent** | 1972 - [Tuskegee Syphilis Study](https://en.wikipedia.org/wiki/Tuskegee_Syphilis_Study) - African American men who participated in the study were promised free medical care _but deceived_ by researchers who failed to inform subjects of their diagnosis or about availability of treatment. Many subjects died & partners or children were affected; the study lasted 40 years. | -| **Data privacy** | 2007 - The [Netflix data prize](https://www.wired.com/2007/12/why-anonymous-data-sometimes-isnt/) provided researchers with _10M anonymized movie rankings from 50K customers_ to help improve recommendation algorithms. However, researchers were able to correlate anonymized data with personally-identifiable data in _external datasets_ (e.g., IMDb comments) - effectively "de-anonymizing" some Netflix subscribers.| -| **Collection bias** | 2013 - The City of Boston [developed Street Bump](https://www.boston.gov/transportation/street-bump), an app that let citizens report potholes, giving the city better roadway data to find and fix issues. However, [people in lower income groups had less access to cars and phones](https://hbr.org/2013/04/the-hidden-biases-in-big-data), making their roadway issues invisible in this app. Developers worked with academics to _equitable access and digital divides_ issues for fairness. | -| **Algorithmic fairness** | 2018 - The MIT [Gender Shades Study](http://gendershades.org/overview.html) evaluated the accuracy of gender classification AI products, exposing gaps in accuracy for women and persons of color. A [2019 Apple Card](https://www.wired.com/story/the-apple-card-didnt-see-genderand-thats-the-problem/) seemed to offer less credit to women than men. Both illustrated issues in algorithmic bias leading to socio-economic harms.| -| **Data misrepresentation** | 2020 - The [Georgia Department of Public Health released COVID-19 charts](https://www.vox.com/covid-19-coronavirus-us-response-trump/2020/5/18/21262265/georgia-covid-19-cases-declining-reopening) that appeared to mislead citizens about trends in confirmed cases with non-chronological ordering on the x-axis. This illustrates misrepresentation through visualization tricks. | -| **Illusion of free choice** | 2020 - Learning app [ABCmouse paid $10M to settle an FTC complaint](https://www.washingtonpost.com/business/2020/09/04/abcmouse-10-million-ftc-settlement/) where parents were trapped into paying for subscriptions they couldn't cancel. This illustrates dark patterns in choice architectures, where users were nudged towards potentially harmful choices. | -| **Data privacy & user rights** | 2021 - Facebook [Data Breach](https://www.npr.org/2021/04/09/986005820/after-data-breach-exposes-530-million-facebook-says-it-will-not-notify-users) exposed data from 530M users, resulting in a $5B settlement to the FTC. It however refused to notify users of the breach violating user rights around data transparency and access. | - -```{seealso} -Want to explore more case studies? Check out these resources: -* [Ethics Unwrapped](https://ethicsunwrapped.utexas.edu/case-studies) - ethics dilemmas across diverse industries. -* [Data Science Ethics course](https://www.coursera.org/learn/data-science-ethics#syllabus) - landmark case studies explored. -* [Where things have gone wrong](https://deon.drivendata.org/examples/) - deon checklist with examples -``` - -```{note} -🚨 Think about the case studies you've seen - have you experienced, or been affected by, a similar ethical challenge in your life? Can you think of at least one other case study that illustrates one of the ethical challenges we've discussed in this section? -``` - -## Applied ethics - -We've talked about ethics concepts, challenges, and case studies in real-world contexts. But how do we get started _applying_ ethical principles and practices in our projects? And how do we _operationalize_ these practices for better governance? Let's explore some real-world solutions: - -### Professional codes - -Professional codes offer one option for organizations to "incentivize" members to support their ethical principles and mission statement. Codes are _moral guidelines_ for professional behavior, helping employees or members make decisions that align with their organization's principles. They are only as good as voluntary compliance from members; however, many organizations offer additional rewards and penalties to motivate compliance from members. - -Examples include: - -* [Oxford Munich](http://www.code-of-ethics.org/code-of-conduct/) Code of Ethics -* [Data Science Association](http://datascienceassn.org/code-of-conduct.html) Code of Conduct (created 2013) -* [ACM Code of Ethics and Professional Conduct](https://www.acm.org/code-of-ethics) (since 1993) - -```{note} -🚨 Do you belong to a professional engineering or data science organization? Explore their site to see if they define a professional code of ethics. What does this say about their ethical principles? How are they "incentivizing" members to follow the code? -``` - -### Ethics checklists - -While professional codes define required _ethical behavior_ from practitioners, they [have known limitations](https://resources.oreilly.com/examples/0636920203964/blob/master/of_oaths_and_checklists.md) in enforcement, particularly in large-scale projects. Instead, many data Science experts [advocate for checklists](https://resources.oreilly.com/examples/0636920203964/blob/master/of_oaths_and_checklists.md), that can **connect principles to practices** in more deterministic and actionable ways. - -Checklists convert questions into "yes/no" tasks that can be operationalized, allowing them to be tracked as part of standard product release workflows. - -Examples include: - -* [Deon](https://deon.drivendata.org/) - a general-purpose data ethics checklist created from [industry recommendations](https://deon.drivendata.org/#checklist-citations) with a command-line tool for easy integration. -* [Privacy Audit Checklist](https://cyber.harvard.edu/ecommerce/privacyaudit.html) - provides general guidance for information handling practices from legal and social exposure perspectives. -* [AI Fairness Checklist](https://www.microsoft.com/en-us/research/project/ai-fairness-checklist/) - created by AI practitioners to support the adoption and integration of fairness checks into AI development cycles. -* [22 questions for ethics in data and AI](https://medium.com/the-organization/22-questions-for-ethics-in-data-and-ai-efb68fd19429) - a more open-ended framework, structured for initial exploration of ethical issues in design, implementation, and organizational, contexts. - -### Ethics regulations - -Ethics is about defining shared values and doing the right thing _voluntarily_. **Compliance** is about _following the law_ if and where defined. **Governance** broadly covers all the ways in which organizations operate to enforce ethical principles and comply with established laws. - -Today, governance takes two forms within organizations. First, it's about defining **ethical AI** principles and establishing practices to operationalize adoption across all AI-related projects in the organization. Second, it's about complying with all government-mandated **data protection regulations** for regions it operates in. - -Examples of data protection and privacy regulations: - -* `1974`, [US Privacy Act](https://www.justice.gov/opcl/privacy-act-1974) - regulates _federal govt._ collection, use, and disclosure of personal information. -* `1996`, [US Health Insurance Portability & Accountability Act (HIPAA)](https://www.cdc.gov/phlp/publications/topic/hipaa.html) - protects personal health data. -* `1998`, [US Children's Online Privacy Protection Act (COPPA)](https://www.ftc.gov/enforcement/rules/rulemaking-regulatory-reform-proceedings/childrens-online-privacy-protection-rule) - protects the data privacy of children under 13. -* `2018`, [General Data Protection Regulation (GDPR)](https://gdpr-info.eu/) - provides user rights, data protection, and privacy. -* `2018`, [California Consumer Privacy Act (CCPA)](https://www.oag.ca.gov/privacy/ccpa) gives consumers more _rights_ over their (personal) data. -* `2021`, China's [Personal Information Protection Law](https://www.reuters.com/world/china/china-passes-new-personal-data-privacy-law-take-effect-nov-1-2021-08-20/) just passed, creating one of the strongest online data privacy regulations worldwide. - -> 🚨 The European Union defined GDPR (General Data Protection Regulation) remains one of the most influential data privacy regulations today. Did you know it also defines [8 user rights](https://www.freeprivacypolicy.com/blog/8-user-rights-gdpr) to protect citizens' digital privacy and personal data? Learn about what these are, and why they matter. - -### Ethics culture - -Note that there remains an intangible gap between _compliance_ (doing enough to meet "the letter of the law") and addressing [systemic issues](https://www.coursera.org/learn/data-science-ethics/home/week/4) (like ossification, information asymmetry, and distributional unfairness) that can speed up the weaponization of AI. - -The latter requires [collaborative approaches to defining ethics cultures](https://towardsdatascience.com/why-ai-ethics-requires-a-culture-driven-approach-26f451afa29f) that build emotional connections and consistent shared values _across organizations_ in the industry. This calls for more [formalized data ethics cultures](https://www.codeforamerica.org/news/formalizing-an-ethical-data-culture/) in organizations - allowing _anyone_ to [pull the Andon cord](https://en.wikipedia.org/wiki/Andon_(manufacturing)) (to raise ethics concerns early in the process) and making _ethical assessments_ (e.g., in hiring) a core criterion for team formation in AI projects. - -## Your turn! 🚀 - -[Write a data ethics case study](../../assignments/data-science/write-a-data-ethics-case-study.md) - -## Self study - -Courses and books help with understanding core ethics concepts and challenges, while case studies and tools help with applied ethics practices in real-world contexts. Here are a few resources to start with. - -* [Machine Learning For Beginners](https://github.com/microsoft/ML-For-Beginners/blob/main/1-Introduction/3-fairness/README.md) - section on Fairness, from Microsoft. -* [Principles of Responsible AI](https://docs.microsoft.com/en-us/learn/modules/responsible-ai-principles/) - free learning path from Microsoft Learn. -* [Ethics and Data Science](https://resources.oreilly.com/examples/0636920203964) - O'Reilly EBook (M. Loukides, H. Mason et. al) -* [Data Science Ethics](https://www.coursera.org/learn/data-science-ethics#syllabus) - online course from the University of Michigan. -* [Ethics Unwrapped](https://ethicsunwrapped.utexas.edu/case-studies) - case studies from the University of Texas. - -## Acknowledgments - -Thanks to Microsoft for creating the open-source course [Data Science for Beginners](https://github.com/microsoft/Data-Science-For-Beginners). It inspires the majority of the content in this chapter. - ---- - -```{bibliography} -:filter: docname in docnames -``` diff --git a/_sources/data-science/introduction/defining-data-science.ipynb b/_sources/data-science/introduction/defining-data-science.ipynb index a3408145a6..cf39b8e61c 100644 --- a/_sources/data-science/introduction/defining-data-science.ipynb +++ b/_sources/data-science/introduction/defining-data-science.ipynb @@ -2,8 +2,34 @@ "cells": [ { "cell_type": "markdown", - "id": "b1952973", - "metadata": {}, + "id": "88e642dd-853a-42da-b8c0-4b762c98515a", + "metadata": { + "tags": [ + "hide-cell" + ] + }, + "source": [ + "---\n", + "jupytext:\n", + " cell_metadata_filter: -all\n", + " formats: md:myst\n", + " text_representation:\n", + " extension: .md\n", + " format_name: myst\n", + " format_version: 0.13\n", + " jupytext_version: 1.11.5\n", + "kernelspec:\n", + " display_name: Python 3\n", + " language: python\n", + " name: python3\n" + ] + }, + { + "cell_type": "markdown", + "id": "1bc4ccf3", + "metadata": { + "tags": [] + }, "source": [ "# Defining data science\n", "\n", @@ -13,12 +39,31 @@ "\n", "However, data became much more critical with the creation of computers. The primary role of computers is to perform computations, but they need data to operate on. Thus, we need to understand how computers store and process data.\n", "\n", - "With the emergence of the Internet, the role of computers as data-handling devices increased. If you think about it, we now use computers more and more for data processing and communication, rather than actual computations. When we write an e-mail to a friend or search for some information on the Internet - we are essentially creating, storing, transmitting, and manipulating data.\n", - "\n", - "```{note}\n", + "With the emergence of the Internet, the role of computers as data-handling devices increased. If you think about it, we now use computers more and more for data processing and communication, rather than actual computations. When we write an e-mail to a friend or search for some information on the Internet - we are essentially creating, storing, transmitting, and manipulating data." + ] + }, + { + "cell_type": "markdown", + "id": "8361e92c", + "metadata": { + "attributes": { + "classes": [ + "note" + ], + "id": "" + } + }, + "source": [ + ":::{note}\n", "Can you remember the last time you have used computers to actually compute something?\n", - "```\n", - "\n", + ":::" + ] + }, + { + "cell_type": "markdown", + "id": "0450bbff", + "metadata": {}, + "source": [ "## What is Data Science?\n", "\n", "In [Wikipedia](https://en.wikipedia.org/wiki/Data_science), **Data Science** is defined as *a scientific field that uses scientific methods to extract knowledge and insights from structured and unstructured data, and apply knowledge and actionable insights from data across a broad range of application domains*.\n", @@ -29,12 +74,31 @@ "* Data Science uses **scientific methods**, such as probability and statistics. In fact, when the term *Data Science* was first introduced, some people argued that Data Science was just a new fancy name for statistics. Nowadays it has become evident that the field is much broader.\n", "* Obtained knowledge should be applied to produce some **actionable insights**, i.e. practical insights that you can apply to real business situations.\n", "* We should be able to operate on both **structured** and **unstructured** data. We will come back to discuss different types of data later in the course.\n", - "* **Application domain** is an important concept, and data scientists often need at least some degree of expertise in the problem domain, for example, finance, medicine, marketing, etc.\n", - "\n", - "```{note}\n", + "* **Application domain** is an important concept, and data scientists often need at least some degree of expertise in the problem domain, for example, finance, medicine, marketing, etc." + ] + }, + { + "cell_type": "markdown", + "id": "a087d3c4", + "metadata": { + "attributes": { + "classes": [ + "note" + ], + "id": "" + } + }, + "source": [ + ":::{note}\n", "Another important aspect of Data Science is that it studies how data can be gathered, stored and operated upon using computers. While statistics gives us mathematical foundations, Data Science applies mathematical concepts to actually draw insights from data.\n", - "```\n", - "\n", + ":::" + ] + }, + { + "cell_type": "markdown", + "id": "ae54ab43", + "metadata": {}, + "source": [ "One of the ways (attributed to [Jim Gray](https://en.wikipedia.org/wiki/Jim_Gray_(computer_scientist))) to look at Data Science is to consider it to be a separate paradigm of science:\n", "\n", "* **Empirical**, in which we rely mostly on observations and results of experiments\n", @@ -48,7 +112,7 @@ "\n", "**Databases**\n", "\n", - "A critical consideration is **how to store** the data, i.e. how to structure it in a way that allows faster processing. There are different types of databases that store structured and unstructured data, which [we will consider in our book](../working-with-data/working-with-data.md).\n", + "A critical consideration is **how to store** the data, i.e. how to structure it in a way that allows faster processing. There are different types of databases that store structured and unstructured data, which [we will consider in our book](https://static-1300131294.cos.qp-shanghai.myqcloud.com/working-with-data/working-with-data.md).\n", "\n", "**Big Data**\n", "\n", @@ -56,7 +120,7 @@ "\n", "**Machine Learning**\n", "\n", - "One way to understand data is to **build a model** that will be able to predict the desired outcome. Developing models from data is called **machine learning**. You may want to have a look at our [Machine Learning](../../ml-fundamentals/ml-overview.md)-related chapters to learn more about it.\n", + "One way to understand data is to **build a model** that will be able to predict the desired outcome. Developing models from data is called **machine learning**. You may want to have a look at our [Machine Learning](https://static-1300131294.cos.qp-shanghai.myqcloud.com/ml-fundamentals/ml-overview.md)-related chapters to learn more about it.\n", "\n", "**Artificial Intelligence**\n", "\n", @@ -64,7 +128,7 @@ "\n", "**Visualization**\n", "\n", - "Vast amounts of data are incomprehensible to a human being, but once we create useful visualizations using that data, we can make more sense of the data, and draw some conclusions. Thus, it is important to know many ways to visualize information - something that we will cover in the [Data visualization](../data-visualization/data-visualization.md) section. Related fields also include **Infographics** and **Human-Computer Interaction** in general.\n", + "Vast amounts of data are incomprehensible to a human being, but once we create useful visualizations using that data, we can make more sense of the data, and draw some conclusions. Thus, it is important to know many ways to visualize information - something that we will cover in the [Data visualization](https://static-1300131294.cos.qp-shanghai.myqcloud.com/data-visualization/data-visualization.md) section. Related fields also include **Infographics** and **Human-Computer Interaction** in general.\n", "\n", "## Types of data\n", "\n", @@ -110,7 +174,7 @@ "\n", "**Visualization / human insights.** Oftentimes, in order to understand the data, we need to visualize it. Having many different visualization techniques in our toolbox, we can find the right view to make an insight. Often, a data scientist needs to \"play with data\", visualizing it many times and looking for some relationships. Also, we may use statistical techniques to test hypotheses or prove a correlation between different pieces of data.\n", "\n", - "**Training a predictive model.** Because the ultimate goal of Data Science is to be able to make decisions based on data, we may want to use the techniques of [Machine Learning](../../ml-fundamentals/ml-overview.md) to build a predictive model. We can then use this to make predictions using new datasets with similar structures.\n", + "**Training a predictive model.** Because the ultimate goal of Data Science is to be able to make decisions based on data, we may want to use the techniques of [Machine Learning](https://static-1300131294.cos.qp-shanghai.myqcloud.com/ml-fundamentals/ml-overview.md) to build a predictive model. We can then use this to make predictions using new datasets with similar structures.\n", "\n", "Of course, depending on the actual data, some steps might be missing (e.g., when we already have the data in the database, or when we do not need model training), or some steps might be repeated several times (such as data processing).\n", "\n", @@ -120,31 +184,69 @@ "\n", "Let's consider an example. Suppose we have a Data Science course (like this one) that we deliver online to students, and we want to use Data Science to improve it. How can we do it?\n", "\n", - "We can start by asking \"What can be digitized?\" The simplest way would be to measure the time it takes each student to complete each module and to measure the obtained knowledge by giving a multiple-choice test at the end of each module. By averaging time-to-complete across all students, we can find out which modules cause the most difficulties for students, and work on simplifying them.\n", - "\n", - "```{note}\n", + "We can start by asking \"What can be digitized?\" The simplest way would be to measure the time it takes each student to complete each module and to measure the obtained knowledge by giving a multiple-choice test at the end of each module. By averaging time-to-complete across all students, we can find out which modules cause the most difficulties for students, and work on simplifying them." + ] + }, + { + "cell_type": "markdown", + "id": "8731cba6", + "metadata": { + "attributes": { + "classes": [ + "note" + ], + "id": "" + } + }, + "source": [ + ":::{note}\n", "You may argue that this approach is not ideal, because modules can be of different lengths. It is probably more fair to divide the time by the length of the module (in number of characters), and compare those values instead.\n", - "```\n", - "\n", + ":::" + ] + }, + { + "cell_type": "markdown", + "id": "39194e17", + "metadata": {}, + "source": [ "When we start analyzing the results of multiple-choice tests, we can try to determine which concepts students have difficulty understanding, and use that information to improve the content. To do that, we need to design tests in such a way that each question maps to a certain concept or chunk of knowledge.\n", "\n", "If we want to get even more complicated, we can plot the time taken for each module against the age category of students. We might find out that for some age categories, it takes an inappropriately long time to complete the module, or that students drop out before completing it. This can help us provide age recommendations for the module, and minimize people's dissatisfaction with wrong expectations.\n", "\n", "## Your turn! 🚀\n", "\n", - "In this challenge, we will try to find concepts relevant to the field of Data Science by looking at texts. We will take a Wikipedia article on Data Science, download and process the text, and then build a word cloud like this one:\n", - "\n", - "```{figure} ../../../images/data-science-word-cloud.png\n", + "In this challenge, we will try to find concepts relevant to the field of Data Science by looking at texts. We will take a Wikipedia article on Data Science, download and process the text, and then build a word cloud like this one:" + ] + }, + { + "cell_type": "markdown", + "id": "f50dcf4b", + "metadata": { + "attributes": { + "classes": [ + "./../../images/data-science-word-cloud.png" + ], + "id": "" + } + }, + "source": [ + ":::{figure} https://static-1300131294.cos.ap-shanghai.myqcloud.com/images/data-science-word-cloud.png\n", "---\n", "name: 'World of Data Science'\n", "---\n", "World of Data Science{cite}`NolliHow2020`\n", - "```\n", - "\n", - "Visit [Analyzing text about data science](../../assignments/data-science/analyzing-text-about-data-science.ipynb) to read through the code. You can also run the code, and see how it performs all data transformations in real-time.\n", + ":::" + ] + }, + { + "cell_type": "markdown", + "id": "e776d8e2", + "metadata": {}, + "source": [ + "Visit [Analyzing text about data science](https://static-1300131294.cos.qp-shanghai.myqcloud.com/assignments/data-science/analyzing-text-about-data-science.ipynb) to read through the code. You can also run the code, and see how it performs all data transformations in real-time.\n", "\n", "* **Task 1**: Modify the code above to find out related concepts for the fields of **Big Data** and **Machine Learning**.\n", - "* **Task 2**: Think about [Data Science scenarios](../../assignments/data-science/data-science-scenarios.md).\n", + "* **Task 2**: Think about [Data Science scenarios](https://static-1300131294.cos.qp-shanghai.myqcloud.com/assignments/data-science/data-science-scenarios.md).\n", "\n", "## Self study\n", "\n", @@ -154,27 +256,30 @@ "\n", "Thanks to Microsoft for creating the open-source course [Data Science for Beginners](https://github.com/microsoft/Data-Science-For-Beginners). It inspires the majority of the content in this chapter.\n", "\n", - "---\n", - "\n", - "```{bibliography}\n", + "---" + ] + }, + { + "cell_type": "markdown", + "id": "03c143fd", + "metadata": { + "attributes": { + "classes": [ + "bibliography" + ], + "id": "" + } + }, + "source": [ + ":::{bibliography}\n", ":filter: docname in docnames\n", - "```" + ":::" ] } ], "metadata": { - "jupytext": { - "cell_metadata_filter": "-all", - "formats": "md:myst", - "text_representation": { - "extension": ".md", - "format_name": "myst", - "format_version": 0.13, - "jupytext_version": "1.11.5" - } - }, "kernelspec": { - "display_name": "Python 3", + "display_name": "Python 3 (ipykernel)", "language": "python", "name": "python3" }, @@ -188,12 +293,9 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.9.18" - }, - "source_map": [ - 14 - ] + "version": "3.11.4" + } }, "nbformat": 4, "nbformat_minor": 5 -} \ No newline at end of file +} diff --git a/_sources/data-science/introduction/defining-data-science.md b/_sources/data-science/introduction/defining-data-science.md deleted file mode 100644 index de9395815f..0000000000 --- a/_sources/data-science/introduction/defining-data-science.md +++ /dev/null @@ -1,169 +0,0 @@ ---- -jupytext: - cell_metadata_filter: -all - formats: md:myst - text_representation: - extension: .md - format_name: myst - format_version: 0.13 - jupytext_version: 1.11.5 -kernelspec: - display_name: Python 3 - language: python - name: python3 ---- - -# Defining data science - -## What is data? - -In our everyday life, we are constantly surrounded by data. The text you are reading now is data. The list of phone numbers of your friends on your smartphone is data, as well as the current time displayed on your watch. As human beings, we naturally operate with data by counting the money we have or by writing letters to our friends. - -However, data became much more critical with the creation of computers. The primary role of computers is to perform computations, but they need data to operate on. Thus, we need to understand how computers store and process data. - -With the emergence of the Internet, the role of computers as data-handling devices increased. If you think about it, we now use computers more and more for data processing and communication, rather than actual computations. When we write an e-mail to a friend or search for some information on the Internet - we are essentially creating, storing, transmitting, and manipulating data. - -```{note} -Can you remember the last time you have used computers to actually compute something? -``` - -## What is Data Science? - -In [Wikipedia](https://en.wikipedia.org/wiki/Data_science), **Data Science** is defined as *a scientific field that uses scientific methods to extract knowledge and insights from structured and unstructured data, and apply knowledge and actionable insights from data across a broad range of application domains*. - -This definition highlights the following important aspects of Data Science: - -* The main goal of Data Science is to **extract knowledge** from data, in other words - to **understand** data, find some hidden relationships and build a **model**. -* Data Science uses **scientific methods**, such as probability and statistics. In fact, when the term *Data Science* was first introduced, some people argued that Data Science was just a new fancy name for statistics. Nowadays it has become evident that the field is much broader. -* Obtained knowledge should be applied to produce some **actionable insights**, i.e. practical insights that you can apply to real business situations. -* We should be able to operate on both **structured** and **unstructured** data. We will come back to discuss different types of data later in the course. -* **Application domain** is an important concept, and data scientists often need at least some degree of expertise in the problem domain, for example, finance, medicine, marketing, etc. - -```{note} -Another important aspect of Data Science is that it studies how data can be gathered, stored and operated upon using computers. While statistics gives us mathematical foundations, Data Science applies mathematical concepts to actually draw insights from data. -``` - -One of the ways (attributed to [Jim Gray](https://en.wikipedia.org/wiki/Jim_Gray_(computer_scientist))) to look at Data Science is to consider it to be a separate paradigm of science: - -* **Empirical**, in which we rely mostly on observations and results of experiments -* **Theoretical**, where new concepts emerge from existing scientific knowledge -* **Computational**, where we discover new principles based on some computational experiments -* **Data-Driven**, based on discovering relationships and patterns in the data - -## Other related fields - -Since data is pervasive, Data Science itself is also a broad field, touching many other disciplines. - -**Databases** - -A critical consideration is **how to store** the data, i.e. how to structure it in a way that allows faster processing. There are different types of databases that store structured and unstructured data, which [we will consider in our book](../working-with-data/working-with-data.md). - -**Big Data** - -Often we need to store and process very large quantities of data with a relatively simple structure. There are special approaches and tools to store that data in a distributed manner on a computer cluster and process it efficiently. - -**Machine Learning** - -One way to understand data is to **build a model** that will be able to predict the desired outcome. Developing models from data is called **machine learning**. You may want to have a look at our [Machine Learning](../../ml-fundamentals/ml-overview.md)-related chapters to learn more about it. - -**Artificial Intelligence** - -An area of Machine Learning known as artificial intelligence (AI) also relies on data, and it involves building high-complexity models that mimic human thought processes. AI methods often allow us to turn unstructured data (e.g. natural language) into structured insights. - -**Visualization** - -Vast amounts of data are incomprehensible to a human being, but once we create useful visualizations using that data, we can make more sense of the data, and draw some conclusions. Thus, it is important to know many ways to visualize information - something that we will cover in the [Data visualization](../data-visualization/data-visualization.md) section. Related fields also include **Infographics** and **Human-Computer Interaction** in general. - -## Types of data - -As we have already mentioned, data is everywhere. We just need to capture it in the right way! It is useful to distinguish between **structured** and **unstructured** data. The former is typically represented in some well-structured form, often as a table or number of tables, while the latter is just a collection of files. Sometimes we can also talk about **semi-structured** data, that have some sort of structure that may vary greatly. - -| Structured | Semi-structured | Unstructured | -| ---------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------- | --------------------------------------- | -| List of people with their phone numbers | Wikipedia pages with links | Text of Encyclopedia Britannica | -| Temperature in all rooms of a building at every minute for the last 20 years | Collection of scientific papers in JSON format with authors, data of publication, and abstract | File share with corporate documents | -| Data for age and gender of all people entering the building | Internet pages | Raw video feed from surveillance camera | - -## Where to get data - -There are many possible sources of data, and it will be impossible to list all of them! However, let's mention some of the typical places where you can get data: - -* **Structured** - * **Internet of Things** (IoT), including data from different sensors, such as temperature or pressure sensors, provides a lot of useful data. For example, if an office building is equipped with IoT sensors, we can automatically control heating and lighting in order to minimize costs. - * **Surveys** that we ask users to complete after purchase, or after visiting a website. - * **Analysis of behavior** can, for example, help us understand how deeply a user goes into a site, and what is the typical reason for leaving the site. -* **Unstructured** - * **Texts** can be a rich source of insights, such as an overall **sentiment score**, or extracting keywords and semantic meaning. - * **Images** or **Video**. A video from a surveillance camera can be used to estimate traffic on the road, and inform people about potential traffic jams. - * Web server **Logs** can be used to understand which pages of our site are most often visited, and for how long. -* **Semi-structured** - * **Social Network** graphs can be great sources of data about user personalities and potential effectiveness in spreading information around. - * When we have a bunch of photographs from a party, we can try to extract **Group Dynamics** data by building a graph of people taking pictures with each other. - -By knowing different possible sources of data, you can try to think about different scenarios where Data Science techniques can be applied to know the situation better and to improve business processes. - -## What you can do with data - -In Data Science, we focus on the following steps of the data journey: - -**Data acquisition.** The first step is to collect the data. While in many cases it can be a straightforward process, like data coming to a database from a web application, sometimes we need to use special techniques. For example, data from IoT sensors can be overwhelming, and it is a good practice to use buffering endpoints such as IoT Hub to collect all the data before further processing. - -**Data storage.** Storing data can be challenging, especially if we are talking about big data. When deciding how to store data, it makes sense to anticipate the way you would query the data in the future. There are several ways data can be stored: - -* A relational database stores a collection of tables and uses a special language called SQL to query them. Typically, tables are organized into different groups called schemas. In many cases, we need to convert the data from the original form to fit the schema. -* A [NoSQL](https://en.wikipedia.org/wiki/NoSQL) database, such as [MongoDB](https://www.mongodb.com/), does not enforce schemas on data and allows storing more complex data, for example, hierarchical JSON documents or graphs. However, NoSQL databases do not have the rich querying capabilities of SQL, and cannot enforce referential integrity, i.e. rules on how the data is structured in tables and governing the relationships between tables. -* [Data Lake](https://en.wikipedia.org/wiki/Data_lake) storage is used for large collections of data in raw, unstructured form. Data lakes are often used with big data, where all data cannot fit on one machine, and has to be stored and processed by a cluster of servers. [Parquet](https://en.wikipedia.org/wiki/Apache_Parquet) is the data format that is often used in conjunction with big data. - -**Data processing.** This is the most exciting part of the data journey, which involves converting the data from its original form into a form that can be used for visualization/model training. When dealing with unstructured data such as text or images, we may need to use some AI techniques to extract **features** from the data, thus converting it to a structured form. - -**Visualization / human insights.** Oftentimes, in order to understand the data, we need to visualize it. Having many different visualization techniques in our toolbox, we can find the right view to make an insight. Often, a data scientist needs to "play with data", visualizing it many times and looking for some relationships. Also, we may use statistical techniques to test hypotheses or prove a correlation between different pieces of data. - -**Training a predictive model.** Because the ultimate goal of Data Science is to be able to make decisions based on data, we may want to use the techniques of [Machine Learning](../../ml-fundamentals/ml-overview.md) to build a predictive model. We can then use this to make predictions using new datasets with similar structures. - -Of course, depending on the actual data, some steps might be missing (e.g., when we already have the data in the database, or when we do not need model training), or some steps might be repeated several times (such as data processing). - -## Digitalization and digital transformation - -In the last decade, many businesses started to understand the importance of data when making business decisions. To apply Data Science principles to running a business, one first needs to collect some data, i.e. translate business processes into digital form. This is known as **digitalization**. Applying Data Science techniques to this data to guide decisions can lead to significant increases in productivity (or even business pivot), called **digital transformation**. - -Let's consider an example. Suppose we have a Data Science course (like this one) that we deliver online to students, and we want to use Data Science to improve it. How can we do it? - -We can start by asking "What can be digitized?" The simplest way would be to measure the time it takes each student to complete each module and to measure the obtained knowledge by giving a multiple-choice test at the end of each module. By averaging time-to-complete across all students, we can find out which modules cause the most difficulties for students, and work on simplifying them. - -```{note} -You may argue that this approach is not ideal, because modules can be of different lengths. It is probably more fair to divide the time by the length of the module (in number of characters), and compare those values instead. -``` - -When we start analyzing the results of multiple-choice tests, we can try to determine which concepts students have difficulty understanding, and use that information to improve the content. To do that, we need to design tests in such a way that each question maps to a certain concept or chunk of knowledge. - -If we want to get even more complicated, we can plot the time taken for each module against the age category of students. We might find out that for some age categories, it takes an inappropriately long time to complete the module, or that students drop out before completing it. This can help us provide age recommendations for the module, and minimize people's dissatisfaction with wrong expectations. - -## Your turn! 🚀 - -In this challenge, we will try to find concepts relevant to the field of Data Science by looking at texts. We will take a Wikipedia article on Data Science, download and process the text, and then build a word cloud like this one: - -```{figure} ../../../images/data-science-word-cloud.png ---- -name: 'World of Data Science' ---- -World of Data Science{cite}`NolliHow2020` -``` - -Visit [Analyzing text about data science](../../assignments/data-science/analyzing-text-about-data-science.ipynb) to read through the code. You can also run the code, and see how it performs all data transformations in real-time. - -* **Task 1**: Modify the code above to find out related concepts for the fields of **Big Data** and **Machine Learning**. -* **Task 2**: Think about [Data Science scenarios](../../assignments/data-science/data-science-scenarios.md). - -## Self study - -Here is a list of free/open-source learning resources for [Data Science](https://github.com/ocademy-ai/open-learning-resources/blob/main/README.md#data-science--engineering). - -## Acknowledgments - -Thanks to Microsoft for creating the open-source course [Data Science for Beginners](https://github.com/microsoft/Data-Science-For-Beginners). It inspires the majority of the content in this chapter. - ---- - -```{bibliography} -:filter: docname in docnames -``` diff --git a/_sources/data-science/introduction/defining-data.ipynb b/_sources/data-science/introduction/defining-data.ipynb index 8f1819974c..11f41392bc 100644 --- a/_sources/data-science/introduction/defining-data.ipynb +++ b/_sources/data-science/introduction/defining-data.ipynb @@ -2,8 +2,35 @@ "cells": [ { "cell_type": "markdown", - "id": "5a88fc60", - "metadata": {}, + "id": "60e80b87-a2dd-4c3c-ba76-7269ece12197", + "metadata": { + "tags": [ + "hide-cell" + ] + }, + "source": [ + "---\n", + "jupytext:\n", + " cell_metadata_filter: -all\n", + " formats: md:myst\n", + " text_representation:\n", + " extension: .md\n", + " format_name: myst\n", + " format_version: 0.13\n", + " jupytext_version: 1.11.5\n", + "kernelspec:\n", + " display_name: Python 3\n", + " language: python\n", + " name: python3\n", + "" + ] + }, + { + "cell_type": "markdown", + "id": "689dab76", + "metadata": { + "tags": [] + }, "source": [ "# Defining data\n", "\n", @@ -47,7 +74,7 @@ "\n", "A data source is an initial location of where the data was generated, or where it \"lives\" and will vary based on how and when it was collected. Data generated by its user(s) are known as primary data while secondary data comes from a source that has collected data for general use. For example, a group of scientists collecting observations in a rainforest would be considered primary and if they decide to share it with other scientists it would be considered secondary to those that use it. \n", "\n", - "Databases are a common source and rely on a database management system to host and maintain the data where users use commands called queries to explore the data. Files as data sources can be audio, image, and video files as well as spreadsheets like Excel. Internet sources are a common location for hosting data, where databases, as well as files, can be found. Application programming interfaces, also known as APIs allow programmers to create ways to share data with external users through the internet, while the process of web scraping extracts data from a web page. The sections in [Working with data](../working-with-data/working-with-data.md) focus on how to use various data sources.\n", + "Databases are a common source and rely on a database management system to host and maintain the data where users use commands called queries to explore the data. Files as data sources can be audio, image, and video files as well as spreadsheets like Excel. Internet sources are a common location for hosting data, where databases, as well as files, can be found. Application programming interfaces, also known as APIs allow programmers to create ways to share data with external users through the internet, while the process of web scraping extracts data from a web page. The sections in [Working with data](https://static-1300131294.cos.qp-shanghai.myqcloud.com/working-with-data/working-with-data.md) focus on how to use various data sources.\n", "\n", "## Your turn! 🚀\n", "\n", @@ -60,7 +87,7 @@ "\n", "### Task 2\n", "\n", - "[Classifying datasets](../../assignments/data-science/classifying-datasets.md)\n", + "[Classifying datasets](https://static-1300131294.cos.qp-shanghai.myqcloud.com/assignments/data-science/classifying-datasets.md)\n", "\n", "## Self study\n", "\n", @@ -70,27 +97,30 @@ "\n", "Thanks to Microsoft for creating the open-source course [Data Science for Beginners](https://github.com/microsoft/Data-Science-For-Beginners). It inspires the majority of the content in this chapter.\n", "\n", - "---\n", - "\n", - "```{bibliography}\n", + "---" + ] + }, + { + "cell_type": "markdown", + "id": "5816de54", + "metadata": { + "attributes": { + "classes": [ + "bibliography" + ], + "id": "" + } + }, + "source": [ + ":::{bibliography}\n", ":filter: docname in docnames\n", - "```" + ":::" ] } ], "metadata": { - "jupytext": { - "cell_metadata_filter": "-all", - "formats": "md:myst", - "text_representation": { - "extension": ".md", - "format_name": "myst", - "format_version": 0.13, - "jupytext_version": "1.11.5" - } - }, "kernelspec": { - "display_name": "Python 3", + "display_name": "Python 3 (ipykernel)", "language": "python", "name": "python3" }, @@ -104,12 +134,9 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.9.18" - }, - "source_map": [ - 14 - ] + "version": "3.11.4" + } }, "nbformat": 4, "nbformat_minor": 5 -} \ No newline at end of file +} diff --git a/_sources/data-science/introduction/defining-data.md b/_sources/data-science/introduction/defining-data.md deleted file mode 100644 index 4b3bef7213..0000000000 --- a/_sources/data-science/introduction/defining-data.md +++ /dev/null @@ -1,85 +0,0 @@ ---- -jupytext: - cell_metadata_filter: -all - formats: md:myst - text_representation: - extension: .md - format_name: myst - format_version: 0.13 - jupytext_version: 1.11.5 -kernelspec: - display_name: Python 3 - language: python - name: python3 ---- - -# Defining data - -Data is facts, information, observations, and measurements that are used to make discoveries and support informed decisions. A data point is a single unit of data within a dataset, which is a collection of data points. Datasets may come in different formats and structures, and will usually be based on their source, or where the data came from. For example, a company's monthly earnings might be in a spreadsheet but hourly heart rate data from a smartwatch may be in [JSON](https://stackoverflow.com/a/383699) format. It's common for data scientists to work with different types of data within a dataset. - -This section focuses on identifying and classifying data by its characteristics and its sources. - -## How data is described - -**Raw data** is data that has come from its source in its initial state and has not been analyzed or organized. In order to make sense of what is happening with a dataset, it needs to be organized into a format that can be understood by humans as well as the technology they may use to analyze it further. The structure of a dataset describes how it's organized and can be classified as structured, unstructured, and semi-structured. These types of structures will vary, depending on the source but will ultimately fit into these three categories. - -**1\. Quantitative data** - -Quantitative data is numerical observations within a dataset and can typically be analyzed, measured and used mathematically. Some examples of quantitative data are a country's population, a person's height, or a company's quarterly earnings. With some additional analysis, quantitative data could be used to discover seasonal trends of the Air Quality Index (AQI) or estimate the probability of rush hour traffic on a typical work day. - -**2\. Qualitative data** - -Qualitative data, also known as categorical data is data that cannot be measured objectively like observations of quantitative data. It's generally various formats of subjective data that capture the quality of something, such as a product or process. Sometimes, qualitative data is numerical and wouldn't be typically used mathematically, like phone numbers or timestamps. Some examples of qualitative data are video comments, the make, and model of a car, or your closest friends' favorite color. Qualitative data could be used to understand which products consumers like best or to identify popular keywords in job application resumes. - -**3\. Structured data** - -Structured data is data that is organized into rows and columns, where each row will have the same set of columns. Columns represent a value of a particular type and will be identified with a name describing what the value represents, while rows contain the actual values. Columns will often have a specific set of rules or restrictions on the values, to ensure that the values accurately represent the column. For example, imagine a spreadsheet of customers where each row must have a phone number and the phone numbers never contain alphabetical characters. There may be rules applied to the phone number column to make sure it's never empty and only contains numbers. - -A benefit of structured data is that it can be organized in such a way that it can be related to other structured data. However, because the data is designed to be organized in a specific way, making changes to its overall structure can take a lot of effort to do. For example, adding an email column to the customer spreadsheet that cannot be empty means you'll need to figure out how you'll add these values to the existing rows of customers in the dataset. - -Examples of structured data: spreadsheets, relational databases, phone numbers, bank statements - -**4\. Unstructured data** - -Unstructured data typically cannot be categorized into rows or columns and doesn't contain a format or set of rules to follow. Because unstructured data has fewer restrictions on its structure it's easier to add new information in comparison to a structured dataset. If a sensor capturing data on barometric pressure every 2 minutes has received an update that now allows it to measure and record temperature, it doesn't require altering the existing data if it's unstructured. However, this may make analyzing or investigating this type of data take longer. For example, a scientist who wants to find the average temperature of the previous month from the sensors data, but discovers that the sensor recorded an "e" in some of its recorded data to note that it was broken instead of a typical number, which means the data is incomplete. - -Examples of unstructured data: text files, text messages, video files - -**5\. Semi-structured data** - -Semi-structured data has features that make it a combination of structured and unstructured data. It doesn't typically conform to a format of rows and columns but is organized in a way that is considered structured and may follow a fixed format or set of rules. The structure will vary between sources, such as a well-defined hierarchy to something more flexible that allows for easy integration of new information. Metadata are indicators that help decide how the data is organized and stored and will have various names, based on the type of data. Some common names for metadata are tags, elements, entities, and attributes. For example, a typical email message will have a subject, body, and a set of recipients and can be organized by whom or when it was sent. - -Examples of semi-structured data: HTML, CSV files, JavaScript Object Notation (JSON) - -## Sources of data - -A data source is an initial location of where the data was generated, or where it "lives" and will vary based on how and when it was collected. Data generated by its user(s) are known as primary data while secondary data comes from a source that has collected data for general use. For example, a group of scientists collecting observations in a rainforest would be considered primary and if they decide to share it with other scientists it would be considered secondary to those that use it. - -Databases are a common source and rely on a database management system to host and maintain the data where users use commands called queries to explore the data. Files as data sources can be audio, image, and video files as well as spreadsheets like Excel. Internet sources are a common location for hosting data, where databases, as well as files, can be found. Application programming interfaces, also known as APIs allow programmers to create ways to share data with external users through the internet, while the process of web scraping extracts data from a web page. The sections in [Working with data](../working-with-data/working-with-data.md) focus on how to use various data sources. - -## Your turn! 🚀 - -### Task 1 - -Kaggle is an excellent source of open datasets. Use the [dataset search tool](https://www.kaggle.com/datasets) to find some interesting datasets and classify 3-5 datasets with these criteria: - -- Is the data quantitative or qualitative? -- Is the data structured, unstructured, or semi-structured? - -### Task 2 - -[Classifying datasets](../../assignments/data-science/classifying-datasets.md) - -## Self study - -This Microsoft Learn unit, titled [Classify your data](https://docs.microsoft.com/en-us/learn/modules/choose-storage-approach-in-azure/2-classify-data) has a detailed breakdown of structured, semi-structured, and unstructured data. - -## Acknowledgments - -Thanks to Microsoft for creating the open-source course [Data Science for Beginners](https://github.com/microsoft/Data-Science-For-Beginners). It inspires the majority of the content in this chapter. - ---- - -```{bibliography} -:filter: docname in docnames -``` diff --git a/_sources/data-science/introduction/introduction-to-statistics-and-probability.ipynb b/_sources/data-science/introduction/introduction-to-statistics-and-probability.ipynb index 66fc6a79ca..a41eb6a62b 100644 --- a/_sources/data-science/introduction/introduction-to-statistics-and-probability.ipynb +++ b/_sources/data-science/introduction/introduction-to-statistics-and-probability.ipynb @@ -2,19 +2,140 @@ "cells": [ { "cell_type": "markdown", - "id": "0eb2c041", - "metadata": {}, + "id": "a93be836-2671-4863-a901-60b59799d613", + "metadata": { + "tags": [ + "hide-cell" + ] + }, + "source": [ + "---\n", + "jupytext:\n", + " cell_metadata_filter: -all\n", + " formats: md:myst\n", + " text_representation:\n", + " extension: .md\n", + " format_name: myst\n", + " format_version: 0.13\n", + " jupytext_version: 1.11.5\n", + "kernelspec:\n", + " display_name: Python 3\n", + " language: python\n", + " name: python3\n" + ] + }, + { + "cell_type": "markdown", + "id": "e8feb576", + "metadata": { + "tags": [] + }, "source": [ "# Introduction to statistics and probability\n", "\n", - "Statistics and Probability Theory are two highly related areas of Mathematics that are highly relevant to Data Science. It is possible to operate with data without deep knowledge of mathematics, but it is still better to know at least some basic concepts. Here we will present a short introduction that will help you get started.\n", + "Statistics and Probability Theory are two highly related areas of Mathematics that are highly relevant to Data Science. It is possible to operate with data without deep knowledge of mathematics, but it is still better to know at least some basic concepts. Here we will present a short introduction that will help you get started." + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "id": "09fe0040-1786-42c3-a866-447e283fa1ab", + "metadata": { + "tags": [ + "hide-input", + "output-scoll" + ] + }, + "outputs": [], + "source": [ + "# install the necessary dependencies\n", + "import sys\n", + "!{sys.executable} -m pip install --quiet pandas numpy matplotlib jupyterlab_myst pygments\n", + "import numpy as np\n", + "import pandas as pd\n", + "import matplotlib.pyplot as plt" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "574d8e32-a00e-4a44-bc3f-d5691b3c9364", + "metadata": { + "attributes": { + "classes": [ + "seealso" + ], + "id": "" + }, + "tags": [ + "hide-input", + "output-scoll" + ] + }, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "
\n", + " \n", + "
\n" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ "\n", - "```{seealso}\n", + "from IPython.display import HTML\n", + "display(HTML(\"\"\"\n", "
\n", " \n", "
\n", - "```\n", + "\"\"\"))\n", "\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "id": "a8fb9e1e", + "metadata": { + "tags": [ + "output-scoll", + "hide-input" + ] + }, + "source": [ + "execute:\n", + " exclude_patterns:\n", + " - 'assignments/*'\n", + " - 'assignments/**/*'\n", + " - 'deep-learning/*'\n", + " - 'slides/*'\n", + " - 'slides/**/*'\n", + " - 'ml-fundamentals/classification/introduction-to-classification.md'\n", + " - 'ml-fundamentals/build-a-web-app-to-use-a-machine-learning-model.md'\n", + " - 'ml-fundamentals/regression/managing-data.md'\n", + " - 'ml-fundamentals/parameter-optimization/loss-function.md'\n", + " - 'ml-advanced/ensemble-learning/random-forest.md'\n", + " - 'ml-advanced/clustering/introduction-to-clustering.md'\n", + " - 'ml-advanced/clustering/k-means-clustering.md'\n", + " - 'ml-advanced/unsupervised-learning.md'\n", + " - 'data-science/data-visualization/visualization-distributions.md'" + ] + }, + { + "cell_type": "markdown", + "id": "578cecfa", + "metadata": { + "tags": [] + }, + "source": [ "## Probability and random variables\n", "\n", "**Probability** is a number between 0 and 1 that expresses how probable an **event** is. It is defined as a number of positive outcomes (that lead to the event), divided by a total number of outcomes, given that all outcomes are equally probable. For example, when we roll a dice, the probability that we get an even number is $3/6 = 0.5$.\n", @@ -31,12 +152,33 @@ "\n", "The most well-known discrete distribution is a **uniform distribution**, in which there is a sample space of $N$ elements, with an equal probability of $1/N$ for each of them.\n", "\n", - "It is more difficult to describe the probability distribution of a continuous variable, with values drawn from some interval $[a,b]$, or the whole set of real numbers $\\mathbb{R}$. Consider the case of bus arrival time. In fact, for each exact arrival time $t$, the probability of a bus arriving at exactly that time is $0$!\n", - "\n", - "```{note}\n", + "It is more difficult to describe the probability distribution of a continuous variable, with values drawn from some interval $[a,b]$, or the whole set of real numbers $\\mathbb{R}$. Consider the case of bus arrival time. In fact, for each exact arrival time $t$, the probability of a bus arriving at exactly that time is $0$!" + ] + }, + { + "cell_type": "markdown", + "id": "ef9ef875", + "metadata": { + "attributes": { + "classes": [ + "note" + ], + "id": "" + } + }, + "source": [ + ":::{note}\n", "Now you know that events with $0$ probability happen, and very often! At least each time when the bus arrives!\n", - "```\n", - "\n", + ":::" + ] + }, + { + "cell_type": "markdown", + "id": "ac87900d", + "metadata": { + "tags": [] + }, + "source": [ "We can only talk about the probability of a variable falling in a given interval of values, eg. $P(t_1 \\le X < t_2)$. In this case, the probability distribution is described by a **probability density function** p(x), such that\n", "\n", "$$P(t_1\\le X - - -``` - -## Probability and random variables - -**Probability** is a number between 0 and 1 that expresses how probable an **event** is. It is defined as a number of positive outcomes (that lead to the event), divided by a total number of outcomes, given that all outcomes are equally probable. For example, when we roll a dice, the probability that we get an even number is $3/6 = 0.5$. - -When we talk about events, we use **random variables**. For example, the random variable that represents a number obtained when rolling a dice would take values from $1$ to $6$. A set of numbers from $1$ to $6$ is called **sample space**. We can talk about the probability of a random variable taking a certain value, for example, $P(X=3)=1/6$. - -The random variable in the previous example is called **discrete** because it has a countable sample space, i.e. there are separate values that can be enumerated. There are cases when sample space is a range of real numbers or the whole set of real numbers. Such variables are called **continuous**. A good example is a time when the bus arrives. - - - -## Probability distribution - -In the case of discrete random variables, it is easy to describe the probability of each event by a function $P(X)$. For each value $s$ from sample space $S$ it will give a number from $0$ to $1$, such that the sum of all values of $P(X=s)$ for all events would be $1$. - -The most well-known discrete distribution is a **uniform distribution**, in which there is a sample space of $N$ elements, with an equal probability of $1/N$ for each of them. - -It is more difficult to describe the probability distribution of a continuous variable, with values drawn from some interval $[a,b]$, or the whole set of real numbers $\mathbb{R}$. Consider the case of bus arrival time. In fact, for each exact arrival time $t$, the probability of a bus arriving at exactly that time is $0$! - -```{note} -Now you know that events with $0$ probability happen, and very often! At least each time when the bus arrives! -``` - -We can only talk about the probability of a variable falling in a given interval of values, eg. $P(t_1 \le X < t_2)$. In this case, the probability distribution is described by a **probability density function** p(x), such that - -$$P(t_1\le X" + "" ] }, "execution_count": 23, @@ -666,7 +666,7 @@ }, { "cell_type": "markdown", - "id": "4e6a4e6b", + "id": "9e7c4466", "metadata": {}, "source": [ "### Reshape an array\n", @@ -679,7 +679,7 @@ { "cell_type": "code", "execution_count": 24, - "id": "a79f7abd", + "id": "3b635c98", "metadata": {}, "outputs": [ { @@ -700,7 +700,7 @@ }, { "cell_type": "markdown", - "id": "9be34b2e", + "id": "edd82c34", "metadata": {}, "source": [ "You can use `reshape()` to reshape your array. For example, you can reshape this array to an array with three rows and two columns:" @@ -709,7 +709,7 @@ { "cell_type": "code", "execution_count": 25, - "id": "6a491d6d", + "id": "70a82cec", "metadata": {}, "outputs": [ { @@ -732,7 +732,7 @@ }, { "cell_type": "markdown", - "id": "e4f5e2e2", + "id": "c97b8591", "metadata": {}, "source": [ "With `np.reshape`, you can specify a few optional parameters:" @@ -741,7 +741,7 @@ { "cell_type": "code", "execution_count": 26, - "id": "94db5d5c", + "id": "e3394a1f", "metadata": {}, "outputs": [ { @@ -761,7 +761,7 @@ }, { "cell_type": "markdown", - "id": "068d9e4d", + "id": "d3b4a6fa", "metadata": {}, "source": [ "`a` is the array to be reshaped.\n", @@ -782,7 +782,7 @@ { "cell_type": "code", "execution_count": 27, - "id": "89346ac0", + "id": "067a7a2d", "metadata": {}, "outputs": [ { @@ -803,7 +803,7 @@ }, { "cell_type": "markdown", - "id": "2b48f305", + "id": "f988b32e", "metadata": {}, "source": [ "You can use `np.newaxis` to add a new axis:" @@ -812,7 +812,7 @@ { "cell_type": "code", "execution_count": 28, - "id": "3b47732a", + "id": "4896f3e9", "metadata": {}, "outputs": [ { @@ -833,7 +833,7 @@ }, { "cell_type": "markdown", - "id": "b37f75a2", + "id": "60466c47", "metadata": {}, "source": [ "You can explicitly convert a 1D array with either a row vector or a column vector using `np.newaxis`. For example, you can convert a 1D array to a row vector by inserting an axis along the first dimension:" @@ -842,7 +842,7 @@ { "cell_type": "code", "execution_count": 29, - "id": "173bee33", + "id": "3bdb4dc9", "metadata": {}, "outputs": [ { @@ -863,7 +863,7 @@ }, { "cell_type": "markdown", - "id": "df40b97b", + "id": "682ec8fd", "metadata": {}, "source": [ "Or, for a column vector, you can insert an axis along the second dimension:" @@ -872,7 +872,7 @@ { "cell_type": "code", "execution_count": 30, - "id": "3a02883f", + "id": "6e2e6dcc", "metadata": {}, "outputs": [ { @@ -893,7 +893,7 @@ }, { "cell_type": "markdown", - "id": "80847f41", + "id": "9a533818", "metadata": {}, "source": [ "You can also expand an array by inserting a new axis at a specified position with `np.expand_dims`.\n", @@ -904,7 +904,7 @@ { "cell_type": "code", "execution_count": 31, - "id": "515e0678", + "id": "f231c757", "metadata": {}, "outputs": [ { @@ -925,7 +925,7 @@ }, { "cell_type": "markdown", - "id": "e74768a7", + "id": "dae2ba71", "metadata": {}, "source": [ "You can use np.expand_dims to add an axis at index position 1 with:" @@ -934,7 +934,7 @@ { "cell_type": "code", "execution_count": 32, - "id": "7e8062a7", + "id": "fa9a1754", "metadata": {}, "outputs": [ { @@ -955,7 +955,7 @@ }, { "cell_type": "markdown", - "id": "039a2e88", + "id": "61e387bd", "metadata": {}, "source": [ "You can add an axis at index position 0 with:" @@ -964,7 +964,7 @@ { "cell_type": "code", "execution_count": 33, - "id": "afb9bc9e", + "id": "afa5e2ee", "metadata": {}, "outputs": [ { @@ -985,7 +985,7 @@ }, { "cell_type": "markdown", - "id": "7f1f0caa", + "id": "2c2b789e", "metadata": {}, "source": [ "### Indexing and slicing\n", @@ -996,7 +996,7 @@ { "cell_type": "code", "execution_count": 34, - "id": "7af3484c", + "id": "2b8d66d7", "metadata": {}, "outputs": [], "source": [ @@ -1006,7 +1006,7 @@ { "cell_type": "code", "execution_count": 35, - "id": "0e84037d", + "id": "040987c4", "metadata": {}, "outputs": [ { @@ -1027,7 +1027,7 @@ { "cell_type": "code", "execution_count": 36, - "id": "c85fbf0b", + "id": "25f88150", "metadata": {}, "outputs": [ { @@ -1048,7 +1048,7 @@ { "cell_type": "code", "execution_count": 37, - "id": "97281e02", + "id": "83acd0d4", "metadata": {}, "outputs": [ { @@ -1069,7 +1069,7 @@ { "cell_type": "code", "execution_count": 38, - "id": "a00a029b", + "id": "add70cd7", "metadata": {}, "outputs": [ { @@ -1089,7 +1089,7 @@ }, { "cell_type": "markdown", - "id": "a621f376", + "id": "e2c6aaf2", "metadata": {}, "source": [ "You may want to take a section of your array or specific array elements to use in further analysis or additional operations. To do that, you’ll need to subset, slice, and/or index your arrays.\n", @@ -1102,7 +1102,7 @@ { "cell_type": "code", "execution_count": 39, - "id": "3e51e327", + "id": "9a604b67", "metadata": {}, "outputs": [], "source": [ @@ -1111,7 +1111,7 @@ }, { "cell_type": "markdown", - "id": "fd94eaf4", + "id": "7cbab311", "metadata": {}, "source": [ "You can easily print all of the values in the array that are less than 5." @@ -1120,7 +1120,7 @@ { "cell_type": "code", "execution_count": 40, - "id": "eb33ec58", + "id": "00776007", "metadata": {}, "outputs": [ { @@ -1140,7 +1140,7 @@ }, { "cell_type": "markdown", - "id": "42927a36", + "id": "eeddf726", "metadata": {}, "source": [ "You can also select, for example, numbers that are equal to or greater than 5, and use that condition to index an array." @@ -1149,7 +1149,7 @@ { "cell_type": "code", "execution_count": 41, - "id": "eacb6f1b", + "id": "e64cd122", "metadata": {}, "outputs": [ { @@ -1170,7 +1170,7 @@ }, { "cell_type": "markdown", - "id": "2d860663", + "id": "c512e667", "metadata": {}, "source": [ "You can select elements that are divisible by 2:" @@ -1179,7 +1179,7 @@ { "cell_type": "code", "execution_count": 42, - "id": "37f9dc37", + "id": "2d394b78", "metadata": {}, "outputs": [ { @@ -1200,7 +1200,7 @@ }, { "cell_type": "markdown", - "id": "a2a9e2f4", + "id": "d419ba95", "metadata": {}, "source": [ "Or you can select elements that satisfy two conditions using the `&` and `|` operators:" @@ -1209,7 +1209,7 @@ { "cell_type": "code", "execution_count": 43, - "id": "422cbdba", + "id": "7c8a86d0", "metadata": {}, "outputs": [ { @@ -1230,7 +1230,7 @@ }, { "cell_type": "markdown", - "id": "b4595ceb", + "id": "16846ba4", "metadata": {}, "source": [ "You can also make use of the logical operators `&` and `|` in order to return boolean values that specify whether or not the values in an array fulfill a certain condition. This can be useful with arrays that contain names or other categorical values." @@ -1239,7 +1239,7 @@ { "cell_type": "code", "execution_count": 44, - "id": "64db996c", + "id": "f9b179f8", "metadata": {}, "outputs": [ { @@ -1262,7 +1262,7 @@ }, { "cell_type": "markdown", - "id": "edc854b3", + "id": "a5f1f1c0", "metadata": {}, "source": [ "You can also use `np.nonzero()` to select elements or indices from an array.\n", @@ -1273,7 +1273,7 @@ { "cell_type": "code", "execution_count": 45, - "id": "404f869e", + "id": "ee7506d5", "metadata": {}, "outputs": [], "source": [ @@ -1282,7 +1282,7 @@ }, { "cell_type": "markdown", - "id": "1ee19087", + "id": "399658e4", "metadata": {}, "source": [ "You can use `np.nonzero()` to print the indices of elements that are, for example, less than 5:" @@ -1291,7 +1291,7 @@ { "cell_type": "code", "execution_count": 46, - "id": "12cfb6f4", + "id": "f7cf6627", "metadata": {}, "outputs": [ { @@ -1312,7 +1312,7 @@ }, { "cell_type": "markdown", - "id": "760bf15b", + "id": "084590fc", "metadata": {}, "source": [ "In this example, a tuple of arrays was returned: one for each dimension. The first array represents the row indices where these values are found, and the second array represents the column indices where the values are found.\n", @@ -1323,7 +1323,7 @@ { "cell_type": "code", "execution_count": 47, - "id": "f4f80296", + "id": "aceb6426", "metadata": {}, "outputs": [ { @@ -1345,7 +1345,7 @@ }, { "cell_type": "markdown", - "id": "6680e278", + "id": "e51358aa", "metadata": {}, "source": [ "You can also use `np.nonzero()` to print the elements in an array that are less than 5 with:" @@ -1354,7 +1354,7 @@ { "cell_type": "code", "execution_count": 48, - "id": "65b12f65", + "id": "7b98ca49", "metadata": {}, "outputs": [ { @@ -1374,7 +1374,7 @@ }, { "cell_type": "markdown", - "id": "8372e4ac", + "id": "6f97c2d9", "metadata": {}, "source": [ "If the element you’re looking for doesn’t exist in the array, then the returned array of indices will be empty. For example:" @@ -1383,7 +1383,7 @@ { "cell_type": "code", "execution_count": 49, - "id": "19c3d76a", + "id": "2d55de2f", "metadata": {}, "outputs": [ { @@ -1404,7 +1404,7 @@ }, { "cell_type": "markdown", - "id": "0f62ffad", + "id": "e061db46", "metadata": {}, "source": [ "### Create an array from existing data\n", @@ -1417,7 +1417,7 @@ { "cell_type": "code", "execution_count": 50, - "id": "001023f9", + "id": "311d5d3a", "metadata": {}, "outputs": [], "source": [ @@ -1426,7 +1426,7 @@ }, { "cell_type": "markdown", - "id": "01d43320", + "id": "d9435eaf", "metadata": {}, "source": [ "You can create a new array from a section of your array any time by specifying where you want to slice your array." @@ -1435,7 +1435,7 @@ { "cell_type": "code", "execution_count": 51, - "id": "fb16cbc9", + "id": "a8a9081f", "metadata": {}, "outputs": [ { @@ -1456,7 +1456,7 @@ }, { "cell_type": "markdown", - "id": "2b48004b", + "id": "33bacf86", "metadata": {}, "source": [ "Here, you grabbed a section of your array from index position 3 through index position 8.\n", @@ -1467,7 +1467,7 @@ { "cell_type": "code", "execution_count": 52, - "id": "e43a9687", + "id": "8d0bf3a7", "metadata": {}, "outputs": [], "source": [ @@ -1479,7 +1479,7 @@ }, { "cell_type": "markdown", - "id": "dc40054e", + "id": "913ae369", "metadata": {}, "source": [ "You can stack them vertically with `vstack`:" @@ -1488,7 +1488,7 @@ { "cell_type": "code", "execution_count": 53, - "id": "a7848826", + "id": "a57f1398", "metadata": {}, "outputs": [ { @@ -1511,7 +1511,7 @@ }, { "cell_type": "markdown", - "id": "dc243852", + "id": "c93a3213", "metadata": {}, "source": [ "Or stack them horizontally with hstack:" @@ -1520,7 +1520,7 @@ { "cell_type": "code", "execution_count": 54, - "id": "a7244eaf", + "id": "3e483055", "metadata": {}, "outputs": [ { @@ -1541,7 +1541,7 @@ }, { "cell_type": "markdown", - "id": "03e9a01f", + "id": "122119f3", "metadata": {}, "source": [ "You can split an array into several smaller arrays using `hsplit`. You can specify either the number of equally shaped arrays to return or the columns after which the division should occur.\n", @@ -1552,7 +1552,7 @@ { "cell_type": "code", "execution_count": 55, - "id": "6f33525f", + "id": "47bb86da", "metadata": {}, "outputs": [ { @@ -1574,7 +1574,7 @@ }, { "cell_type": "markdown", - "id": "ef36427e", + "id": "9d15976b", "metadata": {}, "source": [ "If you wanted to split this array into three equally shaped arrays, you would run:" @@ -1583,7 +1583,7 @@ { "cell_type": "code", "execution_count": 56, - "id": "873ff953", + "id": "4c8cf233", "metadata": {}, "outputs": [ { @@ -1608,7 +1608,7 @@ }, { "cell_type": "markdown", - "id": "8af6b59e", + "id": "e207d574", "metadata": {}, "source": [ "If you wanted to split your array after the third and fourth column, you’d run:" @@ -1617,7 +1617,7 @@ { "cell_type": "code", "execution_count": 57, - "id": "b94d5683", + "id": "0cf0f3b0", "metadata": {}, "outputs": [ { @@ -1642,7 +1642,7 @@ }, { "cell_type": "markdown", - "id": "dc4706a8", + "id": "35e63b64", "metadata": {}, "source": [ "You can use the `view` method to create a new array object that looks at the same data as the original array (a shallow copy).\n", @@ -1655,7 +1655,7 @@ { "cell_type": "code", "execution_count": 58, - "id": "8013fb25", + "id": "6fa2958b", "metadata": {}, "outputs": [], "source": [ @@ -1664,7 +1664,7 @@ }, { "cell_type": "markdown", - "id": "617e3bc3", + "id": "7eed264f", "metadata": {}, "source": [ "Now we create an array `b1` by slicing `a` and modify the first element of `b1`. This will modify the corresponding element in `a` as well!" @@ -1673,7 +1673,7 @@ { "cell_type": "code", "execution_count": 59, - "id": "ea916464", + "id": "97791347", "metadata": {}, "outputs": [ { @@ -1695,7 +1695,7 @@ { "cell_type": "code", "execution_count": 60, - "id": "3d9a3b90", + "id": "8a740070", "metadata": {}, "outputs": [ { @@ -1717,7 +1717,7 @@ { "cell_type": "code", "execution_count": 61, - "id": "0c59e737", + "id": "aa1fb7c6", "metadata": {}, "outputs": [ { @@ -1739,7 +1739,7 @@ }, { "cell_type": "markdown", - "id": "04c5b53a", + "id": "c702d31a", "metadata": {}, "source": [ "Using the `copy` method will make a complete copy of the array and its data (a deep copy). To use this on your array, you could run:" @@ -1748,7 +1748,7 @@ { "cell_type": "code", "execution_count": 62, - "id": "868a0984", + "id": "59bcbef2", "metadata": {}, "outputs": [], "source": [ @@ -1757,7 +1757,7 @@ }, { "cell_type": "markdown", - "id": "83ff7af1", + "id": "3085413e", "metadata": {}, "source": [ "## Array operations\n", @@ -1770,7 +1770,7 @@ { "cell_type": "code", "execution_count": 63, - "id": "cccf7ec9", + "id": "695ac3a0", "metadata": {}, "outputs": [], "source": [ @@ -1780,7 +1780,7 @@ }, { "cell_type": "markdown", - "id": "8d81c485", + "id": "2554cc86", "metadata": {}, "source": [ "You can add the arrays together with the plus sign." @@ -1789,7 +1789,7 @@ { "cell_type": "code", "execution_count": 64, - "id": "f9e3e75e", + "id": "6226d0de", "metadata": {}, "outputs": [ { @@ -1809,7 +1809,7 @@ }, { "cell_type": "markdown", - "id": "d90b7ed5", + "id": "494e35b2", "metadata": {}, "source": [ "You can, of course, do more than just addition!" @@ -1818,7 +1818,7 @@ { "cell_type": "code", "execution_count": 65, - "id": "c8fe9fe1", + "id": "31fe29d8", "metadata": {}, "outputs": [ { @@ -1839,7 +1839,7 @@ }, { "cell_type": "markdown", - "id": "2c9b2941", + "id": "707e85aa", "metadata": {}, "source": [ "Basic operations are simple with NumPy. If you want to find the sum of the elements in an array, you’d use `sum()`. This works for 1D arrays, 2D arrays, and arrays in higher dimensions." @@ -1848,7 +1848,7 @@ { "cell_type": "code", "execution_count": 66, - "id": "4fec575e", + "id": "3fd4efa4", "metadata": {}, "outputs": [ { @@ -1869,7 +1869,7 @@ }, { "cell_type": "markdown", - "id": "1628e025", + "id": "428a46f8", "metadata": {}, "source": [ "To add the rows or the columns in a 2D array, you would specify the axis.\n", @@ -1880,7 +1880,7 @@ { "cell_type": "code", "execution_count": 67, - "id": "2ad9f245", + "id": "08182aa5", "metadata": {}, "outputs": [], "source": [ @@ -1889,7 +1889,7 @@ }, { "cell_type": "markdown", - "id": "e1caa973", + "id": "f7d16cb5", "metadata": {}, "source": [ "You can sum over the axis of rows with:" @@ -1898,7 +1898,7 @@ { "cell_type": "code", "execution_count": 68, - "id": "3532999e", + "id": "1c6723a8", "metadata": {}, "outputs": [ { @@ -1918,7 +1918,7 @@ }, { "cell_type": "markdown", - "id": "7740c46e", + "id": "6a2c2f26", "metadata": {}, "source": [ "You can sum over the axis of columns with:" @@ -1927,7 +1927,7 @@ { "cell_type": "code", "execution_count": 69, - "id": "5eadddd9", + "id": "0128ba3d", "metadata": {}, "outputs": [ { @@ -1947,7 +1947,7 @@ }, { "cell_type": "markdown", - "id": "91fad533", + "id": "a9c96f50", "metadata": {}, "source": [ "### Universal functions(ufunc)\n", @@ -2038,7 +2038,7 @@ { "cell_type": "code", "execution_count": 70, - "id": "9264be94", + "id": "ef248869", "metadata": {}, "outputs": [ { @@ -2060,7 +2060,7 @@ }, { "cell_type": "markdown", - "id": "9359eba9", + "id": "5862d7c2", "metadata": {}, "source": [ "NumPy’s broadcasting rule relaxes this constraint when the arrays’ shapes meet certain constraints. The simplest broadcasting example occurs when an array and a scalar value are combined in an operation:" @@ -2069,7 +2069,7 @@ { "cell_type": "code", "execution_count": 71, - "id": "0ed61cc4", + "id": "39173cbb", "metadata": {}, "outputs": [ { @@ -2091,7 +2091,7 @@ }, { "cell_type": "markdown", - "id": "32709b16", + "id": "28c3594f", "metadata": {}, "source": [ "The result is equivalent to the previous example where `b` was an array. NumPy is smart enough to use the original scalar value without actually making copies so that broadcasting operations are as memory and computationally efficient as possible.\n", @@ -2133,7 +2133,7 @@ { "cell_type": "code", "execution_count": 72, - "id": "b12b29bf", + "id": "c628a1b5", "metadata": {}, "outputs": [ { @@ -2154,7 +2154,7 @@ { "cell_type": "code", "execution_count": 73, - "id": "65d7fccc", + "id": "3b8afcfe", "metadata": {}, "outputs": [ { @@ -2175,7 +2175,7 @@ { "cell_type": "code", "execution_count": 74, - "id": "98253e19", + "id": "e5ceffd7", "metadata": {}, "outputs": [ { @@ -2195,7 +2195,7 @@ }, { "cell_type": "markdown", - "id": "db671804", + "id": "f8e1ea6f", "metadata": {}, "source": [ "Let’s start with this array, called “a”." @@ -2204,7 +2204,7 @@ { "cell_type": "code", "execution_count": 75, - "id": "03282c60", + "id": "f11b6aab", "metadata": {}, "outputs": [], "source": [ @@ -2215,7 +2215,7 @@ }, { "cell_type": "markdown", - "id": "14df085e", + "id": "1c77e02d", "metadata": {}, "source": [ "It’s very common to want to aggregate along a row or column. By default, every NumPy aggregation function will return the aggregate of the entire array. To find the sum or the minimum of the elements in your array, run:" @@ -2224,7 +2224,7 @@ { "cell_type": "code", "execution_count": 76, - "id": "02410542", + "id": "4672a4f7", "metadata": {}, "outputs": [ { @@ -2244,7 +2244,7 @@ }, { "cell_type": "markdown", - "id": "6d9ff72b", + "id": "6de9c70a", "metadata": {}, "source": [ "Or:" @@ -2253,7 +2253,7 @@ { "cell_type": "code", "execution_count": 77, - "id": "74a4bff6", + "id": "15df4134", "metadata": {}, "outputs": [ { @@ -2273,7 +2273,7 @@ }, { "cell_type": "markdown", - "id": "f3579292", + "id": "6ac7fa2c", "metadata": {}, "source": [ "You can specify on which axis you want the aggregation function to be computed. For example, you can find the minimum value within each column by specifying `axis=0`." @@ -2282,7 +2282,7 @@ { "cell_type": "code", "execution_count": 78, - "id": "b717f94e", + "id": "9e8daa12", "metadata": {}, "outputs": [ { @@ -2302,7 +2302,7 @@ }, { "cell_type": "markdown", - "id": "48e89abc", + "id": "d6f0bfbd", "metadata": {}, "source": [ "The four values listed above correspond to the number of columns in your array. With a four-column array, you will get four values as your result.\n", @@ -2325,7 +2325,7 @@ { "cell_type": "code", "execution_count": 79, - "id": "71d061be", + "id": "4450838a", "metadata": {}, "outputs": [], "source": [ @@ -2335,7 +2335,7 @@ { "cell_type": "code", "execution_count": 80, - "id": "bead868c", + "id": "10190d22", "metadata": {}, "outputs": [ { @@ -2356,7 +2356,7 @@ { "cell_type": "code", "execution_count": 81, - "id": "2cba2c66", + "id": "1853031a", "metadata": {}, "outputs": [ { @@ -2376,7 +2376,7 @@ }, { "cell_type": "markdown", - "id": "a130d342", + "id": "4c2c3f7e", "metadata": {}, "source": [ "It is not necessary to separate each dimension’s index into its own set of square brackets." @@ -2385,7 +2385,7 @@ { "cell_type": "code", "execution_count": 82, - "id": "cf7fd924", + "id": "d02e2655", "metadata": {}, "outputs": [], "source": [ @@ -2395,7 +2395,7 @@ { "cell_type": "code", "execution_count": 83, - "id": "8dd6b459", + "id": "90cc832e", "metadata": {}, "outputs": [ { @@ -2416,7 +2416,7 @@ { "cell_type": "code", "execution_count": 84, - "id": "385451e4", + "id": "a10c38da", "metadata": {}, "outputs": [ { @@ -2436,7 +2436,7 @@ }, { "cell_type": "markdown", - "id": "017ffd97", + "id": "f4f08161", "metadata": {}, "source": [ "Note that If one indexes a multidimensional array with fewer indices than dimensions, one gets a subdimensional array. For example:" @@ -2445,7 +2445,7 @@ { "cell_type": "code", "execution_count": 85, - "id": "2d0ab08c", + "id": "eb3a616a", "metadata": {}, "outputs": [ { @@ -2465,7 +2465,7 @@ }, { "cell_type": "markdown", - "id": "dc5ad96a", + "id": "377b05fe", "metadata": {}, "source": [ "That is, each index specified selects the array corresponding to the rest of the dimensions selected. In the above example, choosing 0 means that the remaining dimension of length 5 is being left unspecified, and that what is returned is an array of that dimensionality and size. It must be noted that the returned array is a view, i.e., it is not a copy of the original, but points to the same values in memory as does the original array. In this case, the 1-D array at the first position (0) is returned. So using a single index on the returned array, results in a single element being returned. That is:" @@ -2474,7 +2474,7 @@ { "cell_type": "code", "execution_count": 86, - "id": "e9773a98", + "id": "6537ef11", "metadata": {}, "outputs": [ { @@ -2494,7 +2494,7 @@ }, { "cell_type": "markdown", - "id": "af6801d1", + "id": "48837a75", "metadata": {}, "source": [ "So note that `x[0, 2] == x[0][2]` though the second case is more inefficient as a new temporary array is created after the first index that is subsequently indexed by 2.\n", @@ -2521,7 +2521,7 @@ { "cell_type": "code", "execution_count": 87, - "id": "2f149759", + "id": "14dd9f2f", "metadata": {}, "outputs": [ { @@ -2542,7 +2542,7 @@ }, { "cell_type": "markdown", - "id": "35667987", + "id": "16627f0f", "metadata": {}, "source": [ "- Negative *i* and *j* are interpreted as *n + i* and *n + j* where *n* is the number of elements in the corresponding dimension. Negative *k* makes stepping go towards smaller indices. From the above example:" @@ -2551,7 +2551,7 @@ { "cell_type": "code", "execution_count": 88, - "id": "44db88e7", + "id": "0a0b3c3d", "metadata": {}, "outputs": [ { @@ -2572,7 +2572,7 @@ { "cell_type": "code", "execution_count": 89, - "id": "11fad372", + "id": "80e5ec1b", "metadata": {}, "outputs": [ { @@ -2592,7 +2592,7 @@ }, { "cell_type": "markdown", - "id": "f0dd1c77", + "id": "3e1c8d05", "metadata": {}, "source": [ "- Assume *n* is the number of elements in the dimension being sliced. Then, if *i* is not given it defaults to 0 for *k > 0* and *n - 1* for *k < 0*. If *j* is not given it defaults to *n* for *k > 0* and *-n-1* for *k < 0*. If *k* is not given it defaults to 1. Note that `::` is the same as : and means select all indices along this axis. From the above example:" @@ -2601,7 +2601,7 @@ { "cell_type": "code", "execution_count": 90, - "id": "b3785714", + "id": "51c83c7c", "metadata": {}, "outputs": [ { @@ -2621,7 +2621,7 @@ }, { "cell_type": "markdown", - "id": "84b54d71", + "id": "fdc8656b", "metadata": {}, "source": [ "- If the number of objects in the selection tuple is less than N, then `:` is assumed for any subsequent dimensions. For example:" @@ -2630,7 +2630,7 @@ { "cell_type": "code", "execution_count": 91, - "id": "35b6e687", + "id": "5162f77e", "metadata": {}, "outputs": [ { @@ -2652,7 +2652,7 @@ { "cell_type": "code", "execution_count": 92, - "id": "65e42df0", + "id": "a57b6bca", "metadata": {}, "outputs": [ { @@ -2674,7 +2674,7 @@ }, { "cell_type": "markdown", - "id": "6020e8bb", + "id": "944e3a00", "metadata": {}, "source": [ "- An integer, *i*, returns the same values as `i:i+1` **except** the dimensionality of the returned object is reduced by 1. In particular, a selection tuple with the *p*-th element an integer (and all other entries *:*) returns the corresponding sub-array with dimension *N - 1*. If *N = 1* then the returned object is an array scalar.\n", @@ -2699,7 +2699,7 @@ { "cell_type": "code", "execution_count": 93, - "id": "b8f5e39a", + "id": "d313c9c9", "metadata": {}, "outputs": [ { @@ -2720,7 +2720,7 @@ }, { "cell_type": "markdown", - "id": "9b13174d", + "id": "accce0d4", "metadata": {}, "source": [ "This is equivalent to:" @@ -2729,7 +2729,7 @@ { "cell_type": "code", "execution_count": 94, - "id": "e48cbad4", + "id": "962ce5bd", "metadata": {}, "outputs": [ { @@ -2750,7 +2750,7 @@ }, { "cell_type": "markdown", - "id": "efe6e51b", + "id": "d124c0c9", "metadata": {}, "source": [ "Each `newaxis` object in the selection tuple serves to expand the dimensions of the resulting selection by one unit-length dimension. The added dimension is the position of the `newaxis` object in the selection tuple. `newaxis` is an alias for `None`, and `None` can be used in place of this with the same result. From the above example:" @@ -2759,7 +2759,7 @@ { "cell_type": "code", "execution_count": 95, - "id": "8f790053", + "id": "721c8994", "metadata": {}, "outputs": [ { @@ -2780,7 +2780,7 @@ { "cell_type": "code", "execution_count": 96, - "id": "aaa97314", + "id": "c113639e", "metadata": {}, "outputs": [ { @@ -2800,7 +2800,7 @@ }, { "cell_type": "markdown", - "id": "288877fe", + "id": "358ff1fa", "metadata": {}, "source": [ "This can be handy to combine two arrays in a way that otherwise would require explicit reshaping operations. For example:" @@ -2809,7 +2809,7 @@ { "cell_type": "code", "execution_count": 97, - "id": "335ee5e0", + "id": "c5a789a0", "metadata": {}, "outputs": [ { @@ -2834,7 +2834,7 @@ }, { "cell_type": "markdown", - "id": "f09efbf8", + "id": "fbffca75", "metadata": {}, "source": [ "### Advanced indexing\n", @@ -2857,7 +2857,7 @@ { "cell_type": "code", "execution_count": 98, - "id": "8eada8fb", + "id": "8b144bd4", "metadata": {}, "outputs": [], "source": [ @@ -2867,7 +2867,7 @@ { "cell_type": "code", "execution_count": 99, - "id": "398eded1", + "id": "5cc04bed", "metadata": {}, "outputs": [ { @@ -2888,7 +2888,7 @@ { "cell_type": "code", "execution_count": 100, - "id": "5e2f761b", + "id": "f562a26b", "metadata": {}, "outputs": [ { @@ -2909,7 +2909,7 @@ { "cell_type": "code", "execution_count": 101, - "id": "ed86aab1", + "id": "d4269301", "metadata": {}, "outputs": [ { @@ -2929,7 +2929,7 @@ }, { "cell_type": "markdown", - "id": "0f8aefb6", + "id": "a9125b73", "metadata": {}, "source": [ "If the index values are out of bounds then an `IndexError` is thrown:" @@ -2938,7 +2938,7 @@ { "cell_type": "code", "execution_count": 102, - "id": "fe15e74f", + "id": "76b7edb0", "metadata": {}, "outputs": [], "source": [ @@ -2948,7 +2948,7 @@ { "cell_type": "code", "execution_count": 103, - "id": "43a5ddce", + "id": "b9cbd184", "metadata": {}, "outputs": [ { @@ -2969,7 +2969,7 @@ }, { "cell_type": "markdown", - "id": "b457fb61", + "id": "e395168c", "metadata": {}, "source": [ "```py\n", @@ -2999,7 +2999,7 @@ { "cell_type": "code", "execution_count": 104, - "id": "db069398", + "id": "8ab458d8", "metadata": {}, "outputs": [], "source": [ @@ -3009,7 +3009,7 @@ { "cell_type": "code", "execution_count": 105, - "id": "8ed17408", + "id": "1f2bcb11", "metadata": {}, "outputs": [ { @@ -3034,7 +3034,7 @@ { "cell_type": "code", "execution_count": 106, - "id": "4b21f580", + "id": "820062fc", "metadata": {}, "outputs": [ { @@ -3054,7 +3054,7 @@ }, { "cell_type": "markdown", - "id": "2e0d1bc3", + "id": "db53daac", "metadata": {}, "source": [ "In this case, if the index arrays have a matching shape, and there is an index array for each dimension of the array being indexed, the resultant array has the same shape as the index arrays, and the values correspond to the index set for each position in the index arrays. In this example, the first index value is 0 for both index arrays, and thus the first value of the resultant array is `y[0, 0]`. The next value is `y[2, 1]`, and the last is `y[4, 2]`.\n", @@ -3077,7 +3077,7 @@ { "cell_type": "code", "execution_count": 107, - "id": "e981c0e7", + "id": "1b1a1b5a", "metadata": {}, "outputs": [ { @@ -3097,7 +3097,7 @@ }, { "cell_type": "markdown", - "id": "42d5cf43", + "id": "0cee103d", "metadata": {}, "source": [ "Jumping to the next level of complexity, it is possible to only partially index an array with index arrays. It takes a bit of thought to understand what happens in such cases. For example if we just use one index array with y:" @@ -3106,7 +3106,7 @@ { "cell_type": "code", "execution_count": 108, - "id": "779a552e", + "id": "8406aaa9", "metadata": {}, "outputs": [ { @@ -3128,7 +3128,7 @@ }, { "cell_type": "markdown", - "id": "7acc03a7", + "id": "5df0f65d", "metadata": {}, "source": [ "It results in the construction of a new array where each value of the index array selects one row from the array being indexed and the resultant array has the resulting shape (number of index elements, size of row).\n", @@ -3143,7 +3143,7 @@ { "cell_type": "code", "execution_count": 109, - "id": "fe866db9", + "id": "93d197df", "metadata": {}, "outputs": [ { @@ -3164,7 +3164,7 @@ }, { "cell_type": "markdown", - "id": "4209949f", + "id": "477e572b", "metadata": {}, "source": [ "To achieve a behaviour similar to the basic slicing above, broadcasting can be used. The function `ix_` can help with this broadcasting. This is best understood with an example.\n", @@ -3177,7 +3177,7 @@ { "cell_type": "code", "execution_count": 110, - "id": "acce8a3c", + "id": "33c0ea04", "metadata": {}, "outputs": [ { @@ -3206,7 +3206,7 @@ }, { "cell_type": "markdown", - "id": "a57a76d8", + "id": "4fba67c2", "metadata": {}, "source": [ "However, since the indexing arrays above just repeat themselves, broadcasting can be used (compare operations such as `rows[:, np.newaxis] + columns`) to simplify this:" @@ -3215,7 +3215,7 @@ { "cell_type": "code", "execution_count": 111, - "id": "dcfb7922", + "id": "4445fc8a", "metadata": {}, "outputs": [], "source": [ @@ -3226,7 +3226,7 @@ { "cell_type": "code", "execution_count": 112, - "id": "1ef79fc2", + "id": "690e98fd", "metadata": {}, "outputs": [ { @@ -3248,7 +3248,7 @@ { "cell_type": "code", "execution_count": 113, - "id": "0e00e25b", + "id": "ac5928f6", "metadata": {}, "outputs": [ { @@ -3269,7 +3269,7 @@ }, { "cell_type": "markdown", - "id": "4ede1de7", + "id": "c2e7743d", "metadata": {}, "source": [ "This broadcasting can also be achieved using the function `ix_`:" @@ -3278,7 +3278,7 @@ { "cell_type": "code", "execution_count": 114, - "id": "d04223ec", + "id": "8b37f49c", "metadata": {}, "outputs": [ { @@ -3299,7 +3299,7 @@ }, { "cell_type": "markdown", - "id": "7d041345", + "id": "8df9fdc5", "metadata": {}, "source": [ "Note that without the `np.ix_` call, only the diagonal elements would be selected:" @@ -3308,7 +3308,7 @@ { "cell_type": "code", "execution_count": 115, - "id": "05d8d64e", + "id": "60cd151b", "metadata": {}, "outputs": [ { @@ -3328,7 +3328,7 @@ }, { "cell_type": "markdown", - "id": "beb8e135", + "id": "40cb41d0", "metadata": {}, "source": [ "This difference is the most important thing to remember about indexing with multiple advanced indices.\n", @@ -3349,7 +3349,7 @@ { "cell_type": "code", "execution_count": 116, - "id": "44da7138", + "id": "034f6e88", "metadata": {}, "outputs": [ { @@ -3370,7 +3370,7 @@ }, { "cell_type": "markdown", - "id": "cd396682", + "id": "7ec2b126", "metadata": {}, "source": [ "Or wish to add a constant to all negative elements:" @@ -3379,7 +3379,7 @@ { "cell_type": "code", "execution_count": 117, - "id": "1dc7a4cc", + "id": "776e538b", "metadata": {}, "outputs": [ { @@ -3401,7 +3401,7 @@ }, { "cell_type": "markdown", - "id": "8f45838c", + "id": "c48ff2a1", "metadata": {}, "source": [ "In general if an index includes a Boolean array, the result will be identical to inserting `obj.nonzero()` into the same position and using the integer array indexing mechanism described above. `x[ind_1, boolean_array, ind_2]` is equivalent to `x[(ind_1,) + boolean_array.nonzero() + (ind_2,)]`.\n", @@ -3414,7 +3414,7 @@ { "cell_type": "code", "execution_count": 118, - "id": "6f77151a", + "id": "3f3b00b5", "metadata": {}, "outputs": [], "source": [ @@ -3425,7 +3425,7 @@ { "cell_type": "code", "execution_count": 119, - "id": "37df0c15", + "id": "4db6538a", "metadata": {}, "outputs": [ { @@ -3446,7 +3446,7 @@ { "cell_type": "code", "execution_count": 120, - "id": "dad25983", + "id": "f2b3c754", "metadata": {}, "outputs": [ { @@ -3467,7 +3467,7 @@ }, { "cell_type": "markdown", - "id": "79fd7adc", + "id": "67b5790c", "metadata": {}, "source": [ "Here the 4th and 5th rows are selected from the indexed array and combined to make a 2-D array.\n", @@ -3480,7 +3480,7 @@ { "cell_type": "code", "execution_count": 121, - "id": "d191c8ac", + "id": "ac321cea", "metadata": {}, "outputs": [ { @@ -3503,7 +3503,7 @@ }, { "cell_type": "markdown", - "id": "86a6f10e", + "id": "5d2c03c1", "metadata": {}, "source": [ "Combining multiple Boolean indexing arrays or a Boolean with an integer indexing array can best be understood with the `obj.nonzero()` analogy. The function `ix_` also supports boolean arrays and will work without any surprises.\n", @@ -3516,7 +3516,7 @@ { "cell_type": "code", "execution_count": 122, - "id": "7daa4905", + "id": "f806b15f", "metadata": {}, "outputs": [], "source": [ @@ -3530,7 +3530,7 @@ { "cell_type": "code", "execution_count": 123, - "id": "36c22ceb", + "id": "e7bf6120", "metadata": {}, "outputs": [ { @@ -3551,7 +3551,7 @@ { "cell_type": "code", "execution_count": 124, - "id": "66fa505e", + "id": "21dd0d79", "metadata": {}, "outputs": [], "source": [ @@ -3561,7 +3561,7 @@ { "cell_type": "code", "execution_count": 125, - "id": "f3b1332f", + "id": "2b9faab4", "metadata": {}, "outputs": [ { @@ -3582,7 +3582,7 @@ }, { "cell_type": "markdown", - "id": "0fb89ffb", + "id": "495bb350", "metadata": {}, "source": [ "Without the n`p.ix_` call, only the diagonal elements would be selected.\n", @@ -3593,7 +3593,7 @@ { "cell_type": "code", "execution_count": 126, - "id": "e8c77928", + "id": "964c9d9e", "metadata": {}, "outputs": [ { @@ -3615,7 +3615,7 @@ }, { "cell_type": "markdown", - "id": "68e3526b", + "id": "66bcdf85", "metadata": {}, "source": [ "##### Example 3\n", @@ -3626,7 +3626,7 @@ { "cell_type": "code", "execution_count": 127, - "id": "09195242", + "id": "a31b7d5a", "metadata": {}, "outputs": [ { @@ -3654,7 +3654,7 @@ { "cell_type": "code", "execution_count": 128, - "id": "d25ecd0d", + "id": "ae893b90", "metadata": {}, "outputs": [ { @@ -3678,7 +3678,7 @@ }, { "cell_type": "markdown", - "id": "1e1f581b", + "id": "c8f5879e", "metadata": {}, "source": [ "#### Combining advanced and basic indexing\n", @@ -3691,7 +3691,7 @@ { "cell_type": "code", "execution_count": 129, - "id": "49b36eac", + "id": "edd90b6c", "metadata": {}, "outputs": [ { @@ -3714,7 +3714,7 @@ }, { "cell_type": "markdown", - "id": "05b01a82", + "id": "1ec3cf31", "metadata": {}, "source": [ "In effect, the slice and index array operation are independent. The slice operation extracts columns with index 1 and 2, (i.e. the 2nd and 3rd columns), followed by the index array operation which extracts rows with index 0, 2 and 4 (i.e the first, third and fifth rows). This is equivalent to:" @@ -3723,7 +3723,7 @@ { "cell_type": "code", "execution_count": 130, - "id": "dc8de3f5", + "id": "fff9b422", "metadata": {}, "outputs": [ { @@ -3745,7 +3745,7 @@ }, { "cell_type": "markdown", - "id": "11d142be", + "id": "9ec5d536", "metadata": {}, "source": [ "A single advanced index can, for example, replace a slice and the result array will be the same. However, it is a copy and may have a different memory layout. A slice is preferable when it is possible. For example:" @@ -3754,7 +3754,7 @@ { "cell_type": "code", "execution_count": 131, - "id": "30c4d8e3", + "id": "750ad1c4", "metadata": {}, "outputs": [], "source": [ @@ -3767,7 +3767,7 @@ { "cell_type": "code", "execution_count": 132, - "id": "0dc53392", + "id": "d9ba63fc", "metadata": {}, "outputs": [ { @@ -3788,7 +3788,7 @@ { "cell_type": "code", "execution_count": 133, - "id": "ebc71852", + "id": "5baf9d82", "metadata": {}, "outputs": [ { @@ -3808,7 +3808,7 @@ }, { "cell_type": "markdown", - "id": "ef0a5105", + "id": "07e4d279", "metadata": {}, "source": [ "The easiest way to understand a combination of multiple advanced indices may be to think in terms of the resulting shape. There are two parts to the indexing operation, the subspace defined by the basic indexing (excluding integers) and the subspace from the advanced indexing part. Two cases of index combination need to be distinguished:\n", @@ -3834,7 +3834,7 @@ { "cell_type": "code", "execution_count": 134, - "id": "b8ed890a", + "id": "31fa379d", "metadata": {}, "outputs": [], "source": [ @@ -3845,7 +3845,7 @@ { "cell_type": "code", "execution_count": 135, - "id": "3489681a", + "id": "b10397fd", "metadata": {}, "outputs": [ { @@ -3870,7 +3870,7 @@ { "cell_type": "code", "execution_count": 136, - "id": "a8c8e911", + "id": "256d7468", "metadata": {}, "outputs": [ { @@ -3891,7 +3891,7 @@ }, { "cell_type": "markdown", - "id": "5e087c4b", + "id": "ed03ee54", "metadata": {}, "source": [ "### Field access\n", @@ -3908,7 +3908,7 @@ { "cell_type": "code", "execution_count": 137, - "id": "1e18afad", + "id": "88408175", "metadata": {}, "outputs": [], "source": [ @@ -3918,7 +3918,7 @@ { "cell_type": "code", "execution_count": 138, - "id": "96e3f91b", + "id": "5ab1560f", "metadata": {}, "outputs": [ { @@ -3939,7 +3939,7 @@ { "cell_type": "code", "execution_count": 139, - "id": "9ccd1832", + "id": "ec1a8c24", "metadata": {}, "outputs": [ { @@ -3960,7 +3960,7 @@ { "cell_type": "code", "execution_count": 140, - "id": "0f4fe3b9", + "id": "7f9eaba3", "metadata": {}, "outputs": [ { @@ -3981,7 +3981,7 @@ { "cell_type": "code", "execution_count": 141, - "id": "c14cf120", + "id": "026e6417", "metadata": {}, "outputs": [ { @@ -4001,7 +4001,7 @@ }, { "cell_type": "markdown", - "id": "c2bf4e3c", + "id": "e70c7aa1", "metadata": {}, "source": [ "### Flat Iterator indexing\n", @@ -4016,7 +4016,7 @@ { "cell_type": "code", "execution_count": 142, - "id": "443145e3", + "id": "f01bf460", "metadata": {}, "outputs": [], "source": [ @@ -4026,7 +4026,7 @@ }, { "cell_type": "markdown", - "id": "1252b01f", + "id": "12d0c0d7", "metadata": {}, "source": [ "Or an array of the right size:" @@ -4035,7 +4035,7 @@ { "cell_type": "code", "execution_count": 143, - "id": "7129a2b7", + "id": "83d436ff", "metadata": {}, "outputs": [], "source": [ @@ -4044,7 +4044,7 @@ }, { "cell_type": "markdown", - "id": "1e29d072", + "id": "506ceb99", "metadata": {}, "source": [ "Note that assignments may result in changes if assigning higher types to lower types (like floats to ints) or even exceptions (assigning complex to floats or ints):" @@ -4053,7 +4053,7 @@ { "cell_type": "code", "execution_count": 144, - "id": "3f819544", + "id": "c247723c", "metadata": {}, "outputs": [ { @@ -4074,7 +4074,7 @@ }, { "cell_type": "markdown", - "id": "205c6ffc", + "id": "58afbf47", "metadata": {}, "source": [ "```py\n", @@ -4093,7 +4093,7 @@ { "cell_type": "code", "execution_count": 145, - "id": "30c3c0fa", + "id": "4f172c9c", "metadata": {}, "outputs": [ { @@ -4115,7 +4115,7 @@ { "cell_type": "code", "execution_count": 146, - "id": "0d60158c", + "id": "e0469b3d", "metadata": {}, "outputs": [ { @@ -4136,7 +4136,7 @@ }, { "cell_type": "markdown", - "id": "a62a96e3", + "id": "9c6e003b", "metadata": {}, "source": [ "Where people expect that the 1st location will be incremented by 3. In fact, it will only be incremented by 1. The reason is that a new array is extracted from the original (as a temporary) containing the values at 1, 1, 3, 1, then the value 1 is added to the temporary, and then the temporary is assigned back to the original array. Thus the value of the array at `x[1] + 1` is assigned to `x[1]` three times, rather than being incremented 3 times.\n", @@ -4149,7 +4149,7 @@ { "cell_type": "code", "execution_count": 147, - "id": "746e7d9b", + "id": "10981ef7", "metadata": {}, "outputs": [ { @@ -4171,7 +4171,7 @@ }, { "cell_type": "markdown", - "id": "57265d49", + "id": "9794d68a", "metadata": {}, "source": [ "So one can use code to construct tuples of any number of indices and then use these within an index.\n", @@ -4182,7 +4182,7 @@ { "cell_type": "code", "execution_count": 148, - "id": "6d3bb9ca", + "id": "7abf8d4f", "metadata": {}, "outputs": [ { @@ -4203,7 +4203,7 @@ }, { "cell_type": "markdown", - "id": "d74fcb01", + "id": "e5546b1b", "metadata": {}, "source": [ "Likewise, ellipsis can be specified by code by using the Ellipsis object:" @@ -4212,7 +4212,7 @@ { "cell_type": "code", "execution_count": 149, - "id": "41daa85d", + "id": "f17ac336", "metadata": {}, "outputs": [ { @@ -4235,7 +4235,7 @@ }, { "cell_type": "markdown", - "id": "2b37738a", + "id": "782b633e", "metadata": {}, "source": [ "For this reason, it is possible to use the output from the `np.nonzero()` function directly as an index since it always returns a tuple of index arrays.\n", @@ -4246,7 +4246,7 @@ { "cell_type": "code", "execution_count": 150, - "id": "37249d96", + "id": "32df210d", "metadata": {}, "outputs": [ { @@ -4316,7 +4316,7 @@ { "cell_type": "code", "execution_count": 151, - "id": "52c5ec3f", + "id": "ae43b357", "metadata": {}, "outputs": [ { @@ -4336,7 +4336,7 @@ }, { "cell_type": "markdown", - "id": "5c85a33e", + "id": "e8da70c1", "metadata": {}, "source": [ "## Structured arrays\n", @@ -4349,7 +4349,7 @@ { "cell_type": "code", "execution_count": 152, - "id": "2b3ca6b6", + "id": "5cefcabd", "metadata": {}, "outputs": [ { @@ -4372,7 +4372,7 @@ }, { "cell_type": "markdown", - "id": "24e60573", + "id": "55522e67", "metadata": {}, "source": [ "Here `x` is a one-dimensional array of length two whose datatype is a structure with three fields: 1. A string of length 10 or less named `'name'`, 2. a 32-bit integer named `'age'`, and 3. a 32-bit float named `'weight'`.\n", @@ -4383,7 +4383,7 @@ { "cell_type": "code", "execution_count": 153, - "id": "03530929", + "id": "26d5311d", "metadata": {}, "outputs": [ { @@ -4403,7 +4403,7 @@ }, { "cell_type": "markdown", - "id": "5aa003e0", + "id": "6a829e6d", "metadata": {}, "source": [ "You can access and modify individual fields of a structured array by indexing with the field name:" @@ -4412,7 +4412,7 @@ { "cell_type": "code", "execution_count": 154, - "id": "4519c096", + "id": "99add1a0", "metadata": {}, "outputs": [ { @@ -4433,7 +4433,7 @@ { "cell_type": "code", "execution_count": 155, - "id": "b184f47a", + "id": "0549b6f6", "metadata": {}, "outputs": [ { @@ -4454,7 +4454,7 @@ { "cell_type": "code", "execution_count": 156, - "id": "5144813b", + "id": "a46b7c66", "metadata": {}, "outputs": [ { @@ -4475,7 +4475,7 @@ }, { "cell_type": "markdown", - "id": "af28def1", + "id": "421614cf", "metadata": {}, "source": [ "Structured datatypes are designed to be able to mimic 'structs' in the C language, and share a similar memory layout. They are meant for interfacing with C code and for low-level manipulation of structured buffers, for example for interpreting binary blobs. For these purposes they support specialized features such as subarrays, nested datatypes, and unions, and allow control over the memory layout of the structure.\n", @@ -4498,7 +4498,7 @@ { "cell_type": "code", "execution_count": 157, - "id": "eab3d997", + "id": "ac3ad698", "metadata": {}, "outputs": [ { @@ -4518,7 +4518,7 @@ }, { "cell_type": "markdown", - "id": "044e83b9", + "id": "256d4b96", "metadata": {}, "source": [ "If `fieldname` is the empty string `''`, the field will be given a default name of the form `f#`, where `#` is the integer index of the field, counting from 0 from the left:" @@ -4527,7 +4527,7 @@ { "cell_type": "code", "execution_count": 158, - "id": "91f63ef4", + "id": "1d16916c", "metadata": {}, "outputs": [ { @@ -4547,7 +4547,7 @@ }, { "cell_type": "markdown", - "id": "11104dc3", + "id": "5c1fea12", "metadata": {}, "source": [ "The byte offsets of the fields within the structure and the total structure itemsize are determined automatically.\n", @@ -4560,7 +4560,7 @@ { "cell_type": "code", "execution_count": 159, - "id": "9c639147", + "id": "4ac7166d", "metadata": {}, "outputs": [ { @@ -4581,7 +4581,7 @@ { "cell_type": "code", "execution_count": 160, - "id": "e1a2d85c", + "id": "a97720c4", "metadata": {}, "outputs": [ { @@ -4601,7 +4601,7 @@ }, { "cell_type": "markdown", - "id": "84210698", + "id": "a8b0360e", "metadata": {}, "source": [ "- A dictionary of field parameter arrays\n", @@ -4614,7 +4614,7 @@ { "cell_type": "code", "execution_count": 161, - "id": "6ff0c915", + "id": "6aa4b702", "metadata": {}, "outputs": [ { @@ -4635,7 +4635,7 @@ { "cell_type": "code", "execution_count": 162, - "id": "99ccdcd1", + "id": "9c0848da", "metadata": {}, "outputs": [ { @@ -4658,7 +4658,7 @@ }, { "cell_type": "markdown", - "id": "243a9bc2", + "id": "054943d8", "metadata": {}, "source": [ "Offsets may be chosen such that the fields overlap, though this will mean that assigning to one field may clobber any overlapping field’s data. As an exception, fields of `numpy.object_` type cannot overlap with other fields, because of the risk of clobbering the internal object pointer and then dereferencing it.\n", @@ -4673,7 +4673,7 @@ { "cell_type": "code", "execution_count": 163, - "id": "e49a62f4", + "id": "ab5f6e64", "metadata": {}, "outputs": [ { @@ -4693,7 +4693,7 @@ }, { "cell_type": "markdown", - "id": "486da6db", + "id": "54333b97", "metadata": {}, "source": [ "#### Manipulating and Displaying Structured Datatypes\n", @@ -4704,7 +4704,7 @@ { "cell_type": "code", "execution_count": 164, - "id": "30432953", + "id": "0b1c3e34", "metadata": {}, "outputs": [ { @@ -4725,7 +4725,7 @@ }, { "cell_type": "markdown", - "id": "fec39dcc", + "id": "e9478ce8", "metadata": {}, "source": [ "The field names may be modified by assigning to the `names` attribute using a sequence of strings of the same length.\n", @@ -4736,7 +4736,7 @@ { "cell_type": "code", "execution_count": 165, - "id": "02da466d", + "id": "2cec035d", "metadata": {}, "outputs": [ { @@ -4756,7 +4756,7 @@ }, { "cell_type": "markdown", - "id": "b8bf3dde", + "id": "af50c892", "metadata": {}, "source": [ "Both the `names` and `fields` attributes will equal `None` for unstructured arrays. The recommended way to test if a dtype is structured is with `if dt.names is not None` rather than `if dt.names`, to account for dtypes with 0 fields.\n", @@ -4773,7 +4773,7 @@ { "cell_type": "code", "execution_count": 166, - "id": "b57457b6", + "id": "f5386c1b", "metadata": {}, "outputs": [ { @@ -4793,7 +4793,7 @@ }, { "cell_type": "markdown", - "id": "cfda92a2", + "id": "548a48d2", "metadata": {}, "source": [ "When using the first form of dictionary-based specification, the titles may be supplied as an extra `'titles'` key as described above. When using the second (discouraged) dictionary-based specification, the title can be supplied by providing a 3-element tuple `(datatype, offset, title)` instead of the usual 2-element tuple:" @@ -4802,7 +4802,7 @@ { "cell_type": "code", "execution_count": 167, - "id": "ee569a05", + "id": "2d913a45", "metadata": {}, "outputs": [ { @@ -4822,7 +4822,7 @@ }, { "cell_type": "markdown", - "id": "3277a2cd", + "id": "37eb8002", "metadata": {}, "source": [ "The `dtype.fields` dictionary will contain titles as keys, if any titles are used. This means effectively that a field with a title will be represented twice in the fields dictionary. The tuple values for these fields will also have a third element, the field title. Because of this, and because the `names` attribute preserves the field order while the `fields` attribute may not, it is recommended to iterate through the fields of a dtype using the `names` attribute of the dtype, which will not list titles, as in:" @@ -4831,7 +4831,7 @@ { "cell_type": "code", "execution_count": 168, - "id": "8c57aa70", + "id": "d16b0ad2", "metadata": {}, "outputs": [ { @@ -4850,7 +4850,7 @@ }, { "cell_type": "markdown", - "id": "16d148df", + "id": "8759fab3", "metadata": {}, "source": [ "### Indexing and Assignment to Structured arrays\n", @@ -4867,7 +4867,7 @@ { "cell_type": "code", "execution_count": 169, - "id": "c1767431", + "id": "9d311732", "metadata": {}, "outputs": [ { @@ -4890,7 +4890,7 @@ }, { "cell_type": "markdown", - "id": "460cc3a0", + "id": "84bab5d9", "metadata": {}, "source": [ "##### Assignment from Scalars\n", @@ -4901,7 +4901,7 @@ { "cell_type": "code", "execution_count": 170, - "id": "a2f95210", + "id": "100aaf82", "metadata": {}, "outputs": [], "source": [ @@ -4911,7 +4911,7 @@ { "cell_type": "code", "execution_count": 171, - "id": "f6508c1e", + "id": "0048996d", "metadata": {}, "outputs": [ { @@ -4934,7 +4934,7 @@ { "cell_type": "code", "execution_count": 172, - "id": "2978d044", + "id": "027b14a6", "metadata": {}, "outputs": [ { @@ -4956,7 +4956,7 @@ }, { "cell_type": "markdown", - "id": "41b5c458", + "id": "28756d42", "metadata": {}, "source": [ "Structured arrays can also be assigned to unstructured arrays, but only if the structured datatype has just a single field:" @@ -4965,7 +4965,7 @@ { "cell_type": "code", "execution_count": 173, - "id": "92ea74fe", + "id": "41bf2d2f", "metadata": {}, "outputs": [], "source": [ @@ -4976,7 +4976,7 @@ { "cell_type": "code", "execution_count": 174, - "id": "84dc517f", + "id": "538e2c1f", "metadata": {}, "outputs": [], "source": [ @@ -4985,7 +4985,7 @@ }, { "cell_type": "markdown", - "id": "b7f6be10", + "id": "8fe3c666", "metadata": {}, "source": [ "```py\n", @@ -5006,7 +5006,7 @@ { "cell_type": "code", "execution_count": 175, - "id": "ca1ecf16", + "id": "162d0c94", "metadata": {}, "outputs": [], "source": [ @@ -5017,7 +5017,7 @@ { "cell_type": "code", "execution_count": 176, - "id": "93ba18f3", + "id": "925e0b34", "metadata": {}, "outputs": [ { @@ -5039,7 +5039,7 @@ }, { "cell_type": "markdown", - "id": "56c5ef05", + "id": "a4f69851", "metadata": {}, "source": [ "##### Assignment involving subarrays\n", @@ -5056,7 +5056,7 @@ { "cell_type": "code", "execution_count": 177, - "id": "ac31c05a", + "id": "860edddb", "metadata": {}, "outputs": [ { @@ -5078,7 +5078,7 @@ { "cell_type": "code", "execution_count": 178, - "id": "15c030cc", + "id": "2906edee", "metadata": {}, "outputs": [ { @@ -5099,7 +5099,7 @@ }, { "cell_type": "markdown", - "id": "023cf7ab", + "id": "de4288a7", "metadata": {}, "source": [ "The resulting array is a view into the original array. It shares the same memory locations and writing to the view will modify the original array." @@ -5108,7 +5108,7 @@ { "cell_type": "code", "execution_count": 179, - "id": "d3e80a81", + "id": "0517ddd7", "metadata": {}, "outputs": [ { @@ -5130,7 +5130,7 @@ }, { "cell_type": "markdown", - "id": "99798e0f", + "id": "6276a2d2", "metadata": {}, "source": [ "This view has the same dtype and itemsize as the indexed field, so it is typically a non-structured array, except in the case of nested structures." @@ -5139,7 +5139,7 @@ { "cell_type": "code", "execution_count": 180, - "id": "d65fd0f1", + "id": "38039e2e", "metadata": {}, "outputs": [ { @@ -5159,7 +5159,7 @@ }, { "cell_type": "markdown", - "id": "42d65dd3", + "id": "9bdaa05a", "metadata": {}, "source": [ "If the accessed field is a subarray, the dimensions of the subarray are appended to the shape of the result:" @@ -5168,7 +5168,7 @@ { "cell_type": "code", "execution_count": 181, - "id": "9dd23b6c", + "id": "e2fe5c45", "metadata": {}, "outputs": [], "source": [ @@ -5178,7 +5178,7 @@ { "cell_type": "code", "execution_count": 182, - "id": "8a81710f", + "id": "dccdc746", "metadata": {}, "outputs": [ { @@ -5199,7 +5199,7 @@ { "cell_type": "code", "execution_count": 183, - "id": "e6496ce2", + "id": "2ae5eb1b", "metadata": {}, "outputs": [ { @@ -5219,7 +5219,7 @@ }, { "cell_type": "markdown", - "id": "a7ab274c", + "id": "f953ef81", "metadata": {}, "source": [ "##### Accessing multiple fields\n", @@ -5232,7 +5232,7 @@ { "cell_type": "code", "execution_count": 184, - "id": "5e621197", + "id": "fefb4f30", "metadata": {}, "outputs": [ { @@ -5254,7 +5254,7 @@ }, { "cell_type": "markdown", - "id": "e27d32c5", + "id": "35fcd7ef", "metadata": {}, "source": [ "Assignment to the view modifies the original array. The view’s fields will be in the order they were indexed. Note that unlike for single-field indexing, the dtype of the view has the same itemsize as the original array, and has fields at the same offsets as in the original array, and unindexed fields are merely missing.\n", @@ -5265,7 +5265,7 @@ { "cell_type": "code", "execution_count": 185, - "id": "e76a464f", + "id": "02fa87d8", "metadata": {}, "outputs": [ { @@ -5287,7 +5287,7 @@ }, { "cell_type": "markdown", - "id": "184d118b", + "id": "236cdd99", "metadata": {}, "source": [ "This obeys the structured array assignment rules described above. For example, this means that one can swap the values of two fields using appropriate multi-field indexes:" @@ -5296,7 +5296,7 @@ { "cell_type": "code", "execution_count": 186, - "id": "a5bccc2c", + "id": "6811c266", "metadata": {}, "outputs": [], "source": [ @@ -5305,7 +5305,7 @@ }, { "cell_type": "markdown", - "id": "277fa2b0", + "id": "321227cd", "metadata": {}, "source": [ "##### Indexing with an integer to get a structured scalar\n", @@ -5316,7 +5316,7 @@ { "cell_type": "code", "execution_count": 187, - "id": "9e6936c7", + "id": "99941fac", "metadata": {}, "outputs": [ { @@ -5339,7 +5339,7 @@ { "cell_type": "code", "execution_count": 188, - "id": "f8daf6c4", + "id": "69f556d9", "metadata": {}, "outputs": [ { @@ -5359,7 +5359,7 @@ }, { "cell_type": "markdown", - "id": "6c38f8b5", + "id": "322f244e", "metadata": {}, "source": [ "Unlike other numpy scalars, structured scalars are mutable and act like views into the original array, such that modifying the scalar will modify the original array. Structured scalars also support access and assignment by field name:" @@ -5368,7 +5368,7 @@ { "cell_type": "code", "execution_count": 189, - "id": "15b0d410", + "id": "275e5aa6", "metadata": {}, "outputs": [ { @@ -5391,7 +5391,7 @@ }, { "cell_type": "markdown", - "id": "d1f2f5d3", + "id": "563981e3", "metadata": {}, "source": [ "Similarly to tuples, structured scalars can also be indexed with an integer:" @@ -5400,7 +5400,7 @@ { "cell_type": "code", "execution_count": 190, - "id": "9515443a", + "id": "f717fd01", "metadata": {}, "outputs": [ { @@ -5422,7 +5422,7 @@ { "cell_type": "code", "execution_count": 191, - "id": "da73b1a0", + "id": "d8da4d5a", "metadata": {}, "outputs": [], "source": [ @@ -5431,7 +5431,7 @@ }, { "cell_type": "markdown", - "id": "bf2778bd", + "id": "ce864c33", "metadata": {}, "source": [ "Thus, tuples might be thought of as the native Python equivalent to numpy’s structured types, much like native python integers are the equivalent to numpy’s integer types. Structured scalars may be converted to a tuple by calling `numpy.ndarray.item`:" @@ -5440,7 +5440,7 @@ { "cell_type": "code", "execution_count": 192, - "id": "93decfca", + "id": "73160c68", "metadata": {}, "outputs": [ { @@ -5460,7 +5460,7 @@ }, { "cell_type": "markdown", - "id": "bd29549a", + "id": "7a4af1a9", "metadata": {}, "source": [ "#### Viewing structured arrays containing objects\n", @@ -5475,7 +5475,7 @@ { "cell_type": "code", "execution_count": 193, - "id": "b60ef16c", + "id": "051080bb", "metadata": {}, "outputs": [ { @@ -5497,7 +5497,7 @@ }, { "cell_type": "markdown", - "id": "5cc1ac49", + "id": "a1efc3ce", "metadata": {}, "source": [ "NumPy will promote individual field datatypes to perform the comparison. So the following is also valid (note the `'f4'` dtype for the `'a'` field):" @@ -5506,7 +5506,7 @@ { "cell_type": "code", "execution_count": 194, - "id": "20a74e31", + "id": "0ddc6a84", "metadata": {}, "outputs": [ { @@ -5527,7 +5527,7 @@ }, { "cell_type": "markdown", - "id": "bad6c9a9", + "id": "86d6712e", "metadata": {}, "source": [ "To compare two structured arrays, it must be possible to promote them to a common dtype as returned by `numpy.result_type` and `np.promote_types`. This enforces that the number of fields, the field names, and the field titles must match precisely. When promotion is not possible, for example due to mismatching field names, NumPy will raise an error. Promotion between two structured dtypes results in a canonical dtype that ensures native byte-order for all fields:" @@ -5536,7 +5536,7 @@ { "cell_type": "code", "execution_count": 195, - "id": "9825eff0", + "id": "8525513a", "metadata": {}, "outputs": [ { @@ -5557,7 +5557,7 @@ { "cell_type": "code", "execution_count": 196, - "id": "8f4711e5", + "id": "ef0a80f4", "metadata": {}, "outputs": [ { @@ -5577,7 +5577,7 @@ }, { "cell_type": "markdown", - "id": "a07238af", + "id": "29f79250", "metadata": {}, "source": [ "The resulting dtype from promotion is also guaranteed to be packed, meaning that all fields are ordered contiguously and any unnecessary padding is removed:" @@ -5586,7 +5586,7 @@ { "cell_type": "code", "execution_count": 197, - "id": "f9db92eb", + "id": "78179e76", "metadata": {}, "outputs": [ { @@ -5608,7 +5608,7 @@ { "cell_type": "code", "execution_count": 198, - "id": "eb031a8b", + "id": "2646685d", "metadata": {}, "outputs": [ { @@ -5628,7 +5628,7 @@ }, { "cell_type": "markdown", - "id": "01cd9c17", + "id": "e93627e5", "metadata": {}, "source": [ "Note that the result prints without `offsets` or `itemsize` indicating no additional padding. If a structured dtype is created with `align=True` ensuring that `dtype.isalignedstruct` is true, this property is preserved:" @@ -5637,7 +5637,7 @@ { "cell_type": "code", "execution_count": 199, - "id": "b3a3dcd9", + "id": "95276731", "metadata": {}, "outputs": [ { @@ -5659,7 +5659,7 @@ { "cell_type": "code", "execution_count": 200, - "id": "6f9a47c5", + "id": "ade96302", "metadata": {}, "outputs": [ { @@ -5680,7 +5680,7 @@ { "cell_type": "code", "execution_count": 201, - "id": "da72c119", + "id": "8c2516d8", "metadata": {}, "outputs": [ { @@ -5700,7 +5700,7 @@ }, { "cell_type": "markdown", - "id": "45bd2473", + "id": "2e1ff208", "metadata": {}, "source": [ "When promoting multiple dtypes, the result is aligned if any of the inputs is:" @@ -5709,7 +5709,7 @@ { "cell_type": "code", "execution_count": 202, - "id": "ec9df23d", + "id": "5989c869", "metadata": {}, "outputs": [ { @@ -5729,7 +5729,7 @@ }, { "cell_type": "markdown", - "id": "38bf71ae", + "id": "944fa2b1", "metadata": {}, "source": [ "The `<` and `>` operators always return `False` when comparing void structured arrays, and arithmetic and bitwise operations are not supported.\n", diff --git a/_sources/data-science/working-with-data/pandas.ipynb b/_sources/data-science/working-with-data/pandas.ipynb deleted file mode 100644 index 8a8106d454..0000000000 --- a/_sources/data-science/working-with-data/pandas.ipynb +++ /dev/null @@ -1,10560 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "id": "e6545d05", - "metadata": {}, - "source": [ - "# Pandas\n", - "\n", - "Pandas is a fast, powerful, flexible and easy-to-use open-source data analysis and manipulation tool, built on top of the Python programming language.\n", - "\n", - "## Introducing Pandas objects\n", - "\n", - "We’ll start with a quick, non-comprehensive overview of the fundamental data structures in Pandas to get you started. The fundamental behavior about data types, indexing, axis labeling, and alignment apply across all of the objects. To get started, import NumPy and load Pandas into your namespace:" - ] - }, - { - "cell_type": "code", - "execution_count": 1, - "id": "25f96f14", - "metadata": {}, - "outputs": [], - "source": [ - "import numpy as np\n", - "import pandas as pd" - ] - }, - { - "cell_type": "markdown", - "id": "8b24efc0", - "metadata": {}, - "source": [ - "### Series\n", - "\n", - "`Series` is a one-dimensional labeled array capable of holding any data type (integers, strings, floating point numbers, Python objects, etc.). The axis labels are collectively referred to as the **index**. The basic method to create a `Series` is to call:\n", - "\n", - "```py\n", - "s = pd.Series(data, index=index)\n", - "```\n", - "\n", - "Here, `data` can be many different things:\n", - "\n", - "- a Python dict\n", - "- an ndarray\n", - "- a scalar value (like 5)\n", - "\n", - "\n", - "The passed **index** is a list of axis labels. Thus, this separates into a few cases depending on what the **data is**:\n", - "\n", - "#### Create a Series\n", - "\n", - "##### From ndarray\n", - "\n", - "If `data` is an ndarray, **index** must be the same length as the **data**. If no index is passed, one will be created having values `[0, ..., len(data) - 1]`." - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "id": "fafc0791", - "metadata": {}, - "outputs": [], - "source": [ - "s = pd.Series(np.random.randn(5), index=[\"a\", \"b\", \"c\", \"d\", \"e\"])" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "id": "560c5c88", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "a -0.742503\n", - "b -0.342277\n", - "c 2.575226\n", - "d -1.022013\n", - "e -0.549587\n", - "dtype: float64" - ] - }, - "execution_count": 3, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "s" - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "id": "cd3d68c8", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "Index(['a', 'b', 'c', 'd', 'e'], dtype='object')" - ] - }, - "execution_count": 4, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "s.index" - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "id": "49d15198", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "0 0.456269\n", - "1 -0.744398\n", - "2 1.151727\n", - "3 1.031141\n", - "4 0.833176\n", - "dtype: float64" - ] - }, - "execution_count": 5, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "pd.Series(np.random.randn(5))" - ] - }, - { - "cell_type": "markdown", - "id": "66bd6806", - "metadata": {}, - "source": [ - "```{note}\n", - "Pandas supports non-unique index values. If an operation that does not support duplicate index values is attempted, an exception will be raised at that time.\n", - "```\n", - "\n", - "##### From dict\n", - "`Series` can be instantiated from dicts:" - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "id": "32934b45", - "metadata": {}, - "outputs": [], - "source": [ - "d = {\"b\": 1, \"a\": 0, \"c\": 2}" - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "id": "eee7cfc8", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "b 1\n", - "a 0\n", - "c 2\n", - "dtype: int64" - ] - }, - "execution_count": 7, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "pd.Series(d)" - ] - }, - { - "cell_type": "markdown", - "id": "f21e10f5", - "metadata": {}, - "source": [ - "If an index is passed, the values in data corresponding to the labels in the index will be pulled out." - ] - }, - { - "cell_type": "code", - "execution_count": 8, - "id": "437497c1", - "metadata": {}, - "outputs": [], - "source": [ - "d = {\"a\": 0.0, \"b\": 1.0, \"c\": 2.0}" - ] - }, - { - "cell_type": "code", - "execution_count": 9, - "id": "b6a25f03", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "a 0.0\n", - "b 1.0\n", - "c 2.0\n", - "dtype: float64" - ] - }, - "execution_count": 9, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "pd.Series(d)" - ] - }, - { - "cell_type": "code", - "execution_count": 10, - "id": "ed79c02e", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "b 1.0\n", - "c 2.0\n", - "d NaN\n", - "a 0.0\n", - "dtype: float64" - ] - }, - "execution_count": 10, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "pd.Series(d, index=[\"b\", \"c\", \"d\", \"a\"])" - ] - }, - { - "cell_type": "markdown", - "id": "f159b903", - "metadata": {}, - "source": [ - "```{note}\n", - "NaN (not a number) is the standard missing data marker used in Pandas.\n", - "```\n", - "\n", - "##### From scalar value\n", - "\n", - "If `data` is a scalar value, an index must be provided. The value will be repeated to match the length of **index**." - ] - }, - { - "cell_type": "code", - "execution_count": 11, - "id": "01c73a09", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "a 5.0\n", - "b 5.0\n", - "c 5.0\n", - "d 5.0\n", - "e 5.0\n", - "dtype: float64" - ] - }, - "execution_count": 11, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "pd.Series(5.0, index=[\"a\", \"b\", \"c\", \"d\", \"e\"])" - ] - }, - { - "cell_type": "markdown", - "id": "1ebbfeed", - "metadata": {}, - "source": [ - "#### Series is ndarray-like\n", - "\n", - "`Series` acts very similarly to a `ndarray` and is a valid argument to most NumPy functions. However, operations such as slicing will also slice the index." - ] - }, - { - "cell_type": "code", - "execution_count": 12, - "id": "747dbeac", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "-0.7425028341431366" - ] - }, - "execution_count": 12, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "s[0]" - ] - }, - { - "cell_type": "code", - "execution_count": 13, - "id": "5f4043d6", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "a -0.742503\n", - "b -0.342277\n", - "c 2.575226\n", - "dtype: float64" - ] - }, - "execution_count": 13, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "s[:3]" - ] - }, - { - "cell_type": "code", - "execution_count": 14, - "id": "ea8c664c", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "b -0.342277\n", - "c 2.575226\n", - "dtype: float64" - ] - }, - "execution_count": 14, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "s[s > s.median()]" - ] - }, - { - "cell_type": "code", - "execution_count": 15, - "id": "6169bfcc", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "e -0.549587\n", - "d -1.022013\n", - "b -0.342277\n", - "dtype: float64" - ] - }, - "execution_count": 15, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "s[[4, 3, 1]]" - ] - }, - { - "cell_type": "code", - "execution_count": 16, - "id": "02cafeb2", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "a 0.475921\n", - "b 0.710151\n", - "c 13.134280\n", - "d 0.359870\n", - "e 0.577188\n", - "dtype: float64" - ] - }, - "execution_count": 16, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "np.exp(s)" - ] - }, - { - "cell_type": "markdown", - "id": "9d8632b9", - "metadata": {}, - "source": [ - "Like a NumPy array, a Pandas Series has a single `dtype`." - ] - }, - { - "cell_type": "code", - "execution_count": 17, - "id": "2bfe8ef9", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "dtype('float64')" - ] - }, - "execution_count": 17, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "s.dtype" - ] - }, - { - "cell_type": "markdown", - "id": "d62c251e", - "metadata": {}, - "source": [ - "If you need the actual array backing a `Series`, use `Series.array`." - ] - }, - { - "cell_type": "code", - "execution_count": 18, - "id": "54805983", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "\n", - "[ -0.7425028341431366, -0.34227718263016094, 2.5752256412522594,\n", - " -1.0220127417608955, -0.5495868399385304]\n", - "Length: 5, dtype: float64" - ] - }, - "execution_count": 18, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "s.array" - ] - }, - { - "cell_type": "markdown", - "id": "5b4fe37d", - "metadata": {}, - "source": [ - "While `Series` is ndarray-like, if you need an actual ndarray, then use `Series.to_numpy()`." - ] - }, - { - "cell_type": "code", - "execution_count": 19, - "id": "45f42682", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "array([-0.74250283, -0.34227718, 2.57522564, -1.02201274, -0.54958684])" - ] - }, - "execution_count": 19, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "s.to_numpy()" - ] - }, - { - "cell_type": "markdown", - "id": "82f41443", - "metadata": {}, - "source": [ - "Even if the `Series` is backed by an `ExtensionArray`, `Series.to_numpy()` will return a NumPy ndarray.\n", - "\n", - "#### Series is dict-like\n", - "\n", - "A `Series` is also like a fixed-size dict in that you can get and set values by index label:" - ] - }, - { - "cell_type": "code", - "execution_count": 20, - "id": "aba48168", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "-0.7425028341431366" - ] - }, - "execution_count": 20, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "s[\"a\"]" - ] - }, - { - "cell_type": "code", - "execution_count": 21, - "id": "c0f5ecac", - "metadata": {}, - "outputs": [], - "source": [ - "s[\"e\"] = 12.0" - ] - }, - { - "cell_type": "code", - "execution_count": 22, - "id": "2dc38aee", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "a -0.742503\n", - "b -0.342277\n", - "c 2.575226\n", - "d -1.022013\n", - "e 12.000000\n", - "dtype: float64" - ] - }, - "execution_count": 22, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "s" - ] - }, - { - "cell_type": "code", - "execution_count": 23, - "id": "e0a08b6e", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "True" - ] - }, - "execution_count": 23, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "\"e\" in s" - ] - }, - { - "cell_type": "code", - "execution_count": 24, - "id": "8a722b93", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "False" - ] - }, - "execution_count": 24, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "\"f\" in s" - ] - }, - { - "cell_type": "markdown", - "id": "07dc3e98", - "metadata": {}, - "source": [ - "If a label is not contained in the index, an exception is raised:" - ] - }, - { - "cell_type": "code", - "execution_count": 25, - "id": "fef8ac2e", - "metadata": { - "tags": [ - "raises-exception" - ] - }, - "outputs": [ - { - "ename": "KeyError", - "evalue": "'f'", - "output_type": "error", - "traceback": [ - "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", - "\u001b[0;31mKeyError\u001b[0m Traceback (most recent call last)", - "File \u001b[0;32m/usr/share/miniconda/envs/open-machine-learning-jupyter-book/lib/python3.9/site-packages/pandas/core/indexes/base.py:3803\u001b[0m, in \u001b[0;36mIndex.get_loc\u001b[0;34m(self, key, method, tolerance)\u001b[0m\n\u001b[1;32m 3802\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[0;32m-> 3803\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_engine\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mget_loc\u001b[49m\u001b[43m(\u001b[49m\u001b[43mcasted_key\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 3804\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m \u001b[38;5;167;01mKeyError\u001b[39;00m \u001b[38;5;28;01mas\u001b[39;00m err:\n", - "File \u001b[0;32m/usr/share/miniconda/envs/open-machine-learning-jupyter-book/lib/python3.9/site-packages/pandas/_libs/index.pyx:138\u001b[0m, in \u001b[0;36mpandas._libs.index.IndexEngine.get_loc\u001b[0;34m()\u001b[0m\n", - "File \u001b[0;32m/usr/share/miniconda/envs/open-machine-learning-jupyter-book/lib/python3.9/site-packages/pandas/_libs/index.pyx:165\u001b[0m, in \u001b[0;36mpandas._libs.index.IndexEngine.get_loc\u001b[0;34m()\u001b[0m\n", - "File \u001b[0;32mpandas/_libs/hashtable_class_helper.pxi:5745\u001b[0m, in \u001b[0;36mpandas._libs.hashtable.PyObjectHashTable.get_item\u001b[0;34m()\u001b[0m\n", - "File \u001b[0;32mpandas/_libs/hashtable_class_helper.pxi:5753\u001b[0m, in \u001b[0;36mpandas._libs.hashtable.PyObjectHashTable.get_item\u001b[0;34m()\u001b[0m\n", - "\u001b[0;31mKeyError\u001b[0m: 'f'", - "\nThe above exception was the direct cause of the following exception:\n", - "\u001b[0;31mKeyError\u001b[0m Traceback (most recent call last)", - "Cell \u001b[0;32mIn[25], line 1\u001b[0m\n\u001b[0;32m----> 1\u001b[0m \u001b[43ms\u001b[49m\u001b[43m[\u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mf\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m]\u001b[49m\n", - "File \u001b[0;32m/usr/share/miniconda/envs/open-machine-learning-jupyter-book/lib/python3.9/site-packages/pandas/core/series.py:981\u001b[0m, in \u001b[0;36mSeries.__getitem__\u001b[0;34m(self, key)\u001b[0m\n\u001b[1;32m 978\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_values[key]\n\u001b[1;32m 980\u001b[0m \u001b[38;5;28;01melif\u001b[39;00m key_is_scalar:\n\u001b[0;32m--> 981\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_get_value\u001b[49m\u001b[43m(\u001b[49m\u001b[43mkey\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 983\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m is_hashable(key):\n\u001b[1;32m 984\u001b[0m \u001b[38;5;66;03m# Otherwise index.get_value will raise InvalidIndexError\u001b[39;00m\n\u001b[1;32m 985\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[1;32m 986\u001b[0m \u001b[38;5;66;03m# For labels that don't resolve as scalars like tuples and frozensets\u001b[39;00m\n", - "File \u001b[0;32m/usr/share/miniconda/envs/open-machine-learning-jupyter-book/lib/python3.9/site-packages/pandas/core/series.py:1089\u001b[0m, in \u001b[0;36mSeries._get_value\u001b[0;34m(self, label, takeable)\u001b[0m\n\u001b[1;32m 1086\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_values[label]\n\u001b[1;32m 1088\u001b[0m \u001b[38;5;66;03m# Similar to Index.get_value, but we do not fall back to positional\u001b[39;00m\n\u001b[0;32m-> 1089\u001b[0m loc \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mindex\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mget_loc\u001b[49m\u001b[43m(\u001b[49m\u001b[43mlabel\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 1090\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mindex\u001b[38;5;241m.\u001b[39m_get_values_for_loc(\u001b[38;5;28mself\u001b[39m, loc, label)\n", - "File \u001b[0;32m/usr/share/miniconda/envs/open-machine-learning-jupyter-book/lib/python3.9/site-packages/pandas/core/indexes/base.py:3805\u001b[0m, in \u001b[0;36mIndex.get_loc\u001b[0;34m(self, key, method, tolerance)\u001b[0m\n\u001b[1;32m 3803\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_engine\u001b[38;5;241m.\u001b[39mget_loc(casted_key)\n\u001b[1;32m 3804\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m \u001b[38;5;167;01mKeyError\u001b[39;00m \u001b[38;5;28;01mas\u001b[39;00m err:\n\u001b[0;32m-> 3805\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mKeyError\u001b[39;00m(key) \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01merr\u001b[39;00m\n\u001b[1;32m 3806\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m \u001b[38;5;167;01mTypeError\u001b[39;00m:\n\u001b[1;32m 3807\u001b[0m \u001b[38;5;66;03m# If we have a listlike key, _check_indexing_error will raise\u001b[39;00m\n\u001b[1;32m 3808\u001b[0m \u001b[38;5;66;03m# InvalidIndexError. Otherwise we fall through and re-raise\u001b[39;00m\n\u001b[1;32m 3809\u001b[0m \u001b[38;5;66;03m# the TypeError.\u001b[39;00m\n\u001b[1;32m 3810\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_check_indexing_error(key)\n", - "\u001b[0;31mKeyError\u001b[0m: 'f'" - ] - } - ], - "source": [ - "s[\"f\"]" - ] - }, - { - "cell_type": "markdown", - "id": "523f884b", - "metadata": {}, - "source": [ - "Using the `Series.get()` method, a missing label will return None or specified default:" - ] - }, - { - "cell_type": "code", - "execution_count": 26, - "id": "8099f799", - "metadata": {}, - "outputs": [], - "source": [ - "s.get(\"f\")" - ] - }, - { - "cell_type": "code", - "execution_count": 27, - "id": "2a46b41a", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "nan" - ] - }, - "execution_count": 27, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "s.get(\"f\", np.nan)" - ] - }, - { - "cell_type": "markdown", - "id": "04ea686f", - "metadata": {}, - "source": [ - "These labels can also be accessed by `attribute`.\n", - "\n", - "#### Vectorized operations and label alignment with Series\n", - "\n", - "When working with raw NumPy arrays, looping through value-by-value is usually not necessary. The same is true when working with `Series` in Pandas. `Series` can also be passed into most NumPy methods expecting an ndarray." - ] - }, - { - "cell_type": "code", - "execution_count": 28, - "id": "360e0f15", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "a -1.485006\n", - "b -0.684554\n", - "c 5.150451\n", - "d -2.044025\n", - "e 24.000000\n", - "dtype: float64" - ] - }, - "execution_count": 28, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "s + s" - ] - }, - { - "cell_type": "code", - "execution_count": 29, - "id": "7e487d83", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "a -1.485006\n", - "b -0.684554\n", - "c 5.150451\n", - "d -2.044025\n", - "e 24.000000\n", - "dtype: float64" - ] - }, - "execution_count": 29, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "s * 2" - ] - }, - { - "cell_type": "code", - "execution_count": 30, - "id": "d39cd718", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "a 0.475921\n", - "b 0.710151\n", - "c 13.134280\n", - "d 0.359870\n", - "e 162754.791419\n", - "dtype: float64" - ] - }, - "execution_count": 30, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "np.exp(s)" - ] - }, - { - "cell_type": "markdown", - "id": "a77868f9", - "metadata": {}, - "source": [ - "A key difference between `Series` and ndarray is that operations between `Series` automatically align the data based on the label. Thus, you can write computations without giving consideration to whether the `Series` involved have the same labels." - ] - }, - { - "cell_type": "code", - "execution_count": 31, - "id": "a89967e2", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "a NaN\n", - "b -0.684554\n", - "c 5.150451\n", - "d -2.044025\n", - "e NaN\n", - "dtype: float64" - ] - }, - "execution_count": 31, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "s[1:] + s[:-1]" - ] - }, - { - "cell_type": "markdown", - "id": "04969a41", - "metadata": {}, - "source": [ - "The result of an operation between unaligned `Series` will have the **union** of the indexes involved. If a label is not found in one `Series` or the other, the result will be marked as missing `NaN`. Being able to write code without doing any explicit data alignment grants immense freedom and flexibility in interactive data analysis and research. The integrated data alignment features of the Pandas data structures set Pandas apart from the majority of related tools for working with labeled data.\n", - "\n", - "```{note}\n", - "In general, we chose to make the default result of operations between differently indexed objects yield the **union** of the indexes in order to avoid loss of information. Having an index label, though the data is missing, is typically important information as part of a computation. You of course have the option of dropping labels with missing data via the `dropna` function.\n", - "```\n", - "\n", - "#### Name attribute\n", - "\n", - "`Series` also has a `name` attribute:" - ] - }, - { - "cell_type": "code", - "execution_count": 32, - "id": "d96fb6d6", - "metadata": {}, - "outputs": [], - "source": [ - "s = pd.Series(np.random.randn(5), name=\"something\")" - ] - }, - { - "cell_type": "code", - "execution_count": 33, - "id": "2f4ce942", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "0 0.182830\n", - "1 -0.931166\n", - "2 0.144336\n", - "3 0.318988\n", - "4 0.426142\n", - "Name: something, dtype: float64" - ] - }, - "execution_count": 33, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "s" - ] - }, - { - "cell_type": "code", - "execution_count": 34, - "id": "8f41e676", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "'something'" - ] - }, - "execution_count": 34, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "s.name" - ] - }, - { - "cell_type": "markdown", - "id": "3386207e", - "metadata": {}, - "source": [ - "The `Series` `name` can be assigned automatically in many cases, in particular, when selecting a single column from a `DataFrame`, the `name` will be assigned the column label.\n", - "\n", - "You can rename a `Series` with the `pandas.Series.rename()` method." - ] - }, - { - "cell_type": "code", - "execution_count": 35, - "id": "866446da", - "metadata": {}, - "outputs": [], - "source": [ - "s2 = s.rename(\"different\")" - ] - }, - { - "cell_type": "code", - "execution_count": 36, - "id": "c4749ae3", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "'different'" - ] - }, - "execution_count": 36, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "s2.name" - ] - }, - { - "cell_type": "markdown", - "id": "eaa2891c", - "metadata": {}, - "source": [ - "Note that `s` and `s2` refer to different objects.\n", - "\n", - "### DataFrame\n", - "\n", - "`DataFrame` is a 2-dimensional labeled data structure with columns of potentially different types. You can think of it like a spreadsheet or SQL table, or a `dict` of `Series` objects. It is generally the most commonly used Pandas object. Like `Series`, `DataFrame` accepts many different kinds of input:\n", - "\n", - "- Dict of 1D ndarrays, lists, dicts, or `Series`\n", - "- 2-D `numpy.ndarray`\n", - "- Structured or record ndarray\n", - "- A `Series`\n", - "- Another `DataFrame`\n", - "\n", - "Along with the data, you can optionally pass **index** (row labels) and **columns** (column labels) arguments. If you pass an index and / or columns, you are guaranteeing the index and / or columns of the resulting `DataFrame`. Thus, a `dict` of Series plus a specific index will discard all data not matching up to the passed index.\n", - "\n", - "If axis labels are not passed, they will be constructed from the input data based on common sense rules.\n", - "\n", - "#### Create a Dataframe\n", - "\n", - "##### From dict of `Series` or dicts\n", - "\n", - "The resulting **index** will be the **union** of the indexes of the various Series. If there are any nested dicts, these will first be converted to Series. If no columns are passed, the columns will be the ordered list of `dict` keys." - ] - }, - { - "cell_type": "code", - "execution_count": 37, - "id": "4ae21572", - "metadata": {}, - "outputs": [], - "source": [ - "d = {\n", - " \"one\": pd.Series([1.0, 2.0, 3.0], index=[\"a\", \"b\", \"c\"]),\n", - " \"two\": pd.Series([1.0, 2.0, 3.0, 4.0], index=[\"a\", \"b\", \"c\", \"d\"]),\n", - "}" - ] - }, - { - "cell_type": "code", - "execution_count": 38, - "id": "e79ed1ad", - "metadata": {}, - "outputs": [], - "source": [ - "df = pd.DataFrame(d)" - ] - }, - { - "cell_type": "code", - "execution_count": 39, - "id": "c1055653", - "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", - "
onetwo
a1.01.0
b2.02.0
c3.03.0
dNaN4.0
\n", - "
" - ], - "text/plain": [ - " one two\n", - "a 1.0 1.0\n", - "b 2.0 2.0\n", - "c 3.0 3.0\n", - "d NaN 4.0" - ] - }, - "execution_count": 39, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "df" - ] - }, - { - "cell_type": "code", - "execution_count": 40, - "id": "94260c79", - "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", - "
onetwo
dNaN4.0
b2.02.0
a1.01.0
\n", - "
" - ], - "text/plain": [ - " one two\n", - "d NaN 4.0\n", - "b 2.0 2.0\n", - "a 1.0 1.0" - ] - }, - "execution_count": 40, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "pd.DataFrame(d, index=[\"d\", \"b\", \"a\"])" - ] - }, - { - "cell_type": "code", - "execution_count": 41, - "id": "89ffccf3", - "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", - "
twothree
d4.0NaN
b2.0NaN
a1.0NaN
\n", - "
" - ], - "text/plain": [ - " two three\n", - "d 4.0 NaN\n", - "b 2.0 NaN\n", - "a 1.0 NaN" - ] - }, - "execution_count": 41, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "pd.DataFrame(d, index=[\"d\", \"b\", \"a\"], columns=[\"two\", \"three\"])" - ] - }, - { - "cell_type": "markdown", - "id": "acc1b20f", - "metadata": {}, - "source": [ - "The row and column labels can be accessed respectively by accessing the **index** and **columns** attributes:\n", - "\n", - "```{note}\n", - "When a particular set of columns is passed along with a dict of data, the passed columns override the keys in the dict.\n", - "```" - ] - }, - { - "cell_type": "code", - "execution_count": 42, - "id": "3761167c", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "Index(['a', 'b', 'c', 'd'], dtype='object')" - ] - }, - "execution_count": 42, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "df.index" - ] - }, - { - "cell_type": "code", - "execution_count": 43, - "id": "697fb1e6", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "Index(['one', 'two'], dtype='object')" - ] - }, - "execution_count": 43, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "df.columns" - ] - }, - { - "cell_type": "markdown", - "id": "ee5d3d4c", - "metadata": {}, - "source": [ - "##### From dict of ndarrays / lists\n", - "\n", - "The ndarrays must all be the same length. If an index is passed, it must also be the same length as the arrays. If no index is passed, the result will be `range(n)`, where `n` is the array length." - ] - }, - { - "cell_type": "code", - "execution_count": 44, - "id": "c2880980", - "metadata": {}, - "outputs": [], - "source": [ - "d = {\"one\": [1.0, 2.0, 3.0, 4.0], \"two\": [4.0, 3.0, 2.0, 1.0]}" - ] - }, - { - "cell_type": "code", - "execution_count": 45, - "id": "04fda5ed", - "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", - "
onetwo
01.04.0
12.03.0
23.02.0
34.01.0
\n", - "
" - ], - "text/plain": [ - " one two\n", - "0 1.0 4.0\n", - "1 2.0 3.0\n", - "2 3.0 2.0\n", - "3 4.0 1.0" - ] - }, - "execution_count": 45, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "pd.DataFrame(d)" - ] - }, - { - "cell_type": "code", - "execution_count": 46, - "id": "4f8f0740", - "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", - "
onetwo
a1.04.0
b2.03.0
c3.02.0
d4.01.0
\n", - "
" - ], - "text/plain": [ - " one two\n", - "a 1.0 4.0\n", - "b 2.0 3.0\n", - "c 3.0 2.0\n", - "d 4.0 1.0" - ] - }, - "execution_count": 46, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "pd.DataFrame(d, index=[\"a\", \"b\", \"c\", \"d\"])" - ] - }, - { - "cell_type": "markdown", - "id": "e7c17cff", - "metadata": {}, - "source": [ - "##### From structured or record array\n", - "\n", - "This case is handled identically to a dict of arrays." - ] - }, - { - "cell_type": "code", - "execution_count": 47, - "id": "95352bea", - "metadata": {}, - "outputs": [], - "source": [ - "data = np.zeros((2,), dtype=[(\"A\", \"i4\"), (\"B\", \"f4\"), (\"C\", \"a10\")])" - ] - }, - { - "cell_type": "code", - "execution_count": 48, - "id": "5d122d20", - "metadata": {}, - "outputs": [], - "source": [ - "data[:] = [(1, 2.0, \"Hello\"), (2, 3.0, \"World\")]" - ] - }, - { - "cell_type": "code", - "execution_count": 49, - "id": "86d1496d", - "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", - "
ABC
012.0b'Hello'
123.0b'World'
\n", - "
" - ], - "text/plain": [ - " A B C\n", - "0 1 2.0 b'Hello'\n", - "1 2 3.0 b'World'" - ] - }, - "execution_count": 49, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "pd.DataFrame(data)" - ] - }, - { - "cell_type": "code", - "execution_count": 50, - "id": "206430fc", - "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", - "
ABC
first12.0b'Hello'
second23.0b'World'
\n", - "
" - ], - "text/plain": [ - " A B C\n", - "first 1 2.0 b'Hello'\n", - "second 2 3.0 b'World'" - ] - }, - "execution_count": 50, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "pd.DataFrame(data, index=[\"first\", \"second\"])" - ] - }, - { - "cell_type": "code", - "execution_count": 51, - "id": "15473159", - "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", - "
CAB
0b'Hello'12.0
1b'World'23.0
\n", - "
" - ], - "text/plain": [ - " C A B\n", - "0 b'Hello' 1 2.0\n", - "1 b'World' 2 3.0" - ] - }, - "execution_count": 51, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "pd.DataFrame(data, columns=[\"C\", \"A\", \"B\"])" - ] - }, - { - "cell_type": "markdown", - "id": "126d31a8", - "metadata": {}, - "source": [ - "```{note}\n", - "DataFrame is not intended to work exactly like a 2-dimensional NumPy ndarray.\n", - "```\n", - "\n", - "\n", - "##### From a list of dicts" - ] - }, - { - "cell_type": "code", - "execution_count": 52, - "id": "ee4f9f05", - "metadata": {}, - "outputs": [], - "source": [ - "data2 = [{\"a\": 1, \"b\": 2}, {\"a\": 5, \"b\": 10, \"c\": 20}]" - ] - }, - { - "cell_type": "code", - "execution_count": 53, - "id": "07d96611", - "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", - "
abc
012NaN
151020.0
\n", - "
" - ], - "text/plain": [ - " a b c\n", - "0 1 2 NaN\n", - "1 5 10 20.0" - ] - }, - "execution_count": 53, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "pd.DataFrame(data2)" - ] - }, - { - "cell_type": "code", - "execution_count": 54, - "id": "ea4880b3", - "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", - "
abc
first12NaN
second51020.0
\n", - "
" - ], - "text/plain": [ - " a b c\n", - "first 1 2 NaN\n", - "second 5 10 20.0" - ] - }, - "execution_count": 54, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "pd.DataFrame(data2, index=[\"first\", \"second\"])" - ] - }, - { - "cell_type": "code", - "execution_count": 55, - "id": "92b5105a", - "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", - "
ab
012
1510
\n", - "
" - ], - "text/plain": [ - " a b\n", - "0 1 2\n", - "1 5 10" - ] - }, - "execution_count": 55, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "pd.DataFrame(data2, columns=[\"a\", \"b\"])" - ] - }, - { - "cell_type": "markdown", - "id": "37e7645e", - "metadata": {}, - "source": [ - "##### From a dict of tuples\n", - "\n", - "You can automatically create a MultiIndexed frame by passing a tuples dictionary." - ] - }, - { - "cell_type": "code", - "execution_count": 56, - "id": "322c79fa", - "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", - "
ab
bacab
AB1.04.05.08.010.0
C2.03.06.07.0NaN
DNaNNaNNaNNaN9.0
\n", - "
" - ], - "text/plain": [ - " a b \n", - " b a c a b\n", - "A B 1.0 4.0 5.0 8.0 10.0\n", - " C 2.0 3.0 6.0 7.0 NaN\n", - " D NaN NaN NaN NaN 9.0" - ] - }, - "execution_count": 56, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "pd.DataFrame(\n", - " {\n", - " (\"a\", \"b\"): {(\"A\", \"B\"): 1, (\"A\", \"C\"): 2},\n", - " (\"a\", \"a\"): {(\"A\", \"C\"): 3, (\"A\", \"B\"): 4},\n", - " (\"a\", \"c\"): {(\"A\", \"B\"): 5, (\"A\", \"C\"): 6},\n", - " (\"b\", \"a\"): {(\"A\", \"C\"): 7, (\"A\", \"B\"): 8},\n", - " (\"b\", \"b\"): {(\"A\", \"D\"): 9, (\"A\", \"B\"): 10},\n", - " }\n", - ")" - ] - }, - { - "cell_type": "markdown", - "id": "452e9e2d", - "metadata": {}, - "source": [ - "##### From a Series\n", - "\n", - "The result will be a DataFrame with the same index as the input Series, and with one column whose name is the original name of the Series (only if no other column name provided)." - ] - }, - { - "cell_type": "code", - "execution_count": 57, - "id": "582abedf", - "metadata": {}, - "outputs": [], - "source": [ - "ser = pd.Series(range(3), index=list(\"abc\"), name=\"ser\")" - ] - }, - { - "cell_type": "code", - "execution_count": 58, - "id": "04ed1911", - "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", - "
ser
a0
b1
c2
\n", - "
" - ], - "text/plain": [ - " ser\n", - "a 0\n", - "b 1\n", - "c 2" - ] - }, - "execution_count": 58, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "pd.DataFrame(ser)" - ] - }, - { - "cell_type": "markdown", - "id": "9e6569f3", - "metadata": {}, - "source": [ - "##### From a list of namedtuples\n", - "\n", - "The field names of the first `namedtuple` in the list determine the columns of the `DataFrame`. The remaining namedtuples (or tuples) are simply unpacked and their values are fed into the rows of the `DataFrame`. If any of those tuples is shorter than the first `namedtuple` then the later columns in the corresponding row are marked as missing values. If any are longer than the first `namedtuple` , a `ValueError` is raised." - ] - }, - { - "cell_type": "code", - "execution_count": 59, - "id": "8148406d", - "metadata": {}, - "outputs": [], - "source": [ - "from collections import namedtuple" - ] - }, - { - "cell_type": "code", - "execution_count": 60, - "id": "3aef5ba5", - "metadata": {}, - "outputs": [], - "source": [ - "Point = namedtuple(\"Point\", \"x y\")" - ] - }, - { - "cell_type": "code", - "execution_count": 61, - "id": "574f5f39", - "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", - "
xy
000
103
223
\n", - "
" - ], - "text/plain": [ - " x y\n", - "0 0 0\n", - "1 0 3\n", - "2 2 3" - ] - }, - "execution_count": 61, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "pd.DataFrame([Point(0, 0), Point(0, 3), (2, 3)])" - ] - }, - { - "cell_type": "code", - "execution_count": 62, - "id": "ea538e04", - "metadata": {}, - "outputs": [], - "source": [ - "Point3D = namedtuple(\"Point3D\", \"x y z\")" - ] - }, - { - "cell_type": "code", - "execution_count": 63, - "id": "2aa2e79e", - "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", - "
xyz
0000.0
1035.0
223NaN
\n", - "
" - ], - "text/plain": [ - " x y z\n", - "0 0 0 0.0\n", - "1 0 3 5.0\n", - "2 2 3 NaN" - ] - }, - "execution_count": 63, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "pd.DataFrame([Point3D(0, 0, 0), Point3D(0, 3, 5), Point(2, 3)])" - ] - }, - { - "cell_type": "markdown", - "id": "8f9aa2a2", - "metadata": {}, - "source": [ - "##### From a list of dataclasses\n", - "\n", - "Data Classes as introduced in PEP557, can be passed into the DataFrame constructor. Passing a list of dataclasses is equivalent to passing a list of dictionaries.\n", - "\n", - "Please be aware, that all values in the list should be dataclasses, mixing types in the list would result in a `TypeError`." - ] - }, - { - "cell_type": "code", - "execution_count": 64, - "id": "f181f94d", - "metadata": {}, - "outputs": [], - "source": [ - "from dataclasses import make_dataclass" - ] - }, - { - "cell_type": "code", - "execution_count": 65, - "id": "554459b9", - "metadata": {}, - "outputs": [], - "source": [ - "Point = make_dataclass(\"Point\", [(\"x\", int), (\"y\", int)])" - ] - }, - { - "cell_type": "code", - "execution_count": 66, - "id": "edee86c9", - "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", - "
xy
000
103
223
\n", - "
" - ], - "text/plain": [ - " x y\n", - "0 0 0\n", - "1 0 3\n", - "2 2 3" - ] - }, - "execution_count": 66, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "pd.DataFrame([Point(0, 0), Point(0, 3), Point(2, 3)])" - ] - }, - { - "cell_type": "markdown", - "id": "ba0a6909", - "metadata": {}, - "source": [ - "#### Column selection, addition, deletion\n", - "\n", - "You can treat a `DataFrame` semantically like a dict of like-indexed `Series` objects. Getting, setting, and deleting columns works with the same syntax as the analogous dict operations:" - ] - }, - { - "cell_type": "code", - "execution_count": 67, - "id": "4e184116", - "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", - "
onetwo
a1.01.0
b2.02.0
c3.03.0
dNaN4.0
\n", - "
" - ], - "text/plain": [ - " one two\n", - "a 1.0 1.0\n", - "b 2.0 2.0\n", - "c 3.0 3.0\n", - "d NaN 4.0" - ] - }, - "execution_count": 67, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "df" - ] - }, - { - "cell_type": "code", - "execution_count": 68, - "id": "b4db4799", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "a 1.0\n", - "b 2.0\n", - "c 3.0\n", - "d NaN\n", - "Name: one, dtype: float64" - ] - }, - "execution_count": 68, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "df[\"one\"]" - ] - }, - { - "cell_type": "code", - "execution_count": 69, - "id": "cc33b7d8", - "metadata": {}, - "outputs": [], - "source": [ - "df[\"three\"] = df[\"one\"] * df[\"two\"]" - ] - }, - { - "cell_type": "code", - "execution_count": 70, - "id": "767a93a1", - "metadata": {}, - "outputs": [], - "source": [ - "df[\"flag\"] = df[\"one\"] > 2" - ] - }, - { - "cell_type": "code", - "execution_count": 71, - "id": "f97041a3", - "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", - "
onetwothreeflag
a1.01.01.0False
b2.02.04.0False
c3.03.09.0True
dNaN4.0NaNFalse
\n", - "
" - ], - "text/plain": [ - " one two three flag\n", - "a 1.0 1.0 1.0 False\n", - "b 2.0 2.0 4.0 False\n", - "c 3.0 3.0 9.0 True\n", - "d NaN 4.0 NaN False" - ] - }, - "execution_count": 71, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "df" - ] - }, - { - "cell_type": "markdown", - "id": "2bc6e13d", - "metadata": {}, - "source": [ - "Columns can be deleted or popped like with a dict:" - ] - }, - { - "cell_type": "code", - "execution_count": 72, - "id": "bb5ed406", - "metadata": {}, - "outputs": [], - "source": [ - "del df[\"two\"]" - ] - }, - { - "cell_type": "code", - "execution_count": 73, - "id": "d64c60cd", - "metadata": {}, - "outputs": [], - "source": [ - "three = df.pop(\"three\")" - ] - }, - { - "cell_type": "code", - "execution_count": 74, - "id": "4bd2952b", - "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", - "
oneflag
a1.0False
b2.0False
c3.0True
dNaNFalse
\n", - "
" - ], - "text/plain": [ - " one flag\n", - "a 1.0 False\n", - "b 2.0 False\n", - "c 3.0 True\n", - "d NaN False" - ] - }, - "execution_count": 74, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "df" - ] - }, - { - "cell_type": "markdown", - "id": "565331e7", - "metadata": {}, - "source": [ - "When inserting a scalar value, it will naturally be propagated to fill the column:" - ] - }, - { - "cell_type": "code", - "execution_count": 75, - "id": "e315da87", - "metadata": {}, - "outputs": [], - "source": [ - "df[\"foo\"] = \"bar\"" - ] - }, - { - "cell_type": "code", - "execution_count": 76, - "id": "42045478", - "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", - "
oneflagfoo
a1.0Falsebar
b2.0Falsebar
c3.0Truebar
dNaNFalsebar
\n", - "
" - ], - "text/plain": [ - " one flag foo\n", - "a 1.0 False bar\n", - "b 2.0 False bar\n", - "c 3.0 True bar\n", - "d NaN False bar" - ] - }, - "execution_count": 76, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "df" - ] - }, - { - "cell_type": "markdown", - "id": "ec612f22", - "metadata": {}, - "source": [ - "When inserting a `Series` that does not have the same index as the `DataFrame`, it will be conformed to the DataFrame’s index:" - ] - }, - { - "cell_type": "code", - "execution_count": 77, - "id": "fa0e4fa9", - "metadata": {}, - "outputs": [], - "source": [ - "df[\"one_trunc\"] = df[\"one\"][:2]" - ] - }, - { - "cell_type": "markdown", - "id": "f7550dac", - "metadata": {}, - "source": [ - "
\n", - "
\n", - "

Let's visualize it! 🎥

\n", - "
\n", - " \n", - "
\n", - "
\n", - "
" - ] - }, - { - "cell_type": "code", - "execution_count": 78, - "id": "405abded", - "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", - "
oneflagfooone_trunc
a1.0Falsebar1.0
b2.0Falsebar2.0
c3.0TruebarNaN
dNaNFalsebarNaN
\n", - "
" - ], - "text/plain": [ - " one flag foo one_trunc\n", - "a 1.0 False bar 1.0\n", - "b 2.0 False bar 2.0\n", - "c 3.0 True bar NaN\n", - "d NaN False bar NaN" - ] - }, - "execution_count": 78, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "df" - ] - }, - { - "cell_type": "markdown", - "id": "a0232c81", - "metadata": {}, - "source": [ - "You can insert raw ndarrays but their length must match the length of the DataFrame’s index.\n", - "\n", - "By default, columns get inserted at the end. `DataFrame.insert()` inserts at a particular location in the columns:" - ] - }, - { - "cell_type": "code", - "execution_count": 79, - "id": "49780cc3", - "metadata": {}, - "outputs": [], - "source": [ - "df.insert(1, \"bar\", df[\"one\"])" - ] - }, - { - "cell_type": "code", - "execution_count": 80, - "id": "f9231c1d", - "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", - "
onebarflagfooone_trunc
a1.01.0Falsebar1.0
b2.02.0Falsebar2.0
c3.03.0TruebarNaN
dNaNNaNFalsebarNaN
\n", - "
" - ], - "text/plain": [ - " one bar flag foo one_trunc\n", - "a 1.0 1.0 False bar 1.0\n", - "b 2.0 2.0 False bar 2.0\n", - "c 3.0 3.0 True bar NaN\n", - "d NaN NaN False bar NaN" - ] - }, - "execution_count": 80, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "df" - ] - }, - { - "cell_type": "markdown", - "id": "a1efc65b", - "metadata": {}, - "source": [ - "#### Assigning new columns in method chains\n", - "\n", - "DataFrame has an `assign()` method that allows you to easily create new columns that are potentially derived from existing columns." - ] - }, - { - "cell_type": "code", - "execution_count": 81, - "id": "7f1b0dad", - "metadata": {}, - "outputs": [], - "source": [ - "iris = pd.read_csv(\"../../assets/data/iris.csv\")" - ] - }, - { - "cell_type": "code", - "execution_count": 82, - "id": "9aa6cfda", - "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", - "
SepalLengthSepalWidthPetalLengthPetalWidthName
05.13.51.40.2Iris-setosa
14.93.01.40.2Iris-setosa
24.73.21.30.2Iris-setosa
34.63.11.50.2Iris-setosa
45.03.61.40.2Iris-setosa
\n", - "
" - ], - "text/plain": [ - " SepalLength SepalWidth PetalLength PetalWidth Name\n", - "0 5.1 3.5 1.4 0.2 Iris-setosa\n", - "1 4.9 3.0 1.4 0.2 Iris-setosa\n", - "2 4.7 3.2 1.3 0.2 Iris-setosa\n", - "3 4.6 3.1 1.5 0.2 Iris-setosa\n", - "4 5.0 3.6 1.4 0.2 Iris-setosa" - ] - }, - "execution_count": 82, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "iris.head()" - ] - }, - { - "cell_type": "code", - "execution_count": 83, - "id": "89a45800", - "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", - "
SepalLengthSepalWidthPetalLengthPetalWidthNamesepal_ratio
05.13.51.40.2Iris-setosa0.686275
14.93.01.40.2Iris-setosa0.612245
24.73.21.30.2Iris-setosa0.680851
34.63.11.50.2Iris-setosa0.673913
45.03.61.40.2Iris-setosa0.720000
\n", - "
" - ], - "text/plain": [ - " SepalLength SepalWidth PetalLength PetalWidth Name sepal_ratio\n", - "0 5.1 3.5 1.4 0.2 Iris-setosa 0.686275\n", - "1 4.9 3.0 1.4 0.2 Iris-setosa 0.612245\n", - "2 4.7 3.2 1.3 0.2 Iris-setosa 0.680851\n", - "3 4.6 3.1 1.5 0.2 Iris-setosa 0.673913\n", - "4 5.0 3.6 1.4 0.2 Iris-setosa 0.720000" - ] - }, - "execution_count": 83, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "iris.assign(sepal_ratio=iris[\"SepalWidth\"] / iris[\"SepalLength\"]).head()" - ] - }, - { - "cell_type": "markdown", - "id": "dfe2eed4", - "metadata": {}, - "source": [ - "In the example above, we inserted a precomputed value. We can also pass in a function of one argument to be evaluated on the DataFrame being assigned to." - ] - }, - { - "cell_type": "code", - "execution_count": 84, - "id": "aa246290", - "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", - "
SepalLengthSepalWidthPetalLengthPetalWidthNamesepal_ratio
05.13.51.40.2Iris-setosa0.686275
14.93.01.40.2Iris-setosa0.612245
24.73.21.30.2Iris-setosa0.680851
34.63.11.50.2Iris-setosa0.673913
45.03.61.40.2Iris-setosa0.720000
\n", - "
" - ], - "text/plain": [ - " SepalLength SepalWidth PetalLength PetalWidth Name sepal_ratio\n", - "0 5.1 3.5 1.4 0.2 Iris-setosa 0.686275\n", - "1 4.9 3.0 1.4 0.2 Iris-setosa 0.612245\n", - "2 4.7 3.2 1.3 0.2 Iris-setosa 0.680851\n", - "3 4.6 3.1 1.5 0.2 Iris-setosa 0.673913\n", - "4 5.0 3.6 1.4 0.2 Iris-setosa 0.720000" - ] - }, - "execution_count": 84, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "iris.assign(sepal_ratio=lambda x: (x[\"SepalWidth\"] / x[\"SepalLength\"])).head()" - ] - }, - { - "cell_type": "markdown", - "id": "24c74f56", - "metadata": {}, - "source": [ - "`assign()` **always** returns a copy of the data, leaving the original DataFrame untouched.\n", - "\n", - "Passing a callable, as opposed to an actual value to be inserted, is useful when you don’t have a reference to the DataFrame at hand. This is common when using `assign()` in a chain of operations. For example, we can limit the DataFrame to just those observations with a Sepal Length greater than 5, calculate the ratio, and plot:" - ] - }, - { - "cell_type": "code", - "execution_count": 85, - "id": "3f445420", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "" - ] - }, - "execution_count": 85, - "metadata": {}, - "output_type": "execute_result" - }, - { - "data": { - "image/png": "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", - "text/plain": [ - "
" - ] - }, - "metadata": { - "filenames": { - "image/png": "/home/runner/work/machine-learning/machine-learning/open-machine-learning-jupyter-book/_build/jupyter_execute/data-science/working-with-data/pandas_118_1.png" - } - }, - "output_type": "display_data" - } - ], - "source": [ - "(\n", - " iris.query(\"SepalLength > 5\")\n", - " .assign(\n", - " SepalRatio=lambda x: x.SepalWidth / x.SepalLength,\n", - " PetalRatio=lambda x: x.PetalWidth / x.PetalLength,\n", - " )\n", - " .plot(kind=\"scatter\", x=\"SepalRatio\", y=\"PetalRatio\")\n", - ")" - ] - }, - { - "cell_type": "markdown", - "id": "9f04072f", - "metadata": {}, - "source": [ - "Since a function is passed in, the function is computed on the DataFrame being assigned to. Importantly, this is the DataFrame that’s been filtered to those rows with sepal length greater than 5. The filtering happens first, and then the ratio calculations. This is an example where we didn’t have a reference to the filtered DataFrame available.\n", - "\n", - "The function signature for `assign()` is simply `**kwargs`. The keys are the column names for the new fields, and the values are either a value to be inserted (for example, a `Series` or NumPy array), or a function of one argument to be called on the `DataFrame`. A copy of the original `DataFrame` is returned, with the new values inserted.\n", - "\n", - "The order of `**kwargs` is preserved. This allows for dependent assignment, where an expression later in `**kwargs` can refer to a column created earlier in the same `assign()`." - ] - }, - { - "cell_type": "code", - "execution_count": 86, - "id": "bda7c5b8", - "metadata": {}, - "outputs": [], - "source": [ - "dfa = pd.DataFrame({\"A\": [1, 2, 3], \"B\": [4, 5, 6]})" - ] - }, - { - "cell_type": "code", - "execution_count": 87, - "id": "c1b52bea", - "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", - "
ABCD
01456
12579
236912
\n", - "
" - ], - "text/plain": [ - " A B C D\n", - "0 1 4 5 6\n", - "1 2 5 7 9\n", - "2 3 6 9 12" - ] - }, - "execution_count": 87, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "dfa.assign(C=lambda x: x[\"A\"] + x[\"B\"], D=lambda x: x[\"A\"] + x[\"C\"])" - ] - }, - { - "cell_type": "markdown", - "id": "46bea5d0", - "metadata": {}, - "source": [ - "In the second expression, `x['C']` will refer to the newly created column, that’s equal to `dfa['A'] + dfa['B']`.\n", - "\n", - "#### Indexing / selection\n", - "\n", - "The basics of indexing are as follows:\n", - "\n", - "|Operation |Syntax |Result |\n", - "|:------- |:----- |:----- |\n", - "|Select column |`df[col]` |Series |\n", - "|Select row by label |`df.loc[label]`|Series |\n", - "|Select row by integer location|`df.iloc[loc]` |Series |\n", - "|Slice rows |`df[5:10] ` |DataFrame|\n", - "|Select rows by boolean vector |`df[bool_vec]` |DataFrame|\n", - "\n", - "Row selection, for example, returns a `Series` whose index is the columns of the `DataFrame`:\n", - "\n", - "```\n", - "df.loc[\"b\"]\n", - "```\n", - "\n", - "
\n", - "
\n", - "

Let's visualize it! 🎥

\n", - "
\n", - " \n", - "
\n", - "
\n", - "
" - ] - }, - { - "cell_type": "code", - "execution_count": 88, - "id": "8a0bc94a", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "one 3.0\n", - "bar 3.0\n", - "flag True\n", - "foo bar\n", - "one_trunc NaN\n", - "Name: c, dtype: object" - ] - }, - "execution_count": 88, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "df.iloc[2]" - ] - }, - { - "cell_type": "markdown", - "id": "99503689", - "metadata": {}, - "source": [ - "#### Data alignment and arithmetic\n", - "\n", - "Data alignment between `DataFrame` objects automatically aligns on **both** the columns and the index (row labels)**. Again, the resulting object will have the union of the column and row labels." - ] - }, - { - "cell_type": "code", - "execution_count": 89, - "id": "09140acc", - "metadata": {}, - "outputs": [], - "source": [ - "df = pd.DataFrame(np.random.randn(10, 4), columns=[\"A\", \"B\", \"C\", \"D\"])" - ] - }, - { - "cell_type": "code", - "execution_count": 90, - "id": "c33d7251", - "metadata": {}, - "outputs": [], - "source": [ - "df2 = pd.DataFrame(np.random.randn(7, 3), columns=[\"A\", \"B\", \"C\"])" - ] - }, - { - "cell_type": "code", - "execution_count": 91, - "id": "23779fd8", - "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", - "
ABCD
0-1.0344490.7189160.140419NaN
11.7658480.0101220.636368NaN
2-0.8553050.2303520.573435NaN
3-0.5099381.352540-0.631656NaN
4-1.1624601.902037-0.058588NaN
5-0.052771-1.3456083.168266NaN
6-1.440110-0.1831730.280195NaN
7NaNNaNNaNNaN
8NaNNaNNaNNaN
9NaNNaNNaNNaN
\n", - "
" - ], - "text/plain": [ - " A B C D\n", - "0 -1.034449 0.718916 0.140419 NaN\n", - "1 1.765848 0.010122 0.636368 NaN\n", - "2 -0.855305 0.230352 0.573435 NaN\n", - "3 -0.509938 1.352540 -0.631656 NaN\n", - "4 -1.162460 1.902037 -0.058588 NaN\n", - "5 -0.052771 -1.345608 3.168266 NaN\n", - "6 -1.440110 -0.183173 0.280195 NaN\n", - "7 NaN NaN NaN NaN\n", - "8 NaN NaN NaN NaN\n", - "9 NaN NaN NaN NaN" - ] - }, - "execution_count": 91, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "df + df2" - ] - }, - { - "cell_type": "markdown", - "id": "cc116b6a", - "metadata": {}, - "source": [ - "When doing an operation between `DataFrame` and `Series`, the default behavior is to align the `Series` **index** on the `DataFrame` **columns**, thus broadcasting row-wise. For example:" - ] - }, - { - "cell_type": "code", - "execution_count": 92, - "id": "fab7d849", - "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", - "
ABCD
00.0000000.0000000.0000000.000000
10.537551-1.578889-1.6144951.598048
21.573832-0.441195-1.9546561.888938
30.3254170.719227-3.141645-0.030097
40.3514230.296638-1.6675572.071918
50.706899-1.667650-1.1561990.343590
60.394004-1.852758-2.264064-0.252468
71.875723-0.890963-3.2126390.738720
81.322616-0.894232-0.6436261.804562
90.6666470.375275-1.2026560.855678
\n", - "
" - ], - "text/plain": [ - " A B C D\n", - "0 0.000000 0.000000 0.000000 0.000000\n", - "1 0.537551 -1.578889 -1.614495 1.598048\n", - "2 1.573832 -0.441195 -1.954656 1.888938\n", - "3 0.325417 0.719227 -3.141645 -0.030097\n", - "4 0.351423 0.296638 -1.667557 2.071918\n", - "5 0.706899 -1.667650 -1.156199 0.343590\n", - "6 0.394004 -1.852758 -2.264064 -0.252468\n", - "7 1.875723 -0.890963 -3.212639 0.738720\n", - "8 1.322616 -0.894232 -0.643626 1.804562\n", - "9 0.666647 0.375275 -1.202656 0.855678" - ] - }, - "execution_count": 92, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "df - df.iloc[0]" - ] - }, - { - "cell_type": "markdown", - "id": "44e2514e", - "metadata": {}, - "source": [ - "Arithmetic operations with scalars operate element-wise:" - ] - }, - { - "cell_type": "code", - "execution_count": 93, - "id": "4162de20", - "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", - "
ABCD
0-2.4475417.52248210.973291-2.429113
10.240213-0.3719622.9008155.561129
25.4216225.3165091.2000107.015574
3-0.82045511.118616-4.734936-2.579596
4-0.6904249.0056742.6355047.930478
51.086953-0.8157685.192298-0.711166
6-0.477520-1.741306-0.347029-3.691456
76.9310743.067669-5.0899061.264485
84.1655393.0513207.7551606.593695
90.8856929.3988564.9600121.849276
\n", - "
" - ], - "text/plain": [ - " A B C D\n", - "0 -2.447541 7.522482 10.973291 -2.429113\n", - "1 0.240213 -0.371962 2.900815 5.561129\n", - "2 5.421622 5.316509 1.200010 7.015574\n", - "3 -0.820455 11.118616 -4.734936 -2.579596\n", - "4 -0.690424 9.005674 2.635504 7.930478\n", - "5 1.086953 -0.815768 5.192298 -0.711166\n", - "6 -0.477520 -1.741306 -0.347029 -3.691456\n", - "7 6.931074 3.067669 -5.089906 1.264485\n", - "8 4.165539 3.051320 7.755160 6.593695\n", - "9 0.885692 9.398856 4.960012 1.849276" - ] - }, - "execution_count": 93, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "df * 5 + 2" - ] - }, - { - "cell_type": "code", - "execution_count": 94, - "id": "a8608325", - "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", - "
ABCD
0-1.1242170.9053900.557209-1.128894
1-2.841254-2.1079595.5505301.404049
21.4612951.507609-6.2500770.996895
3-1.7727640.548329-0.742398-1.091799
4-1.8584430.7137077.8677730.843102
5-5.476172-1.7757141.566270-1.844225
6-2.018147-1.336432-2.130353-0.878510
71.0139784.683100-0.705228-6.797955
82.3088944.7559250.8687861.088448
9-4.4870900.6757801.689182-33.173253
\n", - "
" - ], - "text/plain": [ - " A B C D\n", - "0 -1.124217 0.905390 0.557209 -1.128894\n", - "1 -2.841254 -2.107959 5.550530 1.404049\n", - "2 1.461295 1.507609 -6.250077 0.996895\n", - "3 -1.772764 0.548329 -0.742398 -1.091799\n", - "4 -1.858443 0.713707 7.867773 0.843102\n", - "5 -5.476172 -1.775714 1.566270 -1.844225\n", - "6 -2.018147 -1.336432 -2.130353 -0.878510\n", - "7 1.013978 4.683100 -0.705228 -6.797955\n", - "8 2.308894 4.755925 0.868786 1.088448\n", - "9 -4.487090 0.675780 1.689182 -33.173253" - ] - }, - "execution_count": 94, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "1 / df" - ] - }, - { - "cell_type": "code", - "execution_count": 95, - "id": "301ec4ac", - "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", - "
ABCD
00.6260371.48818610.3735396.157256e-01
10.0153450.0506470.0010542.573183e-01
20.2193050.1935730.0006551.012518e+00
30.10125011.0620523.2919547.037668e-01
40.0838313.8540710.0002611.979150e+00
50.0011120.1005790.1661638.644588e-02
60.0602820.3134820.0485501.678856e+00
70.9459890.0020794.0427964.682598e-04
80.0351870.0019551.7552937.124734e-01
90.0024674.7948850.1228278.257484e-07
\n", - "
" - ], - "text/plain": [ - " A B C D\n", - "0 0.626037 1.488186 10.373539 6.157256e-01\n", - "1 0.015345 0.050647 0.001054 2.573183e-01\n", - "2 0.219305 0.193573 0.000655 1.012518e+00\n", - "3 0.101250 11.062052 3.291954 7.037668e-01\n", - "4 0.083831 3.854071 0.000261 1.979150e+00\n", - "5 0.001112 0.100579 0.166163 8.644588e-02\n", - "6 0.060282 0.313482 0.048550 1.678856e+00\n", - "7 0.945989 0.002079 4.042796 4.682598e-04\n", - "8 0.035187 0.001955 1.755293 7.124734e-01\n", - "9 0.002467 4.794885 0.122827 8.257484e-07" - ] - }, - "execution_count": 95, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "df ** 4" - ] - }, - { - "cell_type": "markdown", - "id": "8e24ac3b", - "metadata": {}, - "source": [ - "Boolean operators operate element-wise as well:" - ] - }, - { - "cell_type": "code", - "execution_count": 96, - "id": "22cf9221", - "metadata": {}, - "outputs": [], - "source": [ - "df1 = pd.DataFrame({\"a\": [1, 0, 1], \"b\": [0, 1, 1]}, dtype=bool)" - ] - }, - { - "cell_type": "code", - "execution_count": 97, - "id": "886dbecd", - "metadata": {}, - "outputs": [], - "source": [ - "df2 = pd.DataFrame({\"a\": [0, 1, 1], \"b\": [1, 1, 0]}, dtype=bool)" - ] - }, - { - "cell_type": "code", - "execution_count": 98, - "id": "579d4104", - "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", - "
ab
0FalseFalse
1FalseTrue
2TrueFalse
\n", - "
" - ], - "text/plain": [ - " a b\n", - "0 False False\n", - "1 False True\n", - "2 True False" - ] - }, - "execution_count": 98, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "df1 & df2" - ] - }, - { - "cell_type": "code", - "execution_count": 99, - "id": "46fa81e5", - "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", - "
ab
0TrueTrue
1TrueTrue
2TrueTrue
\n", - "
" - ], - "text/plain": [ - " a b\n", - "0 True True\n", - "1 True True\n", - "2 True True" - ] - }, - "execution_count": 99, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "df1 | df2" - ] - }, - { - "cell_type": "code", - "execution_count": 100, - "id": "43b30b03", - "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", - "
ab
0TrueTrue
1TrueFalse
2FalseTrue
\n", - "
" - ], - "text/plain": [ - " a b\n", - "0 True True\n", - "1 True False\n", - "2 False True" - ] - }, - "execution_count": 100, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "df1 ^ df2" - ] - }, - { - "cell_type": "code", - "execution_count": 101, - "id": "8fcc0a99", - "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", - "
ab
0FalseTrue
1TrueFalse
2FalseFalse
\n", - "
" - ], - "text/plain": [ - " a b\n", - "0 False True\n", - "1 True False\n", - "2 False False" - ] - }, - "execution_count": 101, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "-df1" - ] - }, - { - "cell_type": "markdown", - "id": "6e9dc9db", - "metadata": {}, - "source": [ - "#### Transposing\n", - "\n", - "To transpose, access the `T` attribute or `DataFrame.transpose()`, similar to an ndarray:" - ] - }, - { - "cell_type": "code", - "execution_count": 102, - "id": "25840381", - "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", - "
01234
A-0.889508-0.3519570.684324-0.564091-0.538085
B1.104496-0.4743920.6633021.8237231.401135
C1.7946580.180163-0.159998-1.3469870.127101
D-0.8858230.7122261.003115-0.9159191.186096
\n", - "
" - ], - "text/plain": [ - " 0 1 2 3 4\n", - "A -0.889508 -0.351957 0.684324 -0.564091 -0.538085\n", - "B 1.104496 -0.474392 0.663302 1.823723 1.401135\n", - "C 1.794658 0.180163 -0.159998 -1.346987 0.127101\n", - "D -0.885823 0.712226 1.003115 -0.915919 1.186096" - ] - }, - "execution_count": 102, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "df[:5].T" - ] - }, - { - "cell_type": "markdown", - "id": "da179310", - "metadata": {}, - "source": [ - "## Data indexing and selection\n", - "\n", - "The axis labeling information in Pandas objects serves many purposes:\n", - "\n", - "- Identifies data (i.e. provides metadata) using known indicators, important for analysis, visualization, and interactive console display.\n", - "- Enables automatic and explicit data alignment.\n", - "- Allows intuitive getting and setting of subsets of the data set.\n", - "\n", - "In this section, we will focus on the final point: namely, how to slice, dice, and generally get and set subsets of Pandas objects. The primary focus will be on Series and DataFrame as they have received more development attention in this area.\n", - "\n", - "```{note}\n", - "The Python and NumPy indexing operators `[]` and attribute operator `.` provide quick and easy access to Pandas data structures across a wide range of use cases. This makes interactive work intuitive, as there’s little new to learn if you already know how to deal with Python dictionaries and NumPy arrays. However, since the type of the data to be accessed isn’t known in advance, directly using standard operators has some optimization limits. For production code, we recommended that you take advantage of the optimized Pandas data access methods exposed in this chapter.\n", - "```\n", - "\n", - "```{warning}\n", - "Whether a copy or a reference is returned for a setting operation, may depend on the context. This is sometimes called `chained assignment` and should be avoided.\n", - "```\n", - "\n", - "### Different choices for indexing\n", - "\n", - "Object selection has had a number of user-requested additions in order to support more explicit location-based indexing. Pandas now supports three types of multi-axis indexing.\n", - "\n", - "- `.loc` is primarily label based, but may also be used with a boolean array. `.loc` will raise `KeyError` when the items are not found. Allowed inputs are:\n", - " - A single label, e.g. `5` or `'a'` (Note that `5` is interpreted as a label of the index. This use is not an integer position along the index.).\n", - " - A list or array of labels `['a', 'b', 'c']`.\n", - " - A slice object with labels `'a':'f'` (Note that contrary to usual Python slices, both the start and the stop are included, when present in the index!)\n", - " - A boolean array (any `NA` values will be treated as `False`).\n", - " - A `callable` function with one argument (the calling Series or DataFrame) and that returns valid output for indexing (one of the above).\n", - "\n", - "- `.iloc` is primarily integer position based (from `0` to `length-1` of the axis), but may also be used with a boolean array. `.iloc` will raise `IndexError` if a requested indexer is out-of-bounds, except slice indexers which allow out-of-bounds indexing. (this conforms with Python/NumPy slice semantics). Allowed inputs are:\n", - " - An integer e.g. `5`.\n", - " - A list or array of integers `[4, 3, 0]`.\n", - " - A slice object with ints `1:7`.\n", - " - A boolean array (any `NA` values will be treated as `False`).\n", - " - A `callable` function with one argument (the calling Series or DataFrame) that returns valid output for indexing (one of the above).\n", - "- `.loc`, `.iloc`, and also `[]` indexing can accept a `callable` as indexer.\n", - "\n", - "Getting values from an object with multi-axes selection uses the following notation (using `.loc` as an example, but the following applies to `.iloc` as well). Any of the axes accessors may be the null slice `:`. Axes left out of the specification are assumed to be `:`, e.g. `p.loc['a']` is equivalent to `p.loc['a', :]`.\n", - "\n", - "|**Object Type**|**Indexers** |\n", - "|:-- |:- |\n", - "|Series |`s.loc[indexer]` |\n", - "|DataFrame |`df.loc[row_indexer, column_indexer]`|\n", - "\n", - "### Basics\n", - "\n", - "As mentioned when introducing the data structures in the last section, the primary function of indexing with `[]` (a.k.a.` __getitem__` for those familiar with implementing class behavior in Python) is selecting out lower-dimensional slices. The following table shows return type values when indexing Pandas objects with `[]`:\n", - "\n", - "|**Object Type**|**Selection** |Return Value Type |\n", - "|:- |:- |:- |\n", - "|Series |`series[label]` |scalar value |\n", - "|DataFrame |`frame[colname]`|`Series` corresponding to colname|\n", - "\n", - "Here we construct a simple time series data set to use for illustrating the indexing functionality:" - ] - }, - { - "cell_type": "code", - "execution_count": 103, - "id": "b935bcf2", - "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", - "
ABCD
2000-01-010.5609770.2105450.1580790.492279
2000-01-021.280369-0.817745-1.522940-1.275264
2000-01-030.156302-0.313090-1.386411-0.757229
2000-01-040.528869-0.5420661.345872-0.706867
2000-01-05-2.4663300.731123-2.066561-1.477377
2000-01-06-0.3004970.207552-0.639468-0.950777
2000-01-07-2.626322-1.072332-1.523701-1.489816
2000-01-08-0.960255-0.402632-0.3973660.085742
\n", - "
" - ], - "text/plain": [ - " A B C D\n", - "2000-01-01 0.560977 0.210545 0.158079 0.492279\n", - "2000-01-02 1.280369 -0.817745 -1.522940 -1.275264\n", - "2000-01-03 0.156302 -0.313090 -1.386411 -0.757229\n", - "2000-01-04 0.528869 -0.542066 1.345872 -0.706867\n", - "2000-01-05 -2.466330 0.731123 -2.066561 -1.477377\n", - "2000-01-06 -0.300497 0.207552 -0.639468 -0.950777\n", - "2000-01-07 -2.626322 -1.072332 -1.523701 -1.489816\n", - "2000-01-08 -0.960255 -0.402632 -0.397366 0.085742" - ] - }, - "execution_count": 103, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "dates = pd.date_range('1/1/2000', periods=8)\n", - "df = pd.DataFrame(np.random.randn(8, 4),\n", - " index=dates, columns=['A', 'B', 'C', 'D'])\n", - "df" - ] - }, - { - "cell_type": "markdown", - "id": "4e293d7c", - "metadata": {}, - "source": [ - "```{note}\n", - "None of the indexing functionality is time series specific unless specifically stated.\n", - "```\n", - "\n", - "Thus, as per above, we have the most basic indexing using `[]`:" - ] - }, - { - "cell_type": "code", - "execution_count": 104, - "id": "22330c85", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "-0.3004967298995864" - ] - }, - "execution_count": 104, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "s = df['A']\n", - "\n", - "s[dates[5]]" - ] - }, - { - "cell_type": "markdown", - "id": "5915f28e", - "metadata": {}, - "source": [ - "You can pass a list of columns to `[]` to select columns in that order. If a column is not contained in the DataFrame, an exception will be raised. Multiple columns can also be set in this manner:" - ] - }, - { - "cell_type": "code", - "execution_count": 105, - "id": "a6f2d214", - "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", - "
ABCD
2000-01-010.5609770.2105450.1580790.492279
2000-01-021.280369-0.817745-1.522940-1.275264
2000-01-030.156302-0.313090-1.386411-0.757229
2000-01-040.528869-0.5420661.345872-0.706867
2000-01-05-2.4663300.731123-2.066561-1.477377
2000-01-06-0.3004970.207552-0.639468-0.950777
2000-01-07-2.626322-1.072332-1.523701-1.489816
2000-01-08-0.960255-0.402632-0.3973660.085742
\n", - "
" - ], - "text/plain": [ - " A B C D\n", - "2000-01-01 0.560977 0.210545 0.158079 0.492279\n", - "2000-01-02 1.280369 -0.817745 -1.522940 -1.275264\n", - "2000-01-03 0.156302 -0.313090 -1.386411 -0.757229\n", - "2000-01-04 0.528869 -0.542066 1.345872 -0.706867\n", - "2000-01-05 -2.466330 0.731123 -2.066561 -1.477377\n", - "2000-01-06 -0.300497 0.207552 -0.639468 -0.950777\n", - "2000-01-07 -2.626322 -1.072332 -1.523701 -1.489816\n", - "2000-01-08 -0.960255 -0.402632 -0.397366 0.085742" - ] - }, - "execution_count": 105, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "df" - ] - }, - { - "cell_type": "code", - "execution_count": 106, - "id": "13c8e5eb", - "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", - "
ABCD
2000-01-010.2105450.5609770.1580790.492279
2000-01-02-0.8177451.280369-1.522940-1.275264
2000-01-03-0.3130900.156302-1.386411-0.757229
2000-01-04-0.5420660.5288691.345872-0.706867
2000-01-050.731123-2.466330-2.066561-1.477377
2000-01-060.207552-0.300497-0.639468-0.950777
2000-01-07-1.072332-2.626322-1.523701-1.489816
2000-01-08-0.402632-0.960255-0.3973660.085742
\n", - "
" - ], - "text/plain": [ - " A B C D\n", - "2000-01-01 0.210545 0.560977 0.158079 0.492279\n", - "2000-01-02 -0.817745 1.280369 -1.522940 -1.275264\n", - "2000-01-03 -0.313090 0.156302 -1.386411 -0.757229\n", - "2000-01-04 -0.542066 0.528869 1.345872 -0.706867\n", - "2000-01-05 0.731123 -2.466330 -2.066561 -1.477377\n", - "2000-01-06 0.207552 -0.300497 -0.639468 -0.950777\n", - "2000-01-07 -1.072332 -2.626322 -1.523701 -1.489816\n", - "2000-01-08 -0.402632 -0.960255 -0.397366 0.085742" - ] - }, - "execution_count": 106, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "df[['B', 'A']] = df[['A', 'B']]\n", - "df" - ] - }, - { - "cell_type": "markdown", - "id": "8bf21d81", - "metadata": {}, - "source": [ - "You may find this useful for applying a transform (in-place) to a subset of the columns.\n", - "\n", - "```{warning}\n", - "Pandas aligns all AXES when setting `Series` and `DataFrame` from `.loc`, and `.iloc`.\n", - "\n", - "This will not modify `df` because the column alignment is before value assignment.\n", - "```" - ] - }, - { - "cell_type": "code", - "execution_count": 107, - "id": "a9e5a725", - "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", - "
AB
2000-01-010.2105450.560977
2000-01-02-0.8177451.280369
2000-01-03-0.3130900.156302
2000-01-04-0.5420660.528869
2000-01-050.731123-2.466330
2000-01-060.207552-0.300497
2000-01-07-1.072332-2.626322
2000-01-08-0.402632-0.960255
\n", - "
" - ], - "text/plain": [ - " A B\n", - "2000-01-01 0.210545 0.560977\n", - "2000-01-02 -0.817745 1.280369\n", - "2000-01-03 -0.313090 0.156302\n", - "2000-01-04 -0.542066 0.528869\n", - "2000-01-05 0.731123 -2.466330\n", - "2000-01-06 0.207552 -0.300497\n", - "2000-01-07 -1.072332 -2.626322\n", - "2000-01-08 -0.402632 -0.960255" - ] - }, - "execution_count": 107, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "df[['A', 'B']]" - ] - }, - { - "cell_type": "code", - "execution_count": 108, - "id": "deaf7423", - "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", - "
AB
2000-01-010.2105450.560977
2000-01-02-0.8177451.280369
2000-01-03-0.3130900.156302
2000-01-04-0.5420660.528869
2000-01-050.731123-2.466330
2000-01-060.207552-0.300497
2000-01-07-1.072332-2.626322
2000-01-08-0.402632-0.960255
\n", - "
" - ], - "text/plain": [ - " A B\n", - "2000-01-01 0.210545 0.560977\n", - "2000-01-02 -0.817745 1.280369\n", - "2000-01-03 -0.313090 0.156302\n", - "2000-01-04 -0.542066 0.528869\n", - "2000-01-05 0.731123 -2.466330\n", - "2000-01-06 0.207552 -0.300497\n", - "2000-01-07 -1.072332 -2.626322\n", - "2000-01-08 -0.402632 -0.960255" - ] - }, - "execution_count": 108, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "df.loc[:, ['B', 'A']] = df[['A', 'B']]\n", - "df[['A', 'B']]" - ] - }, - { - "cell_type": "markdown", - "id": "396ffe1a", - "metadata": {}, - "source": [ - "```{warning}\n", - "The correct way to swap column values is by using raw values:\n", - "```" - ] - }, - { - "cell_type": "code", - "execution_count": 109, - "id": "b313fc4d", - "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", - "
AB
2000-01-010.5609770.210545
2000-01-021.280369-0.817745
2000-01-030.156302-0.313090
2000-01-040.528869-0.542066
2000-01-05-2.4663300.731123
2000-01-06-0.3004970.207552
2000-01-07-2.626322-1.072332
2000-01-08-0.960255-0.402632
\n", - "
" - ], - "text/plain": [ - " A B\n", - "2000-01-01 0.560977 0.210545\n", - "2000-01-02 1.280369 -0.817745\n", - "2000-01-03 0.156302 -0.313090\n", - "2000-01-04 0.528869 -0.542066\n", - "2000-01-05 -2.466330 0.731123\n", - "2000-01-06 -0.300497 0.207552\n", - "2000-01-07 -2.626322 -1.072332\n", - "2000-01-08 -0.960255 -0.402632" - ] - }, - "execution_count": 109, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "df.loc[:, ['B', 'A']] = df[['A', 'B']].to_numpy()\n", - "df[['A', 'B']]" - ] - }, - { - "cell_type": "markdown", - "id": "e8fc4213", - "metadata": {}, - "source": [ - "### Attribute access\n", - "\n", - "You may access an index on a `Series` or column on a `DataFrame` directly as an attribute:" - ] - }, - { - "cell_type": "code", - "execution_count": 110, - "id": "a98d540f", - "metadata": {}, - "outputs": [], - "source": [ - "sa = pd.Series([1, 2, 3], index=list('abc'))\n", - "dfa = df.copy()" - ] - }, - { - "cell_type": "code", - "execution_count": 111, - "id": "61c5de8c", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "2" - ] - }, - "execution_count": 111, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "sa.b" - ] - }, - { - "cell_type": "code", - "execution_count": 112, - "id": "82a8a49d", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "2000-01-01 0.560977\n", - "2000-01-02 1.280369\n", - "2000-01-03 0.156302\n", - "2000-01-04 0.528869\n", - "2000-01-05 -2.466330\n", - "2000-01-06 -0.300497\n", - "2000-01-07 -2.626322\n", - "2000-01-08 -0.960255\n", - "Freq: D, Name: A, dtype: float64" - ] - }, - "execution_count": 112, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "dfa.A" - ] - }, - { - "cell_type": "code", - "execution_count": 113, - "id": "c877f27a", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "a 5\n", - "b 2\n", - "c 3\n", - "dtype: int64" - ] - }, - "execution_count": 113, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "sa.a = 5\n", - "sa" - ] - }, - { - "cell_type": "code", - "execution_count": 114, - "id": "a858572a", - "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", - "
ABCD
2000-01-0100.2105450.1580790.492279
2000-01-021-0.817745-1.522940-1.275264
2000-01-032-0.313090-1.386411-0.757229
2000-01-043-0.5420661.345872-0.706867
2000-01-0540.731123-2.066561-1.477377
2000-01-0650.207552-0.639468-0.950777
2000-01-076-1.072332-1.523701-1.489816
2000-01-087-0.402632-0.3973660.085742
\n", - "
" - ], - "text/plain": [ - " A B C D\n", - "2000-01-01 0 0.210545 0.158079 0.492279\n", - "2000-01-02 1 -0.817745 -1.522940 -1.275264\n", - "2000-01-03 2 -0.313090 -1.386411 -0.757229\n", - "2000-01-04 3 -0.542066 1.345872 -0.706867\n", - "2000-01-05 4 0.731123 -2.066561 -1.477377\n", - "2000-01-06 5 0.207552 -0.639468 -0.950777\n", - "2000-01-07 6 -1.072332 -1.523701 -1.489816\n", - "2000-01-08 7 -0.402632 -0.397366 0.085742" - ] - }, - "execution_count": 114, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "dfa.A = list(range(len(dfa.index))) # ok if A already exists\n", - "dfa" - ] - }, - { - "cell_type": "code", - "execution_count": 115, - "id": "5bac073a", - "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", - "
ABCD
2000-01-0100.2105450.1580790.492279
2000-01-021-0.817745-1.522940-1.275264
2000-01-032-0.313090-1.386411-0.757229
2000-01-043-0.5420661.345872-0.706867
2000-01-0540.731123-2.066561-1.477377
2000-01-0650.207552-0.639468-0.950777
2000-01-076-1.072332-1.523701-1.489816
2000-01-087-0.402632-0.3973660.085742
\n", - "
" - ], - "text/plain": [ - " A B C D\n", - "2000-01-01 0 0.210545 0.158079 0.492279\n", - "2000-01-02 1 -0.817745 -1.522940 -1.275264\n", - "2000-01-03 2 -0.313090 -1.386411 -0.757229\n", - "2000-01-04 3 -0.542066 1.345872 -0.706867\n", - "2000-01-05 4 0.731123 -2.066561 -1.477377\n", - "2000-01-06 5 0.207552 -0.639468 -0.950777\n", - "2000-01-07 6 -1.072332 -1.523701 -1.489816\n", - "2000-01-08 7 -0.402632 -0.397366 0.085742" - ] - }, - "execution_count": 115, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "dfa['A'] = list(range(len(dfa.index))) # use this form to create a new column\n", - "dfa" - ] - }, - { - "cell_type": "markdown", - "id": "3994e6e9", - "metadata": {}, - "source": [ - "```{warning}\n", - "- You can use this access only if the index element is a valid Python identifier, e.g. s.1 is not allowed. See here for an explanation of valid identifiers.\n", - "\n", - "- The attribute will not be available if it conflicts with an existing method name, e.g. s.min is not allowed, but s['min'] is possible.\n", - "\n", - "- Similarly, the attribute will not be available if it conflicts with any of the following list: index, major_axis, minor_axis, items.\n", - "\n", - "- In any of these cases, standard indexing will still work, e.g. s['1'], s['min'], and s['index'] will access the corresponding element or column.\n", - "```\n", - "\n", - "If you are using the IPython environment, you may also use tab-completion to see these accessible attributes.\n", - "\n", - "You can also assign a `dict` to a row of a `DataFrame`:" - ] - }, - { - "cell_type": "code", - "execution_count": 116, - "id": "b426f182", - "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", - "
xy
013
1999
235
\n", - "
" - ], - "text/plain": [ - " x y\n", - "0 1 3\n", - "1 9 99\n", - "2 3 5" - ] - }, - "execution_count": 116, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "x = pd.DataFrame({'x': [1, 2, 3], 'y': [3, 4, 5]})\n", - "x.iloc[1] = {'x': 9, 'y': 99}\n", - "x" - ] - }, - { - "cell_type": "markdown", - "id": "07c77821", - "metadata": {}, - "source": [ - "You can use attribute access to modify an existing element of a Series or column of a DataFrame, but be careful; if you try to use attribute access to create a new column, it creates a new attribute rather than a new column. In 0.21.0 and later, this will raise a `UserWarning`:" - ] - }, - { - "cell_type": "code", - "execution_count": 117, - "id": "d0dd98e4", - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/tmp/ipykernel_6653/269534380.py:2: UserWarning: Pandas doesn't allow columns to be created via a new attribute name - see https://pandas.pydata.org/pandas-docs/stable/indexing.html#attribute-access\n", - " df.two = [4, 5, 6]\n" - ] - } - ], - "source": [ - "df = pd.DataFrame({'one': [1., 2., 3.]})\n", - "df.two = [4, 5, 6]" - ] - }, - { - "cell_type": "code", - "execution_count": 118, - "id": "be7d10fd", - "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", - "
one
01.0
12.0
23.0
\n", - "
" - ], - "text/plain": [ - " one\n", - "0 1.0\n", - "1 2.0\n", - "2 3.0" - ] - }, - "execution_count": 118, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "df" - ] - }, - { - "cell_type": "markdown", - "id": "24e53e81", - "metadata": {}, - "source": [ - "### Slicing ranges\n", - "\n", - "For now, we explain the semantics of slicing using the [] operator.\n", - "\n", - "With Series, the syntax works exactly as with an ndarray, returning a slice of the values and the corresponding labels:" - ] - }, - { - "cell_type": "code", - "execution_count": 119, - "id": "5a0c0c96", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "2000-01-01 0.560977\n", - "2000-01-02 1.280369\n", - "2000-01-03 0.156302\n", - "2000-01-04 0.528869\n", - "2000-01-05 -2.466330\n", - "2000-01-06 -0.300497\n", - "2000-01-07 -2.626322\n", - "2000-01-08 -0.960255\n", - "Freq: D, Name: A, dtype: float64" - ] - }, - "execution_count": 119, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "s" - ] - }, - { - "cell_type": "code", - "execution_count": 120, - "id": "54b3429f", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "2000-01-01 0.560977\n", - "2000-01-02 1.280369\n", - "2000-01-03 0.156302\n", - "2000-01-04 0.528869\n", - "2000-01-05 -2.466330\n", - "Freq: D, Name: A, dtype: float64" - ] - }, - "execution_count": 120, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "s[:5]" - ] - }, - { - "cell_type": "code", - "execution_count": 121, - "id": "d5a7989b", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "2000-01-01 0.560977\n", - "2000-01-03 0.156302\n", - "2000-01-05 -2.466330\n", - "2000-01-07 -2.626322\n", - "Freq: 2D, Name: A, dtype: float64" - ] - }, - "execution_count": 121, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "s[::2]" - ] - }, - { - "cell_type": "code", - "execution_count": 122, - "id": "eb35c2a9", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "2000-01-08 -0.960255\n", - "2000-01-07 -2.626322\n", - "2000-01-06 -0.300497\n", - "2000-01-05 -2.466330\n", - "2000-01-04 0.528869\n", - "2000-01-03 0.156302\n", - "2000-01-02 1.280369\n", - "2000-01-01 0.560977\n", - "Freq: -1D, Name: A, dtype: float64" - ] - }, - "execution_count": 122, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "s[::-1]" - ] - }, - { - "cell_type": "markdown", - "id": "d1b310e0", - "metadata": {}, - "source": [ - "Note that setting works as well:" - ] - }, - { - "cell_type": "code", - "execution_count": 123, - "id": "2276582f", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "2000-01-01 0.000000\n", - "2000-01-02 0.000000\n", - "2000-01-03 0.000000\n", - "2000-01-04 0.000000\n", - "2000-01-05 0.000000\n", - "2000-01-06 -0.300497\n", - "2000-01-07 -2.626322\n", - "2000-01-08 -0.960255\n", - "Freq: D, Name: A, dtype: float64" - ] - }, - "execution_count": 123, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "s2 = s.copy()\n", - "s2[:5] = 0\n", - "s2" - ] - }, - { - "cell_type": "markdown", - "id": "6197cb61", - "metadata": {}, - "source": [ - "With DataFrame, slicing inside of `[]` slices the rows. This is provided largely as a convenience since it is such a common operation." - ] - }, - { - "cell_type": "code", - "execution_count": 124, - "id": "5dfabbd2", - "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", - "
one
01.0
12.0
23.0
\n", - "
" - ], - "text/plain": [ - " one\n", - "0 1.0\n", - "1 2.0\n", - "2 3.0" - ] - }, - "execution_count": 124, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "df[:3]" - ] - }, - { - "cell_type": "code", - "execution_count": 125, - "id": "0b091ad1", - "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", - "
one
23.0
12.0
01.0
\n", - "
" - ], - "text/plain": [ - " one\n", - "2 3.0\n", - "1 2.0\n", - "0 1.0" - ] - }, - "execution_count": 125, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "df[::-1]" - ] - }, - { - "cell_type": "markdown", - "id": "f372a642", - "metadata": {}, - "source": [ - "### Selection by label\n", - "\n", - "```{warning}\n", - "Whether a copy or a reference is returned for a setting operation, may depend on the context. This is sometimes called `chained assignment` and should be avoided.\n", - "```\n", - "\n", - "```{warning}\n", - "`.loc` is strict when you present slicers that are not compatible (or convertible) with the index type. For example using integers in a `DatetimeIndex`. These will raise a `TypeError`.\n", - "```" - ] - }, - { - "cell_type": "code", - "execution_count": 126, - "id": "e9fef381", - "metadata": {}, - "outputs": [], - "source": [ - "dfl = pd.DataFrame(np.random.randn(5, 4),\n", - " columns=list('ABCD'),\n", - " index=pd.date_range('20130101', periods=5))" - ] - }, - { - "cell_type": "code", - "execution_count": 127, - "id": "c7c0a82c", - "metadata": { - "tags": [ - "raises-exception" - ] - }, - "outputs": [ - { - "ename": "TypeError", - "evalue": "cannot do slice indexing on DatetimeIndex with these indexers [2] of type int", - "output_type": "error", - "traceback": [ - "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", - "\u001b[0;31mTypeError\u001b[0m Traceback (most recent call last)", - "Cell \u001b[0;32mIn[127], line 1\u001b[0m\n\u001b[0;32m----> 1\u001b[0m \u001b[43mdfl\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mloc\u001b[49m\u001b[43m[\u001b[49m\u001b[38;5;241;43m2\u001b[39;49m\u001b[43m:\u001b[49m\u001b[38;5;241;43m3\u001b[39;49m\u001b[43m]\u001b[49m\n", - "File \u001b[0;32m/usr/share/miniconda/envs/open-machine-learning-jupyter-book/lib/python3.9/site-packages/pandas/core/indexing.py:1073\u001b[0m, in \u001b[0;36m_LocationIndexer.__getitem__\u001b[0;34m(self, key)\u001b[0m\n\u001b[1;32m 1070\u001b[0m axis \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39maxis \u001b[38;5;129;01mor\u001b[39;00m \u001b[38;5;241m0\u001b[39m\n\u001b[1;32m 1072\u001b[0m maybe_callable \u001b[38;5;241m=\u001b[39m com\u001b[38;5;241m.\u001b[39mapply_if_callable(key, \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mobj)\n\u001b[0;32m-> 1073\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_getitem_axis\u001b[49m\u001b[43m(\u001b[49m\u001b[43mmaybe_callable\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43maxis\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43maxis\u001b[49m\u001b[43m)\u001b[49m\n", - "File \u001b[0;32m/usr/share/miniconda/envs/open-machine-learning-jupyter-book/lib/python3.9/site-packages/pandas/core/indexing.py:1290\u001b[0m, in \u001b[0;36m_LocIndexer._getitem_axis\u001b[0;34m(self, key, axis)\u001b[0m\n\u001b[1;32m 1288\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28misinstance\u001b[39m(key, \u001b[38;5;28mslice\u001b[39m):\n\u001b[1;32m 1289\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_validate_key(key, axis)\n\u001b[0;32m-> 1290\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_get_slice_axis\u001b[49m\u001b[43m(\u001b[49m\u001b[43mkey\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43maxis\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43maxis\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 1291\u001b[0m \u001b[38;5;28;01melif\u001b[39;00m com\u001b[38;5;241m.\u001b[39mis_bool_indexer(key):\n\u001b[1;32m 1292\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_getbool_axis(key, axis\u001b[38;5;241m=\u001b[39maxis)\n", - "File \u001b[0;32m/usr/share/miniconda/envs/open-machine-learning-jupyter-book/lib/python3.9/site-packages/pandas/core/indexing.py:1324\u001b[0m, in \u001b[0;36m_LocIndexer._get_slice_axis\u001b[0;34m(self, slice_obj, axis)\u001b[0m\n\u001b[1;32m 1321\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m obj\u001b[38;5;241m.\u001b[39mcopy(deep\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mFalse\u001b[39;00m)\n\u001b[1;32m 1323\u001b[0m labels \u001b[38;5;241m=\u001b[39m obj\u001b[38;5;241m.\u001b[39m_get_axis(axis)\n\u001b[0;32m-> 1324\u001b[0m indexer \u001b[38;5;241m=\u001b[39m \u001b[43mlabels\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mslice_indexer\u001b[49m\u001b[43m(\u001b[49m\u001b[43mslice_obj\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mstart\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mslice_obj\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mstop\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mslice_obj\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mstep\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 1326\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28misinstance\u001b[39m(indexer, \u001b[38;5;28mslice\u001b[39m):\n\u001b[1;32m 1327\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mobj\u001b[38;5;241m.\u001b[39m_slice(indexer, axis\u001b[38;5;241m=\u001b[39maxis)\n", - "File \u001b[0;32m/usr/share/miniconda/envs/open-machine-learning-jupyter-book/lib/python3.9/site-packages/pandas/core/indexes/datetimes.py:809\u001b[0m, in \u001b[0;36mDatetimeIndex.slice_indexer\u001b[0;34m(self, start, end, step, kind)\u001b[0m\n\u001b[1;32m 801\u001b[0m \u001b[38;5;66;03m# GH#33146 if start and end are combinations of str and None and Index is not\u001b[39;00m\n\u001b[1;32m 802\u001b[0m \u001b[38;5;66;03m# monotonic, we can not use Index.slice_indexer because it does not honor the\u001b[39;00m\n\u001b[1;32m 803\u001b[0m \u001b[38;5;66;03m# actual elements, is only searching for start and end\u001b[39;00m\n\u001b[1;32m 804\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m (\n\u001b[1;32m 805\u001b[0m check_str_or_none(start)\n\u001b[1;32m 806\u001b[0m \u001b[38;5;129;01mor\u001b[39;00m check_str_or_none(end)\n\u001b[1;32m 807\u001b[0m \u001b[38;5;129;01mor\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mis_monotonic_increasing\n\u001b[1;32m 808\u001b[0m ):\n\u001b[0;32m--> 809\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43mIndex\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mslice_indexer\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mstart\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mend\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mstep\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mkind\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mkind\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 811\u001b[0m mask \u001b[38;5;241m=\u001b[39m np\u001b[38;5;241m.\u001b[39marray(\u001b[38;5;28;01mTrue\u001b[39;00m)\n\u001b[1;32m 812\u001b[0m deprecation_mask \u001b[38;5;241m=\u001b[39m np\u001b[38;5;241m.\u001b[39marray(\u001b[38;5;28;01mTrue\u001b[39;00m)\n", - "File \u001b[0;32m/usr/share/miniconda/envs/open-machine-learning-jupyter-book/lib/python3.9/site-packages/pandas/core/indexes/base.py:6602\u001b[0m, in \u001b[0;36mIndex.slice_indexer\u001b[0;34m(self, start, end, step, kind)\u001b[0m\n\u001b[1;32m 6559\u001b[0m \u001b[38;5;250m\u001b[39m\u001b[38;5;124;03m\"\"\"\u001b[39;00m\n\u001b[1;32m 6560\u001b[0m \u001b[38;5;124;03mCompute the slice indexer for input labels and step.\u001b[39;00m\n\u001b[1;32m 6561\u001b[0m \n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 6598\u001b[0m \u001b[38;5;124;03mslice(1, 3, None)\u001b[39;00m\n\u001b[1;32m 6599\u001b[0m \u001b[38;5;124;03m\"\"\"\u001b[39;00m\n\u001b[1;32m 6600\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_deprecated_arg(kind, \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mkind\u001b[39m\u001b[38;5;124m\"\u001b[39m, \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mslice_indexer\u001b[39m\u001b[38;5;124m\"\u001b[39m)\n\u001b[0;32m-> 6602\u001b[0m start_slice, end_slice \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mslice_locs\u001b[49m\u001b[43m(\u001b[49m\u001b[43mstart\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mend\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mstep\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mstep\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 6604\u001b[0m \u001b[38;5;66;03m# return a slice\u001b[39;00m\n\u001b[1;32m 6605\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m is_scalar(start_slice):\n", - "File \u001b[0;32m/usr/share/miniconda/envs/open-machine-learning-jupyter-book/lib/python3.9/site-packages/pandas/core/indexes/base.py:6810\u001b[0m, in \u001b[0;36mIndex.slice_locs\u001b[0;34m(self, start, end, step, kind)\u001b[0m\n\u001b[1;32m 6808\u001b[0m start_slice \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;01mNone\u001b[39;00m\n\u001b[1;32m 6809\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m start \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n\u001b[0;32m-> 6810\u001b[0m start_slice \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mget_slice_bound\u001b[49m\u001b[43m(\u001b[49m\u001b[43mstart\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mleft\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m)\u001b[49m\n\u001b[1;32m 6811\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m start_slice \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n\u001b[1;32m 6812\u001b[0m start_slice \u001b[38;5;241m=\u001b[39m \u001b[38;5;241m0\u001b[39m\n", - "File \u001b[0;32m/usr/share/miniconda/envs/open-machine-learning-jupyter-book/lib/python3.9/site-packages/pandas/core/indexes/base.py:6719\u001b[0m, in \u001b[0;36mIndex.get_slice_bound\u001b[0;34m(self, label, side, kind)\u001b[0m\n\u001b[1;32m 6715\u001b[0m original_label \u001b[38;5;241m=\u001b[39m label\n\u001b[1;32m 6717\u001b[0m \u001b[38;5;66;03m# For datetime indices label may be a string that has to be converted\u001b[39;00m\n\u001b[1;32m 6718\u001b[0m \u001b[38;5;66;03m# to datetime boundary according to its resolution.\u001b[39;00m\n\u001b[0;32m-> 6719\u001b[0m label \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_maybe_cast_slice_bound\u001b[49m\u001b[43m(\u001b[49m\u001b[43mlabel\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mside\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 6721\u001b[0m \u001b[38;5;66;03m# we need to look up the label\u001b[39;00m\n\u001b[1;32m 6722\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n", - "File \u001b[0;32m/usr/share/miniconda/envs/open-machine-learning-jupyter-book/lib/python3.9/site-packages/pandas/core/indexes/datetimes.py:767\u001b[0m, in \u001b[0;36mDatetimeIndex._maybe_cast_slice_bound\u001b[0;34m(self, label, side, kind)\u001b[0m\n\u001b[1;32m 762\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28misinstance\u001b[39m(label, date) \u001b[38;5;129;01mand\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28misinstance\u001b[39m(label, datetime):\n\u001b[1;32m 763\u001b[0m \u001b[38;5;66;03m# Pandas supports slicing with dates, treated as datetimes at midnight.\u001b[39;00m\n\u001b[1;32m 764\u001b[0m \u001b[38;5;66;03m# https://github.com/pandas-dev/pandas/issues/31501\u001b[39;00m\n\u001b[1;32m 765\u001b[0m label \u001b[38;5;241m=\u001b[39m Timestamp(label)\u001b[38;5;241m.\u001b[39mto_pydatetime()\n\u001b[0;32m--> 767\u001b[0m label \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43msuper\u001b[39;49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_maybe_cast_slice_bound\u001b[49m\u001b[43m(\u001b[49m\u001b[43mlabel\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mside\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mkind\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mkind\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 768\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_deprecate_mismatched_indexing(label)\n\u001b[1;32m 769\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_maybe_cast_for_get_loc(label)\n", - "File \u001b[0;32m/usr/share/miniconda/envs/open-machine-learning-jupyter-book/lib/python3.9/site-packages/pandas/core/indexes/datetimelike.py:320\u001b[0m, in \u001b[0;36mDatetimeIndexOpsMixin._maybe_cast_slice_bound\u001b[0;34m(self, label, side, kind)\u001b[0m\n\u001b[1;32m 318\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m lower \u001b[38;5;28;01mif\u001b[39;00m side \u001b[38;5;241m==\u001b[39m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mleft\u001b[39m\u001b[38;5;124m\"\u001b[39m \u001b[38;5;28;01melse\u001b[39;00m upper\n\u001b[1;32m 319\u001b[0m \u001b[38;5;28;01melif\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28misinstance\u001b[39m(label, \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_data\u001b[38;5;241m.\u001b[39m_recognized_scalars):\n\u001b[0;32m--> 320\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_invalid_indexer(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mslice\u001b[39m\u001b[38;5;124m\"\u001b[39m, label)\n\u001b[1;32m 322\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m label\n", - "\u001b[0;31mTypeError\u001b[0m: cannot do slice indexing on DatetimeIndex with these indexers [2] of type int" - ] - } - ], - "source": [ - "dfl.loc[2:3]" - ] - }, - { - "cell_type": "markdown", - "id": "7e510c3a", - "metadata": {}, - "source": [ - "```{warning}\n", - "String likes in slicing can be convertible to the type of the index and lead to natural slicing.\n", - "```\n", - "\n", - "```\n", - "dfl.loc['20130102':'20130104']\n", - "```\n", - "\n", - "
\n", - "
\n", - "

Let's visualize it! 🎥

\n", - "
\n", - " \n", - "
\n", - "
\n", - "
\n", - "\n", - "```{warning}\n", - "Pandas will raise a `KeyError` if indexing with a list with missing labels.\n", - "```\n", - "\n", - "Pandas provides a suite of methods in order to have **purely label-based indexing**. This is a strict inclusion-based protocol. Every label asked for must be in the index, or a `KeyError` will be raised. When slicing, both the start bound **AND** the stop bound are included, if present in the index. Integers are valid labels, but they refer to the label **and not the position**.\n", - "\n", - "- The `.loc` attribute is the primary access method. The following are valid inputs:\n", - "\n", - "- A single label, e.g. `5` or `'a'` (Note that `5` is interpreted as a label of the index. This use is not an integer position along the index.).\n", - "\n", - "- A list or array of labels `['a', 'b', 'c']`.\n", - "\n", - "- A slice object with labels `'a':'f'` (Note that contrary to usual Python slices, both the start and the stop are included, when present in the index!\n", - "\n", - "- A boolean array.\n", - "\n", - "- A `callable`.\n", - "\n", - "```\n", - "s1 = pd.Series(np.random.randn(6), index=list('abcdef'))\n", - "s1\n", - "s1.loc['c':]\n", - "```\n", - "\n", - "
\n", - "
\n", - "

Let's visualize it! 🎥

\n", - "
\n", - " \n", - "
\n", - "
\n", - "
\n", - "\n", - "```\n", - "s1.loc['b']\n", - "```\n", - "\n", - "
\n", - "
\n", - "

Let's visualize it! 🎥

\n", - "
\n", - " \n", - "
\n", - "
\n", - "
\n", - "\n", - "Note that the setting works as well:\n", - "\n", - "```\n", - "s1.loc['c':] = 0\n", - "s1\n", - "```\n", - "\n", - "
\n", - "
\n", - "

Let's visualize it! 🎥

\n", - "
\n", - " \n", - "
\n", - "
\n", - "
\n", - "\n", - "With a DataFrame:\n", - "\n", - "```\n", - "df1 = pd.DataFrame(np.random.randn(6, 4),\n", - " index=list('abcdef'),\n", - " columns=list('ABCD'))\n", - "df1\n", - "df1.loc[['a', 'b', 'd'], :]\n", - "```\n", - "\n", - "
\n", - "
\n", - "

Let's visualize it! 🎥

\n", - "
\n", - " \n", - "
\n", - "
\n", - "
\n", - "\n", - "Accessing via label slices:\n", - "\n", - "```\n", - "df1.loc['d':, 'A':'C']\n", - "```\n", - "\n", - "
\n", - "
\n", - "

Let's visualize it! 🎥

\n", - "
\n", - " \n", - "
\n", - "
\n", - "
\n", - "\n", - "For getting a cross-section using a label (equivalent to `df.xs('a')`):\n", - "\n", - "```\n", - "df1.loc['a']\n", - "```\n", - "\n", - "
\n", - "
\n", - "

Let's visualize it! 🎥

\n", - "
\n", - " \n", - "
\n", - "
\n", - "
\n", - "\n", - "\n", - "For getting values with a boolean array:\n", - "\n", - "```\n", - "df1.loc['a'] > 0\n", - "```\n", - "\n", - "
\n", - "
\n", - "

Let's visualize it! 🎥

\n", - "
\n", - " \n", - "
\n", - "
\n", - "
\n", - "\n", - "```\n", - "df1.loc[:, df1.loc['a'] > 0]\n", - "```\n", - "\n", - "
\n", - "
\n", - "

Let's visualize it! 🎥

\n", - "
\n", - " \n", - "
\n", - "
\n", - "
\n", - "\n", - "\n", - "\n", - "NA values in a boolean array propagate as `False`:" - ] - }, - { - "cell_type": "code", - "execution_count": 128, - "id": "e4dfb504", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "\n", - "[True, False, True, False, , False]\n", - "Length: 6, dtype: boolean" - ] - }, - "execution_count": 128, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "mask = pd.array([True, False, True, False, pd.NA, False], dtype=\"boolean\")\n", - "mask" - ] - }, - { - "cell_type": "markdown", - "id": "7ac29ebb", - "metadata": {}, - "source": [ - "```\n", - "df1[mask]\n", - "```\n", - "\n", - "
\n", - "
\n", - "

Let's visualize it! 🎥

\n", - "
\n", - " \n", - "
\n", - "
\n", - "
\n", - "\n", - "For getting a value explicitly:\n", - "\n", - "```\n", - "df1.loc['a', 'A'] # this is also equivalent to ``df1.at['a','A']``\n", - "```\n", - "\n", - "\n", - "
\n", - "
\n", - "

Let's visualize it! 🎥

\n", - "
\n", - " \n", - "
\n", - "
\n", - "
\n", - "\n", - "#### Slicing with labels\n", - "\n", - "When using `.loc` with slices, if both the start and the stop labels are present in the index, then elements located between the two (including them) are returned:\n", - "\n", - "```\n", - "s = pd.Series(list('abcde'), index=[0, 3, 2, 5, 4])\n", - "s.loc[3:5]\n", - "```\n", - "\n", - "
\n", - "
\n", - "

Let's visualize it! 🎥

\n", - "
\n", - " \n", - "
\n", - "
\n", - "
\n", - "\n", - "\n", - "If at least one of the two is absent, but the index is sorted, and can be compared against start and stop labels, then slicing will still work as expected, by selecting labels which rank between the two:\n", - "\n", - "```\n", - "s.sort_index()\n", - "```\n", - "\n", - "
\n", - "
\n", - "

Let's visualize it! 🎥

\n", - "
\n", - " \n", - "
\n", - "
\n", - "
\n", - "\n", - "```\n", - "s.sort_index().loc[1:6]\n", - "```\n", - "\n", - "
\n", - "
\n", - "

Let's visualize it! 🎥

\n", - "
\n", - " \n", - "
\n", - "
\n", - "
\n", - "\n", - "However, if at least one of the two is absent and the index is not sorted, an error will be raised (since doing otherwise would be computationally expensive, as well as potentially ambiguous for mixed-type indexes). For instance, in the above example, `s.loc[1:6]` would raise `KeyError`.\n", - "\n", - "```\n", - "s = pd.Series(list('abcdef'), index=[0, 3, 2, 5, 4, 2])\n", - "s.loc[3:5]\n", - "```\n", - "\n", - "
\n", - "
\n", - "

Let's visualize it! 🎥

\n", - "
\n", - " \n", - "
\n", - "
\n", - "
\n", - "\n", - "Also, if the index has duplicate labels and either the start or the stop label is duplicated, an error will be raised. For instance, in the above example, `s.loc[2:5]` would raise a `KeyError`.\n", - "\n", - "### Selection by position\n", - "\n", - "```{warning}\n", - "Whether a copy or a reference is returned for a setting operation, may depend on the context. This is sometimes called `chained assignment` and should be avoided.\n", - "```\n", - "\n", - "Pandas provides a suite of methods in order to get purely integer-based indexing. The semantics follow closely Python and NumPy slicing. These are 0-based indexing. When slicing, the start bound is included, while the upper bound is excluded. Trying to use a non-integer, even a valid label will raise an `IndexError`.\n", - "\n", - "The `.iloc` attribute is the primary access method. The following are valid inputs:\n", - "\n", - "- An integer e.g. `5`.\n", - "\n", - "- A list or array of integers `[4, 3, 0]`.\n", - "\n", - "- A slice object with ints `1:7`.\n", - "\n", - "- A boolean array.\n", - "\n", - "- A `callable`.\n", - "\n", - "```\n", - "s1 = pd.Series(np.random.randn(5), index=list(range(0, 10, 2)))\n", - "s1\n", - "s1.iloc[:3]\n", - "```\n", - "\n", - "
\n", - "
\n", - "

Let's visualize it! 🎥

\n", - "
\n", - " \n", - "
\n", - "
\n", - "
\n", - "\n", - "```\n", - "s1.iloc[3]\n", - "```\n", - "\n", - "
\n", - "
\n", - "

Let's visualize it! 🎥

\n", - "
\n", - " \n", - "
\n", - "
\n", - "
\n", - "\n", - "Note that setting works as well:\n", - "\n", - "```\n", - "s1.iloc[:3] = 0\n", - "s1\n", - "```\n", - "\n", - "
\n", - "
\n", - "

Let's visualize it! 🎥

\n", - "
\n", - " \n", - "
\n", - "
\n", - "
\n", - "\n", - "With a DataFrame,Select via integer slicing:\n", - "\n", - "```\n", - "df1 = pd.DataFrame(np.random.randn(6, 4),\n", - " index=list(range(0, 12, 2)),\n", - " columns=list(range(0, 8, 2)))\n", - "df1\n", - "df1.iloc[:3]\n", - "```\n", - "\n", - "
\n", - "
\n", - "

Let's visualize it! 🎥

\n", - "
\n", - " \n", - "
\n", - "
\n", - "
\n", - "\n", - "\n", - "```\n", - "df1.iloc[1:5, 2:4]\n", - "```\n", - "\n", - "
\n", - "
\n", - "

Let's visualize it! 🎥

\n", - "
\n", - " \n", - "
\n", - "
\n", - "
\n", - "\n", - "Select via integer list:\n", - "\n", - "```\n", - "df1.iloc[[1, 3, 5], [1, 3]]\n", - "```\n", - "\n", - "
\n", - "
\n", - "

Let's visualize it! 🎥

\n", - "
\n", - " \n", - "
\n", - "
\n", - "
\n", - "\n", - "```\n", - "df1.iloc[1:3, :]\n", - "```\n", - "\n", - "
\n", - "
\n", - "

Let's visualize it! 🎥

\n", - "
\n", - " \n", - "
\n", - "
\n", - "
\n", - "\n", - "```\n", - "df1.iloc[:, 1:3]\n", - "```\n", - "\n", - "
\n", - "
\n", - "

Let's visualize it! 🎥

\n", - "
\n", - " \n", - "
\n", - "
\n", - "
\n", - "\n", - "```\n", - "df1.iloc[1, 1] # this is also equivalent to ``df1.iat[1,1]``\n", - "```\n", - "\n", - "
\n", - "
\n", - "

Let's visualize it! 🎥

\n", - "
\n", - " \n", - "
\n", - "
\n", - "
\n", - "\n", - "For getting a cross-section using an integer position (equiv to `df.xs(1)`):\n", - "\n", - "```\n", - "df1.iloc[1]\n", - "```\n", - "\n", - "
\n", - "
\n", - "

Let's visualize it! 🎥

\n", - "
\n", - " \n", - "
\n", - "
\n", - "
\n", - "\n", - "Out-of-range slice indexes are handled gracefully just as in Python/NumPy." - ] - }, - { - "cell_type": "code", - "execution_count": 129, - "id": "5ae4f102", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "['a', 'b', 'c', 'd', 'e', 'f']" - ] - }, - "execution_count": 129, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "x = list('abcdef') # these are allowed in Python/NumPy.\n", - "x" - ] - }, - { - "cell_type": "code", - "execution_count": 130, - "id": "7bd7a10d", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "['e', 'f']" - ] - }, - "execution_count": 130, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "x[4:10]" - ] - }, - { - "cell_type": "code", - "execution_count": 131, - "id": "ad3080d1", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "[]" - ] - }, - "execution_count": 131, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "x[8:10]" - ] - }, - { - "cell_type": "code", - "execution_count": 132, - "id": "e867bb76", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "0 a\n", - "1 b\n", - "2 c\n", - "3 d\n", - "4 e\n", - "5 f\n", - "dtype: object" - ] - }, - "execution_count": 132, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "s = pd.Series(x)\n", - "s" - ] - }, - { - "cell_type": "markdown", - "id": "af6e7b98", - "metadata": {}, - "source": [ - "```\n", - "s.iloc[4:10]\n", - "```\n", - "\n", - "
\n", - "
\n", - "

Let's visualize it! 🎥

\n", - "
\n", - " \n", - "
\n", - "
\n", - "
" - ] - }, - { - "cell_type": "code", - "execution_count": 133, - "id": "8a35458d", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "Series([], dtype: object)" - ] - }, - "execution_count": 133, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "s.iloc[8:10]" - ] - }, - { - "cell_type": "markdown", - "id": "b8e6a3c1", - "metadata": {}, - "source": [ - "Note that using slices that go out of bounds can result in an empty axis (e.g. an empty DataFrame being returned)." - ] - }, - { - "cell_type": "code", - "execution_count": 134, - "id": "25e335a7", - "metadata": {}, - "outputs": [], - "source": [ - "dfl = pd.DataFrame(np.random.randn(5, 2), columns=list('AB'))" - ] - }, - { - "cell_type": "markdown", - "id": "e7495804", - "metadata": {}, - "source": [ - "```\n", - "dfl.iloc[:, 2:3]\n", - "```\n", - "\n", - "
\n", - "
\n", - "

Let's visualize it! 🎥

\n", - "
\n", - " \n", - "
\n", - "
\n", - "
\n", - "\n", - "```\n", - "dfl.iloc[:, 1:3]\n", - "```\n", - "\n", - "
\n", - "
\n", - "

Let's visualize it! 🎥

\n", - "
\n", - " \n", - "
\n", - "
\n", - "
\n", - "\n", - "```\n", - "dfl.iloc[4:6]\n", - "```\n", - "\n", - "
\n", - "
\n", - "

Let's visualize it! 🎥

\n", - "
\n", - " \n", - "
\n", - "
\n", - "
\n", - "\n", - "A single indexer that is out of bounds will raise an `IndexError`. A list of indexers where any element is out of bounds will raise an `IndexError`." - ] - }, - { - "cell_type": "code", - "execution_count": 135, - "id": "53fc3ae2", - "metadata": { - "tags": [ - "raises-exception" - ] - }, - "outputs": [ - { - "ename": "IndexError", - "evalue": "positional indexers are out-of-bounds", - "output_type": "error", - "traceback": [ - "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", - "\u001b[0;31mIndexError\u001b[0m Traceback (most recent call last)", - "File \u001b[0;32m/usr/share/miniconda/envs/open-machine-learning-jupyter-book/lib/python3.9/site-packages/pandas/core/indexing.py:1587\u001b[0m, in \u001b[0;36m_iLocIndexer._get_list_axis\u001b[0;34m(self, key, axis)\u001b[0m\n\u001b[1;32m 1586\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[0;32m-> 1587\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mobj\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_take_with_is_copy\u001b[49m\u001b[43m(\u001b[49m\u001b[43mkey\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43maxis\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43maxis\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 1588\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m \u001b[38;5;167;01mIndexError\u001b[39;00m \u001b[38;5;28;01mas\u001b[39;00m err:\n\u001b[1;32m 1589\u001b[0m \u001b[38;5;66;03m# re-raise with different error message\u001b[39;00m\n", - "File \u001b[0;32m/usr/share/miniconda/envs/open-machine-learning-jupyter-book/lib/python3.9/site-packages/pandas/core/generic.py:3902\u001b[0m, in \u001b[0;36mNDFrame._take_with_is_copy\u001b[0;34m(self, indices, axis)\u001b[0m\n\u001b[1;32m 3895\u001b[0m \u001b[38;5;250m\u001b[39m\u001b[38;5;124;03m\"\"\"\u001b[39;00m\n\u001b[1;32m 3896\u001b[0m \u001b[38;5;124;03mInternal version of the `take` method that sets the `_is_copy`\u001b[39;00m\n\u001b[1;32m 3897\u001b[0m \u001b[38;5;124;03mattribute to keep track of the parent dataframe (using in indexing\u001b[39;00m\n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 3900\u001b[0m \u001b[38;5;124;03mSee the docstring of `take` for full explanation of the parameters.\u001b[39;00m\n\u001b[1;32m 3901\u001b[0m \u001b[38;5;124;03m\"\"\"\u001b[39;00m\n\u001b[0;32m-> 3902\u001b[0m result \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_take\u001b[49m\u001b[43m(\u001b[49m\u001b[43mindices\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mindices\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43maxis\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43maxis\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 3903\u001b[0m \u001b[38;5;66;03m# Maybe set copy if we didn't actually change the index.\u001b[39;00m\n", - "File \u001b[0;32m/usr/share/miniconda/envs/open-machine-learning-jupyter-book/lib/python3.9/site-packages/pandas/core/generic.py:3886\u001b[0m, in \u001b[0;36mNDFrame._take\u001b[0;34m(self, indices, axis, convert_indices)\u001b[0m\n\u001b[1;32m 3884\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_consolidate_inplace()\n\u001b[0;32m-> 3886\u001b[0m new_data \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_mgr\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mtake\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m 3887\u001b[0m \u001b[43m \u001b[49m\u001b[43mindices\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 3888\u001b[0m \u001b[43m \u001b[49m\u001b[43maxis\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_get_block_manager_axis\u001b[49m\u001b[43m(\u001b[49m\u001b[43maxis\u001b[49m\u001b[43m)\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 3889\u001b[0m \u001b[43m \u001b[49m\u001b[43mverify\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43;01mTrue\u001b[39;49;00m\u001b[43m,\u001b[49m\n\u001b[1;32m 3890\u001b[0m \u001b[43m \u001b[49m\u001b[43mconvert_indices\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mconvert_indices\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 3891\u001b[0m \u001b[43m\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 3892\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_constructor(new_data)\u001b[38;5;241m.\u001b[39m__finalize__(\u001b[38;5;28mself\u001b[39m, method\u001b[38;5;241m=\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mtake\u001b[39m\u001b[38;5;124m\"\u001b[39m)\n", - "File \u001b[0;32m/usr/share/miniconda/envs/open-machine-learning-jupyter-book/lib/python3.9/site-packages/pandas/core/internals/managers.py:977\u001b[0m, in \u001b[0;36mBaseBlockManager.take\u001b[0;34m(self, indexer, axis, verify, convert_indices)\u001b[0m\n\u001b[1;32m 976\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m convert_indices:\n\u001b[0;32m--> 977\u001b[0m indexer \u001b[38;5;241m=\u001b[39m \u001b[43mmaybe_convert_indices\u001b[49m\u001b[43m(\u001b[49m\u001b[43mindexer\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mn\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mverify\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mverify\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 979\u001b[0m new_labels \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39maxes[axis]\u001b[38;5;241m.\u001b[39mtake(indexer)\n", - "File \u001b[0;32m/usr/share/miniconda/envs/open-machine-learning-jupyter-book/lib/python3.9/site-packages/pandas/core/indexers/utils.py:286\u001b[0m, in \u001b[0;36mmaybe_convert_indices\u001b[0;34m(indices, n, verify)\u001b[0m\n\u001b[1;32m 285\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m mask\u001b[38;5;241m.\u001b[39many():\n\u001b[0;32m--> 286\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mIndexError\u001b[39;00m(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mindices are out-of-bounds\u001b[39m\u001b[38;5;124m\"\u001b[39m)\n\u001b[1;32m 287\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m indices\n", - "\u001b[0;31mIndexError\u001b[0m: indices are out-of-bounds", - "\nThe above exception was the direct cause of the following exception:\n", - "\u001b[0;31mIndexError\u001b[0m Traceback (most recent call last)", - "Cell \u001b[0;32mIn[135], line 1\u001b[0m\n\u001b[0;32m----> 1\u001b[0m \u001b[43mdfl\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43miloc\u001b[49m\u001b[43m[\u001b[49m\u001b[43m[\u001b[49m\u001b[38;5;241;43m4\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m5\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m6\u001b[39;49m\u001b[43m]\u001b[49m\u001b[43m]\u001b[49m\n", - "File \u001b[0;32m/usr/share/miniconda/envs/open-machine-learning-jupyter-book/lib/python3.9/site-packages/pandas/core/indexing.py:1073\u001b[0m, in \u001b[0;36m_LocationIndexer.__getitem__\u001b[0;34m(self, key)\u001b[0m\n\u001b[1;32m 1070\u001b[0m axis \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39maxis \u001b[38;5;129;01mor\u001b[39;00m \u001b[38;5;241m0\u001b[39m\n\u001b[1;32m 1072\u001b[0m maybe_callable \u001b[38;5;241m=\u001b[39m com\u001b[38;5;241m.\u001b[39mapply_if_callable(key, \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mobj)\n\u001b[0;32m-> 1073\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_getitem_axis\u001b[49m\u001b[43m(\u001b[49m\u001b[43mmaybe_callable\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43maxis\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43maxis\u001b[49m\u001b[43m)\u001b[49m\n", - "File \u001b[0;32m/usr/share/miniconda/envs/open-machine-learning-jupyter-book/lib/python3.9/site-packages/pandas/core/indexing.py:1616\u001b[0m, in \u001b[0;36m_iLocIndexer._getitem_axis\u001b[0;34m(self, key, axis)\u001b[0m\n\u001b[1;32m 1614\u001b[0m \u001b[38;5;66;03m# a list of integers\u001b[39;00m\n\u001b[1;32m 1615\u001b[0m \u001b[38;5;28;01melif\u001b[39;00m is_list_like_indexer(key):\n\u001b[0;32m-> 1616\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_get_list_axis\u001b[49m\u001b[43m(\u001b[49m\u001b[43mkey\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43maxis\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43maxis\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 1618\u001b[0m \u001b[38;5;66;03m# a single integer\u001b[39;00m\n\u001b[1;32m 1619\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[1;32m 1620\u001b[0m key \u001b[38;5;241m=\u001b[39m item_from_zerodim(key)\n", - "File \u001b[0;32m/usr/share/miniconda/envs/open-machine-learning-jupyter-book/lib/python3.9/site-packages/pandas/core/indexing.py:1590\u001b[0m, in \u001b[0;36m_iLocIndexer._get_list_axis\u001b[0;34m(self, key, axis)\u001b[0m\n\u001b[1;32m 1587\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mobj\u001b[38;5;241m.\u001b[39m_take_with_is_copy(key, axis\u001b[38;5;241m=\u001b[39maxis)\n\u001b[1;32m 1588\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m \u001b[38;5;167;01mIndexError\u001b[39;00m \u001b[38;5;28;01mas\u001b[39;00m err:\n\u001b[1;32m 1589\u001b[0m \u001b[38;5;66;03m# re-raise with different error message\u001b[39;00m\n\u001b[0;32m-> 1590\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mIndexError\u001b[39;00m(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mpositional indexers are out-of-bounds\u001b[39m\u001b[38;5;124m\"\u001b[39m) \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01merr\u001b[39;00m\n", - "\u001b[0;31mIndexError\u001b[0m: positional indexers are out-of-bounds" - ] - } - ], - "source": [ - "dfl.iloc[[4, 5, 6]]" - ] - }, - { - "cell_type": "code", - "execution_count": 136, - "id": "5e7fcb6a", - "metadata": { - "tags": [ - "raises-exception" - ] - }, - "outputs": [ - { - "ename": "IndexError", - "evalue": "single positional indexer is out-of-bounds", - "output_type": "error", - "traceback": [ - "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", - "\u001b[0;31mIndexError\u001b[0m Traceback (most recent call last)", - "Cell \u001b[0;32mIn[136], line 1\u001b[0m\n\u001b[0;32m----> 1\u001b[0m \u001b[43mdfl\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43miloc\u001b[49m\u001b[43m[\u001b[49m\u001b[43m:\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m4\u001b[39;49m\u001b[43m]\u001b[49m\n", - "File \u001b[0;32m/usr/share/miniconda/envs/open-machine-learning-jupyter-book/lib/python3.9/site-packages/pandas/core/indexing.py:1067\u001b[0m, in \u001b[0;36m_LocationIndexer.__getitem__\u001b[0;34m(self, key)\u001b[0m\n\u001b[1;32m 1065\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_is_scalar_access(key):\n\u001b[1;32m 1066\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mobj\u001b[38;5;241m.\u001b[39m_get_value(\u001b[38;5;241m*\u001b[39mkey, takeable\u001b[38;5;241m=\u001b[39m\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_takeable)\n\u001b[0;32m-> 1067\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_getitem_tuple\u001b[49m\u001b[43m(\u001b[49m\u001b[43mkey\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 1068\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[1;32m 1069\u001b[0m \u001b[38;5;66;03m# we by definition only have the 0th axis\u001b[39;00m\n\u001b[1;32m 1070\u001b[0m axis \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39maxis \u001b[38;5;129;01mor\u001b[39;00m \u001b[38;5;241m0\u001b[39m\n", - "File \u001b[0;32m/usr/share/miniconda/envs/open-machine-learning-jupyter-book/lib/python3.9/site-packages/pandas/core/indexing.py:1563\u001b[0m, in \u001b[0;36m_iLocIndexer._getitem_tuple\u001b[0;34m(self, tup)\u001b[0m\n\u001b[1;32m 1561\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21m_getitem_tuple\u001b[39m(\u001b[38;5;28mself\u001b[39m, tup: \u001b[38;5;28mtuple\u001b[39m):\n\u001b[0;32m-> 1563\u001b[0m tup \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_validate_tuple_indexer\u001b[49m\u001b[43m(\u001b[49m\u001b[43mtup\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 1564\u001b[0m \u001b[38;5;28;01mwith\u001b[39;00m suppress(IndexingError):\n\u001b[1;32m 1565\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_getitem_lowerdim(tup)\n", - "File \u001b[0;32m/usr/share/miniconda/envs/open-machine-learning-jupyter-book/lib/python3.9/site-packages/pandas/core/indexing.py:873\u001b[0m, in \u001b[0;36m_LocationIndexer._validate_tuple_indexer\u001b[0;34m(self, key)\u001b[0m\n\u001b[1;32m 871\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m i, k \u001b[38;5;129;01min\u001b[39;00m \u001b[38;5;28menumerate\u001b[39m(key):\n\u001b[1;32m 872\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[0;32m--> 873\u001b[0m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_validate_key\u001b[49m\u001b[43m(\u001b[49m\u001b[43mk\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mi\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 874\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m \u001b[38;5;167;01mValueError\u001b[39;00m \u001b[38;5;28;01mas\u001b[39;00m err:\n\u001b[1;32m 875\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mValueError\u001b[39;00m(\n\u001b[1;32m 876\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mLocation based indexing can only have \u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 877\u001b[0m \u001b[38;5;124mf\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124m[\u001b[39m\u001b[38;5;132;01m{\u001b[39;00m\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_valid_types\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m] types\u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 878\u001b[0m ) \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01merr\u001b[39;00m\n", - "File \u001b[0;32m/usr/share/miniconda/envs/open-machine-learning-jupyter-book/lib/python3.9/site-packages/pandas/core/indexing.py:1466\u001b[0m, in \u001b[0;36m_iLocIndexer._validate_key\u001b[0;34m(self, key, axis)\u001b[0m\n\u001b[1;32m 1464\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m\n\u001b[1;32m 1465\u001b[0m \u001b[38;5;28;01melif\u001b[39;00m is_integer(key):\n\u001b[0;32m-> 1466\u001b[0m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_validate_integer\u001b[49m\u001b[43m(\u001b[49m\u001b[43mkey\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43maxis\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 1467\u001b[0m \u001b[38;5;28;01melif\u001b[39;00m \u001b[38;5;28misinstance\u001b[39m(key, \u001b[38;5;28mtuple\u001b[39m):\n\u001b[1;32m 1468\u001b[0m \u001b[38;5;66;03m# a tuple should already have been caught by this point\u001b[39;00m\n\u001b[1;32m 1469\u001b[0m \u001b[38;5;66;03m# so don't treat a tuple as a valid indexer\u001b[39;00m\n\u001b[1;32m 1470\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m IndexingError(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mToo many indexers\u001b[39m\u001b[38;5;124m\"\u001b[39m)\n", - "File \u001b[0;32m/usr/share/miniconda/envs/open-machine-learning-jupyter-book/lib/python3.9/site-packages/pandas/core/indexing.py:1557\u001b[0m, in \u001b[0;36m_iLocIndexer._validate_integer\u001b[0;34m(self, key, axis)\u001b[0m\n\u001b[1;32m 1555\u001b[0m len_axis \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mlen\u001b[39m(\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mobj\u001b[38;5;241m.\u001b[39m_get_axis(axis))\n\u001b[1;32m 1556\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m key \u001b[38;5;241m>\u001b[39m\u001b[38;5;241m=\u001b[39m len_axis \u001b[38;5;129;01mor\u001b[39;00m key \u001b[38;5;241m<\u001b[39m \u001b[38;5;241m-\u001b[39mlen_axis:\n\u001b[0;32m-> 1557\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mIndexError\u001b[39;00m(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124msingle positional indexer is out-of-bounds\u001b[39m\u001b[38;5;124m\"\u001b[39m)\n", - "\u001b[0;31mIndexError\u001b[0m: single positional indexer is out-of-bounds" - ] - } - ], - "source": [ - "dfl.iloc[:, 4]" - ] - }, - { - "cell_type": "markdown", - "id": "892741d4", - "metadata": {}, - "source": [ - "### Selection by callable\n", - "\n", - "`.loc`, `.iloc`, and also `[]` indexing can accept a `callable` as indexer. The `callable` must be a function with one argument (the calling Series or DataFrame) that returns valid output for indexing.\n", - "\n", - "\n", - "```\n", - "df1 = pd.DataFrame(np.random.randn(6, 4),\n", - " index=list('abcdef'),\n", - " columns=list('ABCD'))\n", - "df1\n", - "df1.loc[lambda df: df['A'] > 0, :]\n", - "```\n", - "\n", - "
\n", - "
\n", - "

Let's visualize it! 🎥

\n", - "
\n", - " \n", - "
\n", - "
\n", - "
\n", - "\n", - "```\n", - "df1.loc[:, lambda df: ['A', 'B']]\n", - "```\n", - "\n", - "
\n", - "
\n", - "

Let's visualize it! 🎥

\n", - "
\n", - " \n", - "
\n", - "
\n", - "
\n", - "\n", - "```\n", - "df1.iloc[:, lambda df: [0, 1]]\n", - "```\n", - "\n", - "
\n", - "
\n", - "

Let's visualize it! 🎥

\n", - "
\n", - " \n", - "
\n", - "
\n", - "
\n", - "\n", - "```\n", - "df1[lambda df: df.columns[0]]\n", - "```\n", - "\n", - "
\n", - "
\n", - "

Let's visualize it! 🎥

\n", - "
\n", - " \n", - "
\n", - "
\n", - "
\n", - "\n", - "You can use callable indexing in `Series`.\n", - "\n", - "```\n", - "df1['A'].loc[lambda s: s > 0]\n", - "```\n", - "\n", - "
\n", - "
\n", - "

Let's visualize it! 🎥

\n", - "
\n", - " \n", - "
\n", - "
\n", - "
\n", - "\n", - "### Combining positional and label-based indexing\n", - "\n", - "If you wish to get the 0th and the 2nd elements from the index in the `'A'` column, you can do:\n", - "\n", - "```\n", - "dfd = pd.DataFrame({'A': [1, 2, 3],\n", - " 'B': [4, 5, 6]},\n", - " index=list('abc'))\n", - "dfd\n", - "dfd.loc[dfd.index[[0, 2]], 'A']\n", - "```\n", - "\n", - "
\n", - "
\n", - "

Let's visualize it! 🎥

\n", - "
\n", - " \n", - "
\n", - "
\n", - "
\n", - "\n", - "This can also be expressed using `.iloc`, by explicitly getting locations on the indexers, and using positional indexing to select things.\n", - "\n", - "```\n", - "dfd.iloc[[0, 2], dfd.columns.get_loc('A')]\n", - "```\n", - "\n", - "
\n", - "
\n", - "

Let's visualize it! 🎥

\n", - "
\n", - " \n", - "
\n", - "
\n", - "
\n", - "\n", - "For getting multiple indexers, using `.get_indexer`:\n", - "\n", - "```\n", - "dfd.iloc[[0, 2], dfd.columns.get_indexer(['A', 'B'])]\n", - "```\n", - "\n", - "
\n", - "
\n", - "

Let's visualize it! 🎥

\n", - "
\n", - " \n", - "
\n", - "
\n", - "
\n", - "\n", - "## Combining datasets: concat, merge and join\n", - "\n", - "### concat\n", - "\n", - "- Concatenate Pandas objects along a particular axis.\n", - "\n", - "- Allows optional set logic along the other axes.\n", - "\n", - "- Can also add a layer of hierarchical indexing on the concatenation axis, which may be useful if the labels are the same (or overlapping) on the passed axis number.\n", - "\n", - "For example:\n", - "\n", - "Combine two `Series`." - ] - }, - { - "cell_type": "code", - "execution_count": 137, - "id": "b7d161ac", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "0 a\n", - "1 b\n", - "0 c\n", - "1 d\n", - "dtype: object" - ] - }, - "execution_count": 137, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "s1 = pd.Series(['a', 'b'])\n", - "s2 = pd.Series(['c', 'd'])\n", - "pd.concat([s1, s2])" - ] - }, - { - "cell_type": "markdown", - "id": "536e63da", - "metadata": {}, - "source": [ - "Clear the existing index and reset it in the result by setting the `ignore_index` option to `True`." - ] - }, - { - "cell_type": "code", - "execution_count": 138, - "id": "719d8cb5", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "0 a\n", - "1 b\n", - "2 c\n", - "3 d\n", - "dtype: object" - ] - }, - "execution_count": 138, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "pd.concat([s1, s2], ignore_index=True)" - ] - }, - { - "cell_type": "markdown", - "id": "84bf44f8", - "metadata": {}, - "source": [ - "Add a hierarchical index at the outermost level of the data with the `keys` option." - ] - }, - { - "cell_type": "code", - "execution_count": 139, - "id": "5cb97b32", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "s1 0 a\n", - " 1 b\n", - "s2 0 c\n", - " 1 d\n", - "dtype: object" - ] - }, - "execution_count": 139, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "pd.concat([s1, s2], keys=['s1', 's2'])" - ] - }, - { - "cell_type": "markdown", - "id": "5ca9c583", - "metadata": {}, - "source": [ - "Label the index keys you create with the `names` option." - ] - }, - { - "cell_type": "code", - "execution_count": 140, - "id": "30495b2a", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "Series name Row ID\n", - "s1 0 a\n", - " 1 b\n", - "s2 0 c\n", - " 1 d\n", - "dtype: object" - ] - }, - "execution_count": 140, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "pd.concat([s1, s2], keys=['s1', 's2'],\n", - " names=['Series name', 'Row ID'])" - ] - }, - { - "cell_type": "markdown", - "id": "14f306df", - "metadata": {}, - "source": [ - "Combine two `DataFrame` objects with identical columns." - ] - }, - { - "cell_type": "code", - "execution_count": 141, - "id": "ad1562dc", - "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", - "
letternumber
0a1
1b2
\n", - "
" - ], - "text/plain": [ - " letter number\n", - "0 a 1\n", - "1 b 2" - ] - }, - "execution_count": 141, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "df1 = pd.DataFrame([['a', 1], ['b', 2]],\n", - " columns=['letter', 'number'])\n", - "df1" - ] - }, - { - "cell_type": "code", - "execution_count": 142, - "id": "32c10016", - "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", - "
letternumber
0c3
1d4
\n", - "
" - ], - "text/plain": [ - " letter number\n", - "0 c 3\n", - "1 d 4" - ] - }, - "execution_count": 142, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "df2 = pd.DataFrame([['c', 3], ['d', 4]],\n", - " columns=['letter', 'number'])\n", - "df2" - ] - }, - { - "cell_type": "code", - "execution_count": 143, - "id": "9f2bcc6b", - "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", - "
letternumber
0a1
1b2
0c3
1d4
\n", - "
" - ], - "text/plain": [ - " letter number\n", - "0 a 1\n", - "1 b 2\n", - "0 c 3\n", - "1 d 4" - ] - }, - "execution_count": 143, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "pd.concat([df1, df2])" - ] - }, - { - "cell_type": "markdown", - "id": "1388bff8", - "metadata": {}, - "source": [ - "Combine `DataFrame` objects with overlapping columns and return everything. Columns outside the intersection will be filled with `NaN` values." - ] - }, - { - "cell_type": "code", - "execution_count": 144, - "id": "1af4bd95", - "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", - "
letternumberanimal
0c3cat
1d4dog
\n", - "
" - ], - "text/plain": [ - " letter number animal\n", - "0 c 3 cat\n", - "1 d 4 dog" - ] - }, - "execution_count": 144, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "df3 = pd.DataFrame([['c', 3, 'cat'], ['d', 4, 'dog']],\n", - " columns=['letter', 'number', 'animal'])\n", - "df3" - ] - }, - { - "cell_type": "code", - "execution_count": 145, - "id": "f35f5d58", - "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", - "
letternumberanimal
0a1NaN
1b2NaN
0c3cat
1d4dog
\n", - "
" - ], - "text/plain": [ - " letter number animal\n", - "0 a 1 NaN\n", - "1 b 2 NaN\n", - "0 c 3 cat\n", - "1 d 4 dog" - ] - }, - "execution_count": 145, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "pd.concat([df1, df3], sort=False)" - ] - }, - { - "cell_type": "markdown", - "id": "c6d49897", - "metadata": {}, - "source": [ - "Combine DataFrame objects with overlapping columns and return only those that are shared by passing inner to the join keyword argument." - ] - }, - { - "cell_type": "code", - "execution_count": 146, - "id": "7c70e2ea", - "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", - "
letternumber
0a1
1b2
0c3
1d4
\n", - "
" - ], - "text/plain": [ - " letter number\n", - "0 a 1\n", - "1 b 2\n", - "0 c 3\n", - "1 d 4" - ] - }, - "execution_count": 146, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "pd.concat([df1, df3], join=\"inner\")" - ] - }, - { - "cell_type": "markdown", - "id": "c2bef60d", - "metadata": {}, - "source": [ - "Combine `DataFrame` objects horizontally along the x-axis by passing in `axis=1`." - ] - }, - { - "cell_type": "code", - "execution_count": 147, - "id": "f0415db2", - "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", - "
letternumberanimalname
0a1birdpolly
1b2monkeygeorge
\n", - "
" - ], - "text/plain": [ - " letter number animal name\n", - "0 a 1 bird polly\n", - "1 b 2 monkey george" - ] - }, - "execution_count": 147, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "df4 = pd.DataFrame([['bird', 'polly'], ['monkey', 'george']],\n", - " columns=['animal', 'name'])\n", - "pd.concat([df1, df4], axis=1)" - ] - }, - { - "cell_type": "markdown", - "id": "e6542c8a", - "metadata": {}, - "source": [ - "Prevent the result from including duplicate index values with the `verify_integrity` option." - ] - }, - { - "cell_type": "code", - "execution_count": 148, - "id": "09bd4fc6", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
0
a1
\n", - "
" - ], - "text/plain": [ - " 0\n", - "a 1" - ] - }, - "execution_count": 148, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "df5 = pd.DataFrame([1], index=['a'])\n", - "df5" - ] - }, - { - "cell_type": "code", - "execution_count": 149, - "id": "6de38271", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
0
a2
\n", - "
" - ], - "text/plain": [ - " 0\n", - "a 2" - ] - }, - "execution_count": 149, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "df6 = pd.DataFrame([2], index=['a'])\n", - "df6" - ] - }, - { - "cell_type": "code", - "execution_count": 150, - "id": "ef259211", - "metadata": { - "tags": [ - "raises-exception" - ] - }, - "outputs": [ - { - "ename": "ValueError", - "evalue": "Indexes have overlapping values: Index(['a'], dtype='object')", - "output_type": "error", - "traceback": [ - "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", - "\u001b[0;31mValueError\u001b[0m Traceback (most recent call last)", - "Cell \u001b[0;32mIn[150], line 1\u001b[0m\n\u001b[0;32m----> 1\u001b[0m \u001b[43mpd\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mconcat\u001b[49m\u001b[43m(\u001b[49m\u001b[43m[\u001b[49m\u001b[43mdf5\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mdf6\u001b[49m\u001b[43m]\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mverify_integrity\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43;01mTrue\u001b[39;49;00m\u001b[43m)\u001b[49m\n", - "File \u001b[0;32m/usr/share/miniconda/envs/open-machine-learning-jupyter-book/lib/python3.9/site-packages/pandas/util/_decorators.py:331\u001b[0m, in \u001b[0;36mdeprecate_nonkeyword_arguments..decorate..wrapper\u001b[0;34m(*args, **kwargs)\u001b[0m\n\u001b[1;32m 325\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mlen\u001b[39m(args) \u001b[38;5;241m>\u001b[39m num_allow_args:\n\u001b[1;32m 326\u001b[0m warnings\u001b[38;5;241m.\u001b[39mwarn(\n\u001b[1;32m 327\u001b[0m msg\u001b[38;5;241m.\u001b[39mformat(arguments\u001b[38;5;241m=\u001b[39m_format_argument_list(allow_args)),\n\u001b[1;32m 328\u001b[0m \u001b[38;5;167;01mFutureWarning\u001b[39;00m,\n\u001b[1;32m 329\u001b[0m stacklevel\u001b[38;5;241m=\u001b[39mfind_stack_level(),\n\u001b[1;32m 330\u001b[0m )\n\u001b[0;32m--> 331\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43mfunc\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43margs\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkwargs\u001b[49m\u001b[43m)\u001b[49m\n", - "File \u001b[0;32m/usr/share/miniconda/envs/open-machine-learning-jupyter-book/lib/python3.9/site-packages/pandas/core/reshape/concat.py:368\u001b[0m, in \u001b[0;36mconcat\u001b[0;34m(objs, axis, join, ignore_index, keys, levels, names, verify_integrity, sort, copy)\u001b[0m\n\u001b[1;32m 146\u001b[0m \u001b[38;5;129m@deprecate_nonkeyword_arguments\u001b[39m(version\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mNone\u001b[39;00m, allowed_args\u001b[38;5;241m=\u001b[39m[\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mobjs\u001b[39m\u001b[38;5;124m\"\u001b[39m])\n\u001b[1;32m 147\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mconcat\u001b[39m(\n\u001b[1;32m 148\u001b[0m objs: Iterable[NDFrame] \u001b[38;5;241m|\u001b[39m Mapping[HashableT, NDFrame],\n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 157\u001b[0m copy: \u001b[38;5;28mbool\u001b[39m \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;01mTrue\u001b[39;00m,\n\u001b[1;32m 158\u001b[0m ) \u001b[38;5;241m-\u001b[39m\u001b[38;5;241m>\u001b[39m DataFrame \u001b[38;5;241m|\u001b[39m Series:\n\u001b[1;32m 159\u001b[0m \u001b[38;5;250m \u001b[39m\u001b[38;5;124;03m\"\"\"\u001b[39;00m\n\u001b[1;32m 160\u001b[0m \u001b[38;5;124;03m Concatenate pandas objects along a particular axis.\u001b[39;00m\n\u001b[1;32m 161\u001b[0m \n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 366\u001b[0m \u001b[38;5;124;03m 1 3 4\u001b[39;00m\n\u001b[1;32m 367\u001b[0m \u001b[38;5;124;03m \"\"\"\u001b[39;00m\n\u001b[0;32m--> 368\u001b[0m op \u001b[38;5;241m=\u001b[39m \u001b[43m_Concatenator\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m 369\u001b[0m \u001b[43m \u001b[49m\u001b[43mobjs\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 370\u001b[0m \u001b[43m \u001b[49m\u001b[43maxis\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43maxis\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 371\u001b[0m \u001b[43m \u001b[49m\u001b[43mignore_index\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mignore_index\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 372\u001b[0m \u001b[43m \u001b[49m\u001b[43mjoin\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mjoin\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 373\u001b[0m \u001b[43m \u001b[49m\u001b[43mkeys\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mkeys\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 374\u001b[0m \u001b[43m \u001b[49m\u001b[43mlevels\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mlevels\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 375\u001b[0m \u001b[43m \u001b[49m\u001b[43mnames\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mnames\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 376\u001b[0m \u001b[43m \u001b[49m\u001b[43mverify_integrity\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mverify_integrity\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 377\u001b[0m \u001b[43m \u001b[49m\u001b[43mcopy\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mcopy\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 378\u001b[0m \u001b[43m \u001b[49m\u001b[43msort\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43msort\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 379\u001b[0m \u001b[43m \u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 381\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m op\u001b[38;5;241m.\u001b[39mget_result()\n", - "File \u001b[0;32m/usr/share/miniconda/envs/open-machine-learning-jupyter-book/lib/python3.9/site-packages/pandas/core/reshape/concat.py:563\u001b[0m, in \u001b[0;36m_Concatenator.__init__\u001b[0;34m(self, objs, axis, join, keys, levels, names, ignore_index, verify_integrity, copy, sort)\u001b[0m\n\u001b[1;32m 560\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mverify_integrity \u001b[38;5;241m=\u001b[39m verify_integrity\n\u001b[1;32m 561\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mcopy \u001b[38;5;241m=\u001b[39m copy\n\u001b[0;32m--> 563\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mnew_axes \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_get_new_axes\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\n", - "File \u001b[0;32m/usr/share/miniconda/envs/open-machine-learning-jupyter-book/lib/python3.9/site-packages/pandas/core/reshape/concat.py:633\u001b[0m, in \u001b[0;36m_Concatenator._get_new_axes\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 631\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21m_get_new_axes\u001b[39m(\u001b[38;5;28mself\u001b[39m) \u001b[38;5;241m-\u001b[39m\u001b[38;5;241m>\u001b[39m \u001b[38;5;28mlist\u001b[39m[Index]:\n\u001b[1;32m 632\u001b[0m ndim \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_get_result_dim()\n\u001b[0;32m--> 633\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m [\n\u001b[1;32m 634\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_get_concat_axis \u001b[38;5;28;01mif\u001b[39;00m i \u001b[38;5;241m==\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mbm_axis \u001b[38;5;28;01melse\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_get_comb_axis(i)\n\u001b[1;32m 635\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m i \u001b[38;5;129;01min\u001b[39;00m \u001b[38;5;28mrange\u001b[39m(ndim)\n\u001b[1;32m 636\u001b[0m ]\n", - "File \u001b[0;32m/usr/share/miniconda/envs/open-machine-learning-jupyter-book/lib/python3.9/site-packages/pandas/core/reshape/concat.py:634\u001b[0m, in \u001b[0;36m\u001b[0;34m(.0)\u001b[0m\n\u001b[1;32m 631\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21m_get_new_axes\u001b[39m(\u001b[38;5;28mself\u001b[39m) \u001b[38;5;241m-\u001b[39m\u001b[38;5;241m>\u001b[39m \u001b[38;5;28mlist\u001b[39m[Index]:\n\u001b[1;32m 632\u001b[0m ndim \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_get_result_dim()\n\u001b[1;32m 633\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m [\n\u001b[0;32m--> 634\u001b[0m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_get_concat_axis\u001b[49m \u001b[38;5;28;01mif\u001b[39;00m i \u001b[38;5;241m==\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mbm_axis \u001b[38;5;28;01melse\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_get_comb_axis(i)\n\u001b[1;32m 635\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m i \u001b[38;5;129;01min\u001b[39;00m \u001b[38;5;28mrange\u001b[39m(ndim)\n\u001b[1;32m 636\u001b[0m ]\n", - "File \u001b[0;32m/usr/share/miniconda/envs/open-machine-learning-jupyter-book/lib/python3.9/site-packages/pandas/_libs/properties.pyx:36\u001b[0m, in \u001b[0;36mpandas._libs.properties.CachedProperty.__get__\u001b[0;34m()\u001b[0m\n", - "File \u001b[0;32m/usr/share/miniconda/envs/open-machine-learning-jupyter-book/lib/python3.9/site-packages/pandas/core/reshape/concat.py:697\u001b[0m, in \u001b[0;36m_Concatenator._get_concat_axis\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 692\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[1;32m 693\u001b[0m concat_axis \u001b[38;5;241m=\u001b[39m _make_concat_multiindex(\n\u001b[1;32m 694\u001b[0m indexes, \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mkeys, \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mlevels, \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mnames\n\u001b[1;32m 695\u001b[0m )\n\u001b[0;32m--> 697\u001b[0m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_maybe_check_integrity\u001b[49m\u001b[43m(\u001b[49m\u001b[43mconcat_axis\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 699\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m concat_axis\n", - "File \u001b[0;32m/usr/share/miniconda/envs/open-machine-learning-jupyter-book/lib/python3.9/site-packages/pandas/core/reshape/concat.py:705\u001b[0m, in \u001b[0;36m_Concatenator._maybe_check_integrity\u001b[0;34m(self, concat_index)\u001b[0m\n\u001b[1;32m 703\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m concat_index\u001b[38;5;241m.\u001b[39mis_unique:\n\u001b[1;32m 704\u001b[0m overlap \u001b[38;5;241m=\u001b[39m concat_index[concat_index\u001b[38;5;241m.\u001b[39mduplicated()]\u001b[38;5;241m.\u001b[39munique()\n\u001b[0;32m--> 705\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mValueError\u001b[39;00m(\u001b[38;5;124mf\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mIndexes have overlapping values: \u001b[39m\u001b[38;5;132;01m{\u001b[39;00moverlap\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m\"\u001b[39m)\n", - "\u001b[0;31mValueError\u001b[0m: Indexes have overlapping values: Index(['a'], dtype='object')" - ] - } - ], - "source": [ - "pd.concat([df5, df6], verify_integrity=True)" - ] - }, - { - "cell_type": "markdown", - "id": "f4fec58f", - "metadata": {}, - "source": [ - " \n", - "Append a single row to the end of a `DataFrame` object." - ] - }, - { - "cell_type": "code", - "execution_count": 151, - "id": "ae1083e5", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
ab
012
\n", - "
" - ], - "text/plain": [ - " a b\n", - "0 1 2" - ] - }, - "execution_count": 151, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "df7 = pd.DataFrame({'a': 1, 'b': 2}, index=[0])\n", - "df7" - ] - }, - { - "cell_type": "code", - "execution_count": 152, - "id": "c0b7743e", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "a 3\n", - "b 4\n", - "dtype: int64" - ] - }, - "execution_count": 152, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "new_row = pd.Series({'a': 3, 'b': 4})\n", - "new_row" - ] - }, - { - "cell_type": "code", - "execution_count": 153, - "id": "860d7a02", - "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", - "
ab
012
134
\n", - "
" - ], - "text/plain": [ - " a b\n", - "0 1 2\n", - "1 3 4" - ] - }, - "execution_count": 153, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "pd.concat([df7, new_row.to_frame().T], ignore_index=True)" - ] - }, - { - "cell_type": "markdown", - "id": "d6000108", - "metadata": {}, - "source": [ - "```{note}\n", - "`append()` has been deprecated since version 1.4.0: Use `concat()` instead. \n", - "```\n", - "\n", - "### merge\n", - "\n", - "- Merge DataFrame or named Series objects with a database-style join.\n", - "\n", - "- A named Series object is treated as a DataFrame with a single named column.\n", - "\n", - "- The join is done on columns or indexes. If joining columns on columns, the DataFrame indexes will be ignored. Otherwise if joining indexes on indexes or indexes on a column or columns, the index will be passed on. When performing a cross-merge, no column specifications to merge on are allowed.\n", - "\n", - "```{warning}\n", - "If both key columns contain rows where the key is a null value, those rows will be matched against each other. This is different from usual SQL join behaviour and can lead to unexpected results.\n", - "```\n", - "\n", - "For example:\n", - "\n", - "```python\n", - "df1 = pd.DataFrame({'lkey': ['foo', 'bar', 'baz', 'foo'],\n", - " 'value': [1, 2, 3, 5]})\n", - "df2 = pd.DataFrame({'rkey': ['foo', 'bar', 'baz', 'foo'],\n", - " 'value': [5, 6, 7, 8]})\n", - "```\n", - "\n", - "Merge DataFrames `df1` and `df2` with specified left and right suffixes appended to any overlapping columns.\n", - "\n", - "```\n", - "df1.merge(df2, left_on='lkey', right_on='rkey', suffixes=('_left', '_right'))\n", - "```\n", - "\n", - "
\n", - "
\n", - "

Let's visualize it! 🎥

\n", - "
\n", - " \n", - "
\n", - "
\n", - "
\n", - "\n", - "Merge DataFrames `df1` and `df2`, but raise an exception if the DataFrames have any overlapping columns." - ] - }, - { - "cell_type": "code", - "execution_count": 154, - "id": "e237ef6a", - "metadata": { - "tags": [ - "raises-exception" - ] - }, - "outputs": [ - { - "ename": "KeyError", - "evalue": "'rkey'", - "output_type": "error", - "traceback": [ - "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", - "\u001b[0;31mKeyError\u001b[0m Traceback (most recent call last)", - "\u001b[0;32m/tmp/ipykernel_6653/726409595.py\u001b[0m in \u001b[0;36m?\u001b[0;34m()\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0mdf1\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mmerge\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mdf2\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mleft_on\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;34m'lkey'\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mright_on\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;34m'rkey'\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0msuffixes\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;32mFalse\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;32mFalse\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;32m/usr/share/miniconda/envs/open-machine-learning-jupyter-book/lib/python3.9/site-packages/pandas/core/frame.py\u001b[0m in \u001b[0;36m?\u001b[0;34m(self, right, how, on, left_on, right_on, left_index, right_index, sort, suffixes, copy, indicator, validate)\u001b[0m\n\u001b[1;32m 10086\u001b[0m \u001b[0mvalidate\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0mstr\u001b[0m \u001b[0;34m|\u001b[0m \u001b[0;32mNone\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;32mNone\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 10087\u001b[0m ) -> DataFrame:\n\u001b[1;32m 10088\u001b[0m \u001b[0;32mfrom\u001b[0m \u001b[0mpandas\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mcore\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mreshape\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mmerge\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0mmerge\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 10089\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m> 10090\u001b[0;31m return merge(\n\u001b[0m\u001b[1;32m 10091\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 10092\u001b[0m \u001b[0mright\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 10093\u001b[0m \u001b[0mhow\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mhow\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;32m/usr/share/miniconda/envs/open-machine-learning-jupyter-book/lib/python3.9/site-packages/pandas/core/reshape/merge.py\u001b[0m in \u001b[0;36m?\u001b[0;34m(left, right, how, on, left_on, right_on, left_index, right_index, sort, suffixes, copy, indicator, validate)\u001b[0m\n\u001b[1;32m 106\u001b[0m \u001b[0mcopy\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0mbool\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;32mTrue\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 107\u001b[0m \u001b[0mindicator\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0mbool\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;32mFalse\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 108\u001b[0m \u001b[0mvalidate\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0mstr\u001b[0m \u001b[0;34m|\u001b[0m \u001b[0;32mNone\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;32mNone\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 109\u001b[0m ) -> DataFrame:\n\u001b[0;32m--> 110\u001b[0;31m op = _MergeOperation(\n\u001b[0m\u001b[1;32m 111\u001b[0m \u001b[0mleft\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 112\u001b[0m \u001b[0mright\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 113\u001b[0m \u001b[0mhow\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mhow\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;32m/usr/share/miniconda/envs/open-machine-learning-jupyter-book/lib/python3.9/site-packages/pandas/core/reshape/merge.py\u001b[0m in \u001b[0;36m?\u001b[0;34m(self, left, right, how, on, left_on, right_on, axis, left_index, right_index, sort, suffixes, indicator, validate)\u001b[0m\n\u001b[1;32m 699\u001b[0m (\n\u001b[1;32m 700\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mleft_join_keys\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 701\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mright_join_keys\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 702\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mjoin_names\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 703\u001b[0;31m ) = self._get_merge_keys()\n\u001b[0m\u001b[1;32m 704\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 705\u001b[0m \u001b[0;31m# validate the merge keys dtypes. We may need to coerce\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 706\u001b[0m \u001b[0;31m# to avoid incompatible dtypes\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;32m/usr/share/miniconda/envs/open-machine-learning-jupyter-book/lib/python3.9/site-packages/pandas/core/reshape/merge.py\u001b[0m in \u001b[0;36m?\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 1158\u001b[0m \u001b[0;31m# Then we're either Hashable or a wrong-length arraylike,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1159\u001b[0m \u001b[0;31m# the latter of which will raise\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1160\u001b[0m \u001b[0mrk\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mcast\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mHashable\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mrk\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1161\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mrk\u001b[0m \u001b[0;32mis\u001b[0m \u001b[0;32mnot\u001b[0m \u001b[0;32mNone\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 1162\u001b[0;31m \u001b[0mright_keys\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mappend\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mright\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_get_label_or_level_values\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mrk\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[1;32m 1163\u001b[0m \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1164\u001b[0m \u001b[0;31m# work-around for merge_asof(right_index=True)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1165\u001b[0m \u001b[0mright_keys\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mappend\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mright\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mindex\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;32m/usr/share/miniconda/envs/open-machine-learning-jupyter-book/lib/python3.9/site-packages/pandas/core/generic.py\u001b[0m in \u001b[0;36m?\u001b[0;34m(self, key, axis)\u001b[0m\n\u001b[1;32m 1846\u001b[0m \u001b[0;34m.\u001b[0m\u001b[0mget_level_values\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mkey\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;31m# type: ignore[assignment]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1847\u001b[0m \u001b[0;34m.\u001b[0m\u001b[0m_values\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1848\u001b[0m )\n\u001b[1;32m 1849\u001b[0m \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 1850\u001b[0;31m \u001b[0;32mraise\u001b[0m \u001b[0mKeyError\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mkey\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 1851\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1852\u001b[0m \u001b[0;31m# Check for duplicates\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1853\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mvalues\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mndim\u001b[0m \u001b[0;34m>\u001b[0m \u001b[0;36m1\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;31mKeyError\u001b[0m: 'rkey'" - ] - } - ], - "source": [ - "df1.merge(df2, left_on='lkey', right_on='rkey', suffixes=(False, False))" - ] - }, - { - "cell_type": "markdown", - "id": "0f46efe6", - "metadata": {}, - "source": [ - "Using `how` parameter decide the type of merge to be performed.\n", - "\n", - "```\n", - "df1 = pd.DataFrame({'a': ['foo', 'bar'], 'b': [1, 2]})\n", - "df2 = pd.DataFrame({'a': ['foo', 'baz'], 'c': [3, 4]})\n", - "```\n", - "\n", - "```\n", - "df1.merge(df2, how='inner', on='a')\n", - "```\n", - "\n", - "
\n", - "
\n", - "

Let's visualize it! 🎥

\n", - "
\n", - " \n", - "
\n", - "
\n", - "
\n", - "\n", - "```\n", - "df1.merge(df2, how='left', on='a')\n", - "```\n", - "\n", - "
\n", - "
\n", - "

Let's visualize it! 🎥

\n", - "
\n", - " \n", - "
\n", - "
\n", - "
\n", - "\n", - "```\n", - "df1 = pd.DataFrame({'left': ['foo', 'bar']})\n", - "df2 = pd.DataFrame({'right': [7, 8]})\n", - "```\n", - "\n", - "```\n", - "df1.merge(df2, how='cross')\n", - "```\n", - "\n", - "
\n", - "
\n", - "

Let's visualize it! 🎥

\n", - "
\n", - " \n", - "
\n", - "
\n", - "
\n", - "\n", - "### join\n", - "\n", - "- Join columns of another DataFrame.\n", - "\n", - "- Join columns with other DataFrame either on index or on a key column. Efficiently join multiple DataFrame objects by index at once by passing a list.\n", - "\n", - "For example:" - ] - }, - { - "cell_type": "code", - "execution_count": 155, - "id": "52237d77", - "metadata": {}, - "outputs": [], - "source": [ - "df = pd.DataFrame({'key': ['K0', 'K1', 'K2', 'K3', 'K4', 'K5'],\n", - " 'A': ['A0', 'A1', 'A2', 'A3', 'A4', 'A5']})" - ] - }, - { - "cell_type": "code", - "execution_count": 156, - "id": "38af83f6", - "metadata": {}, - "outputs": [], - "source": [ - "other = pd.DataFrame({'key': ['K0', 'K1', 'K2'],\n", - " 'B': ['B0', 'B1', 'B2']}) " - ] - }, - { - "cell_type": "markdown", - "id": "23b3b619", - "metadata": {}, - "source": [ - "Join DataFrames using their indexes.\n", - "\n", - "```\n", - "df.join(other, lsuffix='_caller', rsuffix='_other')\n", - "```\n", - "\n", - "
\n", - "
\n", - "

Let's visualize it! 🎥

\n", - "
\n", - " \n", - "
\n", - "
\n", - "
\n", - "\n", - "If we want to join using the `key` columns, we need to set `key` to be the index in both `df` and `other`. The joined DataFrame will have `key` as its index.\n", - "\n", - "```\n", - "df.set_index('key').join(other.set_index('key'))\n", - "```\n", - "\n", - "
\n", - "
\n", - "

Let's visualize it! 🎥

\n", - "
\n", - " \n", - "
\n", - "
\n", - "
\n", - "\n", - "Another option to join using the key columns is to use the `on` parameter. `DataFrame.join` always uses `other`’s index but we can use any column in `df`. This method preserves the original DataFrame’s index in the result." - ] - }, - { - "cell_type": "code", - "execution_count": 157, - "id": "8232481e", - "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", - "
keyAB
0K0A0B0
1K1A1B1
2K2A2B2
3K3A3NaN
4K4A4NaN
5K5A5NaN
\n", - "
" - ], - "text/plain": [ - " key A B\n", - "0 K0 A0 B0\n", - "1 K1 A1 B1\n", - "2 K2 A2 B2\n", - "3 K3 A3 NaN\n", - "4 K4 A4 NaN\n", - "5 K5 A5 NaN" - ] - }, - "execution_count": 157, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "df.join(other.set_index('key'), on='key')" - ] - }, - { - "cell_type": "markdown", - "id": "70ccf148", - "metadata": {}, - "source": [ - "Using non-unique key values shows how they are matched." - ] - }, - { - "cell_type": "code", - "execution_count": 158, - "id": "f3000f44", - "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", - "
keyA
0K0A0
1K1A1
2K1A2
3K3A3
4K0A4
5K1A5
\n", - "
" - ], - "text/plain": [ - " key A\n", - "0 K0 A0\n", - "1 K1 A1\n", - "2 K1 A2\n", - "3 K3 A3\n", - "4 K0 A4\n", - "5 K1 A5" - ] - }, - "execution_count": 158, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "df = pd.DataFrame({'key': ['K0', 'K1', 'K1', 'K3', 'K0', 'K1'],\n", - " 'A': ['A0', 'A1', 'A2', 'A3', 'A4', 'A5']})\n", - "df " - ] - }, - { - "cell_type": "code", - "execution_count": 159, - "id": "2cd10ae6", - "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", - "
keyAB
0K0A0B0
1K1A1B1
2K1A2B1
3K3A3NaN
4K0A4B0
5K1A5B1
\n", - "
" - ], - "text/plain": [ - " key A B\n", - "0 K0 A0 B0\n", - "1 K1 A1 B1\n", - "2 K1 A2 B1\n", - "3 K3 A3 NaN\n", - "4 K0 A4 B0\n", - "5 K1 A5 B1" - ] - }, - "execution_count": 159, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "df.join(other.set_index('key'), on='key', validate='m:1')" - ] - }, - { - "cell_type": "markdown", - "id": "346abc67", - "metadata": {}, - "source": [ - "## Aggregation and grouping\n", - "\n", - "Group `DataFrame` using a mapper or by a `Series` of columns.\n", - "\n", - "A `groupby` operation involves some combination of splitting the object, applying a function, and combining the results. This can be used to group large amounts of data and compute operations on these groups.\n", - "\n", - "For example:\n", - "\n", - "```\n", - "df = pd.DataFrame({'Animal': ['Falcon', 'Falcon',\n", - " 'Parrot', 'Parrot'],\n", - " 'Max Speed': [380., 370., 24., 26.]})\n", - "df\n", - "df.groupby(['Animal']).mean()\n", - "```\n", - "\n", - "
\n", - "
\n", - "

Let's visualize it! 🎥

\n", - "
\n", - " \n", - "
\n", - "
\n", - "
\n", - "\n", - "### Hierarchical Indexes\n", - "\n", - "#################\n", - "\n", - "We can `groupby` different levels of a hierarchical index using the `level` parameter:\n", - "\n", - "```\n", - "arrays = [['Falcon', 'Falcon', 'Parrot', 'Parrot'],\n", - " ['Captive', 'Wild', 'Captive', 'Wild']]\n", - "index = pd.MultiIndex.from_arrays(arrays, names=('Animal', 'Type'))\n", - "df = pd.DataFrame({'Max Speed': [390., 350., 30., 20.]},\n", - " index=index)\n", - "df.groupby(level=0).mean()\n", - "```\n", - "\n", - "
\n", - "
\n", - "

Let's visualize it! 🎥

\n", - "
\n", - " \n", - "
\n", - "
\n", - "
\n", - "\n", - "```\n", - "df.groupby(level=\"Type\").mean()\n", - "```\n", - "\n", - "
\n", - "
\n", - "

Let's visualize it! 🎥

\n", - "
\n", - " \n", - "
\n", - "
\n", - "
\n", - "\n", - "We can also choose to include NA in group keys or not by setting `dropna` parameter, the default setting is `True`.\n", - "\n", - "```\n", - "l = [[1, 2, 3], [1, None, 4], [2, 1, 3], [1, 2, 2]]\n", - "df = pd.DataFrame(l, columns=[\"a\", \"b\", \"c\"])\n", - "df.groupby(by=[\"b\"]).sum()\n", - "```\n", - "\n", - "
\n", - "
\n", - "

Let's visualize it! 🎥

\n", - "
\n", - " \n", - "
\n", - "
\n", - "
\n", - "\n", - "```\n", - "df.groupby(by=[\"b\"], dropna=False).sum()\n", - "```\n", - "\n", - "
\n", - "
\n", - "

Let's visualize it! 🎥

\n", - "
\n", - " \n", - "
\n", - "
\n", - "
\n", - "\n", - "```\n", - "l = [[\"a\", 12, 12], [None, 12.3, 33.], [\"b\", 12.3, 123], [\"a\", 1, 1]]\n", - "df = pd.DataFrame(l, columns=[\"a\", \"b\", \"c\"])\n", - "df.groupby(by=\"a\").sum()\n", - "```\n", - "\n", - "
\n", - "
\n", - "

Let's visualize it! 🎥

\n", - "
\n", - " \n", - "
\n", - "
\n", - "
\n", - "\n", - "```\n", - "df.groupby(by=\"a\", dropna=False).sum()\n", - "```\n", - "\n", - "
\n", - "
\n", - "

Let's visualize it! 🎥

\n", - "
\n", - " \n", - "
\n", - "
\n", - "
\n", - "\n", - "When using `.apply()`, use `group_keys` to include or exclude the group keys. The `group_keys` argument defaults to `True` (include)." - ] - }, - { - "cell_type": "code", - "execution_count": 160, - "id": "46cac163", - "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", - "
AnimalMax Speed
Animal
Falcon0Falcon380.0
1Falcon370.0
Parrot2Parrot24.0
3Parrot26.0
\n", - "
" - ], - "text/plain": [ - " Animal Max Speed\n", - "Animal \n", - "Falcon 0 Falcon 380.0\n", - " 1 Falcon 370.0\n", - "Parrot 2 Parrot 24.0\n", - " 3 Parrot 26.0" - ] - }, - "execution_count": 160, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "df = pd.DataFrame({'Animal': ['Falcon', 'Falcon',\n", - " 'Parrot', 'Parrot'],\n", - " 'Max Speed': [380., 370., 24., 26.]})\n", - "df.groupby(\"Animal\", group_keys=True).apply(lambda x: x)" - ] - }, - { - "cell_type": "code", - "execution_count": 161, - "id": "d3f22d0d", - "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", - "
AnimalMax Speed
0Falcon380.0
1Falcon370.0
2Parrot24.0
3Parrot26.0
\n", - "
" - ], - "text/plain": [ - " Animal Max Speed\n", - "0 Falcon 380.0\n", - "1 Falcon 370.0\n", - "2 Parrot 24.0\n", - "3 Parrot 26.0" - ] - }, - "execution_count": 161, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "df.groupby(\"Animal\", group_keys=False).apply(lambda x: x)" - ] - }, - { - "cell_type": "markdown", - "id": "c82dc361", - "metadata": {}, - "source": [ - "## Pivot table\n", - "\n", - "Create a spreadsheet-style pivot table as a DataFrame.\n", - "\n", - "The levels in the pivot table will be stored in MultiIndex objects (hierarchical indexes) on the index and columns of the result DataFrame." - ] - }, - { - "cell_type": "code", - "execution_count": 162, - "id": "1bf04bb7", - "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", - "
ABCDE
0fooonesmall12
1fooonelarge24
2fooonelarge25
3footwosmall35
4footwosmall36
5baronelarge46
6baronesmall58
7bartwosmall69
8bartwolarge79
\n", - "
" - ], - "text/plain": [ - " A B C D E\n", - "0 foo one small 1 2\n", - "1 foo one large 2 4\n", - "2 foo one large 2 5\n", - "3 foo two small 3 5\n", - "4 foo two small 3 6\n", - "5 bar one large 4 6\n", - "6 bar one small 5 8\n", - "7 bar two small 6 9\n", - "8 bar two large 7 9" - ] - }, - "execution_count": 162, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "df = pd.DataFrame({\"A\": [\"foo\", \"foo\", \"foo\", \"foo\", \"foo\",\n", - " \"bar\", \"bar\", \"bar\", \"bar\"],\n", - " \"B\": [\"one\", \"one\", \"one\", \"two\", \"two\",\n", - " \"one\", \"one\", \"two\", \"two\"],\n", - " \"C\": [\"small\", \"large\", \"large\", \"small\",\n", - " \"small\", \"large\", \"small\", \"small\",\n", - " \"large\"],\n", - " \"D\": [1, 2, 2, 3, 3, 4, 5, 6, 7],\n", - " \"E\": [2, 4, 5, 5, 6, 6, 8, 9, 9]})\n", - "df" - ] - }, - { - "cell_type": "markdown", - "id": "bf5d776c", - "metadata": {}, - "source": [ - "This first example aggregates values by taking the sum." - ] - }, - { - "cell_type": "code", - "execution_count": 163, - "id": "66f45689", - "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", - "
Clargesmall
AB
barone4.05.0
two7.06.0
fooone4.01.0
twoNaN6.0
\n", - "
" - ], - "text/plain": [ - "C large small\n", - "A B \n", - "bar one 4.0 5.0\n", - " two 7.0 6.0\n", - "foo one 4.0 1.0\n", - " two NaN 6.0" - ] - }, - "execution_count": 163, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "table = pd.pivot_table(df, values='D', index=['A', 'B'],\n", - " columns=['C'], aggfunc=np.sum)\n", - "table" - ] - }, - { - "cell_type": "markdown", - "id": "412da531", - "metadata": {}, - "source": [ - "We can also fill in missing values using the `fill_value` parameter." - ] - }, - { - "cell_type": "code", - "execution_count": 164, - "id": "53982906", - "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", - "
Clargesmall
AB
barone45
two76
fooone41
two06
\n", - "
" - ], - "text/plain": [ - "C large small\n", - "A B \n", - "bar one 4 5\n", - " two 7 6\n", - "foo one 4 1\n", - " two 0 6" - ] - }, - "execution_count": 164, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "table = pd.pivot_table(df, values='D', index=['A', 'B'],\n", - " columns=['C'], aggfunc=np.sum, fill_value=0)\n", - "table" - ] - }, - { - "cell_type": "markdown", - "id": "21fbd3d9", - "metadata": {}, - "source": [ - "The next example aggregates by taking the mean across multiple columns." - ] - }, - { - "cell_type": "code", - "execution_count": 165, - "id": "eab3b2c4", - "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", - "
DE
AC
barlarge5.5000007.500000
small5.5000008.500000
foolarge2.0000004.500000
small2.3333334.333333
\n", - "
" - ], - "text/plain": [ - " D E\n", - "A C \n", - "bar large 5.500000 7.500000\n", - " small 5.500000 8.500000\n", - "foo large 2.000000 4.500000\n", - " small 2.333333 4.333333" - ] - }, - "execution_count": 165, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "table = pd.pivot_table(df, values=['D', 'E'], index=['A', 'C'],\n", - " aggfunc={'D': np.mean,\n", - " 'E': np.mean})\n", - "table" - ] - }, - { - "cell_type": "markdown", - "id": "f2cb171e", - "metadata": {}, - "source": [ - "We can also calculate multiple types of aggregations for any given value column." - ] - }, - { - "cell_type": "code", - "execution_count": 166, - "id": "067c7909", - "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", - "
DE
meanmaxmeanmin
AC
barlarge5.50000097.5000006
small5.50000098.5000008
foolarge2.00000054.5000004
small2.33333364.3333332
\n", - "
" - ], - "text/plain": [ - " D E \n", - " mean max mean min\n", - "A C \n", - "bar large 5.500000 9 7.500000 6\n", - " small 5.500000 9 8.500000 8\n", - "foo large 2.000000 5 4.500000 4\n", - " small 2.333333 6 4.333333 2" - ] - }, - "execution_count": 166, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "table = pd.pivot_table(df, values=['D', 'E'], index=['A', 'C'],\n", - " aggfunc={'D': np.mean,\n", - " 'E': [min, max, np.mean]})\n", - "table" - ] - }, - { - "cell_type": "markdown", - "id": "b59b9e37", - "metadata": {}, - "source": [ - "## High-performance Pandas: eval() and query()\n", - "\n", - "### eval()\n", - "\n", - "Evaluate a string describing operations on DataFrame columns.\n", - "\n", - "Operates on columns only, not specific rows or elements. This allows `eval` to run arbitrary code, which can make you vulnerable to code injection if you pass user input to this function.\n", - "\n", - "For example:" - ] - }, - { - "cell_type": "code", - "execution_count": 167, - "id": "e8035353", - "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", - "
AB
0110
128
236
344
452
\n", - "
" - ], - "text/plain": [ - " A B\n", - "0 1 10\n", - "1 2 8\n", - "2 3 6\n", - "3 4 4\n", - "4 5 2" - ] - }, - "execution_count": 167, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "df = pd.DataFrame({'A': range(1, 6), 'B': range(10, 0, -2)})\n", - "df" - ] - }, - { - "cell_type": "code", - "execution_count": 168, - "id": "3210ba1b", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "0 11\n", - "1 10\n", - "2 9\n", - "3 8\n", - "4 7\n", - "dtype: int64" - ] - }, - "execution_count": 168, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "df.eval('A + B')" - ] - }, - { - "cell_type": "markdown", - "id": "41f98456", - "metadata": {}, - "source": [ - "The assignment is allowed though by default the original `DataFrame` is not modified." - ] - }, - { - "cell_type": "code", - "execution_count": 169, - "id": "ffd06292", - "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", - "
ABC
011011
12810
2369
3448
4527
\n", - "
" - ], - "text/plain": [ - " A B C\n", - "0 1 10 11\n", - "1 2 8 10\n", - "2 3 6 9\n", - "3 4 4 8\n", - "4 5 2 7" - ] - }, - "execution_count": 169, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "df.eval('C = A + B')" - ] - }, - { - "cell_type": "code", - "execution_count": 170, - "id": "b3d2f56a", - "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", - "
AB
0110
128
236
344
452
\n", - "
" - ], - "text/plain": [ - " A B\n", - "0 1 10\n", - "1 2 8\n", - "2 3 6\n", - "3 4 4\n", - "4 5 2" - ] - }, - "execution_count": 170, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "df" - ] - }, - { - "cell_type": "markdown", - "id": "0d03c6d5", - "metadata": {}, - "source": [ - "Use `inplace=True` to modify the original DataFrame." - ] - }, - { - "cell_type": "code", - "execution_count": 171, - "id": "0d292862", - "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", - "
ABC
011011
12810
2369
3448
4527
\n", - "
" - ], - "text/plain": [ - " A B C\n", - "0 1 10 11\n", - "1 2 8 10\n", - "2 3 6 9\n", - "3 4 4 8\n", - "4 5 2 7" - ] - }, - "execution_count": 171, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "df.eval('C = A + B', inplace=True)\n", - "df" - ] - }, - { - "cell_type": "markdown", - "id": "45e4f177", - "metadata": {}, - "source": [ - "Multiple columns can be assigned using multi-line expressions:" - ] - }, - { - "cell_type": "code", - "execution_count": 172, - "id": "5c54d9d5", - "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", - "
ABCD
011011-9
12810-6
2369-3
34480
45273
\n", - "
" - ], - "text/plain": [ - " A B C D\n", - "0 1 10 11 -9\n", - "1 2 8 10 -6\n", - "2 3 6 9 -3\n", - "3 4 4 8 0\n", - "4 5 2 7 3" - ] - }, - "execution_count": 172, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "df.eval(\n", - " '''\n", - " C = A + B\n", - " D = A - B\n", - " '''\n", - ")" - ] - }, - { - "cell_type": "markdown", - "id": "8a6707a5", - "metadata": {}, - "source": [ - "### query()\n", - "\n", - "Query the columns of a DataFrame with a boolean expression.\n", - "\n", - "For example:" - ] - }, - { - "cell_type": "code", - "execution_count": 173, - "id": "913adf98", - "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", - "
ABC C
011010
1289
2368
3447
4526
\n", - "
" - ], - "text/plain": [ - " A B C C\n", - "0 1 10 10\n", - "1 2 8 9\n", - "2 3 6 8\n", - "3 4 4 7\n", - "4 5 2 6" - ] - }, - "execution_count": 173, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "df = pd.DataFrame({\n", - " 'A': range(1, 6),\n", - " 'B': range(10, 0, -2),\n", - " 'C C': range(10, 5, -1)\n", - "})\n", - "df" - ] - }, - { - "cell_type": "code", - "execution_count": 174, - "id": "1f32860f", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
ABC C
4526
\n", - "
" - ], - "text/plain": [ - " A B C C\n", - "4 5 2 6" - ] - }, - "execution_count": 174, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "df.query('A > B')" - ] - }, - { - "cell_type": "markdown", - "id": "293305a6", - "metadata": {}, - "source": [ - "The previous expression is equivalent to" - ] - }, - { - "cell_type": "code", - "execution_count": 175, - "id": "7037c1f7", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
ABC C
4526
\n", - "
" - ], - "text/plain": [ - " A B C C\n", - "4 5 2 6" - ] - }, - "execution_count": 175, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "df[df.A > df.B]" - ] - }, - { - "cell_type": "markdown", - "id": "93f41453", - "metadata": {}, - "source": [ - "For columns with spaces in their name, you can use backtick quoting." - ] - }, - { - "cell_type": "code", - "execution_count": 176, - "id": "cfac842b", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
ABC C
011010
\n", - "
" - ], - "text/plain": [ - " A B C C\n", - "0 1 10 10" - ] - }, - "execution_count": 176, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "df.query('B == `C C`')" - ] - }, - { - "cell_type": "markdown", - "id": "d8f4335e", - "metadata": {}, - "source": [ - "The previous expression is equivalent to" - ] - }, - { - "cell_type": "code", - "execution_count": 177, - "id": "6b5fe2dd", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
ABC C
011010
\n", - "
" - ], - "text/plain": [ - " A B C C\n", - "0 1 10 10" - ] - }, - "execution_count": 177, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "df[df.B == df['C C']]" - ] - }, - { - "cell_type": "markdown", - "id": "b4dece86", - "metadata": {}, - "source": [ - "
\n", - "
\n", - "

Let's visualize it! 🎥

\n", - "
\n", - " \n", - "
\n", - "
\n", - "
\n", - "## Your turn! 🚀\n", - "\n", - "### Processing image data\n", - "\n", - "Recently, very powerful AI models have been developed that allow us to understand images. There are many tasks that can be solved using pre-trained neural networks, or cloud services. Some examples include:\n", - "\n", - "- **Image Classification**, can help you categorize the image into one of the pre-defined classes. You can easily train your own image classifiers using services such as [Custom Vision](https://azure.microsoft.com/services/cognitive-services/custom-vision-service/?WT.mc_id=academic-77958-bethanycheum)\n", - "- **Object Detection** to detect different objects in the image. Services such as [computer vision](https://azure.microsoft.com/services/cognitive-services/computer-vision/?WT.mc_id=academic-77958-bethanycheum) can detect a number of common objects, and you can train [Custom Vision](https://azure.microsoft.com/services/cognitive-services/custom-vision-service/?WT.mc_id=academic-77958-bethanycheum) model to detect some specific objects of interest.\n", - "- **Face Detection**, including Age, Gender and Emotion detection. This can be done via [Face API](https://azure.microsoft.com/services/cognitive-services/face/?WT.mc_id=academic-77958-bethanycheum).\n", - "\n", - "All those cloud services can be called using [Python SDKs](https://docs.microsoft.com/samples/azure-samples/cognitive-services-python-sdk-samples/cognitive-services-python-sdk-samples/?WT.mc_id=academic-77958-bethanycheum), and thus can be easily incorporated into your data exploration workflow.\n", - "\n", - "Here are some examples of exploring data from Image data sources:\n", - "\n", - "- In the blog post [How to Learn Data Science without Coding](https://soshnikov.com/azure/how-to-learn-data-science-without-coding/) we explore Instagram photos, trying to understand what makes people give more likes to a photo. We first extract as much information from pictures as possible using [computer vision](https://azure.microsoft.com/services/cognitive-services/computer-vision/?WT.mc_id=academic-77958-bethanycheum), and then use [Azure Machine Learning AutoML](https://docs.microsoft.com/azure/machine-learning/concept-automated-ml/?WT.mc_id=academic-77958-bethanycheum) to build the interpretable model.\n", - "- In [Facial Studies Workshop](https://github.com/CloudAdvocacy/FaceStudies) we use [Face API](https://azure.microsoft.com/services/cognitive-services/face/?WT.mc_id=academic-77958-bethanycheum) to extract emotions from people on photographs from events, in order to try to understand what makes people happy.\n", - "\n", - "### Assignment\n", - "\n", - "[Perform more detailed data study for the challenges above](../../assignments/data-science/data-processing-in-python.md)\n", - "\n", - "## Self study\n", - "\n", - "In this chapter, we've covered many of the basics of using Pandas effectively for data analysis. Still, much has been omitted from our discussion. To learn more about Pandas, we recommend the following resources:\n", - "\n", - "- [Pandas online documentation](http://pandas.pydata.org/): This is the go-to source for complete documentation of the package. While the examples in the documentation tend to be small generated datasets, the description of the options is complete and generally very useful for understanding the use of various functions.\n", - "\n", - "- [*Python for Data Analysis*](http://shop.oreilly.com/product/0636920023784.do) Written by Wes McKinney (the original creator of Pandas), this book contains much more detail on the Pandas package than we had room for in this chapter. In particular, he takes a deep dive into tools for time series, which were his bread and butter as a financial consultant. The book also has many entertaining examples of applying Pandas to gain insight from real-world datasets. Keep in mind, though, that the book is now several years old, and the Pandas package has quite a few new features that this book does not cover (but be on the lookout for a new edition in 2017).\n", - "\n", - "- [Stack Overflow](http://stackoverflow.com/questions/tagged/pandas): Pandas has so many users that any question you have has likely been asked and answered on Stack Overflow. Using Pandas is a case where some Google-Fu is your best friend. Simply go to your favorite search engine and type in the question, problem, or error you're coming across–more than likely you'll find your answer on a Stack Overflow page.\n", - "\n", - "- [Pandas on PyVideo](http://pyvideo.org/search?q=pandas): From PyCon to SciPy to PyData, many conferences have featured tutorials from Pandas developers and power users. The PyCon tutorials in particular tend to be given by very well-vetted presenters.\n", - "\n", - "Using these resources, combined with the walk-through given in this chapter, my hope is that you'll be poised to use Pandas to tackle any data analysis problem you come across!\n", - "\n", - "## Acknowledgments\n", - "\n", - "Thanks for [Pandas user guide](https://pandas.pydata.org/docs/user_guide/index.html). It contributes the majority of the content in this chapter." - ] - } - ], - "metadata": { - "jupytext": { - "cell_metadata_filter": "-all", - "formats": "md:myst", - "text_representation": { - "extension": ".md", - "format_name": "myst", - "format_version": 0.13, - "jupytext_version": "1.11.5" - } - }, - "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.9.18" - }, - "source_map": [ - 14, - 24, - 27, - 52, - 56, - 60, - 64, - 66, - 75, - 79, - 81, - 85, - 89, - 93, - 95, - 105, - 107, - 113, - 117, - 121, - 125, - 129, - 131, - 135, - 137, - 141, - 143, - 147, - 149, - 157, - 161, - 165, - 169, - 173, - 175, - 179, - 182, - 186, - 190, - 192, - 200, - 204, - 208, - 210, - 214, - 216, - 228, - 232, - 236, - 238, - 244, - 248, - 250, - 274, - 281, - 285, - 289, - 293, - 295, - 303, - 307, - 309, - 315, - 319, - 323, - 325, - 331, - 335, - 339, - 343, - 347, - 349, - 358, - 362, - 366, - 370, - 372, - 378, - 388, - 394, - 398, - 400, - 406, - 410, - 414, - 418, - 422, - 424, - 432, - 436, - 440, - 442, - 448, - 452, - 456, - 460, - 464, - 466, - 470, - 474, - 478, - 480, - 484, - 488, - 490, - 494, - 496, - 507, - 509, - 515, - 519, - 521, - 527, - 531, - 535, - 537, - 541, - 543, - 549, - 558, - 566, - 570, - 572, - 603, - 605, - 611, - 615, - 619, - 621, - 625, - 627, - 631, - 635, - 639, - 641, - 645, - 649, - 653, - 657, - 661, - 665, - 667, - 674, - 676, - 733, - 738, - 746, - 750, - 754, - 758, - 761, - 771, - 775, - 778, - 784, - 787, - 793, - 798, - 802, - 806, - 811, - 816, - 819, - 835, - 839, - 843, - 848, - 850, - 858, - 862, - 866, - 870, - 872, - 876, - 880, - 884, - 888, - 890, - 902, - 908, - 911, - 1074, - 1077, - 1341, - 1346, - 1350, - 1354, - 1357, - 1372, - 1374, - 1378, - 1380, - 1423, - 1428, - 1431, - 1574, - 1578, - 1582, - 1584, - 1588, - 1590, - 1594, - 1597, - 1601, - 1607, - 1613, - 1615, - 1619, - 1625, - 1627, - 1631, - 1633, - 1637, - 1641, - 1645, - 1650, - 1655, - 1658, - 1662, - 1667, - 1672, - 1674, - 1718, - 1721, - 1782, - 1787, - 1790, - 1824, - 1826, - 1830, - 1836, - 1838, - 1962, - 1969, - 1971, - 1979, - 1990, - 1994, - 1998, - 2002, - 2006, - 2010, - 2015, - 2019, - 2024, - 2036, - 2041, - 2043, - 2047, - 2051, - 2053, - 2057, - 2060, - 2064, - 2071, - 2079, - 2088, - 2090, - 2094, - 2096, - 2100, - 2102, - 2106, - 2108 - ] - }, - "nbformat": 4, - "nbformat_minor": 5 -} \ No newline at end of file diff --git a/_sources/data-science/working-with-data/pandas.md b/_sources/data-science/working-with-data/pandas.md index 6ab414bb39..2dd26e60a7 100644 --- a/_sources/data-science/working-with-data/pandas.md +++ b/_sources/data-science/working-with-data/pandas.md @@ -1,2154 +1,6 @@ ---- -jupytext: - cell_metadata_filter: -all - formats: md:myst - text_representation: - extension: .md - format_name: myst - format_version: 0.13 - jupytext_version: 1.11.5 -kernelspec: - display_name: Python 3 - language: python - name: python3 ---- - # Pandas -Pandas is a fast, powerful, flexible and easy-to-use open-source data analysis and manipulation tool, built on top of the Python programming language. - -## Introducing Pandas objects - -We’ll start with a quick, non-comprehensive overview of the fundamental data structures in Pandas to get you started. The fundamental behavior about data types, indexing, axis labeling, and alignment apply across all of the objects. To get started, import NumPy and load Pandas into your namespace: - -```{code-cell} -import numpy as np -import pandas as pd -``` - -### Series - -`Series` is a one-dimensional labeled array capable of holding any data type (integers, strings, floating point numbers, Python objects, etc.). The axis labels are collectively referred to as the **index**. The basic method to create a `Series` is to call: - -```py -s = pd.Series(data, index=index) -``` - -Here, `data` can be many different things: - -- a Python dict -- an ndarray -- a scalar value (like 5) - - -The passed **index** is a list of axis labels. Thus, this separates into a few cases depending on what the **data is**: - -#### Create a Series - -##### From ndarray - -If `data` is an ndarray, **index** must be the same length as the **data**. If no index is passed, one will be created having values `[0, ..., len(data) - 1]`. - -```{code-cell} -s = pd.Series(np.random.randn(5), index=["a", "b", "c", "d", "e"]) -``` - -```{code-cell} -s -``` - -```{code-cell} -s.index -``` - -```{code-cell} -pd.Series(np.random.randn(5)) -``` - -```{note} -Pandas supports non-unique index values. If an operation that does not support duplicate index values is attempted, an exception will be raised at that time. -``` - -##### From dict -`Series` can be instantiated from dicts: - -```{code-cell} -d = {"b": 1, "a": 0, "c": 2} -``` - -```{code-cell} -pd.Series(d) -``` - -If an index is passed, the values in data corresponding to the labels in the index will be pulled out. - -```{code-cell} -d = {"a": 0.0, "b": 1.0, "c": 2.0} -``` - -```{code-cell} -pd.Series(d) -``` - -```{code-cell} -pd.Series(d, index=["b", "c", "d", "a"]) -``` - -```{note} -NaN (not a number) is the standard missing data marker used in Pandas. -``` - -##### From scalar value - -If `data` is a scalar value, an index must be provided. The value will be repeated to match the length of **index**. - -```{code-cell} -pd.Series(5.0, index=["a", "b", "c", "d", "e"]) -``` - -#### Series is ndarray-like - -`Series` acts very similarly to a `ndarray` and is a valid argument to most NumPy functions. However, operations such as slicing will also slice the index. - -```{code-cell} -s[0] -``` - -```{code-cell} -s[:3] -``` - -```{code-cell} -s[s > s.median()] -``` - -```{code-cell} -s[[4, 3, 1]] -``` - -```{code-cell} -np.exp(s) -``` - -Like a NumPy array, a Pandas Series has a single `dtype`. - -```{code-cell} -s.dtype -``` - -If you need the actual array backing a `Series`, use `Series.array`. - -```{code-cell} -s.array -``` - -While `Series` is ndarray-like, if you need an actual ndarray, then use `Series.to_numpy()`. - -```{code-cell} -s.to_numpy() -``` - -Even if the `Series` is backed by an `ExtensionArray`, `Series.to_numpy()` will return a NumPy ndarray. - -#### Series is dict-like - -A `Series` is also like a fixed-size dict in that you can get and set values by index label: - -```{code-cell} -s["a"] -``` - -```{code-cell} -s["e"] = 12.0 -``` - -```{code-cell} -s -``` - -```{code-cell} -"e" in s -``` - -```{code-cell} -"f" in s -``` - -If a label is not contained in the index, an exception is raised: - -```{code-cell} -:tags: ["raises-exception"] -s["f"] -``` - -Using the `Series.get()` method, a missing label will return None or specified default: - -```{code-cell} -s.get("f") -``` - -```{code-cell} -s.get("f", np.nan) -``` - -These labels can also be accessed by `attribute`. - -#### Vectorized operations and label alignment with Series - -When working with raw NumPy arrays, looping through value-by-value is usually not necessary. The same is true when working with `Series` in Pandas. `Series` can also be passed into most NumPy methods expecting an ndarray. - -```{code-cell} -s + s -``` - -```{code-cell} -s * 2 -``` - -```{code-cell} -np.exp(s) -``` - -A key difference between `Series` and ndarray is that operations between `Series` automatically align the data based on the label. Thus, you can write computations without giving consideration to whether the `Series` involved have the same labels. - -```{code-cell} -s[1:] + s[:-1] -``` - -The result of an operation between unaligned `Series` will have the **union** of the indexes involved. If a label is not found in one `Series` or the other, the result will be marked as missing `NaN`. Being able to write code without doing any explicit data alignment grants immense freedom and flexibility in interactive data analysis and research. The integrated data alignment features of the Pandas data structures set Pandas apart from the majority of related tools for working with labeled data. - -```{note} -In general, we chose to make the default result of operations between differently indexed objects yield the **union** of the indexes in order to avoid loss of information. Having an index label, though the data is missing, is typically important information as part of a computation. You of course have the option of dropping labels with missing data via the `dropna` function. -``` - -#### Name attribute - -`Series` also has a `name` attribute: - -```{code-cell} -s = pd.Series(np.random.randn(5), name="something") -``` - -```{code-cell} -s -``` - -```{code-cell} -s.name -``` - -The `Series` `name` can be assigned automatically in many cases, in particular, when selecting a single column from a `DataFrame`, the `name` will be assigned the column label. - -You can rename a `Series` with the `pandas.Series.rename()` method. - -```{code-cell} -s2 = s.rename("different") -``` - -```{code-cell} -s2.name -``` - -Note that `s` and `s2` refer to different objects. - -### DataFrame - -`DataFrame` is a 2-dimensional labeled data structure with columns of potentially different types. You can think of it like a spreadsheet or SQL table, or a `dict` of `Series` objects. It is generally the most commonly used Pandas object. Like `Series`, `DataFrame` accepts many different kinds of input: - -- Dict of 1D ndarrays, lists, dicts, or `Series` -- 2-D `numpy.ndarray` -- Structured or record ndarray -- A `Series` -- Another `DataFrame` - -Along with the data, you can optionally pass **index** (row labels) and **columns** (column labels) arguments. If you pass an index and / or columns, you are guaranteeing the index and / or columns of the resulting `DataFrame`. Thus, a `dict` of Series plus a specific index will discard all data not matching up to the passed index. - -If axis labels are not passed, they will be constructed from the input data based on common sense rules. - -#### Create a Dataframe - -##### From dict of `Series` or dicts - -The resulting **index** will be the **union** of the indexes of the various Series. If there are any nested dicts, these will first be converted to Series. If no columns are passed, the columns will be the ordered list of `dict` keys. - -```{code-cell} -d = { - "one": pd.Series([1.0, 2.0, 3.0], index=["a", "b", "c"]), - "two": pd.Series([1.0, 2.0, 3.0, 4.0], index=["a", "b", "c", "d"]), -} -``` - -```{code-cell} -df = pd.DataFrame(d) -``` - -```{code-cell} -df -``` - -```{code-cell} -pd.DataFrame(d, index=["d", "b", "a"]) -``` - -```{code-cell} -pd.DataFrame(d, index=["d", "b", "a"], columns=["two", "three"]) -``` - -The row and column labels can be accessed respectively by accessing the **index** and **columns** attributes: - -```{note} -When a particular set of columns is passed along with a dict of data, the passed columns override the keys in the dict. -``` - -```{code-cell} -df.index -``` - -```{code-cell} -df.columns -``` - -##### From dict of ndarrays / lists - -The ndarrays must all be the same length. If an index is passed, it must also be the same length as the arrays. If no index is passed, the result will be `range(n)`, where `n` is the array length. - -```{code-cell} -d = {"one": [1.0, 2.0, 3.0, 4.0], "two": [4.0, 3.0, 2.0, 1.0]} -``` - -```{code-cell} -pd.DataFrame(d) -``` - -```{code-cell} -pd.DataFrame(d, index=["a", "b", "c", "d"]) -``` - -##### From structured or record array - -This case is handled identically to a dict of arrays. - -```{code-cell} -data = np.zeros((2,), dtype=[("A", "i4"), ("B", "f4"), ("C", "a10")]) -``` - -```{code-cell} -data[:] = [(1, 2.0, "Hello"), (2, 3.0, "World")] -``` - -```{code-cell} -pd.DataFrame(data) -``` - -```{code-cell} -pd.DataFrame(data, index=["first", "second"]) -``` - -```{code-cell} -pd.DataFrame(data, columns=["C", "A", "B"]) -``` - -```{note} -DataFrame is not intended to work exactly like a 2-dimensional NumPy ndarray. -``` - - -##### From a list of dicts - -```{code-cell} -data2 = [{"a": 1, "b": 2}, {"a": 5, "b": 10, "c": 20}] -``` - -```{code-cell} -pd.DataFrame(data2) -``` - -```{code-cell} -pd.DataFrame(data2, index=["first", "second"]) -``` - -```{code-cell} -pd.DataFrame(data2, columns=["a", "b"]) -``` - -##### From a dict of tuples - -You can automatically create a MultiIndexed frame by passing a tuples dictionary. - -```{code-cell} -pd.DataFrame( - { - ("a", "b"): {("A", "B"): 1, ("A", "C"): 2}, - ("a", "a"): {("A", "C"): 3, ("A", "B"): 4}, - ("a", "c"): {("A", "B"): 5, ("A", "C"): 6}, - ("b", "a"): {("A", "C"): 7, ("A", "B"): 8}, - ("b", "b"): {("A", "D"): 9, ("A", "B"): 10}, - } -) -``` - -##### From a Series - -The result will be a DataFrame with the same index as the input Series, and with one column whose name is the original name of the Series (only if no other column name provided). - -```{code-cell} -ser = pd.Series(range(3), index=list("abc"), name="ser") -``` - -```{code-cell} -pd.DataFrame(ser) -``` - -##### From a list of namedtuples - -The field names of the first `namedtuple` in the list determine the columns of the `DataFrame`. The remaining namedtuples (or tuples) are simply unpacked and their values are fed into the rows of the `DataFrame`. If any of those tuples is shorter than the first `namedtuple` then the later columns in the corresponding row are marked as missing values. If any are longer than the first `namedtuple` , a `ValueError` is raised. - -```{code-cell} -from collections import namedtuple -``` - -```{code-cell} -Point = namedtuple("Point", "x y") -``` - -```{code-cell} -pd.DataFrame([Point(0, 0), Point(0, 3), (2, 3)]) -``` - -```{code-cell} -Point3D = namedtuple("Point3D", "x y z") -``` - -```{code-cell} -pd.DataFrame([Point3D(0, 0, 0), Point3D(0, 3, 5), Point(2, 3)]) -``` - -##### From a list of dataclasses - -Data Classes as introduced in PEP557, can be passed into the DataFrame constructor. Passing a list of dataclasses is equivalent to passing a list of dictionaries. - -Please be aware, that all values in the list should be dataclasses, mixing types in the list would result in a `TypeError`. - -```{code-cell} -from dataclasses import make_dataclass -``` - -```{code-cell} -Point = make_dataclass("Point", [("x", int), ("y", int)]) -``` - -```{code-cell} -pd.DataFrame([Point(0, 0), Point(0, 3), Point(2, 3)]) -``` - -#### Column selection, addition, deletion - -You can treat a `DataFrame` semantically like a dict of like-indexed `Series` objects. Getting, setting, and deleting columns works with the same syntax as the analogous dict operations: - -```{code-cell} -df -``` - -```{code-cell} -df["one"] -``` - -```{code-cell} -df["three"] = df["one"] * df["two"] -``` - -```{code-cell} -df["flag"] = df["one"] > 2 -``` - -```{code-cell} -df -``` - -Columns can be deleted or popped like with a dict: - -```{code-cell} -del df["two"] -``` - -```{code-cell} -three = df.pop("three") -``` - -```{code-cell} -df -``` - -When inserting a scalar value, it will naturally be propagated to fill the column: +-- -```{code-cell} -df["foo"] = "bar" +```{tableofcontents} ``` - -```{code-cell} -df -``` - -When inserting a `Series` that does not have the same index as the `DataFrame`, it will be conformed to the DataFrame’s index: - -```{code-cell} -df["one_trunc"] = df["one"][:2] -``` - -
-
-

Let's visualize it! 🎥

-
- -
-
-
- -```{code-cell} -df -``` - -You can insert raw ndarrays but their length must match the length of the DataFrame’s index. - -By default, columns get inserted at the end. `DataFrame.insert()` inserts at a particular location in the columns: - -```{code-cell} -df.insert(1, "bar", df["one"]) -``` - -```{code-cell} -df -``` - -#### Assigning new columns in method chains - -DataFrame has an `assign()` method that allows you to easily create new columns that are potentially derived from existing columns. - -```{code-cell} -iris = pd.read_csv("../../assets/data/iris.csv") -``` - -```{code-cell} -iris.head() -``` - -```{code-cell} -iris.assign(sepal_ratio=iris["SepalWidth"] / iris["SepalLength"]).head() -``` - -In the example above, we inserted a precomputed value. We can also pass in a function of one argument to be evaluated on the DataFrame being assigned to. - -```{code-cell} -iris.assign(sepal_ratio=lambda x: (x["SepalWidth"] / x["SepalLength"])).head() -``` - -`assign()` **always** returns a copy of the data, leaving the original DataFrame untouched. - -Passing a callable, as opposed to an actual value to be inserted, is useful when you don’t have a reference to the DataFrame at hand. This is common when using `assign()` in a chain of operations. For example, we can limit the DataFrame to just those observations with a Sepal Length greater than 5, calculate the ratio, and plot: - -```{code-cell} -( - iris.query("SepalLength > 5") - .assign( - SepalRatio=lambda x: x.SepalWidth / x.SepalLength, - PetalRatio=lambda x: x.PetalWidth / x.PetalLength, - ) - .plot(kind="scatter", x="SepalRatio", y="PetalRatio") -) -``` - -Since a function is passed in, the function is computed on the DataFrame being assigned to. Importantly, this is the DataFrame that’s been filtered to those rows with sepal length greater than 5. The filtering happens first, and then the ratio calculations. This is an example where we didn’t have a reference to the filtered DataFrame available. - -The function signature for `assign()` is simply `**kwargs`. The keys are the column names for the new fields, and the values are either a value to be inserted (for example, a `Series` or NumPy array), or a function of one argument to be called on the `DataFrame`. A copy of the original `DataFrame` is returned, with the new values inserted. - -The order of `**kwargs` is preserved. This allows for dependent assignment, where an expression later in `**kwargs` can refer to a column created earlier in the same `assign()`. - -```{code-cell} -dfa = pd.DataFrame({"A": [1, 2, 3], "B": [4, 5, 6]}) -``` - -```{code-cell} -dfa.assign(C=lambda x: x["A"] + x["B"], D=lambda x: x["A"] + x["C"]) -``` - -In the second expression, `x['C']` will refer to the newly created column, that’s equal to `dfa['A'] + dfa['B']`. - -#### Indexing / selection - -The basics of indexing are as follows: - -|Operation |Syntax |Result | -|:------- |:----- |:----- | -|Select column |`df[col]` |Series | -|Select row by label |`df.loc[label]`|Series | -|Select row by integer location|`df.iloc[loc]` |Series | -|Slice rows |`df[5:10] ` |DataFrame| -|Select rows by boolean vector |`df[bool_vec]` |DataFrame| - -Row selection, for example, returns a `Series` whose index is the columns of the `DataFrame`: - -``` -df.loc["b"] -``` - -
-
-

Let's visualize it! 🎥

-
- -
-
-
- -```{code-cell} -df.iloc[2] -``` - -#### Data alignment and arithmetic - -Data alignment between `DataFrame` objects automatically aligns on **both** the columns and the index (row labels)**. Again, the resulting object will have the union of the column and row labels. - -```{code-cell} -df = pd.DataFrame(np.random.randn(10, 4), columns=["A", "B", "C", "D"]) -``` - -```{code-cell} -df2 = pd.DataFrame(np.random.randn(7, 3), columns=["A", "B", "C"]) -``` - -```{code-cell} -df + df2 -``` - -When doing an operation between `DataFrame` and `Series`, the default behavior is to align the `Series` **index** on the `DataFrame` **columns**, thus broadcasting row-wise. For example: - -```{code-cell} -df - df.iloc[0] -``` - -Arithmetic operations with scalars operate element-wise: - -```{code-cell} -df * 5 + 2 -``` - -```{code-cell} -1 / df -``` - -```{code-cell} -df ** 4 -``` - -Boolean operators operate element-wise as well: - -```{code-cell} -df1 = pd.DataFrame({"a": [1, 0, 1], "b": [0, 1, 1]}, dtype=bool) -``` - -```{code-cell} -df2 = pd.DataFrame({"a": [0, 1, 1], "b": [1, 1, 0]}, dtype=bool) -``` - -```{code-cell} -df1 & df2 -``` - -```{code-cell} -df1 | df2 -``` - -```{code-cell} -df1 ^ df2 -``` - -```{code-cell} --df1 -``` - - -#### Transposing - -To transpose, access the `T` attribute or `DataFrame.transpose()`, similar to an ndarray: - -```{code-cell} -df[:5].T -``` - -## Data indexing and selection - -The axis labeling information in Pandas objects serves many purposes: - -- Identifies data (i.e. provides metadata) using known indicators, important for analysis, visualization, and interactive console display. -- Enables automatic and explicit data alignment. -- Allows intuitive getting and setting of subsets of the data set. - -In this section, we will focus on the final point: namely, how to slice, dice, and generally get and set subsets of Pandas objects. The primary focus will be on Series and DataFrame as they have received more development attention in this area. - -```{note} -The Python and NumPy indexing operators `[]` and attribute operator `.` provide quick and easy access to Pandas data structures across a wide range of use cases. This makes interactive work intuitive, as there’s little new to learn if you already know how to deal with Python dictionaries and NumPy arrays. However, since the type of the data to be accessed isn’t known in advance, directly using standard operators has some optimization limits. For production code, we recommended that you take advantage of the optimized Pandas data access methods exposed in this chapter. -``` - -```{warning} -Whether a copy or a reference is returned for a setting operation, may depend on the context. This is sometimes called `chained assignment` and should be avoided. -``` - -### Different choices for indexing - -Object selection has had a number of user-requested additions in order to support more explicit location-based indexing. Pandas now supports three types of multi-axis indexing. - -- `.loc` is primarily label based, but may also be used with a boolean array. `.loc` will raise `KeyError` when the items are not found. Allowed inputs are: - - A single label, e.g. `5` or `'a'` (Note that `5` is interpreted as a label of the index. This use is not an integer position along the index.). - - A list or array of labels `['a', 'b', 'c']`. - - A slice object with labels `'a':'f'` (Note that contrary to usual Python slices, both the start and the stop are included, when present in the index!) - - A boolean array (any `NA` values will be treated as `False`). - - A `callable` function with one argument (the calling Series or DataFrame) and that returns valid output for indexing (one of the above). - -- `.iloc` is primarily integer position based (from `0` to `length-1` of the axis), but may also be used with a boolean array. `.iloc` will raise `IndexError` if a requested indexer is out-of-bounds, except slice indexers which allow out-of-bounds indexing. (this conforms with Python/NumPy slice semantics). Allowed inputs are: - - An integer e.g. `5`. - - A list or array of integers `[4, 3, 0]`. - - A slice object with ints `1:7`. - - A boolean array (any `NA` values will be treated as `False`). - - A `callable` function with one argument (the calling Series or DataFrame) that returns valid output for indexing (one of the above). -- `.loc`, `.iloc`, and also `[]` indexing can accept a `callable` as indexer. - -Getting values from an object with multi-axes selection uses the following notation (using `.loc` as an example, but the following applies to `.iloc` as well). Any of the axes accessors may be the null slice `:`. Axes left out of the specification are assumed to be `:`, e.g. `p.loc['a']` is equivalent to `p.loc['a', :]`. - -|**Object Type**|**Indexers** | -|:-- |:- | -|Series |`s.loc[indexer]` | -|DataFrame |`df.loc[row_indexer, column_indexer]`| - -### Basics - -As mentioned when introducing the data structures in the last section, the primary function of indexing with `[]` (a.k.a.` __getitem__` for those familiar with implementing class behavior in Python) is selecting out lower-dimensional slices. The following table shows return type values when indexing Pandas objects with `[]`: - -|**Object Type**|**Selection** |Return Value Type | -|:- |:- |:- | -|Series |`series[label]` |scalar value | -|DataFrame |`frame[colname]`|`Series` corresponding to colname| - -Here we construct a simple time series data set to use for illustrating the indexing functionality: - -```{code-cell} -dates = pd.date_range('1/1/2000', periods=8) -df = pd.DataFrame(np.random.randn(8, 4), - index=dates, columns=['A', 'B', 'C', 'D']) -df -``` - -```{note} -None of the indexing functionality is time series specific unless specifically stated. -``` - -Thus, as per above, we have the most basic indexing using `[]`: - -```{code-cell} -s = df['A'] - -s[dates[5]] -``` - -You can pass a list of columns to `[]` to select columns in that order. If a column is not contained in the DataFrame, an exception will be raised. Multiple columns can also be set in this manner: - -```{code-cell} -df -``` - -```{code-cell} -df[['B', 'A']] = df[['A', 'B']] -df -``` - -You may find this useful for applying a transform (in-place) to a subset of the columns. - -```{warning} -Pandas aligns all AXES when setting `Series` and `DataFrame` from `.loc`, and `.iloc`. - -This will not modify `df` because the column alignment is before value assignment. -``` - -```{code-cell} -df[['A', 'B']] -``` - -```{code-cell} -df.loc[:, ['B', 'A']] = df[['A', 'B']] -df[['A', 'B']] -``` - -```{warning} -The correct way to swap column values is by using raw values: -``` - -```{code-cell} -df.loc[:, ['B', 'A']] = df[['A', 'B']].to_numpy() -df[['A', 'B']] -``` - -### Attribute access - -You may access an index on a `Series` or column on a `DataFrame` directly as an attribute: - -```{code-cell} -sa = pd.Series([1, 2, 3], index=list('abc')) -dfa = df.copy() -``` - -```{code-cell} -sa.b -``` - -```{code-cell} -dfa.A -``` - -```{code-cell} -sa.a = 5 -sa -``` - -```{code-cell} -dfa.A = list(range(len(dfa.index))) # ok if A already exists -dfa -``` - -```{code-cell} -dfa['A'] = list(range(len(dfa.index))) # use this form to create a new column -dfa -``` - -```{warning} -- You can use this access only if the index element is a valid Python identifier, e.g. s.1 is not allowed. See here for an explanation of valid identifiers. - -- The attribute will not be available if it conflicts with an existing method name, e.g. s.min is not allowed, but s['min'] is possible. - -- Similarly, the attribute will not be available if it conflicts with any of the following list: index, major_axis, minor_axis, items. - -- In any of these cases, standard indexing will still work, e.g. s['1'], s['min'], and s['index'] will access the corresponding element or column. -``` - -If you are using the IPython environment, you may also use tab-completion to see these accessible attributes. - -You can also assign a `dict` to a row of a `DataFrame`: - -```{code-cell} -x = pd.DataFrame({'x': [1, 2, 3], 'y': [3, 4, 5]}) -x.iloc[1] = {'x': 9, 'y': 99} -x -``` - -You can use attribute access to modify an existing element of a Series or column of a DataFrame, but be careful; if you try to use attribute access to create a new column, it creates a new attribute rather than a new column. In 0.21.0 and later, this will raise a `UserWarning`: - -```{code-cell} -df = pd.DataFrame({'one': [1., 2., 3.]}) -df.two = [4, 5, 6] -``` - -```{code-cell} -df -``` - -### Slicing ranges - -For now, we explain the semantics of slicing using the [] operator. - -With Series, the syntax works exactly as with an ndarray, returning a slice of the values and the corresponding labels: - -```{code-cell} -s -``` - -```{code-cell} -s[:5] -``` - -```{code-cell} -s[::2] -``` - -```{code-cell} -s[::-1] -``` - -Note that setting works as well: - -```{code-cell} -s2 = s.copy() -s2[:5] = 0 -s2 -``` - -With DataFrame, slicing inside of `[]` slices the rows. This is provided largely as a convenience since it is such a common operation. - -```{code-cell} -df[:3] -``` - -```{code-cell} -df[::-1] -``` - -### Selection by label - -```{warning} -Whether a copy or a reference is returned for a setting operation, may depend on the context. This is sometimes called `chained assignment` and should be avoided. -``` - -```{warning} -`.loc` is strict when you present slicers that are not compatible (or convertible) with the index type. For example using integers in a `DatetimeIndex`. These will raise a `TypeError`. -``` - -```{code-cell} -dfl = pd.DataFrame(np.random.randn(5, 4), - columns=list('ABCD'), - index=pd.date_range('20130101', periods=5)) -``` - -```{code-cell} -:tags: ["raises-exception"] -dfl.loc[2:3] -``` - -```{warning} -String likes in slicing can be convertible to the type of the index and lead to natural slicing. -``` - -``` -dfl.loc['20130102':'20130104'] -``` - -
-
-

Let's visualize it! 🎥

-
- -
-
-
- -```{warning} -Pandas will raise a `KeyError` if indexing with a list with missing labels. -``` - -Pandas provides a suite of methods in order to have **purely label-based indexing**. This is a strict inclusion-based protocol. Every label asked for must be in the index, or a `KeyError` will be raised. When slicing, both the start bound **AND** the stop bound are included, if present in the index. Integers are valid labels, but they refer to the label **and not the position**. - -- The `.loc` attribute is the primary access method. The following are valid inputs: - -- A single label, e.g. `5` or `'a'` (Note that `5` is interpreted as a label of the index. This use is not an integer position along the index.). - -- A list or array of labels `['a', 'b', 'c']`. - -- A slice object with labels `'a':'f'` (Note that contrary to usual Python slices, both the start and the stop are included, when present in the index! - -- A boolean array. - -- A `callable`. - -``` -s1 = pd.Series(np.random.randn(6), index=list('abcdef')) -s1 -s1.loc['c':] -``` - -
-
-

Let's visualize it! 🎥

-
- -
-
-
- -``` -s1.loc['b'] -``` - -
-
-

Let's visualize it! 🎥

-
- -
-
-
- -Note that the setting works as well: - -``` -s1.loc['c':] = 0 -s1 -``` - -
-
-

Let's visualize it! 🎥

-
- -
-
-
- -With a DataFrame: - -``` -df1 = pd.DataFrame(np.random.randn(6, 4), - index=list('abcdef'), - columns=list('ABCD')) -df1 -df1.loc[['a', 'b', 'd'], :] -``` - -
-
-

Let's visualize it! 🎥

-
- -
-
-
- -Accessing via label slices: - -``` -df1.loc['d':, 'A':'C'] -``` - -
-
-

Let's visualize it! 🎥

-
- -
-
-
- -For getting a cross-section using a label (equivalent to `df.xs('a')`): - -``` -df1.loc['a'] -``` - -
-
-

Let's visualize it! 🎥

-
- -
-
-
- - -For getting values with a boolean array: - -``` -df1.loc['a'] > 0 -``` - -
-
-

Let's visualize it! 🎥

-
- -
-
-
- -``` -df1.loc[:, df1.loc['a'] > 0] -``` - -
-
-

Let's visualize it! 🎥

-
- -
-
-
- - - -NA values in a boolean array propagate as `False`: - -```{code-cell} -mask = pd.array([True, False, True, False, pd.NA, False], dtype="boolean") -mask -``` - -``` -df1[mask] -``` - -
-
-

Let's visualize it! 🎥

-
- -
-
-
- -For getting a value explicitly: - -``` -df1.loc['a', 'A'] # this is also equivalent to ``df1.at['a','A']`` -``` - - -
-
-

Let's visualize it! 🎥

-
- -
-
-
- -#### Slicing with labels - -When using `.loc` with slices, if both the start and the stop labels are present in the index, then elements located between the two (including them) are returned: - -``` -s = pd.Series(list('abcde'), index=[0, 3, 2, 5, 4]) -s.loc[3:5] -``` - -
-
-

Let's visualize it! 🎥

-
- -
-
-
- - -If at least one of the two is absent, but the index is sorted, and can be compared against start and stop labels, then slicing will still work as expected, by selecting labels which rank between the two: - -``` -s.sort_index() -``` - -
-
-

Let's visualize it! 🎥

-
- -
-
-
- -``` -s.sort_index().loc[1:6] -``` - -
-
-

Let's visualize it! 🎥

-
- -
-
-
- -However, if at least one of the two is absent and the index is not sorted, an error will be raised (since doing otherwise would be computationally expensive, as well as potentially ambiguous for mixed-type indexes). For instance, in the above example, `s.loc[1:6]` would raise `KeyError`. - -``` -s = pd.Series(list('abcdef'), index=[0, 3, 2, 5, 4, 2]) -s.loc[3:5] -``` - -
-
-

Let's visualize it! 🎥

-
- -
-
-
- -Also, if the index has duplicate labels and either the start or the stop label is duplicated, an error will be raised. For instance, in the above example, `s.loc[2:5]` would raise a `KeyError`. - -### Selection by position - -```{warning} -Whether a copy or a reference is returned for a setting operation, may depend on the context. This is sometimes called `chained assignment` and should be avoided. -``` - -Pandas provides a suite of methods in order to get purely integer-based indexing. The semantics follow closely Python and NumPy slicing. These are 0-based indexing. When slicing, the start bound is included, while the upper bound is excluded. Trying to use a non-integer, even a valid label will raise an `IndexError`. - -The `.iloc` attribute is the primary access method. The following are valid inputs: - -- An integer e.g. `5`. - -- A list or array of integers `[4, 3, 0]`. - -- A slice object with ints `1:7`. - -- A boolean array. - -- A `callable`. - -``` -s1 = pd.Series(np.random.randn(5), index=list(range(0, 10, 2))) -s1 -s1.iloc[:3] -``` - -
-
-

Let's visualize it! 🎥

-
- -
-
-
- -``` -s1.iloc[3] -``` - -
-
-

Let's visualize it! 🎥

-
- -
-
-
- -Note that setting works as well: - -``` -s1.iloc[:3] = 0 -s1 -``` - -
-
-

Let's visualize it! 🎥

-
- -
-
-
- -With a DataFrame,Select via integer slicing: - -``` -df1 = pd.DataFrame(np.random.randn(6, 4), - index=list(range(0, 12, 2)), - columns=list(range(0, 8, 2))) -df1 -df1.iloc[:3] -``` - -
-
-

Let's visualize it! 🎥

-
- -
-
-
- - -``` -df1.iloc[1:5, 2:4] -``` - -
-
-

Let's visualize it! 🎥

-
- -
-
-
- -Select via integer list: - -``` -df1.iloc[[1, 3, 5], [1, 3]] -``` - -
-
-

Let's visualize it! 🎥

-
- -
-
-
- -``` -df1.iloc[1:3, :] -``` - -
-
-

Let's visualize it! 🎥

-
- -
-
-
- -``` -df1.iloc[:, 1:3] -``` - -
-
-

Let's visualize it! 🎥

-
- -
-
-
- -``` -df1.iloc[1, 1] # this is also equivalent to ``df1.iat[1,1]`` -``` - -
-
-

Let's visualize it! 🎥

-
- -
-
-
- -For getting a cross-section using an integer position (equiv to `df.xs(1)`): - -``` -df1.iloc[1] -``` - -
-
-

Let's visualize it! 🎥

-
- -
-
-
- -Out-of-range slice indexes are handled gracefully just as in Python/NumPy. - -```{code-cell} -x = list('abcdef') # these are allowed in Python/NumPy. -x -``` - -```{code-cell} -x[4:10] -``` - -```{code-cell} -x[8:10] -``` - -```{code-cell} -s = pd.Series(x) -s -``` - -``` -s.iloc[4:10] -``` - -
-
-

Let's visualize it! 🎥

-
- -
-
-
- -```{code-cell} -s.iloc[8:10] -``` - -Note that using slices that go out of bounds can result in an empty axis (e.g. an empty DataFrame being returned). - -```{code-cell} -dfl = pd.DataFrame(np.random.randn(5, 2), columns=list('AB')) -``` - -``` -dfl.iloc[:, 2:3] -``` - -
-
-

Let's visualize it! 🎥

-
- -
-
-
- -``` -dfl.iloc[:, 1:3] -``` - -
-
-

Let's visualize it! 🎥

-
- -
-
-
- -``` -dfl.iloc[4:6] -``` - -
-
-

Let's visualize it! 🎥

-
- -
-
-
- -A single indexer that is out of bounds will raise an `IndexError`. A list of indexers where any element is out of bounds will raise an `IndexError`. - -```{code-cell} -:tags: ["raises-exception"] -dfl.iloc[[4, 5, 6]] -``` - -```{code-cell} -:tags: ["raises-exception"] -dfl.iloc[:, 4] -``` - -### Selection by callable - -`.loc`, `.iloc`, and also `[]` indexing can accept a `callable` as indexer. The `callable` must be a function with one argument (the calling Series or DataFrame) that returns valid output for indexing. - - -``` -df1 = pd.DataFrame(np.random.randn(6, 4), - index=list('abcdef'), - columns=list('ABCD')) -df1 -df1.loc[lambda df: df['A'] > 0, :] -``` - -
-
-

Let's visualize it! 🎥

-
- -
-
-
- -``` -df1.loc[:, lambda df: ['A', 'B']] -``` - -
-
-

Let's visualize it! 🎥

-
- -
-
-
- -``` -df1.iloc[:, lambda df: [0, 1]] -``` - -
-
-

Let's visualize it! 🎥

-
- -
-
-
- -``` -df1[lambda df: df.columns[0]] -``` - -
-
-

Let's visualize it! 🎥

-
- -
-
-
- -You can use callable indexing in `Series`. - -``` -df1['A'].loc[lambda s: s > 0] -``` - -
-
-

Let's visualize it! 🎥

-
- -
-
-
- -### Combining positional and label-based indexing - -If you wish to get the 0th and the 2nd elements from the index in the `'A'` column, you can do: - -``` -dfd = pd.DataFrame({'A': [1, 2, 3], - 'B': [4, 5, 6]}, - index=list('abc')) -dfd -dfd.loc[dfd.index[[0, 2]], 'A'] -``` - -
-
-

Let's visualize it! 🎥

-
- -
-
-
- -This can also be expressed using `.iloc`, by explicitly getting locations on the indexers, and using positional indexing to select things. - -``` -dfd.iloc[[0, 2], dfd.columns.get_loc('A')] -``` - -
-
-

Let's visualize it! 🎥

-
- -
-
-
- -For getting multiple indexers, using `.get_indexer`: - -``` -dfd.iloc[[0, 2], dfd.columns.get_indexer(['A', 'B'])] -``` - -
-
-

Let's visualize it! 🎥

-
- -
-
-
- -## Combining datasets: concat, merge and join - -### concat - -- Concatenate Pandas objects along a particular axis. - -- Allows optional set logic along the other axes. - -- Can also add a layer of hierarchical indexing on the concatenation axis, which may be useful if the labels are the same (or overlapping) on the passed axis number. - -For example: - -Combine two `Series`. - -```{code-cell} -s1 = pd.Series(['a', 'b']) -s2 = pd.Series(['c', 'd']) -pd.concat([s1, s2]) -``` - -Clear the existing index and reset it in the result by setting the `ignore_index` option to `True`. - -```{code-cell} -pd.concat([s1, s2], ignore_index=True) -``` - -Add a hierarchical index at the outermost level of the data with the `keys` option. - -```{code-cell} -pd.concat([s1, s2], keys=['s1', 's2']) -``` - -Label the index keys you create with the `names` option. - -```{code-cell} -pd.concat([s1, s2], keys=['s1', 's2'], - names=['Series name', 'Row ID']) -``` - -Combine two `DataFrame` objects with identical columns. - -```{code-cell} -df1 = pd.DataFrame([['a', 1], ['b', 2]], - columns=['letter', 'number']) -df1 -``` - -```{code-cell} -df2 = pd.DataFrame([['c', 3], ['d', 4]], - columns=['letter', 'number']) -df2 -``` - -```{code-cell} -pd.concat([df1, df2]) -``` - -Combine `DataFrame` objects with overlapping columns and return everything. Columns outside the intersection will be filled with `NaN` values. - -```{code-cell} -df3 = pd.DataFrame([['c', 3, 'cat'], ['d', 4, 'dog']], - columns=['letter', 'number', 'animal']) -df3 -``` - -```{code-cell} -pd.concat([df1, df3], sort=False) -``` - -Combine DataFrame objects with overlapping columns and return only those that are shared by passing inner to the join keyword argument. - -```{code-cell} -pd.concat([df1, df3], join="inner") -``` - -Combine `DataFrame` objects horizontally along the x-axis by passing in `axis=1`. - -```{code-cell} -df4 = pd.DataFrame([['bird', 'polly'], ['monkey', 'george']], - columns=['animal', 'name']) -pd.concat([df1, df4], axis=1) -``` - -Prevent the result from including duplicate index values with the `verify_integrity` option. - -```{code-cell} -df5 = pd.DataFrame([1], index=['a']) -df5 -``` - -```{code-cell} -df6 = pd.DataFrame([2], index=['a']) -df6 -``` - -```{code-cell} -:tags: ["raises-exception"] -pd.concat([df5, df6], verify_integrity=True) -``` - -Append a single row to the end of a `DataFrame` object. - -```{code-cell} -df7 = pd.DataFrame({'a': 1, 'b': 2}, index=[0]) -df7 -``` - -```{code-cell} -new_row = pd.Series({'a': 3, 'b': 4}) -new_row -``` - -```{code-cell} -pd.concat([df7, new_row.to_frame().T], ignore_index=True) -``` - -```{note} -`append()` has been deprecated since version 1.4.0: Use `concat()` instead. -``` - -### merge - -- Merge DataFrame or named Series objects with a database-style join. - -- A named Series object is treated as a DataFrame with a single named column. - -- The join is done on columns or indexes. If joining columns on columns, the DataFrame indexes will be ignored. Otherwise if joining indexes on indexes or indexes on a column or columns, the index will be passed on. When performing a cross-merge, no column specifications to merge on are allowed. - -```{warning} -If both key columns contain rows where the key is a null value, those rows will be matched against each other. This is different from usual SQL join behaviour and can lead to unexpected results. -``` - -For example: - -```python -df1 = pd.DataFrame({'lkey': ['foo', 'bar', 'baz', 'foo'], - 'value': [1, 2, 3, 5]}) -df2 = pd.DataFrame({'rkey': ['foo', 'bar', 'baz', 'foo'], - 'value': [5, 6, 7, 8]}) -``` - -Merge DataFrames `df1` and `df2` with specified left and right suffixes appended to any overlapping columns. - -``` -df1.merge(df2, left_on='lkey', right_on='rkey', suffixes=('_left', '_right')) -``` - -
-
-

Let's visualize it! 🎥

-
- -
-
-
- -Merge DataFrames `df1` and `df2`, but raise an exception if the DataFrames have any overlapping columns. - -```{code-cell} -:tags: ["raises-exception"] -df1.merge(df2, left_on='lkey', right_on='rkey', suffixes=(False, False)) -``` - -Using `how` parameter decide the type of merge to be performed. - -``` -df1 = pd.DataFrame({'a': ['foo', 'bar'], 'b': [1, 2]}) -df2 = pd.DataFrame({'a': ['foo', 'baz'], 'c': [3, 4]}) -``` - -``` -df1.merge(df2, how='inner', on='a') -``` - -
-
-

Let's visualize it! 🎥

-
- -
-
-
- -``` -df1.merge(df2, how='left', on='a') -``` - -
-
-

Let's visualize it! 🎥

-
- -
-
-
- -``` -df1 = pd.DataFrame({'left': ['foo', 'bar']}) -df2 = pd.DataFrame({'right': [7, 8]}) -``` - -``` -df1.merge(df2, how='cross') -``` - -
-
-

Let's visualize it! 🎥

-
- -
-
-
- -### join - -- Join columns of another DataFrame. - -- Join columns with other DataFrame either on index or on a key column. Efficiently join multiple DataFrame objects by index at once by passing a list. - -For example: - -```{code-cell} -df = pd.DataFrame({'key': ['K0', 'K1', 'K2', 'K3', 'K4', 'K5'], - 'A': ['A0', 'A1', 'A2', 'A3', 'A4', 'A5']}) -``` - -```{code-cell} -other = pd.DataFrame({'key': ['K0', 'K1', 'K2'], - 'B': ['B0', 'B1', 'B2']}) -``` - -Join DataFrames using their indexes. - -``` -df.join(other, lsuffix='_caller', rsuffix='_other') -``` - -
-
-

Let's visualize it! 🎥

-
- -
-
-
- -If we want to join using the `key` columns, we need to set `key` to be the index in both `df` and `other`. The joined DataFrame will have `key` as its index. - -``` -df.set_index('key').join(other.set_index('key')) -``` - -
-
-

Let's visualize it! 🎥

-
- -
-
-
- -Another option to join using the key columns is to use the `on` parameter. `DataFrame.join` always uses `other`’s index but we can use any column in `df`. This method preserves the original DataFrame’s index in the result. - -```{code-cell} -df.join(other.set_index('key'), on='key') -``` - -Using non-unique key values shows how they are matched. - -```{code-cell} -df = pd.DataFrame({'key': ['K0', 'K1', 'K1', 'K3', 'K0', 'K1'], - 'A': ['A0', 'A1', 'A2', 'A3', 'A4', 'A5']}) -df -``` - -```{code-cell} -df.join(other.set_index('key'), on='key', validate='m:1') -``` - -## Aggregation and grouping - -Group `DataFrame` using a mapper or by a `Series` of columns. - -A `groupby` operation involves some combination of splitting the object, applying a function, and combining the results. This can be used to group large amounts of data and compute operations on these groups. - -For example: - -``` -df = pd.DataFrame({'Animal': ['Falcon', 'Falcon', - 'Parrot', 'Parrot'], - 'Max Speed': [380., 370., 24., 26.]}) -df -df.groupby(['Animal']).mean() -``` - -
-
-

Let's visualize it! 🎥

-
- -
-
-
- -### Hierarchical Indexes - -################# - -We can `groupby` different levels of a hierarchical index using the `level` parameter: - -``` -arrays = [['Falcon', 'Falcon', 'Parrot', 'Parrot'], - ['Captive', 'Wild', 'Captive', 'Wild']] -index = pd.MultiIndex.from_arrays(arrays, names=('Animal', 'Type')) -df = pd.DataFrame({'Max Speed': [390., 350., 30., 20.]}, - index=index) -df.groupby(level=0).mean() -``` - -
-
-

Let's visualize it! 🎥

-
- -
-
-
- -``` -df.groupby(level="Type").mean() -``` - -
-
-

Let's visualize it! 🎥

-
- -
-
-
- -We can also choose to include NA in group keys or not by setting `dropna` parameter, the default setting is `True`. - -``` -l = [[1, 2, 3], [1, None, 4], [2, 1, 3], [1, 2, 2]] -df = pd.DataFrame(l, columns=["a", "b", "c"]) -df.groupby(by=["b"]).sum() -``` - -
-
-

Let's visualize it! 🎥

-
- -
-
-
- -``` -df.groupby(by=["b"], dropna=False).sum() -``` - -
-
-

Let's visualize it! 🎥

-
- -
-
-
- -``` -l = [["a", 12, 12], [None, 12.3, 33.], ["b", 12.3, 123], ["a", 1, 1]] -df = pd.DataFrame(l, columns=["a", "b", "c"]) -df.groupby(by="a").sum() -``` - -
-
-

Let's visualize it! 🎥

-
- -
-
-
- -``` -df.groupby(by="a", dropna=False).sum() -``` - -
-
-

Let's visualize it! 🎥

-
- -
-
-
- -When using `.apply()`, use `group_keys` to include or exclude the group keys. The `group_keys` argument defaults to `True` (include). - -```{code-cell} -df = pd.DataFrame({'Animal': ['Falcon', 'Falcon', - 'Parrot', 'Parrot'], - 'Max Speed': [380., 370., 24., 26.]}) -df.groupby("Animal", group_keys=True).apply(lambda x: x) -``` - -```{code-cell} -df.groupby("Animal", group_keys=False).apply(lambda x: x) -``` - -## Pivot table - -Create a spreadsheet-style pivot table as a DataFrame. - -The levels in the pivot table will be stored in MultiIndex objects (hierarchical indexes) on the index and columns of the result DataFrame. - -```{code-cell} -df = pd.DataFrame({"A": ["foo", "foo", "foo", "foo", "foo", - "bar", "bar", "bar", "bar"], - "B": ["one", "one", "one", "two", "two", - "one", "one", "two", "two"], - "C": ["small", "large", "large", "small", - "small", "large", "small", "small", - "large"], - "D": [1, 2, 2, 3, 3, 4, 5, 6, 7], - "E": [2, 4, 5, 5, 6, 6, 8, 9, 9]}) -df -``` - -This first example aggregates values by taking the sum. - -```{code-cell} -table = pd.pivot_table(df, values='D', index=['A', 'B'], - columns=['C'], aggfunc=np.sum) -table -``` - -We can also fill in missing values using the `fill_value` parameter. - -```{code-cell} -table = pd.pivot_table(df, values='D', index=['A', 'B'], - columns=['C'], aggfunc=np.sum, fill_value=0) -table -``` - -The next example aggregates by taking the mean across multiple columns. - -```{code-cell} -table = pd.pivot_table(df, values=['D', 'E'], index=['A', 'C'], - aggfunc={'D': np.mean, - 'E': np.mean}) -table -``` - -We can also calculate multiple types of aggregations for any given value column. - -```{code-cell} -table = pd.pivot_table(df, values=['D', 'E'], index=['A', 'C'], - aggfunc={'D': np.mean, - 'E': [min, max, np.mean]}) -table -``` - -## High-performance Pandas: eval() and query() - -### eval() - -Evaluate a string describing operations on DataFrame columns. - -Operates on columns only, not specific rows or elements. This allows `eval` to run arbitrary code, which can make you vulnerable to code injection if you pass user input to this function. - -For example: - -```{code-cell} -df = pd.DataFrame({'A': range(1, 6), 'B': range(10, 0, -2)}) -df -``` - -```{code-cell} -df.eval('A + B') -``` - -The assignment is allowed though by default the original `DataFrame` is not modified. - -```{code-cell} -df.eval('C = A + B') -``` - -```{code-cell} -df -``` - -Use `inplace=True` to modify the original DataFrame. - -```{code-cell} -df.eval('C = A + B', inplace=True) -df -``` - -Multiple columns can be assigned using multi-line expressions: - -```{code-cell} -df.eval( - ''' - C = A + B - D = A - B - ''' -) -``` - -### query() - -Query the columns of a DataFrame with a boolean expression. - -For example: - -```{code-cell} -df = pd.DataFrame({ - 'A': range(1, 6), - 'B': range(10, 0, -2), - 'C C': range(10, 5, -1) -}) -df -``` - -```{code-cell} -df.query('A > B') -``` - -The previous expression is equivalent to - -```{code-cell} -df[df.A > df.B] -``` - -For columns with spaces in their name, you can use backtick quoting. - -```{code-cell} -df.query('B == `C C`') -``` - -The previous expression is equivalent to - -```{code-cell} -df[df.B == df['C C']] -``` -
-
-

Let's visualize it! 🎥

-
- -
-
-
-## Your turn! 🚀 - -### Processing image data - -Recently, very powerful AI models have been developed that allow us to understand images. There are many tasks that can be solved using pre-trained neural networks, or cloud services. Some examples include: - -- **Image Classification**, can help you categorize the image into one of the pre-defined classes. You can easily train your own image classifiers using services such as [Custom Vision](https://azure.microsoft.com/services/cognitive-services/custom-vision-service/?WT.mc_id=academic-77958-bethanycheum) -- **Object Detection** to detect different objects in the image. Services such as [computer vision](https://azure.microsoft.com/services/cognitive-services/computer-vision/?WT.mc_id=academic-77958-bethanycheum) can detect a number of common objects, and you can train [Custom Vision](https://azure.microsoft.com/services/cognitive-services/custom-vision-service/?WT.mc_id=academic-77958-bethanycheum) model to detect some specific objects of interest. -- **Face Detection**, including Age, Gender and Emotion detection. This can be done via [Face API](https://azure.microsoft.com/services/cognitive-services/face/?WT.mc_id=academic-77958-bethanycheum). - -All those cloud services can be called using [Python SDKs](https://docs.microsoft.com/samples/azure-samples/cognitive-services-python-sdk-samples/cognitive-services-python-sdk-samples/?WT.mc_id=academic-77958-bethanycheum), and thus can be easily incorporated into your data exploration workflow. - -Here are some examples of exploring data from Image data sources: - -- In the blog post [How to Learn Data Science without Coding](https://soshnikov.com/azure/how-to-learn-data-science-without-coding/) we explore Instagram photos, trying to understand what makes people give more likes to a photo. We first extract as much information from pictures as possible using [computer vision](https://azure.microsoft.com/services/cognitive-services/computer-vision/?WT.mc_id=academic-77958-bethanycheum), and then use [Azure Machine Learning AutoML](https://docs.microsoft.com/azure/machine-learning/concept-automated-ml/?WT.mc_id=academic-77958-bethanycheum) to build the interpretable model. -- In [Facial Studies Workshop](https://github.com/CloudAdvocacy/FaceStudies) we use [Face API](https://azure.microsoft.com/services/cognitive-services/face/?WT.mc_id=academic-77958-bethanycheum) to extract emotions from people on photographs from events, in order to try to understand what makes people happy. - -### Assignment - -[Perform more detailed data study for the challenges above](../../assignments/data-science/data-processing-in-python.md) - -## Self study - -In this chapter, we've covered many of the basics of using Pandas effectively for data analysis. Still, much has been omitted from our discussion. To learn more about Pandas, we recommend the following resources: - -- [Pandas online documentation](http://pandas.pydata.org/): This is the go-to source for complete documentation of the package. While the examples in the documentation tend to be small generated datasets, the description of the options is complete and generally very useful for understanding the use of various functions. - -- [*Python for Data Analysis*](http://shop.oreilly.com/product/0636920023784.do) Written by Wes McKinney (the original creator of Pandas), this book contains much more detail on the Pandas package than we had room for in this chapter. In particular, he takes a deep dive into tools for time series, which were his bread and butter as a financial consultant. The book also has many entertaining examples of applying Pandas to gain insight from real-world datasets. Keep in mind, though, that the book is now several years old, and the Pandas package has quite a few new features that this book does not cover (but be on the lookout for a new edition in 2017). - -- [Stack Overflow](http://stackoverflow.com/questions/tagged/pandas): Pandas has so many users that any question you have has likely been asked and answered on Stack Overflow. Using Pandas is a case where some Google-Fu is your best friend. Simply go to your favorite search engine and type in the question, problem, or error you're coming across–more than likely you'll find your answer on a Stack Overflow page. - -- [Pandas on PyVideo](http://pyvideo.org/search?q=pandas): From PyCon to SciPy to PyData, many conferences have featured tutorials from Pandas developers and power users. The PyCon tutorials in particular tend to be given by very well-vetted presenters. - -Using these resources, combined with the walk-through given in this chapter, my hope is that you'll be poised to use Pandas to tackle any data analysis problem you come across! - -## Acknowledgments - -Thanks for [Pandas user guide](https://pandas.pydata.org/docs/user_guide/index.html). It contributes the majority of the content in this chapter. diff --git a/_sources/data-science/working-with-data/pandas/advanced-pandas-techniques.ipynb b/_sources/data-science/working-with-data/pandas/advanced-pandas-techniques.ipynb new file mode 100644 index 0000000000..4892ca8562 --- /dev/null +++ b/_sources/data-science/working-with-data/pandas/advanced-pandas-techniques.ipynb @@ -0,0 +1,5054 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "aa35406e-c73d-49f1-aa84-5cc5ced6c294", + "metadata": {}, + "source": [ + "# Advanced Pandas Techniques" + ] + }, + { + "cell_type": "markdown", + "id": "64ccbdd4-f4c6-4893-80e9-7d87595020d2", + "metadata": {}, + "source": [ + "## Overview\n", + "\n", + "In this section, we'll continue to introduce combining datasets: concat, merge and join along with data aggregation and grouping." + ] + }, + { + "cell_type": "markdown", + "id": "87f36a89-87fd-400d-894e-9332245bc9e5", + "metadata": {}, + "source": [ + "Import NumPy and load Pandas into your namespace:" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "id": "b221a566-8a04-4689-8eb1-c266ede5a264", + "metadata": {}, + "outputs": [], + "source": [ + "# Install the necessary dependencies\n", + "import os\n", + "import sys\n", + "!{sys.executable} -m pip install --quiet jupyterlab_myst ipython\n", + "import numpy as np\n", + "import pandas as pd" + ] + }, + { + "cell_type": "markdown", + "id": "9edbb0f3", + "metadata": {}, + "source": [ + "## Combining datasets: concat, merge and join\n", + "\n", + "### concat\n", + "\n", + "- Concatenate Pandas objects along a particular axis.\n", + "\n", + "- Allows optional set logic along the other axes.\n", + "\n", + "- Can also add a layer of hierarchical indexing on the concatenation axis, which may be useful if the labels are the same (or overlapping) on the passed axis number.\n", + "\n", + "For example:\n", + "\n", + "Combine two `Series`." + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "b08dcc94", + "metadata": { + "attributes": { + "classes": [ + "code-cell" + ], + "id": "" + } + }, + "outputs": [ + { + "data": { + "text/plain": [ + "0 a\n", + "1 b\n", + "0 c\n", + "1 d\n", + "dtype: object" + ] + }, + "execution_count": 2, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "s1 = pd.Series(['a', 'b'])\n", + "s2 = pd.Series(['c', 'd'])\n", + "pd.concat([s1, s2])" + ] + }, + { + "cell_type": "markdown", + "id": "b1c47e7c", + "metadata": {}, + "source": [ + "Clear the existing index and reset it in the result by setting the `ignore_index` option to `True`." + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "32049abb", + "metadata": { + "attributes": { + "classes": [ + "code-cell" + ], + "id": "" + } + }, + "outputs": [ + { + "data": { + "text/plain": [ + "0 a\n", + "1 b\n", + "2 c\n", + "3 d\n", + "dtype: object" + ] + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "pd.concat([s1, s2], ignore_index=True)" + ] + }, + { + "cell_type": "markdown", + "id": "31f73f90", + "metadata": {}, + "source": [ + "Add a hierarchical index at the outermost level of the data with the `keys` option." + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "d5b95507", + "metadata": { + "attributes": { + "classes": [ + "code-cell" + ], + "id": "" + } + }, + "outputs": [ + { + "data": { + "text/plain": [ + "s1 0 a\n", + " 1 b\n", + "s2 0 c\n", + " 1 d\n", + "dtype: object" + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "pd.concat([s1, s2], keys=['s1', 's2'])" + ] + }, + { + "cell_type": "markdown", + "id": "9c618012", + "metadata": {}, + "source": [ + "Label the index keys you create with the `names` option." + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "6d54830d", + "metadata": { + "attributes": { + "classes": [ + "code-cell" + ], + "id": "" + } + }, + "outputs": [ + { + "data": { + "text/plain": [ + "Series name Row ID\n", + "s1 0 a\n", + " 1 b\n", + "s2 0 c\n", + " 1 d\n", + "dtype: object" + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "pd.concat([s1, s2], keys=['s1', 's2'],\n", + " names=['Series name', 'Row ID'])" + ] + }, + { + "cell_type": "markdown", + "id": "31fac69f", + "metadata": {}, + "source": [ + "Combine two `DataFrame` objects with identical columns." + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "id": "fec72294", + "metadata": { + "attributes": { + "classes": [ + "code-cell" + ], + "id": "" + } + }, + "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", + "
letternumber
0a1
1b2
\n", + "
" + ], + "text/plain": [ + " letter number\n", + "0 a 1\n", + "1 b 2" + ] + }, + "execution_count": 6, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df1 = pd.DataFrame([['a', 1], ['b', 2]],\n", + " columns=['letter', 'number'])\n", + "df1" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "id": "80a1f5b0", + "metadata": { + "attributes": { + "classes": [ + "code-cell" + ], + "id": "" + } + }, + "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", + "
letternumber
0c3
1d4
\n", + "
" + ], + "text/plain": [ + " letter number\n", + "0 c 3\n", + "1 d 4" + ] + }, + "execution_count": 7, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df2 = pd.DataFrame([['c', 3], ['d', 4]],\n", + " columns=['letter', 'number'])\n", + "df2" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "id": "4e9e65f6", + "metadata": { + "attributes": { + "classes": [ + "code-cell" + ], + "id": "" + } + }, + "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", + "
letternumber
0a1
1b2
0c3
1d4
\n", + "
" + ], + "text/plain": [ + " letter number\n", + "0 a 1\n", + "1 b 2\n", + "0 c 3\n", + "1 d 4" + ] + }, + "execution_count": 8, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "pd.concat([df1, df2])" + ] + }, + { + "cell_type": "markdown", + "id": "49d878b5", + "metadata": {}, + "source": [ + "Combine `DataFrame` objects with overlapping columns and return everything. Columns outside the intersection will be filled with `NaN` values." + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "id": "f50e8ede", + "metadata": { + "attributes": { + "classes": [ + "code-cell" + ], + "id": "" + } + }, + "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", + "
letternumberanimal
0c3cat
1d4dog
\n", + "
" + ], + "text/plain": [ + " letter number animal\n", + "0 c 3 cat\n", + "1 d 4 dog" + ] + }, + "execution_count": 9, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df3 = pd.DataFrame([['c', 3, 'cat'], ['d', 4, 'dog']],\n", + " columns=['letter', 'number', 'animal'])\n", + "df3" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "id": "9def1cdd", + "metadata": { + "attributes": { + "classes": [ + "code-cell" + ], + "id": "" + } + }, + "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", + "
letternumberanimal
0a1NaN
1b2NaN
0c3cat
1d4dog
\n", + "
" + ], + "text/plain": [ + " letter number animal\n", + "0 a 1 NaN\n", + "1 b 2 NaN\n", + "0 c 3 cat\n", + "1 d 4 dog" + ] + }, + "execution_count": 10, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "pd.concat([df1, df3], sort=False)" + ] + }, + { + "cell_type": "markdown", + "id": "6f2fcb0c", + "metadata": {}, + "source": [ + "Combine DataFrame objects with overlapping columns and return only those that are shared by passing inner to the join keyword argument." + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "id": "ef69d51c", + "metadata": { + "attributes": { + "classes": [ + "code-cell" + ], + "id": "" + } + }, + "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", + "
letternumber
0a1
1b2
0c3
1d4
\n", + "
" + ], + "text/plain": [ + " letter number\n", + "0 a 1\n", + "1 b 2\n", + "0 c 3\n", + "1 d 4" + ] + }, + "execution_count": 11, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "pd.concat([df1, df3], join=\"inner\")" + ] + }, + { + "cell_type": "markdown", + "id": "0fda5cf5", + "metadata": {}, + "source": [ + "Combine `DataFrame` objects horizontally along the x-axis by passing in `axis=1`." + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "id": "2159161d", + "metadata": { + "attributes": { + "classes": [ + "code-cell" + ], + "id": "" + } + }, + "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", + "
letternumberanimalname
0a1birdpolly
1b2monkeygeorge
\n", + "
" + ], + "text/plain": [ + " letter number animal name\n", + "0 a 1 bird polly\n", + "1 b 2 monkey george" + ] + }, + "execution_count": 12, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df4 = pd.DataFrame([['bird', 'polly'], ['monkey', 'george']],\n", + " columns=['animal', 'name'])\n", + "pd.concat([df1, df4], axis=1)" + ] + }, + { + "cell_type": "markdown", + "id": "adb11ea6", + "metadata": {}, + "source": [ + "Prevent the result from including duplicate index values with the `verify_integrity` option." + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "id": "45bea28a", + "metadata": { + "attributes": { + "classes": [ + "code-cell" + ], + "id": "" + } + }, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
0
a1
\n", + "
" + ], + "text/plain": [ + " 0\n", + "a 1" + ] + }, + "execution_count": 13, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df5 = pd.DataFrame([1], index=['a'])\n", + "df5" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "id": "db871526", + "metadata": { + "attributes": { + "classes": [ + "code-cell" + ], + "id": "" + } + }, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
0
a2
\n", + "
" + ], + "text/plain": [ + " 0\n", + "a 2" + ] + }, + "execution_count": 14, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df6 = pd.DataFrame([2], index=['a'])\n", + "df6" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "id": "1ab6b3b0", + "metadata": { + "attributes": { + "classes": [ + "code-cell" + ], + "id": "" + }, + "tags": [ + "raises-exception" + ] + }, + "outputs": [ + { + "ename": "ValueError", + "evalue": "Indexes have overlapping values: Index(['a'], dtype='object')", + "output_type": "error", + "traceback": [ + "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[1;31mValueError\u001b[0m Traceback (most recent call last)", + "Cell \u001b[1;32mIn[15], line 1\u001b[0m\n\u001b[1;32m----> 1\u001b[0m \u001b[43mpd\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mconcat\u001b[49m\u001b[43m(\u001b[49m\u001b[43m[\u001b[49m\u001b[43mdf5\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mdf6\u001b[49m\u001b[43m]\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mverify_integrity\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43;01mTrue\u001b[39;49;00m\u001b[43m)\u001b[49m\n", + "File \u001b[1;32mF:\\anaconda\\envs\\py39\\lib\\site-packages\\pandas\\core\\reshape\\concat.py:393\u001b[0m, in \u001b[0;36mconcat\u001b[1;34m(objs, axis, join, ignore_index, keys, levels, names, verify_integrity, sort, copy)\u001b[0m\n\u001b[0;32m 378\u001b[0m copy \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;01mFalse\u001b[39;00m\n\u001b[0;32m 380\u001b[0m op \u001b[38;5;241m=\u001b[39m _Concatenator(\n\u001b[0;32m 381\u001b[0m objs,\n\u001b[0;32m 382\u001b[0m axis\u001b[38;5;241m=\u001b[39maxis,\n\u001b[1;32m (...)\u001b[0m\n\u001b[0;32m 390\u001b[0m sort\u001b[38;5;241m=\u001b[39msort,\n\u001b[0;32m 391\u001b[0m )\n\u001b[1;32m--> 393\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43mop\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mget_result\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\n", + "File \u001b[1;32mF:\\anaconda\\envs\\py39\\lib\\site-packages\\pandas\\core\\reshape\\concat.py:667\u001b[0m, in \u001b[0;36m_Concatenator.get_result\u001b[1;34m(self)\u001b[0m\n\u001b[0;32m 665\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m obj \u001b[38;5;129;01min\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mobjs:\n\u001b[0;32m 666\u001b[0m indexers \u001b[38;5;241m=\u001b[39m {}\n\u001b[1;32m--> 667\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m ax, new_labels \u001b[38;5;129;01min\u001b[39;00m \u001b[38;5;28menumerate\u001b[39m(\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mnew_axes\u001b[49m):\n\u001b[0;32m 668\u001b[0m \u001b[38;5;66;03m# ::-1 to convert BlockManager ax to DataFrame ax\u001b[39;00m\n\u001b[0;32m 669\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m ax \u001b[38;5;241m==\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mbm_axis:\n\u001b[0;32m 670\u001b[0m \u001b[38;5;66;03m# Suppress reindexing on concat axis\u001b[39;00m\n\u001b[0;32m 671\u001b[0m \u001b[38;5;28;01mcontinue\u001b[39;00m\n", + "File \u001b[1;32mproperties.pyx:36\u001b[0m, in \u001b[0;36mpandas._libs.properties.CachedProperty.__get__\u001b[1;34m()\u001b[0m\n", + "File \u001b[1;32mF:\\anaconda\\envs\\py39\\lib\\site-packages\\pandas\\core\\reshape\\concat.py:698\u001b[0m, in \u001b[0;36m_Concatenator.new_axes\u001b[1;34m(self)\u001b[0m\n\u001b[0;32m 695\u001b[0m \u001b[38;5;129m@cache_readonly\u001b[39m\n\u001b[0;32m 696\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mnew_axes\u001b[39m(\u001b[38;5;28mself\u001b[39m) \u001b[38;5;241m-\u001b[39m\u001b[38;5;241m>\u001b[39m \u001b[38;5;28mlist\u001b[39m[Index]:\n\u001b[0;32m 697\u001b[0m ndim \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_get_result_dim()\n\u001b[1;32m--> 698\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m [\n\u001b[0;32m 699\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_get_concat_axis \u001b[38;5;28;01mif\u001b[39;00m i \u001b[38;5;241m==\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mbm_axis \u001b[38;5;28;01melse\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_get_comb_axis(i)\n\u001b[0;32m 700\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m i \u001b[38;5;129;01min\u001b[39;00m \u001b[38;5;28mrange\u001b[39m(ndim)\n\u001b[0;32m 701\u001b[0m ]\n", + "File \u001b[1;32mF:\\anaconda\\envs\\py39\\lib\\site-packages\\pandas\\core\\reshape\\concat.py:699\u001b[0m, in \u001b[0;36m\u001b[1;34m(.0)\u001b[0m\n\u001b[0;32m 695\u001b[0m \u001b[38;5;129m@cache_readonly\u001b[39m\n\u001b[0;32m 696\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mnew_axes\u001b[39m(\u001b[38;5;28mself\u001b[39m) \u001b[38;5;241m-\u001b[39m\u001b[38;5;241m>\u001b[39m \u001b[38;5;28mlist\u001b[39m[Index]:\n\u001b[0;32m 697\u001b[0m ndim \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_get_result_dim()\n\u001b[0;32m 698\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m [\n\u001b[1;32m--> 699\u001b[0m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_get_concat_axis\u001b[49m \u001b[38;5;28;01mif\u001b[39;00m i \u001b[38;5;241m==\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mbm_axis \u001b[38;5;28;01melse\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_get_comb_axis(i)\n\u001b[0;32m 700\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m i \u001b[38;5;129;01min\u001b[39;00m \u001b[38;5;28mrange\u001b[39m(ndim)\n\u001b[0;32m 701\u001b[0m ]\n", + "File \u001b[1;32mproperties.pyx:36\u001b[0m, in \u001b[0;36mpandas._libs.properties.CachedProperty.__get__\u001b[1;34m()\u001b[0m\n", + "File \u001b[1;32mF:\\anaconda\\envs\\py39\\lib\\site-packages\\pandas\\core\\reshape\\concat.py:762\u001b[0m, in \u001b[0;36m_Concatenator._get_concat_axis\u001b[1;34m(self)\u001b[0m\n\u001b[0;32m 757\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[0;32m 758\u001b[0m concat_axis \u001b[38;5;241m=\u001b[39m _make_concat_multiindex(\n\u001b[0;32m 759\u001b[0m indexes, \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mkeys, \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mlevels, \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mnames\n\u001b[0;32m 760\u001b[0m )\n\u001b[1;32m--> 762\u001b[0m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_maybe_check_integrity\u001b[49m\u001b[43m(\u001b[49m\u001b[43mconcat_axis\u001b[49m\u001b[43m)\u001b[49m\n\u001b[0;32m 764\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m concat_axis\n", + "File \u001b[1;32mF:\\anaconda\\envs\\py39\\lib\\site-packages\\pandas\\core\\reshape\\concat.py:770\u001b[0m, in \u001b[0;36m_Concatenator._maybe_check_integrity\u001b[1;34m(self, concat_index)\u001b[0m\n\u001b[0;32m 768\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m concat_index\u001b[38;5;241m.\u001b[39mis_unique:\n\u001b[0;32m 769\u001b[0m overlap \u001b[38;5;241m=\u001b[39m concat_index[concat_index\u001b[38;5;241m.\u001b[39mduplicated()]\u001b[38;5;241m.\u001b[39munique()\n\u001b[1;32m--> 770\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mValueError\u001b[39;00m(\u001b[38;5;124mf\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mIndexes have overlapping values: \u001b[39m\u001b[38;5;132;01m{\u001b[39;00moverlap\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m\"\u001b[39m)\n", + "\u001b[1;31mValueError\u001b[0m: Indexes have overlapping values: Index(['a'], dtype='object')" + ] + } + ], + "source": [ + "pd.concat([df5, df6], verify_integrity=True)" + ] + }, + { + "cell_type": "markdown", + "id": "90fc36d4", + "metadata": {}, + "source": [ + "Append a single row to the end of a `DataFrame` object." + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "id": "007c1ed6", + "metadata": { + "attributes": { + "classes": [ + "code-cell" + ], + "id": "" + } + }, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
ab
012
\n", + "
" + ], + "text/plain": [ + " a b\n", + "0 1 2" + ] + }, + "execution_count": 16, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df7 = pd.DataFrame({'a': 1, 'b': 2}, index=[0])\n", + "df7" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "id": "9dbaddff", + "metadata": { + "attributes": { + "classes": [ + "code-cell" + ], + "id": "" + } + }, + "outputs": [ + { + "data": { + "text/plain": [ + "a 3\n", + "b 4\n", + "dtype: int64" + ] + }, + "execution_count": 17, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "new_row = pd.Series({'a': 3, 'b': 4})\n", + "new_row" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "id": "ad2d1313", + "metadata": { + "attributes": { + "classes": [ + "code-cell" + ], + "id": "" + } + }, + "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", + "
ab
012
134
\n", + "
" + ], + "text/plain": [ + " a b\n", + "0 1 2\n", + "1 3 4" + ] + }, + "execution_count": 18, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "pd.concat([df7, new_row.to_frame().T], ignore_index=True)" + ] + }, + { + "cell_type": "markdown", + "id": "39223d1c", + "metadata": {}, + "source": [ + ":::{note}\n", + "`append()` has been deprecated since version 1.4.0: Use `concat()` instead. \n", + ":::\n", + "\n", + "### merge\n", + "\n", + "- Merge DataFrame or named Series objects with a database-style join.\n", + "\n", + "- A named Series object is treated as a DataFrame with a single named column.\n", + "\n", + "- The join is done on columns or indexes. If joining columns on columns, the DataFrame indexes will be ignored. Otherwise if joining indexes on indexes or indexes on a column or columns, the index will be passed on. When performing a cross-merge, no column specifications to merge on are allowed." + ] + }, + { + "cell_type": "markdown", + "id": "c1afc536-2209-4fa1-8d63-0b19c18c66c6", + "metadata": { + "attributes": { + "classes": [ + "warning" + ], + "id": "" + } + }, + "source": [ + "If both key columns contain rows where the key is a null value, those rows will be matched against each other. This is different from usual SQL join behaviour and can lead to unexpected results." + ] + }, + { + "cell_type": "markdown", + "id": "0f2ffec1", + "metadata": {}, + "source": [ + "For example:" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "id": "e223179b", + "metadata": {}, + "outputs": [], + "source": [ + "df1 = pd.DataFrame({'lkey': ['foo', 'bar', 'baz', 'foo'],\n", + " 'value': [1, 2, 3, 5]})\n", + "df2 = pd.DataFrame({'rkey': ['foo', 'bar', 'baz', 'foo'],\n", + " 'value': [5, 6, 7, 8]})" + ] + }, + { + "cell_type": "markdown", + "id": "ee9441ec", + "metadata": {}, + "source": [ + "Merge DataFrames `df1` and `df2` with specified left and right suffixes appended to any overlapping columns." + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "id": "e22da8fc", + "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", + "
lkeyvalue_leftrkeyvalue_right
0foo1foo5
1foo1foo8
2foo5foo5
3foo5foo8
4bar2bar6
5baz3baz7
\n", + "
" + ], + "text/plain": [ + " lkey value_left rkey value_right\n", + "0 foo 1 foo 5\n", + "1 foo 1 foo 8\n", + "2 foo 5 foo 5\n", + "3 foo 5 foo 8\n", + "4 bar 2 bar 6\n", + "5 baz 3 baz 7" + ] + }, + "execution_count": 20, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df1.merge(df2, left_on='lkey', right_on='rkey', suffixes=('_left', '_right'))" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "id": "6147bab8-4644-4a23-ba71-205573a1c3f9", + "metadata": { + "tags": [ + "hide-cell" + ] + }, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "
\n", + "
\n", + "

Let's visualize it! 🎥

\n", + "
\n", + " \n", + "
\n", + "
\n", + "
\n", + "\n", + "\n" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "from IPython.display import HTML\n", + "\n", + "display(\n", + " HTML(\n", + " \"\"\"\n", + "\n", + "\n", + "
\n", + "
\n", + "

Let's visualize it! 🎥

\n", + "
\n", + " \n", + "
\n", + "
\n", + "
\n", + "\n", + "\n", + "\"\"\"\n", + " )\n", + ")\n" + ] + }, + { + "cell_type": "markdown", + "id": "5112fc3a", + "metadata": {}, + "source": [ + "\n", + "Merge DataFrames `df1` and `df2`, but raise an exception if the DataFrames have any overlapping columns." + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "id": "3dea68f6", + "metadata": { + "attributes": { + "classes": [ + "code-cell" + ], + "id": "" + }, + "tags": [ + "raises-exception" + ] + }, + "outputs": [ + { + "ename": "ValueError", + "evalue": "columns overlap but no suffix specified: Index(['value'], dtype='object')", + "output_type": "error", + "traceback": [ + "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[1;31mValueError\u001b[0m Traceback (most recent call last)", + "Cell \u001b[1;32mIn[22], line 1\u001b[0m\n\u001b[1;32m----> 1\u001b[0m \u001b[43mdf1\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mmerge\u001b[49m\u001b[43m(\u001b[49m\u001b[43mdf2\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mleft_on\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[38;5;124;43mlkey\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mright_on\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[38;5;124;43mrkey\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43msuffixes\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43m(\u001b[49m\u001b[38;5;28;43;01mFalse\u001b[39;49;00m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;28;43;01mFalse\u001b[39;49;00m\u001b[43m)\u001b[49m\u001b[43m)\u001b[49m\n", + "File \u001b[1;32mF:\\anaconda\\envs\\py39\\lib\\site-packages\\pandas\\core\\frame.py:10490\u001b[0m, in \u001b[0;36mDataFrame.merge\u001b[1;34m(self, right, how, on, left_on, right_on, left_index, right_index, sort, suffixes, copy, indicator, validate)\u001b[0m\n\u001b[0;32m 10471\u001b[0m \u001b[38;5;129m@Substitution\u001b[39m(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124m\"\u001b[39m)\n\u001b[0;32m 10472\u001b[0m \u001b[38;5;129m@Appender\u001b[39m(_merge_doc, indents\u001b[38;5;241m=\u001b[39m\u001b[38;5;241m2\u001b[39m)\n\u001b[0;32m 10473\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mmerge\u001b[39m(\n\u001b[1;32m (...)\u001b[0m\n\u001b[0;32m 10486\u001b[0m validate: MergeValidate \u001b[38;5;241m|\u001b[39m \u001b[38;5;28;01mNone\u001b[39;00m \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;01mNone\u001b[39;00m,\n\u001b[0;32m 10487\u001b[0m ) \u001b[38;5;241m-\u001b[39m\u001b[38;5;241m>\u001b[39m DataFrame:\n\u001b[0;32m 10488\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01mpandas\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mcore\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mreshape\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mmerge\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m merge\n\u001b[1;32m> 10490\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43mmerge\u001b[49m\u001b[43m(\u001b[49m\n\u001b[0;32m 10491\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[43m,\u001b[49m\n\u001b[0;32m 10492\u001b[0m \u001b[43m \u001b[49m\u001b[43mright\u001b[49m\u001b[43m,\u001b[49m\n\u001b[0;32m 10493\u001b[0m \u001b[43m \u001b[49m\u001b[43mhow\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mhow\u001b[49m\u001b[43m,\u001b[49m\n\u001b[0;32m 10494\u001b[0m \u001b[43m \u001b[49m\u001b[43mon\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mon\u001b[49m\u001b[43m,\u001b[49m\n\u001b[0;32m 10495\u001b[0m \u001b[43m \u001b[49m\u001b[43mleft_on\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mleft_on\u001b[49m\u001b[43m,\u001b[49m\n\u001b[0;32m 10496\u001b[0m \u001b[43m \u001b[49m\u001b[43mright_on\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mright_on\u001b[49m\u001b[43m,\u001b[49m\n\u001b[0;32m 10497\u001b[0m \u001b[43m \u001b[49m\u001b[43mleft_index\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mleft_index\u001b[49m\u001b[43m,\u001b[49m\n\u001b[0;32m 10498\u001b[0m \u001b[43m \u001b[49m\u001b[43mright_index\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mright_index\u001b[49m\u001b[43m,\u001b[49m\n\u001b[0;32m 10499\u001b[0m \u001b[43m \u001b[49m\u001b[43msort\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43msort\u001b[49m\u001b[43m,\u001b[49m\n\u001b[0;32m 10500\u001b[0m \u001b[43m \u001b[49m\u001b[43msuffixes\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43msuffixes\u001b[49m\u001b[43m,\u001b[49m\n\u001b[0;32m 10501\u001b[0m \u001b[43m \u001b[49m\u001b[43mcopy\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mcopy\u001b[49m\u001b[43m,\u001b[49m\n\u001b[0;32m 10502\u001b[0m \u001b[43m \u001b[49m\u001b[43mindicator\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mindicator\u001b[49m\u001b[43m,\u001b[49m\n\u001b[0;32m 10503\u001b[0m \u001b[43m \u001b[49m\u001b[43mvalidate\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mvalidate\u001b[49m\u001b[43m,\u001b[49m\n\u001b[0;32m 10504\u001b[0m \u001b[43m \u001b[49m\u001b[43m)\u001b[49m\n", + "File \u001b[1;32mF:\\anaconda\\envs\\py39\\lib\\site-packages\\pandas\\core\\reshape\\merge.py:183\u001b[0m, in \u001b[0;36mmerge\u001b[1;34m(left, right, how, on, left_on, right_on, left_index, right_index, sort, suffixes, copy, indicator, validate)\u001b[0m\n\u001b[0;32m 168\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[0;32m 169\u001b[0m op \u001b[38;5;241m=\u001b[39m _MergeOperation(\n\u001b[0;32m 170\u001b[0m left_df,\n\u001b[0;32m 171\u001b[0m right_df,\n\u001b[1;32m (...)\u001b[0m\n\u001b[0;32m 181\u001b[0m validate\u001b[38;5;241m=\u001b[39mvalidate,\n\u001b[0;32m 182\u001b[0m )\n\u001b[1;32m--> 183\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43mop\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mget_result\u001b[49m\u001b[43m(\u001b[49m\u001b[43mcopy\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mcopy\u001b[49m\u001b[43m)\u001b[49m\n", + "File \u001b[1;32mF:\\anaconda\\envs\\py39\\lib\\site-packages\\pandas\\core\\reshape\\merge.py:885\u001b[0m, in \u001b[0;36m_MergeOperation.get_result\u001b[1;34m(self, copy)\u001b[0m\n\u001b[0;32m 881\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mleft, \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mright \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_indicator_pre_merge(\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mleft, \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mright)\n\u001b[0;32m 883\u001b[0m join_index, left_indexer, right_indexer \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_get_join_info()\n\u001b[1;32m--> 885\u001b[0m result \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_reindex_and_concat\u001b[49m\u001b[43m(\u001b[49m\n\u001b[0;32m 886\u001b[0m \u001b[43m \u001b[49m\u001b[43mjoin_index\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mleft_indexer\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mright_indexer\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mcopy\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mcopy\u001b[49m\n\u001b[0;32m 887\u001b[0m \u001b[43m\u001b[49m\u001b[43m)\u001b[49m\n\u001b[0;32m 888\u001b[0m result \u001b[38;5;241m=\u001b[39m result\u001b[38;5;241m.\u001b[39m__finalize__(\u001b[38;5;28mself\u001b[39m, method\u001b[38;5;241m=\u001b[39m\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_merge_type)\n\u001b[0;32m 890\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mindicator:\n", + "File \u001b[1;32mF:\\anaconda\\envs\\py39\\lib\\site-packages\\pandas\\core\\reshape\\merge.py:837\u001b[0m, in \u001b[0;36m_MergeOperation._reindex_and_concat\u001b[1;34m(self, join_index, left_indexer, right_indexer, copy)\u001b[0m\n\u001b[0;32m 834\u001b[0m left \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mleft[:]\n\u001b[0;32m 835\u001b[0m right \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mright[:]\n\u001b[1;32m--> 837\u001b[0m llabels, rlabels \u001b[38;5;241m=\u001b[39m \u001b[43m_items_overlap_with_suffix\u001b[49m\u001b[43m(\u001b[49m\n\u001b[0;32m 838\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mleft\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_info_axis\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mright\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_info_axis\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43msuffixes\u001b[49m\n\u001b[0;32m 839\u001b[0m \u001b[43m\u001b[49m\u001b[43m)\u001b[49m\n\u001b[0;32m 841\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m left_indexer \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m \u001b[38;5;129;01mand\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m is_range_indexer(left_indexer, \u001b[38;5;28mlen\u001b[39m(left)):\n\u001b[0;32m 842\u001b[0m \u001b[38;5;66;03m# Pinning the index here (and in the right code just below) is not\u001b[39;00m\n\u001b[0;32m 843\u001b[0m \u001b[38;5;66;03m# necessary, but makes the `.take` more performant if we have e.g.\u001b[39;00m\n\u001b[0;32m 844\u001b[0m \u001b[38;5;66;03m# a MultiIndex for left.index.\u001b[39;00m\n\u001b[0;32m 845\u001b[0m lmgr \u001b[38;5;241m=\u001b[39m left\u001b[38;5;241m.\u001b[39m_mgr\u001b[38;5;241m.\u001b[39mreindex_indexer(\n\u001b[0;32m 846\u001b[0m join_index,\n\u001b[0;32m 847\u001b[0m left_indexer,\n\u001b[1;32m (...)\u001b[0m\n\u001b[0;32m 852\u001b[0m use_na_proxy\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mTrue\u001b[39;00m,\n\u001b[0;32m 853\u001b[0m )\n", + "File \u001b[1;32mF:\\anaconda\\envs\\py39\\lib\\site-packages\\pandas\\core\\reshape\\merge.py:2655\u001b[0m, in \u001b[0;36m_items_overlap_with_suffix\u001b[1;34m(left, right, suffixes)\u001b[0m\n\u001b[0;32m 2652\u001b[0m lsuffix, rsuffix \u001b[38;5;241m=\u001b[39m suffixes\n\u001b[0;32m 2654\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m lsuffix \u001b[38;5;129;01mand\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m rsuffix:\n\u001b[1;32m-> 2655\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mValueError\u001b[39;00m(\u001b[38;5;124mf\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mcolumns overlap but no suffix specified: \u001b[39m\u001b[38;5;132;01m{\u001b[39;00mto_rename\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m\"\u001b[39m)\n\u001b[0;32m 2657\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mrenamer\u001b[39m(x, suffix: \u001b[38;5;28mstr\u001b[39m \u001b[38;5;241m|\u001b[39m \u001b[38;5;28;01mNone\u001b[39;00m):\n\u001b[0;32m 2658\u001b[0m \u001b[38;5;250m \u001b[39m\u001b[38;5;124;03m\"\"\"\u001b[39;00m\n\u001b[0;32m 2659\u001b[0m \u001b[38;5;124;03m Rename the left and right indices.\u001b[39;00m\n\u001b[0;32m 2660\u001b[0m \n\u001b[1;32m (...)\u001b[0m\n\u001b[0;32m 2671\u001b[0m \u001b[38;5;124;03m x : renamed column name\u001b[39;00m\n\u001b[0;32m 2672\u001b[0m \u001b[38;5;124;03m \"\"\"\u001b[39;00m\n", + "\u001b[1;31mValueError\u001b[0m: columns overlap but no suffix specified: Index(['value'], dtype='object')" + ] + } + ], + "source": [ + "df1.merge(df2, left_on='lkey', right_on='rkey', suffixes=(False, False))" + ] + }, + { + "cell_type": "markdown", + "id": "86efca65", + "metadata": {}, + "source": [ + "Using `how` parameter decide the type of merge to be performed." + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "id": "1026fc27", + "metadata": {}, + "outputs": [], + "source": [ + "df1 = pd.DataFrame({'a': ['foo', 'bar'], 'b': [1, 2]})\n", + "df2 = pd.DataFrame({'a': ['foo', 'baz'], 'c': [3, 4]})" + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "id": "b4379cb1", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
abc
0foo13
\n", + "
" + ], + "text/plain": [ + " a b c\n", + "0 foo 1 3" + ] + }, + "execution_count": 24, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df1.merge(df2, how='inner', on='a')" + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "id": "90916930-6a8e-40e3-871e-d0043aae93d8", + "metadata": { + "tags": [ + "hide-cell" + ] + }, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "
\n", + "
\n", + "

Let's visualize it! 🎥

\n", + "
\n", + " \n", + "
\n", + "
\n", + "
\n", + "\n" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "from IPython.display import HTML\n", + "\n", + "display(\n", + " HTML(\n", + " \"\"\"\n", + "\n", + "\n", + "
\n", + "
\n", + "

Let's visualize it! 🎥

\n", + "
\n", + " \n", + "
\n", + "
\n", + "
\n", + "\n", + "\"\"\"\n", + " )\n", + ")\n" + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "id": "2a8bb3d7", + "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", + "
abc
0foo13.0
1bar2NaN
\n", + "
" + ], + "text/plain": [ + " a b c\n", + "0 foo 1 3.0\n", + "1 bar 2 NaN" + ] + }, + "execution_count": 26, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df1.merge(df2, how='left', on='a')" + ] + }, + { + "cell_type": "code", + "execution_count": 27, + "id": "467da7f9-a710-442e-9fcf-afb4990ea3b0", + "metadata": { + "tags": [ + "hide-cell" + ] + }, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "
\n", + "
\n", + "

Let's visualize it! 🎥

\n", + "
\n", + " \n", + "
\n", + "
\n", + "
\n" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "from IPython.display import HTML\n", + "\n", + "display(\n", + " HTML(\n", + " \"\"\"\n", + "\n", + "\n", + "
\n", + "
\n", + "

Let's visualize it! 🎥

\n", + "
\n", + " \n", + "
\n", + "
\n", + "
\n", + "\"\"\"\n", + " )\n", + ")\n" + ] + }, + { + "cell_type": "code", + "execution_count": 28, + "id": "8951b7b9", + "metadata": {}, + "outputs": [], + "source": [ + "df1 = pd.DataFrame({'left': ['foo', 'bar']})\n", + "df2 = pd.DataFrame({'right': [7, 8]})" + ] + }, + { + "cell_type": "code", + "execution_count": 29, + "id": "93051401", + "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", + "
leftright
0foo7
1foo8
2bar7
3bar8
\n", + "
" + ], + "text/plain": [ + " left right\n", + "0 foo 7\n", + "1 foo 8\n", + "2 bar 7\n", + "3 bar 8" + ] + }, + "execution_count": 29, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df1.merge(df2, how='cross')" + ] + }, + { + "cell_type": "code", + "execution_count": 30, + "id": "bc243059-83f7-485c-bcd0-453d611c3d1f", + "metadata": { + "tags": [ + "hide-cell" + ] + }, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "
\n", + "
\n", + "

Let's visualize it! 🎥

\n", + "
\n", + " \n", + "
\n", + "
\n", + "
\n", + "\n", + "\n", + "\n", + "\n" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "from IPython.display import HTML\n", + "\n", + "display(\n", + " HTML(\n", + " \"\"\"\n", + "\n", + "\n", + "
\n", + "
\n", + "

Let's visualize it! 🎥

\n", + "
\n", + " \n", + "
\n", + "
\n", + "
\n", + "\n", + "\n", + "\n", + "\n", + "\"\"\"\n", + " )\n", + ")\n" + ] + }, + { + "cell_type": "markdown", + "id": "b58237c9", + "metadata": {}, + "source": [ + "\n", + "### join\n", + "\n", + "- Join columns of another DataFrame.\n", + "\n", + "- Join columns with other DataFrame either on index or on a key column. Efficiently join multiple DataFrame objects by index at once by passing a list.\n", + "\n", + "For example:" + ] + }, + { + "cell_type": "code", + "execution_count": 31, + "id": "5ad178d6", + "metadata": { + "attributes": { + "classes": [ + "code-cell" + ], + "id": "" + } + }, + "outputs": [], + "source": [ + "df = pd.DataFrame({'key': ['K0', 'K1', 'K2', 'K3', 'K4', 'K5'],\n", + " 'A': ['A0', 'A1', 'A2', 'A3', 'A4', 'A5']})" + ] + }, + { + "cell_type": "code", + "execution_count": 32, + "id": "ff1aa936", + "metadata": { + "attributes": { + "classes": [ + "code-cell" + ], + "id": "" + } + }, + "outputs": [], + "source": [ + "other = pd.DataFrame({'key': ['K0', 'K1', 'K2'],\n", + " 'B': ['B0', 'B1', 'B2']}) " + ] + }, + { + "cell_type": "markdown", + "id": "3278bb56", + "metadata": {}, + "source": [ + "Join DataFrames using their indexes." + ] + }, + { + "cell_type": "code", + "execution_count": 33, + "id": "a2517b83", + "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", + "
key_callerAkey_otherB
0K0A0K0B0
1K1A1K1B1
2K2A2K2B2
3K3A3NaNNaN
4K4A4NaNNaN
5K5A5NaNNaN
\n", + "
" + ], + "text/plain": [ + " key_caller A key_other B\n", + "0 K0 A0 K0 B0\n", + "1 K1 A1 K1 B1\n", + "2 K2 A2 K2 B2\n", + "3 K3 A3 NaN NaN\n", + "4 K4 A4 NaN NaN\n", + "5 K5 A5 NaN NaN" + ] + }, + "execution_count": 33, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df.join(other, lsuffix='_caller', rsuffix='_other')" + ] + }, + { + "cell_type": "code", + "execution_count": 34, + "id": "81738ab5-bc94-4264-bb43-8c64c041c332", + "metadata": { + "tags": [ + "hide-cell" + ] + }, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "
\n", + "
\n", + "

Let's visualize it! 🎥

\n", + "
\n", + " \n", + "
\n", + "
\n", + "
\n", + "\n", + "\n", + "\n", + "\n" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "from IPython.display import HTML\n", + "\n", + "display(\n", + " HTML(\n", + " \"\"\"\n", + "\n", + "\n", + "
\n", + "
\n", + "

Let's visualize it! 🎥

\n", + "
\n", + " \n", + "
\n", + "
\n", + "
\n", + "\n", + "\n", + "\n", + "\n", + "\"\"\"\n", + " )\n", + ")\n" + ] + }, + { + "cell_type": "markdown", + "id": "59935609", + "metadata": {}, + "source": [ + "\n", + "If we want to join using the `key` columns, we need to set `key` to be the index in both `df` and `other`. The joined DataFrame will have `key` as its index." + ] + }, + { + "cell_type": "code", + "execution_count": 35, + "id": "91c6f0f0", + "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", + "
AB
key
K0A0B0
K1A1B1
K2A2B2
K3A3NaN
K4A4NaN
K5A5NaN
\n", + "
" + ], + "text/plain": [ + " A B\n", + "key \n", + "K0 A0 B0\n", + "K1 A1 B1\n", + "K2 A2 B2\n", + "K3 A3 NaN\n", + "K4 A4 NaN\n", + "K5 A5 NaN" + ] + }, + "execution_count": 35, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df.set_index('key').join(other.set_index('key'))" + ] + }, + { + "cell_type": "code", + "execution_count": 36, + "id": "f942120e-c151-473d-aa0a-3ed6b0679204", + "metadata": { + "tags": [ + "hide-cell" + ] + }, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "
\n", + "
\n", + "

Let's visualize it! 🎥

\n", + "
\n", + " \n", + "
\n", + "
\n", + "
\n", + "\n", + "\n", + "\n", + "\n" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "from IPython.display import HTML\n", + "\n", + "display(\n", + " HTML(\n", + " \"\"\"\n", + "\n", + "\n", + "
\n", + "
\n", + "

Let's visualize it! 🎥

\n", + "
\n", + " \n", + "
\n", + "
\n", + "
\n", + "\n", + "\n", + "\n", + "\n", + "\"\"\"\n", + " )\n", + ")\n" + ] + }, + { + "cell_type": "markdown", + "id": "1483f153", + "metadata": {}, + "source": [ + "\n", + "Another option to join using the key columns is to use the `on` parameter. `DataFrame.join` always uses `other`'s index but we can use any column in `df`. This method preserves the original DataFrame's index in the result." + ] + }, + { + "cell_type": "code", + "execution_count": 37, + "id": "d8fbb1f7", + "metadata": { + "attributes": { + "classes": [ + "code-cell" + ], + "id": "" + } + }, + "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", + "
keyAB
0K0A0B0
1K1A1B1
2K2A2B2
3K3A3NaN
4K4A4NaN
5K5A5NaN
\n", + "
" + ], + "text/plain": [ + " key A B\n", + "0 K0 A0 B0\n", + "1 K1 A1 B1\n", + "2 K2 A2 B2\n", + "3 K3 A3 NaN\n", + "4 K4 A4 NaN\n", + "5 K5 A5 NaN" + ] + }, + "execution_count": 37, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df.join(other.set_index('key'), on='key')" + ] + }, + { + "cell_type": "markdown", + "id": "0ed06755", + "metadata": {}, + "source": [ + "Using non-unique key values shows how they are matched." + ] + }, + { + "cell_type": "code", + "execution_count": 38, + "id": "b4d1eb0d", + "metadata": { + "attributes": { + "classes": [ + "code-cell" + ], + "id": "" + } + }, + "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", + "
keyA
0K0A0
1K1A1
2K1A2
3K3A3
4K0A4
5K1A5
\n", + "
" + ], + "text/plain": [ + " key A\n", + "0 K0 A0\n", + "1 K1 A1\n", + "2 K1 A2\n", + "3 K3 A3\n", + "4 K0 A4\n", + "5 K1 A5" + ] + }, + "execution_count": 38, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df = pd.DataFrame({'key': ['K0', 'K1', 'K1', 'K3', 'K0', 'K1'],\n", + " 'A': ['A0', 'A1', 'A2', 'A3', 'A4', 'A5']})\n", + "df " + ] + }, + { + "cell_type": "code", + "execution_count": 39, + "id": "7f6bc83d", + "metadata": { + "attributes": { + "classes": [ + "code-cell" + ], + "id": "" + } + }, + "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", + "
keyAB
0K0A0B0
1K1A1B1
2K1A2B1
3K3A3NaN
4K0A4B0
5K1A5B1
\n", + "
" + ], + "text/plain": [ + " key A B\n", + "0 K0 A0 B0\n", + "1 K1 A1 B1\n", + "2 K1 A2 B1\n", + "3 K3 A3 NaN\n", + "4 K0 A4 B0\n", + "5 K1 A5 B1" + ] + }, + "execution_count": 39, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df.join(other.set_index('key'), on='key', validate='m:1')" + ] + }, + { + "cell_type": "markdown", + "id": "61fb9627", + "metadata": {}, + "source": [ + "## Aggregation and grouping\n", + "\n", + "Group `DataFrame` using a mapper or by a `Series` of columns.\n", + "\n", + "A `groupby` operation involves some combination of splitting the object, applying a function, and combining the results. This can be used to group large amounts of data and compute operations on these groups.\n", + "\n", + "For example:" + ] + }, + { + "cell_type": "code", + "execution_count": 40, + "id": "38adb2b7", + "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", + "
Max Speed
Animal
Falcon375.0
Parrot25.0
\n", + "
" + ], + "text/plain": [ + " Max Speed\n", + "Animal \n", + "Falcon 375.0\n", + "Parrot 25.0" + ] + }, + "execution_count": 40, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df = pd.DataFrame({'Animal': ['Falcon', 'Falcon',\n", + " 'Parrot', 'Parrot'],\n", + " 'Max Speed': [380., 370., 24., 26.]})\n", + "df\n", + "df.groupby(['Animal']).mean()" + ] + }, + { + "cell_type": "code", + "execution_count": 41, + "id": "917ba231-1ee4-4f2c-bcb9-4262d7eba119", + "metadata": { + "tags": [ + "hide-cell" + ] + }, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "
\n", + "
\n", + "

Let's visualize it! 🎥

\n", + "
\n", + " \n", + "
\n", + "
\n", + "
\n", + "\n", + "\n", + "\n", + "\n" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "from IPython.display import HTML\n", + "\n", + "display(\n", + " HTML(\n", + " \"\"\"\n", + "\n", + "
\n", + "
\n", + "

Let's visualize it! 🎥

\n", + "
\n", + " \n", + "
\n", + "
\n", + "
\n", + "\n", + "\n", + "\n", + "\n", + "\"\"\"\n", + " )\n", + ")\n" + ] + }, + { + "cell_type": "markdown", + "id": "84fe11db", + "metadata": {}, + "source": [ + "\n", + "### Hierarchical Indexes\n", + "\n", + "We can `groupby` different levels of a hierarchical index using the `level` parameter:" + ] + }, + { + "cell_type": "code", + "execution_count": 42, + "id": "5e84fd8b", + "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", + "
Max Speed
Animal
Falcon370.0
Parrot25.0
\n", + "
" + ], + "text/plain": [ + " Max Speed\n", + "Animal \n", + "Falcon 370.0\n", + "Parrot 25.0" + ] + }, + "execution_count": 42, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "arrays = [['Falcon', 'Falcon', 'Parrot', 'Parrot'],\n", + " ['Captive', 'Wild', 'Captive', 'Wild']]\n", + "index = pd.MultiIndex.from_arrays(arrays, names=('Animal', 'Type'))\n", + "df = pd.DataFrame({'Max Speed': [390., 350., 30., 20.]},\n", + " index=index)\n", + "df.groupby(level=0).mean()" + ] + }, + { + "cell_type": "code", + "execution_count": 43, + "id": "8d6ff678-1c1e-4629-9e06-1874511ecdf0", + "metadata": { + "tags": [ + "hide-cell" + ] + }, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "
\n", + "
\n", + "

Let's visualize it! 🎥

\n", + "
\n", + " \n", + "
\n", + "
\n", + "
\n", + "\n", + "\n", + "\n" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "from IPython.display import HTML\n", + "\n", + "display(\n", + " HTML(\n", + " \"\"\"\n", + "\n", + "
\n", + "
\n", + "

Let's visualize it! 🎥

\n", + "
\n", + " \n", + "
\n", + "
\n", + "
\n", + "\n", + "\n", + "\n", + "\"\"\"\n", + " )\n", + ")\n" + ] + }, + { + "cell_type": "code", + "execution_count": 44, + "id": "5a7a2d6a", + "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", + "
Max Speed
Type
Captive210.0
Wild185.0
\n", + "
" + ], + "text/plain": [ + " Max Speed\n", + "Type \n", + "Captive 210.0\n", + "Wild 185.0" + ] + }, + "execution_count": 44, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df.groupby(level=\"Type\").mean()" + ] + }, + { + "cell_type": "code", + "execution_count": 45, + "id": "31f4c668-6a8b-4dba-a6db-29673e7fbdba", + "metadata": { + "tags": [ + "hide-cell" + ] + }, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "
\n", + "
\n", + "

Let's visualize it! 🎥

\n", + "
\n", + " \n", + "
\n", + "
\n", + "
\n", + "\n", + "\n", + "\n" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "from IPython.display import HTML\n", + "\n", + "display(\n", + " HTML(\n", + " \"\"\"\n", + "\n", + "
\n", + "
\n", + "

Let's visualize it! 🎥

\n", + "
\n", + " \n", + "
\n", + "
\n", + "
\n", + "\n", + "\n", + "\n", + "\"\"\"\n", + " )\n", + ")\n" + ] + }, + { + "cell_type": "markdown", + "id": "fe08b062", + "metadata": {}, + "source": [ + "\n", + "We can also choose to include NA in group keys or not by setting `dropna` parameter, the default setting is `True`." + ] + }, + { + "cell_type": "code", + "execution_count": 46, + "id": "f27b6536", + "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", + "
ac
b
1.023
2.025
\n", + "
" + ], + "text/plain": [ + " a c\n", + "b \n", + "1.0 2 3\n", + "2.0 2 5" + ] + }, + "execution_count": 46, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "l = [[1, 2, 3], [1, None, 4], [2, 1, 3], [1, 2, 2]]\n", + "df = pd.DataFrame(l, columns=[\"a\", \"b\", \"c\"])\n", + "df.groupby(by=[\"b\"]).sum()" + ] + }, + { + "cell_type": "code", + "execution_count": 47, + "id": "47261c15-1d74-4a39-a7bb-073f6835cbf8", + "metadata": { + "tags": [ + "hide-cell" + ] + }, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "
\n", + "
\n", + "

Let's visualize it! 🎥

\n", + "
\n", + " \n", + "
\n", + "
\n", + "
\n", + "\n", + "\n" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "from IPython.display import HTML\n", + "\n", + "display(\n", + " HTML(\n", + " \"\"\"\n", + "\n", + "
\n", + "
\n", + "

Let's visualize it! 🎥

\n", + "
\n", + " \n", + "
\n", + "
\n", + "
\n", + "\n", + "\n", + "\"\"\"\n", + " )\n", + ")\n" + ] + }, + { + "cell_type": "code", + "execution_count": 48, + "id": "815ba4c3", + "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", + "
ac
b
1.023
2.025
NaN14
\n", + "
" + ], + "text/plain": [ + " a c\n", + "b \n", + "1.0 2 3\n", + "2.0 2 5\n", + "NaN 1 4" + ] + }, + "execution_count": 48, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df.groupby(by=[\"b\"], dropna=False).sum()" + ] + }, + { + "cell_type": "code", + "execution_count": 49, + "id": "17c93213-8bcf-4ac8-a30d-09df48b9ca71", + "metadata": { + "tags": [ + "hide-cell" + ] + }, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "
\n", + "
\n", + "

Let's visualize it! 🎥

\n", + "
\n", + " \n", + "
\n", + "
\n", + "
\n", + "\n" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "from IPython.display import HTML\n", + "\n", + "display(\n", + " HTML(\n", + " \"\"\"\n", + "\n", + "
\n", + "
\n", + "

Let's visualize it! 🎥

\n", + "
\n", + " \n", + "
\n", + "
\n", + "
\n", + "\n", + "\"\"\"\n", + " )\n", + ")\n" + ] + }, + { + "cell_type": "code", + "execution_count": 50, + "id": "719dc004", + "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", + "
bc
a
a13.013.0
b12.3123.0
\n", + "
" + ], + "text/plain": [ + " b c\n", + "a \n", + "a 13.0 13.0\n", + "b 12.3 123.0" + ] + }, + "execution_count": 50, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "l = [[\"a\", 12, 12], [None, 12.3, 33.], [\"b\", 12.3, 123], [\"a\", 1, 1]]\n", + "df = pd.DataFrame(l, columns=[\"a\", \"b\", \"c\"])\n", + "df.groupby(by=\"a\").sum()" + ] + }, + { + "cell_type": "code", + "execution_count": 51, + "id": "ba2d22de-ed75-4d52-a6d8-badf4791429f", + "metadata": { + "tags": [ + "hide-cell" + ] + }, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "
\n", + "
\n", + "

Let's visualize it! 🎥

\n", + "
\n", + " \n", + "
\n", + "
\n", + "
\n", + "\n", + "\n", + "\n" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "from IPython.display import HTML\n", + "\n", + "display(\n", + " HTML(\n", + " \"\"\"\n", + "\n", + "
\n", + "
\n", + "

Let's visualize it! 🎥

\n", + "
\n", + " \n", + "
\n", + "
\n", + "
\n", + "\n", + "\n", + "\n", + "\"\"\"\n", + " )\n", + ")\n" + ] + }, + { + "cell_type": "code", + "execution_count": 52, + "id": "cce87c6a", + "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", + "
bc
a
a13.013.0
b12.3123.0
NaN12.333.0
\n", + "
" + ], + "text/plain": [ + " b c\n", + "a \n", + "a 13.0 13.0\n", + "b 12.3 123.0\n", + "NaN 12.3 33.0" + ] + }, + "execution_count": 52, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df.groupby(by=\"a\", dropna=False).sum()" + ] + }, + { + "cell_type": "code", + "execution_count": 53, + "id": "70cc2217-577e-4b8c-8fc2-ce02f036622b", + "metadata": { + "tags": [ + "hide-cell" + ] + }, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "
\n", + "
\n", + "

Let's visualize it! 🎥

\n", + "
\n", + " \n", + "
\n", + "
\n", + "
\n", + "\n", + "\n", + "\n" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "from IPython.display import HTML\n", + "\n", + "display(\n", + " HTML(\n", + " \"\"\"\n", + "
\n", + "
\n", + "

Let's visualize it! 🎥

\n", + "
\n", + " \n", + "
\n", + "
\n", + "
\n", + "\n", + "\n", + "\n", + "\"\"\"\n", + " )\n", + ")\n" + ] + }, + { + "cell_type": "markdown", + "id": "6988f12c", + "metadata": {}, + "source": [ + "\n", + "When using `.apply()`, use `group_keys` to include or exclude the group keys. The `group_keys` argument defaults to `True` (include)." + ] + }, + { + "cell_type": "code", + "execution_count": 54, + "id": "1fa5930a", + "metadata": { + "attributes": { + "classes": [ + "code-cell" + ], + "id": "" + } + }, + "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", + "
AnimalMax Speed
Animal
Falcon0Falcon380.0
1Falcon370.0
Parrot2Parrot24.0
3Parrot26.0
\n", + "
" + ], + "text/plain": [ + " Animal Max Speed\n", + "Animal \n", + "Falcon 0 Falcon 380.0\n", + " 1 Falcon 370.0\n", + "Parrot 2 Parrot 24.0\n", + " 3 Parrot 26.0" + ] + }, + "execution_count": 54, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df = pd.DataFrame({'Animal': ['Falcon', 'Falcon',\n", + " 'Parrot', 'Parrot'],\n", + " 'Max Speed': [380., 370., 24., 26.]})\n", + "df.groupby(\"Animal\", group_keys=True).apply(lambda x: x)" + ] + }, + { + "cell_type": "code", + "execution_count": 55, + "id": "67e4668e", + "metadata": { + "attributes": { + "classes": [ + "code-cell" + ], + "id": "" + } + }, + "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", + "
AnimalMax Speed
0Falcon380.0
1Falcon370.0
2Parrot24.0
3Parrot26.0
\n", + "
" + ], + "text/plain": [ + " Animal Max Speed\n", + "0 Falcon 380.0\n", + "1 Falcon 370.0\n", + "2 Parrot 24.0\n", + "3 Parrot 26.0" + ] + }, + "execution_count": 55, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df.groupby(\"Animal\", group_keys=False).apply(lambda x: x)" + ] + }, + { + "cell_type": "markdown", + "id": "c8777695", + "metadata": {}, + "source": [ + "## Pivot table\n", + "\n", + "Create a spreadsheet-style pivot table as a DataFrame.\n", + "\n", + "The levels in the pivot table will be stored in MultiIndex objects (hierarchical indexes) on the index and columns of the result DataFrame." + ] + }, + { + "cell_type": "code", + "execution_count": 56, + "id": "c8e1b317", + "metadata": { + "attributes": { + "classes": [ + "code-cell" + ], + "id": "" + } + }, + "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", + "
ABCDE
0fooonesmall12
1fooonelarge24
2fooonelarge25
3footwosmall35
4footwosmall36
5baronelarge46
6baronesmall58
7bartwosmall69
8bartwolarge79
\n", + "
" + ], + "text/plain": [ + " A B C D E\n", + "0 foo one small 1 2\n", + "1 foo one large 2 4\n", + "2 foo one large 2 5\n", + "3 foo two small 3 5\n", + "4 foo two small 3 6\n", + "5 bar one large 4 6\n", + "6 bar one small 5 8\n", + "7 bar two small 6 9\n", + "8 bar two large 7 9" + ] + }, + "execution_count": 56, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df = pd.DataFrame({\"A\": [\"foo\", \"foo\", \"foo\", \"foo\", \"foo\",\n", + " \"bar\", \"bar\", \"bar\", \"bar\"],\n", + " \"B\": [\"one\", \"one\", \"one\", \"two\", \"two\",\n", + " \"one\", \"one\", \"two\", \"two\"],\n", + " \"C\": [\"small\", \"large\", \"large\", \"small\",\n", + " \"small\", \"large\", \"small\", \"small\",\n", + " \"large\"],\n", + " \"D\": [1, 2, 2, 3, 3, 4, 5, 6, 7],\n", + " \"E\": [2, 4, 5, 5, 6, 6, 8, 9, 9]})\n", + "df" + ] + }, + { + "cell_type": "markdown", + "id": "ef96918e", + "metadata": {}, + "source": [ + "This first example aggregates values by taking the sum." + ] + }, + { + "cell_type": "code", + "execution_count": 57, + "id": "7206f156", + "metadata": { + "attributes": { + "classes": [ + "code-cell" + ], + "id": "" + } + }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "C:\\Users\\87554\\AppData\\Local\\Temp\\ipykernel_26368\\2135498425.py:1: FutureWarning: The provided callable is currently using DataFrameGroupBy.sum. In a future version of pandas, the provided callable will be used directly. To keep current behavior pass the string \"sum\" instead.\n", + " table = pd.pivot_table(df, values='D', index=['A', 'B'],\n" + ] + }, + { + "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", + "
Clargesmall
AB
barone4.05.0
two7.06.0
fooone4.01.0
twoNaN6.0
\n", + "
" + ], + "text/plain": [ + "C large small\n", + "A B \n", + "bar one 4.0 5.0\n", + " two 7.0 6.0\n", + "foo one 4.0 1.0\n", + " two NaN 6.0" + ] + }, + "execution_count": 57, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "table = pd.pivot_table(df, values='D', index=['A', 'B'],\n", + " columns=['C'], aggfunc=np.sum)\n", + "table" + ] + }, + { + "cell_type": "markdown", + "id": "e0df6460", + "metadata": {}, + "source": [ + "We can also fill in missing values using the `fill_value` parameter." + ] + }, + { + "cell_type": "code", + "execution_count": 58, + "id": "6cfd03f9", + "metadata": { + "attributes": { + "classes": [ + "code-cell" + ], + "id": "" + } + }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "C:\\Users\\87554\\AppData\\Local\\Temp\\ipykernel_26368\\3213005518.py:1: FutureWarning: The provided callable is currently using DataFrameGroupBy.sum. In a future version of pandas, the provided callable will be used directly. To keep current behavior pass the string \"sum\" instead.\n", + " table = pd.pivot_table(df, values='D', index=['A', 'B'],\n" + ] + }, + { + "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", + "
Clargesmall
AB
barone45
two76
fooone41
two06
\n", + "
" + ], + "text/plain": [ + "C large small\n", + "A B \n", + "bar one 4 5\n", + " two 7 6\n", + "foo one 4 1\n", + " two 0 6" + ] + }, + "execution_count": 58, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "table = pd.pivot_table(df, values='D', index=['A', 'B'],\n", + " columns=['C'], aggfunc=np.sum, fill_value=0)\n", + "table" + ] + }, + { + "cell_type": "markdown", + "id": "bf713c57", + "metadata": {}, + "source": [ + "The next example aggregates by taking the mean across multiple columns." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "900dc876", + "metadata": { + "attributes": { + "classes": [ + "code-cell" + ], + "id": "" + } + }, + "outputs": [], + "source": [ + "table = pd.pivot_table(df, values=['D', 'E'], index=['A', 'C'],\n", + " aggfunc={'D': np.mean,\n", + " 'E': np.mean})\n", + "table" + ] + }, + { + "cell_type": "markdown", + "id": "6a428fdc", + "metadata": {}, + "source": [ + "We can also calculate multiple types of aggregations for any given value column." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "36ccdfaf", + "metadata": { + "attributes": { + "classes": [ + "code-cell" + ], + "id": "" + } + }, + "outputs": [], + "source": [ + "table = pd.pivot_table(df, values=['D', 'E'], index=['A', 'C'],\n", + " aggfunc={'D': np.mean,\n", + " 'E': [min, max, np.mean]})\n", + "table" + ] + }, + { + "cell_type": "markdown", + "id": "19eeb851", + "metadata": {}, + "source": [ + "## High-performance Pandas: eval() and query()\n", + "\n", + "### eval()\n", + "\n", + "Evaluate a string describing operations on DataFrame columns.\n", + "\n", + "Operates on columns only, not specific rows or elements. This allows `eval` to run arbitrary code, which can make you vulnerable to code injection if you pass user input to this function.\n", + "\n", + "For example:" + ] + }, + { + "cell_type": "code", + "execution_count": 61, + "id": "db6fdd36", + "metadata": { + "attributes": { + "classes": [ + "code-cell" + ], + "id": "" + } + }, + "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", + "
AB
0110
128
236
344
452
\n", + "
" + ], + "text/plain": [ + " A B\n", + "0 1 10\n", + "1 2 8\n", + "2 3 6\n", + "3 4 4\n", + "4 5 2" + ] + }, + "execution_count": 61, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df = pd.DataFrame({'A': range(1, 6), 'B': range(10, 0, -2)})\n", + "df" + ] + }, + { + "cell_type": "code", + "execution_count": 62, + "id": "92e71f86", + "metadata": { + "attributes": { + "classes": [ + "code-cell" + ], + "id": "" + } + }, + "outputs": [ + { + "data": { + "text/plain": [ + "0 11\n", + "1 10\n", + "2 9\n", + "3 8\n", + "4 7\n", + "dtype: int64" + ] + }, + "execution_count": 62, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df.eval('A + B')" + ] + }, + { + "cell_type": "markdown", + "id": "e5f51480", + "metadata": {}, + "source": [ + "The assignment is allowed though by default the original `DataFrame` is not modified." + ] + }, + { + "cell_type": "code", + "execution_count": 63, + "id": "b6387047", + "metadata": { + "attributes": { + "classes": [ + "code-cell" + ], + "id": "" + } + }, + "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", + "
ABC
011011
12810
2369
3448
4527
\n", + "
" + ], + "text/plain": [ + " A B C\n", + "0 1 10 11\n", + "1 2 8 10\n", + "2 3 6 9\n", + "3 4 4 8\n", + "4 5 2 7" + ] + }, + "execution_count": 63, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df.eval('C = A + B')" + ] + }, + { + "cell_type": "code", + "execution_count": 64, + "id": "a5322c51", + "metadata": { + "attributes": { + "classes": [ + "code-cell" + ], + "id": "" + } + }, + "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", + "
AB
0110
128
236
344
452
\n", + "
" + ], + "text/plain": [ + " A B\n", + "0 1 10\n", + "1 2 8\n", + "2 3 6\n", + "3 4 4\n", + "4 5 2" + ] + }, + "execution_count": 64, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df" + ] + }, + { + "cell_type": "markdown", + "id": "9a0a5d4d", + "metadata": {}, + "source": [ + "Use `inplace=True` to modify the original DataFrame." + ] + }, + { + "cell_type": "code", + "execution_count": 65, + "id": "13d2dffa", + "metadata": { + "attributes": { + "classes": [ + "code-cell" + ], + "id": "" + } + }, + "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", + "
ABC
011011
12810
2369
3448
4527
\n", + "
" + ], + "text/plain": [ + " A B C\n", + "0 1 10 11\n", + "1 2 8 10\n", + "2 3 6 9\n", + "3 4 4 8\n", + "4 5 2 7" + ] + }, + "execution_count": 65, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df.eval('C = A + B', inplace=True)\n", + "df" + ] + }, + { + "cell_type": "markdown", + "id": "e9c14654", + "metadata": {}, + "source": [ + "Multiple columns can be assigned using multi-line expressions:" + ] + }, + { + "cell_type": "code", + "execution_count": 66, + "id": "8ee5ceea", + "metadata": { + "attributes": { + "classes": [ + "code-cell" + ], + "id": "" + } + }, + "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", + "
ABCD
011011-9
12810-6
2369-3
34480
45273
\n", + "
" + ], + "text/plain": [ + " A B C D\n", + "0 1 10 11 -9\n", + "1 2 8 10 -6\n", + "2 3 6 9 -3\n", + "3 4 4 8 0\n", + "4 5 2 7 3" + ] + }, + "execution_count": 66, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df.eval(\n", + " '''\n", + " C = A + B\n", + " D = A - B\n", + " '''\n", + ")" + ] + }, + { + "cell_type": "markdown", + "id": "9c052b27", + "metadata": {}, + "source": [ + "### query()\n", + "\n", + "Query the columns of a DataFrame with a boolean expression.\n", + "\n", + "For example:" + ] + }, + { + "cell_type": "code", + "execution_count": 67, + "id": "d99bb798", + "metadata": { + "attributes": { + "classes": [ + "code-cell" + ], + "id": "" + } + }, + "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", + "
ABC C
011010
1289
2368
3447
4526
\n", + "
" + ], + "text/plain": [ + " A B C C\n", + "0 1 10 10\n", + "1 2 8 9\n", + "2 3 6 8\n", + "3 4 4 7\n", + "4 5 2 6" + ] + }, + "execution_count": 67, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df = pd.DataFrame({\n", + " 'A': range(1, 6),\n", + " 'B': range(10, 0, -2),\n", + " 'C C': range(10, 5, -1)\n", + "})\n", + "df" + ] + }, + { + "cell_type": "code", + "execution_count": 68, + "id": "c228b08b", + "metadata": { + "attributes": { + "classes": [ + "code-cell" + ], + "id": "" + } + }, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
ABC C
4526
\n", + "
" + ], + "text/plain": [ + " A B C C\n", + "4 5 2 6" + ] + }, + "execution_count": 68, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df.query('A > B')" + ] + }, + { + "cell_type": "markdown", + "id": "e90ed305", + "metadata": {}, + "source": [ + "The previous expression is equivalent to" + ] + }, + { + "cell_type": "code", + "execution_count": 69, + "id": "28a30c04", + "metadata": { + "attributes": { + "classes": [ + "code-cell" + ], + "id": "" + } + }, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
ABC C
4526
\n", + "
" + ], + "text/plain": [ + " A B C C\n", + "4 5 2 6" + ] + }, + "execution_count": 69, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df[df.A > df.B]" + ] + }, + { + "cell_type": "markdown", + "id": "454bb2b9", + "metadata": {}, + "source": [ + "For columns with spaces in their name, you can use backtick quoting." + ] + }, + { + "cell_type": "code", + "execution_count": 70, + "id": "4d06bb30", + "metadata": { + "attributes": { + "classes": [ + "code-cell" + ], + "id": "" + } + }, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
ABC C
011010
\n", + "
" + ], + "text/plain": [ + " A B C C\n", + "0 1 10 10" + ] + }, + "execution_count": 70, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df.query('B == `C C`')" + ] + }, + { + "cell_type": "markdown", + "id": "2ac03c29", + "metadata": {}, + "source": [ + "The previous expression is equivalent to" + ] + }, + { + "cell_type": "code", + "execution_count": 71, + "id": "f8dacc1f", + "metadata": { + "attributes": { + "classes": [ + "code-cell" + ], + "id": "" + } + }, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
ABC C
011010
\n", + "
" + ], + "text/plain": [ + " A B C C\n", + "0 1 10 10" + ] + }, + "execution_count": 71, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df[df.B == df['C C']]" + ] + }, + { + "cell_type": "code", + "execution_count": 72, + "id": "6ec1ded1-6f8a-46ca-b304-25621fe08677", + "metadata": { + "tags": [ + "hide-cell" + ] + }, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "
\n", + "
\n", + "

Let's visualize it! 🎥

\n", + "
\n", + " \n", + "
\n", + "
\n", + "
\n", + "\n", + "\n" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "from IPython.display import HTML\n", + "\n", + "display(\n", + " HTML(\n", + " \"\"\"\n", + "
\n", + "
\n", + "

Let's visualize it! 🎥

\n", + "
\n", + " \n", + "
\n", + "
\n", + "
\n", + "\n", + "\n", + "\"\"\"\n", + " )\n", + ")\n" + ] + }, + { + "cell_type": "markdown", + "id": "bc6c4cd4", + "metadata": {}, + "source": [ + "\n", + "## Your turn! 🚀\n", + "\n", + "### Processing image data\n", + "\n", + "Recently, very powerful AI models have been developed that allow us to understand images. There are many tasks that can be solved using pre-trained neural networks, or cloud services. Some examples include:\n", + "\n", + "- **Image Classification**, can help you categorize the image into one of the pre-defined classes. You can easily train your own image classifiers using services such as [Custom Vision](https://azure.microsoft.com/services/cognitive-services/custom-vision-service/?WT.mc_id=academic-77958-bethanycheum)\n", + "- **Object Detection** to detect different objects in the image. Services such as [computer vision](https://azure.microsoft.com/services/cognitive-services/computer-vision/?WT.mc_id=academic-77958-bethanycheum) can detect a number of common objects, and you can train [Custom Vision](https://azure.microsoft.com/services/cognitive-services/custom-vision-service/?WT.mc_id=academic-77958-bethanycheum) model to detect some specific objects of interest.\n", + "- **Face Detection**, including Age, Gender and Emotion detection. This can be done via [Face API](https://azure.microsoft.com/services/cognitive-services/face/?WT.mc_id=academic-77958-bethanycheum).\n", + "\n", + "All those cloud services can be called using [Python SDKs](https://docs.microsoft.com/samples/azure-samples/cognitive-services-python-sdk-samples/cognitive-services-python-sdk-samples/?WT.mc_id=academic-77958-bethanycheum), and thus can be easily incorporated into your data exploration workflow.\n", + "\n", + "Here are some examples of exploring data from Image data sources:\n", + "\n", + "- In the blog post [How to Learn Data Science without Coding](https://soshnikov.com/azure/how-to-learn-data-science-without-coding/) we explore Instagram photos, trying to understand what makes people give more likes to a photo. We first extract as much information from pictures as possible using [computer vision](https://azure.microsoft.com/services/cognitive-services/computer-vision/?WT.mc_id=academic-77958-bethanycheum), and then use [Azure Machine Learning AutoML](https://docs.microsoft.com/azure/machine-learning/concept-automated-ml/?WT.mc_id=academic-77958-bethanycheum) to build the interpretable model.\n", + "- In [Facial Studies Workshop](https://github.com/CloudAdvocacy/FaceStudies) we use [Face API](https://azure.microsoft.com/services/cognitive-services/face/?WT.mc_id=academic-77958-bethanycheum) to extract emotions from people on photographs from events, in order to try to understand what makes people happy.\n", + "\n", + "### Assignment\n", + "\n", + "[Perform more detailed data study for the challenges above](../../../assignments/data-science/data-processing-in-python.md)\n", + "\n", + "## Self study\n", + "\n", + "In this chapter, we've covered many of the basics of using Pandas effectively for data analysis. Still, much has been omitted from our discussion. To learn more about Pandas, we recommend the following resources:\n", + "\n", + "- [Pandas online documentation](http://pandas.pydata.org/): This is the go-to source for complete documentation of the package. While the examples in the documentation tend to be small generated datasets, the description of the options is complete and generally very useful for understanding the use of various functions.\n", + "\n", + "- [*Python for Data Analysis*](http://shop.oreilly.com/product/0636920023784.do) Written by Wes McKinney (the original creator of Pandas), this book contains much more detail on the Pandas package than we had room for in this chapter. In particular, he takes a deep dive into tools for time series, which were his bread and butter as a financial consultant. The book also has many entertaining examples of applying Pandas to gain insight from real-world datasets. Keep in mind, though, that the book is now several years old, and the Pandas package has quite a few new features that this book does not cover (but be on the lookout for a new edition in 2017).\n", + "\n", + "- [Stack Overflow](http://stackoverflow.com/questions/tagged/pandas): Pandas has so many users that any question you have has likely been asked and answered on Stack Overflow. Using Pandas is a case where some Google-Fu is your best friend. Simply go to your favorite search engine and type in the question, problem, or error you're coming across-more than likely you'll find your answer on a Stack Overflow page.\n", + "\n", + "- [Pandas on PyVideo](http://pyvideo.org/search?q=pandas): From PyCon to SciPy to PyData, many conferences have featured tutorials from Pandas developers and power users. The PyCon tutorials in particular tend to be given by very well-vetted presenters.\n", + "\n", + "Using these resources, combined with the walk-through given in this chapter, my hope is that you'll be poised to use Pandas to tackle any data analysis problem you come across!\n", + "\n", + "## Acknowledgments\n", + "\n", + "Thanks for [Pandas user guide](https://pandas.pydata.org/docs/user_guide/index.html). It contributes the majority of the content in this chapter." + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "EnvName", + "language": "python", + "name": "envname" + }, + "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.18" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/_sources/data-science/working-with-data/pandas/data-selection.ipynb b/_sources/data-science/working-with-data/pandas/data-selection.ipynb new file mode 100644 index 0000000000..af1134aaa2 --- /dev/null +++ b/_sources/data-science/working-with-data/pandas/data-selection.ipynb @@ -0,0 +1,4490 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "70c2694f-98d3-4846-a4d2-a88ac4da4a56", + "metadata": {}, + "source": [ + "# Data Selection " + ] + }, + { + "cell_type": "markdown", + "id": "3ca294fb-5274-4c7b-b293-a374877b524b", + "metadata": {}, + "source": [ + "## Overview\n", + "\n", + "In this section, we'll focus on how to slice, dice, and generally get and set subsets of Pandas objects." + ] + }, + { + "cell_type": "markdown", + "id": "446ccf8d-1e3a-4cec-8bac-400c5c97028a", + "metadata": {}, + "source": [ + "Import NumPy and load Pandas into your namespace:" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "id": "f1931205-8c05-40ca-b266-c0f14e26cff3", + "metadata": {}, + "outputs": [], + "source": [ + "# Install the necessary dependencies\n", + "import os\n", + "import sys\n", + "!{sys.executable} -m pip install --quiet jupyterlab_myst ipython\n", + "import numpy as np\n", + "import pandas as pd" + ] + }, + { + "cell_type": "markdown", + "id": "281fa7e2", + "metadata": {}, + "source": [ + "## Selection by label" + ] + }, + { + "cell_type": "markdown", + "id": "8cfbc1d9-62b9-4f12-a249-0fb7af77d6f3", + "metadata": { + "attributes": { + "classes": [ + "warning" + ], + "id": "" + } + }, + "source": [ + "Whether a copy or a reference is returned for a setting operation, may depend on the context. This is sometimes called `chained assignment` and should be avoided." + ] + }, + { + "cell_type": "markdown", + "id": "9dd00162-d4ac-4b84-9da4-9fe7e36cbcb5", + "metadata": { + "attributes": { + "classes": [ + "warning" + ], + "id": "" + } + }, + "source": [ + "`.loc` is strict when you present slicers that are not compatible (or convertible) with the index type. For example using integers in a `DatetimeIndex`. These will raise a `TypeError`." + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "19faf0a0", + "metadata": { + "attributes": { + "classes": [ + "code-cell" + ], + "id": "" + } + }, + "outputs": [], + "source": [ + "dfl = pd.DataFrame(np.random.randn(5, 4),\n", + " columns=list('ABCD'),\n", + " index=pd.date_range('20130101', periods=5))" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "5cd6165e", + "metadata": { + "attributes": { + "classes": [ + "code-cell" + ], + "id": "" + }, + "tags": [ + "raises-exception" + ] + }, + "outputs": [ + { + "ename": "TypeError", + "evalue": "cannot do slice indexing on DatetimeIndex with these indexers [2] of type int", + "output_type": "error", + "traceback": [ + "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[1;31mTypeError\u001b[0m Traceback (most recent call last)", + "Cell \u001b[1;32mIn[3], line 2\u001b[0m\n\u001b[0;32m 1\u001b[0m \u001b[38;5;66;03m#:tags: [\"raises-exception\"]\u001b[39;00m\n\u001b[1;32m----> 2\u001b[0m dfl\u001b[38;5;241m.\u001b[39mloc[\u001b[38;5;241m2\u001b[39m:\u001b[38;5;241m3\u001b[39m]\n", + "File \u001b[1;32mF:\\anaconda\\Lib\\site-packages\\pandas\\core\\indexing.py:1073\u001b[0m, in \u001b[0;36m_LocationIndexer.__getitem__\u001b[1;34m(self, key)\u001b[0m\n\u001b[0;32m 1070\u001b[0m axis \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39maxis \u001b[38;5;129;01mor\u001b[39;00m \u001b[38;5;241m0\u001b[39m\n\u001b[0;32m 1072\u001b[0m maybe_callable \u001b[38;5;241m=\u001b[39m com\u001b[38;5;241m.\u001b[39mapply_if_callable(key, \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mobj)\n\u001b[1;32m-> 1073\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_getitem_axis(maybe_callable, axis\u001b[38;5;241m=\u001b[39maxis)\n", + "File \u001b[1;32mF:\\anaconda\\Lib\\site-packages\\pandas\\core\\indexing.py:1290\u001b[0m, in \u001b[0;36m_LocIndexer._getitem_axis\u001b[1;34m(self, key, axis)\u001b[0m\n\u001b[0;32m 1288\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28misinstance\u001b[39m(key, \u001b[38;5;28mslice\u001b[39m):\n\u001b[0;32m 1289\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_validate_key(key, axis)\n\u001b[1;32m-> 1290\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_get_slice_axis(key, axis\u001b[38;5;241m=\u001b[39maxis)\n\u001b[0;32m 1291\u001b[0m \u001b[38;5;28;01melif\u001b[39;00m com\u001b[38;5;241m.\u001b[39mis_bool_indexer(key):\n\u001b[0;32m 1292\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_getbool_axis(key, axis\u001b[38;5;241m=\u001b[39maxis)\n", + "File \u001b[1;32mF:\\anaconda\\Lib\\site-packages\\pandas\\core\\indexing.py:1324\u001b[0m, in \u001b[0;36m_LocIndexer._get_slice_axis\u001b[1;34m(self, slice_obj, axis)\u001b[0m\n\u001b[0;32m 1321\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m obj\u001b[38;5;241m.\u001b[39mcopy(deep\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mFalse\u001b[39;00m)\n\u001b[0;32m 1323\u001b[0m labels \u001b[38;5;241m=\u001b[39m obj\u001b[38;5;241m.\u001b[39m_get_axis(axis)\n\u001b[1;32m-> 1324\u001b[0m indexer \u001b[38;5;241m=\u001b[39m labels\u001b[38;5;241m.\u001b[39mslice_indexer(slice_obj\u001b[38;5;241m.\u001b[39mstart, slice_obj\u001b[38;5;241m.\u001b[39mstop, slice_obj\u001b[38;5;241m.\u001b[39mstep)\n\u001b[0;32m 1326\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28misinstance\u001b[39m(indexer, \u001b[38;5;28mslice\u001b[39m):\n\u001b[0;32m 1327\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mobj\u001b[38;5;241m.\u001b[39m_slice(indexer, axis\u001b[38;5;241m=\u001b[39maxis)\n", + "File \u001b[1;32mF:\\anaconda\\Lib\\site-packages\\pandas\\core\\indexes\\datetimes.py:809\u001b[0m, in \u001b[0;36mDatetimeIndex.slice_indexer\u001b[1;34m(self, start, end, step, kind)\u001b[0m\n\u001b[0;32m 801\u001b[0m \u001b[38;5;66;03m# GH#33146 if start and end are combinations of str and None and Index is not\u001b[39;00m\n\u001b[0;32m 802\u001b[0m \u001b[38;5;66;03m# monotonic, we can not use Index.slice_indexer because it does not honor the\u001b[39;00m\n\u001b[0;32m 803\u001b[0m \u001b[38;5;66;03m# actual elements, is only searching for start and end\u001b[39;00m\n\u001b[0;32m 804\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m (\n\u001b[0;32m 805\u001b[0m check_str_or_none(start)\n\u001b[0;32m 806\u001b[0m \u001b[38;5;129;01mor\u001b[39;00m check_str_or_none(end)\n\u001b[0;32m 807\u001b[0m \u001b[38;5;129;01mor\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mis_monotonic_increasing\n\u001b[0;32m 808\u001b[0m ):\n\u001b[1;32m--> 809\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m Index\u001b[38;5;241m.\u001b[39mslice_indexer(\u001b[38;5;28mself\u001b[39m, start, end, step, kind\u001b[38;5;241m=\u001b[39mkind)\n\u001b[0;32m 811\u001b[0m mask \u001b[38;5;241m=\u001b[39m np\u001b[38;5;241m.\u001b[39marray(\u001b[38;5;28;01mTrue\u001b[39;00m)\n\u001b[0;32m 812\u001b[0m deprecation_mask \u001b[38;5;241m=\u001b[39m np\u001b[38;5;241m.\u001b[39marray(\u001b[38;5;28;01mTrue\u001b[39;00m)\n", + "File \u001b[1;32mF:\\anaconda\\Lib\\site-packages\\pandas\\core\\indexes\\base.py:6559\u001b[0m, in \u001b[0;36mIndex.slice_indexer\u001b[1;34m(self, start, end, step, kind)\u001b[0m\n\u001b[0;32m 6516\u001b[0m \u001b[38;5;250m\u001b[39m\u001b[38;5;124;03m\"\"\"\u001b[39;00m\n\u001b[0;32m 6517\u001b[0m \u001b[38;5;124;03mCompute the slice indexer for input labels and step.\u001b[39;00m\n\u001b[0;32m 6518\u001b[0m \n\u001b[1;32m (...)\u001b[0m\n\u001b[0;32m 6555\u001b[0m \u001b[38;5;124;03mslice(1, 3, None)\u001b[39;00m\n\u001b[0;32m 6556\u001b[0m \u001b[38;5;124;03m\"\"\"\u001b[39;00m\n\u001b[0;32m 6557\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_deprecated_arg(kind, \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mkind\u001b[39m\u001b[38;5;124m\"\u001b[39m, \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mslice_indexer\u001b[39m\u001b[38;5;124m\"\u001b[39m)\n\u001b[1;32m-> 6559\u001b[0m start_slice, end_slice \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mslice_locs(start, end, step\u001b[38;5;241m=\u001b[39mstep)\n\u001b[0;32m 6561\u001b[0m \u001b[38;5;66;03m# return a slice\u001b[39;00m\n\u001b[0;32m 6562\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m is_scalar(start_slice):\n", + "File \u001b[1;32mF:\\anaconda\\Lib\\site-packages\\pandas\\core\\indexes\\base.py:6767\u001b[0m, in \u001b[0;36mIndex.slice_locs\u001b[1;34m(self, start, end, step, kind)\u001b[0m\n\u001b[0;32m 6765\u001b[0m start_slice \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;01mNone\u001b[39;00m\n\u001b[0;32m 6766\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m start \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n\u001b[1;32m-> 6767\u001b[0m start_slice \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mget_slice_bound(start, \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mleft\u001b[39m\u001b[38;5;124m\"\u001b[39m)\n\u001b[0;32m 6768\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m start_slice \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n\u001b[0;32m 6769\u001b[0m start_slice \u001b[38;5;241m=\u001b[39m \u001b[38;5;241m0\u001b[39m\n", + "File \u001b[1;32mF:\\anaconda\\Lib\\site-packages\\pandas\\core\\indexes\\base.py:6676\u001b[0m, in \u001b[0;36mIndex.get_slice_bound\u001b[1;34m(self, label, side, kind)\u001b[0m\n\u001b[0;32m 6672\u001b[0m original_label \u001b[38;5;241m=\u001b[39m label\n\u001b[0;32m 6674\u001b[0m \u001b[38;5;66;03m# For datetime indices label may be a string that has to be converted\u001b[39;00m\n\u001b[0;32m 6675\u001b[0m \u001b[38;5;66;03m# to datetime boundary according to its resolution.\u001b[39;00m\n\u001b[1;32m-> 6676\u001b[0m label \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_maybe_cast_slice_bound(label, side)\n\u001b[0;32m 6678\u001b[0m \u001b[38;5;66;03m# we need to look up the label\u001b[39;00m\n\u001b[0;32m 6679\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n", + "File \u001b[1;32mF:\\anaconda\\Lib\\site-packages\\pandas\\core\\indexes\\datetimes.py:767\u001b[0m, in \u001b[0;36mDatetimeIndex._maybe_cast_slice_bound\u001b[1;34m(self, label, side, kind)\u001b[0m\n\u001b[0;32m 762\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28misinstance\u001b[39m(label, date) \u001b[38;5;129;01mand\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28misinstance\u001b[39m(label, datetime):\n\u001b[0;32m 763\u001b[0m \u001b[38;5;66;03m# Pandas supports slicing with dates, treated as datetimes at midnight.\u001b[39;00m\n\u001b[0;32m 764\u001b[0m \u001b[38;5;66;03m# https://github.com/pandas-dev/pandas/issues/31501\u001b[39;00m\n\u001b[0;32m 765\u001b[0m label \u001b[38;5;241m=\u001b[39m Timestamp(label)\u001b[38;5;241m.\u001b[39mto_pydatetime()\n\u001b[1;32m--> 767\u001b[0m label \u001b[38;5;241m=\u001b[39m \u001b[38;5;28msuper\u001b[39m()\u001b[38;5;241m.\u001b[39m_maybe_cast_slice_bound(label, side, kind\u001b[38;5;241m=\u001b[39mkind)\n\u001b[0;32m 768\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_deprecate_mismatched_indexing(label)\n\u001b[0;32m 769\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_maybe_cast_for_get_loc(label)\n", + "File \u001b[1;32mF:\\anaconda\\Lib\\site-packages\\pandas\\core\\indexes\\datetimelike.py:320\u001b[0m, in \u001b[0;36mDatetimeIndexOpsMixin._maybe_cast_slice_bound\u001b[1;34m(self, label, side, kind)\u001b[0m\n\u001b[0;32m 318\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m lower \u001b[38;5;28;01mif\u001b[39;00m side \u001b[38;5;241m==\u001b[39m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mleft\u001b[39m\u001b[38;5;124m\"\u001b[39m \u001b[38;5;28;01melse\u001b[39;00m upper\n\u001b[0;32m 319\u001b[0m \u001b[38;5;28;01melif\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28misinstance\u001b[39m(label, \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_data\u001b[38;5;241m.\u001b[39m_recognized_scalars):\n\u001b[1;32m--> 320\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_invalid_indexer(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mslice\u001b[39m\u001b[38;5;124m\"\u001b[39m, label)\n\u001b[0;32m 322\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m label\n", + "\u001b[1;31mTypeError\u001b[0m: cannot do slice indexing on DatetimeIndex with these indexers [2] of type int" + ] + } + ], + "source": [ + "dfl.loc[2:3]" + ] + }, + { + "cell_type": "markdown", + "id": "f2b699ce-d01f-4afa-8323-c43b9df24b38", + "metadata": { + "attributes": { + "classes": [ + "warning" + ], + "id": "" + } + }, + "source": [ + "String likes in slicing can be convertible to the type of the index and lead to natural slicing." + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "3f5fb2f0", + "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", + "
ABCD
2013-01-02-0.5292161.223634-0.783708-1.209286
2013-01-03-1.570743-0.316004-1.132640-0.464328
2013-01-041.390855-0.319271-1.093100-1.090622
\n", + "
" + ], + "text/plain": [ + " A B C D\n", + "2013-01-02 -0.529216 1.223634 -0.783708 -1.209286\n", + "2013-01-03 -1.570743 -0.316004 -1.132640 -0.464328\n", + "2013-01-04 1.390855 -0.319271 -1.093100 -1.090622" + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "dfl.loc['20130102':'20130104']" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "abe5968b-ffe5-4302-9918-81a1d97ed568", + "metadata": { + "tags": [ + "hide-cell" + ] + }, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\n", + "\n", + "
\n", + "
\n", + "

Let's visualize it! 🎥

\n", + "
\n", + " \n", + "
\n", + "
\n", + "
\n", + "\n" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "from IPython.display import HTML\n", + "\n", + "display(\n", + " HTML(\n", + " \"\"\"\n", + "\n", + "\n", + "\n", + "\n", + "
\n", + "
\n", + "

Let's visualize it! 🎥

\n", + "
\n", + " \n", + "
\n", + "
\n", + "
\n", + "\n", + "\"\"\"\n", + " )\n", + ")\n" + ] + }, + { + "cell_type": "markdown", + "id": "f3c046d5-19dc-47cb-828f-880f008d02d4", + "metadata": { + "attributes": { + "classes": [ + "warning" + ], + "id": "" + } + }, + "source": [ + "Pandas will raise a `KeyError` if indexing with a list with missing labels." + ] + }, + { + "cell_type": "markdown", + "id": "29221dda", + "metadata": {}, + "source": [ + "Pandas provides a suite of methods in order to have **purely label-based indexing**. This is a strict inclusion-based protocol. Every label asked for must be in the index, or a `KeyError` will be raised. When slicing, both the start bound **AND** the stop bound are included, if present in the index. Integers are valid labels, but they refer to the label **and not the position**.\n", + "\n", + "- The `.loc` attribute is the primary access method. The following are valid inputs:\n", + "\n", + "- A single label, e.g. `5` or `'a'` (Note that `5` is interpreted as a label of the index. This use is not an integer position along the index.).\n", + "\n", + "- A list or array of labels `['a', 'b', 'c']`.\n", + "\n", + "- A slice object with labels `'a':'f'` (Note that contrary to usual Python slices, both the start and the stop are included, when present in the index!\n", + "\n", + "- A boolean array.\n", + "\n", + "- A `callable`." + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "id": "8a174f11", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "c 0.697303\n", + "d -1.412259\n", + "e 0.104600\n", + "f 1.718896\n", + "dtype: float64" + ] + }, + "execution_count": 6, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "s1 = pd.Series(np.random.randn(6), index=list('abcdef'))\n", + "s1\n", + "s1.loc['c':]" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "id": "b276bd82-797f-4eb6-8886-51153d771bb0", + "metadata": { + "tags": [ + "hide-cell" + ] + }, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\n", + "\n", + "
\n", + "
\n", + "

Let's visualize it! 🎥

\n", + "
\n", + " \n", + "
\n", + "
\n", + "
\n", + "\n" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "from IPython.display import HTML\n", + "\n", + "display(\n", + " HTML(\n", + " \"\"\"\n", + "\n", + "\n", + "\n", + "\n", + "
\n", + "
\n", + "

Let's visualize it! 🎥

\n", + "
\n", + " \n", + "
\n", + "
\n", + "
\n", + "\n", + "\"\"\"\n", + " )\n", + ")\n" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "id": "11e56acc", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "-0.3374040853531507" + ] + }, + "execution_count": 8, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "s1.loc['b']" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "id": "74a7ae51-b334-4d5f-b9a2-e2080958663f", + "metadata": { + "tags": [ + "hide-cell" + ] + }, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\n", + "
\n", + "
\n", + "

Let's visualize it! 🎥

\n", + "
\n", + " \n", + "
\n", + "
\n", + "
\n", + "\n", + "\n" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "from IPython.display import HTML\n", + "\n", + "display(\n", + " HTML(\n", + " \"\"\"\n", + "\n", + "\n", + "\n", + "
\n", + "
\n", + "

Let's visualize it! 🎥

\n", + "
\n", + " \n", + "
\n", + "
\n", + "
\n", + "\n", + "\n", + "\"\"\"\n", + " )\n", + ")\n" + ] + }, + { + "cell_type": "markdown", + "id": "eb2dbf2d-cdd9-42e4-b374-fc7944f1996f", + "metadata": {}, + "source": [ + "Note that the setting works as well:" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "id": "8fe78c41", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "a -0.985634\n", + "b -0.337404\n", + "c 0.000000\n", + "d 0.000000\n", + "e 0.000000\n", + "f 0.000000\n", + "dtype: float64" + ] + }, + "execution_count": 10, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "s1.loc['c':] = 0\n", + "s1" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "id": "e32f82e4-6b3e-48a7-ab56-c6ea820274e5", + "metadata": { + "tags": [ + "hide-cell" + ] + }, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\n", + "
\n", + "
\n", + "

Let's visualize it! 🎥

\n", + "
\n", + " \n", + "
\n", + "
\n", + "
\n" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "from IPython.display import HTML\n", + "\n", + "display(\n", + " HTML(\n", + " \"\"\"\n", + "\n", + "\n", + "\n", + "
\n", + "
\n", + "

Let's visualize it! 🎥

\n", + "
\n", + " \n", + "
\n", + "
\n", + "
\n", + "\"\"\"\n", + " )\n", + ")\n" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "id": "cfb25d9f", + "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", + "
ABCD
a1.401532-1.744216-0.212177-1.295240
b0.965335-1.586035-2.2753840.615352
d-0.131692-0.910665-1.2866410.340830
\n", + "
" + ], + "text/plain": [ + " A B C D\n", + "a 1.401532 -1.744216 -0.212177 -1.295240\n", + "b 0.965335 -1.586035 -2.275384 0.615352\n", + "d -0.131692 -0.910665 -1.286641 0.340830" + ] + }, + "execution_count": 12, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df1 = pd.DataFrame(np.random.randn(6, 4),\n", + " index=list('abcdef'),\n", + " columns=list('ABCD'))\n", + "df1\n", + "df1.loc[['a', 'b', 'd'], :]" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "id": "de1a7123-2c8e-4910-b435-cdd489baff5b", + "metadata": { + "tags": [ + "hide-cell" + ] + }, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\n", + "\n", + "
\n", + "
\n", + "

Let's visualize it! 🎥

\n", + "
\n", + " \n", + "
\n", + "
\n", + "
\n" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "from IPython.display import HTML\n", + "\n", + "display(\n", + " HTML(\n", + " \"\"\"\n", + "\n", + "\n", + "\n", + "\n", + "
\n", + "
\n", + "

Let's visualize it! 🎥

\n", + "
\n", + " \n", + "
\n", + "
\n", + "
\n", + "\"\"\"\n", + " )\n", + ")\n" + ] + }, + { + "cell_type": "markdown", + "id": "0493a65b-5915-4119-a2a8-00b0b8a728b0", + "metadata": {}, + "source": [ + "Accessing via label slices:" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "id": "2934e9e8", + "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", + "
ABC
d-0.131692-0.910665-1.286641
e0.238683-0.1697711.322003
f1.511896-0.2472483.169958
\n", + "
" + ], + "text/plain": [ + " A B C\n", + "d -0.131692 -0.910665 -1.286641\n", + "e 0.238683 -0.169771 1.322003\n", + "f 1.511896 -0.247248 3.169958" + ] + }, + "execution_count": 14, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df1.loc['d':, 'A':'C']" + ] + }, + { + "cell_type": "markdown", + "id": "29f4ac9b-3d4b-4199-a04a-b9ec886b26f6", + "metadata": {}, + "source": [ + "For getting a cross-section using a label (equivalent to `df.xs('a')`):" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "id": "ccbffe12", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "A 1.401532\n", + "B -1.744216\n", + "C -0.212177\n", + "D -1.295240\n", + "Name: a, dtype: float64" + ] + }, + "execution_count": 15, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df1.loc['a']" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "id": "c9570d12-8020-4328-94e8-91266619e666", + "metadata": { + "tags": [ + "hide-cell" + ] + }, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\n", + "
\n", + "
\n", + "

Let's visualize it! 🎥

\n", + "
\n", + " \n", + "
\n", + "
\n", + "
\n", + "\n" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "from IPython.display import HTML\n", + "\n", + "display(\n", + " HTML(\n", + " \"\"\"\n", + "\n", + "\n", + "\n", + "
\n", + "
\n", + "

Let's visualize it! 🎥

\n", + "
\n", + " \n", + "
\n", + "
\n", + "
\n", + "\n", + "\"\"\"\n", + " )\n", + ")\n" + ] + }, + { + "cell_type": "markdown", + "id": "589a2a99", + "metadata": {}, + "source": [ + "For getting values with a boolean array:" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "id": "e60fdddf", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "A True\n", + "B False\n", + "C False\n", + "D False\n", + "Name: a, dtype: bool" + ] + }, + "execution_count": 17, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df1.loc['a'] > 0" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "id": "4a9f2648-9f92-4077-a7ec-00836c2f28fd", + "metadata": { + "tags": [ + "hide-cell" + ] + }, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\n", + "
\n", + "
\n", + "

Let's visualize it! 🎥

\n", + "
\n", + " \n", + "
\n", + "
\n", + "
\n" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "from IPython.display import HTML\n", + "\n", + "display(\n", + " HTML(\n", + " \"\"\"\n", + "\n", + "\n", + "\n", + "
\n", + "
\n", + "

Let's visualize it! 🎥

\n", + "
\n", + " \n", + "
\n", + "
\n", + "
\n", + "\"\"\"\n", + " )\n", + ")\n" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "id": "d6226934", + "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", + "
A
a1.401532
b0.965335
c-0.097299
d-0.131692
e0.238683
f1.511896
\n", + "
" + ], + "text/plain": [ + " A\n", + "a 1.401532\n", + "b 0.965335\n", + "c -0.097299\n", + "d -0.131692\n", + "e 0.238683\n", + "f 1.511896" + ] + }, + "execution_count": 19, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df1.loc[:, df1.loc['a'] > 0]" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "id": "f8ae65cd-dbea-4f40-a464-7b07554b9b11", + "metadata": { + "tags": [ + "hide-cell" + ] + }, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\n", + "
\n", + "
\n", + "

Let's visualize it! 🎥

\n", + "
\n", + " \n", + "
\n", + "
\n", + "
\n", + "\n", + "\n" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "from IPython.display import HTML\n", + "\n", + "display(\n", + " HTML(\n", + " \"\"\"\n", + "\n", + "\n", + "\n", + "
\n", + "
\n", + "

Let's visualize it! 🎥

\n", + "
\n", + " \n", + "
\n", + "
\n", + "
\n", + "\n", + "\n", + "\"\"\"\n", + " )\n", + ")\n" + ] + }, + { + "cell_type": "markdown", + "id": "0e52a617", + "metadata": {}, + "source": [ + "NA values in a boolean array propagate as `False`:" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "id": "0ca93c29", + "metadata": { + "attributes": { + "classes": [ + "code-cell" + ], + "id": "" + } + }, + "outputs": [ + { + "data": { + "text/plain": [ + "\n", + "[True, False, True, False, , False]\n", + "Length: 6, dtype: boolean" + ] + }, + "execution_count": 21, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "mask = pd.array([True, False, True, False, pd.NA, False], dtype=\"boolean\")\n", + "mask" + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "id": "fd577bd5", + "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", + "
ABCD
a1.401532-1.744216-0.212177-1.295240
c-0.097299-0.8344960.188575-0.271869
\n", + "
" + ], + "text/plain": [ + " A B C D\n", + "a 1.401532 -1.744216 -0.212177 -1.295240\n", + "c -0.097299 -0.834496 0.188575 -0.271869" + ] + }, + "execution_count": 22, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df1[mask]" + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "id": "4f1b5f67-5c56-4e47-8953-4d6383f283e1", + "metadata": { + "tags": [ + "hide-cell" + ] + }, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\n", + "
\n", + "
\n", + "

Let's visualize it! 🎥

\n", + "
\n", + " \n", + "
\n", + "
\n", + "
\n", + "\n", + "\n" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "from IPython.display import HTML\n", + "\n", + "display(\n", + " HTML(\n", + " \"\"\"\n", + "\n", + "\n", + "\n", + "
\n", + "
\n", + "

Let's visualize it! 🎥

\n", + "
\n", + " \n", + "
\n", + "
\n", + "
\n", + "\n", + "\n", + "\"\"\"\n", + " )\n", + ")\n" + ] + }, + { + "cell_type": "markdown", + "id": "2ff30b9c", + "metadata": {}, + "source": [ + "For getting a value explicitly:" + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "id": "7e425a66", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "1.4015323563287203" + ] + }, + "execution_count": 24, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df1.loc['a', 'A'] # this is also equivalent to ``df1.at['a','A']``" + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "id": "50e88f3d-07f0-443d-994c-d7fb36c4dc7a", + "metadata": { + "tags": [ + "hide-cell" + ] + }, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\n", + "
\n", + "
\n", + "

Let's visualize it! 🎥

\n", + "
\n", + " \n", + "
\n", + "
\n", + "
\n", + "\n", + "\n", + "\n" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "from IPython.display import HTML\n", + "\n", + "display(\n", + " HTML(\n", + " \"\"\"\n", + "\n", + "\n", + "\n", + "
\n", + "
\n", + "

Let's visualize it! 🎥

\n", + "
\n", + " \n", + "
\n", + "
\n", + "
\n", + "\n", + "\n", + "\n", + "\"\"\"\n", + " )\n", + ")\n" + ] + }, + { + "cell_type": "markdown", + "id": "b29c0cd3", + "metadata": {}, + "source": [ + "## Slicing with labels\n", + "\n", + "When using `.loc` with slices, if both the start and the stop labels are present in the index, then elements located between the two (including them) are returned:" + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "id": "2bd13eab", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "3 b\n", + "2 c\n", + "5 d\n", + "dtype: object" + ] + }, + "execution_count": 26, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "s = pd.Series(list('abcde'), index=[0, 3, 2, 5, 4])\n", + "s.loc[3:5]" + ] + }, + { + "cell_type": "code", + "execution_count": 27, + "id": "63081450-8216-403c-8b53-04b2cc18e442", + "metadata": { + "tags": [ + "hide-cell" + ] + }, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\n", + "
\n", + "
\n", + "

Let's visualize it! 🎥

\n", + "
\n", + " \n", + "
\n", + "
\n", + "
\n", + "\n", + "\n", + "\n", + "\n" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "from IPython.display import HTML\n", + "\n", + "display(\n", + " HTML(\n", + " \"\"\"\n", + "\n", + "\n", + "\n", + "
\n", + "
\n", + "

Let's visualize it! 🎥

\n", + "
\n", + " \n", + "
\n", + "
\n", + "
\n", + "\n", + "\n", + "\n", + "\n", + "\"\"\"\n", + " )\n", + ")\n" + ] + }, + { + "cell_type": "markdown", + "id": "0a1f8d46", + "metadata": {}, + "source": [ + "If at least one of the two is absent, but the index is sorted, and can be compared against start and stop labels, then slicing will still work as expected, by selecting labels which rank between the two:" + ] + }, + { + "cell_type": "code", + "execution_count": 28, + "id": "a08caf62", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "0 a\n", + "2 c\n", + "3 b\n", + "4 e\n", + "5 d\n", + "dtype: object" + ] + }, + "execution_count": 28, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "s.sort_index()" + ] + }, + { + "cell_type": "code", + "execution_count": 29, + "id": "7d665bb1-9bd1-4826-9a0f-f13496d64549", + "metadata": { + "tags": [ + "hide-cell" + ] + }, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\n", + "
\n", + "
\n", + "

Let's visualize it! 🎥

\n", + "
\n", + " \n", + "
\n", + "
\n", + "
\n", + "\n", + "\n", + "\n" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "from IPython.display import HTML\n", + "\n", + "display(\n", + " HTML(\n", + " \"\"\"\n", + "\n", + "\n", + "\n", + "
\n", + "
\n", + "

Let's visualize it! 🎥

\n", + "
\n", + " \n", + "
\n", + "
\n", + "
\n", + "\n", + "\n", + "\n", + "\"\"\"\n", + " )\n", + ")\n" + ] + }, + { + "cell_type": "code", + "execution_count": 30, + "id": "a5f5d2ba", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "2 c\n", + "3 b\n", + "4 e\n", + "5 d\n", + "dtype: object" + ] + }, + "execution_count": 30, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "s.sort_index().loc[1:6]" + ] + }, + { + "cell_type": "code", + "execution_count": 31, + "id": "81114a6f-4511-4f2e-990b-c7edd5e4cf86", + "metadata": { + "tags": [ + "hide-cell" + ] + }, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\n", + "
\n", + "
\n", + "

Let's visualize it! 🎥

\n", + "
\n", + " \n", + "
\n", + "
\n", + "
\n", + "\n", + "\n", + "\n" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "from IPython.display import HTML\n", + "\n", + "display(\n", + " HTML(\n", + " \"\"\"\n", + "\n", + "\n", + "\n", + "
\n", + "
\n", + "

Let's visualize it! 🎥

\n", + "
\n", + " \n", + "
\n", + "
\n", + "
\n", + "\n", + "\n", + "\n", + "\"\"\"\n", + " )\n", + ")\n" + ] + }, + { + "cell_type": "markdown", + "id": "5115e1d2", + "metadata": {}, + "source": [ + "However, if at least one of the two is absent and the index is not sorted, an error will be raised (since doing otherwise would be computationally expensive, as well as potentially ambiguous for mixed-type indexes). For instance, in the above example, `s.loc[1:6]` would raise `KeyError`." + ] + }, + { + "cell_type": "code", + "execution_count": 32, + "id": "318b8e37", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "3 b\n", + "2 c\n", + "5 d\n", + "dtype: object" + ] + }, + "execution_count": 32, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "s = pd.Series(list('abcdef'), index=[0, 3, 2, 5, 4, 2])\n", + "s.loc[3:5]" + ] + }, + { + "cell_type": "code", + "execution_count": 33, + "id": "537dd0b6-b4fc-468b-88a4-5d828eba5ed8", + "metadata": { + "tags": [ + "hide-cell" + ] + }, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\n", + "
\n", + "
\n", + "

Let's visualize it! 🎥

\n", + "
\n", + " \n", + "
\n", + "
\n", + "
\n", + "\n", + "\n" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "from IPython.display import HTML\n", + "\n", + "display(\n", + " HTML(\n", + " \"\"\"\n", + "\n", + "\n", + "\n", + "
\n", + "
\n", + "

Let's visualize it! 🎥

\n", + "
\n", + " \n", + "
\n", + "
\n", + "
\n", + "\n", + "\n", + "\"\"\"\n", + " )\n", + ")\n" + ] + }, + { + "cell_type": "markdown", + "id": "ce05682d", + "metadata": {}, + "source": [ + "\n", + "Also, if the index has duplicate labels and either the start or the stop label is duplicated, an error will be raised. For instance, in the above example, `s.loc[2:5]` would raise a `KeyError`.\n", + "\n", + "## Selection by position" + ] + }, + { + "cell_type": "markdown", + "id": "099c8fa7-d8df-4304-a513-1b142c1021d5", + "metadata": { + "attributes": { + "classes": [ + "warning" + ], + "id": "" + } + }, + "source": [ + "Whether a copy or a reference is returned for a setting operation, may depend on the context. This is sometimes called `chained assignment` and should be avoided." + ] + }, + { + "cell_type": "markdown", + "id": "9c2e1dab", + "metadata": {}, + "source": [ + "Pandas provides a suite of methods in order to get purely integer-based indexing. The semantics follow closely Python and NumPy slicing. These are 0-based indexing. When slicing, the start bound is included, while the upper bound is excluded. Trying to use a non-integer, even a valid label will raise an `IndexError`.\n", + "\n", + "The `.iloc` attribute is the primary access method. The following are valid inputs:\n", + "\n", + "- An integer e.g. `5`.\n", + "\n", + "- A list or array of integers `[4, 3, 0]`.\n", + "\n", + "- A slice object with ints `1:7`.\n", + "\n", + "- A boolean array.\n", + "\n", + "- A `callable`." + ] + }, + { + "cell_type": "code", + "execution_count": 34, + "id": "e7b93cb1", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "0 0.531403\n", + "2 1.164702\n", + "4 -0.384782\n", + "dtype: float64" + ] + }, + "execution_count": 34, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "s1 = pd.Series(np.random.randn(5), index=list(range(0, 10, 2)))\n", + "s1\n", + "s1.iloc[:3]" + ] + }, + { + "cell_type": "code", + "execution_count": 35, + "id": "24d4de8c-5c42-484b-89d7-e21ebb0ba7c3", + "metadata": { + "tags": [ + "hide-cell" + ] + }, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "
\n", + "
\n", + "

Let's visualize it! 🎥

\n", + "
\n", + " \n", + "
\n", + "
\n", + "
\n", + "\n" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "from IPython.display import HTML\n", + "\n", + "display(\n", + " HTML(\n", + " \"\"\"\n", + "\n", + "\n", + "
\n", + "
\n", + "

Let's visualize it! 🎥

\n", + "
\n", + " \n", + "
\n", + "
\n", + "
\n", + "\n", + "\"\"\"\n", + " )\n", + ")\n" + ] + }, + { + "cell_type": "code", + "execution_count": 36, + "id": "fe63cdf3", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "0.21764232439885461" + ] + }, + "execution_count": 36, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "s1.iloc[3]" + ] + }, + { + "cell_type": "code", + "execution_count": 37, + "id": "ed15834b-fd14-4000-bbdb-0eb86a214984", + "metadata": { + "tags": [ + "hide-cell" + ] + }, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "
\n", + "
\n", + "

Let's visualize it! 🎥

\n", + "
\n", + " \n", + "
\n", + "
\n", + "
\n", + "\n" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "from IPython.display import HTML\n", + "\n", + "display(\n", + " HTML(\n", + " \"\"\"\n", + "\n", + "\n", + "
\n", + "
\n", + "

Let's visualize it! 🎥

\n", + "
\n", + " \n", + "
\n", + "
\n", + "
\n", + "\n", + "\"\"\"\n", + " )\n", + ")\n" + ] + }, + { + "cell_type": "markdown", + "id": "4ac478c2", + "metadata": {}, + "source": [ + "Note that setting works as well:" + ] + }, + { + "cell_type": "code", + "execution_count": 38, + "id": "9c4e8129", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "0 0.000000\n", + "2 0.000000\n", + "4 0.000000\n", + "6 0.217642\n", + "8 1.458410\n", + "dtype: float64" + ] + }, + "execution_count": 38, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "s1.iloc[:3] = 0\n", + "s1" + ] + }, + { + "cell_type": "code", + "execution_count": 39, + "id": "5b793d9f-5ddb-4121-8218-8a5eda713eab", + "metadata": { + "tags": [ + "hide-cell" + ] + }, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "
\n", + "
\n", + "

Let's visualize it! 🎥

\n", + "
\n", + " \n", + "
\n", + "
\n", + "
\n", + "\n" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "from IPython.display import HTML\n", + "\n", + "display(\n", + " HTML(\n", + " \"\"\"\n", + "\n", + "\n", + "
\n", + "
\n", + "

Let's visualize it! 🎥

\n", + "
\n", + " \n", + "
\n", + "
\n", + "
\n", + "\n", + "\"\"\"\n", + " )\n", + ")\n" + ] + }, + { + "cell_type": "markdown", + "id": "56ced074", + "metadata": {}, + "source": [ + "With a DataFrame,Select via integer slicing:" + ] + }, + { + "cell_type": "code", + "execution_count": 40, + "id": "3d55d682", + "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", + "
0246
0-1.194412-0.1265400.496297-0.194096
2-1.1169511.041856-0.6626330.493678
41.497028-0.2604970.697729-1.092215
\n", + "
" + ], + "text/plain": [ + " 0 2 4 6\n", + "0 -1.194412 -0.126540 0.496297 -0.194096\n", + "2 -1.116951 1.041856 -0.662633 0.493678\n", + "4 1.497028 -0.260497 0.697729 -1.092215" + ] + }, + "execution_count": 40, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df1 = pd.DataFrame(np.random.randn(6, 4),\n", + " index=list(range(0, 12, 2)),\n", + " columns=list(range(0, 8, 2)))\n", + "df1\n", + "df1.iloc[:3]" + ] + }, + { + "cell_type": "code", + "execution_count": 41, + "id": "172e44bf-8faf-42a1-b9a7-3adab79b97d1", + "metadata": { + "tags": [ + "hide-cell" + ] + }, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "
\n", + "
\n", + "

Let's visualize it! 🎥

\n", + "
\n", + " \n", + "
\n", + "
\n", + "
\n" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "from IPython.display import HTML\n", + "\n", + "display(\n", + " HTML(\n", + " \"\"\"\n", + "\n", + "\n", + "
\n", + "
\n", + "

Let's visualize it! 🎥

\n", + "
\n", + " \n", + "
\n", + "
\n", + "
\n", + "\"\"\"\n", + " )\n", + ")\n" + ] + }, + { + "cell_type": "code", + "execution_count": 42, + "id": "b5427ec6", + "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", + "
46
2-0.6626330.493678
40.697729-1.092215
60.7153701.528302
8-0.5482320.081242
\n", + "
" + ], + "text/plain": [ + " 4 6\n", + "2 -0.662633 0.493678\n", + "4 0.697729 -1.092215\n", + "6 0.715370 1.528302\n", + "8 -0.548232 0.081242" + ] + }, + "execution_count": 42, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df1.iloc[1:5, 2:4]" + ] + }, + { + "cell_type": "markdown", + "id": "550715ab", + "metadata": {}, + "source": [ + "Select via integer list:" + ] + }, + { + "cell_type": "code", + "execution_count": 43, + "id": "d86dd6d1", + "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", + "
26
21.0418560.493678
6-0.1775171.528302
100.666088-0.595855
\n", + "
" + ], + "text/plain": [ + " 2 6\n", + "2 1.041856 0.493678\n", + "6 -0.177517 1.528302\n", + "10 0.666088 -0.595855" + ] + }, + "execution_count": 43, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df1.iloc[[1, 3, 5], [1, 3]]" + ] + }, + { + "cell_type": "code", + "execution_count": 44, + "id": "a5e2a6ba-671b-4aab-b63d-5ab4ee92501f", + "metadata": { + "tags": [ + "hide-cell" + ] + }, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "
\n", + "
\n", + "

Let's visualize it! 🎥

\n", + "
\n", + " \n", + "
\n", + "
\n", + "
\n" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "from IPython.display import HTML\n", + "\n", + "display(\n", + " HTML(\n", + " \"\"\"\n", + "\n", + "\n", + "
\n", + "
\n", + "

Let's visualize it! 🎥

\n", + "
\n", + " \n", + "
\n", + "
\n", + "
\n", + "\"\"\"\n", + " )\n", + ")\n" + ] + }, + { + "cell_type": "code", + "execution_count": 45, + "id": "8528cc39", + "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", + "
0246
2-1.1169511.041856-0.6626330.493678
41.497028-0.2604970.697729-1.092215
\n", + "
" + ], + "text/plain": [ + " 0 2 4 6\n", + "2 -1.116951 1.041856 -0.662633 0.493678\n", + "4 1.497028 -0.260497 0.697729 -1.092215" + ] + }, + "execution_count": 45, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df1.iloc[1:3, :]" + ] + }, + { + "cell_type": "code", + "execution_count": 46, + "id": "178d6f69-464f-464e-ad45-fac857b9a370", + "metadata": { + "tags": [ + "hide-cell" + ] + }, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "
\n", + "
\n", + "

Let's visualize it! 🎥

\n", + "
\n", + " \n", + "
\n", + "
\n", + "
\n", + "\n", + "\n", + "\n" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "from IPython.display import HTML\n", + "\n", + "display(\n", + " HTML(\n", + " \"\"\"\n", + "\n", + "\n", + "
\n", + "
\n", + "

Let's visualize it! 🎥

\n", + "
\n", + " \n", + "
\n", + "
\n", + "
\n", + "\n", + "\n", + "\n", + "\"\"\"\n", + " )\n", + ")\n" + ] + }, + { + "cell_type": "code", + "execution_count": 47, + "id": "f9288433", + "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", + "
24
0-0.1265400.496297
21.041856-0.662633
4-0.2604970.697729
6-0.1775170.715370
8-0.980550-0.548232
100.6660880.114509
\n", + "
" + ], + "text/plain": [ + " 2 4\n", + "0 -0.126540 0.496297\n", + "2 1.041856 -0.662633\n", + "4 -0.260497 0.697729\n", + "6 -0.177517 0.715370\n", + "8 -0.980550 -0.548232\n", + "10 0.666088 0.114509" + ] + }, + "execution_count": 47, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df1.iloc[:, 1:3]" + ] + }, + { + "cell_type": "code", + "execution_count": 48, + "id": "71859ce4-7ad5-4bea-9df2-f5929c0c2470", + "metadata": { + "tags": [ + "hide-cell" + ] + }, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "
\n", + "
\n", + "

Let's visualize it! 🎥

\n", + "
\n", + " \n", + "
\n", + "
\n", + "
\n", + "\n", + "\n" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "from IPython.display import HTML\n", + "\n", + "display(\n", + " HTML(\n", + " \"\"\"\n", + "\n", + "\n", + "
\n", + "
\n", + "

Let's visualize it! 🎥

\n", + "
\n", + " \n", + "
\n", + "
\n", + "
\n", + "\n", + "\n", + "\"\"\"\n", + " )\n", + ")\n" + ] + }, + { + "cell_type": "code", + "execution_count": 49, + "id": "eb3f25f3", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "1.0418559735628448" + ] + }, + "execution_count": 49, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df1.iloc[1, 1] # this is also equivalent to ``df1.iat[1,1]``" + ] + }, + { + "cell_type": "code", + "execution_count": 50, + "id": "5dad7d1a-0bf5-40d8-a4ef-2c3e573ae6fc", + "metadata": { + "tags": [ + "hide-cell" + ] + }, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "
\n", + "
\n", + "

Let's visualize it! 🎥

\n", + "
\n", + " \n", + "
\n", + "
\n", + "
\n", + "\n", + "\n" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "from IPython.display import HTML\n", + "\n", + "display(\n", + " HTML(\n", + " \"\"\"\n", + "\n", + "\n", + "
\n", + "
\n", + "

Let's visualize it! 🎥

\n", + "
\n", + " \n", + "
\n", + "
\n", + "
\n", + "\n", + "\n", + "\"\"\"\n", + " )\n", + ")\n" + ] + }, + { + "cell_type": "markdown", + "id": "6cb0234e", + "metadata": {}, + "source": [ + "\n", + "For getting a cross-section using an integer position (equiv to `df.xs(1)`):" + ] + }, + { + "cell_type": "code", + "execution_count": 51, + "id": "cc95030f", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "0 -1.116951\n", + "2 1.041856\n", + "4 -0.662633\n", + "6 0.493678\n", + "Name: 2, dtype: float64" + ] + }, + "execution_count": 51, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df1.iloc[1]" + ] + }, + { + "cell_type": "code", + "execution_count": 52, + "id": "bfa6df43-353d-4ba4-94a0-e65c9a659468", + "metadata": { + "tags": [ + "hide-cell" + ] + }, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "
\n", + "
\n", + "

Let's visualize it! 🎥

\n", + "
\n", + " \n", + "
\n", + "
\n", + "
\n", + "\n", + "\n" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "from IPython.display import HTML\n", + "\n", + "display(\n", + " HTML(\n", + " \"\"\"\n", + "\n", + "\n", + "
\n", + "
\n", + "

Let's visualize it! 🎥

\n", + "
\n", + " \n", + "
\n", + "
\n", + "
\n", + "\n", + "\n", + "\"\"\"\n", + " )\n", + ")\n" + ] + }, + { + "cell_type": "markdown", + "id": "bc5305b8", + "metadata": {}, + "source": [ + "Out-of-range slice indexes are handled gracefully just as in Python/NumPy." + ] + }, + { + "cell_type": "code", + "execution_count": 53, + "id": "0c635e2f", + "metadata": { + "attributes": { + "classes": [ + "code-cell" + ], + "id": "" + } + }, + "outputs": [ + { + "data": { + "text/plain": [ + "['a', 'b', 'c', 'd', 'e', 'f']" + ] + }, + "execution_count": 53, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "x = list('abcdef') # these are allowed in Python/NumPy.\n", + "x" + ] + }, + { + "cell_type": "code", + "execution_count": 54, + "id": "bae9b708", + "metadata": { + "attributes": { + "classes": [ + "code-cell" + ], + "id": "" + } + }, + "outputs": [ + { + "data": { + "text/plain": [ + "['e', 'f']" + ] + }, + "execution_count": 54, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "x[4:10]" + ] + }, + { + "cell_type": "code", + "execution_count": 55, + "id": "ccb95b2c", + "metadata": { + "attributes": { + "classes": [ + "code-cell" + ], + "id": "" + } + }, + "outputs": [ + { + "data": { + "text/plain": [ + "[]" + ] + }, + "execution_count": 55, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "x[8:10]" + ] + }, + { + "cell_type": "code", + "execution_count": 56, + "id": "fcaaeb73", + "metadata": { + "attributes": { + "classes": [ + "code-cell" + ], + "id": "" + } + }, + "outputs": [ + { + "data": { + "text/plain": [ + "0 a\n", + "1 b\n", + "2 c\n", + "3 d\n", + "4 e\n", + "5 f\n", + "dtype: object" + ] + }, + "execution_count": 56, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "s = pd.Series(x)\n", + "s" + ] + }, + { + "cell_type": "code", + "execution_count": 57, + "id": "19e7f165", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "4 e\n", + "5 f\n", + "dtype: object" + ] + }, + "execution_count": 57, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "s.iloc[4:10]" + ] + }, + { + "cell_type": "code", + "execution_count": 58, + "id": "3b612356-7774-472e-849e-0f3dc267b578", + "metadata": { + "tags": [ + "hide-cell" + ] + }, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "
\n", + "
\n", + "

Let's visualize it! 🎥

\n", + "
\n", + " \n", + "
\n", + "
\n", + "
\n", + "\n" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "from IPython.display import HTML\n", + "\n", + "display(\n", + " HTML(\n", + " \"\"\"\n", + "\n", + "\n", + "
\n", + "
\n", + "

Let's visualize it! 🎥

\n", + "
\n", + " \n", + "
\n", + "
\n", + "
\n", + "\n", + "\"\"\"\n", + " )\n", + ")\n" + ] + }, + { + "cell_type": "code", + "execution_count": 59, + "id": "2a25cc5c", + "metadata": { + "attributes": { + "classes": [ + "code-cell" + ], + "id": "" + } + }, + "outputs": [ + { + "data": { + "text/plain": [ + "Series([], dtype: object)" + ] + }, + "execution_count": 59, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "s.iloc[8:10]" + ] + }, + { + "cell_type": "markdown", + "id": "23aa8371", + "metadata": {}, + "source": [ + "Note that using slices that go out of bounds can result in an empty axis (e.g. an empty DataFrame being returned)." + ] + }, + { + "cell_type": "code", + "execution_count": 60, + "id": "f9024d15", + "metadata": { + "attributes": { + "classes": [ + "code-cell" + ], + "id": "" + }, + "tags": [] + }, + "outputs": [], + "source": [ + "dfl = pd.DataFrame(np.random.randn(5, 2), columns=list('AB'))" + ] + }, + { + "cell_type": "code", + "execution_count": 61, + "id": "5837f585", + "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", + "
0
1
2
3
4
\n", + "
" + ], + "text/plain": [ + "Empty DataFrame\n", + "Columns: []\n", + "Index: [0, 1, 2, 3, 4]" + ] + }, + "execution_count": 61, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "dfl.iloc[:, 2:3]" + ] + }, + { + "cell_type": "code", + "execution_count": 62, + "id": "4b81ac82-5d47-4410-90b9-040f0dac662b", + "metadata": { + "tags": [ + "hide-cell" + ] + }, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "
\n", + "
\n", + "

Let's visualize it! 🎥

\n", + "
\n", + " \n", + "
\n", + "
\n", + "
\n" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "from IPython.display import HTML\n", + "\n", + "display(\n", + " HTML(\n", + " \"\"\"\n", + "\n", + "\n", + "
\n", + "
\n", + "

Let's visualize it! 🎥

\n", + "
\n", + " \n", + "
\n", + "
\n", + "
\n", + "\"\"\"\n", + " )\n", + ")\n" + ] + }, + { + "cell_type": "code", + "execution_count": 63, + "id": "d0e19553", + "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", + "
B
00.700611
1-0.358047
20.620409
30.953488
4-2.263445
\n", + "
" + ], + "text/plain": [ + " B\n", + "0 0.700611\n", + "1 -0.358047\n", + "2 0.620409\n", + "3 0.953488\n", + "4 -2.263445" + ] + }, + "execution_count": 63, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "dfl.iloc[:, 1:3]" + ] + }, + { + "cell_type": "code", + "execution_count": 64, + "id": "39dab713-a3f6-4189-bad9-cba564f56951", + "metadata": { + "tags": [ + "hide-cell" + ] + }, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "
\n", + "
\n", + "

Let's visualize it! 🎥

\n", + "
\n", + " \n", + "
\n", + "
\n", + "
\n", + "\n" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "from IPython.display import HTML\n", + "\n", + "display(\n", + " HTML(\n", + " \"\"\"\n", + "\n", + "\n", + "
\n", + "
\n", + "

Let's visualize it! 🎥

\n", + "
\n", + " \n", + "
\n", + "
\n", + "
\n", + "\n", + "\"\"\"\n", + " )\n", + ")\n" + ] + }, + { + "cell_type": "code", + "execution_count": 65, + "id": "f91ab868", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
AB
40.374726-2.263445
\n", + "
" + ], + "text/plain": [ + " A B\n", + "4 0.374726 -2.263445" + ] + }, + "execution_count": 65, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "dfl.iloc[4:6]" + ] + }, + { + "cell_type": "code", + "execution_count": 66, + "id": "220aa5af-5003-45e9-87cf-c4f5d0ac6d93", + "metadata": { + "tags": [ + "hide-cell" + ] + }, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "
\n", + "
\n", + "

Let's visualize it! 🎥

\n", + "
\n", + " \n", + "
\n", + "
\n", + "
\n", + "\n" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "from IPython.display import HTML\n", + "\n", + "display(\n", + " HTML(\n", + " \"\"\"\n", + "\n", + "\n", + "
\n", + "
\n", + "

Let's visualize it! 🎥

\n", + "
\n", + " \n", + "
\n", + "
\n", + "
\n", + "\n", + "\"\"\"\n", + " )\n", + ")\n" + ] + }, + { + "cell_type": "markdown", + "id": "59c65e15", + "metadata": {}, + "source": [ + "\n", + "A single indexer that is out of bounds will raise an `IndexError`. A list of indexers where any element is out of bounds will raise an `IndexError`." + ] + }, + { + "cell_type": "code", + "execution_count": 67, + "id": "f3496be2", + "metadata": { + "attributes": { + "classes": [ + "code-cell" + ], + "id": "" + }, + "tags": [ + "raises-exception" + ] + }, + "outputs": [ + { + "ename": "IndexError", + "evalue": "positional indexers are out-of-bounds", + "output_type": "error", + "traceback": [ + "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[1;31mIndexError\u001b[0m Traceback (most recent call last)", + "File \u001b[1;32mF:\\anaconda\\Lib\\site-packages\\pandas\\core\\indexing.py:1587\u001b[0m, in \u001b[0;36m_iLocIndexer._get_list_axis\u001b[1;34m(self, key, axis)\u001b[0m\n\u001b[0;32m 1586\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[1;32m-> 1587\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mobj\u001b[38;5;241m.\u001b[39m_take_with_is_copy(key, axis\u001b[38;5;241m=\u001b[39maxis)\n\u001b[0;32m 1588\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m \u001b[38;5;167;01mIndexError\u001b[39;00m \u001b[38;5;28;01mas\u001b[39;00m err:\n\u001b[0;32m 1589\u001b[0m \u001b[38;5;66;03m# re-raise with different error message\u001b[39;00m\n", + "File \u001b[1;32mF:\\anaconda\\Lib\\site-packages\\pandas\\core\\generic.py:3902\u001b[0m, in \u001b[0;36mNDFrame._take_with_is_copy\u001b[1;34m(self, indices, axis)\u001b[0m\n\u001b[0;32m 3895\u001b[0m \u001b[38;5;250m\u001b[39m\u001b[38;5;124;03m\"\"\"\u001b[39;00m\n\u001b[0;32m 3896\u001b[0m \u001b[38;5;124;03mInternal version of the `take` method that sets the `_is_copy`\u001b[39;00m\n\u001b[0;32m 3897\u001b[0m \u001b[38;5;124;03mattribute to keep track of the parent dataframe (using in indexing\u001b[39;00m\n\u001b[1;32m (...)\u001b[0m\n\u001b[0;32m 3900\u001b[0m \u001b[38;5;124;03mSee the docstring of `take` for full explanation of the parameters.\u001b[39;00m\n\u001b[0;32m 3901\u001b[0m \u001b[38;5;124;03m\"\"\"\u001b[39;00m\n\u001b[1;32m-> 3902\u001b[0m result \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_take(indices\u001b[38;5;241m=\u001b[39mindices, axis\u001b[38;5;241m=\u001b[39maxis)\n\u001b[0;32m 3903\u001b[0m \u001b[38;5;66;03m# Maybe set copy if we didn't actually change the index.\u001b[39;00m\n", + "File \u001b[1;32mF:\\anaconda\\Lib\\site-packages\\pandas\\core\\generic.py:3886\u001b[0m, in \u001b[0;36mNDFrame._take\u001b[1;34m(self, indices, axis, convert_indices)\u001b[0m\n\u001b[0;32m 3884\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_consolidate_inplace()\n\u001b[1;32m-> 3886\u001b[0m new_data \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_mgr\u001b[38;5;241m.\u001b[39mtake(\n\u001b[0;32m 3887\u001b[0m indices,\n\u001b[0;32m 3888\u001b[0m axis\u001b[38;5;241m=\u001b[39m\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_get_block_manager_axis(axis),\n\u001b[0;32m 3889\u001b[0m verify\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mTrue\u001b[39;00m,\n\u001b[0;32m 3890\u001b[0m convert_indices\u001b[38;5;241m=\u001b[39mconvert_indices,\n\u001b[0;32m 3891\u001b[0m )\n\u001b[0;32m 3892\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_constructor(new_data)\u001b[38;5;241m.\u001b[39m__finalize__(\u001b[38;5;28mself\u001b[39m, method\u001b[38;5;241m=\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mtake\u001b[39m\u001b[38;5;124m\"\u001b[39m)\n", + "File \u001b[1;32mF:\\anaconda\\Lib\\site-packages\\pandas\\core\\internals\\managers.py:975\u001b[0m, in \u001b[0;36mBaseBlockManager.take\u001b[1;34m(self, indexer, axis, verify, convert_indices)\u001b[0m\n\u001b[0;32m 974\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m convert_indices:\n\u001b[1;32m--> 975\u001b[0m indexer \u001b[38;5;241m=\u001b[39m maybe_convert_indices(indexer, n, verify\u001b[38;5;241m=\u001b[39mverify)\n\u001b[0;32m 977\u001b[0m new_labels \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39maxes[axis]\u001b[38;5;241m.\u001b[39mtake(indexer)\n", + "File \u001b[1;32mF:\\anaconda\\Lib\\site-packages\\pandas\\core\\indexers\\utils.py:286\u001b[0m, in \u001b[0;36mmaybe_convert_indices\u001b[1;34m(indices, n, verify)\u001b[0m\n\u001b[0;32m 285\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m mask\u001b[38;5;241m.\u001b[39many():\n\u001b[1;32m--> 286\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mIndexError\u001b[39;00m(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mindices are out-of-bounds\u001b[39m\u001b[38;5;124m\"\u001b[39m)\n\u001b[0;32m 287\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m indices\n", + "\u001b[1;31mIndexError\u001b[0m: indices are out-of-bounds", + "\nThe above exception was the direct cause of the following exception:\n", + "\u001b[1;31mIndexError\u001b[0m Traceback (most recent call last)", + "Cell \u001b[1;32mIn[67], line 2\u001b[0m\n\u001b[0;32m 1\u001b[0m \u001b[38;5;66;03m#:tags: [\"raises-exception\"]\u001b[39;00m\n\u001b[1;32m----> 2\u001b[0m dfl\u001b[38;5;241m.\u001b[39miloc[[\u001b[38;5;241m4\u001b[39m, \u001b[38;5;241m5\u001b[39m, \u001b[38;5;241m6\u001b[39m]]\n", + "File \u001b[1;32mF:\\anaconda\\Lib\\site-packages\\pandas\\core\\indexing.py:1073\u001b[0m, in \u001b[0;36m_LocationIndexer.__getitem__\u001b[1;34m(self, key)\u001b[0m\n\u001b[0;32m 1070\u001b[0m axis \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39maxis \u001b[38;5;129;01mor\u001b[39;00m \u001b[38;5;241m0\u001b[39m\n\u001b[0;32m 1072\u001b[0m maybe_callable \u001b[38;5;241m=\u001b[39m com\u001b[38;5;241m.\u001b[39mapply_if_callable(key, \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mobj)\n\u001b[1;32m-> 1073\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_getitem_axis(maybe_callable, axis\u001b[38;5;241m=\u001b[39maxis)\n", + "File \u001b[1;32mF:\\anaconda\\Lib\\site-packages\\pandas\\core\\indexing.py:1616\u001b[0m, in \u001b[0;36m_iLocIndexer._getitem_axis\u001b[1;34m(self, key, axis)\u001b[0m\n\u001b[0;32m 1614\u001b[0m \u001b[38;5;66;03m# a list of integers\u001b[39;00m\n\u001b[0;32m 1615\u001b[0m \u001b[38;5;28;01melif\u001b[39;00m is_list_like_indexer(key):\n\u001b[1;32m-> 1616\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_get_list_axis(key, axis\u001b[38;5;241m=\u001b[39maxis)\n\u001b[0;32m 1618\u001b[0m \u001b[38;5;66;03m# a single integer\u001b[39;00m\n\u001b[0;32m 1619\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[0;32m 1620\u001b[0m key \u001b[38;5;241m=\u001b[39m item_from_zerodim(key)\n", + "File \u001b[1;32mF:\\anaconda\\Lib\\site-packages\\pandas\\core\\indexing.py:1590\u001b[0m, in \u001b[0;36m_iLocIndexer._get_list_axis\u001b[1;34m(self, key, axis)\u001b[0m\n\u001b[0;32m 1587\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mobj\u001b[38;5;241m.\u001b[39m_take_with_is_copy(key, axis\u001b[38;5;241m=\u001b[39maxis)\n\u001b[0;32m 1588\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m \u001b[38;5;167;01mIndexError\u001b[39;00m \u001b[38;5;28;01mas\u001b[39;00m err:\n\u001b[0;32m 1589\u001b[0m \u001b[38;5;66;03m# re-raise with different error message\u001b[39;00m\n\u001b[1;32m-> 1590\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mIndexError\u001b[39;00m(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mpositional indexers are out-of-bounds\u001b[39m\u001b[38;5;124m\"\u001b[39m) \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01merr\u001b[39;00m\n", + "\u001b[1;31mIndexError\u001b[0m: positional indexers are out-of-bounds" + ] + } + ], + "source": [ + "dfl.iloc[[4, 5, 6]]" + ] + }, + { + "cell_type": "code", + "execution_count": 68, + "id": "7b081f89", + "metadata": { + "attributes": { + "classes": [ + "code-cell" + ], + "id": "" + }, + "tags": [ + "raises-exception" + ] + }, + "outputs": [ + { + "ename": "IndexError", + "evalue": "single positional indexer is out-of-bounds", + "output_type": "error", + "traceback": [ + "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[1;31mIndexError\u001b[0m Traceback (most recent call last)", + "Cell \u001b[1;32mIn[68], line 2\u001b[0m\n\u001b[0;32m 1\u001b[0m \u001b[38;5;66;03m#:tags: [\"raises-exception\"]\u001b[39;00m\n\u001b[1;32m----> 2\u001b[0m dfl\u001b[38;5;241m.\u001b[39miloc[:, \u001b[38;5;241m4\u001b[39m]\n", + "File \u001b[1;32mF:\\anaconda\\Lib\\site-packages\\pandas\\core\\indexing.py:1067\u001b[0m, in \u001b[0;36m_LocationIndexer.__getitem__\u001b[1;34m(self, key)\u001b[0m\n\u001b[0;32m 1065\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_is_scalar_access(key):\n\u001b[0;32m 1066\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mobj\u001b[38;5;241m.\u001b[39m_get_value(\u001b[38;5;241m*\u001b[39mkey, takeable\u001b[38;5;241m=\u001b[39m\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_takeable)\n\u001b[1;32m-> 1067\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_getitem_tuple(key)\n\u001b[0;32m 1068\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[0;32m 1069\u001b[0m \u001b[38;5;66;03m# we by definition only have the 0th axis\u001b[39;00m\n\u001b[0;32m 1070\u001b[0m axis \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39maxis \u001b[38;5;129;01mor\u001b[39;00m \u001b[38;5;241m0\u001b[39m\n", + "File \u001b[1;32mF:\\anaconda\\Lib\\site-packages\\pandas\\core\\indexing.py:1563\u001b[0m, in \u001b[0;36m_iLocIndexer._getitem_tuple\u001b[1;34m(self, tup)\u001b[0m\n\u001b[0;32m 1561\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21m_getitem_tuple\u001b[39m(\u001b[38;5;28mself\u001b[39m, tup: \u001b[38;5;28mtuple\u001b[39m):\n\u001b[1;32m-> 1563\u001b[0m tup \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_validate_tuple_indexer(tup)\n\u001b[0;32m 1564\u001b[0m \u001b[38;5;28;01mwith\u001b[39;00m suppress(IndexingError):\n\u001b[0;32m 1565\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_getitem_lowerdim(tup)\n", + "File \u001b[1;32mF:\\anaconda\\Lib\\site-packages\\pandas\\core\\indexing.py:873\u001b[0m, in \u001b[0;36m_LocationIndexer._validate_tuple_indexer\u001b[1;34m(self, key)\u001b[0m\n\u001b[0;32m 871\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m i, k \u001b[38;5;129;01min\u001b[39;00m \u001b[38;5;28menumerate\u001b[39m(key):\n\u001b[0;32m 872\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[1;32m--> 873\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_validate_key(k, i)\n\u001b[0;32m 874\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m \u001b[38;5;167;01mValueError\u001b[39;00m \u001b[38;5;28;01mas\u001b[39;00m err:\n\u001b[0;32m 875\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mValueError\u001b[39;00m(\n\u001b[0;32m 876\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mLocation based indexing can only have \u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[0;32m 877\u001b[0m \u001b[38;5;124mf\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124m[\u001b[39m\u001b[38;5;132;01m{\u001b[39;00m\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_valid_types\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m] types\u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[0;32m 878\u001b[0m ) \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01merr\u001b[39;00m\n", + "File \u001b[1;32mF:\\anaconda\\Lib\\site-packages\\pandas\\core\\indexing.py:1466\u001b[0m, in \u001b[0;36m_iLocIndexer._validate_key\u001b[1;34m(self, key, axis)\u001b[0m\n\u001b[0;32m 1464\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m\n\u001b[0;32m 1465\u001b[0m \u001b[38;5;28;01melif\u001b[39;00m is_integer(key):\n\u001b[1;32m-> 1466\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_validate_integer(key, axis)\n\u001b[0;32m 1467\u001b[0m \u001b[38;5;28;01melif\u001b[39;00m \u001b[38;5;28misinstance\u001b[39m(key, \u001b[38;5;28mtuple\u001b[39m):\n\u001b[0;32m 1468\u001b[0m \u001b[38;5;66;03m# a tuple should already have been caught by this point\u001b[39;00m\n\u001b[0;32m 1469\u001b[0m \u001b[38;5;66;03m# so don't treat a tuple as a valid indexer\u001b[39;00m\n\u001b[0;32m 1470\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m IndexingError(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mToo many indexers\u001b[39m\u001b[38;5;124m\"\u001b[39m)\n", + "File \u001b[1;32mF:\\anaconda\\Lib\\site-packages\\pandas\\core\\indexing.py:1557\u001b[0m, in \u001b[0;36m_iLocIndexer._validate_integer\u001b[1;34m(self, key, axis)\u001b[0m\n\u001b[0;32m 1555\u001b[0m len_axis \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mlen\u001b[39m(\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mobj\u001b[38;5;241m.\u001b[39m_get_axis(axis))\n\u001b[0;32m 1556\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m key \u001b[38;5;241m>\u001b[39m\u001b[38;5;241m=\u001b[39m len_axis \u001b[38;5;129;01mor\u001b[39;00m key \u001b[38;5;241m<\u001b[39m \u001b[38;5;241m-\u001b[39mlen_axis:\n\u001b[1;32m-> 1557\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mIndexError\u001b[39;00m(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124msingle positional indexer is out-of-bounds\u001b[39m\u001b[38;5;124m\"\u001b[39m)\n", + "\u001b[1;31mIndexError\u001b[0m: single positional indexer is out-of-bounds" + ] + } + ], + "source": [ + "dfl.iloc[:, 4]" + ] + }, + { + "cell_type": "markdown", + "id": "b3fe22e7", + "metadata": {}, + "source": [ + "## Selection by callable\n", + "\n", + "`.loc`, `.iloc`, and also `[]` indexing can accept a `callable` as indexer. The `callable` must be a function with one argument (the calling Series or DataFrame) that returns valid output for indexing." + ] + }, + { + "cell_type": "code", + "execution_count": 69, + "id": "72420538", + "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", + "
ABCD
d0.852422-0.452728-0.3842720.370443
e0.263762-0.0533980.1358930.618338
f0.8578980.4567150.556336-1.022002
\n", + "
" + ], + "text/plain": [ + " A B C D\n", + "d 0.852422 -0.452728 -0.384272 0.370443\n", + "e 0.263762 -0.053398 0.135893 0.618338\n", + "f 0.857898 0.456715 0.556336 -1.022002" + ] + }, + "execution_count": 69, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df1 = pd.DataFrame(np.random.randn(6, 4),\n", + " index=list('abcdef'),\n", + " columns=list('ABCD'))\n", + "df1\n", + "df1.loc[lambda df: df['A'] > 0, :]" + ] + }, + { + "cell_type": "code", + "execution_count": 70, + "id": "7206088f-3aa5-4392-9982-cadec553e616", + "metadata": { + "tags": [ + "hide-cell" + ] + }, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "
\n", + "
\n", + "

Let's visualize it! 🎥

\n", + "
\n", + " \n", + "
\n", + "
\n", + "
\n" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "from IPython.display import HTML\n", + "\n", + "display(\n", + " HTML(\n", + " \"\"\"\n", + "\n", + "\n", + "
\n", + "
\n", + "

Let's visualize it! 🎥

\n", + "
\n", + " \n", + "
\n", + "
\n", + "
\n", + "\"\"\"\n", + " )\n", + ")\n" + ] + }, + { + "cell_type": "code", + "execution_count": 71, + "id": "ab18a18f", + "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", + "
AB
a-1.8630491.979038
b-0.336175-1.192626
c-0.3173142.267986
d0.852422-0.452728
e0.263762-0.053398
f0.8578980.456715
\n", + "
" + ], + "text/plain": [ + " A B\n", + "a -1.863049 1.979038\n", + "b -0.336175 -1.192626\n", + "c -0.317314 2.267986\n", + "d 0.852422 -0.452728\n", + "e 0.263762 -0.053398\n", + "f 0.857898 0.456715" + ] + }, + "execution_count": 71, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df1.loc[:, lambda df: ['A', 'B']]" + ] + }, + { + "cell_type": "code", + "execution_count": 72, + "id": "2166496e-975d-4539-a3b6-54cedd012e73", + "metadata": { + "tags": [ + "hide-cell" + ] + }, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "
\n", + "
\n", + "

Let's visualize it! 🎥

\n", + "
\n", + " \n", + "
\n", + "
\n", + "
\n", + "\n", + "\n", + "\n" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "from IPython.display import HTML\n", + "\n", + "display(\n", + " HTML(\n", + " \"\"\"\n", + "\n", + "\n", + "
\n", + "
\n", + "

Let's visualize it! 🎥

\n", + "
\n", + " \n", + "
\n", + "
\n", + "
\n", + "\n", + "\n", + "\n", + "\"\"\"\n", + " )\n", + ")\n" + ] + }, + { + "cell_type": "code", + "execution_count": 73, + "id": "aeb4a77e", + "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", + "
AB
a-1.8630491.979038
b-0.336175-1.192626
c-0.3173142.267986
d0.852422-0.452728
e0.263762-0.053398
f0.8578980.456715
\n", + "
" + ], + "text/plain": [ + " A B\n", + "a -1.863049 1.979038\n", + "b -0.336175 -1.192626\n", + "c -0.317314 2.267986\n", + "d 0.852422 -0.452728\n", + "e 0.263762 -0.053398\n", + "f 0.857898 0.456715" + ] + }, + "execution_count": 73, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df1.iloc[:, lambda df: [0, 1]]" + ] + }, + { + "cell_type": "code", + "execution_count": 74, + "id": "e8fe3be5-15de-4036-ab8a-d6483abf265f", + "metadata": { + "tags": [ + "hide-cell" + ] + }, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "
\n", + "
\n", + "

Let's visualize it! 🎥

\n", + "
\n", + " \n", + "
\n", + "
\n", + "
\n", + "\n", + "\n" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "from IPython.display import HTML\n", + "\n", + "display(\n", + " HTML(\n", + " \"\"\"\n", + "\n", + "\n", + "
\n", + "
\n", + "

Let's visualize it! 🎥

\n", + "
\n", + " \n", + "
\n", + "
\n", + "
\n", + "\n", + "\n", + "\"\"\"\n", + " )\n", + ")\n" + ] + }, + { + "cell_type": "code", + "execution_count": 75, + "id": "ec331b54", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "a -1.863049\n", + "b -0.336175\n", + "c -0.317314\n", + "d 0.852422\n", + "e 0.263762\n", + "f 0.857898\n", + "Name: A, dtype: float64" + ] + }, + "execution_count": 75, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df1[lambda df: df.columns[0]]" + ] + }, + { + "cell_type": "code", + "execution_count": 76, + "id": "31840764-a775-4e5f-8023-6c4762005ff6", + "metadata": { + "tags": [ + "hide-cell" + ] + }, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "
\n", + "
\n", + "

Let's visualize it! 🎥

\n", + "
\n", + " \n", + "
\n", + "
\n", + "
\n", + "\n" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "from IPython.display import HTML\n", + "\n", + "display(\n", + " HTML(\n", + " \"\"\"\n", + "\n", + "\n", + "
\n", + "
\n", + "

Let's visualize it! 🎥

\n", + "
\n", + " \n", + "
\n", + "
\n", + "
\n", + "\n", + "\"\"\"\n", + " )\n", + ")\n" + ] + }, + { + "cell_type": "markdown", + "id": "861f0e5e", + "metadata": {}, + "source": [ + "\n", + "You can use callable indexing in `Series`." + ] + }, + { + "cell_type": "code", + "execution_count": 77, + "id": "d4e60491", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "d 0.852422\n", + "e 0.263762\n", + "f 0.857898\n", + "Name: A, dtype: float64" + ] + }, + "execution_count": 77, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df1['A'].loc[lambda s: s > 0]" + ] + }, + { + "cell_type": "code", + "execution_count": 78, + "id": "1d7a46f1-98ce-4d87-924a-288812c6b4ed", + "metadata": { + "tags": [ + "hide-cell" + ] + }, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "
\n", + "
\n", + "

Let's visualize it! 🎥

\n", + "
\n", + " \n", + "
\n", + "
\n", + "
\n", + "\n" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "from IPython.display import HTML\n", + "\n", + "display(\n", + " HTML(\n", + " \"\"\"\n", + "\n", + "\n", + "
\n", + "
\n", + "

Let's visualize it! 🎥

\n", + "
\n", + " \n", + "
\n", + "
\n", + "
\n", + "\n", + "\"\"\"\n", + " )\n", + ")\n" + ] + }, + { + "cell_type": "markdown", + "id": "12d2d96d", + "metadata": {}, + "source": [ + "\n", + "### Combining positional and label-based indexing\n", + "\n", + "If you wish to get the 0th and the 2nd elements from the index in the `'A'` column, you can do:" + ] + }, + { + "cell_type": "code", + "execution_count": 79, + "id": "978312bb", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "a 1\n", + "c 3\n", + "Name: A, dtype: int64" + ] + }, + "execution_count": 79, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "dfd = pd.DataFrame({'A': [1, 2, 3],\n", + " 'B': [4, 5, 6]},\n", + " index=list('abc'))\n", + "dfd\n", + "dfd.loc[dfd.index[[0, 2]], 'A']" + ] + }, + { + "cell_type": "code", + "execution_count": 80, + "id": "a8844d1c-fdc5-4c85-923c-092ac6367692", + "metadata": { + "tags": [ + "hide-cell" + ] + }, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "
\n", + "
\n", + "

Let's visualize it! 🎥

\n", + "
\n", + " \n", + "
\n", + "
\n", + "
\n", + "\n" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "from IPython.display import HTML\n", + "\n", + "display(\n", + " HTML(\n", + " \"\"\"\n", + "\n", + "\n", + "
\n", + "
\n", + "

Let's visualize it! 🎥

\n", + "
\n", + " \n", + "
\n", + "
\n", + "
\n", + "\n", + "\"\"\"\n", + " )\n", + ")\n" + ] + }, + { + "cell_type": "markdown", + "id": "11210c0d", + "metadata": {}, + "source": [ + "\n", + "This can also be expressed using `.iloc`, by explicitly getting locations on the indexers, and using positional indexing to select things." + ] + }, + { + "cell_type": "code", + "execution_count": 81, + "id": "2e7e25d2", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "a 1\n", + "c 3\n", + "Name: A, dtype: int64" + ] + }, + "execution_count": 81, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "dfd.iloc[[0, 2], dfd.columns.get_loc('A')]" + ] + }, + { + "cell_type": "code", + "execution_count": 82, + "id": "48f7feb0-9334-441f-893a-42815523e739", + "metadata": { + "tags": [ + "hide-cell" + ] + }, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "
\n", + "
\n", + "

Let's visualize it! 🎥

\n", + "
\n", + " \n", + "
\n", + "
\n", + "
\n", + "\n", + "\n", + "\n" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "from IPython.display import HTML\n", + "\n", + "display(\n", + " HTML(\n", + " \"\"\"\n", + "\n", + "\n", + "
\n", + "
\n", + "

Let's visualize it! 🎥

\n", + "
\n", + " \n", + "
\n", + "
\n", + "
\n", + "\n", + "\n", + "\n", + "\"\"\"\n", + " )\n", + ")\n" + ] + }, + { + "cell_type": "markdown", + "id": "d6c36e79", + "metadata": {}, + "source": [ + "\n", + "For getting multiple indexers, using `.get_indexer`:" + ] + }, + { + "cell_type": "code", + "execution_count": 83, + "id": "7c0b22e6", + "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", + "
AB
a14
c36
\n", + "
" + ], + "text/plain": [ + " A B\n", + "a 1 4\n", + "c 3 6" + ] + }, + "execution_count": 83, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "dfd.iloc[[0, 2], dfd.columns.get_indexer(['A', 'B'])]" + ] + }, + { + "cell_type": "code", + "execution_count": 84, + "id": "c0924629-67d8-43b6-a435-d91bb8bf6408", + "metadata": { + "tags": [ + "hide-cell" + ] + }, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "
\n", + "
\n", + "

Let's visualize it! 🎥

\n", + "
\n", + " \n", + "
\n", + "
\n", + "
\n", + "\n", + "\n" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "from IPython.display import HTML\n", + "\n", + "display(\n", + " HTML(\n", + " \"\"\"\n", + "\n", + "\n", + "
\n", + "
\n", + "

Let's visualize it! 🎥

\n", + "
\n", + " \n", + "
\n", + "
\n", + "
\n", + "\n", + "\n", + "\"\"\"\n", + " )\n", + ")\n" + ] + }, + { + "cell_type": "markdown", + "id": "d97622c3-93dd-44af-94cb-9b4e4401b11b", + "metadata": {}, + "source": [ + "## Acknowledgments\n", + "\n", + "Thanks for [Pandas user guide](https://pandas.pydata.org/docs/user_guide/index.html). It contributes the majority of the content in this chapter." + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "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.4" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/_sources/data-science/working-with-data/pandas/introduction-and-data-structures.ipynb b/_sources/data-science/working-with-data/pandas/introduction-and-data-structures.ipynb new file mode 100644 index 0000000000..c5e8e9c71f --- /dev/null +++ b/_sources/data-science/working-with-data/pandas/introduction-and-data-structures.ipynb @@ -0,0 +1,7268 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "105bf8eb", + "metadata": {}, + "source": [ + "\n", + "# Introduction and Data Structures\n", + " \n", + "Pandas is a fast, powerful, flexible and easy-to-use open-source data analysis and manipulation tool, built on top of the Python programming language.\n", + "\n", + "## Introducing Pandas objects\n", + "\n", + "In 3 sections, we’ll start with a quick, non-comprehensive overview of the fundamental data structures in Pandas to get you started. The fundamental behavior about data types, indexing, axis labeling, and alignment apply across all of the objects. " + ] + }, + { + "cell_type": "markdown", + "id": "2818782f-4106-4c67-9491-5569ffdaaf19", + "metadata": {}, + "source": [ + "## Overview\n", + "\n", + "In this section, we'll introduce two data structure of pandas and the basic concept of data indexing and selection." + ] + }, + { + "cell_type": "markdown", + "id": "8e7aa789-fac6-4c4c-833b-e05c8c527491", + "metadata": {}, + "source": [ + "To get started, import NumPy and load Pandas into your namespace:" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "id": "c8e7b835", + "metadata": { + "attributes": { + "classes": [ + "code-cell" + ], + "id": "" + } + }, + "outputs": [], + "source": [ + "# Install the necessary dependencies\n", + "import os\n", + "import sys\n", + "!{sys.executable} -m pip install --quiet jupyterlab_myst ipython\n", + "import numpy as np\n", + "import pandas as pd" + ] + }, + { + "cell_type": "markdown", + "id": "bb9af208", + "metadata": {}, + "source": [ + "### Series\n", + "\n", + "`Series` is a one-dimensional labeled array capable of holding any data type (integers, strings, floating point numbers, Python objects, etc.). The axis labels are collectively referred to as the **index**. The basic method to create a `Series` is to call:" + ] + }, + { + "cell_type": "markdown", + "id": "2d6b11bf-93b8-439d-83ed-9ffae399bb1f", + "metadata": { + "attributes": { + "classes": [ + "py" + ], + "id": "" + } + }, + "source": [ + "`s = pd.Series(data, index=index)`" + ] + }, + { + "cell_type": "markdown", + "id": "475acfee", + "metadata": {}, + "source": [ + "Here, `data` can be many different things:\n", + "\n", + "- a Python dict\n", + "- an ndarray\n", + "- a scalar value (like 5)\n", + "\n", + "\n", + "The passed **index** is a list of axis labels. Thus, this separates into a few cases depending on what the **data is**:\n", + "\n", + "#### Create a Series\n", + "\n", + "##### From ndarray\n", + "\n", + "If `data` is an ndarray, **index** must be the same length as the **data**. If no index is passed, one will be created having values `[0, ..., len(data) - 1]`." + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "id": "646c8580", + "metadata": { + "attributes": { + "classes": [ + "code-cell" + ], + "id": "" + } + }, + "outputs": [], + "source": [ + "s = pd.Series(np.random.randn(5), index=[\"a\", \"b\", \"c\", \"d\", \"e\"])" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "id": "2d2455c1", + "metadata": { + "attributes": { + "classes": [ + "code-cell" + ], + "id": "" + } + }, + "outputs": [ + { + "data": { + "text/plain": [ + "a 0.142361\n", + "b 0.407910\n", + "c -0.894226\n", + "d 1.311313\n", + "e 0.710528\n", + "dtype: float64" + ] + }, + "execution_count": 13, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "s" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "id": "20f33329", + "metadata": { + "attributes": { + "classes": [ + "code-cell" + ], + "id": "" + } + }, + "outputs": [ + { + "data": { + "text/plain": [ + "Index(['a', 'b', 'c', 'd', 'e'], dtype='object')" + ] + }, + "execution_count": 14, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "s.index" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "id": "5376f720", + "metadata": { + "attributes": { + "classes": [ + "code-cell" + ], + "id": "" + } + }, + "outputs": [ + { + "data": { + "text/plain": [ + "0 0.131905\n", + "1 -0.703499\n", + "2 1.530060\n", + "3 -0.073598\n", + "4 -0.892724\n", + "dtype: float64" + ] + }, + "execution_count": 15, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "pd.Series(np.random.randn(5))" + ] + }, + { + "cell_type": "markdown", + "id": "2f4e73c7", + "metadata": {}, + "source": [ + ":::{note}\n", + "Pandas supports non-unique index values. If an operation that does not support duplicate index values is attempted, an exception will be raised at that time.\n", + ":::\n", + "\n", + "##### From dict\n", + "`Series` can be instantiated from dicts:" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "id": "e8095575", + "metadata": { + "attributes": { + "classes": [ + "code-cell" + ], + "id": "" + } + }, + "outputs": [], + "source": [ + "d = {\"b\": 1, \"a\": 0, \"c\": 2}" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "id": "ba462934", + "metadata": { + "attributes": { + "classes": [ + "code-cell" + ], + "id": "" + } + }, + "outputs": [ + { + "data": { + "text/plain": [ + "b 1\n", + "a 0\n", + "c 2\n", + "dtype: int64" + ] + }, + "execution_count": 17, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "pd.Series(d)" + ] + }, + { + "cell_type": "markdown", + "id": "c4329868", + "metadata": {}, + "source": [ + "If an index is passed, the values in data corresponding to the labels in the index will be pulled out." + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "id": "03488418", + "metadata": { + "attributes": { + "classes": [ + "code-cell" + ], + "id": "" + } + }, + "outputs": [], + "source": [ + "d = {\"a\": 0.0, \"b\": 1.0, \"c\": 2.0}" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "id": "c35e968c", + "metadata": { + "attributes": { + "classes": [ + "code-cell" + ], + "id": "" + } + }, + "outputs": [ + { + "data": { + "text/plain": [ + "a 0.0\n", + "b 1.0\n", + "c 2.0\n", + "dtype: float64" + ] + }, + "execution_count": 19, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "pd.Series(d)" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "id": "95eafc4d", + "metadata": { + "attributes": { + "classes": [ + "code-cell" + ], + "id": "" + } + }, + "outputs": [ + { + "data": { + "text/plain": [ + "b 1.0\n", + "c 2.0\n", + "d NaN\n", + "a 0.0\n", + "dtype: float64" + ] + }, + "execution_count": 20, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "pd.Series(d, index=[\"b\", \"c\", \"d\", \"a\"])" + ] + }, + { + "cell_type": "markdown", + "id": "1be5c72d", + "metadata": {}, + "source": [ + ":::{note}\n", + "NaN (not a number) is the standard missing data marker used in Pandas.\n", + ":::\n", + "\n", + "##### From scalar value\n", + "\n", + "If `data` is a scalar value, an index must be provided. The value will be repeated to match the length of **index**." + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "id": "6f744115", + "metadata": { + "attributes": { + "classes": [ + "code-cell" + ], + "id": "" + } + }, + "outputs": [ + { + "data": { + "text/plain": [ + "a 5.0\n", + "b 5.0\n", + "c 5.0\n", + "d 5.0\n", + "e 5.0\n", + "dtype: float64" + ] + }, + "execution_count": 21, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "pd.Series(5.0, index=[\"a\", \"b\", \"c\", \"d\", \"e\"])" + ] + }, + { + "cell_type": "markdown", + "id": "8060fb92", + "metadata": {}, + "source": [ + "#### Series is ndarray-like\n", + "\n", + "`Series` acts very similarly to a `ndarray` and is a valid argument to most NumPy functions. However, operations such as slicing will also slice the index." + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "id": "2ca453e9", + "metadata": { + "attributes": { + "classes": [ + "code-cell" + ], + "id": "" + } + }, + "outputs": [ + { + "data": { + "text/plain": [ + "0.14236085563166023" + ] + }, + "execution_count": 22, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "s[0]" + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "id": "4cf8e176", + "metadata": { + "attributes": { + "classes": [ + "code-cell" + ], + "id": "" + } + }, + "outputs": [ + { + "data": { + "text/plain": [ + "a 0.142361\n", + "b 0.407910\n", + "c -0.894226\n", + "dtype: float64" + ] + }, + "execution_count": 23, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "s[:3]" + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "id": "1bab7730", + "metadata": { + "attributes": { + "classes": [ + "code-cell" + ], + "id": "" + } + }, + "outputs": [ + { + "data": { + "text/plain": [ + "d 1.311313\n", + "e 0.710528\n", + "dtype: float64" + ] + }, + "execution_count": 24, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "s[s > s.median()]" + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "id": "b5e98d89", + "metadata": { + "attributes": { + "classes": [ + "code-cell" + ], + "id": "" + } + }, + "outputs": [ + { + "data": { + "text/plain": [ + "e 0.710528\n", + "d 1.311313\n", + "b 0.407910\n", + "dtype: float64" + ] + }, + "execution_count": 25, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "s[[4, 3, 1]]" + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "id": "c98a7190", + "metadata": { + "attributes": { + "classes": [ + "code-cell" + ], + "id": "" + } + }, + "outputs": [ + { + "data": { + "text/plain": [ + "a 1.152993\n", + "b 1.503672\n", + "c 0.408924\n", + "d 3.711042\n", + "e 2.035066\n", + "dtype: float64" + ] + }, + "execution_count": 26, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "np.exp(s)" + ] + }, + { + "cell_type": "markdown", + "id": "a49ee902", + "metadata": {}, + "source": [ + "Like a NumPy array, a Pandas Series has a single `dtype`." + ] + }, + { + "cell_type": "code", + "execution_count": 27, + "id": "b0298996", + "metadata": { + "attributes": { + "classes": [ + "code-cell" + ], + "id": "" + } + }, + "outputs": [ + { + "data": { + "text/plain": [ + "dtype('float64')" + ] + }, + "execution_count": 27, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "s.dtype" + ] + }, + { + "cell_type": "markdown", + "id": "69857db8", + "metadata": {}, + "source": [ + "If you need the actual array backing a `Series`, use `Series.array`." + ] + }, + { + "cell_type": "code", + "execution_count": 28, + "id": "1989c3a9", + "metadata": { + "attributes": { + "classes": [ + "code-cell" + ], + "id": "" + } + }, + "outputs": [ + { + "data": { + "text/plain": [ + "\n", + "[0.14236085563166023, 0.4079103331875502, -0.8942262958393035,\n", + " 1.3113126514940179, 0.7105280060827549]\n", + "Length: 5, dtype: float64" + ] + }, + "execution_count": 28, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "s.array" + ] + }, + { + "cell_type": "markdown", + "id": "7ed219b0", + "metadata": {}, + "source": [ + "While `Series` is ndarray-like, if you need an actual ndarray, then use `Series.to_numpy()`." + ] + }, + { + "cell_type": "code", + "execution_count": 29, + "id": "1cc04172", + "metadata": { + "attributes": { + "classes": [ + "code-cell" + ], + "id": "" + } + }, + "outputs": [ + { + "data": { + "text/plain": [ + "array([ 0.14236086, 0.40791033, -0.8942263 , 1.31131265, 0.71052801])" + ] + }, + "execution_count": 29, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "s.to_numpy()" + ] + }, + { + "cell_type": "markdown", + "id": "12f01f86", + "metadata": {}, + "source": [ + "Even if the `Series` is backed by an `ExtensionArray`, `Series.to_numpy()` will return a NumPy ndarray.\n", + "\n", + "#### Series is dict-like\n", + "\n", + "A `Series` is also like a fixed-size dict in that you can get and set values by index label:" + ] + }, + { + "cell_type": "code", + "execution_count": 30, + "id": "bcfe90c9", + "metadata": { + "attributes": { + "classes": [ + "code-cell" + ], + "id": "" + } + }, + "outputs": [ + { + "data": { + "text/plain": [ + "0.14236085563166023" + ] + }, + "execution_count": 30, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "s[\"a\"]" + ] + }, + { + "cell_type": "code", + "execution_count": 31, + "id": "00c68766", + "metadata": { + "attributes": { + "classes": [ + "code-cell" + ], + "id": "" + } + }, + "outputs": [], + "source": [ + "s[\"e\"] = 12.0" + ] + }, + { + "cell_type": "code", + "execution_count": 32, + "id": "74f58473", + "metadata": { + "attributes": { + "classes": [ + "code-cell" + ], + "id": "" + } + }, + "outputs": [ + { + "data": { + "text/plain": [ + "a 0.142361\n", + "b 0.407910\n", + "c -0.894226\n", + "d 1.311313\n", + "e 12.000000\n", + "dtype: float64" + ] + }, + "execution_count": 32, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "s" + ] + }, + { + "cell_type": "code", + "execution_count": 33, + "id": "2f822110", + "metadata": { + "attributes": { + "classes": [ + "code-cell" + ], + "id": "" + } + }, + "outputs": [ + { + "data": { + "text/plain": [ + "True" + ] + }, + "execution_count": 33, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "\"e\" in s" + ] + }, + { + "cell_type": "code", + "execution_count": 34, + "id": "164dcf61", + "metadata": { + "attributes": { + "classes": [ + "code-cell" + ], + "id": "" + } + }, + "outputs": [ + { + "data": { + "text/plain": [ + "False" + ] + }, + "execution_count": 34, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "\"f\" in s" + ] + }, + { + "cell_type": "markdown", + "id": "ca979c84", + "metadata": {}, + "source": [ + "If a label is not contained in the index, an exception is raised:" + ] + }, + { + "cell_type": "code", + "execution_count": 35, + "id": "40a23c62-9c88-4a6e-9316-60317abe7859", + "metadata": { + "attributes": { + "classes": [ + "code-cell" + ], + "id": "" + }, + "tags": [ + "raises-exception" + ] + }, + "outputs": [ + { + "ename": "KeyError", + "evalue": "'f'", + "output_type": "error", + "traceback": [ + "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[1;31mKeyError\u001b[0m Traceback (most recent call last)", + "File \u001b[1;32mF:\\anaconda\\Lib\\site-packages\\pandas\\core\\indexes\\base.py:3802\u001b[0m, in \u001b[0;36mIndex.get_loc\u001b[1;34m(self, key, method, tolerance)\u001b[0m\n\u001b[0;32m 3801\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[1;32m-> 3802\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_engine\u001b[38;5;241m.\u001b[39mget_loc(casted_key)\n\u001b[0;32m 3803\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m \u001b[38;5;167;01mKeyError\u001b[39;00m \u001b[38;5;28;01mas\u001b[39;00m err:\n", + "File \u001b[1;32mF:\\anaconda\\Lib\\site-packages\\pandas\\_libs\\index.pyx:138\u001b[0m, in \u001b[0;36mpandas._libs.index.IndexEngine.get_loc\u001b[1;34m()\u001b[0m\n", + "File \u001b[1;32mF:\\anaconda\\Lib\\site-packages\\pandas\\_libs\\index.pyx:165\u001b[0m, in \u001b[0;36mpandas._libs.index.IndexEngine.get_loc\u001b[1;34m()\u001b[0m\n", + "File \u001b[1;32mpandas\\_libs\\hashtable_class_helper.pxi:5745\u001b[0m, in \u001b[0;36mpandas._libs.hashtable.PyObjectHashTable.get_item\u001b[1;34m()\u001b[0m\n", + "File \u001b[1;32mpandas\\_libs\\hashtable_class_helper.pxi:5753\u001b[0m, in \u001b[0;36mpandas._libs.hashtable.PyObjectHashTable.get_item\u001b[1;34m()\u001b[0m\n", + "\u001b[1;31mKeyError\u001b[0m: 'f'", + "\nThe above exception was the direct cause of the following exception:\n", + "\u001b[1;31mKeyError\u001b[0m Traceback (most recent call last)", + "Cell \u001b[1;32mIn[35], line 1\u001b[0m\n\u001b[1;32m----> 1\u001b[0m s[\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mf\u001b[39m\u001b[38;5;124m\"\u001b[39m]\n", + "File \u001b[1;32mF:\\anaconda\\Lib\\site-packages\\pandas\\core\\series.py:981\u001b[0m, in \u001b[0;36mSeries.__getitem__\u001b[1;34m(self, key)\u001b[0m\n\u001b[0;32m 978\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_values[key]\n\u001b[0;32m 980\u001b[0m \u001b[38;5;28;01melif\u001b[39;00m key_is_scalar:\n\u001b[1;32m--> 981\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_get_value(key)\n\u001b[0;32m 983\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m is_hashable(key):\n\u001b[0;32m 984\u001b[0m \u001b[38;5;66;03m# Otherwise index.get_value will raise InvalidIndexError\u001b[39;00m\n\u001b[0;32m 985\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[0;32m 986\u001b[0m \u001b[38;5;66;03m# For labels that don't resolve as scalars like tuples and frozensets\u001b[39;00m\n", + "File \u001b[1;32mF:\\anaconda\\Lib\\site-packages\\pandas\\core\\series.py:1089\u001b[0m, in \u001b[0;36mSeries._get_value\u001b[1;34m(self, label, takeable)\u001b[0m\n\u001b[0;32m 1086\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_values[label]\n\u001b[0;32m 1088\u001b[0m \u001b[38;5;66;03m# Similar to Index.get_value, but we do not fall back to positional\u001b[39;00m\n\u001b[1;32m-> 1089\u001b[0m loc \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mindex\u001b[38;5;241m.\u001b[39mget_loc(label)\n\u001b[0;32m 1090\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mindex\u001b[38;5;241m.\u001b[39m_get_values_for_loc(\u001b[38;5;28mself\u001b[39m, loc, label)\n", + "File \u001b[1;32mF:\\anaconda\\Lib\\site-packages\\pandas\\core\\indexes\\base.py:3804\u001b[0m, in \u001b[0;36mIndex.get_loc\u001b[1;34m(self, key, method, tolerance)\u001b[0m\n\u001b[0;32m 3802\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_engine\u001b[38;5;241m.\u001b[39mget_loc(casted_key)\n\u001b[0;32m 3803\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m \u001b[38;5;167;01mKeyError\u001b[39;00m \u001b[38;5;28;01mas\u001b[39;00m err:\n\u001b[1;32m-> 3804\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mKeyError\u001b[39;00m(key) \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01merr\u001b[39;00m\n\u001b[0;32m 3805\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m \u001b[38;5;167;01mTypeError\u001b[39;00m:\n\u001b[0;32m 3806\u001b[0m \u001b[38;5;66;03m# If we have a listlike key, _check_indexing_error will raise\u001b[39;00m\n\u001b[0;32m 3807\u001b[0m \u001b[38;5;66;03m# InvalidIndexError. Otherwise we fall through and re-raise\u001b[39;00m\n\u001b[0;32m 3808\u001b[0m \u001b[38;5;66;03m# the TypeError.\u001b[39;00m\n\u001b[0;32m 3809\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_check_indexing_error(key)\n", + "\u001b[1;31mKeyError\u001b[0m: 'f'" + ] + } + ], + "source": [ + "s[\"f\"]" + ] + }, + { + "cell_type": "markdown", + "id": "396df6e2", + "metadata": {}, + "source": [ + "Using the `Series.get()` method, a missing label will return None or specified default:" + ] + }, + { + "cell_type": "code", + "execution_count": 37, + "id": "ad2a67c6", + "metadata": { + "attributes": { + "classes": [ + "code-cell" + ], + "id": "" + } + }, + "outputs": [], + "source": [ + "s.get(\"f\")" + ] + }, + { + "cell_type": "code", + "execution_count": 38, + "id": "13c1c13b", + "metadata": { + "attributes": { + "classes": [ + "code-cell" + ], + "id": "" + } + }, + "outputs": [ + { + "data": { + "text/plain": [ + "nan" + ] + }, + "execution_count": 38, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "s.get(\"f\", np.nan)" + ] + }, + { + "cell_type": "markdown", + "id": "1b19c44c", + "metadata": {}, + "source": [ + "These labels can also be accessed by `attribute`.\n", + "\n", + "#### Vectorized operations and label alignment with Series\n", + "\n", + "When working with raw NumPy arrays, looping through value-by-value is usually not necessary. The same is true when working with `Series` in Pandas. `Series` can also be passed into most NumPy methods expecting an ndarray." + ] + }, + { + "cell_type": "code", + "execution_count": 39, + "id": "35540134", + "metadata": { + "attributes": { + "classes": [ + "code-cell" + ], + "id": "" + } + }, + "outputs": [ + { + "data": { + "text/plain": [ + "a 0.284722\n", + "b 0.815821\n", + "c -1.788453\n", + "d 2.622625\n", + "e 24.000000\n", + "dtype: float64" + ] + }, + "execution_count": 39, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "s + s" + ] + }, + { + "cell_type": "code", + "execution_count": 40, + "id": "aea7c1dc", + "metadata": { + "attributes": { + "classes": [ + "code-cell" + ], + "id": "" + } + }, + "outputs": [ + { + "data": { + "text/plain": [ + "a 0.284722\n", + "b 0.815821\n", + "c -1.788453\n", + "d 2.622625\n", + "e 24.000000\n", + "dtype: float64" + ] + }, + "execution_count": 40, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "s * 2" + ] + }, + { + "cell_type": "code", + "execution_count": 41, + "id": "4dcdc8c4", + "metadata": { + "attributes": { + "classes": [ + "code-cell" + ], + "id": "" + } + }, + "outputs": [ + { + "data": { + "text/plain": [ + "a 1.152993\n", + "b 1.503672\n", + "c 0.408924\n", + "d 3.711042\n", + "e 162754.791419\n", + "dtype: float64" + ] + }, + "execution_count": 41, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "np.exp(s)" + ] + }, + { + "cell_type": "markdown", + "id": "f8ed10f3", + "metadata": {}, + "source": [ + "A key difference between `Series` and ndarray is that operations between `Series` automatically align the data based on the label. Thus, you can write computations without giving consideration to whether the `Series` involved have the same labels." + ] + }, + { + "cell_type": "code", + "execution_count": 42, + "id": "563555a0", + "metadata": { + "attributes": { + "classes": [ + "code-cell" + ], + "id": "" + } + }, + "outputs": [ + { + "data": { + "text/plain": [ + "a NaN\n", + "b 0.815821\n", + "c -1.788453\n", + "d 2.622625\n", + "e NaN\n", + "dtype: float64" + ] + }, + "execution_count": 42, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "s[1:] + s[:-1]" + ] + }, + { + "cell_type": "markdown", + "id": "7e19643a", + "metadata": {}, + "source": [ + "The result of an operation between unaligned `Series` will have the **union** of the indexes involved. If a label is not found in one `Series` or the other, the result will be marked as missing `NaN`. Being able to write code without doing any explicit data alignment grants immense freedom and flexibility in interactive data analysis and research. The integrated data alignment features of the Pandas data structures set Pandas apart from the majority of related tools for working with labeled data.\n", + "\n", + ":::{note}\n", + "In general, we chose to make the default result of operations between differently indexed objects yield the **union** of the indexes in order to avoid loss of information. Having an index label, though the data is missing, is typically important information as part of a computation. You of course have the option of dropping labels with missing data via the `dropna` function.\n", + ":::\n", + "\n", + "#### Name attribute\n", + "\n", + "`Series` also has a `name` attribute:" + ] + }, + { + "cell_type": "code", + "execution_count": 43, + "id": "3b39834b", + "metadata": { + "attributes": { + "classes": [ + "code-cell" + ], + "id": "" + } + }, + "outputs": [], + "source": [ + "s = pd.Series(np.random.randn(5), name=\"something\")" + ] + }, + { + "cell_type": "code", + "execution_count": 44, + "id": "18210d7f", + "metadata": { + "attributes": { + "classes": [ + "code-cell" + ], + "id": "" + } + }, + "outputs": [ + { + "data": { + "text/plain": [ + "0 0.836867\n", + "1 -0.187063\n", + "2 0.180988\n", + "3 0.434802\n", + "4 1.175946\n", + "Name: something, dtype: float64" + ] + }, + "execution_count": 44, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "s" + ] + }, + { + "cell_type": "code", + "execution_count": 45, + "id": "06f09ce2", + "metadata": { + "attributes": { + "classes": [ + "code-cell" + ], + "id": "" + } + }, + "outputs": [ + { + "data": { + "text/plain": [ + "'something'" + ] + }, + "execution_count": 45, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "s.name" + ] + }, + { + "cell_type": "markdown", + "id": "b35b499b", + "metadata": {}, + "source": [ + "The `Series` `name` can be assigned automatically in many cases, in particular, when selecting a single column from a `DataFrame`, the `name` will be assigned the column label.\n", + "\n", + "You can rename a `Series` with the `pandas.Series.rename()` method." + ] + }, + { + "cell_type": "code", + "execution_count": 46, + "id": "bd079c61", + "metadata": { + "attributes": { + "classes": [ + "code-cell" + ], + "id": "" + } + }, + "outputs": [], + "source": [ + "s2 = s.rename(\"different\")" + ] + }, + { + "cell_type": "code", + "execution_count": 47, + "id": "a1767258", + "metadata": { + "attributes": { + "classes": [ + "code-cell" + ], + "id": "" + } + }, + "outputs": [ + { + "data": { + "text/plain": [ + "'different'" + ] + }, + "execution_count": 47, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "s2.name" + ] + }, + { + "cell_type": "markdown", + "id": "398a679d", + "metadata": {}, + "source": [ + "Note that `s` and `s2` refer to different objects.\n", + "\n", + "### DataFrame\n", + "\n", + "`DataFrame` is a 2-dimensional labeled data structure with columns of potentially different types. You can think of it like a spreadsheet or SQL table, or a `dict` of `Series` objects. It is generally the most commonly used Pandas object. Like `Series`, `DataFrame` accepts many different kinds of input:\n", + "\n", + "- Dict of 1D ndarrays, lists, dicts, or `Series`\n", + "- 2-D `numpy.ndarray`\n", + "- Structured or record ndarray\n", + "- A `Series`\n", + "- Another `DataFrame`\n", + "\n", + "Along with the data, you can optionally pass **index** (row labels) and **columns** (column labels) arguments. If you pass an index and / or columns, you are guaranteeing the index and / or columns of the resulting `DataFrame`. Thus, a `dict` of Series plus a specific index will discard all data not matching up to the passed index.\n", + "\n", + "If axis labels are not passed, they will be constructed from the input data based on common sense rules.\n", + "\n", + "#### Create a Dataframe\n", + "\n", + "##### From dict of `Series` or dicts\n", + "\n", + "The resulting **index** will be the **union** of the indexes of the various Series. If there are any nested dicts, these will first be converted to Series. If no columns are passed, the columns will be the ordered list of `dict` keys." + ] + }, + { + "cell_type": "code", + "execution_count": 48, + "id": "aa7ddc8a", + "metadata": { + "attributes": { + "classes": [ + "code-cell" + ], + "id": "" + } + }, + "outputs": [], + "source": [ + "d = {\n", + " \"one\": pd.Series([1.0, 2.0, 3.0], index=[\"a\", \"b\", \"c\"]),\n", + " \"two\": pd.Series([1.0, 2.0, 3.0, 4.0], index=[\"a\", \"b\", \"c\", \"d\"]),\n", + "}" + ] + }, + { + "cell_type": "code", + "execution_count": 49, + "id": "f526badc", + "metadata": { + "attributes": { + "classes": [ + "code-cell" + ], + "id": "" + } + }, + "outputs": [], + "source": [ + "df = pd.DataFrame(d)" + ] + }, + { + "cell_type": "code", + "execution_count": 50, + "id": "69ddc66c", + "metadata": { + "attributes": { + "classes": [ + "code-cell" + ], + "id": "" + } + }, + "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", + "
onetwo
a1.01.0
b2.02.0
c3.03.0
dNaN4.0
\n", + "
" + ], + "text/plain": [ + " one two\n", + "a 1.0 1.0\n", + "b 2.0 2.0\n", + "c 3.0 3.0\n", + "d NaN 4.0" + ] + }, + "execution_count": 50, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df" + ] + }, + { + "cell_type": "code", + "execution_count": 51, + "id": "1f5e8ccb", + "metadata": { + "attributes": { + "classes": [ + "code-cell" + ], + "id": "" + } + }, + "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", + "
onetwo
dNaN4.0
b2.02.0
a1.01.0
\n", + "
" + ], + "text/plain": [ + " one two\n", + "d NaN 4.0\n", + "b 2.0 2.0\n", + "a 1.0 1.0" + ] + }, + "execution_count": 51, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "pd.DataFrame(d, index=[\"d\", \"b\", \"a\"])" + ] + }, + { + "cell_type": "code", + "execution_count": 52, + "id": "9940fb65", + "metadata": { + "attributes": { + "classes": [ + "code-cell" + ], + "id": "" + } + }, + "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", + "
twothree
d4.0NaN
b2.0NaN
a1.0NaN
\n", + "
" + ], + "text/plain": [ + " two three\n", + "d 4.0 NaN\n", + "b 2.0 NaN\n", + "a 1.0 NaN" + ] + }, + "execution_count": 52, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "pd.DataFrame(d, index=[\"d\", \"b\", \"a\"], columns=[\"two\", \"three\"])" + ] + }, + { + "cell_type": "markdown", + "id": "93b5a50c", + "metadata": {}, + "source": [ + "The row and column labels can be accessed respectively by accessing the **index** and **columns** attributes:\n", + "\n", + ":::{note}\n", + "When a particular set of columns is passed along with a dict of data, the passed columns override the keys in the dict.\n", + ":::" + ] + }, + { + "cell_type": "code", + "execution_count": 53, + "id": "8a3ba6ae", + "metadata": { + "attributes": { + "classes": [ + "code-cell" + ], + "id": "" + } + }, + "outputs": [ + { + "data": { + "text/plain": [ + "Index(['a', 'b', 'c', 'd'], dtype='object')" + ] + }, + "execution_count": 53, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df.index" + ] + }, + { + "cell_type": "code", + "execution_count": 54, + "id": "13684125", + "metadata": { + "attributes": { + "classes": [ + "code-cell" + ], + "id": "" + } + }, + "outputs": [ + { + "data": { + "text/plain": [ + "Index(['one', 'two'], dtype='object')" + ] + }, + "execution_count": 54, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df.columns" + ] + }, + { + "cell_type": "markdown", + "id": "49c8bc9a", + "metadata": {}, + "source": [ + "##### From dict of ndarrays / lists\n", + "\n", + "The ndarrays must all be the same length. If an index is passed, it must also be the same length as the arrays. If no index is passed, the result will be `range(n)`, where `n` is the array length." + ] + }, + { + "cell_type": "code", + "execution_count": 55, + "id": "c4789555", + "metadata": { + "attributes": { + "classes": [ + "code-cell" + ], + "id": "" + } + }, + "outputs": [], + "source": [ + "d = {\"one\": [1.0, 2.0, 3.0, 4.0], \"two\": [4.0, 3.0, 2.0, 1.0]}" + ] + }, + { + "cell_type": "code", + "execution_count": 56, + "id": "29098be0", + "metadata": { + "attributes": { + "classes": [ + "code-cell" + ], + "id": "" + } + }, + "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", + "
onetwo
01.04.0
12.03.0
23.02.0
34.01.0
\n", + "
" + ], + "text/plain": [ + " one two\n", + "0 1.0 4.0\n", + "1 2.0 3.0\n", + "2 3.0 2.0\n", + "3 4.0 1.0" + ] + }, + "execution_count": 56, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "pd.DataFrame(d)" + ] + }, + { + "cell_type": "code", + "execution_count": 57, + "id": "5600834a", + "metadata": { + "attributes": { + "classes": [ + "code-cell" + ], + "id": "" + } + }, + "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", + "
onetwo
a1.04.0
b2.03.0
c3.02.0
d4.01.0
\n", + "
" + ], + "text/plain": [ + " one two\n", + "a 1.0 4.0\n", + "b 2.0 3.0\n", + "c 3.0 2.0\n", + "d 4.0 1.0" + ] + }, + "execution_count": 57, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "pd.DataFrame(d, index=[\"a\", \"b\", \"c\", \"d\"])" + ] + }, + { + "cell_type": "markdown", + "id": "506868de", + "metadata": {}, + "source": [ + "##### From structured or record array\n", + "\n", + "This case is handled identically to a dict of arrays." + ] + }, + { + "cell_type": "code", + "execution_count": 58, + "id": "0b3b5090", + "metadata": { + "attributes": { + "classes": [ + "code-cell" + ], + "id": "" + } + }, + "outputs": [], + "source": [ + "data = np.zeros((2,), dtype=[(\"A\", \"i4\"), (\"B\", \"f4\"), (\"C\", \"a10\")])" + ] + }, + { + "cell_type": "code", + "execution_count": 59, + "id": "543153a7", + "metadata": { + "attributes": { + "classes": [ + "code-cell" + ], + "id": "" + } + }, + "outputs": [], + "source": [ + "data[:] = [(1, 2.0, \"Hello\"), (2, 3.0, \"World\")]" + ] + }, + { + "cell_type": "code", + "execution_count": 60, + "id": "c5278e68", + "metadata": { + "attributes": { + "classes": [ + "code-cell" + ], + "id": "" + } + }, + "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", + "
ABC
012.0b'Hello'
123.0b'World'
\n", + "
" + ], + "text/plain": [ + " A B C\n", + "0 1 2.0 b'Hello'\n", + "1 2 3.0 b'World'" + ] + }, + "execution_count": 60, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "pd.DataFrame(data)" + ] + }, + { + "cell_type": "code", + "execution_count": 61, + "id": "fefbfc51", + "metadata": { + "attributes": { + "classes": [ + "code-cell" + ], + "id": "" + } + }, + "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", + "
ABC
first12.0b'Hello'
second23.0b'World'
\n", + "
" + ], + "text/plain": [ + " A B C\n", + "first 1 2.0 b'Hello'\n", + "second 2 3.0 b'World'" + ] + }, + "execution_count": 61, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "pd.DataFrame(data, index=[\"first\", \"second\"])" + ] + }, + { + "cell_type": "code", + "execution_count": 62, + "id": "f76d517a", + "metadata": { + "attributes": { + "classes": [ + "code-cell" + ], + "id": "" + } + }, + "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", + "
CAB
0b'Hello'12.0
1b'World'23.0
\n", + "
" + ], + "text/plain": [ + " C A B\n", + "0 b'Hello' 1 2.0\n", + "1 b'World' 2 3.0" + ] + }, + "execution_count": 62, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "pd.DataFrame(data, columns=[\"C\", \"A\", \"B\"])" + ] + }, + { + "cell_type": "markdown", + "id": "75f7c017", + "metadata": {}, + "source": [ + ":::{note}\n", + "DataFrame is not intended to work exactly like a 2-dimensional NumPy ndarray.\n", + ":::\n", + "\n", + "\n", + "##### From a list of dicts" + ] + }, + { + "cell_type": "code", + "execution_count": 63, + "id": "a2aa6cb3", + "metadata": { + "attributes": { + "classes": [ + "code-cell" + ], + "id": "" + } + }, + "outputs": [], + "source": [ + "data2 = [{\"a\": 1, \"b\": 2}, {\"a\": 5, \"b\": 10, \"c\": 20}]" + ] + }, + { + "cell_type": "code", + "execution_count": 64, + "id": "1e45ffbc", + "metadata": { + "attributes": { + "classes": [ + "code-cell" + ], + "id": "" + } + }, + "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", + "
abc
012NaN
151020.0
\n", + "
" + ], + "text/plain": [ + " a b c\n", + "0 1 2 NaN\n", + "1 5 10 20.0" + ] + }, + "execution_count": 64, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "pd.DataFrame(data2)" + ] + }, + { + "cell_type": "code", + "execution_count": 65, + "id": "8d6db924", + "metadata": { + "attributes": { + "classes": [ + "code-cell" + ], + "id": "" + } + }, + "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", + "
abc
first12NaN
second51020.0
\n", + "
" + ], + "text/plain": [ + " a b c\n", + "first 1 2 NaN\n", + "second 5 10 20.0" + ] + }, + "execution_count": 65, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "pd.DataFrame(data2, index=[\"first\", \"second\"])" + ] + }, + { + "cell_type": "code", + "execution_count": 66, + "id": "258fa418", + "metadata": { + "attributes": { + "classes": [ + "code-cell" + ], + "id": "" + } + }, + "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", + "
ab
012
1510
\n", + "
" + ], + "text/plain": [ + " a b\n", + "0 1 2\n", + "1 5 10" + ] + }, + "execution_count": 66, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "pd.DataFrame(data2, columns=[\"a\", \"b\"])" + ] + }, + { + "cell_type": "markdown", + "id": "dfb77761", + "metadata": {}, + "source": [ + "##### From a dict of tuples\n", + "\n", + "You can automatically create a MultiIndexed frame by passing a tuples dictionary." + ] + }, + { + "cell_type": "code", + "execution_count": 67, + "id": "89af5166", + "metadata": { + "attributes": { + "classes": [ + "code-cell" + ], + "id": "" + } + }, + "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", + "
ab
bacab
AB1.04.05.08.010.0
C2.03.06.07.0NaN
DNaNNaNNaNNaN9.0
\n", + "
" + ], + "text/plain": [ + " a b \n", + " b a c a b\n", + "A B 1.0 4.0 5.0 8.0 10.0\n", + " C 2.0 3.0 6.0 7.0 NaN\n", + " D NaN NaN NaN NaN 9.0" + ] + }, + "execution_count": 67, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "pd.DataFrame(\n", + " {\n", + " (\"a\", \"b\"): {(\"A\", \"B\"): 1, (\"A\", \"C\"): 2},\n", + " (\"a\", \"a\"): {(\"A\", \"C\"): 3, (\"A\", \"B\"): 4},\n", + " (\"a\", \"c\"): {(\"A\", \"B\"): 5, (\"A\", \"C\"): 6},\n", + " (\"b\", \"a\"): {(\"A\", \"C\"): 7, (\"A\", \"B\"): 8},\n", + " (\"b\", \"b\"): {(\"A\", \"D\"): 9, (\"A\", \"B\"): 10},\n", + " }\n", + ")" + ] + }, + { + "cell_type": "markdown", + "id": "e02d86d6", + "metadata": {}, + "source": [ + "##### From a Series\n", + "\n", + "The result will be a DataFrame with the same index as the input Series, and with one column whose name is the original name of the Series (only if no other column name provided)." + ] + }, + { + "cell_type": "code", + "execution_count": 68, + "id": "77ff8552", + "metadata": { + "attributes": { + "classes": [ + "code-cell" + ], + "id": "" + } + }, + "outputs": [], + "source": [ + "ser = pd.Series(range(3), index=list(\"abc\"), name=\"ser\")" + ] + }, + { + "cell_type": "code", + "execution_count": 69, + "id": "a86d1926", + "metadata": { + "attributes": { + "classes": [ + "code-cell" + ], + "id": "" + } + }, + "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", + "
ser
a0
b1
c2
\n", + "
" + ], + "text/plain": [ + " ser\n", + "a 0\n", + "b 1\n", + "c 2" + ] + }, + "execution_count": 69, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "pd.DataFrame(ser)" + ] + }, + { + "cell_type": "markdown", + "id": "2f824850", + "metadata": {}, + "source": [ + "##### From a list of namedtuples\n", + "\n", + "The field names of the first `namedtuple` in the list determine the columns of the `DataFrame`. The remaining namedtuples (or tuples) are simply unpacked and their values are fed into the rows of the `DataFrame`. If any of those tuples is shorter than the first `namedtuple` then the later columns in the corresponding row are marked as missing values. If any are longer than the first `namedtuple` , a `ValueError` is raised." + ] + }, + { + "cell_type": "code", + "execution_count": 70, + "id": "67fd765e", + "metadata": { + "attributes": { + "classes": [ + "code-cell" + ], + "id": "" + } + }, + "outputs": [], + "source": [ + "from collections import namedtuple" + ] + }, + { + "cell_type": "code", + "execution_count": 71, + "id": "d4524af3", + "metadata": { + "attributes": { + "classes": [ + "code-cell" + ], + "id": "" + } + }, + "outputs": [], + "source": [ + "Point = namedtuple(\"Point\", \"x y\")" + ] + }, + { + "cell_type": "code", + "execution_count": 72, + "id": "02f0937c", + "metadata": { + "attributes": { + "classes": [ + "code-cell" + ], + "id": "" + } + }, + "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", + "
xy
000
103
223
\n", + "
" + ], + "text/plain": [ + " x y\n", + "0 0 0\n", + "1 0 3\n", + "2 2 3" + ] + }, + "execution_count": 72, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "pd.DataFrame([Point(0, 0), Point(0, 3), (2, 3)])" + ] + }, + { + "cell_type": "code", + "execution_count": 73, + "id": "4c81da05", + "metadata": { + "attributes": { + "classes": [ + "code-cell" + ], + "id": "" + } + }, + "outputs": [], + "source": [ + "Point3D = namedtuple(\"Point3D\", \"x y z\")" + ] + }, + { + "cell_type": "code", + "execution_count": 74, + "id": "6731aad6", + "metadata": { + "attributes": { + "classes": [ + "code-cell" + ], + "id": "" + } + }, + "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", + "
xyz
0000.0
1035.0
223NaN
\n", + "
" + ], + "text/plain": [ + " x y z\n", + "0 0 0 0.0\n", + "1 0 3 5.0\n", + "2 2 3 NaN" + ] + }, + "execution_count": 74, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "pd.DataFrame([Point3D(0, 0, 0), Point3D(0, 3, 5), Point(2, 3)])" + ] + }, + { + "cell_type": "markdown", + "id": "8ff0bca2", + "metadata": {}, + "source": [ + "##### From a list of dataclasses\n", + "\n", + "Data Classes as introduced in PEP557, can be passed into the DataFrame constructor. Passing a list of dataclasses is equivalent to passing a list of dictionaries.\n", + "\n", + "Please be aware, that all values in the list should be dataclasses, mixing types in the list would result in a `TypeError`." + ] + }, + { + "cell_type": "code", + "execution_count": 75, + "id": "5fe92237", + "metadata": { + "attributes": { + "classes": [ + "code-cell" + ], + "id": "" + } + }, + "outputs": [], + "source": [ + "from dataclasses import make_dataclass" + ] + }, + { + "cell_type": "code", + "execution_count": 76, + "id": "e13b27cf", + "metadata": { + "attributes": { + "classes": [ + "code-cell" + ], + "id": "" + } + }, + "outputs": [], + "source": [ + "Point = make_dataclass(\"Point\", [(\"x\", int), (\"y\", int)])" + ] + }, + { + "cell_type": "code", + "execution_count": 77, + "id": "df6b2816", + "metadata": { + "attributes": { + "classes": [ + "code-cell" + ], + "id": "" + } + }, + "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", + "
xy
000
103
223
\n", + "
" + ], + "text/plain": [ + " x y\n", + "0 0 0\n", + "1 0 3\n", + "2 2 3" + ] + }, + "execution_count": 77, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "pd.DataFrame([Point(0, 0), Point(0, 3), Point(2, 3)])" + ] + }, + { + "cell_type": "markdown", + "id": "8e826768", + "metadata": {}, + "source": [ + "#### Column selection, addition, deletion\n", + "\n", + "You can treat a `DataFrame` semantically like a dict of like-indexed `Series` objects. Getting, setting, and deleting columns works with the same syntax as the analogous dict operations:" + ] + }, + { + "cell_type": "code", + "execution_count": 78, + "id": "a52d0734", + "metadata": { + "attributes": { + "classes": [ + "code-cell" + ], + "id": "" + } + }, + "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", + "
onetwo
a1.01.0
b2.02.0
c3.03.0
dNaN4.0
\n", + "
" + ], + "text/plain": [ + " one two\n", + "a 1.0 1.0\n", + "b 2.0 2.0\n", + "c 3.0 3.0\n", + "d NaN 4.0" + ] + }, + "execution_count": 78, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df" + ] + }, + { + "cell_type": "code", + "execution_count": 79, + "id": "804405d6", + "metadata": { + "attributes": { + "classes": [ + "code-cell" + ], + "id": "" + } + }, + "outputs": [ + { + "data": { + "text/plain": [ + "a 1.0\n", + "b 2.0\n", + "c 3.0\n", + "d NaN\n", + "Name: one, dtype: float64" + ] + }, + "execution_count": 79, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df[\"one\"]" + ] + }, + { + "cell_type": "code", + "execution_count": 80, + "id": "dfa00c9b", + "metadata": { + "attributes": { + "classes": [ + "code-cell" + ], + "id": "" + } + }, + "outputs": [], + "source": [ + "df[\"three\"] = df[\"one\"] * df[\"two\"]" + ] + }, + { + "cell_type": "code", + "execution_count": 81, + "id": "0f98ffa9", + "metadata": { + "attributes": { + "classes": [ + "code-cell" + ], + "id": "" + } + }, + "outputs": [], + "source": [ + "df[\"flag\"] = df[\"one\"] > 2" + ] + }, + { + "cell_type": "code", + "execution_count": 82, + "id": "1ef5e1a3", + "metadata": { + "attributes": { + "classes": [ + "code-cell" + ], + "id": "" + } + }, + "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", + "
onetwothreeflag
a1.01.01.0False
b2.02.04.0False
c3.03.09.0True
dNaN4.0NaNFalse
\n", + "
" + ], + "text/plain": [ + " one two three flag\n", + "a 1.0 1.0 1.0 False\n", + "b 2.0 2.0 4.0 False\n", + "c 3.0 3.0 9.0 True\n", + "d NaN 4.0 NaN False" + ] + }, + "execution_count": 82, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df" + ] + }, + { + "cell_type": "markdown", + "id": "f518cd88", + "metadata": {}, + "source": [ + "Columns can be deleted or popped like with a dict:" + ] + }, + { + "cell_type": "code", + "execution_count": 83, + "id": "b418f585", + "metadata": { + "attributes": { + "classes": [ + "code-cell" + ], + "id": "" + } + }, + "outputs": [], + "source": [ + "del df[\"two\"]" + ] + }, + { + "cell_type": "code", + "execution_count": 84, + "id": "209ebb78", + "metadata": { + "attributes": { + "classes": [ + "code-cell" + ], + "id": "" + } + }, + "outputs": [], + "source": [ + "three = df.pop(\"three\")" + ] + }, + { + "cell_type": "code", + "execution_count": 85, + "id": "9aee9b49", + "metadata": { + "attributes": { + "classes": [ + "code-cell" + ], + "id": "" + } + }, + "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", + "
oneflag
a1.0False
b2.0False
c3.0True
dNaNFalse
\n", + "
" + ], + "text/plain": [ + " one flag\n", + "a 1.0 False\n", + "b 2.0 False\n", + "c 3.0 True\n", + "d NaN False" + ] + }, + "execution_count": 85, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df" + ] + }, + { + "cell_type": "markdown", + "id": "40b5a135", + "metadata": {}, + "source": [ + "When inserting a scalar value, it will naturally be propagated to fill the column:" + ] + }, + { + "cell_type": "code", + "execution_count": 86, + "id": "1bddfbc5", + "metadata": { + "attributes": { + "classes": [ + "code-cell" + ], + "id": "" + } + }, + "outputs": [], + "source": [ + "df[\"foo\"] = \"bar\"" + ] + }, + { + "cell_type": "code", + "execution_count": 87, + "id": "e2613bd3", + "metadata": { + "attributes": { + "classes": [ + "code-cell" + ], + "id": "" + } + }, + "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", + "
oneflagfoo
a1.0Falsebar
b2.0Falsebar
c3.0Truebar
dNaNFalsebar
\n", + "
" + ], + "text/plain": [ + " one flag foo\n", + "a 1.0 False bar\n", + "b 2.0 False bar\n", + "c 3.0 True bar\n", + "d NaN False bar" + ] + }, + "execution_count": 87, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df" + ] + }, + { + "cell_type": "markdown", + "id": "d93a6895", + "metadata": {}, + "source": [ + "When inserting a `Series` that does not have the same index as the `DataFrame`, it will be conformed to the DataFrame's index:" + ] + }, + { + "cell_type": "code", + "execution_count": 88, + "id": "c20564a5", + "metadata": { + "attributes": { + "classes": [ + "code-cell" + ], + "id": "" + } + }, + "outputs": [], + "source": [ + "df[\"one_trunc\"] = df[\"one\"][:2]" + ] + }, + { + "cell_type": "code", + "execution_count": 89, + "id": "877b972d-49b8-4225-855e-ec77bd876d8b", + "metadata": { + "tags": [] + }, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\n", + "\n", + "
\n", + "
\n", + "

Let's visualize it! 🎥

\n", + "
\n", + " \n", + "
\n", + "
\n", + "
\n", + "\n" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "from IPython.display import HTML\n", + "\n", + "display(\n", + " HTML(\n", + " \"\"\"\n", + "\n", + "\n", + "\n", + "\n", + "
\n", + "
\n", + "

Let's visualize it! 🎥

\n", + "
\n", + " \n", + "
\n", + "
\n", + "
\n", + "\n", + "\"\"\"\n", + " )\n", + ")\n" + ] + }, + { + "cell_type": "code", + "execution_count": 90, + "id": "76026aba", + "metadata": { + "attributes": { + "classes": [ + "code-cell" + ], + "id": "" + } + }, + "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", + "
oneflagfooone_trunc
a1.0Falsebar1.0
b2.0Falsebar2.0
c3.0TruebarNaN
dNaNFalsebarNaN
\n", + "
" + ], + "text/plain": [ + " one flag foo one_trunc\n", + "a 1.0 False bar 1.0\n", + "b 2.0 False bar 2.0\n", + "c 3.0 True bar NaN\n", + "d NaN False bar NaN" + ] + }, + "execution_count": 90, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df" + ] + }, + { + "cell_type": "markdown", + "id": "b7c3f5d9", + "metadata": {}, + "source": [ + "You can insert raw ndarrays but their length must match the length of the DataFrame's index.\n", + "\n", + "By default, columns get inserted at the end. `DataFrame.insert()` inserts at a particular location in the columns:" + ] + }, + { + "cell_type": "code", + "execution_count": 91, + "id": "8dbfb773", + "metadata": { + "attributes": { + "classes": [ + "code-cell" + ], + "id": "" + } + }, + "outputs": [], + "source": [ + "df.insert(1, \"bar\", df[\"one\"])" + ] + }, + { + "cell_type": "code", + "execution_count": 92, + "id": "27dea852", + "metadata": { + "attributes": { + "classes": [ + "code-cell" + ], + "id": "" + } + }, + "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", + "
onebarflagfooone_trunc
a1.01.0Falsebar1.0
b2.02.0Falsebar2.0
c3.03.0TruebarNaN
dNaNNaNFalsebarNaN
\n", + "
" + ], + "text/plain": [ + " one bar flag foo one_trunc\n", + "a 1.0 1.0 False bar 1.0\n", + "b 2.0 2.0 False bar 2.0\n", + "c 3.0 3.0 True bar NaN\n", + "d NaN NaN False bar NaN" + ] + }, + "execution_count": 92, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df" + ] + }, + { + "cell_type": "markdown", + "id": "4786e42f", + "metadata": {}, + "source": [ + "#### Assigning new columns in method chains\n", + "\n", + "DataFrame has an `assign()` method that allows you to easily create new columns that are potentially derived from existing columns." + ] + }, + { + "cell_type": "code", + "execution_count": 95, + "id": "e9e4dead", + "metadata": { + "attributes": { + "classes": [ + "code-cell" + ], + "id": "" + } + }, + "outputs": [], + "source": [ + "iris = pd.read_csv(\"https://static-1300131294.cos.ap-shanghai.myqcloud.com/data/data-science/working-with-data/pandas/iris.csv\")" + ] + }, + { + "cell_type": "code", + "execution_count": 96, + "id": "38eef1a4", + "metadata": { + "attributes": { + "classes": [ + "code-cell" + ], + "id": "" + } + }, + "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", + "
SepalLengthSepalWidthPetalLengthPetalWidthName
05.13.51.40.2Iris-setosa
14.93.01.40.2Iris-setosa
24.73.21.30.2Iris-setosa
34.63.11.50.2Iris-setosa
45.03.61.40.2Iris-setosa
\n", + "
" + ], + "text/plain": [ + " SepalLength SepalWidth PetalLength PetalWidth Name\n", + "0 5.1 3.5 1.4 0.2 Iris-setosa\n", + "1 4.9 3.0 1.4 0.2 Iris-setosa\n", + "2 4.7 3.2 1.3 0.2 Iris-setosa\n", + "3 4.6 3.1 1.5 0.2 Iris-setosa\n", + "4 5.0 3.6 1.4 0.2 Iris-setosa" + ] + }, + "execution_count": 96, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "iris.head()" + ] + }, + { + "cell_type": "code", + "execution_count": 97, + "id": "ed27d63b", + "metadata": { + "attributes": { + "classes": [ + "code-cell" + ], + "id": "" + } + }, + "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", + "
SepalLengthSepalWidthPetalLengthPetalWidthNamesepal_ratio
05.13.51.40.2Iris-setosa0.686275
14.93.01.40.2Iris-setosa0.612245
24.73.21.30.2Iris-setosa0.680851
34.63.11.50.2Iris-setosa0.673913
45.03.61.40.2Iris-setosa0.720000
\n", + "
" + ], + "text/plain": [ + " SepalLength SepalWidth PetalLength PetalWidth Name sepal_ratio\n", + "0 5.1 3.5 1.4 0.2 Iris-setosa 0.686275\n", + "1 4.9 3.0 1.4 0.2 Iris-setosa 0.612245\n", + "2 4.7 3.2 1.3 0.2 Iris-setosa 0.680851\n", + "3 4.6 3.1 1.5 0.2 Iris-setosa 0.673913\n", + "4 5.0 3.6 1.4 0.2 Iris-setosa 0.720000" + ] + }, + "execution_count": 97, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "iris.assign(sepal_ratio=iris[\"SepalWidth\"] / iris[\"SepalLength\"]).head()" + ] + }, + { + "cell_type": "markdown", + "id": "c989dbf7", + "metadata": {}, + "source": [ + "In the example above, we inserted a precomputed value. We can also pass in a function of one argument to be evaluated on the DataFrame being assigned to." + ] + }, + { + "cell_type": "code", + "execution_count": 98, + "id": "4f39885a", + "metadata": { + "attributes": { + "classes": [ + "code-cell" + ], + "id": "" + } + }, + "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", + "
SepalLengthSepalWidthPetalLengthPetalWidthNamesepal_ratio
05.13.51.40.2Iris-setosa0.686275
14.93.01.40.2Iris-setosa0.612245
24.73.21.30.2Iris-setosa0.680851
34.63.11.50.2Iris-setosa0.673913
45.03.61.40.2Iris-setosa0.720000
\n", + "
" + ], + "text/plain": [ + " SepalLength SepalWidth PetalLength PetalWidth Name sepal_ratio\n", + "0 5.1 3.5 1.4 0.2 Iris-setosa 0.686275\n", + "1 4.9 3.0 1.4 0.2 Iris-setosa 0.612245\n", + "2 4.7 3.2 1.3 0.2 Iris-setosa 0.680851\n", + "3 4.6 3.1 1.5 0.2 Iris-setosa 0.673913\n", + "4 5.0 3.6 1.4 0.2 Iris-setosa 0.720000" + ] + }, + "execution_count": 98, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "iris.assign(sepal_ratio=lambda x: (x[\"SepalWidth\"] / x[\"SepalLength\"])).head()" + ] + }, + { + "cell_type": "markdown", + "id": "abcd0aee", + "metadata": {}, + "source": [ + "`assign()` **always** returns a copy of the data, leaving the original DataFrame untouched.\n", + "\n", + "Passing a callable, as opposed to an actual value to be inserted, is useful when you don't have a reference to the DataFrame at hand. This is common when using `assign()` in a chain of operations. For example, we can limit the DataFrame to just those observations with a Sepal Length greater than 5, calculate the ratio, and plot:" + ] + }, + { + "cell_type": "code", + "execution_count": 99, + "id": "0508916b", + "metadata": { + "attributes": { + "classes": [ + "code-cell" + ], + "id": "" + } + }, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 99, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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VF5QUID4+HiH642LizOp89ChQ32qk4iIiDyLqENgq1atQmpqKmJiYhAXF4fdu3ejuroa6enpAK7PzTl//jz27dtnOEen0wEAWltbUV9fD51OB19fX0yaNAkAsHLlSiQlJeGll17C/Pnz8dFHH+Hzzz9HcXGx26+PiIiIpEnUACglJQWNjY3YvHkzampqEBkZifz8fISGhgK4nviwZ06gqKgow/+XlZXh7bffRmhoKM6cOQMAiI+PxzvvvIP169fj2WefxZgxY5CXl4fY2Fi3XRcRERFJm6h5gKTKnjwCREREJA2yyANEREREJBYGQERERKQ4DICIiIhIcRgAERERkeIwACIiIiLFYQBEREREisMAiIiIiBSHARAREREpDgMgIiIiUhwGQERERKQ4DICIiIhIcRgAERERkeIwACIiIiLFYQBEREREisMAiIiIiBSHARAREREpjo/YDSAiIiJlqapvxdmLbRg9JABhgQGitIEBEBEREblFU1sHVuTqUFhZbyhLighC1uIoaP37ubUtHAIjIiIit1iRq8OxUw1GZcdONWB5brnb28IAiIiIiFyuqr4VhZX16BQEo/JOQUBhZT1ON1x2a3sYABEREZHLnb3YZvX1M40MgIiIiMjDhA72t/r66CHunQzNAIiIiIhcLjxoAJIiguCtUhmVe6tUSIoIcvtqMAZARERE5BZZi6OQMDbQqCxhbCCyFke5vS1cBk9ERERuofXvh31pM3C64TLONF5mHiAiIiJSjrBA8QKfbhwCIyIiIsVhAERERESKwwCIiIiIFIcBEBERESmO6AFQdnY2wsLC4Ofnh+joaBQVFVk9/ujRo4iOjoafnx/Cw8Px5z//2ej1nJwcqFQqk8eVK1dceRlEREQkI6IGQHl5ecjIyMC6detQXl6OxMREzJs3D9XV1WaPP336NO666y4kJiaivLwcv//977FixQrs37/f6DiNRoOamhqjh5+fnzsuiYiIiGRAJQg9diVzo9jYWEybNg27du0ylE2cOBELFixAZmamyfH/7//9Pxw8eBA//PCDoSw9PR0nTpxAaWkpgOs9QBkZGWhqanK4XXq9HlqtFs3NzdBoNA7XQ0RERO5jz/e3aD1AHR0dKCsrQ3JyslF5cnIySkpKzJ5TWlpqcvzcuXPx9ddf4+rVq4ay1tZWhIaGYuTIkbjnnntQXl5utS3t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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "(\n", + " iris.query(\"SepalLength > 5\")\n", + " .assign(\n", + " SepalRatio=lambda x: x.SepalWidth / x.SepalLength,\n", + " PetalRatio=lambda x: x.PetalWidth / x.PetalLength,\n", + " )\n", + " .plot(kind=\"scatter\", x=\"SepalRatio\", y=\"PetalRatio\")\n", + ")" + ] + }, + { + "cell_type": "markdown", + "id": "7e1e3e3d", + "metadata": {}, + "source": [ + "Since a function is passed in, the function is computed on the DataFrame being assigned to. Importantly, this is the DataFrame that's been filtered to those rows with sepal length greater than 5. The filtering happens first, and then the ratio calculations. This is an example where we didn't have a reference to the filtered DataFrame available.\n", + "\n", + "The function signature for `assign()` is simply `**kwargs`. The keys are the column names for the new fields, and the values are either a value to be inserted (for example, a `Series` or NumPy array), or a function of one argument to be called on the `DataFrame`. A copy of the original `DataFrame` is returned, with the new values inserted.\n", + "\n", + "The order of `**kwargs` is preserved. This allows for dependent assignment, where an expression later in `**kwargs` can refer to a column created earlier in the same `assign()`." + ] + }, + { + "cell_type": "code", + "execution_count": 100, + "id": "60b7e3c7", + "metadata": { + "attributes": { + "classes": [ + "code-cell" + ], + "id": "" + } + }, + "outputs": [], + "source": [ + "dfa = pd.DataFrame({\"A\": [1, 2, 3], \"B\": [4, 5, 6]})" + ] + }, + { + "cell_type": "code", + "execution_count": 101, + "id": "4c821875", + "metadata": { + "attributes": { + "classes": [ + "code-cell" + ], + "id": "" + } + }, + "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", + "
ABCD
01456
12579
236912
\n", + "
" + ], + "text/plain": [ + " A B C D\n", + "0 1 4 5 6\n", + "1 2 5 7 9\n", + "2 3 6 9 12" + ] + }, + "execution_count": 101, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "dfa.assign(C=lambda x: x[\"A\"] + x[\"B\"], D=lambda x: x[\"A\"] + x[\"C\"])" + ] + }, + { + "cell_type": "markdown", + "id": "822c6838", + "metadata": {}, + "source": [ + "In the second expression, `x['C']` will refer to the newly created column, that's equal to `dfa['A'] + dfa['B']`.\n", + "\n", + "#### Indexing / selection\n", + "\n", + "The basics of indexing are as follows:\n", + "\n", + "|Operation |Syntax |Result |\n", + "|:------- |:----- |:----- |\n", + "|Select column |`df[col]` |Series |\n", + "|Select row by label |`df.loc[label]`|Series |\n", + "|Select row by integer location|`df.iloc[loc]` |Series |\n", + "|Slice rows |`df[5:10] ` |DataFrame|\n", + "|Select rows by boolean vector |`df[bool_vec]` |DataFrame|\n", + "\n", + "Row selection, for example, returns a `Series` whose index is the columns of the `DataFrame`:" + ] + }, + { + "cell_type": "code", + "execution_count": 102, + "id": "82154750", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "one 2.0\n", + "bar 2.0\n", + "flag False\n", + "foo bar\n", + "one_trunc 2.0\n", + "Name: b, dtype: object" + ] + }, + "execution_count": 102, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df.loc[\"b\"]" + ] + }, + { + "cell_type": "code", + "execution_count": 103, + "id": "743d6893-bbf3-4fbf-a158-a3aaae040b39", + "metadata": { + "tags": [ + "hide-cell" + ] + }, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\n", + "\n", + "
\n", + "
\n", + "

Let's visualize it! 🎥

\n", + "
\n", + " \n", + "
\n", + "
\n", + "
\n", + "\n" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "from IPython.display import HTML\n", + "\n", + "display(\n", + " HTML(\n", + " \"\"\"\n", + "\n", + "\n", + "\n", + "\n", + "
\n", + "
\n", + "

Let's visualize it! 🎥

\n", + "
\n", + " \n", + "
\n", + "
\n", + "
\n", + "\n", + "\"\"\"\n", + " )\n", + ")\n" + ] + }, + { + "cell_type": "code", + "execution_count": 104, + "id": "2fae006c", + "metadata": { + "attributes": { + "classes": [ + "code-cell" + ], + "id": "" + } + }, + "outputs": [ + { + "data": { + "text/plain": [ + "one 3.0\n", + "bar 3.0\n", + "flag True\n", + "foo bar\n", + "one_trunc NaN\n", + "Name: c, dtype: object" + ] + }, + "execution_count": 104, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df.iloc[2]" + ] + }, + { + "cell_type": "markdown", + "id": "87fe370b", + "metadata": {}, + "source": [ + "#### Data alignment and arithmetic\n", + "\n", + "Data alignment between `DataFrame` objects automatically aligns on **both** the columns and the index (row labels)**. Again, the resulting object will have the union of the column and row labels." + ] + }, + { + "cell_type": "code", + "execution_count": 105, + "id": "a3e29475", + "metadata": { + "attributes": { + "classes": [ + "code-cell" + ], + "id": "" + } + }, + "outputs": [], + "source": [ + "df = pd.DataFrame(np.random.randn(10, 4), columns=[\"A\", \"B\", \"C\", \"D\"])" + ] + }, + { + "cell_type": "code", + "execution_count": 106, + "id": "c4634479", + "metadata": { + "attributes": { + "classes": [ + "code-cell" + ], + "id": "" + } + }, + "outputs": [], + "source": [ + "df2 = pd.DataFrame(np.random.randn(7, 3), columns=[\"A\", \"B\", \"C\"])" + ] + }, + { + "cell_type": "code", + "execution_count": 107, + "id": "09eb77aa", + "metadata": { + "attributes": { + "classes": [ + "code-cell" + ], + "id": "" + } + }, + "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", + "
ABCD
0-2.675459-0.1335811.148420NaN
1-1.979453-0.736220-4.194590NaN
2-1.3730360.939902-1.952070NaN
30.813456-0.228460-0.634051NaN
4-0.2877481.054761-2.133658NaN
50.6974261.493623-1.633845NaN
6-0.2493571.4325541.585387NaN
7NaNNaNNaNNaN
8NaNNaNNaNNaN
9NaNNaNNaNNaN
\n", + "
" + ], + "text/plain": [ + " A B C D\n", + "0 -2.675459 -0.133581 1.148420 NaN\n", + "1 -1.979453 -0.736220 -4.194590 NaN\n", + "2 -1.373036 0.939902 -1.952070 NaN\n", + "3 0.813456 -0.228460 -0.634051 NaN\n", + "4 -0.287748 1.054761 -2.133658 NaN\n", + "5 0.697426 1.493623 -1.633845 NaN\n", + "6 -0.249357 1.432554 1.585387 NaN\n", + "7 NaN NaN NaN NaN\n", + "8 NaN NaN NaN NaN\n", + "9 NaN NaN NaN NaN" + ] + }, + "execution_count": 107, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df + df2" + ] + }, + { + "cell_type": "markdown", + "id": "9062570a", + "metadata": {}, + "source": [ + "When doing an operation between `DataFrame` and `Series`, the default behavior is to align the `Series` **index** on the `DataFrame` **columns**, thus broadcasting row-wise. For example:" + ] + }, + { + "cell_type": "code", + "execution_count": 108, + "id": "c2a8adda", + "metadata": { + "attributes": { + "classes": [ + "code-cell" + ], + "id": "" + } + }, + "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", + "
ABCD
00.0000000.0000000.0000000.000000
11.1766530.958183-3.117564-0.681690
20.9357301.163312-1.466732-1.218909
31.8547240.293515-0.4723880.755568
41.6049463.032983-0.8180880.248440
52.2074101.803085-1.369634-1.490638
64.2312871.8620161.764553-1.377419
71.1820001.136687-0.938919-0.008524
81.5791371.203216-0.808539-1.454299
91.8077120.360691-1.850980-0.663877
\n", + "
" + ], + "text/plain": [ + " A B C D\n", + "0 0.000000 0.000000 0.000000 0.000000\n", + "1 1.176653 0.958183 -3.117564 -0.681690\n", + "2 0.935730 1.163312 -1.466732 -1.218909\n", + "3 1.854724 0.293515 -0.472388 0.755568\n", + "4 1.604946 3.032983 -0.818088 0.248440\n", + "5 2.207410 1.803085 -1.369634 -1.490638\n", + "6 4.231287 1.862016 1.764553 -1.377419\n", + "7 1.182000 1.136687 -0.938919 -0.008524\n", + "8 1.579137 1.203216 -0.808539 -1.454299\n", + "9 1.807712 0.360691 -1.850980 -0.663877" + ] + }, + "execution_count": 108, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df - df.iloc[0]" + ] + }, + { + "cell_type": "markdown", + "id": "cf0c0013", + "metadata": {}, + "source": [ + "Arithmetic operations with scalars operate element-wise:" + ] + }, + { + "cell_type": "code", + "execution_count": 109, + "id": "d4cc4904", + "metadata": { + "attributes": { + "classes": [ + "code-cell" + ], + "id": "" + } + }, + "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", + "
ABCD
0-7.038225-3.6166622.2496680.911815
1-1.1549611.174252-13.338150-2.496637
2-2.3595732.199900-5.083991-5.182731
32.235394-2.149088-0.1122704.689655
40.98650411.548255-1.8407742.154016
53.9988275.398765-4.598502-6.541375
614.1182115.69341811.072431-5.975282
7-1.1282252.066773-2.4449250.869196
80.8574612.399419-1.793024-6.359682
92.000335-1.813207-7.005231-2.407570
\n", + "
" + ], + "text/plain": [ + " A B C D\n", + "0 -7.038225 -3.616662 2.249668 0.911815\n", + "1 -1.154961 1.174252 -13.338150 -2.496637\n", + "2 -2.359573 2.199900 -5.083991 -5.182731\n", + "3 2.235394 -2.149088 -0.112270 4.689655\n", + "4 0.986504 11.548255 -1.840774 2.154016\n", + "5 3.998827 5.398765 -4.598502 -6.541375\n", + "6 14.118211 5.693418 11.072431 -5.975282\n", + "7 -1.128225 2.066773 -2.444925 0.869196\n", + "8 0.857461 2.399419 -1.793024 -6.359682\n", + "9 2.000335 -1.813207 -7.005231 -2.407570" + ] + }, + "execution_count": 109, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df * 5 + 2" + ] + }, + { + "cell_type": "code", + "execution_count": 110, + "id": "131ec689", + "metadata": { + "attributes": { + "classes": [ + "code-cell" + ], + "id": "" + } + }, + "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", + "
ABCD
0-0.553206-0.89020820.026571-4.594807
1-1.584805-6.055120-0.325985-1.111942
2-1.14690125.012499-0.705817-0.696114
321.240986-1.205084-2.3671221.858975
4-4.9334190.523656-1.30182132.464111
52.5014671.471123-0.757748-0.585386
60.4126021.3537600.551120-0.626937
7-1.59835074.880783-1.124878-4.421634
8-4.37622012.518198-1.318209-0.598109
914927.997228-1.311232-0.555233-1.134412
\n", + "
" + ], + "text/plain": [ + " A B C D\n", + "0 -0.553206 -0.890208 20.026571 -4.594807\n", + "1 -1.584805 -6.055120 -0.325985 -1.111942\n", + "2 -1.146901 25.012499 -0.705817 -0.696114\n", + "3 21.240986 -1.205084 -2.367122 1.858975\n", + "4 -4.933419 0.523656 -1.301821 32.464111\n", + "5 2.501467 1.471123 -0.757748 -0.585386\n", + "6 0.412602 1.353760 0.551120 -0.626937\n", + "7 -1.598350 74.880783 -1.124878 -4.421634\n", + "8 -4.376220 12.518198 -1.318209 -0.598109\n", + "9 14927.997228 -1.311232 -0.555233 -1.134412" + ] + }, + "execution_count": 110, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "1 / df" + ] + }, + { + "cell_type": "code", + "execution_count": 111, + "id": "a2d50c6f", + "metadata": { + "attributes": { + "classes": [ + "code-cell" + ], + "id": "" + } + }, + "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", + "
ABCD
01.067708e+011.592330e+000.0000062.243525e-03
11.585244e-017.438906e-0488.5547616.541410e-01
25.779576e-012.554887e-064.0293224.258713e+00
34.912486e-064.741661e-010.0318518.373485e-02
41.688138e-031.329891e+010.3481739.002973e-07
52.553999e-022.135033e-013.0332038.515912e+00
63.450436e+012.977377e-0110.8396376.472977e+00
71.532188e-013.180669e-080.6245652.616188e-03
82.726487e-034.072234e-050.3311797.814101e+00
92.013696e-173.382842e-0110.5220296.038328e-01
\n", + "
" + ], + "text/plain": [ + " A B C D\n", + "0 1.067708e+01 1.592330e+00 0.000006 2.243525e-03\n", + "1 1.585244e-01 7.438906e-04 88.554761 6.541410e-01\n", + "2 5.779576e-01 2.554887e-06 4.029322 4.258713e+00\n", + "3 4.912486e-06 4.741661e-01 0.031851 8.373485e-02\n", + "4 1.688138e-03 1.329891e+01 0.348173 9.002973e-07\n", + "5 2.553999e-02 2.135033e-01 3.033203 8.515912e+00\n", + "6 3.450436e+01 2.977377e-01 10.839637 6.472977e+00\n", + "7 1.532188e-01 3.180669e-08 0.624565 2.616188e-03\n", + "8 2.726487e-03 4.072234e-05 0.331179 7.814101e+00\n", + "9 2.013696e-17 3.382842e-01 10.522029 6.038328e-01" + ] + }, + "execution_count": 111, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df ** 4" + ] + }, + { + "cell_type": "markdown", + "id": "ab0cc5cb", + "metadata": {}, + "source": [ + "Boolean operators operate element-wise as well:" + ] + }, + { + "cell_type": "code", + "execution_count": 112, + "id": "edbec52a", + "metadata": { + "attributes": { + "classes": [ + "code-cell" + ], + "id": "" + } + }, + "outputs": [], + "source": [ + "df1 = pd.DataFrame({\"a\": [1, 0, 1], \"b\": [0, 1, 1]}, dtype=bool)" + ] + }, + { + "cell_type": "code", + "execution_count": 113, + "id": "727cd263", + "metadata": { + "attributes": { + "classes": [ + "code-cell" + ], + "id": "" + } + }, + "outputs": [], + "source": [ + "df2 = pd.DataFrame({\"a\": [0, 1, 1], \"b\": [1, 1, 0]}, dtype=bool)" + ] + }, + { + "cell_type": "code", + "execution_count": 114, + "id": "523bbe29", + "metadata": { + "attributes": { + "classes": [ + "code-cell" + ], + "id": "" + } + }, + "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", + "
ab
0FalseFalse
1FalseTrue
2TrueFalse
\n", + "
" + ], + "text/plain": [ + " a b\n", + "0 False False\n", + "1 False True\n", + "2 True False" + ] + }, + "execution_count": 114, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df1 & df2" + ] + }, + { + "cell_type": "code", + "execution_count": 115, + "id": "b1a355fc", + "metadata": { + "attributes": { + "classes": [ + "code-cell" + ], + "id": "" + } + }, + "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", + "
ab
0TrueTrue
1TrueTrue
2TrueTrue
\n", + "
" + ], + "text/plain": [ + " a b\n", + "0 True True\n", + "1 True True\n", + "2 True True" + ] + }, + "execution_count": 115, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df1 | df2" + ] + }, + { + "cell_type": "code", + "execution_count": 116, + "id": "e89dc58b", + "metadata": { + "attributes": { + "classes": [ + "code-cell" + ], + "id": "" + } + }, + "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", + "
ab
0TrueTrue
1TrueFalse
2FalseTrue
\n", + "
" + ], + "text/plain": [ + " a b\n", + "0 True True\n", + "1 True False\n", + "2 False True" + ] + }, + "execution_count": 116, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df1 ^ df2" + ] + }, + { + "cell_type": "code", + "execution_count": 117, + "id": "9b438ef3", + "metadata": { + "attributes": { + "classes": [ + "code-cell" + ], + "id": "" + } + }, + "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", + "
ab
0FalseTrue
1TrueFalse
2FalseFalse
\n", + "
" + ], + "text/plain": [ + " a b\n", + "0 False True\n", + "1 True False\n", + "2 False False" + ] + }, + "execution_count": 117, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "-df1" + ] + }, + { + "cell_type": "markdown", + "id": "31d38eb7", + "metadata": {}, + "source": [ + "#### Transposing\n", + "\n", + "To transpose, access the `T` attribute or `DataFrame.transpose()`, similar to an ndarray:" + ] + }, + { + "cell_type": "code", + "execution_count": 118, + "id": "84f274b9", + "metadata": { + "attributes": { + "classes": [ + "code-cell" + ], + "id": "" + } + }, + "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", + "
01234
A-1.807645-0.630992-0.8719150.047079-0.202699
B-1.123332-0.1651500.039980-0.8298181.909651
C0.049934-3.067630-1.416798-0.422454-0.768155
D-0.217637-0.899327-1.4365460.5379310.030803
\n", + "
" + ], + "text/plain": [ + " 0 1 2 3 4\n", + "A -1.807645 -0.630992 -0.871915 0.047079 -0.202699\n", + "B -1.123332 -0.165150 0.039980 -0.829818 1.909651\n", + "C 0.049934 -3.067630 -1.416798 -0.422454 -0.768155\n", + "D -0.217637 -0.899327 -1.436546 0.537931 0.030803" + ] + }, + "execution_count": 118, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df[:5].T" + ] + }, + { + "cell_type": "markdown", + "id": "20c81c1c", + "metadata": {}, + "source": [ + "## Data indexing and selection\n", + "\n", + "The axis labeling information in Pandas objects serves many purposes:\n", + "\n", + "- Identifies data (i.e. provides metadata) using known indicators, important for analysis, visualization, and interactive console display.\n", + "- Enables automatic and explicit data alignment.\n", + "- Allows intuitive getting and setting of subsets of the data set.\n", + "\n", + "In this section, we will focus on the final point: namely, how to slice, dice, and generally get and set subsets of Pandas objects. The primary focus will be on Series and DataFrame as they have received more development attention in this area.\n", + "\n", + ":::{note}\n", + "The Python and NumPy indexing operators `[]` and attribute operator `.` provide quick and easy access to Pandas data structures across a wide range of use cases. This makes interactive work intuitive, as there's little new to learn if you already know how to deal with Python dictionaries and NumPy arrays. However, since the type of the data to be accessed isn't known in advance, directly using standard operators has some optimization limits. For production code, we recommended that you take advantage of the optimized Pandas data access methods exposed in this chapter.\n", + ":::" + ] + }, + { + "cell_type": "markdown", + "id": "5f5b68a0-0590-48bc-8129-c36c6faf57db", + "metadata": { + "attributes": { + "classes": [ + "warning" + ], + "id": "" + } + }, + "source": [ + "Whether a copy or a reference is returned for a setting operation, may depend on the context. This is sometimes called `chained assignment` and should be avoided." + ] + }, + { + "cell_type": "markdown", + "id": "cbdec733", + "metadata": {}, + "source": [ + "### Different choices for indexing\n", + "\n", + "Object selection has had a number of user-requested additions in order to support more explicit location-based indexing. Pandas now supports three types of multi-axis indexing.\n", + "\n", + "- `.loc` is primarily label based, but may also be used with a boolean array. `.loc` will raise `KeyError` when the items are not found. Allowed inputs are:\n", + " - A single label, e.g. `5` or `'a'` (Note that `5` is interpreted as a label of the index. This use is not an integer position along the index.).\n", + " - A list or array of labels `['a', 'b', 'c']`.\n", + " - A slice object with labels `'a':'f'` (Note that contrary to usual Python slices, both the start and the stop are included, when present in the index!)\n", + " - A boolean array (any `NA` values will be treated as `False`).\n", + " - A `callable` function with one argument (the calling Series or DataFrame) and that returns valid output for indexing (one of the above).\n", + "\n", + "- `.iloc` is primarily integer position based (from `0` to `length-1` of the axis), but may also be used with a boolean array. `.iloc` will raise `IndexError` if a requested indexer is out-of-bounds, except slice indexers which allow out-of-bounds indexing. (this conforms with Python/NumPy slice semantics). Allowed inputs are:\n", + " - An integer e.g. `5`.\n", + " - A list or array of integers `[4, 3, 0]`.\n", + " - A slice object with ints `1:7`.\n", + " - A boolean array (any `NA` values will be treated as `False`).\n", + " - A `callable` function with one argument (the calling Series or DataFrame) that returns valid output for indexing (one of the above).\n", + "- `.loc`, `.iloc`, and also `[]` indexing can accept a `callable` as indexer.\n", + "\n", + "Getting values from an object with multi-axes selection uses the following notation (using `.loc` as an example, but the following applies to `.iloc` as well). Any of the axes accessors may be the null slice `:`. Axes left out of the specification are assumed to be `:`, e.g. `p.loc['a']` is equivalent to `p.loc['a', :]`.\n", + "\n", + "|**Object Type**|**Indexers** |\n", + "|:-- |:- |\n", + "|Series |`s.loc[indexer]` |\n", + "|DataFrame |`df.loc[row_indexer, column_indexer]`|\n", + "\n", + "### Basics\n", + "\n", + "As mentioned when introducing the data structures in the last section, the primary function of indexing with `[]` (a.k.a.` __getitem__` for those familiar with implementing class behavior in Python) is selecting out lower-dimensional slices. The following table shows return type values when indexing Pandas objects with `[]`:\n", + "\n", + "|**Object Type**|**Selection** |Return Value Type |\n", + "|:- |:- |:- |\n", + "|Series |`series[label]` |scalar value |\n", + "|DataFrame |`frame[colname]`|`Series` corresponding to colname|\n", + "\n", + "Here we construct a simple time series data set to use for illustrating the indexing functionality:" + ] + }, + { + "cell_type": "code", + "execution_count": 119, + "id": "12d39083", + "metadata": { + "attributes": { + "classes": [ + "code-cell" + ], + "id": "" + } + }, + "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", + "
ABCD
2000-01-010.3114382.1227632.206814-1.488590
2000-01-02-0.4591541.6972990.8525622.389648
2000-01-031.408196-0.326012-0.137593-0.287003
2000-01-040.9261761.2133500.0394711.068784
2000-01-05-0.4909480.1083420.5530741.213043
2000-01-06-1.3782640.3746370.776962-0.125644
2000-01-070.628157-1.2399290.761446-0.847097
2000-01-080.2911231.5683501.0514890.526787
\n", + "
" + ], + "text/plain": [ + " A B C D\n", + "2000-01-01 0.311438 2.122763 2.206814 -1.488590\n", + "2000-01-02 -0.459154 1.697299 0.852562 2.389648\n", + "2000-01-03 1.408196 -0.326012 -0.137593 -0.287003\n", + "2000-01-04 0.926176 1.213350 0.039471 1.068784\n", + "2000-01-05 -0.490948 0.108342 0.553074 1.213043\n", + "2000-01-06 -1.378264 0.374637 0.776962 -0.125644\n", + "2000-01-07 0.628157 -1.239929 0.761446 -0.847097\n", + "2000-01-08 0.291123 1.568350 1.051489 0.526787" + ] + }, + "execution_count": 119, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "dates = pd.date_range('1/1/2000', periods=8)\n", + "df = pd.DataFrame(np.random.randn(8, 4),\n", + " index=dates, columns=['A', 'B', 'C', 'D'])\n", + "df" + ] + }, + { + "cell_type": "markdown", + "id": "da294328", + "metadata": {}, + "source": [ + ":::{note}\n", + "None of the indexing functionality is time series specific unless specifically stated.\n", + ":::\n", + "\n", + "Thus, as per above, we have the most basic indexing using `[]`:" + ] + }, + { + "cell_type": "code", + "execution_count": 120, + "id": "1eee749c", + "metadata": { + "attributes": { + "classes": [ + "code-cell" + ], + "id": "" + } + }, + "outputs": [ + { + "data": { + "text/plain": [ + "-1.3782643792341864" + ] + }, + "execution_count": 120, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "s = df['A']\n", + "\n", + "s[dates[5]]" + ] + }, + { + "cell_type": "markdown", + "id": "9c672552", + "metadata": {}, + "source": [ + "You can pass a list of columns to `[]` to select columns in that order. If a column is not contained in the DataFrame, an exception will be raised. Multiple columns can also be set in this manner:" + ] + }, + { + "cell_type": "code", + "execution_count": 121, + "id": "5a18bcbc", + "metadata": { + "attributes": { + "classes": [ + "code-cell" + ], + "id": "" + } + }, + "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", + "
ABCD
2000-01-010.3114382.1227632.206814-1.488590
2000-01-02-0.4591541.6972990.8525622.389648
2000-01-031.408196-0.326012-0.137593-0.287003
2000-01-040.9261761.2133500.0394711.068784
2000-01-05-0.4909480.1083420.5530741.213043
2000-01-06-1.3782640.3746370.776962-0.125644
2000-01-070.628157-1.2399290.761446-0.847097
2000-01-080.2911231.5683501.0514890.526787
\n", + "
" + ], + "text/plain": [ + " A B C D\n", + "2000-01-01 0.311438 2.122763 2.206814 -1.488590\n", + "2000-01-02 -0.459154 1.697299 0.852562 2.389648\n", + "2000-01-03 1.408196 -0.326012 -0.137593 -0.287003\n", + "2000-01-04 0.926176 1.213350 0.039471 1.068784\n", + "2000-01-05 -0.490948 0.108342 0.553074 1.213043\n", + "2000-01-06 -1.378264 0.374637 0.776962 -0.125644\n", + "2000-01-07 0.628157 -1.239929 0.761446 -0.847097\n", + "2000-01-08 0.291123 1.568350 1.051489 0.526787" + ] + }, + "execution_count": 121, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df" + ] + }, + { + "cell_type": "code", + "execution_count": 122, + "id": "be2e73fe", + "metadata": { + "attributes": { + "classes": [ + "code-cell" + ], + "id": "" + } + }, + "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", + "
ABCD
2000-01-012.1227630.3114382.206814-1.488590
2000-01-021.697299-0.4591540.8525622.389648
2000-01-03-0.3260121.408196-0.137593-0.287003
2000-01-041.2133500.9261760.0394711.068784
2000-01-050.108342-0.4909480.5530741.213043
2000-01-060.374637-1.3782640.776962-0.125644
2000-01-07-1.2399290.6281570.761446-0.847097
2000-01-081.5683500.2911231.0514890.526787
\n", + "
" + ], + "text/plain": [ + " A B C D\n", + "2000-01-01 2.122763 0.311438 2.206814 -1.488590\n", + "2000-01-02 1.697299 -0.459154 0.852562 2.389648\n", + "2000-01-03 -0.326012 1.408196 -0.137593 -0.287003\n", + "2000-01-04 1.213350 0.926176 0.039471 1.068784\n", + "2000-01-05 0.108342 -0.490948 0.553074 1.213043\n", + "2000-01-06 0.374637 -1.378264 0.776962 -0.125644\n", + "2000-01-07 -1.239929 0.628157 0.761446 -0.847097\n", + "2000-01-08 1.568350 0.291123 1.051489 0.526787" + ] + }, + "execution_count": 122, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df[['B', 'A']] = df[['A', 'B']]\n", + "df" + ] + }, + { + "cell_type": "markdown", + "id": "6e6cd9c9", + "metadata": {}, + "source": [ + "You may find this useful for applying a transform (in-place) to a subset of the columns." + ] + }, + { + "cell_type": "markdown", + "id": "b9d41a7f-5d30-40e2-8508-83b4d08e1ef1", + "metadata": { + "attributes": { + "classes": [ + "warning" + ], + "id": "" + } + }, + "source": [ + "Pandas aligns all AXES when setting `Series` and `DataFrame` from `.loc`, and `.iloc`.\n", + "\n", + "This will not modify `df` because the column alignment is before value assignment." + ] + }, + { + "cell_type": "code", + "execution_count": 123, + "id": "4e8a2ee9", + "metadata": { + "attributes": { + "classes": [ + "code-cell" + ], + "id": "" + } + }, + "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", + "
AB
2000-01-012.1227630.311438
2000-01-021.697299-0.459154
2000-01-03-0.3260121.408196
2000-01-041.2133500.926176
2000-01-050.108342-0.490948
2000-01-060.374637-1.378264
2000-01-07-1.2399290.628157
2000-01-081.5683500.291123
\n", + "
" + ], + "text/plain": [ + " A B\n", + "2000-01-01 2.122763 0.311438\n", + "2000-01-02 1.697299 -0.459154\n", + "2000-01-03 -0.326012 1.408196\n", + "2000-01-04 1.213350 0.926176\n", + "2000-01-05 0.108342 -0.490948\n", + "2000-01-06 0.374637 -1.378264\n", + "2000-01-07 -1.239929 0.628157\n", + "2000-01-08 1.568350 0.291123" + ] + }, + "execution_count": 123, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df[['A', 'B']]" + ] + }, + { + "cell_type": "code", + "execution_count": 124, + "id": "cf8c39ef", + "metadata": { + "attributes": { + "classes": [ + "code-cell" + ], + "id": "" + } + }, + "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", + "
AB
2000-01-012.1227630.311438
2000-01-021.697299-0.459154
2000-01-03-0.3260121.408196
2000-01-041.2133500.926176
2000-01-050.108342-0.490948
2000-01-060.374637-1.378264
2000-01-07-1.2399290.628157
2000-01-081.5683500.291123
\n", + "
" + ], + "text/plain": [ + " A B\n", + "2000-01-01 2.122763 0.311438\n", + "2000-01-02 1.697299 -0.459154\n", + "2000-01-03 -0.326012 1.408196\n", + "2000-01-04 1.213350 0.926176\n", + "2000-01-05 0.108342 -0.490948\n", + "2000-01-06 0.374637 -1.378264\n", + "2000-01-07 -1.239929 0.628157\n", + "2000-01-08 1.568350 0.291123" + ] + }, + "execution_count": 124, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df.loc[:, ['B', 'A']] = df[['A', 'B']]\n", + "df[['A', 'B']]" + ] + }, + { + "cell_type": "markdown", + "id": "4ed60d11-3f81-43b5-8274-4d896238b734", + "metadata": { + "attributes": { + "classes": [ + "warning" + ], + "id": "" + } + }, + "source": [ + "The correct way to swap column values is by using raw values:" + ] + }, + { + "cell_type": "code", + "execution_count": 125, + "id": "da9754c5", + "metadata": { + "attributes": { + "classes": [ + "code-cell" + ], + "id": "" + } + }, + "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", + "
AB
2000-01-010.3114382.122763
2000-01-02-0.4591541.697299
2000-01-031.408196-0.326012
2000-01-040.9261761.213350
2000-01-05-0.4909480.108342
2000-01-06-1.3782640.374637
2000-01-070.628157-1.239929
2000-01-080.2911231.568350
\n", + "
" + ], + "text/plain": [ + " A B\n", + "2000-01-01 0.311438 2.122763\n", + "2000-01-02 -0.459154 1.697299\n", + "2000-01-03 1.408196 -0.326012\n", + "2000-01-04 0.926176 1.213350\n", + "2000-01-05 -0.490948 0.108342\n", + "2000-01-06 -1.378264 0.374637\n", + "2000-01-07 0.628157 -1.239929\n", + "2000-01-08 0.291123 1.568350" + ] + }, + "execution_count": 125, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df.loc[:, ['B', 'A']] = df[['A', 'B']].to_numpy()\n", + "df[['A', 'B']]" + ] + }, + { + "cell_type": "markdown", + "id": "beb7928a", + "metadata": {}, + "source": [ + "### Attribute access\n", + "\n", + "You may access an index on a `Series` or column on a `DataFrame` directly as an attribute:" + ] + }, + { + "cell_type": "code", + "execution_count": 126, + "id": "86dec0c0", + "metadata": { + "attributes": { + "classes": [ + "code-cell" + ], + "id": "" + } + }, + "outputs": [], + "source": [ + "sa = pd.Series([1, 2, 3], index=list('abc'))\n", + "dfa = df.copy()" + ] + }, + { + "cell_type": "code", + "execution_count": 127, + "id": "69ea1e07", + "metadata": { + "attributes": { + "classes": [ + "code-cell" + ], + "id": "" + } + }, + "outputs": [ + { + "data": { + "text/plain": [ + "2" + ] + }, + "execution_count": 127, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "sa.b" + ] + }, + { + "cell_type": "code", + "execution_count": 128, + "id": "ce9f7637", + "metadata": { + "attributes": { + "classes": [ + "code-cell" + ], + "id": "" + } + }, + "outputs": [ + { + "data": { + "text/plain": [ + "2000-01-01 0.311438\n", + "2000-01-02 -0.459154\n", + "2000-01-03 1.408196\n", + "2000-01-04 0.926176\n", + "2000-01-05 -0.490948\n", + "2000-01-06 -1.378264\n", + "2000-01-07 0.628157\n", + "2000-01-08 0.291123\n", + "Freq: D, Name: A, dtype: float64" + ] + }, + "execution_count": 128, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "dfa.A" + ] + }, + { + "cell_type": "code", + "execution_count": 129, + "id": "10cead84", + "metadata": { + "attributes": { + "classes": [ + "code-cell" + ], + "id": "" + } + }, + "outputs": [ + { + "data": { + "text/plain": [ + "a 5\n", + "b 2\n", + "c 3\n", + "dtype: int64" + ] + }, + "execution_count": 129, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "sa.a = 5\n", + "sa" + ] + }, + { + "cell_type": "code", + "execution_count": 130, + "id": "6db24b96", + "metadata": { + "attributes": { + "classes": [ + "code-cell" + ], + "id": "" + } + }, + "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", + "
ABCD
2000-01-0102.1227632.206814-1.488590
2000-01-0211.6972990.8525622.389648
2000-01-032-0.326012-0.137593-0.287003
2000-01-0431.2133500.0394711.068784
2000-01-0540.1083420.5530741.213043
2000-01-0650.3746370.776962-0.125644
2000-01-076-1.2399290.761446-0.847097
2000-01-0871.5683501.0514890.526787
\n", + "
" + ], + "text/plain": [ + " A B C D\n", + "2000-01-01 0 2.122763 2.206814 -1.488590\n", + "2000-01-02 1 1.697299 0.852562 2.389648\n", + "2000-01-03 2 -0.326012 -0.137593 -0.287003\n", + "2000-01-04 3 1.213350 0.039471 1.068784\n", + "2000-01-05 4 0.108342 0.553074 1.213043\n", + "2000-01-06 5 0.374637 0.776962 -0.125644\n", + "2000-01-07 6 -1.239929 0.761446 -0.847097\n", + "2000-01-08 7 1.568350 1.051489 0.526787" + ] + }, + "execution_count": 130, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "dfa.A = list(range(len(dfa.index))) # ok if A already exists\n", + "dfa" + ] + }, + { + "cell_type": "code", + "execution_count": 131, + "id": "99790bfe", + "metadata": { + "attributes": { + "classes": [ + "code-cell" + ], + "id": "" + } + }, + "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", + "
ABCD
2000-01-0102.1227632.206814-1.488590
2000-01-0211.6972990.8525622.389648
2000-01-032-0.326012-0.137593-0.287003
2000-01-0431.2133500.0394711.068784
2000-01-0540.1083420.5530741.213043
2000-01-0650.3746370.776962-0.125644
2000-01-076-1.2399290.761446-0.847097
2000-01-0871.5683501.0514890.526787
\n", + "
" + ], + "text/plain": [ + " A B C D\n", + "2000-01-01 0 2.122763 2.206814 -1.488590\n", + "2000-01-02 1 1.697299 0.852562 2.389648\n", + "2000-01-03 2 -0.326012 -0.137593 -0.287003\n", + "2000-01-04 3 1.213350 0.039471 1.068784\n", + "2000-01-05 4 0.108342 0.553074 1.213043\n", + "2000-01-06 5 0.374637 0.776962 -0.125644\n", + "2000-01-07 6 -1.239929 0.761446 -0.847097\n", + "2000-01-08 7 1.568350 1.051489 0.526787" + ] + }, + "execution_count": 131, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "dfa['A'] = list(range(len(dfa.index))) # use this form to create a new column\n", + "dfa" + ] + }, + { + "cell_type": "markdown", + "id": "1dac3787-172d-4127-b483-d08921a0e060", + "metadata": { + "attributes": { + "classes": [ + "warning" + ], + "id": "" + } + }, + "source": [ + "- You can use this access only if the index element is a valid Python identifier, e.g. s.1 is not allowed. See here for an explanation of valid identifiers.\n", + "\n", + "- The attribute will not be available if it conflicts with an existing method name, e.g. s.min is not allowed, but s['min'] is possible.\n", + "\n", + "- Similarly, the attribute will not be available if it conflicts with any of the following list: index, major_axis, minor_axis, items.\n", + "\n", + "- In any of these cases, standard indexing will still work, e.g. s['1'], s['min'], and s['index'] will access the corresponding element or column." + ] + }, + { + "cell_type": "markdown", + "id": "ae10e002", + "metadata": {}, + "source": [ + "If you are using the IPython environment, you may also use tab-completion to see these accessible attributes.\n", + "\n", + "You can also assign a `dict` to a row of a `DataFrame`:" + ] + }, + { + "cell_type": "code", + "execution_count": 132, + "id": "29d1e1b0", + "metadata": { + "attributes": { + "classes": [ + "code-cell" + ], + "id": "" + } + }, + "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", + "
xy
013
1999
235
\n", + "
" + ], + "text/plain": [ + " x y\n", + "0 1 3\n", + "1 9 99\n", + "2 3 5" + ] + }, + "execution_count": 132, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "x = pd.DataFrame({'x': [1, 2, 3], 'y': [3, 4, 5]})\n", + "x.iloc[1] = {'x': 9, 'y': 99}\n", + "x" + ] + }, + { + "cell_type": "markdown", + "id": "9e1ee914", + "metadata": {}, + "source": [ + "You can use attribute access to modify an existing element of a Series or column of a DataFrame, but be careful; if you try to use attribute access to create a new column, it creates a new attribute rather than a new column. In 0.21.0 and later, this will raise a `UserWarning`:" + ] + }, + { + "cell_type": "code", + "execution_count": 144, + "id": "b55c8c4d", + "metadata": { + "attributes": { + "classes": [ + "code-cell" + ], + "id": "" + } + }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "C:\\Users\\87554\\AppData\\Local\\Temp\\ipykernel_46616\\269534380.py:2: UserWarning: Pandas doesn't allow columns to be created via a new attribute name - see https://pandas.pydata.org/pandas-docs/stable/indexing.html#attribute-access\n", + " df.two = [4, 5, 6]\n" + ] + } + ], + "source": [ + "df = pd.DataFrame({'one': [1., 2., 3.]})\n", + "df.two = [4, 5, 6]" + ] + }, + { + "cell_type": "code", + "execution_count": 135, + "id": "e0a12bf3", + "metadata": { + "attributes": { + "classes": [ + "code-cell" + ], + "id": "" + } + }, + "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", + "
one
01.0
12.0
23.0
\n", + "
" + ], + "text/plain": [ + " one\n", + "0 1.0\n", + "1 2.0\n", + "2 3.0" + ] + }, + "execution_count": 135, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df" + ] + }, + { + "cell_type": "markdown", + "id": "96013159", + "metadata": {}, + "source": [ + "### Slicing ranges\n", + "\n", + "For now, we explain the semantics of slicing using the [] operator.\n", + "\n", + "With Series, the syntax works exactly as with an ndarray, returning a slice of the values and the corresponding labels:" + ] + }, + { + "cell_type": "code", + "execution_count": 136, + "id": "ab285a63", + "metadata": { + "attributes": { + "classes": [ + "code-cell" + ], + "id": "" + } + }, + "outputs": [ + { + "data": { + "text/plain": [ + "2000-01-01 0.311438\n", + "2000-01-02 -0.459154\n", + "2000-01-03 1.408196\n", + "2000-01-04 0.926176\n", + "2000-01-05 -0.490948\n", + "2000-01-06 -1.378264\n", + "2000-01-07 0.628157\n", + "2000-01-08 0.291123\n", + "Freq: D, Name: A, dtype: float64" + ] + }, + "execution_count": 136, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "s" + ] + }, + { + "cell_type": "code", + "execution_count": 137, + "id": "73654be5", + "metadata": { + "attributes": { + "classes": [ + "code-cell" + ], + "id": "" + } + }, + "outputs": [ + { + "data": { + "text/plain": [ + "2000-01-01 0.311438\n", + "2000-01-02 -0.459154\n", + "2000-01-03 1.408196\n", + "2000-01-04 0.926176\n", + "2000-01-05 -0.490948\n", + "Freq: D, Name: A, dtype: float64" + ] + }, + "execution_count": 137, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "s[:5]" + ] + }, + { + "cell_type": "code", + "execution_count": 138, + "id": "bafda5a6", + "metadata": { + "attributes": { + "classes": [ + "code-cell" + ], + "id": "" + } + }, + "outputs": [ + { + "data": { + "text/plain": [ + "2000-01-01 0.311438\n", + "2000-01-03 1.408196\n", + "2000-01-05 -0.490948\n", + "2000-01-07 0.628157\n", + "Freq: 2D, Name: A, dtype: float64" + ] + }, + "execution_count": 138, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "s[::2]" + ] + }, + { + "cell_type": "code", + "execution_count": 139, + "id": "e28c3dc5", + "metadata": { + "attributes": { + "classes": [ + "code-cell" + ], + "id": "" + } + }, + "outputs": [ + { + "data": { + "text/plain": [ + "2000-01-08 0.291123\n", + "2000-01-07 0.628157\n", + "2000-01-06 -1.378264\n", + "2000-01-05 -0.490948\n", + "2000-01-04 0.926176\n", + "2000-01-03 1.408196\n", + "2000-01-02 -0.459154\n", + "2000-01-01 0.311438\n", + "Freq: -1D, Name: A, dtype: float64" + ] + }, + "execution_count": 139, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "s[::-1]" + ] + }, + { + "cell_type": "markdown", + "id": "13b86bff", + "metadata": {}, + "source": [ + "Note that setting works as well:" + ] + }, + { + "cell_type": "code", + "execution_count": 140, + "id": "46dbb94c", + "metadata": { + "attributes": { + "classes": [ + "code-cell" + ], + "id": "" + } + }, + "outputs": [ + { + "data": { + "text/plain": [ + "2000-01-01 0.000000\n", + "2000-01-02 0.000000\n", + "2000-01-03 0.000000\n", + "2000-01-04 0.000000\n", + "2000-01-05 0.000000\n", + "2000-01-06 -1.378264\n", + "2000-01-07 0.628157\n", + "2000-01-08 0.291123\n", + "Freq: D, Name: A, dtype: float64" + ] + }, + "execution_count": 140, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "s2 = s.copy()\n", + "s2[:5] = 0\n", + "s2" + ] + }, + { + "cell_type": "markdown", + "id": "89fac206", + "metadata": {}, + "source": [ + "With DataFrame, slicing inside of `[]` slices the rows. This is provided largely as a convenience since it is such a common operation." + ] + }, + { + "cell_type": "code", + "execution_count": 141, + "id": "d2c3c1af", + "metadata": { + "attributes": { + "classes": [ + "code-cell" + ], + "id": "" + } + }, + "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", + "
one
01.0
12.0
23.0
\n", + "
" + ], + "text/plain": [ + " one\n", + "0 1.0\n", + "1 2.0\n", + "2 3.0" + ] + }, + "execution_count": 141, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df[:3]" + ] + }, + { + "cell_type": "code", + "execution_count": 142, + "id": "c46fa1e7", + "metadata": { + "attributes": { + "classes": [ + "code-cell" + ], + "id": "" + }, + "tags": [] + }, + "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", + "
one
23.0
12.0
01.0
\n", + "
" + ], + "text/plain": [ + " one\n", + "2 3.0\n", + "1 2.0\n", + "0 1.0" + ] + }, + "execution_count": 142, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df[::-1]" + ] + }, + { + "cell_type": "markdown", + "id": "674b4c29-0e55-4243-a46c-7fbffb51a02a", + "metadata": {}, + "source": [ + "## Acknowledgments\n", + "\n", + "Thanks for [Pandas user guide](https://pandas.pydata.org/docs/user_guide/index.html). It contributes the majority of the content in this chapter." + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "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.4" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/_sources/data-science/working-with-data/relational-databases.ipynb b/_sources/data-science/working-with-data/relational-databases.ipynb index c0d37ca71c..0ca30ae27c 100644 --- a/_sources/data-science/working-with-data/relational-databases.ipynb +++ b/_sources/data-science/working-with-data/relational-databases.ipynb @@ -2,7 +2,7 @@ "cells": [ { "cell_type": "markdown", - "id": "1945f40b", + "id": "d25f0717", "metadata": {}, "source": [ "# Relational databases\n", diff --git a/_sources/data-science/working-with-data/working-with-data.ipynb b/_sources/data-science/working-with-data/working-with-data.ipynb index ae014c1328..111abc09d8 100644 --- a/_sources/data-science/working-with-data/working-with-data.ipynb +++ b/_sources/data-science/working-with-data/working-with-data.ipynb @@ -2,7 +2,7 @@ "cells": [ { "cell_type": "markdown", - "id": "c15b2dc9", + "id": "6ab3d42f", "metadata": {}, "source": [ "# Working with data\n", diff --git a/_sources/deep-learning/autoencoder.ipynb b/_sources/deep-learning/autoencoder.ipynb index 4a291705f3..0f598fd884 100644 --- a/_sources/deep-learning/autoencoder.ipynb +++ b/_sources/deep-learning/autoencoder.ipynb @@ -2,7 +2,7 @@ "cells": [ { "cell_type": "markdown", - "id": "9d157625", + "id": "26432477", "metadata": {}, "source": [ "# Autoencoder\n", @@ -108,7 +108,7 @@ { "cell_type": "code", "execution_count": null, - "id": "228211b1", + "id": "1c39e21d", "metadata": {}, "outputs": [], "source": [ @@ -118,7 +118,7 @@ }, { "cell_type": "markdown", - "id": "cf0a9116", + "id": "02a7afd0", "metadata": {}, "source": [ "MNIST Dataset parameters." @@ -127,7 +127,7 @@ { "cell_type": "code", "execution_count": null, - "id": "5c2c15aa", + "id": "2eaf34ef", "metadata": {}, "outputs": [], "source": [ @@ -136,7 +136,7 @@ }, { "cell_type": "markdown", - "id": "5f518c57", + "id": "0c62fa63", "metadata": {}, "source": [ "Training parameters." @@ -145,7 +145,7 @@ { "cell_type": "code", "execution_count": null, - "id": "f62780cd", + "id": "dcd59057", "metadata": {}, "outputs": [], "source": [ @@ -157,7 +157,7 @@ }, { "cell_type": "markdown", - "id": "38a7f6cc", + "id": "376ff0b9", "metadata": {}, "source": [ "Network Parameters" @@ -166,7 +166,7 @@ { "cell_type": "code", "execution_count": null, - "id": "66d087e6", + "id": "3c33e257", "metadata": {}, "outputs": [], "source": [ @@ -176,7 +176,7 @@ }, { "cell_type": "markdown", - "id": "a6971304", + "id": "c50d49f0", "metadata": {}, "source": [ "Prepare MNIST data." @@ -185,7 +185,7 @@ { "cell_type": "code", "execution_count": null, - "id": "604453ac", + "id": "071de12f", "metadata": {}, "outputs": [], "source": [ @@ -201,7 +201,7 @@ }, { "cell_type": "markdown", - "id": "a646913f", + "id": "4566d310", "metadata": {}, "source": [ "Store layers weight & bias.\n", @@ -211,7 +211,7 @@ { "cell_type": "code", "execution_count": null, - "id": "f0730e6e", + "id": "45bf0285", "metadata": {}, "outputs": [], "source": [ @@ -233,7 +233,7 @@ }, { "cell_type": "markdown", - "id": "96e1bc03", + "id": "1e77c8d0", "metadata": {}, "source": [ "Building the encoder." @@ -242,7 +242,7 @@ { "cell_type": "code", "execution_count": null, - "id": "b584fe82", + "id": "46bf44f0", "metadata": {}, "outputs": [], "source": [ @@ -258,7 +258,7 @@ }, { "cell_type": "markdown", - "id": "098b2685", + "id": "58f6c79f", "metadata": {}, "source": [ "Building the decoder." @@ -267,7 +267,7 @@ { "cell_type": "code", "execution_count": null, - "id": "fc2fa0ae", + "id": "f357096c", "metadata": {}, "outputs": [], "source": [ @@ -283,7 +283,7 @@ }, { "cell_type": "markdown", - "id": "a477bbcd", + "id": "4d37abf8", "metadata": {}, "source": [ "Mean square loss between original images and reconstructed ones." @@ -292,7 +292,7 @@ { "cell_type": "code", "execution_count": null, - "id": "b6dcf84e", + "id": "87ef739e", "metadata": {}, "outputs": [], "source": [ @@ -302,7 +302,7 @@ }, { "cell_type": "markdown", - "id": "b42d8ee4", + "id": "429308e7", "metadata": {}, "source": [ "Adam optimizer." @@ -311,7 +311,7 @@ { "cell_type": "code", "execution_count": null, - "id": "0378f043", + "id": "77877aff", "metadata": {}, "outputs": [], "source": [ @@ -320,7 +320,7 @@ }, { "cell_type": "markdown", - "id": "78e12a28", + "id": "66ab0c6f", "metadata": {}, "source": [ "Optimization process." @@ -329,7 +329,7 @@ { "cell_type": "code", "execution_count": null, - "id": "c0b09961", + "id": "ca1410d9", "metadata": {}, "outputs": [], "source": [ @@ -353,7 +353,7 @@ }, { "cell_type": "markdown", - "id": "2f429f19", + "id": "572a7552", "metadata": {}, "source": [ "Run training for the given number of steps." @@ -362,7 +362,7 @@ { "cell_type": "code", "execution_count": null, - "id": "c2f3c8a9", + "id": "bee12173", "metadata": {}, "outputs": [], "source": [ @@ -377,7 +377,7 @@ }, { "cell_type": "markdown", - "id": "cdc254ae", + "id": "418fa76b", "metadata": {}, "source": [ "Testing and Visualization." @@ -386,7 +386,7 @@ { "cell_type": "code", "execution_count": null, - "id": "dd6b62fa", + "id": "51737843", "metadata": {}, "outputs": [], "source": [ @@ -395,7 +395,7 @@ }, { "cell_type": "markdown", - "id": "2b624639", + "id": "2a6fab19", "metadata": {}, "source": [ "Encode and decode images from test set and visualize their reconstruction." @@ -404,7 +404,7 @@ { "cell_type": "code", "execution_count": null, - "id": "d4b2b9ca", + "id": "a3b9d7ca", "metadata": {}, "outputs": [], "source": [ @@ -438,7 +438,7 @@ }, { "cell_type": "markdown", - "id": "74a7edf0", + "id": "52acb449", "metadata": {}, "source": [ "
-

37.103.5.1. Define a convolutional autoencoder#

+

37.101.5.1. Define a convolutional autoencoder#

In this example, you will train a convolutional autoencoder using Conv2D layers in the encoder, and Conv2DTranspose layers in the decoder.

@@ -2151,15 +2168,15 @@

37.103.5.1. Define a convolutional autoe

-

37.103.6. Third example: Anomaly detection#

+

37.101.6. Third example: Anomaly detection#

-

37.103.7. Overview#

+

37.101.7. Overview#

In this example, you will train an autoencoder to detect anomalies on the ECG5000 dataset. This dataset contains 5,000 Electrocardiograms, each with 140 data points. You will use a simplified version of the dataset, where each example has been labeled either 0 (corresponding to an abnormal rhythm), or 1 (corresponding to a normal rhythm). You are interested in identifying the abnormal rhythms.

Note: This is a labeled dataset, so you could phrase this as a supervised learning problem. The goal of this example is to illustrate anomaly detection concepts you can apply to larger datasets, where you do not have labels available (for example, if you had many thousands of normal rhythms, and only a small number of abnormal rhythms).

How will you detect anomalies using an autoencoder? Recall that an autoencoder is trained to minimize reconstruction error. You will train an autoencoder on the normal rhythms only, then use it to reconstruct all the data. Our hypothesis is that the abnormal rhythms will have higher reconstruction error. You will then classify a rhythm as an anomaly if the reconstruction error surpasses a fixed threshold.

-

37.103.7.1. Load ECG data#

+

37.101.7.1. Load ECG data#

The dataset you will use is based on one from timeseriesclassification.com.

@@ -2457,7 +2474,7 @@

37.103.7.1. Load ECG data -

37.103.7.2. Build the model#

+

37.101.7.2. Build the model#

class AnomalyDetector(Model):
@@ -2549,7 +2566,7 @@ 

37.103.7.2. Build the model -

37.103.7.3. Detect anomalies#

+

37.101.7.3. Detect anomalies#

Detect anomalies by calculating whether the reconstruction loss is greater than a fixed threshold. In this tutorial, you will calculate the mean average error for normal examples from the training set, then classify future examples as anomalous if the reconstruction error is higher than one standard deviation from the training set.

Plot the reconstruction error on normal ECGs from the training set

@@ -2640,11 +2657,11 @@

37.103.7.3. Detect anomalies -

37.103.8. Next steps#

+

37.101.8. Next steps#

To learn more about anomaly detection with autoencoders, check out this excellent interactive example built with TensorFlow.js by Victor Dibia. For a real-world use case, you can learn how Airbus Detects Anomalies in ISS Telemetry Data using TensorFlow. To learn more about the basics, consider reading this blog post by François Chollet. For more details, check out chapter 14 from Deep Learning by Ian Goodfellow, Yoshua Bengio, and Aaron Courville.

-

37.103.9. Acknowledgments#

+

37.101.9. Acknowledgments#

Thanks to TensorFlow Core for creating the open-source course autoencoder. It inspires the majority of the content in this chapter.

@@ -2686,13 +2703,13 @@

37.103.9. Acknowledgments

previous

-

37.101. Google Stock Price Prediction RNN

+

37.99. Google Stock Price Prediction RNN

next

-

37.104. Base/Denoising Autoencoder & Dimension Reduction

+

37.102. Base/Denoising Autoencoder & Dimension Reduction

diff --git a/assignments/deep-learning/autoencoder/base-denoising-autoencoder-dimension-reduction.html b/assignments/deep-learning/autoencoder/base-denoising-autoencoder-dimension-reduction.html index 26bfec3a6d..7969c1b484 100644 --- a/assignments/deep-learning/autoencoder/base-denoising-autoencoder-dimension-reduction.html +++ b/assignments/deep-learning/autoencoder/base-denoising-autoencoder-dimension-reduction.html @@ -6,7 +6,7 @@ - 37.104. Base/Denoising Autoencoder & Dimension Reduction — Ocademy Open Machine Learning Book + 37.102. Base/Denoising Autoencoder & Dimension Reduction — Ocademy Open Machine Learning Book @@ -100,8 +100,8 @@ - - + + @@ -238,10 +238,32 @@

Ocademy Open Machine Learning Book

5.3. NumPy -
  • +
  • 5.4. Pandas + + +
  • @@ -254,8 +276,8 @@

    Ocademy Open Machine Learning Book

    6. Data visualization - -
  • - - 37.45. ML linear regression - assignment 1 - -
  • -
  • - - 37.46. ML linear regression - assignment 2 + + 37.45. Linear regression - California Housing
  • - 37.47. Linear Regression Metrics + 37.46. Linear Regression Metrics
  • - 37.48. Loss Function + 37.47. Loss Function
  • - 37.49. Gradient descent + 37.48. Gradient descent + +
  • +
  • + + 37.49. Linear Regression Implementation from Scratch
  • - 37.51. ML logistic regression - assignment 1 + 37.50. ML logistic regression - assignment 1
  • - 37.52. ML logistic regression - assignment 2 + 37.51. ML logistic regression - assignment 2
  • - 37.53. ML neural network - Assignment 1 + 37.52. ML neural network - Assignment 1
  • - 37.54. Regression tools + 37.53. Regression tools
  • - 37.55. Managing data + 37.54. Managing data
  • - 37.56. Exploring visualizations + 37.55. Exploring visualizations
  • - 37.57. Try a different model + 37.56. Try a different model
  • - 37.58. Create a regression model + 37.57. Create a regression model
  • - 37.59. Linear and polynomial regression + 37.58. Linear and polynomial regression
  • - 37.60. Retrying some regression + 37.59. Retrying some regression
  • - 37.61. Pumpkin varieties and color + 37.60. Pumpkin varieties and color
  • - 37.62. Delicious asian and indian cuisines + 37.61. Delicious asian and indian cuisines
  • - 37.63. Explore classification methods - -
  • -
  • - - 37.64. Linear Regression Implementation from Scratch + 37.62. Explore classification methods
  • - 37.65. Kernel method assignment 1 + 37.63. Kernel method assignment 1
  • - 37.66. Support Vector Machines (SVM) - Intro and SVM for Regression + 37.64. Support Vector Machines (SVM) - Intro and SVM for Regression
  • - 37.67. Support Vector Machines (SVM) - Classification + 37.65. Support Vector Machines (SVM) - Classification
  • - 37.68. Decision Trees - Intro and Regression + 37.66. Decision Trees - Intro and Regression
  • - 37.69. Decision Trees - Classification + 37.67. Decision Trees - Classification
  • - 37.70. Model selection assignment 1 + 37.68. Model selection assignment 1
  • - 37.71. Learning Curve To Identify Overfit & Underfit + 37.69. Learning Curve To Identify Overfit & Underfit
  • - 37.72. Dropout and Batch Normalization + 37.70. Dropout and Batch Normalization
  • - 37.73. Lasso and Ridge Regression + 37.71. Lasso and Ridge Regression
  • - 37.74. Regularized Linear Models + 37.72. Regularized Linear Models
  • - 37.75. Random forests intro and regression + 37.73. Random forests intro and regression
  • - 37.76. Random forests for classification + 37.74. Random forests for classification
  • - 37.77. Beyond random forests: more ensemble models + 37.75. Beyond random forests: more ensemble models
  • - 37.78. Decision trees + 37.76. Decision trees
  • - 37.79. Hyperparameter tuning gradient boosting + 37.77. Hyperparameter tuning gradient boosting
  • - 37.80. Gradient boosting + 37.78. Gradient boosting
  • - 37.81. Boosting with tuning + 37.79. Boosting with tuning
  • - 37.82. Random Forest Classifier with Feature Importance + 37.80. Random Forest Classifier with Feature Importance
  • - 37.84. Data engineering + 37.82. Data engineering
  • - 37.85. Counterintuitive Challenges in ML Debugging + 37.83. Counterintuitive Challenges in ML Debugging
  • - 37.86. Case Study: Debugging in Classification + 37.84. Case Study: Debugging in Classification
  • - 37.87. Case Study: Debugging in Regression + 37.85. Case Study: Debugging in Regression
  • - 37.88. Study the solvers + 37.86. Study the solvers
  • - 37.89. Build classification models + 37.87. Build classification models
  • - 37.90. Build Classification Model + 37.88. Build Classification Model
  • - 37.91. Parameter play + 37.89. Parameter play
  • - 37.92. How to choose cnn architecture mnist + 37.90. How to choose cnn architecture mnist
  • - 37.94. Sign Language Digits Classification with CNN + 37.92. Sign Language Digits Classification with CNN
  • - 37.96. Object Recognition in Images using CNN + 37.94. Object Recognition in Images using CNN
  • - 37.97. Intro to TensorFlow for Deep Learning + 37.95. Intro to TensorFlow for Deep Learning
  • - 37.99. Bitcoin LSTM Model with Tweet Volume and Sentiment + 37.97. Bitcoin LSTM Model with Tweet Volume and Sentiment
  • - 37.101. Google Stock Price Prediction RNN + 37.99. Google Stock Price Prediction RNN
  • - 37.103. Intro to Autoencoders + 37.101. Intro to Autoencoders
  • - 37.104. Base/Denoising Autoencoder & Dimension Reduction + 37.102. Base/Denoising Autoencoder & Dimension Reduction
  • - 37.105. Fun with Variational Autoencoders + 37.103. Fun with Variational Autoencoders
  • - 37.106. Time Series Forecasting Assignment + 37.104. Time Series Forecasting Assignment
  • - 37.108. Neural Networks for Classification with TensorFlow + 37.106. Neural Networks for Classification with TensorFlow
  • - 37.109. NN Classify 15 Fruits Assignment + 37.107. NN Classify 15 Fruits Assignment
  • - 37.114. DQN On Foreign Exchange Market + 37.112. DQN On Foreign Exchange Market
  • - 37.115. Art by gan + 37.113. Art by gan
  • - 37.117. Generative Adversarial Networks (GANs) + 37.115. Generative Adversarial Networks (GANs)
  • - 37.118. Basic classification: Classify images of clothing + 37.116. Basic classification: Classify images of clothing
  • @@ -1137,8 +1154,8 @@

    Ocademy Open Machine Learning Book

    38. Slides - -
    -

    37.104. Base/Denoising Autoencoder & Dimension Reduction#

    +

    37.102. Base/Denoising Autoencoder & Dimension Reduction#

    -

    37.104.1. Introduction#

    +

    37.102.1. Introduction#

    Autoencoder is a neural network that simply copies input to output. In some ways, it looks like a simple neural network, but it makes a difficult neural network by constraining the network in various ways. For example, the number of neurons in the hidden layer is smaller than that of the input layer to compress the data (reduce the dimension), or add noise to the input data and then restore the original input. There are various autoencoders, such as learning These constraints prevent the autoencoder from simply copying the input directly to the output, and control it to learn how to represent the data efficiently.

    In this notebook, we will cover two autoencoders:

    @@ -1784,7 +1801,7 @@

    37.104.1. Introduction -

    37.104.2. Loading and Scaling Datasets#

    +

    37.102.2. Loading and Scaling Datasets#

    Train a basic autoencoder using the Fashon MNIST dataset. Each image in this dataset is 28x28 pixels. Inputs are scaled for training.

    @@ -1802,7 +1819,7 @@

    37.104.2. Loading and Scaling Datasets

    -

    37.104.3. Load model#

    +

    37.102.3. Load model#

    import os
    @@ -1858,7 +1875,7 @@ 

    37.104.3. Load model -

    37.104.3.1. Checking dataset by 2D plot#

    +

    37.102.3.1. Checking dataset by 2D plot#

    Autoencoding can be thought of as a kind of dimensionality reduction process. Therefore, after compressing the fashion MNIST dataset through UMAP in two dimensions, let’s check how it is mapped for each label.

    @@ -1906,7 +1923,7 @@

    37.104.3.1. Checking dataset by 2D plot<

    Ref: https://umap-learn.readthedocs.io/en

    -

    37.104.3.2. Checking dataset by 3D plot#

    +

    37.102.3.2. Checking dataset by 3D plot#

    import plotly
    @@ -1932,9 +1949,9 @@ 

    37.104.3.2. Checking dataset by 3D plot<

    -

    37.104.4. Base Autoencoder#

    +

    37.102.4. Base Autoencoder#

    -

    37.104.4.1. Modeling#

    +

    37.102.4.1. Modeling#

    An autoencoder always consists of two parts: an encoder and a decoder.

    • Encoder (Recognition network): it transforms an input into an internal representation.

    • @@ -1978,7 +1995,7 @@

      37.104.4.1. Modeling -

      37.104.4.2. Training#

      +

      37.102.4.2. Training#

      Train the model using x_train as input and target. The encoder learns to compress the dataset into a latent space in 784 dimensions, and the decoder learns to reconstruct the original image.

      @@ -2009,7 +2026,7 @@

      37.104.4.2. Training -

      37.104.4.3. Plotting the latent space after Dimension Reduction#

      +

      37.102.4.3. Plotting the latent space after Dimension Reduction#

      y_test = pd.DataFrame(y_test,columns=['class'])
      @@ -2029,7 +2046,7 @@ 

      37.104.4.3. Plotting the latent space af

      The \(28*28\) dimension input is compressed into the \(7*7\) latent space by the encoder. The latent space is compressed into 2D using Dimension Reduction. Although it is an approximate expression, it can be seen that each class is well clustered in the compressed latent space.

    -

    37.104.4.4. Checking results#

    +

    37.102.4.4. Checking results#

    n = 4
    @@ -2059,7 +2076,7 @@ 

    37.104.4.4. Checking results -

    37.104.5. Denoising Autoencoder#

    +

    37.102.5. Denoising Autoencoder#

    Another way to constrain the autoencoder to learn meaningful features is to add noise to the input and train it to reconstruct the original noise-free input. Noise can be generated by adding Gaussian noise to the input as shown in the figure below, or by randomly turning off the input unit (node) like a dropout.

    @@ -2082,7 +2099,7 @@

    37.104.5. Denoising Autoencoder

    -

    37.104.5.1. Adding random noise to the image.#

    +

    37.102.5.1. Adding random noise to the image.#

    noise_factor = 0.2
    @@ -2097,7 +2114,7 @@ 

    37.104.5.1. Adding random noise to the i

    -

    37.104.5.2. Plotting a noisy image.#

    +

    37.102.5.2. Plotting a noisy image.#

    n = 4
    @@ -2114,9 +2131,9 @@ 

    37.104.5.2. Plotting a noisy image.

    -

    37.104.5.3. Checking Noisy Dataset using Demension Reduction#

    +

    37.102.5.3. Checking Noisy Dataset using Demension Reduction#

    -

    37.104.5.3.1. 1) Noisy Dataset#

    +

    37.102.5.3.1. 1) Noisy Dataset#

    x_train_noisy_flat = x_train.reshape(x_train_noisy.shape[0], -1)
    @@ -2142,7 +2159,7 @@ 

    37.104.5.3.1. 1) Noisy Dataset -

    37.104.5.3.2. 2) Orignal Dataset#

    +

    37.102.5.3.2. 2) Orignal Dataset#

    x_train_flat = x_train.reshape(x_train.shape[0], -1)
    @@ -2165,7 +2182,7 @@ 

    37.104.5.3.2. 2) Orignal Dataset

    -

    37.104.5.4. Modeling#

    +

    37.102.5.4. Modeling#

    class Denoise(Model):
    @@ -2200,7 +2217,7 @@ 

    37.104.5.4. Modeling -

    37.104.5.5. Training#

    +

    37.102.5.5. Training#

    autoencoder.fit(x_train_noisy, x_train,
    @@ -2229,7 +2246,7 @@ 

    37.104.5.5. Training -

    37.104.5.6. Checking results#

    +

    37.102.5.6. Checking results#

    Plots both the noisy and denoised images generated by the autoencoder.

    @@ -2268,7 +2285,7 @@

    37.104.5.6. Checking results -

    37.104.6. Acknowledgments#

    +

    37.102.6. Acknowledgments#

    Thanks to TOH SEOK KIM for creating the Kaggle open-source project Base/Denoising Autoencoder + Dimension Reduction. It inspires the majority of the content in this chapter.

    @@ -2310,13 +2327,13 @@

    37.104.6. Acknowledgments

    previous

    -

    37.103. Intro to Autoencoders

    +

    37.101. Intro to Autoencoders

    next

    -

    37.105. Fun with Variational Autoencoders

    +

    37.103. Fun with Variational Autoencoders

    diff --git a/assignments/deep-learning/autoencoder/variational-autoencoder-and-faces-generation.html b/assignments/deep-learning/autoencoder/variational-autoencoder-and-faces-generation.html index 2d53a79b71..2ff4d05242 100644 --- a/assignments/deep-learning/autoencoder/variational-autoencoder-and-faces-generation.html +++ b/assignments/deep-learning/autoencoder/variational-autoencoder-and-faces-generation.html @@ -6,7 +6,7 @@ - 37.105. Fun with Variational Autoencoders — Ocademy Open Machine Learning Book + 37.103. Fun with Variational Autoencoders — Ocademy Open Machine Learning Book @@ -98,8 +98,8 @@ - - + + @@ -236,10 +236,32 @@

    Ocademy Open Machine Learning Book

    5.3. NumPy -
  • +
  • 5.4. Pandas + + +
  • @@ -252,8 +274,8 @@

    Ocademy Open Machine Learning Book

    6. Data visualization - -
  • - - 37.45. ML linear regression - assignment 1 - -
  • -
  • - - 37.46. ML linear regression - assignment 2 + + 37.45. Linear regression - California Housing
  • - 37.47. Linear Regression Metrics + 37.46. Linear Regression Metrics
  • - 37.48. Loss Function + 37.47. Loss Function
  • - 37.49. Gradient descent + 37.48. Gradient descent + +
  • +
  • + + 37.49. Linear Regression Implementation from Scratch
  • - 37.51. ML logistic regression - assignment 1 + 37.50. ML logistic regression - assignment 1
  • - 37.52. ML logistic regression - assignment 2 + 37.51. ML logistic regression - assignment 2
  • - 37.53. ML neural network - Assignment 1 + 37.52. ML neural network - Assignment 1
  • - 37.54. Regression tools + 37.53. Regression tools
  • - 37.55. Managing data + 37.54. Managing data
  • - 37.56. Exploring visualizations + 37.55. Exploring visualizations
  • - 37.57. Try a different model + 37.56. Try a different model
  • - 37.58. Create a regression model + 37.57. Create a regression model
  • - 37.59. Linear and polynomial regression + 37.58. Linear and polynomial regression
  • - 37.60. Retrying some regression + 37.59. Retrying some regression
  • - 37.61. Pumpkin varieties and color + 37.60. Pumpkin varieties and color
  • - 37.62. Delicious asian and indian cuisines + 37.61. Delicious asian and indian cuisines
  • - 37.63. Explore classification methods - -
  • -
  • - - 37.64. Linear Regression Implementation from Scratch + 37.62. Explore classification methods
  • - 37.65. Kernel method assignment 1 + 37.63. Kernel method assignment 1
  • - 37.66. Support Vector Machines (SVM) - Intro and SVM for Regression + 37.64. Support Vector Machines (SVM) - Intro and SVM for Regression
  • - 37.67. Support Vector Machines (SVM) - Classification + 37.65. Support Vector Machines (SVM) - Classification
  • - 37.68. Decision Trees - Intro and Regression + 37.66. Decision Trees - Intro and Regression
  • - 37.69. Decision Trees - Classification + 37.67. Decision Trees - Classification
  • - 37.70. Model selection assignment 1 + 37.68. Model selection assignment 1
  • - 37.71. Learning Curve To Identify Overfit & Underfit + 37.69. Learning Curve To Identify Overfit & Underfit
  • - 37.72. Dropout and Batch Normalization + 37.70. Dropout and Batch Normalization
  • - 37.73. Lasso and Ridge Regression + 37.71. Lasso and Ridge Regression
  • - 37.74. Regularized Linear Models + 37.72. Regularized Linear Models
  • - 37.75. Random forests intro and regression + 37.73. Random forests intro and regression
  • - 37.76. Random forests for classification + 37.74. Random forests for classification
  • - 37.77. Beyond random forests: more ensemble models + 37.75. Beyond random forests: more ensemble models
  • - 37.78. Decision trees + 37.76. Decision trees
  • - 37.79. Hyperparameter tuning gradient boosting + 37.77. Hyperparameter tuning gradient boosting
  • - 37.80. Gradient boosting + 37.78. Gradient boosting
  • - 37.81. Boosting with tuning + 37.79. Boosting with tuning
  • - 37.82. Random Forest Classifier with Feature Importance + 37.80. Random Forest Classifier with Feature Importance
  • - 37.84. Data engineering + 37.82. Data engineering
  • - 37.85. Counterintuitive Challenges in ML Debugging + 37.83. Counterintuitive Challenges in ML Debugging
  • - 37.86. Case Study: Debugging in Classification + 37.84. Case Study: Debugging in Classification
  • - 37.87. Case Study: Debugging in Regression + 37.85. Case Study: Debugging in Regression
  • - 37.88. Study the solvers + 37.86. Study the solvers
  • - 37.89. Build classification models + 37.87. Build classification models
  • - 37.90. Build Classification Model + 37.88. Build Classification Model
  • - 37.91. Parameter play + 37.89. Parameter play
  • - 37.92. How to choose cnn architecture mnist + 37.90. How to choose cnn architecture mnist
  • - 37.94. Sign Language Digits Classification with CNN + 37.92. Sign Language Digits Classification with CNN
  • - 37.96. Object Recognition in Images using CNN + 37.94. Object Recognition in Images using CNN
  • - 37.97. Intro to TensorFlow for Deep Learning + 37.95. Intro to TensorFlow for Deep Learning
  • - 37.99. Bitcoin LSTM Model with Tweet Volume and Sentiment + 37.97. Bitcoin LSTM Model with Tweet Volume and Sentiment
  • - 37.101. Google Stock Price Prediction RNN + 37.99. Google Stock Price Prediction RNN
  • - 37.103. Intro to Autoencoders + 37.101. Intro to Autoencoders
  • - 37.104. Base/Denoising Autoencoder & Dimension Reduction + 37.102. Base/Denoising Autoencoder & Dimension Reduction
  • - 37.105. Fun with Variational Autoencoders + 37.103. Fun with Variational Autoencoders
  • - 37.106. Time Series Forecasting Assignment + 37.104. Time Series Forecasting Assignment
  • - 37.108. Neural Networks for Classification with TensorFlow + 37.106. Neural Networks for Classification with TensorFlow
  • - 37.109. NN Classify 15 Fruits Assignment + 37.107. NN Classify 15 Fruits Assignment
  • - 37.114. DQN On Foreign Exchange Market + 37.112. DQN On Foreign Exchange Market
  • - 37.115. Art by gan + 37.113. Art by gan
  • - 37.117. Generative Adversarial Networks (GANs) + 37.115. Generative Adversarial Networks (GANs)
  • - 37.118. Basic classification: Classify images of clothing + 37.116. Basic classification: Classify images of clothing
  • @@ -1135,8 +1152,8 @@

    Ocademy Open Machine Learning Book

    38. Slides - -
    -

    37.105. Fun with Variational Autoencoders#

    +

    37.103. Fun with Variational Autoencoders#

    This is a starter kernel to use Labelled Faces in the Wild (LFW) Dataset in order to maintain knowledge about main Autoencoder principles. PyTorch will be used for modelling.

    -

    37.105.1. Fork it and give it an upvote.#

    +

    37.103.1. Fork it and give it an upvote.#

    architecture

    Useful links:

      @@ -1673,7 +1690,7 @@

      37.105.1. Fork it and give it an upvote.

    -

    37.105.2. A bit of theory#

    +

    37.103.2. A bit of theory#

    “Autoencoding” is a data compression algorithm where the compression and decompression functions are 1) data-specific, 2) lossy, and 3) learned automatically from examples rather than engineered by a human. Additionally, in almost all contexts where the term “autoencoder” is used, the compression and decompression functions are implemented with neural networks.

    1. Autoencoders are data-specific, which means that they will only be able to compress data similar to what they have been trained on. This is different from, say, the MPEG-2 Audio Layer III (MP3) compression algorithm, which only holds assumptions about “sound” in general, but not about specific types of sounds. An autoencoder trained on pictures of faces would do a rather poor job of compressing pictures of trees, because the features it would learn would be face-specific.

    2. @@ -1715,7 +1732,7 @@

      37.105.2. A bit of theory -

      37.105.3. Load datasets#

      +

      37.103.3. Load datasets#

      datasets_url = "https://static-1300131294.cos.ap-shanghai.myqcloud.com/data/deep-learning/autoencoder/variational-autoencoder-and-faces-generation/lfw-deepfunneled.zip"
      @@ -1791,7 +1808,7 @@ 

      37.105.3. Load datasets -

      37.105.4. Explore the data#

      +

      37.103.4. Explore the data#

      Image data is collected from DATASET_PATH and a dataset is created in which the person information for each image is extracted and used for subsequent data analysis or processing. Finally, the filter() function is used to limit the size of the dataset by retaining only information about people who appear less than 25 times.

      @@ -1836,7 +1853,7 @@

      37.105.4. Explore the data -

      37.105.5. Prepare the dataset#

      +

      37.103.5. Prepare the dataset#

      • Reads the attribute data from the txt file at the specified path and stores it in a DataFrame object called df_attrs. The txt file is tab delimited, skipping the first line.

      • @@ -1919,7 +1936,7 @@

        37.105.5. Prepare the dataset -

        37.105.6. Building simple autoencoder#

        +

        37.103.6. Building simple autoencoder#

        dim_z=100
        @@ -2025,7 +2042,7 @@ 

        37.105.6. Building simple autoencoder

    -

    37.105.7. Train autoencoder#

    +

    37.103.7. Train autoencoder#

    • get_batch: It uses the Generator method to generate batches of a specified size by iterating over them. The amount of data generated is batch_size each time, until the entire data set is traversed.

    • @@ -2191,7 +2208,7 @@

      37.105.7. Train autoencoder -

      37.105.8. Sampling#

      +

      37.103.8. Sampling#

      Let’s generate some samples from random vectors

      @@ -2210,7 +2227,7 @@

      37.105.8. Sampling

    -

    37.105.9. Adding smile and glasses#

    +

    37.103.9. Adding smile and glasses#

    Let’s find some attributes like smiles or glasses on the photo and try to add it to the photos which don’t have it. We will use the second dataset for it. It contains a bunch of such attributes.

    -

    37.105.10. Variational autoencoder#

    +

    37.103.10. Variational autoencoder#

    So far we have trained our encoder to reconstruct the very same image that we’ve transfered to latent space. That means that when we’re trying to generate new image from the point decoder never met we’re getting the best image it can produce, but the quelity is not good enough.

    In other words the encoded vectors may not be continuous in the latent space.

    @@ -2516,12 +2533,12 @@

    37.105.10. Variational autoencoder

    -

    37.105.11. Conclusion#

    +

    37.103.11. Conclusion#

    Variational autoencoders are cool. Although models in this particular notebook are simple they let us design complex generative models of data, and fit them to large datasets. They can generate images of fictional celebrity faces and high-resolution digital artwork. These models also yield state-of-the-art machine learning results in image generation and reinforcement learning. Variational autoencoders (VAEs) were defined in 2013 by Kingma et al. and Rezende et al.

    -

    37.105.12. Acknowledgments#

    +

    37.103.12. Acknowledgments#

    Thanks to SERGEI AVERKIEV for creating the Kaggle open-source project Variational Autoencoder and Faces Generation. It inspires the majority of the content in this chapter.

    @@ -2563,13 +2580,13 @@

    37.105.12. Acknowledgments

    previous

    -

    37.104. Base/Denoising Autoencoder & Dimension Reduction

    +

    37.102. Base/Denoising Autoencoder & Dimension Reduction

    next

    -

    37.106. Time Series Forecasting Assignment

    +

    37.104. Time Series Forecasting Assignment

    diff --git a/assignments/deep-learning/cnn/how-to-choose-cnn-architecture-mnist.html b/assignments/deep-learning/cnn/how-to-choose-cnn-architecture-mnist.html index 24e3a9131e..50125ed804 100644 --- a/assignments/deep-learning/cnn/how-to-choose-cnn-architecture-mnist.html +++ b/assignments/deep-learning/cnn/how-to-choose-cnn-architecture-mnist.html @@ -6,7 +6,7 @@ - 37.92. How to choose cnn architecture mnist — Ocademy Open Machine Learning Book + 37.90. How to choose cnn architecture mnist — Ocademy Open Machine Learning Book @@ -98,8 +98,8 @@ - - + + @@ -236,10 +236,32 @@

    Ocademy Open Machine Learning Book

    5.3. NumPy -
  • +
  • 5.4. Pandas + + +
  • @@ -252,8 +274,8 @@

    Ocademy Open Machine Learning Book

    6. Data visualization - -
  • - - 37.45. ML linear regression - assignment 1 - -
  • -
  • - - 37.46. ML linear regression - assignment 2 + + 37.45. Linear regression - California Housing
  • - 37.47. Linear Regression Metrics + 37.46. Linear Regression Metrics
  • - 37.48. Loss Function + 37.47. Loss Function
  • - 37.49. Gradient descent + 37.48. Gradient descent + +
  • +
  • + + 37.49. Linear Regression Implementation from Scratch
  • - 37.51. ML logistic regression - assignment 1 + 37.50. ML logistic regression - assignment 1
  • - 37.52. ML logistic regression - assignment 2 + 37.51. ML logistic regression - assignment 2
  • - 37.53. ML neural network - Assignment 1 + 37.52. ML neural network - Assignment 1
  • - 37.54. Regression tools + 37.53. Regression tools
  • - 37.55. Managing data + 37.54. Managing data
  • - 37.56. Exploring visualizations + 37.55. Exploring visualizations
  • - 37.57. Try a different model + 37.56. Try a different model
  • - 37.58. Create a regression model + 37.57. Create a regression model
  • - 37.59. Linear and polynomial regression + 37.58. Linear and polynomial regression
  • - 37.60. Retrying some regression + 37.59. Retrying some regression
  • - 37.61. Pumpkin varieties and color + 37.60. Pumpkin varieties and color
  • - 37.62. Delicious asian and indian cuisines + 37.61. Delicious asian and indian cuisines
  • - 37.63. Explore classification methods - -
  • -
  • - - 37.64. Linear Regression Implementation from Scratch + 37.62. Explore classification methods
  • - 37.65. Kernel method assignment 1 + 37.63. Kernel method assignment 1
  • - 37.66. Support Vector Machines (SVM) - Intro and SVM for Regression + 37.64. Support Vector Machines (SVM) - Intro and SVM for Regression
  • - 37.67. Support Vector Machines (SVM) - Classification + 37.65. Support Vector Machines (SVM) - Classification
  • - 37.68. Decision Trees - Intro and Regression + 37.66. Decision Trees - Intro and Regression
  • - 37.69. Decision Trees - Classification + 37.67. Decision Trees - Classification
  • - 37.70. Model selection assignment 1 + 37.68. Model selection assignment 1
  • - 37.71. Learning Curve To Identify Overfit & Underfit + 37.69. Learning Curve To Identify Overfit & Underfit
  • - 37.72. Dropout and Batch Normalization + 37.70. Dropout and Batch Normalization
  • - 37.73. Lasso and Ridge Regression + 37.71. Lasso and Ridge Regression
  • - 37.74. Regularized Linear Models + 37.72. Regularized Linear Models
  • - 37.75. Random forests intro and regression + 37.73. Random forests intro and regression
  • - 37.76. Random forests for classification + 37.74. Random forests for classification
  • - 37.77. Beyond random forests: more ensemble models + 37.75. Beyond random forests: more ensemble models
  • - 37.78. Decision trees + 37.76. Decision trees
  • - 37.79. Hyperparameter tuning gradient boosting + 37.77. Hyperparameter tuning gradient boosting
  • - 37.80. Gradient boosting + 37.78. Gradient boosting
  • - 37.81. Boosting with tuning + 37.79. Boosting with tuning
  • - 37.82. Random Forest Classifier with Feature Importance + 37.80. Random Forest Classifier with Feature Importance
  • - 37.84. Data engineering + 37.82. Data engineering
  • - 37.85. Counterintuitive Challenges in ML Debugging + 37.83. Counterintuitive Challenges in ML Debugging
  • - 37.86. Case Study: Debugging in Classification + 37.84. Case Study: Debugging in Classification
  • - 37.87. Case Study: Debugging in Regression + 37.85. Case Study: Debugging in Regression
  • - 37.88. Study the solvers + 37.86. Study the solvers
  • - 37.89. Build classification models + 37.87. Build classification models
  • - 37.90. Build Classification Model + 37.88. Build Classification Model
  • - 37.91. Parameter play + 37.89. Parameter play
  • - 37.92. How to choose cnn architecture mnist + 37.90. How to choose cnn architecture mnist
  • - 37.94. Sign Language Digits Classification with CNN + 37.92. Sign Language Digits Classification with CNN
  • - 37.96. Object Recognition in Images using CNN + 37.94. Object Recognition in Images using CNN
  • - 37.97. Intro to TensorFlow for Deep Learning + 37.95. Intro to TensorFlow for Deep Learning
  • - 37.99. Bitcoin LSTM Model with Tweet Volume and Sentiment + 37.97. Bitcoin LSTM Model with Tweet Volume and Sentiment
  • - 37.101. Google Stock Price Prediction RNN + 37.99. Google Stock Price Prediction RNN
  • - 37.103. Intro to Autoencoders + 37.101. Intro to Autoencoders
  • - 37.104. Base/Denoising Autoencoder & Dimension Reduction + 37.102. Base/Denoising Autoencoder & Dimension Reduction
  • - 37.105. Fun with Variational Autoencoders + 37.103. Fun with Variational Autoencoders
  • - 37.106. Time Series Forecasting Assignment + 37.104. Time Series Forecasting Assignment
  • - 37.108. Neural Networks for Classification with TensorFlow + 37.106. Neural Networks for Classification with TensorFlow
  • - 37.109. NN Classify 15 Fruits Assignment + 37.107. NN Classify 15 Fruits Assignment
  • - 37.114. DQN On Foreign Exchange Market + 37.112. DQN On Foreign Exchange Market
  • - 37.115. Art by gan + 37.113. Art by gan
  • - 37.117. Generative Adversarial Networks (GANs) + 37.115. Generative Adversarial Networks (GANs)
  • - 37.118. Basic classification: Classify images of clothing + 37.116. Basic classification: Classify images of clothing
  • @@ -1135,8 +1152,8 @@

    Ocademy Open Machine Learning Book

    38. Slides - -
    -

    37.92.27. Conclusion#

    +

    37.90.27. Conclusion#

    Training convolutional neural networks is a random process. This makes experiments difficult because each time you run the same experiment, you get different results. Therefore, you must run your experiments dozens of times and take an average. This kernel was run dozens of times and it seems that the best CNN architecture for classifying MNIST handwritten digits is 784 - [32C5-P2] - [64C5-P2] - 128 - 10 with 40% dropout. Afterward, more experiments show that replacing ‘32C5’ with ‘32C3-32C3’ improves accuracy. And replacing ‘P2’ with ‘32C5S2’ improves accuracy. And adding batch normalizaiton and data augmentation improve the CNN. The best CNN found from the experiments here becomes

    @@ -2680,13 +2697,13 @@

    37.93. Acknowledgments

    previous

    -

    37.91. Parameter play

    +

    37.89. Parameter play

    next

    -

    37.94. Sign Language Digits Classification with CNN

    +

    37.92. Sign Language Digits Classification with CNN

    diff --git a/assignments/deep-learning/cnn/object-recognition-in-images-using-cnn.html b/assignments/deep-learning/cnn/object-recognition-in-images-using-cnn.html index 9c14c1b60c..91fc07235f 100644 --- a/assignments/deep-learning/cnn/object-recognition-in-images-using-cnn.html +++ b/assignments/deep-learning/cnn/object-recognition-in-images-using-cnn.html @@ -6,7 +6,7 @@ - 37.96. Object Recognition in Images using CNN — Ocademy Open Machine Learning Book + 37.94. Object Recognition in Images using CNN — Ocademy Open Machine Learning Book @@ -98,8 +98,8 @@ - - + + @@ -236,10 +236,32 @@

    Ocademy Open Machine Learning Book

    5.3. NumPy -
  • +
  • 5.4. Pandas + + +
  • @@ -252,8 +274,8 @@

    Ocademy Open Machine Learning Book

    6. Data visualization - -
  • - - 37.45. ML linear regression - assignment 1 - -
  • -
  • - - 37.46. ML linear regression - assignment 2 + + 37.45. Linear regression - California Housing
  • - 37.47. Linear Regression Metrics + 37.46. Linear Regression Metrics
  • - 37.48. Loss Function + 37.47. Loss Function
  • - 37.49. Gradient descent + 37.48. Gradient descent + +
  • +
  • + + 37.49. Linear Regression Implementation from Scratch
  • - 37.51. ML logistic regression - assignment 1 + 37.50. ML logistic regression - assignment 1
  • - 37.52. ML logistic regression - assignment 2 + 37.51. ML logistic regression - assignment 2
  • - 37.53. ML neural network - Assignment 1 + 37.52. ML neural network - Assignment 1
  • - 37.54. Regression tools + 37.53. Regression tools
  • - 37.55. Managing data + 37.54. Managing data
  • - 37.56. Exploring visualizations + 37.55. Exploring visualizations
  • - 37.57. Try a different model + 37.56. Try a different model
  • - 37.58. Create a regression model + 37.57. Create a regression model
  • - 37.59. Linear and polynomial regression + 37.58. Linear and polynomial regression
  • - 37.60. Retrying some regression + 37.59. Retrying some regression
  • - 37.61. Pumpkin varieties and color + 37.60. Pumpkin varieties and color
  • - 37.62. Delicious asian and indian cuisines + 37.61. Delicious asian and indian cuisines
  • - 37.63. Explore classification methods - -
  • -
  • - - 37.64. Linear Regression Implementation from Scratch + 37.62. Explore classification methods
  • - 37.65. Kernel method assignment 1 + 37.63. Kernel method assignment 1
  • - 37.66. Support Vector Machines (SVM) - Intro and SVM for Regression + 37.64. Support Vector Machines (SVM) - Intro and SVM for Regression
  • - 37.67. Support Vector Machines (SVM) - Classification + 37.65. Support Vector Machines (SVM) - Classification
  • - 37.68. Decision Trees - Intro and Regression + 37.66. Decision Trees - Intro and Regression
  • - 37.69. Decision Trees - Classification + 37.67. Decision Trees - Classification
  • - 37.70. Model selection assignment 1 + 37.68. Model selection assignment 1
  • - 37.71. Learning Curve To Identify Overfit & Underfit + 37.69. Learning Curve To Identify Overfit & Underfit
  • - 37.72. Dropout and Batch Normalization + 37.70. Dropout and Batch Normalization
  • - 37.73. Lasso and Ridge Regression + 37.71. Lasso and Ridge Regression
  • - 37.74. Regularized Linear Models + 37.72. Regularized Linear Models
  • - 37.75. Random forests intro and regression + 37.73. Random forests intro and regression
  • - 37.76. Random forests for classification + 37.74. Random forests for classification
  • - 37.77. Beyond random forests: more ensemble models + 37.75. Beyond random forests: more ensemble models
  • - 37.78. Decision trees + 37.76. Decision trees
  • - 37.79. Hyperparameter tuning gradient boosting + 37.77. Hyperparameter tuning gradient boosting
  • - 37.80. Gradient boosting + 37.78. Gradient boosting
  • - 37.81. Boosting with tuning + 37.79. Boosting with tuning
  • - 37.82. Random Forest Classifier with Feature Importance + 37.80. Random Forest Classifier with Feature Importance
  • - 37.84. Data engineering + 37.82. Data engineering
  • - 37.85. Counterintuitive Challenges in ML Debugging + 37.83. Counterintuitive Challenges in ML Debugging
  • - 37.86. Case Study: Debugging in Classification + 37.84. Case Study: Debugging in Classification
  • - 37.87. Case Study: Debugging in Regression + 37.85. Case Study: Debugging in Regression
  • - 37.88. Study the solvers + 37.86. Study the solvers
  • - 37.89. Build classification models + 37.87. Build classification models
  • - 37.90. Build Classification Model + 37.88. Build Classification Model
  • - 37.91. Parameter play + 37.89. Parameter play
  • - 37.92. How to choose cnn architecture mnist + 37.90. How to choose cnn architecture mnist
  • - 37.94. Sign Language Digits Classification with CNN + 37.92. Sign Language Digits Classification with CNN
  • - 37.96. Object Recognition in Images using CNN + 37.94. Object Recognition in Images using CNN
  • - 37.97. Intro to TensorFlow for Deep Learning + 37.95. Intro to TensorFlow for Deep Learning
  • - 37.99. Bitcoin LSTM Model with Tweet Volume and Sentiment + 37.97. Bitcoin LSTM Model with Tweet Volume and Sentiment
  • - 37.101. Google Stock Price Prediction RNN + 37.99. Google Stock Price Prediction RNN
  • - 37.103. Intro to Autoencoders + 37.101. Intro to Autoencoders
  • - 37.104. Base/Denoising Autoencoder & Dimension Reduction + 37.102. Base/Denoising Autoencoder & Dimension Reduction
  • - 37.105. Fun with Variational Autoencoders + 37.103. Fun with Variational Autoencoders
  • - 37.106. Time Series Forecasting Assignment + 37.104. Time Series Forecasting Assignment
  • - 37.108. Neural Networks for Classification with TensorFlow + 37.106. Neural Networks for Classification with TensorFlow
  • - 37.109. NN Classify 15 Fruits Assignment + 37.107. NN Classify 15 Fruits Assignment
  • - 37.114. DQN On Foreign Exchange Market + 37.112. DQN On Foreign Exchange Market
  • - 37.115. Art by gan + 37.113. Art by gan
  • - 37.117. Generative Adversarial Networks (GANs) + 37.115. Generative Adversarial Networks (GANs)
  • - 37.118. Basic classification: Classify images of clothing + 37.116. Basic classification: Classify images of clothing
  • @@ -1135,8 +1152,8 @@

    Ocademy Open Machine Learning Book

    38. Slides - -
    -

    37.96. Object Recognition in Images using CNN#

    +

    37.94. Object Recognition in Images using CNN#

    -

    37.96.1. About Dataset#

    +

    37.94.1. About Dataset#

    CIFAR-10 is an established computer-vision dataset used for object recognition. It is a subset of the 80 million tiny images dataset and consists of 60,000 32x32 color images containing one of 10 object classes, with 6000 images per class. It was collected by Alex Krizhevsky, Vinod Nair, and Geoffrey Hinton.

    cifar10

    -

    37.96.2. Table of Contents#

    +

    37.94.2. Table of Contents#

    -

    37.96.2.1. Import Libaries#

    +

    37.94.2.1. Import Libaries#

    import os
    @@ -1693,7 +1710,7 @@ 

    37.96.2.1. Import Libaries -

    37.96.2.2. Exploring the Data#

    +

    37.94.2.2. Exploring the Data#

    Extract from tar archive file

    The dataset is extracted to the directory tmp/object-recognition-in-images-using-cnn/cifar10. It contains 2 folders train and test, containing the training set (50000 images) and test set (10000 images) respectively. Each of them contains 10 folders, one for each class of images. Let’s verify this using os.listdir.

    @@ -1864,7 +1881,7 @@

    37.96.2.2. Exploring the Data -

    37.96.3. Training and Validation Datasets#

    +

    37.94.3. Training and Validation Datasets#

    While building real world machine learning models, it is quite common to split the dataset into 3 parts:

    1. Training set - used to train the model i.e. compute the loss and adjust the weights of the model using gradient descent.

    2. @@ -1924,7 +1941,7 @@

      37.96.3. Training and Validation Dataset

    -

    37.96.3.1. training data single batch images#

    +

    37.94.3.1. training data single batch images#

    show_images_batch(train_dl)
    @@ -1942,9 +1959,9 @@ 

    37.96.3.1. training data single batch im

    -

    37.96.4. Convolutional Neural Network#

    +

    37.94.4. Convolutional Neural Network#

    -

    37.96.4.1. Defining the Model (Convolutional Neural Network)#

    +

    37.94.4.1. Defining the Model (Convolutional Neural Network)#

    The 2D convolution is a fairly simple operation at heart: you start with a kernel, which is simply a small matrix of weights. This kernel “slides” over the 2D input data, performing an elementwise multiplication with the part of the input it is currently on, and then summing up the results into a single output pixel.

    Let us implement a convolution operation on a 1 channel image with a 3x3 kernel.

    @@ -2153,7 +2170,7 @@

    37.96.4.1. Defining the Model (Convoluti

    -

    37.96.5. Training the Model#

    +

    37.94.5. Training the Model#

    In this mode, the result of every computation will have requires_grad=False, even when the inputs have requires_grad=True.

    @@ -2269,7 +2286,7 @@

    37.96.5. Training the Model -

    37.96.6. Testing with individual images#

    +

    37.94.6. Testing with individual images#

    test_dataset = ImageFolder(data_dir+'/test', transform=ToTensor())
    @@ -2374,7 +2391,7 @@ 

    37.96.6. Testing with individual images<

    -

    37.96.7. Acknowledgments#

    +

    37.94.7. Acknowledgments#

    Thanks to datajameson for creating the Kaggle notebook Cifar-10 Object Recognition(CNN) Explained. It inspires the majority of the content in this chapter.

    @@ -2416,13 +2433,13 @@

    37.96.7. Acknowledgments

    previous

    -

    37.94. Sign Language Digits Classification with CNN

    +

    37.92. Sign Language Digits Classification with CNN

    next

    -

    37.97. Intro to TensorFlow for Deep Learning

    +

    37.95. Intro to TensorFlow for Deep Learning

    diff --git a/assignments/deep-learning/cnn/sign-language-digits-classification-with-cnn.html b/assignments/deep-learning/cnn/sign-language-digits-classification-with-cnn.html index 2f73a5e11b..abca4d596f 100644 --- a/assignments/deep-learning/cnn/sign-language-digits-classification-with-cnn.html +++ b/assignments/deep-learning/cnn/sign-language-digits-classification-with-cnn.html @@ -6,7 +6,7 @@ - 37.94. Sign Language Digits Classification with CNN — Ocademy Open Machine Learning Book + 37.92. Sign Language Digits Classification with CNN — Ocademy Open Machine Learning Book @@ -98,8 +98,8 @@ - - + + @@ -236,10 +236,32 @@

    Ocademy Open Machine Learning Book

    5.3. NumPy -
  • +
  • 5.4. Pandas + + +
  • @@ -252,8 +274,8 @@

    Ocademy Open Machine Learning Book

    6. Data visualization - -
  • - - 37.45. ML linear regression - assignment 1 - -
  • -
  • - - 37.46. ML linear regression - assignment 2 + + 37.45. Linear regression - California Housing
  • - 37.47. Linear Regression Metrics + 37.46. Linear Regression Metrics
  • - 37.48. Loss Function + 37.47. Loss Function
  • - 37.49. Gradient descent + 37.48. Gradient descent + +
  • +
  • + + 37.49. Linear Regression Implementation from Scratch
  • - 37.51. ML logistic regression - assignment 1 + 37.50. ML logistic regression - assignment 1
  • - 37.52. ML logistic regression - assignment 2 + 37.51. ML logistic regression - assignment 2
  • - 37.53. ML neural network - Assignment 1 + 37.52. ML neural network - Assignment 1
  • - 37.54. Regression tools + 37.53. Regression tools
  • - 37.55. Managing data + 37.54. Managing data
  • - 37.56. Exploring visualizations + 37.55. Exploring visualizations
  • - 37.57. Try a different model + 37.56. Try a different model
  • - 37.58. Create a regression model + 37.57. Create a regression model
  • - 37.59. Linear and polynomial regression + 37.58. Linear and polynomial regression
  • - 37.60. Retrying some regression + 37.59. Retrying some regression
  • - 37.61. Pumpkin varieties and color + 37.60. Pumpkin varieties and color
  • - 37.62. Delicious asian and indian cuisines + 37.61. Delicious asian and indian cuisines
  • - 37.63. Explore classification methods - -
  • -
  • - - 37.64. Linear Regression Implementation from Scratch + 37.62. Explore classification methods
  • - 37.65. Kernel method assignment 1 + 37.63. Kernel method assignment 1
  • - 37.66. Support Vector Machines (SVM) - Intro and SVM for Regression + 37.64. Support Vector Machines (SVM) - Intro and SVM for Regression
  • - 37.67. Support Vector Machines (SVM) - Classification + 37.65. Support Vector Machines (SVM) - Classification
  • - 37.68. Decision Trees - Intro and Regression + 37.66. Decision Trees - Intro and Regression
  • - 37.69. Decision Trees - Classification + 37.67. Decision Trees - Classification
  • - 37.70. Model selection assignment 1 + 37.68. Model selection assignment 1
  • - 37.71. Learning Curve To Identify Overfit & Underfit + 37.69. Learning Curve To Identify Overfit & Underfit
  • - 37.72. Dropout and Batch Normalization + 37.70. Dropout and Batch Normalization
  • - 37.73. Lasso and Ridge Regression + 37.71. Lasso and Ridge Regression
  • - 37.74. Regularized Linear Models + 37.72. Regularized Linear Models
  • - 37.75. Random forests intro and regression + 37.73. Random forests intro and regression
  • - 37.76. Random forests for classification + 37.74. Random forests for classification
  • - 37.77. Beyond random forests: more ensemble models + 37.75. Beyond random forests: more ensemble models
  • - 37.78. Decision trees + 37.76. Decision trees
  • - 37.79. Hyperparameter tuning gradient boosting + 37.77. Hyperparameter tuning gradient boosting
  • - 37.80. Gradient boosting + 37.78. Gradient boosting
  • - 37.81. Boosting with tuning + 37.79. Boosting with tuning
  • - 37.82. Random Forest Classifier with Feature Importance + 37.80. Random Forest Classifier with Feature Importance
  • - 37.84. Data engineering + 37.82. Data engineering
  • - 37.85. Counterintuitive Challenges in ML Debugging + 37.83. Counterintuitive Challenges in ML Debugging
  • - 37.86. Case Study: Debugging in Classification + 37.84. Case Study: Debugging in Classification
  • - 37.87. Case Study: Debugging in Regression + 37.85. Case Study: Debugging in Regression
  • - 37.88. Study the solvers + 37.86. Study the solvers
  • - 37.89. Build classification models + 37.87. Build classification models
  • - 37.90. Build Classification Model + 37.88. Build Classification Model
  • - 37.91. Parameter play + 37.89. Parameter play
  • - 37.92. How to choose cnn architecture mnist + 37.90. How to choose cnn architecture mnist
  • - 37.94. Sign Language Digits Classification with CNN + 37.92. Sign Language Digits Classification with CNN
  • - 37.96. Object Recognition in Images using CNN + 37.94. Object Recognition in Images using CNN
  • - 37.97. Intro to TensorFlow for Deep Learning + 37.95. Intro to TensorFlow for Deep Learning
  • - 37.99. Bitcoin LSTM Model with Tweet Volume and Sentiment + 37.97. Bitcoin LSTM Model with Tweet Volume and Sentiment
  • - 37.101. Google Stock Price Prediction RNN + 37.99. Google Stock Price Prediction RNN
  • - 37.103. Intro to Autoencoders + 37.101. Intro to Autoencoders
  • - 37.104. Base/Denoising Autoencoder & Dimension Reduction + 37.102. Base/Denoising Autoencoder & Dimension Reduction
  • - 37.105. Fun with Variational Autoencoders + 37.103. Fun with Variational Autoencoders
  • - 37.106. Time Series Forecasting Assignment + 37.104. Time Series Forecasting Assignment
  • - 37.108. Neural Networks for Classification with TensorFlow + 37.106. Neural Networks for Classification with TensorFlow
  • - 37.109. NN Classify 15 Fruits Assignment + 37.107. NN Classify 15 Fruits Assignment
  • - 37.114. DQN On Foreign Exchange Market + 37.112. DQN On Foreign Exchange Market
  • - 37.115. Art by gan + 37.113. Art by gan
  • - 37.117. Generative Adversarial Networks (GANs) + 37.115. Generative Adversarial Networks (GANs)
  • - 37.118. Basic classification: Classify images of clothing + 37.116. Basic classification: Classify images of clothing
  • @@ -1135,8 +1152,8 @@

    Ocademy Open Machine Learning Book

    38. Slides - -
    -

    37.94.7. Changin zoom level#

    +

    37.92.7. Changin zoom level#

    datagen = ImageDataGenerator(zoom_range=0.5)
    @@ -1882,7 +1899,7 @@ 

    37.94.7. Changin zoom level -

    37.94.8. Changing rotaion#

    +

    37.92.8. Changing rotaion#

    datagen = ImageDataGenerator(rotation_range=45)
    @@ -1894,7 +1911,7 @@ 

    37.94.8. Changing rotaion -

    37.94.9. Changing rotaion, zoom#

    +

    37.92.9. Changing rotaion, zoom#

    datagen = ImageDataGenerator(zoom_range=0.5, rotation_range=45)
    @@ -1906,7 +1923,7 @@ 

    37.94.9. Changing rotaion, zoom

    -

    37.94.10. Model Implementation#

    +

    37.92.10. Model Implementation#

    model = Sequential()
    @@ -1956,7 +1973,7 @@ 

    37.94.10. Model Implementation -

    37.94.11. Conclusion#

    +

    37.92.11. Conclusion#

    plt.figure(figsize=(10, 5))
    @@ -1989,7 +2006,7 @@ 

    37.94.11. Conclusion -

    37.95. Acknowledgments#

    +

    37.93. Acknowledgments#

    Thanks to Görkem Günay for creating sign-language-digits-classification-with-cnn. It inspires the majority of the content in this chapter.

    @@ -2030,13 +2047,13 @@

    37.95. Acknowledgments

    previous

    -

    37.92. How to choose cnn architecture mnist

    +

    37.90. How to choose cnn architecture mnist

    next

    -

    37.96. Object Recognition in Images using CNN

    +

    37.94. Object Recognition in Images using CNN

    diff --git a/assignments/deep-learning/dqn/dqn-on-foreign-exchange-market.html b/assignments/deep-learning/dqn/dqn-on-foreign-exchange-market.html index 751fedcac8..5b5939024d 100644 --- a/assignments/deep-learning/dqn/dqn-on-foreign-exchange-market.html +++ b/assignments/deep-learning/dqn/dqn-on-foreign-exchange-market.html @@ -6,7 +6,7 @@ - 37.114. DQN On Foreign Exchange Market — Ocademy Open Machine Learning Book + 37.112. DQN On Foreign Exchange Market — Ocademy Open Machine Learning Book @@ -98,8 +98,8 @@ - - + + @@ -236,10 +236,32 @@

    Ocademy Open Machine Learning Book

    5.3. NumPy -
  • +
  • 5.4. Pandas + + +
  • @@ -252,8 +274,8 @@

    Ocademy Open Machine Learning Book

    6. Data visualization - -
  • - - 37.45. ML linear regression - assignment 1 - -
  • -
  • - - 37.46. ML linear regression - assignment 2 + + 37.45. Linear regression - California Housing
  • - 37.47. Linear Regression Metrics + 37.46. Linear Regression Metrics
  • - 37.48. Loss Function + 37.47. Loss Function
  • - 37.49. Gradient descent + 37.48. Gradient descent + +
  • +
  • + + 37.49. Linear Regression Implementation from Scratch
  • - 37.51. ML logistic regression - assignment 1 + 37.50. ML logistic regression - assignment 1
  • - 37.52. ML logistic regression - assignment 2 + 37.51. ML logistic regression - assignment 2
  • - 37.53. ML neural network - Assignment 1 + 37.52. ML neural network - Assignment 1
  • - 37.54. Regression tools + 37.53. Regression tools
  • - 37.55. Managing data + 37.54. Managing data
  • - 37.56. Exploring visualizations + 37.55. Exploring visualizations
  • - 37.57. Try a different model + 37.56. Try a different model
  • - 37.58. Create a regression model + 37.57. Create a regression model
  • - 37.59. Linear and polynomial regression + 37.58. Linear and polynomial regression
  • - 37.60. Retrying some regression + 37.59. Retrying some regression
  • - 37.61. Pumpkin varieties and color + 37.60. Pumpkin varieties and color
  • - 37.62. Delicious asian and indian cuisines + 37.61. Delicious asian and indian cuisines
  • - 37.63. Explore classification methods - -
  • -
  • - - 37.64. Linear Regression Implementation from Scratch + 37.62. Explore classification methods
  • - 37.65. Kernel method assignment 1 + 37.63. Kernel method assignment 1
  • - 37.66. Support Vector Machines (SVM) - Intro and SVM for Regression + 37.64. Support Vector Machines (SVM) - Intro and SVM for Regression
  • - 37.67. Support Vector Machines (SVM) - Classification + 37.65. Support Vector Machines (SVM) - Classification
  • - 37.68. Decision Trees - Intro and Regression + 37.66. Decision Trees - Intro and Regression
  • - 37.69. Decision Trees - Classification + 37.67. Decision Trees - Classification
  • - 37.70. Model selection assignment 1 + 37.68. Model selection assignment 1
  • - 37.71. Learning Curve To Identify Overfit & Underfit + 37.69. Learning Curve To Identify Overfit & Underfit
  • - 37.72. Dropout and Batch Normalization + 37.70. Dropout and Batch Normalization
  • - 37.73. Lasso and Ridge Regression + 37.71. Lasso and Ridge Regression
  • - 37.74. Regularized Linear Models + 37.72. Regularized Linear Models
  • - 37.75. Random forests intro and regression + 37.73. Random forests intro and regression
  • - 37.76. Random forests for classification + 37.74. Random forests for classification
  • - 37.77. Beyond random forests: more ensemble models + 37.75. Beyond random forests: more ensemble models
  • - 37.78. Decision trees + 37.76. Decision trees
  • - 37.79. Hyperparameter tuning gradient boosting + 37.77. Hyperparameter tuning gradient boosting
  • - 37.80. Gradient boosting + 37.78. Gradient boosting
  • - 37.81. Boosting with tuning + 37.79. Boosting with tuning
  • - 37.82. Random Forest Classifier with Feature Importance + 37.80. Random Forest Classifier with Feature Importance
  • - 37.84. Data engineering + 37.82. Data engineering
  • - 37.85. Counterintuitive Challenges in ML Debugging + 37.83. Counterintuitive Challenges in ML Debugging
  • - 37.86. Case Study: Debugging in Classification + 37.84. Case Study: Debugging in Classification
  • - 37.87. Case Study: Debugging in Regression + 37.85. Case Study: Debugging in Regression
  • - 37.88. Study the solvers + 37.86. Study the solvers
  • - 37.89. Build classification models + 37.87. Build classification models
  • - 37.90. Build Classification Model + 37.88. Build Classification Model
  • - 37.91. Parameter play + 37.89. Parameter play
  • - 37.92. How to choose cnn architecture mnist + 37.90. How to choose cnn architecture mnist
  • - 37.94. Sign Language Digits Classification with CNN + 37.92. Sign Language Digits Classification with CNN
  • - 37.96. Object Recognition in Images using CNN + 37.94. Object Recognition in Images using CNN
  • - 37.97. Intro to TensorFlow for Deep Learning + 37.95. Intro to TensorFlow for Deep Learning
  • - 37.99. Bitcoin LSTM Model with Tweet Volume and Sentiment + 37.97. Bitcoin LSTM Model with Tweet Volume and Sentiment
  • - 37.101. Google Stock Price Prediction RNN + 37.99. Google Stock Price Prediction RNN
  • - 37.103. Intro to Autoencoders + 37.101. Intro to Autoencoders
  • - 37.104. Base/Denoising Autoencoder & Dimension Reduction + 37.102. Base/Denoising Autoencoder & Dimension Reduction
  • - 37.105. Fun with Variational Autoencoders + 37.103. Fun with Variational Autoencoders
  • - 37.106. Time Series Forecasting Assignment + 37.104. Time Series Forecasting Assignment
  • - 37.108. Neural Networks for Classification with TensorFlow + 37.106. Neural Networks for Classification with TensorFlow
  • - 37.109. NN Classify 15 Fruits Assignment + 37.107. NN Classify 15 Fruits Assignment
  • - 37.114. DQN On Foreign Exchange Market + 37.112. DQN On Foreign Exchange Market
  • - 37.115. Art by gan + 37.113. Art by gan
  • - 37.117. Generative Adversarial Networks (GANs) + 37.115. Generative Adversarial Networks (GANs)
  • - 37.118. Basic classification: Classify images of clothing + 37.116. Basic classification: Classify images of clothing
  • @@ -1135,8 +1152,8 @@

    Ocademy Open Machine Learning Book

    38. Slides - -
    -

    37.114. DQN On Foreign Exchange Market#

    +

    37.112. DQN On Foreign Exchange Market#

    -

    37.114.1. Load dataset#

    +

    37.112.1. Load dataset#

    # This Python 3 environment comes with many helpful analytics libraries installed
    @@ -1825,7 +1842,7 @@ 

    37.114.1. Load dataset -

    37.114.2. Define envireonment#

    +

    37.112.2. Define envireonment#

    class Environment:
    @@ -1918,7 +1935,7 @@ 

    37.114.2. Define envireonment -

    37.114.3. Agent class#

    +

    37.112.3. Agent class#

    # Deep Q-learning Agent
    @@ -1982,7 +1999,7 @@ 

    37.114.3. Agent class -

    37.114.4. Train the DQN#

    +

    37.112.4. Train the DQN#

    if __name__ == "__main__":
    @@ -2435,7 +2452,7 @@ 

    37.114.4. Train the DQN -

    37.114.5. Acknowledgement#

    +

    37.112.5. Acknowledgement#

    Thanks to emrebulbul23 for creating DQN on foreign exchange market. It inspired the majority of the content in this article.

    @@ -2477,13 +2494,13 @@

    37.114.5. Acknowledgement

    previous

    -

    37.109. NN Classify 15 Fruits Assignment

    +

    37.107. NN Classify 15 Fruits Assignment

    next

    -

    37.115. Art by gan

    +

    37.113. Art by gan

    diff --git a/assignments/deep-learning/gan/art-by-gan.html b/assignments/deep-learning/gan/art-by-gan.html index 4d97ee9ffc..bbd3b13d85 100644 --- a/assignments/deep-learning/gan/art-by-gan.html +++ b/assignments/deep-learning/gan/art-by-gan.html @@ -6,7 +6,7 @@ - 37.115. Art by gan — Ocademy Open Machine Learning Book + 37.113. Art by gan — Ocademy Open Machine Learning Book @@ -98,8 +98,8 @@ - - + + @@ -236,10 +236,32 @@

    Ocademy Open Machine Learning Book

    5.3. NumPy -
  • +
  • 5.4. Pandas + + +
  • @@ -252,8 +274,8 @@

    Ocademy Open Machine Learning Book

    6. Data visualization - -
  • - - 37.45. ML linear regression - assignment 1 - -
  • -
  • - - 37.46. ML linear regression - assignment 2 + + 37.45. Linear regression - California Housing
  • - 37.47. Linear Regression Metrics + 37.46. Linear Regression Metrics
  • - 37.48. Loss Function + 37.47. Loss Function
  • - 37.49. Gradient descent + 37.48. Gradient descent + +
  • +
  • + + 37.49. Linear Regression Implementation from Scratch
  • - 37.51. ML logistic regression - assignment 1 + 37.50. ML logistic regression - assignment 1
  • - 37.52. ML logistic regression - assignment 2 + 37.51. ML logistic regression - assignment 2
  • - 37.53. ML neural network - Assignment 1 + 37.52. ML neural network - Assignment 1
  • - 37.54. Regression tools + 37.53. Regression tools
  • - 37.55. Managing data + 37.54. Managing data
  • - 37.56. Exploring visualizations + 37.55. Exploring visualizations
  • - 37.57. Try a different model + 37.56. Try a different model
  • - 37.58. Create a regression model + 37.57. Create a regression model
  • - 37.59. Linear and polynomial regression + 37.58. Linear and polynomial regression
  • - 37.60. Retrying some regression + 37.59. Retrying some regression
  • - 37.61. Pumpkin varieties and color + 37.60. Pumpkin varieties and color
  • - 37.62. Delicious asian and indian cuisines + 37.61. Delicious asian and indian cuisines
  • - 37.63. Explore classification methods - -
  • -
  • - - 37.64. Linear Regression Implementation from Scratch + 37.62. Explore classification methods
  • - 37.65. Kernel method assignment 1 + 37.63. Kernel method assignment 1
  • - 37.66. Support Vector Machines (SVM) - Intro and SVM for Regression + 37.64. Support Vector Machines (SVM) - Intro and SVM for Regression
  • - 37.67. Support Vector Machines (SVM) - Classification + 37.65. Support Vector Machines (SVM) - Classification
  • - 37.68. Decision Trees - Intro and Regression + 37.66. Decision Trees - Intro and Regression
  • - 37.69. Decision Trees - Classification + 37.67. Decision Trees - Classification
  • - 37.70. Model selection assignment 1 + 37.68. Model selection assignment 1
  • - 37.71. Learning Curve To Identify Overfit & Underfit + 37.69. Learning Curve To Identify Overfit & Underfit
  • - 37.72. Dropout and Batch Normalization + 37.70. Dropout and Batch Normalization
  • - 37.73. Lasso and Ridge Regression + 37.71. Lasso and Ridge Regression
  • - 37.74. Regularized Linear Models + 37.72. Regularized Linear Models
  • - 37.75. Random forests intro and regression + 37.73. Random forests intro and regression
  • - 37.76. Random forests for classification + 37.74. Random forests for classification
  • - 37.77. Beyond random forests: more ensemble models + 37.75. Beyond random forests: more ensemble models
  • - 37.78. Decision trees + 37.76. Decision trees
  • - 37.79. Hyperparameter tuning gradient boosting + 37.77. Hyperparameter tuning gradient boosting
  • - 37.80. Gradient boosting + 37.78. Gradient boosting
  • - 37.81. Boosting with tuning + 37.79. Boosting with tuning
  • - 37.82. Random Forest Classifier with Feature Importance + 37.80. Random Forest Classifier with Feature Importance
  • - 37.84. Data engineering + 37.82. Data engineering
  • - 37.85. Counterintuitive Challenges in ML Debugging + 37.83. Counterintuitive Challenges in ML Debugging
  • - 37.86. Case Study: Debugging in Classification + 37.84. Case Study: Debugging in Classification
  • - 37.87. Case Study: Debugging in Regression + 37.85. Case Study: Debugging in Regression
  • - 37.88. Study the solvers + 37.86. Study the solvers
  • - 37.89. Build classification models + 37.87. Build classification models
  • - 37.90. Build Classification Model + 37.88. Build Classification Model
  • - 37.91. Parameter play + 37.89. Parameter play
  • - 37.92. How to choose cnn architecture mnist + 37.90. How to choose cnn architecture mnist
  • - 37.94. Sign Language Digits Classification with CNN + 37.92. Sign Language Digits Classification with CNN
  • - 37.96. Object Recognition in Images using CNN + 37.94. Object Recognition in Images using CNN
  • - 37.97. Intro to TensorFlow for Deep Learning + 37.95. Intro to TensorFlow for Deep Learning
  • - 37.99. Bitcoin LSTM Model with Tweet Volume and Sentiment + 37.97. Bitcoin LSTM Model with Tweet Volume and Sentiment
  • - 37.101. Google Stock Price Prediction RNN + 37.99. Google Stock Price Prediction RNN
  • - 37.103. Intro to Autoencoders + 37.101. Intro to Autoencoders
  • - 37.104. Base/Denoising Autoencoder & Dimension Reduction + 37.102. Base/Denoising Autoencoder & Dimension Reduction
  • - 37.105. Fun with Variational Autoencoders + 37.103. Fun with Variational Autoencoders
  • - 37.106. Time Series Forecasting Assignment + 37.104. Time Series Forecasting Assignment
  • - 37.108. Neural Networks for Classification with TensorFlow + 37.106. Neural Networks for Classification with TensorFlow
  • - 37.109. NN Classify 15 Fruits Assignment + 37.107. NN Classify 15 Fruits Assignment
  • - 37.114. DQN On Foreign Exchange Market + 37.112. DQN On Foreign Exchange Market
  • - 37.115. Art by gan + 37.113. Art by gan
  • - 37.117. Generative Adversarial Networks (GANs) + 37.115. Generative Adversarial Networks (GANs)
  • - 37.118. Basic classification: Classify images of clothing + 37.116. Basic classification: Classify images of clothing
  • @@ -1135,8 +1152,8 @@

    Ocademy Open Machine Learning Book

    38. Slides - -
    -

    37.115. Art by gan#

    +

    37.113. Art by gan#

    In this Notebook, we will build a Generative Adversarial Network (GAN) to illustrate the workings of a Generative Adversarial Network and to generate images. Generative modelling is an unsupervised learning task in machine learning that involves automatically discovering and learning the regularities or patterns in input data. As GANs work by identifying the patterns in the data, we will be using oil painted portraits. However, glancing over the dataset gives me an idea that it is going to be a long shot. The orientation and poses in the dataset vary vastly. Keeping that in mind we are still willing to give it a try. Only because portraits are our jam. We basically love oil painted portraits.

    @@ -1733,11 +1750,11 @@

    37.115. Art by gan

    -

    37.115.1. Data loading & Prepreprocessing#

    +

    37.113.1. Data loading & Prepreprocessing#

    For this project, We are using .jpg files of images of portraits. The dataset includes various artists. We are loading data as TensorFlow.Dataset, with a batch size of 64. We have reduced the image size to (64,64), presuming, it will be computationally less taxing on the GPU.

    -

    37.115.2. Loading the data#

    +

    37.113.2. Loading the data#

    import os
    @@ -1794,7 +1811,7 @@ 

    37.115.2. Loading the data -

    37.115.3. Preprocessing the data#

    +

    37.113.3. Preprocessing the data#

    Normalization: For the data normalization, we will convert the data in the range between 0 to 1. This helps in fast convergence and makes it easy for the computer to do calculations faster. Each of the three RGB channels in the image can take pixel values ranging from 0 to 256. Dividing it by 255 converts it to a range between 0 to 1.

    -

    37.115.4. Building GAN#

    +

    37.113.4. Building GAN#

    GANs employs deep learning methods. It is a dexterous way of posing the problem as a supervised learning problem. It is composed of two models namely Generator and a Discriminator.

    Two models are trained simultaneously by an adversarial process. A generator (“the artist”) learns to create images that look like the dataset while a discriminator (“the art critic”) learns to tell real images apart from fakes.

    During training, the generator progressively becomes better at creating images that look real, while the discriminator becomes better at telling them apart. The process reaches equilibrium when the discriminator can no longer distinguish real images from fakes.

    @@ -1820,7 +1837,7 @@

    37.115.4. Building GAN -

    37.115.5. The generator#

    +

    37.113.5. The generator#

    The Generator is a neural network that generates the images. It takes in a random noise as seed and outputs sample data. As the GAN’s training progresses the Generator output becomes more and more like the training set, as the Generator tries to improve the output so that the discrimination passes the output as a real image.

    Following steps are involved in the models building

      @@ -1829,7 +1846,7 @@

      37.115.5. The generator -

      37.115.6. Building a generator#

      +

      37.113.6. Building a generator#

      latent_dim = 100
      @@ -1879,12 +1896,12 @@ 

      37.115.6. Building a generator -

      37.115.7. The discriminator#

      +

      37.113.7. The discriminator#

      In GANs the Generator works along with the Discriminator.

      The Discriminator network decided whether the data is fake aka created by the Generator or real i.e. from the original input data. To do so it applies a binary classification method using a sigmoid function to get an output in the range of 0 to 1.

    -

    37.115.8. Building a discriminator#

    +

    37.113.8. Building a discriminator#

    discriminator = Sequential()
    @@ -1933,7 +1950,7 @@ 

    37.115.8. Building a discriminatorLet us proceed and build the GAN architecture to train.

    -

    37.115.9. GAN compilation#

    +

    37.113.9. GAN compilation#

    GAN training has two sections:

    Section 1: The Discriminator is trained while the Generator is idle. The discriminator is trained real images and random noise (from an untrained generator). This trains it to tell between fake and real. This accommodates the discriminator to predict as fakes.

    @@ -2010,7 +2027,7 @@

    37.115.9. GAN compilation -

    37.115.10. Training the model#

    +

    37.113.10. Training the model#

    Calling the above created GAN function trains the generator and discriminator simultaneously. To implement the GAN we must define:

      @@ -2043,7 +2060,7 @@

      37.115.10. Training the model -

      37.115.11. Ploting the Learning Curves#

      +

      37.113.11. Ploting the Learning Curves#

      import pandas as pd
      @@ -2060,7 +2077,7 @@ 

      37.115.11. Ploting the Learning Curves

    -

    37.115.12. AI makes artwork#

    +

    37.113.12. AI makes artwork#

    # Number of images to be generate
    @@ -2100,12 +2117,12 @@ 

    37.115.12. AI makes artwork -

    37.115.13. Conculsion#

    +

    37.113.13. Conculsion#

    In the evaluation of the model: We can see that the GAN picked up the patterns in the portraits. It worked quite well. For further improvement, as GANs are notorious for being data-hungry, I would consider increasing the dataset. There are many inconsistencies in the data which is rather complicated for the GAN to learn. Cleaning the data with some consistencies in the portrait styles would certainly help. Training it longer i.e. for more epochs would also help. Lastly, one can always strive to make a more robust architecture for the Neural Networks.

    -

    37.116. Acknowledgments#

    +

    37.114. Acknowledgments#

    Thanks to Karnika Kapoor for creating art-by-gan. It inspires the majority of the content in this chapter.

    @@ -2146,13 +2163,13 @@

    37.116. Acknowledgments

    previous

    -

    37.114. DQN On Foreign Exchange Market

    +

    37.112. DQN On Foreign Exchange Market

    next

    -

    37.117. Generative Adversarial Networks (GANs)

    +

    37.115. Generative Adversarial Networks (GANs)

    diff --git a/assignments/deep-learning/gan/gan-introduction.html b/assignments/deep-learning/gan/gan-introduction.html index bb5975232b..99ba4bd0cd 100644 --- a/assignments/deep-learning/gan/gan-introduction.html +++ b/assignments/deep-learning/gan/gan-introduction.html @@ -6,7 +6,7 @@ - 37.117. Generative Adversarial Networks (GANs) — Ocademy Open Machine Learning Book + 37.115. Generative Adversarial Networks (GANs) — Ocademy Open Machine Learning Book @@ -98,8 +98,8 @@ - - + + @@ -236,10 +236,32 @@

    Ocademy Open Machine Learning Book

    5.3. NumPy -
  • +
  • 5.4. Pandas + + +
  • @@ -252,8 +274,8 @@

    Ocademy Open Machine Learning Book

    6. Data visualization - -
  • - - 37.45. ML linear regression - assignment 1 - -
  • -
  • - - 37.46. ML linear regression - assignment 2 + + 37.45. Linear regression - California Housing
  • - 37.47. Linear Regression Metrics + 37.46. Linear Regression Metrics
  • - 37.48. Loss Function + 37.47. Loss Function
  • - 37.49. Gradient descent + 37.48. Gradient descent + +
  • +
  • + + 37.49. Linear Regression Implementation from Scratch
  • - 37.51. ML logistic regression - assignment 1 + 37.50. ML logistic regression - assignment 1
  • - 37.52. ML logistic regression - assignment 2 + 37.51. ML logistic regression - assignment 2
  • - 37.53. ML neural network - Assignment 1 + 37.52. ML neural network - Assignment 1
  • - 37.54. Regression tools + 37.53. Regression tools
  • - 37.55. Managing data + 37.54. Managing data
  • - 37.56. Exploring visualizations + 37.55. Exploring visualizations
  • - 37.57. Try a different model + 37.56. Try a different model
  • - 37.58. Create a regression model + 37.57. Create a regression model
  • - 37.59. Linear and polynomial regression + 37.58. Linear and polynomial regression
  • - 37.60. Retrying some regression + 37.59. Retrying some regression
  • - 37.61. Pumpkin varieties and color + 37.60. Pumpkin varieties and color
  • - 37.62. Delicious asian and indian cuisines + 37.61. Delicious asian and indian cuisines
  • - 37.63. Explore classification methods - -
  • -
  • - - 37.64. Linear Regression Implementation from Scratch + 37.62. Explore classification methods
  • - 37.65. Kernel method assignment 1 + 37.63. Kernel method assignment 1
  • - 37.66. Support Vector Machines (SVM) - Intro and SVM for Regression + 37.64. Support Vector Machines (SVM) - Intro and SVM for Regression
  • - 37.67. Support Vector Machines (SVM) - Classification + 37.65. Support Vector Machines (SVM) - Classification
  • - 37.68. Decision Trees - Intro and Regression + 37.66. Decision Trees - Intro and Regression
  • - 37.69. Decision Trees - Classification + 37.67. Decision Trees - Classification
  • - 37.70. Model selection assignment 1 + 37.68. Model selection assignment 1
  • - 37.71. Learning Curve To Identify Overfit & Underfit + 37.69. Learning Curve To Identify Overfit & Underfit
  • - 37.72. Dropout and Batch Normalization + 37.70. Dropout and Batch Normalization
  • - 37.73. Lasso and Ridge Regression + 37.71. Lasso and Ridge Regression
  • - 37.74. Regularized Linear Models + 37.72. Regularized Linear Models
  • - 37.75. Random forests intro and regression + 37.73. Random forests intro and regression
  • - 37.76. Random forests for classification + 37.74. Random forests for classification
  • - 37.77. Beyond random forests: more ensemble models + 37.75. Beyond random forests: more ensemble models
  • - 37.78. Decision trees + 37.76. Decision trees
  • - 37.79. Hyperparameter tuning gradient boosting + 37.77. Hyperparameter tuning gradient boosting
  • - 37.80. Gradient boosting + 37.78. Gradient boosting
  • - 37.81. Boosting with tuning + 37.79. Boosting with tuning
  • - 37.82. Random Forest Classifier with Feature Importance + 37.80. Random Forest Classifier with Feature Importance
  • - 37.84. Data engineering + 37.82. Data engineering
  • - 37.85. Counterintuitive Challenges in ML Debugging + 37.83. Counterintuitive Challenges in ML Debugging
  • - 37.86. Case Study: Debugging in Classification + 37.84. Case Study: Debugging in Classification
  • - 37.87. Case Study: Debugging in Regression + 37.85. Case Study: Debugging in Regression
  • - 37.88. Study the solvers + 37.86. Study the solvers
  • - 37.89. Build classification models + 37.87. Build classification models
  • - 37.90. Build Classification Model + 37.88. Build Classification Model
  • - 37.91. Parameter play + 37.89. Parameter play
  • - 37.92. How to choose cnn architecture mnist + 37.90. How to choose cnn architecture mnist
  • - 37.94. Sign Language Digits Classification with CNN + 37.92. Sign Language Digits Classification with CNN
  • - 37.96. Object Recognition in Images using CNN + 37.94. Object Recognition in Images using CNN
  • - 37.97. Intro to TensorFlow for Deep Learning + 37.95. Intro to TensorFlow for Deep Learning
  • - 37.99. Bitcoin LSTM Model with Tweet Volume and Sentiment + 37.97. Bitcoin LSTM Model with Tweet Volume and Sentiment
  • - 37.101. Google Stock Price Prediction RNN + 37.99. Google Stock Price Prediction RNN
  • - 37.103. Intro to Autoencoders + 37.101. Intro to Autoencoders
  • - 37.104. Base/Denoising Autoencoder & Dimension Reduction + 37.102. Base/Denoising Autoencoder & Dimension Reduction
  • - 37.105. Fun with Variational Autoencoders + 37.103. Fun with Variational Autoencoders
  • - 37.106. Time Series Forecasting Assignment + 37.104. Time Series Forecasting Assignment
  • - 37.108. Neural Networks for Classification with TensorFlow + 37.106. Neural Networks for Classification with TensorFlow
  • - 37.109. NN Classify 15 Fruits Assignment + 37.107. NN Classify 15 Fruits Assignment
  • - 37.114. DQN On Foreign Exchange Market + 37.112. DQN On Foreign Exchange Market
  • - 37.115. Art by gan + 37.113. Art by gan
  • - 37.117. Generative Adversarial Networks (GANs) + 37.115. Generative Adversarial Networks (GANs)
  • - 37.118. Basic classification: Classify images of clothing + 37.116. Basic classification: Classify images of clothing
  • @@ -1135,8 +1152,8 @@

    Ocademy Open Machine Learning Book

    38. Slides - -
    -

    37.117. Generative Adversarial Networks (GANs)#

    +

    37.115. Generative Adversarial Networks (GANs)#

    -

    37.117.1. Loading data#

    +

    37.115.1. Loading data#

    import os
    @@ -1752,7 +1769,7 @@ 

    37.117.1. Loading data -

    37.117.2. Importing the libraries#

    +

    37.115.2. Importing the libraries#

    from __future__ import print_function
    @@ -1781,7 +1798,7 @@ 

    37.117.2. Importing the libraries

    -

    37.117.3. Some dogs#

    +

    37.115.3. Some dogs#

    The Stanford Dogs dataset contains images of 120 breeds of dogs from around the world.

    @@ -1804,7 +1821,7 @@

    37.117.3. Some dogs

    -

    37.117.4. Image Preprocessing#

    +

    37.115.4. Image Preprocessing#

    batch_size = 32
    @@ -1839,7 +1856,7 @@ 

    37.117.4. Image Preprocessing -

    37.117.5. Weights#

    +

    37.115.5. Weights#

    def weights_init(m):
    @@ -1855,7 +1872,7 @@ 

    37.117.5. Weights

    -

    37.117.6. Generator#

    +

    37.115.6. Generator#

    class G(nn.Module):
    @@ -1893,7 +1910,7 @@ 

    37.117.6. Generator

    -

    37.117.7. Discriminator#

    +

    37.115.7. Discriminator#

    class D(nn.Module):
    @@ -1926,7 +1943,7 @@ 

    37.117.7. Discriminator -

    37.117.8. Another setup#

    +

    37.115.8. Another setup#

    class Generator(nn.Module):
    @@ -1992,7 +2009,7 @@ 

    37.117.8. Another setup -

    37.117.9. Training#

    +

    37.115.9. Training#

    EPOCH = 0
    @@ -2050,9 +2067,9 @@ 

    37.117.9. Training

    -

    37.117.10. Best public training#

    +

    37.115.10. Best public training#

    -

    37.117.10.1. Parameters#

    +

    37.115.10.1. Parameters#

    batch_size = 32
    @@ -2073,7 +2090,7 @@ 

    37.117.10.1. Parameters -

    37.117.10.2. Initialize models and optimizers#

    +

    37.115.10.2. Initialize models and optimizers#

    netG = Generator(nz).to(device)
    @@ -2111,7 +2128,7 @@ 

    37.117.10.2. Initialize models and optim

    -

    37.117.11. Show generated images#

    +

    37.115.11. Show generated images#

    def show_generated_img(n_images=5):
    @@ -2136,7 +2153,7 @@ 

    37.117.11. Show generated images

    -

    37.117.12. Training Loop#

    +

    37.115.12. Training Loop#

    for epoch in range(epochs):
    @@ -2208,7 +2225,7 @@ 

    37.117.12. Training Loop -

    37.117.13. Generation example#

    +

    37.115.13. Generation example#

    show_generated_img(7)
    @@ -2247,7 +2264,7 @@ 

    37.117.13. Generation example -

    37.117.13.1. Save models#

    +

    37.115.13.1. Save models#

    torch.save(netG.state_dict(), 'generator.pth')
    @@ -2259,7 +2276,7 @@ 

    37.117.13.1. Save models -

    37.117.14. Acknowledgement#

    +

    37.115.14. Acknowledgement#

    Thanks to jesucristo for creating GAN Introduction. It inspired the majority of the content in this article.

    @@ -2301,13 +2318,13 @@

    37.117.14. Acknowledgement

    previous

    -

    37.115. Art by gan

    +

    37.113. Art by gan

    next

    -

    37.118. Basic classification: Classify images of clothing

    +

    37.116. Basic classification: Classify images of clothing

    diff --git a/assignments/deep-learning/lstm/bitcoin-lstm-model-with-tweet-volume-and-sentiment.html b/assignments/deep-learning/lstm/bitcoin-lstm-model-with-tweet-volume-and-sentiment.html index bba565a4d9..ef576a58bc 100644 --- a/assignments/deep-learning/lstm/bitcoin-lstm-model-with-tweet-volume-and-sentiment.html +++ b/assignments/deep-learning/lstm/bitcoin-lstm-model-with-tweet-volume-and-sentiment.html @@ -6,7 +6,7 @@ - 37.99. Bitcoin LSTM Model with Tweet Volume and Sentiment — Ocademy Open Machine Learning Book + 37.97. Bitcoin LSTM Model with Tweet Volume and Sentiment — Ocademy Open Machine Learning Book @@ -98,8 +98,8 @@ - - + + @@ -236,10 +236,32 @@

    Ocademy Open Machine Learning Book

    5.3. NumPy -
  • +
  • 5.4. Pandas + + +
  • @@ -252,8 +274,8 @@

    Ocademy Open Machine Learning Book

    6. Data visualization - -
  • - - 37.45. ML linear regression - assignment 1 - -
  • -
  • - - 37.46. ML linear regression - assignment 2 + + 37.45. Linear regression - California Housing
  • - 37.47. Linear Regression Metrics + 37.46. Linear Regression Metrics
  • - 37.48. Loss Function + 37.47. Loss Function
  • - 37.49. Gradient descent + 37.48. Gradient descent + +
  • +
  • + + 37.49. Linear Regression Implementation from Scratch
  • - 37.51. ML logistic regression - assignment 1 + 37.50. ML logistic regression - assignment 1
  • - 37.52. ML logistic regression - assignment 2 + 37.51. ML logistic regression - assignment 2
  • - 37.53. ML neural network - Assignment 1 + 37.52. ML neural network - Assignment 1
  • - 37.54. Regression tools + 37.53. Regression tools
  • - 37.55. Managing data + 37.54. Managing data
  • - 37.56. Exploring visualizations + 37.55. Exploring visualizations
  • - 37.57. Try a different model + 37.56. Try a different model
  • - 37.58. Create a regression model + 37.57. Create a regression model
  • - 37.59. Linear and polynomial regression + 37.58. Linear and polynomial regression
  • - 37.60. Retrying some regression + 37.59. Retrying some regression
  • - 37.61. Pumpkin varieties and color + 37.60. Pumpkin varieties and color
  • - 37.62. Delicious asian and indian cuisines + 37.61. Delicious asian and indian cuisines
  • - 37.63. Explore classification methods - -
  • -
  • - - 37.64. Linear Regression Implementation from Scratch + 37.62. Explore classification methods
  • - 37.65. Kernel method assignment 1 + 37.63. Kernel method assignment 1
  • - 37.66. Support Vector Machines (SVM) - Intro and SVM for Regression + 37.64. Support Vector Machines (SVM) - Intro and SVM for Regression
  • - 37.67. Support Vector Machines (SVM) - Classification + 37.65. Support Vector Machines (SVM) - Classification
  • - 37.68. Decision Trees - Intro and Regression + 37.66. Decision Trees - Intro and Regression
  • - 37.69. Decision Trees - Classification + 37.67. Decision Trees - Classification
  • - 37.70. Model selection assignment 1 + 37.68. Model selection assignment 1
  • - 37.71. Learning Curve To Identify Overfit & Underfit + 37.69. Learning Curve To Identify Overfit & Underfit
  • - 37.72. Dropout and Batch Normalization + 37.70. Dropout and Batch Normalization
  • - 37.73. Lasso and Ridge Regression + 37.71. Lasso and Ridge Regression
  • - 37.74. Regularized Linear Models + 37.72. Regularized Linear Models
  • - 37.75. Random forests intro and regression + 37.73. Random forests intro and regression
  • - 37.76. Random forests for classification + 37.74. Random forests for classification
  • - 37.77. Beyond random forests: more ensemble models + 37.75. Beyond random forests: more ensemble models
  • - 37.78. Decision trees + 37.76. Decision trees
  • - 37.79. Hyperparameter tuning gradient boosting + 37.77. Hyperparameter tuning gradient boosting
  • - 37.80. Gradient boosting + 37.78. Gradient boosting
  • - 37.81. Boosting with tuning + 37.79. Boosting with tuning
  • - 37.82. Random Forest Classifier with Feature Importance + 37.80. Random Forest Classifier with Feature Importance
  • - 37.84. Data engineering + 37.82. Data engineering
  • - 37.85. Counterintuitive Challenges in ML Debugging + 37.83. Counterintuitive Challenges in ML Debugging
  • - 37.86. Case Study: Debugging in Classification + 37.84. Case Study: Debugging in Classification
  • - 37.87. Case Study: Debugging in Regression + 37.85. Case Study: Debugging in Regression
  • - 37.88. Study the solvers + 37.86. Study the solvers
  • - 37.89. Build classification models + 37.87. Build classification models
  • - 37.90. Build Classification Model + 37.88. Build Classification Model
  • - 37.91. Parameter play + 37.89. Parameter play
  • - 37.92. How to choose cnn architecture mnist + 37.90. How to choose cnn architecture mnist
  • - 37.94. Sign Language Digits Classification with CNN + 37.92. Sign Language Digits Classification with CNN
  • - 37.96. Object Recognition in Images using CNN + 37.94. Object Recognition in Images using CNN
  • - 37.97. Intro to TensorFlow for Deep Learning + 37.95. Intro to TensorFlow for Deep Learning
  • - 37.99. Bitcoin LSTM Model with Tweet Volume and Sentiment + 37.97. Bitcoin LSTM Model with Tweet Volume and Sentiment
  • - 37.101. Google Stock Price Prediction RNN + 37.99. Google Stock Price Prediction RNN
  • - 37.103. Intro to Autoencoders + 37.101. Intro to Autoencoders
  • - 37.104. Base/Denoising Autoencoder & Dimension Reduction + 37.102. Base/Denoising Autoencoder & Dimension Reduction
  • - 37.105. Fun with Variational Autoencoders + 37.103. Fun with Variational Autoencoders
  • - 37.106. Time Series Forecasting Assignment + 37.104. Time Series Forecasting Assignment
  • - 37.108. Neural Networks for Classification with TensorFlow + 37.106. Neural Networks for Classification with TensorFlow
  • - 37.109. NN Classify 15 Fruits Assignment + 37.107. NN Classify 15 Fruits Assignment
  • - 37.114. DQN On Foreign Exchange Market + 37.112. DQN On Foreign Exchange Market
  • - 37.115. Art by gan + 37.113. Art by gan
  • - 37.117. Generative Adversarial Networks (GANs) + 37.115. Generative Adversarial Networks (GANs)
  • - 37.118. Basic classification: Classify images of clothing + 37.116. Basic classification: Classify images of clothing
  • @@ -1135,8 +1152,8 @@

    Ocademy Open Machine Learning Book

    38. Slides - -
    -

    37.99. Bitcoin LSTM Model with Tweet Volume and Sentiment#

    +

    37.97. Bitcoin LSTM Model with Tweet Volume and Sentiment#

    -

    37.99.1. Load libraries#

    +

    37.97.1. Load libraries#

    import pandas as pd
    @@ -1634,7 +1651,7 @@ 

    37.99.1. Load libraries -

    37.99.2. Data Pre-processing#

    +

    37.97.2. Data Pre-processing#

    notclean = pd.read_csv(
    @@ -3333,7 +3350,7 @@ 

    37.99.2. Data Pre-processing -

    37.99.3. Exploratory Analysis#

    +

    37.97.3. Exploratory Analysis#

    # --------------Analysis----------------------------#
    @@ -4673,7 +4690,7 @@ 

    37.99.3. Exploratory Analysis -

    37.99.4. LSTM Model#

    +

    37.97.4. LSTM Model#

    from math import sqrt
    @@ -5494,7 +5511,7 @@ 

    37.99.4. LSTM Model

    -

    37.100. Acknowledgements#

    +

    37.98. Acknowledgements#

    Thanks to Paul Simpson for creating Bitcoin Lstm Model with Tweet Volume and Sentiment. It inspires the majority of the content in this chapter.

    @@ -5535,13 +5552,13 @@

    37.100. Acknowledgements

    previous

    -

    37.97. Intro to TensorFlow for Deep Learning

    +

    37.95. Intro to TensorFlow for Deep Learning

    next

    -

    37.101. Google Stock Price Prediction RNN

    +

    37.99. Google Stock Price Prediction RNN

    diff --git a/assignments/deep-learning/nn-classify-15-fruits-assignment.html b/assignments/deep-learning/nn-classify-15-fruits-assignment.html index ab11d8538f..ab17d760d8 100644 --- a/assignments/deep-learning/nn-classify-15-fruits-assignment.html +++ b/assignments/deep-learning/nn-classify-15-fruits-assignment.html @@ -6,7 +6,7 @@ - 37.109. NN Classify 15 Fruits Assignment — Ocademy Open Machine Learning Book + 37.107. NN Classify 15 Fruits Assignment — Ocademy Open Machine Learning Book @@ -98,8 +98,8 @@ - - + + @@ -236,10 +236,32 @@

    Ocademy Open Machine Learning Book

    5.3. NumPy -
  • +
  • 5.4. Pandas + + +
  • @@ -252,8 +274,8 @@

    Ocademy Open Machine Learning Book

    6. Data visualization - -
  • - - 37.45. ML linear regression - assignment 1 - -
  • -
  • - - 37.46. ML linear regression - assignment 2 + + 37.45. Linear regression - California Housing
  • - 37.47. Linear Regression Metrics + 37.46. Linear Regression Metrics
  • - 37.48. Loss Function + 37.47. Loss Function
  • - 37.49. Gradient descent + 37.48. Gradient descent + +
  • +
  • + + 37.49. Linear Regression Implementation from Scratch
  • - 37.51. ML logistic regression - assignment 1 + 37.50. ML logistic regression - assignment 1
  • - 37.52. ML logistic regression - assignment 2 + 37.51. ML logistic regression - assignment 2
  • - 37.53. ML neural network - Assignment 1 + 37.52. ML neural network - Assignment 1
  • - 37.54. Regression tools + 37.53. Regression tools
  • - 37.55. Managing data + 37.54. Managing data
  • - 37.56. Exploring visualizations + 37.55. Exploring visualizations
  • - 37.57. Try a different model + 37.56. Try a different model
  • - 37.58. Create a regression model + 37.57. Create a regression model
  • - 37.59. Linear and polynomial regression + 37.58. Linear and polynomial regression
  • - 37.60. Retrying some regression + 37.59. Retrying some regression
  • - 37.61. Pumpkin varieties and color + 37.60. Pumpkin varieties and color
  • - 37.62. Delicious asian and indian cuisines + 37.61. Delicious asian and indian cuisines
  • - 37.63. Explore classification methods - -
  • -
  • - - 37.64. Linear Regression Implementation from Scratch + 37.62. Explore classification methods
  • - 37.65. Kernel method assignment 1 + 37.63. Kernel method assignment 1
  • - 37.66. Support Vector Machines (SVM) - Intro and SVM for Regression + 37.64. Support Vector Machines (SVM) - Intro and SVM for Regression
  • - 37.67. Support Vector Machines (SVM) - Classification + 37.65. Support Vector Machines (SVM) - Classification
  • - 37.68. Decision Trees - Intro and Regression + 37.66. Decision Trees - Intro and Regression
  • - 37.69. Decision Trees - Classification + 37.67. Decision Trees - Classification
  • - 37.70. Model selection assignment 1 + 37.68. Model selection assignment 1
  • - 37.71. Learning Curve To Identify Overfit & Underfit + 37.69. Learning Curve To Identify Overfit & Underfit
  • - 37.72. Dropout and Batch Normalization + 37.70. Dropout and Batch Normalization
  • - 37.73. Lasso and Ridge Regression + 37.71. Lasso and Ridge Regression
  • - 37.74. Regularized Linear Models + 37.72. Regularized Linear Models
  • - 37.75. Random forests intro and regression + 37.73. Random forests intro and regression
  • - 37.76. Random forests for classification + 37.74. Random forests for classification
  • - 37.77. Beyond random forests: more ensemble models + 37.75. Beyond random forests: more ensemble models
  • - 37.78. Decision trees + 37.76. Decision trees
  • - 37.79. Hyperparameter tuning gradient boosting + 37.77. Hyperparameter tuning gradient boosting
  • - 37.80. Gradient boosting + 37.78. Gradient boosting
  • - 37.81. Boosting with tuning + 37.79. Boosting with tuning
  • - 37.82. Random Forest Classifier with Feature Importance + 37.80. Random Forest Classifier with Feature Importance
  • - 37.84. Data engineering + 37.82. Data engineering
  • - 37.85. Counterintuitive Challenges in ML Debugging + 37.83. Counterintuitive Challenges in ML Debugging
  • - 37.86. Case Study: Debugging in Classification + 37.84. Case Study: Debugging in Classification
  • - 37.87. Case Study: Debugging in Regression + 37.85. Case Study: Debugging in Regression
  • - 37.88. Study the solvers + 37.86. Study the solvers
  • - 37.89. Build classification models + 37.87. Build classification models
  • - 37.90. Build Classification Model + 37.88. Build Classification Model
  • - 37.91. Parameter play + 37.89. Parameter play
  • - 37.92. How to choose cnn architecture mnist + 37.90. How to choose cnn architecture mnist
  • - 37.94. Sign Language Digits Classification with CNN + 37.92. Sign Language Digits Classification with CNN
  • - 37.96. Object Recognition in Images using CNN + 37.94. Object Recognition in Images using CNN
  • - 37.97. Intro to TensorFlow for Deep Learning + 37.95. Intro to TensorFlow for Deep Learning
  • - 37.99. Bitcoin LSTM Model with Tweet Volume and Sentiment + 37.97. Bitcoin LSTM Model with Tweet Volume and Sentiment
  • - 37.101. Google Stock Price Prediction RNN + 37.99. Google Stock Price Prediction RNN
  • - 37.103. Intro to Autoencoders + 37.101. Intro to Autoencoders
  • - 37.104. Base/Denoising Autoencoder & Dimension Reduction + 37.102. Base/Denoising Autoencoder & Dimension Reduction
  • - 37.105. Fun with Variational Autoencoders + 37.103. Fun with Variational Autoencoders
  • - 37.106. Time Series Forecasting Assignment + 37.104. Time Series Forecasting Assignment
  • - 37.108. Neural Networks for Classification with TensorFlow + 37.106. Neural Networks for Classification with TensorFlow
  • - 37.109. NN Classify 15 Fruits Assignment + 37.107. NN Classify 15 Fruits Assignment
  • - 37.114. DQN On Foreign Exchange Market + 37.112. DQN On Foreign Exchange Market
  • - 37.115. Art by gan + 37.113. Art by gan
  • - 37.117. Generative Adversarial Networks (GANs) + 37.115. Generative Adversarial Networks (GANs)
  • - 37.118. Basic classification: Classify images of clothing + 37.116. Basic classification: Classify images of clothing
  • @@ -1135,8 +1152,8 @@

    Ocademy Open Machine Learning Book

    38. Slides - -
    -

    37.109. NN Classify 15 Fruits Assignment#

    +

    37.107. NN Classify 15 Fruits Assignment#

    Fruit Example

    -

    37.110. Data collection#

    +

    37.108. Data collection#

    The database used in this study is comprising of 44406 fruit images, which we collected in a period of 6 months. The images where made with in our lab’s environment under different scenarios which we mention below. We captured all the images on a clear background with @@ -1668,7 +1685,7 @@

    37.110. Data collection -

    37.111. Load and visualize the dataset#

    +

    37.109. Load and visualize the dataset#

    The database used in this study is comprising of 70549 fruit images, which were collected in a period of 6 months. The images where made with in a lab’s environment under different scenarios which we mention below. All the images were captured on a clear background with resolution of 320×258 pixels.

    Type of fruits in the dataset:

      @@ -1844,7 +1861,7 @@

      37.111. Load and visualize the dataset

    -

    37.112. Train the neural network from scratch with Keras and w/o generator#

    +

    37.110. Train the neural network from scratch with Keras and w/o generator#

    # The pictures will be resized to have the same size for the neural network
    @@ -1861,7 +1878,7 @@ 

    37.112. Train the neural network from sc

    -

    37.112.1. Create and train the NN Model#

    +

    37.110.1. Create and train the NN Model#

    def cut_df(df, number_of_parts, part):
    @@ -2040,7 +2057,7 @@ 

    37.112.1. Create and train the NN Model<

    -

    37.112.2. Predictions#

    +

    37.110.2. Predictions#

    import warnings
    @@ -2091,7 +2108,7 @@ 

    37.112.2. Predictions

    -

    37.112.3. Visualize the result with pictures of fruits#

    +

    37.110.3. Visualize the result with pictures of fruits#

    fig, axes = plt.subplots(nrows=4, ncols=4, figsize=(10, 10),
    @@ -2110,7 +2127,7 @@ 

    37.112.3. Visualize the result with pict

    -

    37.113. Acknowledgments#

    +

    37.111. Acknowledgments#

    Thanks to DATALIRA for creating the open-source course Classify 15 Fruits with TensorFlow . It inspires the majority of the content in this chapter.

    @@ -2151,13 +2168,13 @@

    37.113. Acknowledgments

    previous

    -

    37.108. Neural Networks for Classification with TensorFlow

    +

    37.106. Neural Networks for Classification with TensorFlow

    next

    -

    37.114. DQN On Foreign Exchange Market

    +

    37.112. DQN On Foreign Exchange Market

    diff --git a/assignments/deep-learning/nn-for-classification-assignment.html b/assignments/deep-learning/nn-for-classification-assignment.html index 5d6094267e..d33d6a2c33 100644 --- a/assignments/deep-learning/nn-for-classification-assignment.html +++ b/assignments/deep-learning/nn-for-classification-assignment.html @@ -6,7 +6,7 @@ - 37.108. Neural Networks for Classification with TensorFlow — Ocademy Open Machine Learning Book + 37.106. Neural Networks for Classification with TensorFlow — Ocademy Open Machine Learning Book @@ -98,8 +98,8 @@ - - + + @@ -236,10 +236,32 @@

    Ocademy Open Machine Learning Book

    5.3. NumPy -
  • +
  • 5.4. Pandas + + +
  • @@ -252,8 +274,8 @@

    Ocademy Open Machine Learning Book

    6. Data visualization - -
  • - - 37.45. ML linear regression - assignment 1 - -
  • -
  • - - 37.46. ML linear regression - assignment 2 + + 37.45. Linear regression - California Housing
  • - 37.47. Linear Regression Metrics + 37.46. Linear Regression Metrics
  • - 37.48. Loss Function + 37.47. Loss Function
  • - 37.49. Gradient descent + 37.48. Gradient descent + +
  • +
  • + + 37.49. Linear Regression Implementation from Scratch
  • - 37.51. ML logistic regression - assignment 1 + 37.50. ML logistic regression - assignment 1
  • - 37.52. ML logistic regression - assignment 2 + 37.51. ML logistic regression - assignment 2
  • - 37.53. ML neural network - Assignment 1 + 37.52. ML neural network - Assignment 1
  • - 37.54. Regression tools + 37.53. Regression tools
  • - 37.55. Managing data + 37.54. Managing data
  • - 37.56. Exploring visualizations + 37.55. Exploring visualizations
  • - 37.57. Try a different model + 37.56. Try a different model
  • - 37.58. Create a regression model + 37.57. Create a regression model
  • - 37.59. Linear and polynomial regression + 37.58. Linear and polynomial regression
  • - 37.60. Retrying some regression + 37.59. Retrying some regression
  • - 37.61. Pumpkin varieties and color + 37.60. Pumpkin varieties and color
  • - 37.62. Delicious asian and indian cuisines + 37.61. Delicious asian and indian cuisines
  • - 37.63. Explore classification methods - -
  • -
  • - - 37.64. Linear Regression Implementation from Scratch + 37.62. Explore classification methods
  • - 37.65. Kernel method assignment 1 + 37.63. Kernel method assignment 1
  • - 37.66. Support Vector Machines (SVM) - Intro and SVM for Regression + 37.64. Support Vector Machines (SVM) - Intro and SVM for Regression
  • - 37.67. Support Vector Machines (SVM) - Classification + 37.65. Support Vector Machines (SVM) - Classification
  • - 37.68. Decision Trees - Intro and Regression + 37.66. Decision Trees - Intro and Regression
  • - 37.69. Decision Trees - Classification + 37.67. Decision Trees - Classification
  • - 37.70. Model selection assignment 1 + 37.68. Model selection assignment 1
  • - 37.71. Learning Curve To Identify Overfit & Underfit + 37.69. Learning Curve To Identify Overfit & Underfit
  • - 37.72. Dropout and Batch Normalization + 37.70. Dropout and Batch Normalization
  • - 37.73. Lasso and Ridge Regression + 37.71. Lasso and Ridge Regression
  • - 37.74. Regularized Linear Models + 37.72. Regularized Linear Models
  • - 37.75. Random forests intro and regression + 37.73. Random forests intro and regression
  • - 37.76. Random forests for classification + 37.74. Random forests for classification
  • - 37.77. Beyond random forests: more ensemble models + 37.75. Beyond random forests: more ensemble models
  • - 37.78. Decision trees + 37.76. Decision trees
  • - 37.79. Hyperparameter tuning gradient boosting + 37.77. Hyperparameter tuning gradient boosting
  • - 37.80. Gradient boosting + 37.78. Gradient boosting
  • - 37.81. Boosting with tuning + 37.79. Boosting with tuning
  • - 37.82. Random Forest Classifier with Feature Importance + 37.80. Random Forest Classifier with Feature Importance
  • - 37.84. Data engineering + 37.82. Data engineering
  • - 37.85. Counterintuitive Challenges in ML Debugging + 37.83. Counterintuitive Challenges in ML Debugging
  • - 37.86. Case Study: Debugging in Classification + 37.84. Case Study: Debugging in Classification
  • - 37.87. Case Study: Debugging in Regression + 37.85. Case Study: Debugging in Regression
  • - 37.88. Study the solvers + 37.86. Study the solvers
  • - 37.89. Build classification models + 37.87. Build classification models
  • - 37.90. Build Classification Model + 37.88. Build Classification Model
  • - 37.91. Parameter play + 37.89. Parameter play
  • - 37.92. How to choose cnn architecture mnist + 37.90. How to choose cnn architecture mnist
  • - 37.94. Sign Language Digits Classification with CNN + 37.92. Sign Language Digits Classification with CNN
  • - 37.96. Object Recognition in Images using CNN + 37.94. Object Recognition in Images using CNN
  • - 37.97. Intro to TensorFlow for Deep Learning + 37.95. Intro to TensorFlow for Deep Learning
  • - 37.99. Bitcoin LSTM Model with Tweet Volume and Sentiment + 37.97. Bitcoin LSTM Model with Tweet Volume and Sentiment
  • - 37.101. Google Stock Price Prediction RNN + 37.99. Google Stock Price Prediction RNN
  • - 37.103. Intro to Autoencoders + 37.101. Intro to Autoencoders
  • - 37.104. Base/Denoising Autoencoder & Dimension Reduction + 37.102. Base/Denoising Autoencoder & Dimension Reduction
  • - 37.105. Fun with Variational Autoencoders + 37.103. Fun with Variational Autoencoders
  • - 37.106. Time Series Forecasting Assignment + 37.104. Time Series Forecasting Assignment
  • - 37.108. Neural Networks for Classification with TensorFlow + 37.106. Neural Networks for Classification with TensorFlow
  • - 37.109. NN Classify 15 Fruits Assignment + 37.107. NN Classify 15 Fruits Assignment
  • - 37.114. DQN On Foreign Exchange Market + 37.112. DQN On Foreign Exchange Market
  • - 37.115. Art by gan + 37.113. Art by gan
  • - 37.117. Generative Adversarial Networks (GANs) + 37.115. Generative Adversarial Networks (GANs)
  • - 37.118. Basic classification: Classify images of clothing + 37.116. Basic classification: Classify images of clothing
  • @@ -1135,8 +1152,8 @@

    Ocademy Open Machine Learning Book

    38. Slides - -
    -

    37.108. Neural Networks for Classification with TensorFlow#

    +

    37.106. Neural Networks for Classification with TensorFlow#

    -

    37.108.1. Getting Started: Binary Classifier#

    +

    37.106.1. Getting Started: Binary Classifier#

    We will first practice building neural networks for binary classifier. In binary classification, we have two classes.

    We will use a classical cancer dataset to predict if a given patient has a malignant or benign based on their medical information. We will get it from sklearn datasets. You can read more about the dataset.

    The dataset contains two labels: malignant, benign.

    -

    37.108.1.1. Getting the data#

    +

    37.106.1.1. Getting the data#

    We will get the data from sklearn datasets.

    @@ -1821,7 +1838,7 @@

    37.108.1.1. Getting the data -

    37.108.2. Taking a look in the data#

    +

    37.106.2. Taking a look in the data#

    # Looking from the head 
    @@ -1851,7 +1868,7 @@ 

    37.108.2. Taking a look in the data

    -

    37.108.3. Preparing the Data#

    +

    37.106.3. Preparing the Data#

    The data from sklearn is reasonably cleaned. Let’s split the data into train and test sets, and we will follow with scaling the values to be between 0 and 1.

    @@ -1894,7 +1911,7 @@

    37.108.3. Preparing the Data -

    37.108.4. Creating, Compiling and Training a Model#

    +

    37.106.4. Creating, Compiling and Training a Model#

    In TensorFlow, creating a model is only putting together an empty graphs. We are going to use Sequential API to stack the layers, from the input to output.

    In model compilaton, it’s where we specify the optimizer and loss function. Loss function is there for calculating the difference between the predictions and the actual output, and optimizer is there for reducing the loss.

    Also, if we are interested in tracking other metrics during training, we can specify them in metric.

    @@ -1947,7 +1964,7 @@

    37.108.4. Creating, Compiling and Traini

    ‼️ If you retrain again, it will continue where it left. So, for example, if you train for 30 epochs, and you rerun the cell, it will train for same more epochs again.

    -

    37.108.5. Visualizing the Results#

    +

    37.106.5. Visualizing the Results#

    Visualizing the model results after training is always a good way to learn what you can do to improve the performance.

    Let’s get a Pandas dataframe containing training loss and accuracy, and validation loss and accuracy.

    @@ -1965,7 +1982,7 @@

    37.108.5. Visualizing the ResultsLet’s evaluate the model on the test set.

    -

    37.108.6. Evaluating the Model#

    +

    37.106.6. Evaluating the Model#

    Quite often, you will want to test your model on the data that it never saw. This data is normally called test set and in more applied practice, you will only feed the test to the model after you have done your best to improve it.

    Let’s now evaluate the model on the test set. One thing to note here is that the test set must be preprocessed the same way we preprocessed the training set. The training set was rescaled and that was applied to the test set.

    If this is not obeyed, you would not know why you’re having poor results. Just look up on the next next cell how poor the accuracy will be if I evaluate the model on unscaled data when I trained it on scaled data.

    @@ -2083,13 +2100,13 @@

    37.108.6. Evaluating the Model -

    37.108.7. Going Beyond Binary Classifier to Multiclass Classifier: 10 Fashions Classifier#

    +

    37.106.7. Going Beyond Binary Classifier to Multiclass Classifier: 10 Fashions Classifier#

    So far, we have built a neural network for regression(in previous labs) and binary classification. And we have only been working with structured datasets(datasets in tabular format).

    Can the same neural networks we used be able to recognize images? In this next practice, we will turn the page to image classification. We will build a neural network for recognizing 10 different fashions and along the way, we will learn other things such as stopping the training upon a given condition is met, and using TensorBoard to visualize model.

    That is going to be cool! Let’s get started!

    -

    37.108.8. Getting the Fashion data#

    +

    37.106.8. Getting the Fashion data#

    Let’s get the dataset from Keras.

    @@ -2104,7 +2121,7 @@

    37.108.8. Getting the Fashion data

    -

    37.108.9. Looking in the Fashion Data#

    +

    37.106.9. Looking in the Fashion Data#

    As always, it is a best practice to peep into the images to see how they like.

    Let’s display the pixels values of a given image, image, and its corresponding label.

    -

    37.108.10. Preparing the Data#

    +

    37.106.10. Preparing the Data#

    In many cases, real world images datasets are not that clean like fashion mnist.

    You may have to correct images that were incorrectly labeled, or you have labels in texts that need to be converted to numbers(most machine learning models accept numeric input), or scale the pixels values.

    The latter is what we are going to do. It is inarguable that scaling the images pixels to value between 0 and 1 increase the performance of the neural network, and hence the results. Let’s do it!!

    @@ -2194,7 +2211,7 @@

    37.108.10. Preparing the Data -

    37.108.11. Creating, Compiling, and Training a Model#

    +

    37.106.11. Creating, Compiling, and Training a Model#

    There are few points to note before creating a model:

    • When working with images, the shape of the input images has to be correctly provided. This is a common error done by many people, including me (before I learned it).

    • @@ -2244,7 +2261,7 @@

      37.108.11. Creating, Compiling, and Trai

      But also, training mnist for 20 epochs is not slow that we would need to activate GPU. We will take an advantage of GPU in later labs.

    -

    37.108.12. Visualizing the Model Results#

    +

    37.106.12. Visualizing the Model Results#

    Let’s visualize the model results to see how training went.

    @@ -2263,7 +2280,7 @@

    37.108.12. Visualizing the Model Results

    Let’s see how the model performs on unseed data: test set.

    -

    37.108.13. Model Evaluation#

    +

    37.106.13. Model Evaluation#

    # if you need a model trained, you can use this cell
    @@ -2294,11 +2311,11 @@ 

    37.108.13. Model Evaluation -

    37.108.14. Controlling Training with Callbacks#

    +

    37.106.14. Controlling Training with Callbacks#

    We can use Callbacks functions to control the training.

    Take an example: we can stop training when the model is lo longer showing significant improvements on validation set. Or we can terminate training when a certain condition is met.

    -

    37.108.14.1. Implementing Callbacks#

    +

    37.106.14.1. Implementing Callbacks#

    There are various functionalities available in Keras Callbacks.

    Let’s start with how to use ModelCheckpoint to save the model when the performance on the validation set is best so far. By saving the best model on the validation set, we avoid things like overfitting which is a common issue in machine learning model training, neural network specifically. We also train for less time.

    I will rebuild a same model again.

    @@ -2474,7 +2491,7 @@

    37.108.14.1. Implementing Callbacks

    -

    37.108.14.2. Custom Callback#

    +

    37.106.14.2. Custom Callback#

    Keras offers various functions for implementing custom callbacks that are very handy when you want to control the model training with a little bit of customization.

    You can do certain actions on almost every step of the training. Let’s stop the training when the accuracy is 95%.

    @@ -2539,7 +2556,7 @@

    37.108.14.2. Custom Callback -

    37.108.15. Using TensorBoard for Model Visualization#

    +

    37.106.15. Using TensorBoard for Model Visualization#

    Tensorboard is incredible tool used by many people (and not just only TensorFlow developers) to experiment with machine learning.

    With TensorBoard, you can:

      @@ -2630,7 +2647,7 @@

      37.108.15. Using TensorBoard for Model V

      As you can see, TensorBoard is very useful. The fact that you can use it to visualize the performance metrics, model graphs, and datasets as well.

    -

    37.108.16. Acknowledgments#

    +

    37.106.16. Acknowledgments#

    Thanks to Jean de Dieu Nyandwi for creating the open-source course machine learning complete . It inspires the majority of the content in this chapter.

    @@ -2672,13 +2689,13 @@

    37.108.16. Acknowledgments

    previous

    -

    37.106. Time Series Forecasting Assignment

    +

    37.104. Time Series Forecasting Assignment

    next

    -

    37.109. NN Classify 15 Fruits Assignment

    +

    37.107. NN Classify 15 Fruits Assignment

    diff --git a/assignments/deep-learning/overview/basic-classification-classify-images-of-clothing.html b/assignments/deep-learning/overview/basic-classification-classify-images-of-clothing.html index 44301b66a5..baeb8b07c8 100644 --- a/assignments/deep-learning/overview/basic-classification-classify-images-of-clothing.html +++ b/assignments/deep-learning/overview/basic-classification-classify-images-of-clothing.html @@ -6,7 +6,7 @@ - 37.118. Basic classification: Classify images of clothing — Ocademy Open Machine Learning Book + 37.116. Basic classification: Classify images of clothing — Ocademy Open Machine Learning Book @@ -99,7 +99,7 @@ - + @@ -236,10 +236,32 @@

    Ocademy Open Machine Learning Book

    5.3. NumPy -
  • +
  • 5.4. Pandas + + +
  • @@ -252,8 +274,8 @@

    Ocademy Open Machine Learning Book

    6. Data visualization - -
  • - - 37.45. ML linear regression - assignment 1 - -
  • -
  • - - 37.46. ML linear regression - assignment 2 + + 37.45. Linear regression - California Housing
  • - 37.47. Linear Regression Metrics + 37.46. Linear Regression Metrics
  • - 37.48. Loss Function + 37.47. Loss Function
  • - 37.49. Gradient descent + 37.48. Gradient descent + +
  • +
  • + + 37.49. Linear Regression Implementation from Scratch
  • - 37.51. ML logistic regression - assignment 1 + 37.50. ML logistic regression - assignment 1
  • - 37.52. ML logistic regression - assignment 2 + 37.51. ML logistic regression - assignment 2
  • - 37.53. ML neural network - Assignment 1 + 37.52. ML neural network - Assignment 1
  • - 37.54. Regression tools + 37.53. Regression tools
  • - 37.55. Managing data + 37.54. Managing data
  • - 37.56. Exploring visualizations + 37.55. Exploring visualizations
  • - 37.57. Try a different model + 37.56. Try a different model
  • - 37.58. Create a regression model + 37.57. Create a regression model
  • - 37.59. Linear and polynomial regression + 37.58. Linear and polynomial regression
  • - 37.60. Retrying some regression + 37.59. Retrying some regression
  • - 37.61. Pumpkin varieties and color + 37.60. Pumpkin varieties and color
  • - 37.62. Delicious asian and indian cuisines + 37.61. Delicious asian and indian cuisines
  • - 37.63. Explore classification methods - -
  • -
  • - - 37.64. Linear Regression Implementation from Scratch + 37.62. Explore classification methods
  • - 37.65. Kernel method assignment 1 + 37.63. Kernel method assignment 1
  • - 37.66. Support Vector Machines (SVM) - Intro and SVM for Regression + 37.64. Support Vector Machines (SVM) - Intro and SVM for Regression
  • - 37.67. Support Vector Machines (SVM) - Classification + 37.65. Support Vector Machines (SVM) - Classification
  • - 37.68. Decision Trees - Intro and Regression + 37.66. Decision Trees - Intro and Regression
  • - 37.69. Decision Trees - Classification + 37.67. Decision Trees - Classification
  • - 37.70. Model selection assignment 1 + 37.68. Model selection assignment 1
  • - 37.71. Learning Curve To Identify Overfit & Underfit + 37.69. Learning Curve To Identify Overfit & Underfit
  • - 37.72. Dropout and Batch Normalization + 37.70. Dropout and Batch Normalization
  • - 37.73. Lasso and Ridge Regression + 37.71. Lasso and Ridge Regression
  • - 37.74. Regularized Linear Models + 37.72. Regularized Linear Models
  • - 37.75. Random forests intro and regression + 37.73. Random forests intro and regression
  • - 37.76. Random forests for classification + 37.74. Random forests for classification
  • - 37.77. Beyond random forests: more ensemble models + 37.75. Beyond random forests: more ensemble models
  • - 37.78. Decision trees + 37.76. Decision trees
  • - 37.79. Hyperparameter tuning gradient boosting + 37.77. Hyperparameter tuning gradient boosting
  • - 37.80. Gradient boosting + 37.78. Gradient boosting
  • - 37.81. Boosting with tuning + 37.79. Boosting with tuning
  • - 37.82. Random Forest Classifier with Feature Importance + 37.80. Random Forest Classifier with Feature Importance
  • - 37.84. Data engineering + 37.82. Data engineering
  • - 37.85. Counterintuitive Challenges in ML Debugging + 37.83. Counterintuitive Challenges in ML Debugging
  • - 37.86. Case Study: Debugging in Classification + 37.84. Case Study: Debugging in Classification
  • - 37.87. Case Study: Debugging in Regression + 37.85. Case Study: Debugging in Regression
  • - 37.88. Study the solvers + 37.86. Study the solvers
  • - 37.89. Build classification models + 37.87. Build classification models
  • - 37.90. Build Classification Model + 37.88. Build Classification Model
  • - 37.91. Parameter play + 37.89. Parameter play
  • - 37.92. How to choose cnn architecture mnist + 37.90. How to choose cnn architecture mnist
  • - 37.94. Sign Language Digits Classification with CNN + 37.92. Sign Language Digits Classification with CNN
  • - 37.96. Object Recognition in Images using CNN + 37.94. Object Recognition in Images using CNN
  • - 37.97. Intro to TensorFlow for Deep Learning + 37.95. Intro to TensorFlow for Deep Learning
  • - 37.99. Bitcoin LSTM Model with Tweet Volume and Sentiment + 37.97. Bitcoin LSTM Model with Tweet Volume and Sentiment
  • - 37.101. Google Stock Price Prediction RNN + 37.99. Google Stock Price Prediction RNN
  • - 37.103. Intro to Autoencoders + 37.101. Intro to Autoencoders
  • - 37.104. Base/Denoising Autoencoder & Dimension Reduction + 37.102. Base/Denoising Autoencoder & Dimension Reduction
  • - 37.105. Fun with Variational Autoencoders + 37.103. Fun with Variational Autoencoders
  • - 37.106. Time Series Forecasting Assignment + 37.104. Time Series Forecasting Assignment
  • - 37.108. Neural Networks for Classification with TensorFlow + 37.106. Neural Networks for Classification with TensorFlow
  • - 37.109. NN Classify 15 Fruits Assignment + 37.107. NN Classify 15 Fruits Assignment
  • - 37.114. DQN On Foreign Exchange Market + 37.112. DQN On Foreign Exchange Market
  • - 37.115. Art by gan + 37.113. Art by gan
  • - 37.117. Generative Adversarial Networks (GANs) + 37.115. Generative Adversarial Networks (GANs)
  • - 37.118. Basic classification: Classify images of clothing + 37.116. Basic classification: Classify images of clothing
  • @@ -1135,8 +1152,8 @@

    Ocademy Open Machine Learning Book

    38. Slides - -
    -
    Accuracy (train) for Linear SVC: 78.6% 
    +
    Accuracy (train) for Linear SVC: 78.2% 
                   precision    recall  f1-score   support
     
    -     chinese       0.70      0.75      0.72       254
    -      indian       0.89      0.90      0.89       240
    -    japanese       0.80      0.75      0.77       246
    -      korean       0.80      0.70      0.75       227
    -        thai       0.76      0.83      0.80       232
    +     chinese       0.69      0.72      0.71       240
    +      indian       0.88      0.93      0.91       253
    +    japanese       0.75      0.75      0.75       240
    +      korean       0.80      0.73      0.77       250
    +        thai       0.78      0.77      0.78       216
     
    -    accuracy                           0.79      1199
    -   macro avg       0.79      0.79      0.79      1199
    -weighted avg       0.79      0.79      0.79      1199
    +    accuracy                           0.78      1199
    +   macro avg       0.78      0.78      0.78      1199
    +weighted avg       0.78      0.78      0.78      1199
     
    @@ -1857,31 +1874,33 @@

    13.3.5.1. Exercise - apply the K-Neighbo

    -
    Accuracy (train) for Linear SVC: 78.6% 
    +
    Accuracy (train) for Linear SVC: 78.2% 
                   precision    recall  f1-score   support
     
    -     chinese       0.70      0.75      0.72       254
    -      indian       0.89      0.90      0.89       240
    -    japanese       0.80      0.75      0.77       246
    -      korean       0.80      0.70      0.75       227
    -        thai       0.76      0.83      0.80       232
    +     chinese       0.69      0.72      0.71       240
    +      indian       0.88      0.93      0.91       253
    +    japanese       0.75      0.75      0.75       240
    +      korean       0.80      0.73      0.77       250
    +        thai       0.78      0.77      0.78       216
     
    -    accuracy                           0.79      1199
    -   macro avg       0.79      0.79      0.79      1199
    -weighted avg       0.79      0.79      0.79      1199
    +    accuracy                           0.78      1199
    +   macro avg       0.78      0.78      0.78      1199
    +weighted avg       0.78      0.78      0.78      1199
     
    -Accuracy (train) for KNN classifier: 74.0% 
    -              precision    recall  f1-score   support
    +Accuracy (train) for KNN classifier: 72.7% 
    +
    +
    +
                  precision    recall  f1-score   support
     
    -     chinese       0.70      0.69      0.70       254
    -      indian       0.88      0.84      0.86       240
    -    japanese       0.64      0.82      0.72       246
    -      korean       0.84      0.54      0.66       227
    -        thai       0.71      0.80      0.75       232
    +     chinese       0.68      0.71      0.70       240
    +      indian       0.86      0.84      0.85       253
    +    japanese       0.63      0.85      0.72       240
    +      korean       0.88      0.52      0.65       250
    +        thai       0.67      0.72      0.70       216
     
    -    accuracy                           0.74      1199
    -   macro avg       0.76      0.74      0.74      1199
    -weighted avg       0.75      0.74      0.74      1199
    +    accuracy                           0.73      1199
    +   macro avg       0.75      0.73      0.72      1199
    +weighted avg       0.75      0.73      0.73      1199
     
    @@ -1909,45 +1928,47 @@

    13.3.6.1. Exercise - apply a Support Vec

    -
    Accuracy (train) for Linear SVC: 78.6% 
    +
    Accuracy (train) for Linear SVC: 78.2% 
                   precision    recall  f1-score   support
     
    -     chinese       0.70      0.75      0.72       254
    -      indian       0.89      0.90      0.89       240
    -    japanese       0.80      0.75      0.77       246
    -      korean       0.80      0.70      0.75       227
    -        thai       0.76      0.83      0.80       232
    +     chinese       0.69      0.72      0.71       240
    +      indian       0.88      0.93      0.91       253
    +    japanese       0.75      0.75      0.75       240
    +      korean       0.80      0.73      0.77       250
    +        thai       0.78      0.77      0.78       216
     
    -    accuracy                           0.79      1199
    -   macro avg       0.79      0.79      0.79      1199
    -weighted avg       0.79      0.79      0.79      1199
    +    accuracy                           0.78      1199
    +   macro avg       0.78      0.78      0.78      1199
    +weighted avg       0.78      0.78      0.78      1199
     
    -Accuracy (train) for KNN classifier: 74.0% 
    -              precision    recall  f1-score   support
    +Accuracy (train) for KNN classifier: 72.7% 
    +
    +
    +
                  precision    recall  f1-score   support
     
    -     chinese       0.70      0.69      0.70       254
    -      indian       0.88      0.84      0.86       240
    -    japanese       0.64      0.82      0.72       246
    -      korean       0.84      0.54      0.66       227
    -        thai       0.71      0.80      0.75       232
    +     chinese       0.68      0.71      0.70       240
    +      indian       0.86      0.84      0.85       253
    +    japanese       0.63      0.85      0.72       240
    +      korean       0.88      0.52      0.65       250
    +        thai       0.67      0.72      0.70       216
     
    -    accuracy                           0.74      1199
    -   macro avg       0.76      0.74      0.74      1199
    -weighted avg       0.75      0.74      0.74      1199
    +    accuracy                           0.73      1199
    +   macro avg       0.75      0.73      0.72      1199
    +weighted avg       0.75      0.73      0.73      1199
     
    -
    Accuracy (train) for SVC: 81.6% 
    +
    Accuracy (train) for SVC: 81.2% 
                   precision    recall  f1-score   support
     
    -     chinese       0.77      0.74      0.75       254
    -      indian       0.92      0.93      0.92       240
    -    japanese       0.79      0.78      0.78       246
    -      korean       0.84      0.76      0.80       227
    -        thai       0.77      0.89      0.83       232
    +     chinese       0.75      0.76      0.75       240
    +      indian       0.91      0.91      0.91       253
    +    japanese       0.81      0.80      0.81       240
    +      korean       0.86      0.77      0.81       250
    +        thai       0.74      0.82      0.78       216
     
    -    accuracy                           0.82      1199
    -   macro avg       0.82      0.82      0.82      1199
    -weighted avg       0.82      0.82      0.81      1199
    +    accuracy                           0.81      1199
    +   macro avg       0.81      0.81      0.81      1199
    +weighted avg       0.81      0.81      0.81      1199
     
    @@ -1972,73 +1993,75 @@

    13.3.7. Ensemble Classifiers -
    Accuracy (train) for Linear SVC: 78.6% 
    +
    Accuracy (train) for Linear SVC: 78.2% 
                   precision    recall  f1-score   support
     
    -     chinese       0.70      0.75      0.72       254
    -      indian       0.89      0.90      0.89       240
    -    japanese       0.80      0.75      0.77       246
    -      korean       0.80      0.70      0.75       227
    -        thai       0.76      0.83      0.80       232
    +     chinese       0.69      0.72      0.71       240
    +      indian       0.88      0.93      0.91       253
    +    japanese       0.75      0.75      0.75       240
    +      korean       0.80      0.73      0.77       250
    +        thai       0.78      0.77      0.78       216
     
    -    accuracy                           0.79      1199
    -   macro avg       0.79      0.79      0.79      1199
    -weighted avg       0.79      0.79      0.79      1199
    +    accuracy                           0.78      1199
    +   macro avg       0.78      0.78      0.78      1199
    +weighted avg       0.78      0.78      0.78      1199
     
    -Accuracy (train) for KNN classifier: 74.0% 
    -              precision    recall  f1-score   support
    +Accuracy (train) for KNN classifier: 72.7% 
    +
    +
    +
                  precision    recall  f1-score   support
     
    -     chinese       0.70      0.69      0.70       254
    -      indian       0.88      0.84      0.86       240
    -    japanese       0.64      0.82      0.72       246
    -      korean       0.84      0.54      0.66       227
    -        thai       0.71      0.80      0.75       232
    +     chinese       0.68      0.71      0.70       240
    +      indian       0.86      0.84      0.85       253
    +    japanese       0.63      0.85      0.72       240
    +      korean       0.88      0.52      0.65       250
    +        thai       0.67      0.72      0.70       216
     
    -    accuracy                           0.74      1199
    -   macro avg       0.76      0.74      0.74      1199
    -weighted avg       0.75      0.74      0.74      1199
    +    accuracy                           0.73      1199
    +   macro avg       0.75      0.73      0.72      1199
    +weighted avg       0.75      0.73      0.73      1199
     
    -
    Accuracy (train) for SVC: 81.6% 
    +
    Accuracy (train) for SVC: 81.2% 
                   precision    recall  f1-score   support
     
    -     chinese       0.77      0.74      0.75       254
    -      indian       0.92      0.93      0.92       240
    -    japanese       0.79      0.78      0.78       246
    -      korean       0.84      0.76      0.80       227
    -        thai       0.77      0.89      0.83       232
    +     chinese       0.75      0.76      0.75       240
    +      indian       0.91      0.91      0.91       253
    +    japanese       0.81      0.80      0.81       240
    +      korean       0.86      0.77      0.81       250
    +        thai       0.74      0.82      0.78       216
     
    -    accuracy                           0.82      1199
    -   macro avg       0.82      0.82      0.82      1199
    -weighted avg       0.82      0.82      0.81      1199
    +    accuracy                           0.81      1199
    +   macro avg       0.81      0.81      0.81      1199
    +weighted avg       0.81      0.81      0.81      1199
     
    -
    Accuracy (train) for RFST: 84.2% 
    +
    Accuracy (train) for RFST: 83.8% 
                   precision    recall  f1-score   support
     
    -     chinese       0.84      0.79      0.81       254
    -      indian       0.90      0.93      0.91       240
    -    japanese       0.85      0.81      0.83       246
    -      korean       0.82      0.80      0.81       227
    -        thai       0.80      0.88      0.84       232
    +     chinese       0.81      0.78      0.79       240
    +      indian       0.89      0.94      0.92       253
    +    japanese       0.83      0.82      0.82       240
    +      korean       0.84      0.79      0.82       250
    +        thai       0.81      0.86      0.83       216
     
         accuracy                           0.84      1199
        macro avg       0.84      0.84      0.84      1199
     weighted avg       0.84      0.84      0.84      1199
     
    -
    Accuracy (train) for ADA: 69.2% 
    +
    Accuracy (train) for ADA: 70.2% 
                   precision    recall  f1-score   support
     
    -     chinese       0.66      0.44      0.53       254
    -      indian       0.90      0.87      0.89       240
    -    japanese       0.63      0.63      0.63       246
    -      korean       0.60      0.77      0.67       227
    -        thai       0.68      0.78      0.73       232
    +     chinese       0.64      0.45      0.53       240
    +      indian       0.87      0.86      0.86       253
    +    japanese       0.69      0.62      0.65       240
    +      korean       0.62      0.79      0.70       250
    +        thai       0.69      0.79      0.74       216
     
    -    accuracy                           0.69      1199
    -   macro avg       0.70      0.70      0.69      1199
    -weighted avg       0.70      0.69      0.69      1199
    +    accuracy                           0.70      1199
    +   macro avg       0.70      0.70      0.70      1199
    +weighted avg       0.70      0.70      0.70      1199
     
    diff --git a/ml-fundamentals/ml-overview.html b/ml-fundamentals/ml-overview.html index 7a303b9cbb..c42f8b4235 100644 --- a/ml-fundamentals/ml-overview.html +++ b/ml-fundamentals/ml-overview.html @@ -238,10 +238,32 @@

    Ocademy Open Machine Learning Book

    5.3. NumPy -
  • +
  • 5.4. Pandas + + +
  • @@ -254,8 +276,8 @@

    Ocademy Open Machine Learning Book

    6. Data visualization - -
  • - - 37.45. ML linear regression - assignment 1 - -
  • -
  • - - 37.46. ML linear regression - assignment 2 + + 37.45. Linear regression - California Housing
  • - 37.47. Linear Regression Metrics + 37.46. Linear Regression Metrics
  • - 37.48. Loss Function + 37.47. Loss Function
  • - 37.49. Gradient descent + 37.48. Gradient descent + +
  • +
  • + + 37.49. Linear Regression Implementation from Scratch
  • - 37.51. ML logistic regression - assignment 1 + 37.50. ML logistic regression - assignment 1
  • - 37.52. ML logistic regression - assignment 2 + 37.51. ML logistic regression - assignment 2
  • - 37.53. ML neural network - Assignment 1 + 37.52. ML neural network - Assignment 1
  • - 37.54. Regression tools + 37.53. Regression tools
  • - 37.55. Managing data + 37.54. Managing data
  • - 37.56. Exploring visualizations + 37.55. Exploring visualizations
  • - 37.57. Try a different model + 37.56. Try a different model
  • - 37.58. Create a regression model + 37.57. Create a regression model
  • - 37.59. Linear and polynomial regression + 37.58. Linear and polynomial regression
  • - 37.60. Retrying some regression + 37.59. Retrying some regression
  • - 37.61. Pumpkin varieties and color + 37.60. Pumpkin varieties and color
  • - 37.62. Delicious asian and indian cuisines + 37.61. Delicious asian and indian cuisines
  • - 37.63. Explore classification methods - -
  • -
  • - - 37.64. Linear Regression Implementation from Scratch + 37.62. Explore classification methods
  • - 37.65. Kernel method assignment 1 + 37.63. Kernel method assignment 1
  • - 37.66. Support Vector Machines (SVM) - Intro and SVM for Regression + 37.64. Support Vector Machines (SVM) - Intro and SVM for Regression
  • - 37.67. Support Vector Machines (SVM) - Classification + 37.65. Support Vector Machines (SVM) - Classification
  • - 37.68. Decision Trees - Intro and Regression + 37.66. Decision Trees - Intro and Regression
  • - 37.69. Decision Trees - Classification + 37.67. Decision Trees - Classification
  • - 37.70. Model selection assignment 1 + 37.68. Model selection assignment 1
  • - 37.71. Learning Curve To Identify Overfit & Underfit + 37.69. Learning Curve To Identify Overfit & Underfit
  • - 37.72. Dropout and Batch Normalization + 37.70. Dropout and Batch Normalization
  • - 37.73. Lasso and Ridge Regression + 37.71. Lasso and Ridge Regression
  • - 37.74. Regularized Linear Models + 37.72. Regularized Linear Models
  • - 37.75. Random forests intro and regression + 37.73. Random forests intro and regression
  • - 37.76. Random forests for classification + 37.74. Random forests for classification
  • - 37.77. Beyond random forests: more ensemble models + 37.75. Beyond random forests: more ensemble models
  • - 37.78. Decision trees + 37.76. Decision trees
  • - 37.79. Hyperparameter tuning gradient boosting + 37.77. Hyperparameter tuning gradient boosting
  • - 37.80. Gradient boosting + 37.78. Gradient boosting
  • - 37.81. Boosting with tuning + 37.79. Boosting with tuning
  • - 37.82. Random Forest Classifier with Feature Importance + 37.80. Random Forest Classifier with Feature Importance
  • - 37.84. Data engineering + 37.82. Data engineering
  • - 37.85. Counterintuitive Challenges in ML Debugging + 37.83. Counterintuitive Challenges in ML Debugging
  • - 37.86. Case Study: Debugging in Classification + 37.84. Case Study: Debugging in Classification
  • - 37.87. Case Study: Debugging in Regression + 37.85. Case Study: Debugging in Regression
  • - 37.88. Study the solvers + 37.86. Study the solvers
  • - 37.89. Build classification models + 37.87. Build classification models
  • - 37.90. Build Classification Model + 37.88. Build Classification Model
  • - 37.91. Parameter play + 37.89. Parameter play
  • - 37.92. How to choose cnn architecture mnist + 37.90. How to choose cnn architecture mnist
  • - 37.94. Sign Language Digits Classification with CNN + 37.92. Sign Language Digits Classification with CNN
  • - 37.96. Object Recognition in Images using CNN + 37.94. Object Recognition in Images using CNN
  • - 37.97. Intro to TensorFlow for Deep Learning + 37.95. Intro to TensorFlow for Deep Learning
  • - 37.99. Bitcoin LSTM Model with Tweet Volume and Sentiment + 37.97. Bitcoin LSTM Model with Tweet Volume and Sentiment
  • - 37.101. Google Stock Price Prediction RNN + 37.99. Google Stock Price Prediction RNN
  • - 37.103. Intro to Autoencoders + 37.101. Intro to Autoencoders
  • - 37.104. Base/Denoising Autoencoder & Dimension Reduction + 37.102. Base/Denoising Autoencoder & Dimension Reduction
  • - 37.105. Fun with Variational Autoencoders + 37.103. Fun with Variational Autoencoders
  • - 37.106. Time Series Forecasting Assignment + 37.104. Time Series Forecasting Assignment
  • - 37.108. Neural Networks for Classification with TensorFlow + 37.106. Neural Networks for Classification with TensorFlow
  • - 37.109. NN Classify 15 Fruits Assignment + 37.107. NN Classify 15 Fruits Assignment
  • - 37.114. DQN On Foreign Exchange Market + 37.112. DQN On Foreign Exchange Market
  • - 37.115. Art by gan + 37.113. Art by gan
  • - 37.117. Generative Adversarial Networks (GANs) + 37.115. Generative Adversarial Networks (GANs)
  • - 37.118. Basic classification: Classify images of clothing + 37.116. Basic classification: Classify images of clothing
  • @@ -1137,8 +1154,8 @@

    Ocademy Open Machine Learning Book

    38. Slides - -
    -
    -
    -
    Mean error: 2.6 (9.52%)
    -Model determination:  0.9505769161049876
    +
    Mean error: 2.51 (9.19%)
    +Model determination:  0.9554938013125742
     
    diff --git a/ml-fundamentals/regression/logistic-regression.html b/ml-fundamentals/regression/logistic-regression.html index a968d5ead6..e20d99c4d7 100644 --- a/ml-fundamentals/regression/logistic-regression.html +++ b/ml-fundamentals/regression/logistic-regression.html @@ -238,10 +238,32 @@

    Ocademy Open Machine Learning Book

    5.3. NumPy
    -
  • +
  • 5.4. Pandas + + +
  • @@ -254,8 +276,8 @@

    Ocademy Open Machine Learning Book

    6. Data visualization - -
  • - - 37.45. ML linear regression - assignment 1 - -
  • -
  • - - 37.46. ML linear regression - assignment 2 + + 37.45. Linear regression - California Housing
  • - 37.47. Linear Regression Metrics + 37.46. Linear Regression Metrics
  • - 37.48. Loss Function + 37.47. Loss Function
  • - 37.49. Gradient descent + 37.48. Gradient descent + +
  • +
  • + + 37.49. Linear Regression Implementation from Scratch
  • - 37.51. ML logistic regression - assignment 1 + 37.50. ML logistic regression - assignment 1
  • - 37.52. ML logistic regression - assignment 2 + 37.51. ML logistic regression - assignment 2
  • - 37.53. ML neural network - Assignment 1 + 37.52. ML neural network - Assignment 1
  • - 37.54. Regression tools + 37.53. Regression tools
  • - 37.55. Managing data + 37.54. Managing data
  • - 37.56. Exploring visualizations + 37.55. Exploring visualizations
  • - 37.57. Try a different model + 37.56. Try a different model
  • - 37.58. Create a regression model + 37.57. Create a regression model
  • - 37.59. Linear and polynomial regression + 37.58. Linear and polynomial regression
  • - 37.60. Retrying some regression + 37.59. Retrying some regression
  • - 37.61. Pumpkin varieties and color + 37.60. Pumpkin varieties and color
  • - 37.62. Delicious asian and indian cuisines + 37.61. Delicious asian and indian cuisines
  • - 37.63. Explore classification methods - -
  • -
  • - - 37.64. Linear Regression Implementation from Scratch + 37.62. Explore classification methods
  • - 37.65. Kernel method assignment 1 + 37.63. Kernel method assignment 1
  • - 37.66. Support Vector Machines (SVM) - Intro and SVM for Regression + 37.64. Support Vector Machines (SVM) - Intro and SVM for Regression
  • - 37.67. Support Vector Machines (SVM) - Classification + 37.65. Support Vector Machines (SVM) - Classification
  • - 37.68. Decision Trees - Intro and Regression + 37.66. Decision Trees - Intro and Regression
  • - 37.69. Decision Trees - Classification + 37.67. Decision Trees - Classification
  • - 37.70. Model selection assignment 1 + 37.68. Model selection assignment 1
  • - 37.71. Learning Curve To Identify Overfit & Underfit + 37.69. Learning Curve To Identify Overfit & Underfit
  • - 37.72. Dropout and Batch Normalization + 37.70. Dropout and Batch Normalization
  • - 37.73. Lasso and Ridge Regression + 37.71. Lasso and Ridge Regression
  • - 37.74. Regularized Linear Models + 37.72. Regularized Linear Models
  • - 37.75. Random forests intro and regression + 37.73. Random forests intro and regression
  • - 37.76. Random forests for classification + 37.74. Random forests for classification
  • - 37.77. Beyond random forests: more ensemble models + 37.75. Beyond random forests: more ensemble models
  • - 37.78. Decision trees + 37.76. Decision trees
  • - 37.79. Hyperparameter tuning gradient boosting + 37.77. Hyperparameter tuning gradient boosting
  • - 37.80. Gradient boosting + 37.78. Gradient boosting
  • - 37.81. Boosting with tuning + 37.79. Boosting with tuning
  • - 37.82. Random Forest Classifier with Feature Importance + 37.80. Random Forest Classifier with Feature Importance
  • - 37.84. Data engineering + 37.82. Data engineering
  • - 37.85. Counterintuitive Challenges in ML Debugging + 37.83. Counterintuitive Challenges in ML Debugging
  • - 37.86. Case Study: Debugging in Classification + 37.84. Case Study: Debugging in Classification
  • - 37.87. Case Study: Debugging in Regression + 37.85. Case Study: Debugging in Regression
  • - 37.88. Study the solvers + 37.86. Study the solvers
  • - 37.89. Build classification models + 37.87. Build classification models
  • - 37.90. Build Classification Model + 37.88. Build Classification Model
  • - 37.91. Parameter play + 37.89. Parameter play
  • - 37.92. How to choose cnn architecture mnist + 37.90. How to choose cnn architecture mnist
  • - 37.94. Sign Language Digits Classification with CNN + 37.92. Sign Language Digits Classification with CNN
  • - 37.96. Object Recognition in Images using CNN + 37.94. Object Recognition in Images using CNN
  • - 37.97. Intro to TensorFlow for Deep Learning + 37.95. Intro to TensorFlow for Deep Learning
  • - 37.99. Bitcoin LSTM Model with Tweet Volume and Sentiment + 37.97. Bitcoin LSTM Model with Tweet Volume and Sentiment
  • - 37.101. Google Stock Price Prediction RNN + 37.99. Google Stock Price Prediction RNN
  • - 37.103. Intro to Autoencoders + 37.101. Intro to Autoencoders
  • - 37.104. Base/Denoising Autoencoder & Dimension Reduction + 37.102. Base/Denoising Autoencoder & Dimension Reduction
  • - 37.105. Fun with Variational Autoencoders + 37.103. Fun with Variational Autoencoders
  • - 37.106. Time Series Forecasting Assignment + 37.104. Time Series Forecasting Assignment
  • - 37.108. Neural Networks for Classification with TensorFlow + 37.106. Neural Networks for Classification with TensorFlow
  • - 37.109. NN Classify 15 Fruits Assignment + 37.107. NN Classify 15 Fruits Assignment
  • - 37.114. DQN On Foreign Exchange Market + 37.112. DQN On Foreign Exchange Market
  • - 37.115. Art by gan + 37.113. Art by gan
  • - 37.117. Generative Adversarial Networks (GANs) + 37.115. Generative Adversarial Networks (GANs)
  • - 37.118. Basic classification: Classify images of clothing + 37.116. Basic classification: Classify images of clothing
  • @@ -1137,8 +1154,8 @@

    Ocademy Open Machine Learning Book

    38. Slides - -

    @@ -2141,7 +2160,7 @@

    11.4.5.3. Violin plot -
    <seaborn.axisgrid.FacetGrid at 0x7f4914ba8340>
    +
    <seaborn.axisgrid.FacetGrid at 0x7f947ddb6f10>
     
    ../../_images/logistic-regression_10_1.png diff --git a/ml-fundamentals/regression/managing-data.html b/ml-fundamentals/regression/managing-data.html index 9ee32f1d17..eb59966992 100644 --- a/ml-fundamentals/regression/managing-data.html +++ b/ml-fundamentals/regression/managing-data.html @@ -236,10 +236,32 @@

    Ocademy Open Machine Learning Book

    5.3. NumPy
    -
  • +
  • 5.4. Pandas + + +
  • @@ -252,8 +274,8 @@

    Ocademy Open Machine Learning Book

    6. Data visualization - -
  • - - 37.45. ML linear regression - assignment 1 - -
  • -
  • - - 37.46. ML linear regression - assignment 2 + + 37.45. Linear regression - California Housing
  • - 37.47. Linear Regression Metrics + 37.46. Linear Regression Metrics
  • - 37.48. Loss Function + 37.47. Loss Function
  • - 37.49. Gradient descent + 37.48. Gradient descent + +
  • +
  • + + 37.49. Linear Regression Implementation from Scratch
  • - 37.51. ML logistic regression - assignment 1 + 37.50. ML logistic regression - assignment 1
  • - 37.52. ML logistic regression - assignment 2 + 37.51. ML logistic regression - assignment 2
  • - 37.53. ML neural network - Assignment 1 + 37.52. ML neural network - Assignment 1
  • - 37.54. Regression tools + 37.53. Regression tools
  • - 37.55. Managing data + 37.54. Managing data
  • - 37.56. Exploring visualizations + 37.55. Exploring visualizations
  • - 37.57. Try a different model + 37.56. Try a different model
  • - 37.58. Create a regression model + 37.57. Create a regression model
  • - 37.59. Linear and polynomial regression + 37.58. Linear and polynomial regression
  • - 37.60. Retrying some regression + 37.59. Retrying some regression
  • - 37.61. Pumpkin varieties and color + 37.60. Pumpkin varieties and color
  • - 37.62. Delicious asian and indian cuisines + 37.61. Delicious asian and indian cuisines
  • - 37.63. Explore classification methods - -
  • -
  • - - 37.64. Linear Regression Implementation from Scratch + 37.62. Explore classification methods
  • - 37.65. Kernel method assignment 1 + 37.63. Kernel method assignment 1
  • - 37.66. Support Vector Machines (SVM) - Intro and SVM for Regression + 37.64. Support Vector Machines (SVM) - Intro and SVM for Regression
  • - 37.67. Support Vector Machines (SVM) - Classification + 37.65. Support Vector Machines (SVM) - Classification
  • - 37.68. Decision Trees - Intro and Regression + 37.66. Decision Trees - Intro and Regression
  • - 37.69. Decision Trees - Classification + 37.67. Decision Trees - Classification
  • - 37.70. Model selection assignment 1 + 37.68. Model selection assignment 1
  • - 37.71. Learning Curve To Identify Overfit & Underfit + 37.69. Learning Curve To Identify Overfit & Underfit
  • - 37.72. Dropout and Batch Normalization + 37.70. Dropout and Batch Normalization
  • - 37.73. Lasso and Ridge Regression + 37.71. Lasso and Ridge Regression
  • - 37.74. Regularized Linear Models + 37.72. Regularized Linear Models
  • - 37.75. Random forests intro and regression + 37.73. Random forests intro and regression
  • - 37.76. Random forests for classification + 37.74. Random forests for classification
  • - 37.77. Beyond random forests: more ensemble models + 37.75. Beyond random forests: more ensemble models
  • - 37.78. Decision trees + 37.76. Decision trees
  • - 37.79. Hyperparameter tuning gradient boosting + 37.77. Hyperparameter tuning gradient boosting
  • - 37.80. Gradient boosting + 37.78. Gradient boosting
  • - 37.81. Boosting with tuning + 37.79. Boosting with tuning
  • - 37.82. Random Forest Classifier with Feature Importance + 37.80. Random Forest Classifier with Feature Importance
  • - 37.84. Data engineering + 37.82. Data engineering
  • - 37.85. Counterintuitive Challenges in ML Debugging + 37.83. Counterintuitive Challenges in ML Debugging
  • - 37.86. Case Study: Debugging in Classification + 37.84. Case Study: Debugging in Classification
  • - 37.87. Case Study: Debugging in Regression + 37.85. Case Study: Debugging in Regression
  • - 37.88. Study the solvers + 37.86. Study the solvers
  • - 37.89. Build classification models + 37.87. Build classification models
  • - 37.90. Build Classification Model + 37.88. Build Classification Model
  • - 37.91. Parameter play + 37.89. Parameter play
  • - 37.92. How to choose cnn architecture mnist + 37.90. How to choose cnn architecture mnist
  • - 37.94. Sign Language Digits Classification with CNN + 37.92. Sign Language Digits Classification with CNN
  • - 37.96. Object Recognition in Images using CNN + 37.94. Object Recognition in Images using CNN
  • - 37.97. Intro to TensorFlow for Deep Learning + 37.95. Intro to TensorFlow for Deep Learning
  • - 37.99. Bitcoin LSTM Model with Tweet Volume and Sentiment + 37.97. Bitcoin LSTM Model with Tweet Volume and Sentiment
  • - 37.101. Google Stock Price Prediction RNN + 37.99. Google Stock Price Prediction RNN
  • - 37.103. Intro to Autoencoders + 37.101. Intro to Autoencoders
  • - 37.104. Base/Denoising Autoencoder & Dimension Reduction + 37.102. Base/Denoising Autoencoder & Dimension Reduction
  • - 37.105. Fun with Variational Autoencoders + 37.103. Fun with Variational Autoencoders
  • - 37.106. Time Series Forecasting Assignment + 37.104. Time Series Forecasting Assignment
  • - 37.108. Neural Networks for Classification with TensorFlow + 37.106. Neural Networks for Classification with TensorFlow
  • - 37.109. NN Classify 15 Fruits Assignment + 37.107. NN Classify 15 Fruits Assignment
  • - 37.114. DQN On Foreign Exchange Market + 37.112. DQN On Foreign Exchange Market
  • - 37.115. Art by gan + 37.113. Art by gan
  • - 37.117. Generative Adversarial Networks (GANs) + 37.115. Generative Adversarial Networks (GANs)
  • - 37.118. Basic classification: Classify images of clothing + 37.116. Basic classification: Classify images of clothing
  • @@ -1135,8 +1152,8 @@

    Ocademy Open Machine Learning Book

    38. Slides - -

    38. Slides

    previous

    -

    37.118. Basic classification: Classify images of clothing

    +

    37.116. Basic classification: Classify images of clothing

    diff --git a/slides/ml-advanced/kernel-method.html b/slides/ml-advanced/kernel-method.html index c26f4c5031..8c1727c5ca 100644 --- a/slides/ml-advanced/kernel-method.html +++ b/slides/ml-advanced/kernel-method.html @@ -236,10 +236,32 @@

    Ocademy Open Machine Learning Book

    5.3. NumPy
    -
  • +
  • 5.4. Pandas + + +
  • @@ -252,8 +274,8 @@

    Ocademy Open Machine Learning Book

    6. Data visualization - -
  • - - 37.45. ML linear regression - assignment 1 - -
  • -
  • - - 37.46. ML linear regression - assignment 2 + + 37.45. Linear regression - California Housing
  • - 37.47. Linear Regression Metrics + 37.46. Linear Regression Metrics
  • - 37.48. Loss Function + 37.47. Loss Function
  • - 37.49. Gradient descent + 37.48. Gradient descent + +
  • +
  • + + 37.49. Linear Regression Implementation from Scratch
  • - 37.51. ML logistic regression - assignment 1 + 37.50. ML logistic regression - assignment 1
  • - 37.52. ML logistic regression - assignment 2 + 37.51. ML logistic regression - assignment 2
  • - 37.53. ML neural network - Assignment 1 + 37.52. ML neural network - Assignment 1
  • - 37.54. Regression tools + 37.53. Regression tools
  • - 37.55. Managing data + 37.54. Managing data
  • - 37.56. Exploring visualizations + 37.55. Exploring visualizations
  • - 37.57. Try a different model + 37.56. Try a different model
  • - 37.58. Create a regression model + 37.57. Create a regression model
  • - 37.59. Linear and polynomial regression + 37.58. Linear and polynomial regression
  • - 37.60. Retrying some regression + 37.59. Retrying some regression
  • - 37.61. Pumpkin varieties and color + 37.60. Pumpkin varieties and color
  • - 37.62. Delicious asian and indian cuisines + 37.61. Delicious asian and indian cuisines
  • - 37.63. Explore classification methods - -
  • -
  • - - 37.64. Linear Regression Implementation from Scratch + 37.62. Explore classification methods
  • - 37.65. Kernel method assignment 1 + 37.63. Kernel method assignment 1
  • - 37.66. Support Vector Machines (SVM) - Intro and SVM for Regression + 37.64. Support Vector Machines (SVM) - Intro and SVM for Regression
  • - 37.67. Support Vector Machines (SVM) - Classification + 37.65. Support Vector Machines (SVM) - Classification
  • - 37.68. Decision Trees - Intro and Regression + 37.66. Decision Trees - Intro and Regression
  • - 37.69. Decision Trees - Classification + 37.67. Decision Trees - Classification
  • - 37.70. Model selection assignment 1 + 37.68. Model selection assignment 1
  • - 37.71. Learning Curve To Identify Overfit & Underfit + 37.69. Learning Curve To Identify Overfit & Underfit
  • - 37.72. Dropout and Batch Normalization + 37.70. Dropout and Batch Normalization
  • - 37.73. Lasso and Ridge Regression + 37.71. Lasso and Ridge Regression
  • - 37.74. Regularized Linear Models + 37.72. Regularized Linear Models
  • - 37.75. Random forests intro and regression + 37.73. Random forests intro and regression
  • - 37.76. Random forests for classification + 37.74. Random forests for classification
  • - 37.77. Beyond random forests: more ensemble models + 37.75. Beyond random forests: more ensemble models
  • - 37.78. Decision trees + 37.76. Decision trees
  • - 37.79. Hyperparameter tuning gradient boosting + 37.77. Hyperparameter tuning gradient boosting
  • - 37.80. Gradient boosting + 37.78. Gradient boosting
  • - 37.81. Boosting with tuning + 37.79. Boosting with tuning
  • - 37.82. Random Forest Classifier with Feature Importance + 37.80. Random Forest Classifier with Feature Importance
  • - 37.84. Data engineering + 37.82. Data engineering
  • - 37.85. Counterintuitive Challenges in ML Debugging + 37.83. Counterintuitive Challenges in ML Debugging
  • - 37.86. Case Study: Debugging in Classification + 37.84. Case Study: Debugging in Classification
  • - 37.87. Case Study: Debugging in Regression + 37.85. Case Study: Debugging in Regression
  • - 37.88. Study the solvers + 37.86. Study the solvers
  • - 37.89. Build classification models + 37.87. Build classification models
  • - 37.90. Build Classification Model + 37.88. Build Classification Model
  • - 37.91. Parameter play + 37.89. Parameter play
  • - 37.92. How to choose cnn architecture mnist + 37.90. How to choose cnn architecture mnist
  • - 37.94. Sign Language Digits Classification with CNN + 37.92. Sign Language Digits Classification with CNN
  • - 37.96. Object Recognition in Images using CNN + 37.94. Object Recognition in Images using CNN
  • - 37.97. Intro to TensorFlow for Deep Learning + 37.95. Intro to TensorFlow for Deep Learning
  • - 37.99. Bitcoin LSTM Model with Tweet Volume and Sentiment + 37.97. Bitcoin LSTM Model with Tweet Volume and Sentiment
  • - 37.101. Google Stock Price Prediction RNN + 37.99. Google Stock Price Prediction RNN
  • - 37.103. Intro to Autoencoders + 37.101. Intro to Autoencoders
  • - 37.104. Base/Denoising Autoencoder & Dimension Reduction + 37.102. Base/Denoising Autoencoder & Dimension Reduction
  • - 37.105. Fun with Variational Autoencoders + 37.103. Fun with Variational Autoencoders
  • - 37.106. Time Series Forecasting Assignment + 37.104. Time Series Forecasting Assignment
  • - 37.108. Neural Networks for Classification with TensorFlow + 37.106. Neural Networks for Classification with TensorFlow
  • - 37.109. NN Classify 15 Fruits Assignment + 37.107. NN Classify 15 Fruits Assignment
  • - 37.114. DQN On Foreign Exchange Market + 37.112. DQN On Foreign Exchange Market
  • - 37.115. Art by gan + 37.113. Art by gan
  • - 37.117. Generative Adversarial Networks (GANs) + 37.115. Generative Adversarial Networks (GANs)
  • - 37.118. Basic classification: Classify images of clothing + 37.116. Basic classification: Classify images of clothing
  • @@ -1135,8 +1152,8 @@

    Ocademy Open Machine Learning Book

    38. Slides - -