diff --git a/.github/scripts/clean_kernelspecs.py b/.github/scripts/clean_kernelspecs.py new file mode 100644 index 0000000..c6e5e85 --- /dev/null +++ b/.github/scripts/clean_kernelspecs.py @@ -0,0 +1,14 @@ +import nbformat +import glob + +for nb_path in glob.glob("**/*.ipynb", recursive=True): + with open(nb_path) as f: + nb = nbformat.read(f, as_version=4) + nb['metadata']['kernelspec'] = { + "name": "python3", + "display_name": "Python 3", + "language": "python" + } + with open(nb_path, 'w') as f: + nbformat.write(nb, f) + diff --git a/.github/workflows/build_jb.yml b/.github/workflows/build_jb.yml index 2fbfac1..46a6653 100644 --- a/.github/workflows/build_jb.yml +++ b/.github/workflows/build_jb.yml @@ -24,5 +24,8 @@ jobs: run: | pip install -r practicals_jn_book/requirements.txt + - name: Clean notebook kernelspecs + run: python .github/scripts/clean_kernelspecs.py + - name: Build documentation (only on macos-latest) run: jupyter-book build practicals_jn_book --all -W diff --git a/big_data_environment.yml b/big_data_environment.yml index b30b3bc..9e5a5fb 100644 --- a/big_data_environment.yml +++ b/big_data_environment.yml @@ -3,7 +3,7 @@ channels: - conda-forge dependencies: - python>=3.9 - - pandas>=2.2 + - pandas>=3.0.1 - numpy>=2.2 - openpyxl>=3.1 - pyarrow>=19.0 diff --git a/practicals_jn_book/requirements.txt b/practicals_jn_book/requirements.txt index 019f037..805cbf2 100644 --- a/practicals_jn_book/requirements.txt +++ b/practicals_jn_book/requirements.txt @@ -1,4 +1,4 @@ -pandas>=2.2 +pandas>=3.0.1 numpy>=2.2 scikit-learn==1.6.1 seaborn==0.13.2 @@ -6,3 +6,4 @@ scipy>=1.15 matplotlib==3.10.0 jupyter-book==1.0 pyarrow>=19.0 +nbformat diff --git a/practicals_jn_book/week_1/finalbook_part1.ipynb b/practicals_jn_book/week_1/finalbook_part1.ipynb index 9a78002..d8627d3 100644 --- a/practicals_jn_book/week_1/finalbook_part1.ipynb +++ b/practicals_jn_book/week_1/finalbook_part1.ipynb @@ -2,7 +2,7 @@ "cells": [ { "cell_type": "code", - "execution_count": 1, + "execution_count": 11, "metadata": { "tags": [ "hide-input" @@ -13,9 +13,9 @@ "name": "stdout", "output_type": "stream", "text": [ - "My Python version is: 3.11.1\n", - "My Numpy version is: 1.26.4\n", - "My Pandas version is: 2.2.2\n" + "My Python version is: 3.13.12\n", + "My Numpy version is: 2.4.2\n", + "My Pandas version is: 3.0.1\n" ] } ], @@ -86,8 +86,9 @@ }, { "cell_type": "code", - "execution_count": 23, + "execution_count": 12, "metadata": { + "scrolled": true, "tags": [ "hide-input" ] @@ -171,7 +172,7 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": 13, "metadata": { "scrolled": true, "tags": [ @@ -198,7 +199,7 @@ "4 Dennis Cornelius\n", "5 Brett Gibbs\n", "6 John Haack\n", - "Name: Name, dtype: object \n", + "Name: Name, dtype: str \n", "\n", " Name\n", "0 Andrzej Stanaszek\n", @@ -248,7 +249,7 @@ }, { "cell_type": "code", - "execution_count": 24, + "execution_count": 14, "metadata": { "scrolled": true, "tags": [ @@ -294,91 +295,6 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "## Copy\n", - "\n", - "We already briefly mentioned that slicing in Pandas (and most other Python objects) returns a view not a copy. This might be a little counter intuitive if you're not familiar with general purpose programming languages (MATLAB is not). We do not want to mess with our lifter_df, so we will make a new dataframe for this assignment with three columns, ranging from 1-10:\n", - "```python\n", - "df1 = pd.DataFrame({\"X\": list(range(10)), \"Y\": list(range(10)), \"Z\": list(range(10))})\n", - "```\n", - "\n", - "### Assignment 3\n", - "\n", - "- **Make a slice of the first five rows using .iloc or .loc and assign it to a new variable.**\n", - "\n", - "- **Select all samples with .iloc or .loc and set all samples in the new variable to 0 and print the DataFrame.**\n", - "\n", - "- **Now print the original DataFrame. What do you notice?**\n", - "\n", - "You should get something like this:" - ] - }, - { - "cell_type": "code", - "execution_count": 25, - "metadata": { - "scrolled": true, - "tags": [ - "hide-input" - ] - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Sliced df:\n", - " X Y Z\n", - "0 0 0 0\n", - "1 0 0 0\n", - "2 0 0 0\n", - "3 0 0 0\n", - "4 0 0 0 \n", - "\n", - "Original df:\n", - " X Y Z\n", - "0 0 0 0\n", - "1 0 0 0\n", - "2 0 0 0\n", - "3 0 0 0\n", - "4 0 0 0\n", - "5 5 5 5\n", - "6 6 6 6\n", - "7 7 7 7\n", - "8 8 8 8\n", - "9 9 9 9\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/var/folders/d6/sgv22vx10fb8mj7yrljzpkch0000gn/T/ipykernel_9819/483482325.py:3: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " df2.loc[:] = 0\n" - ] - } - ], - "source": [ - "df1 = pd.DataFrame({\"X\": list(range(10)), \"Y\": list(range(10)), \"Z\": list(range(10))})\n", - "df2 = df1.iloc[:5, :]\n", - "df2.loc[:] = 0\n", - "print(\"Sliced df:\\n\", df2, \"\\n\") # \\n gives you an empty line after your print statement for readability\n", - "print(\"Original df:\\n\", df1)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "```{warning}\n", - "Oh no, you've not only altered df1, but also df2. This is because the slicing operation gave you a view into the DataFrame, but not a copy of the data. Again, this saves a lot of memory, but it can mess up your data! Luckily Pandas gives us a warning when we try to do this!\n", - "```\n", - "\n", - "To prevent this problem you can use the ``.copy()`` method which returns you a copy and not a view.\n", - "\n", - "Note: whether Pandas returns a copy or a view is actually a pretty delicate topic, but just assume you get a view and use ``.copy()`` when you plan on changing the contents of the DataFrame.\n", "\n", "## Accessors\n", "\n", @@ -398,7 +314,7 @@ "\n", "Cleaning up strings is a common operation in data science. Always check (your column names) for unwanted whitespace!\n", "\n", - "### Assignment 4\n", + "### Assignment 3\n", "\n", "Consider an entry like this: {\"Name\": \"ALEXEY Kuzmin\", \"Age\": 34, \"Totalkg\": 527.25}. We can add it to the dataframe using the [concat](https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.concat.html) method: \n", "\n", @@ -423,7 +339,7 @@ }, { "cell_type": "code", - "execution_count": 26, + "execution_count": 15, "metadata": { "tags": [ "hide-input" @@ -521,7 +437,7 @@ "7 Alexey Kuzmin 34.0 527.25" ] }, - "execution_count": 26, + "execution_count": 15, "metadata": {}, "output_type": "execute_result" } @@ -538,7 +454,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "### Assignment 5\n", + "### Assignment 4\n", "\n", "````{margin}\n", "```{admonition} Tip\n", @@ -556,7 +472,7 @@ }, { "cell_type": "code", - "execution_count": 27, + "execution_count": 16, "metadata": { "tags": [ "hide-input" @@ -672,7 +588,7 @@ "7 Alexey Kuzmin Alexey Kuzmin 34.0 527.25" ] }, - "execution_count": 27, + "execution_count": 16, "metadata": {}, "output_type": "execute_result" } @@ -713,7 +629,7 @@ "df_lifters = df_lifters.dropna().sort_values(by=\"Totalkg\", ascending=False)\n", "```\n", "\n", - "### Assignment 6\n", + "### Assignment 5\n", "\n", "- **First sort all the data by Totalkg score, make sure the Totalkg is on top of your DataFrame. Print out the DataFrame. What do you notice?**\n", "\n", @@ -728,7 +644,7 @@ }, { "cell_type": "code", - "execution_count": 28, + "execution_count": 17, "metadata": { "tags": [ "hide-input" @@ -798,9 +714,9 @@ "celltoolbar": "Tags", "hide_input": false, "kernelspec": { - "display_name": "big_data_environment", + "display_name": "Python [conda env:big_data_environment]", "language": "python", - "name": "python3" + "name": "conda-env-big_data_environment-py" }, "language_info": { "codemirror_mode": { @@ -812,7 +728,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.13.2" + "version": "3.13.12" }, "toc": { "base_numbering": 1, diff --git a/practicals_jn_book/week_1/finalbook_part2.ipynb b/practicals_jn_book/week_1/finalbook_part2.ipynb index 2e30cdb..f34a313 100644 --- a/practicals_jn_book/week_1/finalbook_part2.ipynb +++ b/practicals_jn_book/week_1/finalbook_part2.ipynb @@ -2,7 +2,7 @@ "cells": [ { "cell_type": "code", - "execution_count": 1, + "execution_count": 60, "metadata": { "tags": [ "remove-cell" @@ -13,9 +13,9 @@ "name": "stdout", "output_type": "stream", "text": [ - "My Python version is: 3.13.2\n", - "My Numpy version is: 2.2.4\n", - "My Pandas version is: 2.2.3\n" + "My Python version is: 3.13.12\n", + "My Numpy version is: 2.4.2\n", + "My Pandas version is: 3.0.1\n" ] } ], @@ -64,7 +64,7 @@ "\n", "You can pretty much coerce any file into a DataFrame with these methods. You will always need to parse some data yourself, but try to minimize that as much as reasonable (your implementation is probably not as fast as theirs, if it is, send them a pull request).\n", "\n", - "### Assignment 7\n", + "### Assignment 6\n", "\n", "We prepared a subset of the powerlifting data on [here](https://raw.githubusercontent.com/Alek050/big_data_practicals/refs/heads/main/data/week_1/IPF_Worlds.csv). It only contains data from the World Championships for the International Powerlifting Federation.\n", "\n", @@ -79,7 +79,7 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": 61, "metadata": { "scrolled": true, "tags": [ @@ -89,2318 +89,6 @@ "outputs": [ { "data": { - "application/vnd.microsoft.datawrangler.viewer.v0+json": { - "columns": [ - { - "name": "index", - "rawType": "int64", - "type": "integer" - }, - { - "name": "Name", - "rawType": "object", - "type": "string" - }, - { - "name": "Sex", - "rawType": "object", - "type": "string" - }, - { - "name": "Event", - "rawType": "object", - "type": "string" - }, - { - "name": "Equipment", - "rawType": "object", - "type": "string" - }, - { - "name": "Age", - "rawType": "float64", - "type": "float" - }, - { - "name": "AgeClass", - "rawType": "object", - "type": "string" - }, - { - "name": "BirthYearClass", - "rawType": "object", - "type": "string" - }, - { - "name": "Division", - "rawType": "object", - "type": "string" - }, - { - "name": "BodyweightKg", - "rawType": "float64", - "type": "float" - }, - { - "name": "WeightClassKg", - "rawType": "object", - "type": "string" - }, - { - "name": "Squat1Kg", - "rawType": "float64", - "type": "float" - }, - { - "name": "Squat2Kg", - "rawType": "float64", - "type": "float" - }, - { - "name": "Squat3Kg", - "rawType": "float64", - "type": "float" - }, - { - "name": "Squat4Kg", - "rawType": "float64", - "type": "float" - }, - { - "name": "Best3SquatKg", - "rawType": "float64", - "type": "float" - }, - { - "name": "Bench1Kg", - "rawType": "float64", - "type": "float" - }, - { - "name": "Bench2Kg", - "rawType": "float64", - "type": "float" - }, - { - "name": "Bench3Kg", - "rawType": "float64", - "type": "float" - }, - { - "name": "Bench4Kg", - "rawType": "float64", - "type": "float" - }, - { - "name": "Best3BenchKg", - "rawType": "float64", - "type": "float" - }, - { - "name": "Deadlift1Kg", - "rawType": "float64", - "type": "float" - }, - { - "name": "Deadlift2Kg", - "rawType": "float64", - "type": "float" - }, - { - "name": "Deadlift3Kg", - "rawType": "float64", - "type": "float" - }, - { - "name": "Deadlift4Kg", - "rawType": "float64", - "type": "float" - }, - { - "name": "Best3DeadliftKg", - "rawType": "float64", - "type": "float" - }, - { - "name": "TotalKg", - "rawType": "float64", - "type": "float" - }, - { - "name": "Place", - "rawType": "object", - "type": "string" - }, - { - "name": "Wilks", - "rawType": "float64", - "type": "float" - }, - { - "name": "McCulloch", - "rawType": "float64", - "type": "float" - }, - { - "name": "Glossbrenner", - "rawType": "float64", - "type": "float" - }, - { - "name": "IPFPoints", - "rawType": "float64", - "type": "float" - }, - { - "name": "Tested", - "rawType": "object", - "type": "string" - }, - { - "name": "Country", - "rawType": "object", - "type": "string" - }, - { - "name": "Federation", - "rawType": "object", - "type": "string" - }, - { - "name": "ParentFederation", - "rawType": "object", - "type": "string" - }, - { - "name": "Date", - "rawType": "object", - "type": "string" - }, - { - "name": "MeetCountry", - "rawType": "object", - "type": "string" - }, - { - "name": "MeetState", - "rawType": "object", - "type": "unknown" - }, - { - "name": "MeetName", - "rawType": "object", - "type": "string" - } - ], - "conversionMethod": "pd.DataFrame", - "ref": "da9d9c9d-d736-49a1-b62b-e748065841a3", - "rows": [ - [ - "0", - "Sergey Fedosienko", - "M", - "SBD", - "Raw", - "31.5", - "24-34", - "24-39", - "Open", - "58.2", - "59", - "200.0", - "215.0", - "225.5", - null, - "225.5", - "150.0", - "160.0", - "165.0", - null, - "165.0", - "230.0", - "255.0", - "270.5", - null, - "270.5", - "661.0", - "1", - "579.9", - "579.9", - "567.26", - "870.42", - "Yes", - "Russia", - "IPF", - "IPF", - "2014-06-01", - "South Africa", - null, - "World Classic Powerlifting Championships" - ], - [ - "1", - "Dariusz Wszoła", - "M", - "SBD", - "Raw", - "35.5", - "35-39", - "24-39", - "Open", - "58.3", - "59", - "200.0", - "210.0", - "215.0", - null, - "215.0", - "142.5", - "150.0", - "152.5", - null, - "152.5", - "197.5", - "205.0", - "-210.0", - null, - "205.0", - "572.5", - "2", - "501.45", - "501.45", - "490.47", - "741.4", - "Yes", - "Poland", - "IPF", - "IPF", - "2014-06-01", - "South Africa", - null, - "World Classic Powerlifting Championships" - ], - [ - "2", - "Franklin León", - "M", - "SBD", - "Raw", - "30.5", - "24-34", - "24-39", - "Open", - "58.45", - "59", - "180.0", - "192.5", - "200.0", - null, - "200.0", - "130.0", - "140.0", - "-145.0", - null, - "140.0", - "210.0", - "220.0", - "-235.0", - null, - "220.0", - "560.0", - "3", - "489.31", - "489.31", - "478.53", - "721.77", - "Yes", - "Ecuador", - "IPF", - "IPF", - "2014-06-01", - "South Africa", - null, - "World Classic Powerlifting Championships" - ], - [ - "3", - "Takaharu Ebihara", - "M", - "SBD", - "Raw", - "33.5", - "24-34", - "24-39", - "Open", - "58.7", - "59", - "165.0", - "180.0", - "185.0", - null, - "185.0", - "130.0", - "140.0", - "-142.5", - null, - "140.0", - "200.0", - "210.0", - "215.0", - null, - "215.0", - "540.0", - "4", - "469.96", - "469.96", - "459.49", - "690.42", - "Yes", - "Japan", - "IPF", - "IPF", - "2014-06-01", - "South Africa", - null, - "World Classic Powerlifting Championships" - ], - [ - "4", - "Mohamed Lakehal", - "M", - "SBD", - "Raw", - "31.0", - "24-34", - "24-39", - "Open", - "58.5", - "59", - "195.0", - "210.0", - "-215.0", - null, - "210.0", - "105.0", - "110.0", - "-112.5", - null, - "110.0", - "200.0", - "215.0", - "-220.0", - null, - "215.0", - "535.0", - "5", - "467.1", - "467.1", - "456.78", - "685.25", - "Yes", - "Algeria", - "IPF", - "IPF", - "2014-06-01", - "South Africa", - null, - "World Classic Powerlifting Championships" - ], - [ - "5", - "Walter Gómez", - "M", - "SBD", - "Raw", - "24.5", - "24-34", - "24-39", - "Open", - "57.95", - "59", - "155.0", - "162.5", - "167.5", - null, - "167.5", - "112.5", - "120.0", - "125.0", - null, - "125.0", - "195.0", - "205.0", - "-210.0", - null, - "205.0", - "497.5", - "6", - "438.23", - "438.23", - "428.79", - "636.47", - "Yes", - "Ecuador", - "IPF", - "IPF", - "2014-06-01", - "South Africa", - null, - "World Classic Powerlifting Championships" - ], - [ - "6", - "Eric Kupperstein", - "M", - "SBD", - "Raw", - "48.0", - "45-49", - "40-49", - "Open", - "58.55", - "59", - "-172.5", - "-172.5", - "172.5", - null, - "172.5", - "70.0", - "75.0", - "-80.0", - null, - "75.0", - "225.0", - "235.0", - "-252.5", - null, - "235.0", - "482.5", - "7", - "420.92", - "461.75", - "411.61", - "609.2", - "Yes", - "USA", - "IPF", - "IPF", - "2014-06-01", - "South Africa", - null, - "World Classic Powerlifting Championships" - ], - [ - "7", - "Stuart Jamieson", - "M", - "SBD", - "Raw", - "24.5", - "24-34", - "24-39", - "Open", - "57.75", - "59", - "140.0", - "155.0", - "-162.5", - null, - "155.0", - "75.0", - "80.0", - "-85.0", - null, - "80.0", - "215.0", - "225.0", - "-235.0", - null, - "225.0", - "460.0", - "8", - "406.53", - "406.53", - "397.85", - "583.86", - "Yes", - "UK", - "IPF", - "IPF", - "2014-06-01", - "South Africa", - null, - "World Classic Powerlifting Championships" - ], - [ - "8", - "Mikhail Andryukhin", - "M", - "SBD", - "Raw", - "43.5", - "40-44", - "40-49", - "Open", - "65.9", - "66", - "230.0", - "240.0", - "-242.5", - null, - "240.0", - "132.5", - "137.5", - "-140.0", - null, - "137.5", - "252.5", - "265.0", - "-270.0", - null, - "265.0", - "642.5", - "1", - "505.12", - "520.78", - "490.86", - "762.76", - "Yes", - "Russia", - "IPF", - "IPF", - "2014-06-01", - "South Africa", - null, - "World Classic Powerlifting Championships" - ], - [ - "9", - "Tsung-Ting Hsieh", - "M", - "SBD", - "Raw", - "31.5", - "24-34", - "24-39", - "Open", - "63.4", - "66", - "200.0", - "210.0", - "-215.0", - null, - "210.0", - "155.0", - "160.0", - "165.0", - null, - "165.0", - "250.0", - "260.0", - "265.0", - null, - "265.0", - "640.0", - "2", - "519.81", - "519.81", - "506.1", - "783.0", - "Yes", - "Taiwan", - "IPF", - "IPF", - "2014-06-01", - "South Africa", - null, - "World Classic Powerlifting Championships" - ], - [ - "10", - "Antti Savolainen", - "M", - "SBD", - "Raw", - "35.5", - "35-39", - "24-39", - "Open", - "65.5", - "66", - "200.0", - "207.5", - "210.0", - null, - "210.0", - "150.0", - "155.0", - "-157.5", - null, - "155.0", - "255.0", - "265.0", - "-277.5", - null, - "265.0", - "630.0", - "3", - "497.79", - "497.79", - "483.88", - "749.84", - "Yes", - "Finland", - "IPF", - "IPF", - "2014-06-01", - "South Africa", - null, - "World Classic Powerlifting Championships" - ], - [ - "11", - "Sergey Skochek", - "M", - "SBD", - "Raw", - "30.5", - "24-34", - "24-39", - "Open", - "65.75", - "66", - "195.0", - "205.0", - "210.0", - null, - "210.0", - "157.5", - "167.5", - "-172.5", - null, - "167.5", - "230.0", - "-250.0", - "-255.0", - null, - "230.0", - "607.5", - "4", - "478.5", - "478.5", - "465.05", - "717.87", - "Yes", - "Russia", - "IPF", - "IPF", - "2014-06-01", - "South Africa", - null, - "World Classic Powerlifting Championships" - ], - [ - "12", - "Shawn Frasquillo", - "M", - "SBD", - "Raw", - "28.0", - "24-34", - "24-39", - "Open", - "65.05", - "66", - "182.5", - "192.5", - "197.5", - null, - "197.5", - "140.0", - "150.0", - "155.0", - null, - "155.0", - "227.5", - "240.0", - "-250.0", - null, - "240.0", - "592.5", - "5", - "470.85", - "470.85", - "457.85", - "703.98", - "Yes", - "USA", - "IPF", - "IPF", - "2014-06-01", - "South Africa", - null, - "World Classic Powerlifting Championships" - ], - [ - "13", - "Alex Ochoa", - "M", - "SBD", - "Raw", - "23.5", - "24-34", - "24-39", - "Open", - "65.45", - "66", - "190.0", - "202.5", - "210.0", - null, - "210.0", - "125.0", - "132.5", - "-137.5", - null, - "132.5", - "230.0", - "240.0", - "-252.5", - null, - "240.0", - "582.5", - "6", - "460.55", - "460.55", - "447.7", - "687.31", - "Yes", - "Ecuador", - "IPF", - "IPF", - "2014-06-01", - "South Africa", - null, - "World Classic Powerlifting Championships" - ], - [ - "14", - "Christopher Simmons", - "M", - "SBD", - "Raw", - "27.5", - "24-34", - "24-39", - "Open", - "64.55", - "66", - "-187.5", - "-187.5", - "187.5", - null, - "187.5", - "125.0", - "-140.0", - "140.0", - null, - "140.0", - "215.0", - "230.0", - "-235.0", - null, - "230.0", - "557.5", - "7", - "445.92", - "445.92", - "433.77", - "661.45", - "Yes", - "UK", - "IPF", - "IPF", - "2014-06-01", - "South Africa", - null, - "World Classic Powerlifting Championships" - ], - [ - "15", - "Jacobus Phalatsi", - "M", - "SBD", - "Raw", - "32.5", - "24-34", - "24-39", - "Open", - "64.2", - "66", - "170.0", - "185.0", - "-195.0", - null, - "185.0", - "120.0", - "130.0", - "-137.5", - null, - "130.0", - "200.0", - "210.0", - "220.0", - null, - "220.0", - "535.0", - "8", - "429.89", - "429.89", - "418.29", - "634.1", - "Yes", - "South Africa", - "IPF", - "IPF", - "2014-06-01", - "South Africa", - null, - "World Classic Powerlifting Championships" - ], - [ - "16", - "Nghiep Luu", - "M", - "SBD", - "Raw", - "38.5", - "35-39", - "24-39", - "Open", - "65.9", - "66", - "170.0", - "180.0", - "-187.5", - null, - "180.0", - "92.5", - "97.5", - "100.0", - null, - "100.0", - "255.0", - "-273.5", - "-273.5", - null, - "255.0", - "535.0", - "9", - "420.6", - "420.6", - "408.73", - "620.93", - "Yes", - "Australia", - "IPF", - "IPF", - "2014-06-01", - "South Africa", - null, - "World Classic Powerlifting Championships" - ], - [ - "17", - "Carlos Fredericks Remi", - "M", - "SBD", - "Raw", - "28.5", - "24-34", - "24-39", - "Open", - "63.3", - "66", - "152.5", - "160.0", - "167.5", - null, - "167.5", - "100.0", - "-107.5", - "-107.5", - null, - "100.0", - "-232.5", - "235.0", - "-240.0", - null, - "235.0", - "502.5", - "10", - "408.68", - "408.68", - "397.94", - "597.3", - "Yes", - "South Africa", - "IPF", - "IPF", - "2014-06-01", - "South Africa", - null, - "World Classic Powerlifting Championships" - ], - [ - "18", - "Aliaksandr Hrynkevich-Sudnik", - "M", - "SBD", - "Raw", - "37.5", - "35-39", - "24-39", - "Open", - "73.55", - "74", - "227.5", - "235.0", - "-240.0", - null, - "235.0", - "155.0", - "162.5", - "165.0", - null, - "165.0", - "282.5", - "287.5", - "-292.5", - null, - "287.5", - "687.5", - "1", - "496.68", - "496.68", - "480.31", - "757.28", - "Yes", - "Belarus", - "IPF", - "IPF", - "2014-06-01", - "South Africa", - null, - "World Classic Powerlifting Championships" - ], - [ - "19", - "Hassan El Belghiti", - "M", - "SBD", - "Raw", - "39.0", - "35-39", - "24-39", - "Open", - "72.55", - "74", - "205.0", - "217.5", - "222.5", - null, - "222.5", - "135.0", - "142.5", - "145.0", - null, - "145.0", - "285.0", - "296.5", - "310.0", - null, - "310.0", - "677.5", - "2", - "494.32", - "494.32", - "478.31", - "752.49", - "Yes", - "France", - "IPF", - "IPF", - "2014-06-01", - "South Africa", - null, - "World Classic Powerlifting Championships" - ], - [ - "20", - "Harry Shimalistos", - "M", - "SBD", - "Raw", - "28.5", - "24-34", - "24-39", - "Open", - "72.2", - "74", - "200.0", - "212.5", - "220.0", - null, - "220.0", - "140.0", - "150.0", - "-152.5", - null, - "150.0", - "270.0", - "290.0", - "305.0", - null, - "305.0", - "675.0", - "3", - "494.24", - "494.24", - "478.33", - "752.06", - "Yes", - "South Africa", - "IPF", - "IPF", - "2014-06-01", - "South Africa", - null, - "World Classic Powerlifting Championships" - ], - [ - "21", - "Kojo Gyennin", - "M", - "SBD", - "Raw", - "34.5", - "24-34", - "24-39", - "Open", - "73.1", - "74", - "227.5", - "237.5", - "242.5", - null, - "242.5", - "135.0", - "140.0", - "142.5", - null, - "142.5", - "275.0", - "290.0", - "-303.5", - null, - "290.0", - "675.0", - "4", - "489.81", - "489.81", - "473.79", - "745.29", - "Yes", - "Canada", - "IPF", - "IPF", - "2014-06-01", - "South Africa", - null, - "World Classic Powerlifting Championships" - ], - [ - "22", - "Per Berglund", - "M", - "SBD", - "Raw", - "46.5", - "45-49", - "40-49", - "Open", - "73.5", - "74", - "215.0", - "230.0", - "235.0", - null, - "235.0", - "167.5", - "-175.0", - "175.0", - null, - "175.0", - "250.0", - "260.0", - "265.0", - null, - "265.0", - "675.0", - "5", - "487.89", - "521.07", - "471.82", - "742.33", - "Yes", - "Sweden", - "IPF", - "IPF", - "2014-06-01", - "South Africa", - null, - "World Classic Powerlifting Championships" - ], - [ - "23", - "Paul Cooper", - "M", - "SBD", - "Raw", - "38.5", - "35-39", - "24-39", - "Open", - "73.15", - "74", - "200.0", - "210.0", - null, - null, - "210.0", - "155.0", - "162.5", - "-167.5", - null, - "162.5", - "265.0", - "277.5", - "285.0", - null, - "285.0", - "657.5", - "6", - "476.87", - "476.87", - "461.27", - "723.4", - "Yes", - "England", - "IPF", - "IPF", - "2014-06-01", - "South Africa", - null, - "World Classic Powerlifting Championships" - ], - [ - "24", - "Kader Baali", - "M", - "SBD", - "Raw", - "46.0", - "45-49", - "40-49", - "Open", - "73.9", - "74", - "225.0", - "-232.5", - "-237.5", - null, - "225.0", - "147.5", - "152.5", - "155.0", - null, - "155.0", - "265.0", - "277.5", - "-282.5", - null, - "277.5", - "657.5", - "7", - "473.4", - "505.59", - "457.71", - "718.05", - "Yes", - "France", - "IPF", - "IPF", - "2014-06-01", - "South Africa", - null, - "World Classic Powerlifting Championships" - ], - [ - "25", - "Ming-Hui Lin", - "M", - "SBD", - "Raw", - "31.0", - "24-34", - "24-39", - "Open", - "72.5", - "74", - "232.5", - "242.5", - "-250.0", - null, - "242.5", - "135.0", - "142.5", - "150.0", - null, - "150.0", - "245.0", - null, - null, - null, - "245.0", - "637.5", - "8", - "465.37", - "465.37", - "450.31", - "703.41", - "Yes", - "Taiwan", - "IPF", - "IPF", - "2014-06-01", - "South Africa", - null, - "World Classic Powerlifting Championships" - ], - [ - "26", - "Miguel Curipoma", - "M", - "SBD", - "Raw", - "26.5", - "24-34", - "24-39", - "Open", - "73.15", - "74", - "210.0", - "220.0", - "225.0", - null, - "225.0", - "135.0", - "140.0", - "-145.0", - null, - "140.0", - "240.0", - "250.0", - "260.0", - null, - "260.0", - "625.0", - "9", - "453.3", - "453.3", - "438.47", - "683.45", - "Yes", - "Ecuador", - "IPF", - "IPF", - "2014-06-01", - "South Africa", - null, - "World Classic Powerlifting Championships" - ], - [ - "27", - "Jordan Berke", - "M", - "SBD", - "Raw", - "24.5", - "24-34", - "24-39", - "Open", - "72.85", - "74", - "197.5", - "210.0", - "217.5", - null, - "217.5", - "150.0", - "160.0", - "-165.0", - null, - "160.0", - "232.5", - "245.0", - "-250.0", - null, - "245.0", - "622.5", - "10", - "452.83", - "452.83", - "438.09", - "682.44", - "Yes", - "USA", - "IPF", - "IPF", - "2014-06-01", - "South Africa", - null, - "World Classic Powerlifting Championships" - ], - [ - "28", - "Gayrat Ismoilov", - "M", - "SBD", - "Raw", - "26.5", - "24-34", - "24-39", - "Open", - "73.3", - "74", - "210.0", - "-217.5", - "-217.5", - null, - "210.0", - "150.0", - "157.5", - "-160.0", - null, - "157.5", - "252.5", - "-270.0", - "-270.0", - null, - "252.5", - "620.0", - "11", - "449.01", - "449.01", - "434.28", - "676.28", - "Yes", - "Uzbekistan", - "IPF", - "IPF", - "2014-06-01", - "South Africa", - null, - "World Classic Powerlifting Championships" - ], - [ - "29", - "Helmke Lucas", - "M", - "SBD", - "Raw", - "24.5", - "24-34", - "24-39", - "Open", - "73.8", - "74", - "205.0", - "215.0", - "-220.0", - null, - "215.0", - "160.0", - "165.0", - "-170.0", - null, - "165.0", - "240.0", - "-250.0", - "-250.0", - null, - "240.0", - "620.0", - "12", - "446.83", - "446.83", - "432.05", - "672.92", - "Yes", - "Australia", - "IPF", - "IPF", - "2014-06-01", - "South Africa", - null, - "World Classic Powerlifting Championships" - ], - [ - "30", - "Yue Sun", - "M", - "SBD", - "Raw", - "24.5", - "24-34", - "24-39", - "Open", - "73.55", - "74", - "187.5", - "197.5", - "205.0", - null, - "205.0", - "130.0", - "135.0", - "137.5", - null, - "137.5", - "215.0", - "222.5", - "240.0", - null, - "240.0", - "582.5", - "13", - "420.83", - "420.83", - "406.96", - "628.66", - "Yes", - "Australia", - "IPF", - "IPF", - "2014-06-01", - "South Africa", - null, - "World Classic Powerlifting Championships" - ], - [ - "31", - "Steven Tyers", - "M", - "SBD", - "Raw", - "24.5", - "24-34", - "24-39", - "Open", - "72.8", - "74", - "185.0", - "195.0", - "-200.0", - null, - "195.0", - "125.0", - "-130.0", - "130.0", - null, - "130.0", - "215.0", - "225.0", - "235.0", - null, - "235.0", - "560.0", - "14", - "407.57", - "407.57", - "394.31", - "605.71", - "Yes", - "UK", - "IPF", - "IPF", - "2014-06-01", - "South Africa", - null, - "World Classic Powerlifting Championships" - ], - [ - "32", - "José Castillo", - "M", - "SBD", - "Raw", - "27.5", - "24-34", - "24-39", - "Open", - "82.4", - "83", - "260.0", - "272.5", - "-282.5", - null, - "272.5", - "165.0", - "175.0", - "182.5", - null, - "182.5", - "300.0", - "315.0", - "-325.0", - null, - "315.0", - "770.0", - "1", - "516.2", - "516.2", - "496.72", - "793.37", - "Yes", - "Ecuador", - "IPF", - "IPF", - "2014-06-01", - "South Africa", - null, - "World Classic Powerlifting Championships" - ], - [ - "33", - "Alexey Kuzmin", - "M", - "SBD", - "Raw", - "31.5", - "24-34", - "24-39", - "Open", - "82.3", - "83", - "267.5", - "-275.0", - "-275.0", - null, - "267.5", - "177.5", - "182.5", - "-187.5", - null, - "182.5", - "290.0", - "305.0", - "-320.0", - null, - "305.0", - "755.0", - "2", - "506.52", - "506.52", - "487.42", - "776.9", - "Yes", - "Russia", - "IPF", - "IPF", - "2014-06-01", - "South Africa", - null, - "World Classic Powerlifting Championships" - ], - [ - "34", - "Derek Gove", - "M", - "SBD", - "Raw", - "26.0", - "24-34", - "24-39", - "Open", - "82.55", - "83", - "237.5", - "247.5", - "257.5", - null, - "257.5", - "142.5", - "152.5", - "-157.5", - null, - "152.5", - "272.5", - "285.0", - "290.0", - null, - "290.0", - "700.0", - "3", - "468.76", - "468.76", - "451.03", - "712.66", - "Yes", - "USA", - "IPF", - "IPF", - "2014-06-01", - "South Africa", - null, - "World Classic Powerlifting Championships" - ], - [ - "35", - "Mika Parviainen", - "M", - "SBD", - "Raw", - "34.5", - "24-34", - "24-39", - "Open", - "82.35", - "83", - "225.0", - "237.5", - "242.5", - null, - "242.5", - "155.0", - "160.0", - "165.0", - null, - "165.0", - "275.0", - "287.5", - "290.0", - null, - "290.0", - "697.5", - "4", - "467.77", - "467.77", - "450.12", - "710.98", - "Yes", - "Finland", - "IPF", - "IPF", - "2014-06-01", - "South Africa", - null, - "World Classic Powerlifting Championships" - ], - [ - "36", - "Connor Lutz", - "M", - "SBD", - "Raw", - "23.5", - "24-34", - "24-39", - "Open", - "81.4", - "83", - "225.0", - "242.5", - "-250.0", - null, - "242.5", - "185.0", - "-193.5", - "193.5", - null, - "193.5", - "245.0", - "260.0", - "-275.0", - null, - "260.0", - "696.0", - "5", - "470.06", - "470.06", - "452.57", - "714.9", - "Yes", - "Canada", - "IPF", - "IPF", - "2014-06-01", - "South Africa", - null, - "World Classic Powerlifting Championships" - ], - [ - "37", - "Łukasz Matwin", - "M", - "SBD", - "Raw", - "30.5", - "24-34", - "24-39", - "Open", - "82.4", - "83", - "200.0", - "212.5", - "217.5", - null, - "217.5", - "145.0", - "152.5", - "-155.0", - null, - "152.5", - "280.0", - "302.5", - "315.5", - null, - "315.5", - "685.5", - "6", - "459.55", - "459.55", - "442.21", - "697.0", - "Yes", - "Poland", - "IPF", - "IPF", - "2014-06-01", - "South Africa", - null, - "World Classic Powerlifting Championships" - ], - [ - "38", - "Colin Webb", - "M", - "SBD", - "Raw", - "28.5", - "24-34", - "24-39", - "Open", - "82.4", - "83", - "235.0", - "252.5", - "257.5", - null, - "257.5", - "142.5", - "152.5", - "-155.0", - null, - "152.5", - "270.0", - "-290.0", - "-290.0", - null, - "270.0", - "680.0", - "7", - "455.87", - "455.87", - "438.66", - "690.73", - "Yes", - "Australia", - "IPF", - "IPF", - "2014-06-01", - "South Africa", - null, - "World Classic Powerlifting Championships" - ], - [ - "39", - "Matthew Coppenhall", - "M", - "SBD", - "Raw", - "26.5", - "24-34", - "24-39", - "Open", - "81.45", - "83", - "215.0", - "230.0", - "240.0", - null, - "240.0", - "155.0", - "162.5", - "165.0", - null, - "165.0", - "240.0", - "250.0", - null, - null, - "250.0", - "655.0", - "8", - "442.2", - "442.2", - "425.74", - "667.5", - "Yes", - "South Africa", - "IPF", - "IPF", - "2014-06-01", - "South Africa", - null, - "World Classic Powerlifting Championships" - ], - [ - "40", - "Andrew Jovicevic", - "M", - "SBD", - "Raw", - "47.5", - "45-49", - "40-49", - "Open", - "82.4", - "83", - "195.0", - "205.0", - "-210.0", - null, - "205.0", - "160.0", - "-170.0", - "-170.0", - null, - "160.0", - "245.0", - "255.0", - "260.0", - null, - "260.0", - "625.0", - "9", - "419.0", - "453.35", - "403.18", - "628.0", - "Yes", - "Australia", - "IPF", - "IPF", - "2014-06-01", - "South Africa", - null, - "World Classic Powerlifting Championships" - ], - [ - "41", - "Ryan Miller #3", - "M", - "SBD", - "Raw", - "28.5", - "24-34", - "24-39", - "Open", - "82.0", - "83", - "185.0", - "190.0", - "-195.0", - null, - "190.0", - "150.0", - "157.5", - "165.0", - null, - "165.0", - "250.0", - "255.0", - "-260.0", - null, - "255.0", - "610.0", - "10", - "410.14", - "410.14", - "394.75", - "612.95", - "Yes", - "South Africa", - "IPF", - "IPF", - "2014-06-01", - "South Africa", - null, - "World Classic Powerlifting Championships" - ], - [ - "42", - "Ryoji Kono", - "M", - "SBD", - "Raw", - "32.5", - "24-34", - "24-39", - "Open", - "82.3", - "83", - "197.5", - "207.5", - "-212.5", - null, - "207.5", - "140.0", - "150.0", - "-155.0", - null, - "150.0", - "235.0", - "245.0", - "-257.5", - null, - "245.0", - "602.5", - "11", - "404.21", - "404.21", - "388.97", - "602.85", - "Yes", - "Japan", - "IPF", - "IPF", - "2014-06-01", - "South Africa", - null, - "World Classic Powerlifting Championships" - ], - [ - "43", - "Faisal Alzaabi", - "M", - "SBD", - "Raw", - "35.5", - "35-39", - "24-39", - "Open", - "81.45", - "83", - "140.0", - "-142.5", - "-142.5", - null, - "140.0", - "175.0", - "-182.5", - "-182.5", - null, - "175.0", - "160.0", - "-162.5", - "-162.5", - null, - "160.0", - "475.0", - "12", - "320.68", - "320.68", - "308.74", - "460.77", - "Yes", - "UAE", - "IPF", - "IPF", - "2014-06-01", - "South Africa", - null, - "World Classic Powerlifting Championships" - ], - [ - "44", - "Johan Henriksson", - "M", - "SBD", - "Raw", - "29.5", - "24-34", - "24-39", - "Open", - "81.45", - "83", - "230.0", - "242.5", - "-247.5", - null, - "242.5", - "-152.5", - "-152.5", - "-152.5", - null, - null, - null, - null, - null, - null, - null, - null, - "DQ", - null, - null, - null, - null, - "Yes", - "Finland", - "IPF", - "IPF", - "2014-06-01", - "South Africa", - null, - "World Classic Powerlifting Championships" - ], - [ - "45", - "Krzysztof Wierzbicki", - "M", - "SBD", - "Raw", - "23.5", - "24-34", - "24-39", - "Open", - "92.25", - "93", - "255.0", - "275.0", - "285.0", - null, - "285.0", - "170.0", - "180.0", - "190.0", - null, - "190.0", - "350.0", - "360.0", - "372.5", - null, - "372.5", - "847.5", - "1", - "534.46", - "534.46", - "511.7", - "819.83", - "Yes", - "Poland", - "IPF", - "IPF", - "2014-06-01", - "South Africa", - null, - "World Classic Powerlifting Championships" - ], - [ - "46", - "Mykhaylo Bulanyy", - "M", - "SBD", - "Raw", - "38.5", - "35-39", - "24-39", - "Open", - "93.0", - "93", - "270.0", - "287.5", - "300.0", - null, - "300.0", - "190.0", - "205.0", - "-215.0", - null, - "205.0", - "-320.0", - "330.0", - "342.5", - null, - "342.5", - "847.5", - "2", - "532.39", - "532.39", - "509.55", - "815.69", - "Yes", - "Ukraine", - "IPF", - "IPF", - "2014-06-01", - "South Africa", - null, - "World Classic Powerlifting Championships" - ], - [ - "47", - "Stephen Manuel", - "M", - "SBD", - "Raw", - "25.5", - "24-34", - "24-39", - "Open", - "92.1", - "93", - "280.0", - "290.0", - "-300.0", - null, - "290.0", - "185.0", - "192.5", - null, - null, - "192.5", - "200.0", - "280.0", - "302.5", - null, - "302.5", - "785.0", - "3", - "495.43", - "495.43", - "474.36", - "753.9", - "Yes", - "UK", - "IPF", - "IPF", - "2014-06-01", - "South Africa", - null, - "World Classic Powerlifting Championships" - ], - [ - "48", - "LS McClain", - "M", - "SBD", - "Raw", - "35.0", - "35-39", - "24-39", - "Open", - "92.25", - "93", - "245.0", - "257.5", - "267.5", - null, - "267.5", - "205.0", - "212.5", - "-217.5", - null, - "212.5", - "285.0", - "292.5", - "-302.5", - null, - "292.5", - "772.5", - "4", - "487.16", - "487.16", - "466.41", - "739.78", - "Yes", - "USA", - "IPF", - "IPF", - "2014-06-01", - "South Africa", - null, - "World Classic Powerlifting Championships" - ], - [ - "49", - "Tom Martin #1", - "M", - "SBD", - "Raw", - "26.0", - "24-34", - "24-39", - "Open", - "92.8", - "93", - "-255.0", - "255.0", - "-270.0", - null, - "255.0", - "162.5", - "170.0", - "172.5", - null, - "172.5", - "325.0", - "345.0", - "-360.0", - null, - "345.0", - "772.5", - "5", - "485.77", - "485.77", - "464.97", - "737.01", - "Yes", - "England", - "IPF", - "IPF", - "2014-06-01", - "South Africa", - null, - "World Classic Powerlifting Championships" - ] - ], - "shape": { - "columns": 39, - "rows": 4662 - } - }, "text/html": [ "
\n", "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", " \n", + " \n", + " \n", + " \n", " \n", + " \n", + " \n", " \n", + " \n", " \n", " \n", " \n", @@ -5903,6 +2623,7 @@ " \n", " \n", " \n", + " \n", " \n", " \n", " \n", @@ -5910,8 +2631,14 @@ " \n", " \n", " \n", + " \n", + " \n", + " \n", " \n", + " \n", + " \n", " \n", + " \n", " \n", " \n", " \n", @@ -5924,6 +2651,7 @@ " \n", " \n", " \n", + " \n", " \n", " \n", " \n", @@ -5931,8 +2659,14 @@ " \n", " \n", " \n", + " \n", + " \n", + " \n", " \n", + " \n", + " \n", " \n", + " \n", " \n", " \n", " \n", @@ -5945,6 +2679,7 @@ " \n", " \n", " \n", + " \n", " \n", " \n", " \n", @@ -5952,8 +2687,14 @@ " \n", " \n", " \n", + " \n", + " \n", + " \n", " \n", + " \n", + " \n", " \n", + " \n", " \n", " \n", " \n", @@ -5966,6 +2707,7 @@ " \n", " \n", " \n", + " \n", " \n", " \n", " \n", @@ -5973,8 +2715,14 @@ " \n", " \n", " \n", + " \n", + " \n", + " \n", " \n", + " \n", + " \n", " \n", + " \n", " \n", " \n", " \n", @@ -5987,6 +2735,7 @@ " \n", " \n", " \n", + " \n", " \n", " \n", " \n", @@ -5994,8 +2743,14 @@ " \n", " \n", " \n", + " \n", + " \n", + " \n", " \n", + " \n", + " \n", " \n", + " \n", " \n", " \n", " \n", @@ -6008,6 +2763,7 @@ " \n", " \n", " \n", + " \n", " \n", " \n", " \n", @@ -6015,8 +2771,14 @@ " \n", " \n", " \n", + " \n", + " \n", + " \n", " \n", + " \n", + " \n", " \n", + " \n", " \n", " \n", " \n", @@ -6029,6 +2791,7 @@ " \n", " \n", " \n", + " \n", " \n", " \n", " \n", @@ -6039,265 +2802,79 @@ "" ], "text/plain": [ - " Age BodyweightKg Squat1Kg Squat2Kg Squat3Kg \\\n", - "count 1323.000000 1323.000000 1323.000000 1316.000000 1300.000000 \n", - "mean 30.708995 83.001814 164.027211 133.787614 32.162692 \n", - "std 6.101695 28.533200 134.962333 177.735143 225.649644 \n", - "min 18.500000 42.950000 -442.500000 -405.000000 -478.000000 \n", - "25% 26.500000 62.155000 130.000000 117.500000 -187.500000 \n", - "50% 29.500000 73.850000 190.000000 180.000000 132.500000 \n", - "75% 34.500000 100.850000 243.750000 250.000000 232.500000 \n", - "max 70.500000 191.500000 450.000000 470.000000 460.000000 \n", - "\n", - " Squat4Kg Bench1Kg Bench2Kg Bench3Kg Bench4Kg Deadlift1Kg \\\n", - "count 0.0 1323.000000 1320.000000 1307.000000 0.0 1323.000000 \n", - "mean NaN 120.503023 88.092045 7.450650 NaN 205.473167 \n", - "std NaN 70.600959 116.638052 149.537946 NaN 105.328889 \n", - "min NaN -270.000000 -292.500000 -292.500000 NaN -355.000000 \n", - "25% NaN 80.000000 70.000000 -132.500000 NaN 160.000000 \n", - "50% NaN 127.500000 110.000000 60.000000 NaN 215.000000 \n", - "75% NaN 170.000000 167.500000 150.000000 NaN 275.000000 \n", - "max NaN 277.500000 282.000000 290.000000 NaN 365.000000 \n", - "\n", - " Deadlift2Kg Deadlift3Kg Deadlift4Kg MaxSquat MaxBench \\\n", - "count 1313.000000 1284.000000 0.0 1323.000000 1323.000000 \n", - "mean 137.878142 -55.096573 NaN 212.914966 137.458428 \n", - "std 200.502987 244.867722 NaN 71.938299 53.200334 \n", - "min -380.000000 -400.000000 NaN 67.500000 40.000000 \n", - "25% 137.500000 -272.500000 NaN 150.000000 87.500000 \n", - "50% 195.000000 -170.000000 NaN 212.500000 137.500000 \n", - "75% 282.500000 190.000000 NaN 265.000000 180.000000 \n", - "max 380.000000 398.500000 NaN 470.000000 290.000000 \n", + " Name Sex Equipment Age BirthYearClass Division \\\n", + "count 1323 1323 1323 1323.000000 1323 1323 \n", + "unique 800 2 1 NaN 6 1 \n", + "top Dariusz Wszoła M Raw NaN 24-39 Open \n", + "freq 7 743 1323 NaN 1172 1323 \n", + "mean NaN NaN NaN 30.708995 NaN NaN \n", + "std NaN NaN NaN 6.101695 NaN NaN \n", + "min NaN NaN NaN 18.500000 NaN NaN \n", + "25% NaN NaN NaN 26.500000 NaN NaN \n", + "50% NaN NaN NaN 29.500000 NaN NaN \n", + "75% NaN NaN NaN 34.500000 NaN NaN \n", + "max NaN NaN NaN 70.500000 NaN NaN \n", "\n", - " MaxDeadlift Totalkg \n", - "count 1323.000000 1323.000000 \n", - "mean 234.457294 584.830688 \n", - "std 67.287548 186.447492 \n", - "min 90.000000 210.000000 \n", - "25% 175.000000 412.500000 \n", - "50% 235.000000 587.500000 \n", - "75% 292.500000 741.250000 \n", - "max 398.500000 1090.000000 " - ] - }, - "execution_count": 19, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "df_ipf.describe()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "What you could or should have noticed is that we lost a bunch of columns. Describe, by default, only included the columns with numerical values. If you also want the descriptives for the other columns we need to motivate Pandas a bit. \n", - "\n", - "- **Look up the documentation for describe and make sure the np.objects are described.**\n", - "\n", - "You should get something like this:" - ] - }, - { - "cell_type": "code", - "execution_count": 20, - "metadata": { - "scrolled": true, - "tags": [ - "hide-input" - ] - }, - "outputs": [ - { - "data": { - "application/vnd.microsoft.datawrangler.viewer.v0+json": { - "columns": [ - { - "name": "index", - "rawType": "object", - "type": "string" - }, - { - "name": "Name", - "rawType": "object", - "type": "unknown" - }, - { - "name": "Sex", - "rawType": "object", - "type": "unknown" - }, - { - "name": "Equipment", - "rawType": "object", - "type": "unknown" - }, - { - "name": "BirthYearClass", - "rawType": "object", - "type": "unknown" - }, - { - "name": "Division", - "rawType": "object", - "type": "unknown" - }, - { - "name": "WeightClassKg", - "rawType": "object", - "type": "unknown" - }, - { - "name": "Date", - "rawType": "object", - "type": "unknown" - } - ], - "conversionMethod": "pd.DataFrame", - "ref": "2bb777c0-7332-4430-8267-f71dd20ca6d4", - "rows": [ - [ - "count", - "1323", - "1323", - "1323", - "1323", - "1323", - "1323", - "1323" - ], - [ - "unique", - "800", - "2", - "1", - "6", - "1", - "15", - "7" - ], - [ - "top", - "Fang-Yun Su", - "M", - "Raw", - "24-39", - "Open", - "74", - "2019-06-04" - ], - [ - "freq", - "7", - "743", - "1323", - "1172", - "1323", - "116", - "249" - ] - ], - "shape": { - "columns": 7, - "rows": 4 - } - }, - "text/html": [ - "
\n", - "\n", - "
NameSexEquipmentAgeBirthYearClassDivisionBodyweightKgWeightClassKgSquat1KgSquat2KgSquat3KgSquat4KgBench1KgBench2KgBench3KgBench4KgDeadlift1KgDeadlift2KgDeadlift3KgDeadlift4KgDateMaxSquatMaxBenchMaxDeadliftTotalkg
count1323132313231323.000000132313231323.00000013231323.0000001316.0000001300.0000000.01323.0000001320.0000001307.0000000.01323.0000001313.0000001284.0000000.013231323.0000001323.0000001323.0000001323.000000
unique80021NaN61NaN15NaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaN7NaNNaNNaNNaN
topDariusz WszołaMRawNaN24-39OpenNaN74NaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaN2019-06-04NaNNaNNaNNaN
freq77431323NaN11721323NaN116NaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaN249NaNNaNNaNNaN
meanNaNNaNNaN30.708995NaNNaN83.001814NaN164.027211133.78761432.162692137.878142-55.096573NaNNaN212.914966137.458428234.457294
stdNaNNaNNaN6.101695NaNNaN28.533200NaN134.962333177.735143225.649644200.502987244.867722NaNNaN71.93829953.20033467.287548
minNaNNaNNaN18.500000NaNNaN42.950000NaN-442.500000-405.000000-478.000000-380.000000-400.000000NaNNaN67.50000040.00000090.000000
25%NaNNaNNaN26.500000NaNNaN62.155000NaN130.000000117.500000-187.500000137.500000-272.500000NaNNaN150.00000087.500000175.000000
50%NaNNaNNaN29.500000NaNNaN73.850000NaN190.000000180.000000132.500000195.000000-170.000000NaNNaN212.500000137.500000235.000000
75%NaNNaNNaN34.500000NaNNaN100.850000NaN243.750000250.000000232.500000282.500000190.000000NaNNaN265.000000180.000000292.500000
maxNaNNaNNaN70.500000NaNNaN191.500000NaN450.000000470.000000460.000000380.000000398.500000NaNNaN470.000000290.000000398.500000
\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
NameSexEquipmentBirthYearClassDivisionWeightClassKgDate
count1323132313231323132313231323
unique8002161157
topFang-Yun SuMRaw24-39Open742019-06-04
freq7743132311721323116249
\n", - "
" - ], - "text/plain": [ - " Name Sex Equipment BirthYearClass Division WeightClassKg \\\n", - "count 1323 1323 1323 1323 1323 1323 \n", - "unique 800 2 1 6 1 15 \n", - "top Fang-Yun Su M Raw 24-39 Open 74 \n", - "freq 7 743 1323 1172 1323 116 \n", + " Deadlift1Kg Deadlift2Kg Deadlift3Kg Deadlift4Kg Date \\\n", + "count 1323.000000 1313.000000 1284.000000 0.0 1323 \n", + "unique NaN NaN NaN NaN 7 \n", + "top NaN NaN NaN NaN 2019-06-04 \n", + "freq NaN NaN NaN NaN 249 \n", + "mean 205.473167 137.878142 -55.096573 NaN NaN \n", + "std 105.328889 200.502987 244.867722 NaN NaN \n", + "min -355.000000 -380.000000 -400.000000 NaN NaN \n", + "25% 160.000000 137.500000 -272.500000 NaN NaN \n", + "50% 215.000000 195.000000 -170.000000 NaN NaN \n", + "75% 275.000000 282.500000 190.000000 NaN NaN \n", + "max 365.000000 380.000000 398.500000 NaN NaN \n", "\n", - " Date \n", - "count 1323 \n", - "unique 7 \n", - "top 2019-06-04 \n", - "freq 249 " + " MaxSquat MaxBench MaxDeadlift Totalkg \n", + "count 1323.000000 1323.000000 1323.000000 1323.000000 \n", + "unique NaN NaN NaN NaN \n", + "top NaN NaN NaN NaN \n", + "freq NaN NaN NaN NaN \n", + "mean 212.914966 137.458428 234.457294 584.830688 \n", + "std 71.938299 53.200334 67.287548 186.447492 \n", + "min 67.500000 40.000000 90.000000 210.000000 \n", + "25% 150.000000 87.500000 175.000000 412.500000 \n", + "50% 212.500000 137.500000 235.000000 587.500000 \n", + "75% 265.000000 180.000000 292.500000 741.250000 \n", + "max 470.000000 290.000000 398.500000 1090.000000 " ] }, - "execution_count": 20, + "execution_count": 70, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "df_ipf.describe(include=[object])" + "df_ipf.describe(include='all')" ] }, { @@ -6310,7 +2887,7 @@ "\n", "Pandas understands the concept of categorical variables. One advantage of using categorical variables is the reduced load on memory. Instead of storing a lot of string objects, Pandas can just store some integers and a hash-table for their values. The memory usage of a Categorical is proportional to the number of categories plus the length of the data. In contrast, an object dtype is a constant times the length of the data. Do some searching on the web to find out how we can inspect memory usage and how we can change the type of a column.\n", "\n", - "### Assignment 13\n", + "### Assignment 12\n", "\n", "- **Check the data type of the Sex column with the accessor ``.dtype`` and the memory usage of the Sex column with ``.memory_usage()``.**\n", "\n", @@ -6324,7 +2901,7 @@ }, { "cell_type": "code", - "execution_count": 21, + "execution_count": 71, "metadata": { "scrolled": true, "tags": [ @@ -6336,12 +2913,12 @@ "name": "stdout", "output_type": "stream", "text": [ - "object\n", - "66150 \n", + "str\n", + "12073 \n", "\n", - "1531 \n", + "1342 \n", "\n", - "1531 \n", + "1342 \n", "\n" ] } @@ -6366,7 +2943,7 @@ "\n", "Dates are hard. Having a computer handle dates is difficult to say the least. Just consider the differences between datetime notation (e.g., MM/DD/YYYY vs. DD/MM/YYYY) between countries and languages, it becomes very complicated, very quickly. Python has a very useful standard library package for handling dates: [datetime](https://docs.python.org/3/library/datetime.html). Pandas can also make use of datetime objects. It even has a special accessor (.dt, remember the .str accessor?) for datetime objects so you easily extract the year, month or day!\n", "\n", - "### Assignment 14\n", + "### Assignment 13\n", "\n", "- **Convert the date column to the datetime datatype with ``pd.to_datetime()``.** \n", "\n", @@ -6379,7 +2956,7 @@ }, { "cell_type": "code", - "execution_count": 22, + "execution_count": 72, "metadata": { "tags": [ "hide-input" @@ -6425,7 +3002,7 @@ "\n", "It will take the first var of the first loop, and then all var's of the second loop. Then it goes back to the first for loop and takes the second var, then runs again all the var's of the second loop. And so on..\n", "\n", - "### Assignment 15\n", + "### Assignment 14\n", "\n", "So let's try out some loops!\n", "````{margin}\n", @@ -6444,7 +3021,7 @@ }, { "cell_type": "code", - "execution_count": 23, + "execution_count": 73, "metadata": { "tags": [ "hide-input" @@ -6557,7 +3134,7 @@ "\n", "So we will repeat the last exercise but with groupby!\n", "\n", - "### Assignment 16\n", + "### Assignment 15\n", "\n", "First look up what the `observed` arugment does and why it is needed. Use the ``.groupby()`` method to examine your data:\n", "\n", @@ -6570,7 +3147,7 @@ }, { "cell_type": "code", - "execution_count": 24, + "execution_count": 74, "metadata": { "scrolled": true, "tags": [ @@ -6638,7 +3215,7 @@ "\n", "Let's compare the time needed for the nested for loop and for the groupby function!\n", "\n", - "### Assignment 17\n", + "### Assignment 16\n", "\n", "- **Calculate the mean Totalkg per year and per gender again but time it, which way is faster?**\n", "\n", @@ -6647,7 +3224,7 @@ }, { "cell_type": "code", - "execution_count": 25, + "execution_count": 75, "metadata": { "tags": [ "hide-input", @@ -6659,7 +3236,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "1.27 ms ± 28.3 μs per loop (mean ± std. dev. of 7 runs, 1,000 loops each)\n" + "8.56 ms ± 470 μs per loop (mean ± std. dev. of 7 runs, 100 loops each)\n" ] } ], @@ -6672,7 +3249,7 @@ }, { "cell_type": "code", - "execution_count": 26, + "execution_count": 76, "metadata": { "tags": [ "hide-input", @@ -6684,7 +3261,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "664 μs ± 3.32 μs per loop (mean ± std. dev. of 7 runs, 1,000 loops each)\n" + "5.56 ms ± 509 μs per loop (mean ± std. dev. of 7 runs, 100 loops each)\n" ] } ], @@ -6704,7 +3281,7 @@ }, { "cell_type": "code", - "execution_count": 27, + "execution_count": 77, "metadata": { "tags": [ "hide-input" @@ -6713,7 +3290,17 @@ "outputs": [ { "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAkQAAAGwCAYAAABIC3rIAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjAsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvlHJYcgAAAAlwSFlzAAAPYQAAD2EBqD+naQAAPhVJREFUeJzt3X1c1eXh//H3ARFE8Sg4zoGFCku70di8aaY21HlX06zVd27J7EaXJlaaWs2kAc2b6UotE4tmamratm7m+rrSyuBrWhnDMNfPWqKu5IgLBU0EhM/vD8dpBCgHzv3n9Xw8eCSfcx3OdV19OLzP9bmu62MxDMMQAACAiYX4ugIAAAC+RiACAACmRyACAACmRyACAACmRyACAACmRyACAACmRyACAACm18bXFQgUtbW1Onr0qKKiomSxWHxdHQAA0AyGYejUqVOKj49XSEjT40AEomY6evSoEhISfF0NAADQAv/61790ySWXNPk4gaiZoqKiJJ3v0I4dO/q4NgAAoDnKy8uVkJDg/DveFAJRM9VdJuvYsSOBCACAAHOx6S5MqgYAAKZHIAIAAKZHIAIAAKbHHCI3q6mpUXV1ta+r4XFhYWEKDQ31dTUAAHALApGbGIYhh8OhkydP+roqXtOpUyfZ7Xb2ZQIABDwCkZvUhaHY2FhFRkYGdUgwDENnzpxRSUmJJCkuLs7HNQIAoHUIRG5QU1PjDEMxMTG+ro5XtGvXTpJUUlKi2NhYLp8BAAIak6rdoG7OUGRkpI9r4l117TXDnCkAQHAjELlRMF8ma4zZ2gsACF5cMgMAuFVNTY0KCwtVWlqq6OhoJScnc1kdfo9ABABwm7y8PGVnZ8vhcDiP2e12paWlKSUlxYc1Ay6MS2YAALfIy8tTRkaGkpKStHLlSm3dulUrV65UUlKSMjIylJeX5+sq+lxNTY0KCgr01ltvqaCgQDU1Nb6uEv6DESI/VVJSokceeUR/+9vfdOzYMXXu3Fnf//73lZmZqYEDB/q6egBQT01NjbKzszVw4EDNnz9fISHnP2/36tVL8+fPV3p6ulatWqXBgweb9vIZo2f+jREiP3XLLbfoo48+0rp16/Tpp59qy5YtGjp0qEpLS31dNQBooLCwUA6HQ6mpqc4wVCckJESpqakqLi5WYWGhj2roW4ye+T8CkR86efKkdu7cqcWLF2vYsGHq1q2bfvjDH2ru3LkaM2aMJKmsrExTpkxRbGysOnbsqB//+Mf66KOPJEnHjx+X3W7XwoULnT/z/fffV9u2bbVt2zaftAlAcKv7sJaYmNjo43XHzfih7tujZ7169VJkZKRz9GzgwIFatWoVl898jEDkhzp06KAOHTro1VdfVWVlZYPHDcPQmDFj5HA4tHXrVuXn56tv374aPny4SktL9Z3vfEfPPfecMjMz9eGHH+r06dP65S9/qbS0NI0aNcoHLQIQ7KKjoyVJRUVFjT5ed7yunJkwehYYCER+qE2bNlq7dq3WrVunTp06afDgwXr44Yedvyw7duzQvn379Kc//Un9+/dXjx499Nhjj6lTp07685//LEn6yU9+orvuukupqam6++67FRERod/97ne+bBaAIJacnCy73a6NGzeqtra23mO1tbXauHGj4uLilJyc7KMa+g6jZ4GBQOSnbrnlFh09elRbtmzR6NGj9c4776hv375au3at8vPzdfr0acXExDhHkzp06KCioiJ9/vnnzp/x2GOP6dy5c/rjH/+ojRs3KiIiwoctAhDMQkNDlZaWpt27dys9PV379+/XmTNntH//fqWnp2v37t2aNm2aKSdUM3oWGCyGYRi+rkQgKC8vl9VqVVlZmTp27FjvsbNnz6qoqEiJiYkeDR2/+tWvtH37dqWlpWnFihV65513GpTp1KmTunTpIknav3+/+vfvr+rqar3yyiu64YYb3Fofb7UbQOBobCVVXFycpk2bZtqVVDU1NUpNTVVSUlK9FXjS+dGz9PR0FRUVacOGDaYMjJ52ob/f/41l9wHkyiuv1Kuvvqq+ffvK4XCoTZs26t69e6Nlq6qqlJqaqp///Oe6/PLLNXnyZO3bt082m827lQZgKikpKRo8eDA7Vf+XutGzjIwMpaenKzU1VYmJiSoqKtLGjRu1e/duZWVlmbqP/AEjRM3kzRGir776Sj/72c80adIkJScnKyoqSh9++KHuvfdejRkzRn/4wx+UkpKiU6dOafHixbrssst09OhRbd26VTfddJP69++vBx54QH/+85/10UcfqUOHDho2bJiioqL02muvtbp+dRghAoDmY/TMNxghCmAdOnTQgAEDtGzZMn3++eeqrq5WQkKC7rrrLj388MOyWCzaunWr5s2bp0mTJjmX2aekpMhms+mdd97R8uXLtWPHDuf//PXr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HR0AAEgKsH2IfIl9iAAACDxBuQ8RAACAJxCIAACA6RGIAACA6RGIAACA6RGIAACA6fn1snt/UrcYj5u8AgAQOOr+bl9sUT2BqJlOnTolSdzPDACAAHTq1ClZrdYmH2cfomaqra3V0aNHFRUVddEbx3pa3Y1m//Wvf7En0rfQN02jb5pG3zSNvmkc/dI0f+sbwzB06tQpxcfHKySk6ZlCjBA1U0hISL0by/qDjh07+sXJ5o/om6bRN02jb5pG3zSOfmmaP/XNhUaG6jCpGgAAmB6BCAAAmB6BKACFh4crIyND4eHhvq6K36FvmkbfNI2+aRp90zj6pWmB2jdMqgYAAKbHCBEAADA9AhEAADA9AhEAADA9AhEAADA9ApEPLFq0SFdffbWioqIUGxurm266SQcOHKhXxjAMZWZmKj4+Xu3atdPQoUO1f//+emVycnI0dOhQdezYURaLRSdPnmzwWuPGjVPXrl0VERGhuLg4TZw4UUePHvVk81rFm31Tp7KyUj/4wQ9ksVi0d+9eD7TKPbzZN927d5fFYqn39etf/9qTzWsVb583//u//6sBAwaoXbt26tKli26++WZPNa3VvNU377zzToNzpu5rz549nm5mi3jzvPn000914403qkuXLurYsaMGDx6sHTt2eLJ5reLNvvn73/+ukSNHqlOnToqJidGUKVN0+vRpTzavUQQiH8jNzdX06dP13nvvafv27Tp37pxGjRqlr7/+2llmyZIlWrp0qZ566int2bNHdrtdI0eOdN5TTZLOnDmj6667Tg8//HCTrzVs2DD98Y9/1IEDB/TSSy/p888/1//8z/94tH2t4c2+qfPggw8qPj7eI+1xJ2/3zaOPPqri4mLnV3p6usfa1lre7JuXXnpJEydO1J133qmPPvpI7777riZMmODR9rWGt/pm0KBB9c6X4uJi/epXv1L37t3Vv39/j7ezJbx53owZM0bnzp3T22+/rfz8fP3gBz/Q2LFj5XA4PNrGlvJW3xw9elQjRozQpZdeqvfff1+vv/669u/frzvuuMPTTWzIgM+VlJQYkozc3FzDMAyjtrbWsNvtxu9+9ztnmbNnzxpWq9V4+umnGzx/x44dhiTjxIkTF32tv/zlL4bFYjGqqqrcVn9P8nTfbN261bj88suN/fv3G5KMgoICTzTDIzzZN926dTOWLVvmqap7nKf6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nMeLior00EMP6YknnlDXrl3d+prV1dVu/XkAfINABCCoJCQk6IknntCcOXNUVFQkwzA0efJkDR8+XD/84Q/1k5/8RB06dJDNZtPEiRP173//2/nc119/Xddee606deqkmJgYjR07Vp9//rnz8UOHDsliseiPf/yjhg4dqoiICG3YsMEXzQTgZtzcFUBQuummm3Ty5Endcsst+u1vf6s9e/aof//+uuuuu3TbbbepoqJCDz30kM6dO6e3335bkvTSSy/JYrHoqquu0tdff63f/OY3OnTokPbu3auQkBAdOnRIiYmJ6t69ux5//HH16dNH4eHhio+P93FrAbQWgQhAUCopKVHv3r311Vdf6c9//rMKCgr0/vvv64033nCW+eKLL5SQkKADBw6oZ8+eDX7G8ePHFRsbq3379ql3797OQLR8+XLNmDHDm80B4GFcMgMQlGJjYzVlyhRdccUV+ulPf6r8/Hzt2LFDHTp0cH5dfvnlkuS8LPb5559rwoQJSkpKUseOHZWYmChJDSZi9+/f37uNAeBxbXxdAQDwlDZt2qhNm/Nvc7W1tbrhhhu0ePHiBuXi4uIkSTfccIMSEhL07LPPKj4+XrW1terdu7eqqqrqlW/fvr3nKw/AqwhEAEyhb9++eumll9S9e3dnSPpvX331lT755BM988wz+tGPfiRJ2rlzp7erCcBHuGQGwBSmT5+u0tJS3Xrrrfrggw908OBBbdu2TZMmTVJNTY06d+6smJgY5eTk6J///KfefvttzZo1y9fVBuAlBCIAphAfH693331XNTU1Gj16tHr37q0ZM2bIarUqJCREISEh2rx5s/Lz89W7d2/df//9+v3vf+/ragPwElaZAQAA02OECAAAmB6BCAAAmB6BCAAAmB6BCAAAmB6BCAAAmB6BCAAAmB6BCAAAmB6BCAAAmB6BCAAAmB6BCAAAmB6BCAAAmN7/Bxd7Y4Tw3vNpAAAAAElFTkSuQmCC", + "text/plain": [ + "" + ] + }, + "execution_count": 77, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAkQAAAGwCAYAAABIC3rIAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjAsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvlHJYcgAAAAlwSFlzAAAPYQAAD2EBqD+naQAANzdJREFUeJzt3Qd4lGW6//E7hBQCoUvJ0lcQaXsAFUWXIs1diiwe2RVEKUtXUUBYBAVcysIqQZEiivSmK9bDKrBSDoKILEhZ/6ASgiwlKL0mkPlf97NnxiQkkIQp7zvP93Ndw2Teeae9TCa/uZ8W4fF4PAIAAGCxAqF+AgAAAKFGIAIAANYjEAEAAOsRiAAAgPUIRAAAwHoEIgAAYD0CEQAAsF5B649ALqWnp8vhw4clPj5eIiIiOGwAALiATrd49uxZSUhIkAIFcq4DEYhyScNQxYoV/fX/AwAAguiHH36QChUq5Hg9gSiXtDLkPaBFixb1z/8OAAAIqDNnzpiChvfveE4IRLnkbSbTMEQgAgDAXW7U3YVO1QAAwHoEIgAAYD0CEQAAsB59iPzs6tWrkpaWFvZvrKioKImMjAz10wAAwC8IRH6c5+Do0aNy6tQpsUXx4sWlXLlyzMsEAHA9ApGfeMNQmTJlJC4uLqxDgoa/CxcuSEpKirlcvnz5UD8lAABuCoHIT81k3jBUqlQpsUGhQoXMuYYifd00nwEA3IxO1X7g7TOklSGbeF+vDX2mAADhjUDkR+HcTJYd214vACB80WQGAPB7N4KdO3fKiRMnpGTJklKvXj2a1eF4BCIAgN9s2LBBZsyYYQaaeOlo1AEDBkiTJk040nAsmswAAH4LQ6NHj5Zq1arJ9OnTZeXKleZcL+t2vd52Wj3bvn27/OMf/zDnehnOQIXIoXT01vPPPy9///vf5dixY1KiRAn51a9+JWPGjJF77rkn1E8PADLRP+xaGdLPp3HjxkmBAv/5vl27dm1zedSoUTJz5ky59957rW0+o3rmbFSIHOqhhx6Sr7/+WubPny/79u2TDz/8UJo1a2ba5AHAabTPkDaTde3a1ReGvPSybj9y5IjZz0ZUz5yPQORAOqfRxo0bZdKkSdK8eXOpXLmy3HXXXTJixAhp27at2ef06dPSp08fMwdQ0aJF5f777zcBSh0/fty02U+YMMF3n1u2bJHo6GhZtWpVyF4XgPDl/bJWtWrVbK/3brfxS13W6plWzXTaEm/1TLdr9Yzms9AiEDlQkSJFzOn999+Xy5cvZztTtAYj/TambfTbtm2TBg0aSIsWLcyHzS233CJvvfWWaV776quv5Ny5c/Loo4+aTo2tW7cOyWsCEN50NJlKSkrK9nrvdu9+NqF65g4EIgcqWLCgzJs3zzSX6Xph2ub+3HPP+UrNa9eulV27dsk777wjd9xxh1SvXl1eeukls+/f/vY3s89vf/tb6d27tylT9+vXT2JjY+Uvf/lLiF8ZgHClQ+u1Mr148WJJT0/PdJ1e1u26zI/uZxuqZ+5AIHJwH6LDhw+bvkNt2rSRdevWmSqQBiWtCGnVR5cJ8VaT9KTfwL7//nvffWhIunLlirz99tvmw0hDEQAEgnaU1ir05s2bTQfqPXv2mDUP9Vwv6/b+/ftb2aGa6pk7RHi0/QU3dObMGSlWrJjpu6N9djK6dOmSCSPaRh7I0PHHP/5RVq9ebT50pk2bZkJSVlolKl26tPlZP4i0gqRLa7z33nvSvn17vz6fYL1uAO4eSaWVIQ1Dts5DpH2DtFqv0w9kHIHnrZ5pYNTP0kWLFlkZGEP59zsjht27SK1atUy/Iq0U6YeNNq1VqVIl231TU1PNL+Dvf/97qVmzpvTq1cs0s5UtWzbozxuAPTT0aDM/M1VfWz3TuZg0/Ohns36R1BCk1Xutno0dO5YwFGJUiBxYIfrpp5/k4Ycflp49e5r29vj4eNM5+sknnzSdqd98803zoXP27FkzEu22224zzWvawbpjx46mKvTss8+a/kQ68kyb03S0mt7Pxx9/LP5ChQgAco/qWWhQIXIxDTCNGjWSxMRE0ydIm7wqVqxoOklr52pdVFXDz8iRI01o8g6z15CkFSBtSps6darpfO0NbwsXLjThSod2aukaABBcVM+cjQqRi/oQOY2trxsAEH4VIkaZAQAA6xGIAACA9QhEAADAegQiAABgPQIRAACwHoEIAABYj0AEAACsRyACAADWYy2zADp27JiZCCpYdOIp1ioD/D8B6cGDB/N9+0qVKjFxKeACBKIAhqFHuz0maamXJViiomNk0cIFeQpF3bt3l/nz51+z/dtvv5Vbb73Vz88QcB8NQ3369Mn37WfPni01atTw63MC4H8EogDRypCGoYvVmkp6bDEJtAKXTovsX28eN69VogceeEDmzp2badstt9zi52cIuJNWeDTUZCc5OVnGjx9v1hWsXLlyjrcH4HwEogDTMJReuLQ4WUxMjFkcFsC1dJ2+G1V4NAzZWAWiORHhhEAEAMgXmhMRTghEkI8//liKFCniOxK/+c1v5J133uHIALgumhMRTghEkObNm8vMmTN9R6Jw4cIcFQA3RHMiwgmBCCYAMaIMAGAzJmYEAADWIxABAADr0WQWjPmBwuhxAAAIRwSiAC6joTNH62SJwaKPp4+bF/PmzQvY8wEAwC0IRAGis0XrMhqsZQYAgPMRiAIcilhsFQAA5wtpp+oNGzZI+/btJSEhQSIiIuT999/PdL3H45ExY8aY6wsVKiTNmjWTPXv2ZNrn8uXL8uSTT0rp0qXN8PEOHTrIoUOHMu1z8uRJ6datm2lO0pP+fOrUqaC8RgAA4HwhDUTnz5+XX/3qV/Laa69le/3kyZNlypQp5vqtW7ea9bZatWolZ8+e9e3z9NNPy3vvvSfLli2TjRs3yrlz56Rdu3Zy9epV3z5dunSRHTt2yCeffGJO+rOGIgAAgJA3mekSEXrKjlaHpk6dalaR7tSpk9k2f/580wS1ZMkS6du3r+mfM2fOHFm4cKG0bNnS7LNo0SKpWLGirFmzRtq0aSPffPONCUFffPGFNGrUyOzzxhtvyD333CN79+6V2267LdvH18qTnrzOnDkTgCMAOAOLdAKwnWP7ECUlJcnRo0eldevWmVZlb9q0qWzatMkEom3btklaWlqmfbR5rU6dOmYfDUSbN282zWTeMKTuvvtus033ySkQTZw4UcaOHRvgVwk4A4t0ArCdYwORhiGVtVOyXk5OTvbtEx0dLSVKlLhmH+/t9bxMmTLX3L9u8+6TnREjRsjgwYMzVYi08gSEIxbpBGA7xwYiL+1snbUpLeu2rLLuk93+N7ofrUbpCbABi3QCsJ1jl+7QDtQqaxUnJSXFVzXSfVJTU80osuvtc+zYsWvu//jx4wyJBwAAzq4QVa1a1YSZ1atXS/369c02DT/r16+XSZMmmcsNGzaUqKgos0/nzp3NtiNHjsju3bvNCDWlnae18/WXX34pd911l9m2ZcsWs61x48YBfQ0axJiYEQAA5wtpINIh8t99912mjtQ6JL5kyZKmT4MOqZ8wYYJUr17dnPTnuLg4M4xeacfoXr16yZAhQ6RUqVLmdkOHDpW6dev6Rp3dfvvt8sADD0jv3r3l9ddfN9v69Oljhubn1KHaX2HosW6PyuXUNAmWmOgoWbBwUZ4qX927dzej97ST+qxZszJdN2DAAJk5c6Y8/vjjLPEBAHnAyE33CWkg+uqrr6R58+a+y95OzN4/wMOGDZOLFy+aP8zaLKYjxVatWiXx8fG+2yQmJkrBggVNhUj3bdGihbltZGSkb5/FixfLU0895RuNppM35jT3kb9oZUjDUL9aZyWh8M9zIgXK4fORMutf8eZx8zo7tnYW13mc9FjqBJjeX+alS5eaYAoAyBtGbrpPSAORzjytnZtzop2edaZqPV2vM+i0adPMKSdaOdL5iUJBw1CV+MAHopvRoEED2b9/v6xYsUK6du1qtunPGpSqVasW6qcHAK7DyE33cWwfIgRXjx49ZO7cub5A9NZbb0nPnj1l3bp1/FcAQB4xctN9HDvKDMGlS5no0icHDhww8zx9/vnn8uijj/LfAACwAhUiGLo4btu2bU0Ha23G1J91WzihkyMAuPtz2NscqRU4fyMQwUebyJ544gnz8/Tp08PuyNDJEQDc/TmsZs+eLTVq1BB/IxDBR6cn0LmelK4DF27o5AgAzv0cVtplY/z48WZh98qVK0t2AjX6mUAEH52q4JtvvvH9HG7o5AgAzv8cVhqGAlEFuh4CURDmB3LT4xQtWtQv9wMAgJsQiAJEZ9HWmaN1ssRg0cfTx80LncTyet5///2bfFYAADgfgShAdLZoXUaDtcwAAHA+AlGAQ1Fel9EAAADBx8SMAADAegQiAABgPQKRH11vodpwZNvrBQCELwKRH0RFRZnzCxcuiE28r9f7+gEAcCs6VfuBTmJYvHhxSUlJMZfj4uIkIiJCwrkypGFIX6++7nCcxBEAYBcCkZ+UK1fOnHtDkQ00DHlfNwAAbkYg8hOtCJUvX17KlCkjaWlpEu60mYzKEAAgXBCI/ExDAkEBAAB3oVM1AACwHoEIAABYj0AEAACsRyACAADWo1N1mLl06ZIcPHgw37evVKmSxMbG+vU5AQDgdASiMKNhqE+fPvm+/ezZs6VGjRp+fU4AADgdgSjMaIVHQ012kpOTZfz48TJy5EipXLlyjrcHAMA2BKIwo81dN6rwaBiiCgQAwM/oVA0AAKxHIAIAANYjEAEAAOsRiAAAgPUIRAAAwHoEIgAAYD0CEQAAsB6BCAAAWI9ABAAArEcgAgAA1iMQAQAA6xGIAACA9QhEAADAegQiAABgPQIRAACwHoEIAABYj0AEAACsRyACAADWIxABAADrEYgAAID1CEQAAMB6BCIAAGA9AhEAALAegQgAAFiPQAQAAKxHIAIAANYjEAEAAOsRiAAAgPUIRAAAwHoEIgAAYD0CEQAAsB6BCAAAWI9ABAAArEcgAgAA1iMQAQAA6xGIAACA9QpafwQAANd17NgxOX36dJ6OUnJycqbzvChWrJiULVuW/xUEFYEIAPijf90w9Fi3R+Vyalq+3ifjx4/P821ioqNkwcJFjg9F+QmKirDoTAQiANbjj37O9A++hqF+tc5KQuGrAX+vHD4fKbP+FW8e18mB6GbfM+EeFt3I0YHoypUrMmbMGFm8eLEcPXpUypcvL927d5dRo0ZJgQL/6f7k8Xhk7NixMnv2bDl58qQ0atRIpk+fLrVr1/bdz+XLl2Xo0KGydOlSuXjxorRo0UJmzJghFSpUCOGrA+AU/NG/MQ1DVeIDH4jcItjvGTeFRbdydCCaNGmSzJo1S+bPn28CzldffSU9evQw7cuDBg0y+0yePFmmTJki8+bNkxo1asi4ceOkVatWsnfvXomPjzf7PP300/LRRx/JsmXLpFSpUjJkyBBp166dbNu2TSIjI0P8KgE4BX/0wXvGXo4ORJs3b5YHH3xQ2rZtay5XqVLFVHk0GHmrQ1OnTpWRI0dKp06dzDYNT5qclyxZIn379jVJes6cObJw4UJp2bKl2WfRokVSsWJFWbNmjbRp0yaErxAILjrHAoALA9F9991nKkT79u0z1Z+vv/5aNm7caEKQSkpKMk1prVu39t0mJiZGmjZtKps2bTKBSKtAaWlpmfZJSEiQOnXqmH1yCkTazKYnrzNnzgT0tQKBRj8ZAHBpIBo+fLip8NSsWdM0bV29etV0QnvkkUfM9RqGVNa2VL3s7cWv+0RHR0uJEiWu2cd7++xMnDjR9E0CwgX9ZADApYFo+fLlpnlLm7+0D9GOHTtMfyCt8Dz++OO+/SIiIjLdTpvSsm7L6kb7jBgxQgYPHpypQqTNbIDb0U8GAFwWiJ599ln505/+JH/4wx/M5bp165rKj1ZvNBCVK1fObPeOQPNKSUnxVY10n9TUVDMCLWOVSPdp3Lhxjo+tTW96AgAA4T9Hk6MD0YULF3zD67206Sw9Pd38XLVqVRN4Vq9eLfXr1zfbNPysX7/ejFBTDRs2lKioKLNP586dzbYjR47I7t27zQg1AADgP26do8nRgah9+/bmoFSqVMk0mW3fvt0Mse/Zs6e5Xpu8tAltwoQJUr16dXPSn+Pi4qRLly6+xNirVy8z1F6H3JcsWdLMSaTVJu+oMwAAYPccTY4ORNOmTZPnn39eBgwYYJq4tO+Qjhx74YUXfPsMGzbMTLao+3gnZly1apVvDiKVmJgoBQsWNBUi78SMOm8RcxABABAYbuuv6OhApKFGh9h7h9lnR6tEOpu1nnISGxtrwpWewkWw55NRLLgIAAhXjg5EcM58Moo1dAAA4YpA5EJubZ8FAMCpCEQu5rb22WBheQoAQF4RiBBWWJ4CAJAfBCKEFZanAADkB4EIYYnmRABAXmSeBhoAAMBCBCIAAGA9AhEAALAegQgAAFiPQAQAAKxHIAIAANYjEAEAAOsRiAAAgPUIRAAAwHrMVA0AAPzu8PlIVz0WgQgAAPjdrH/Fi5sQiAAAgN/1q3XWrCsZrArRzQYwAhFgmWCVsYNZLgfgPAmFr0qV+OAEIn8gEAGWcVsZGwCCgUAEWCZYZWx/lLABIFgIRIBl3FbGDiaaEwF7EYgA4P9Q0UK4Dy1HzghEAPB/aE5EXhGiwweBCAD+D82JCPeh5cgZgQgAgHwiRIcPApGL0XYNINw+b+gng1AhELkYpVMAfN4AIQpEr776arbbIyIiJDY2Vm699VZp0qSJREbSGz7QaLsGECx0OEe4y3MgSkxMlOPHj8uFCxekRIkS4vF45NSpUxIXFydFihSRlJQUqVatmqxdu1YqVqwYmGcNg7ZrAMHC5w3CXYG83mDChAly5513yrfffis//fSTnDhxQvbt2yeNGjWSV155RQ4ePCjlypWTZ555JjDPGAAAINQVolGjRsm7774rv/zlL33btJnspZdekoceekj2798vkydPNj8DoUIHUABAQAPRkSNH5MqVK9ds121Hjx41PyckJMjZs2fzeteA39DhHAAQ0EDUvHlz6du3r7z55ptSv359s2379u3Sv39/uf/++83lXbt2SdWqVfN614Df0AEUABDQQDRnzhzp1q2bNGzYUKKionzVoRYtWpjrlHaufvnll/N614Df0AEUABDQQKQdplevXi179+41Jx1lVrNmTbntttsyVZEAAADCNhDt3LlT6tWrZwJQxhCk3n//fenYsaM/nx8AAIDzht23adPGjCTLSkeede3a1V/PCwCAgLp69arpA/uPf/zDnOtl2CvPFSLtPK39hTZt2iTly5c325YvXy49e/aUefPmBeI5AgDgVxs2bJAZM2b4Rkd7u4QMGDDArLYA++S5QvTCCy9Ihw4dpGXLlmZSxiVLlkiPHj1kwYIF8vDDDwfmWQIA4McwNHr0aLOqwvTp02XlypXmXC/rdr0e9slzIFI6I3WDBg3k7rvvlt69e8vSpUuZiBEA4HjaLKaVoXvuuUfGjRsntWvXNktP6ble1u0zZ86k+cxCuWoy+/DDD6/Zpp2n169fL4888ohZ2NW7j1aPAABwIh0YpM1kzz//vBQokLkmoJe1L+zAgQPNft659uDsFQP89Vi5CkTXGzn21ltvmZPSYESnNACAU2lXD5XT5MHe7d79kHfFihWTmOiooK8YoI+pjx3QQJSenp7vBwAAwClKlixpzpOSkkwzWVa6PeN+yLuyZcvKgoWL5PTp03m+bXJysowfP15GjhwplStXztNtNQzpYwdtlBkAAG6l8+jpaLLFixebPkMZm830y79u1xHUuh/yT4PJzYQTDUM1atSQYMpVIHr11VdzfYdPPfXUzTwfAAACJjIy0gyt19Fko0aNMn2GtJlMK0MahjZv3ixjx441+8EuuQpEiYmJuboz7UNEIAIQCtp/UTvCat8Pbe7Qb/j8UUN2dJ4hDT062kw7UHtpZUi3Mw+RnXIViLxtqgDgREyyh7zS0HPvvfcSouFDHyLAMsEaChusx/FOsqfzx+hQ6ozNH7qdb/zIiVYQGVqPmwpEhw4dMvMOHTx4UFJTUzNdN2XKlPzcJYAwHAp7s8Ng8zrJnreDrHeSPe0jopPsaSUgN81n4RYWgfy6amETdJ4DkS6Cp5Mv6rewvXv3Sp06deTAgQPi8XjM7NUAwmsobCiHwQZrkr1wDItAfm2wdJ23PAeiESNGyJAhQ+TFF1+U+Ph4s8p9mTJlzAfPAw88EJhnCSDkQ2FDMQw2WJPshWNYRHC4bTbmG9lgcRN0ngPRN998Y9YuMzcuWFAuXrwoRYoUMQHpwQcflP79+wfieQJAQCfZC7ewiMBy62zMwWyCDvtAVLhwYbl8+bL5OSEhQb7//nvfB9GPP/7o/2cIADlgkr3goX9VeMzGfD07LV/nLc+BSFe4//zzz6VWrVrStm1b03y2a9cuWbFihbkOAIKFSfYCj/5V4TUb8/WcsHydtzwHIh1Fdu7cOfPzmDFjzM/Lly+XW2+9NdcTOMI/wq3tGsgPJtkLLPpX2aOk5eu85TkQVatWzfdzXFycaW9EcIVj2zVwM5hkL7DoX2WHepav85avQLR161YpVapUpu2nTp0yw+7379/vz+cHh3xjU4yKgZMxyR5w879DAyxe5y3PgUjnHNKe6FlpR+t///vf/npeuAG+sdnJxsnScHN4zyAvmli8zluuA5HOTO316aefZmo60V84nbCxSpUq/n+GAKyeLA35x3sG+dHE0nXech2IOnbs6FvR/vHHH890XVRUlAlDL7/8sv+fIZAP4TZE2ObJ0pA/vGdwMyItXOct14FIO1Qp/SDWPkSlS5cO5PMC8iUchwjbPlka8o73DBCEPkTeYXeAE4XjEGHbJ0tD3vGeAYK02v369evlpZdeMst4aBPa7bffLs8++6z8+te/zs/dAX4Vbh3ObZ8sDXnHewa5denSJTl48GC+D1ilSpUkNjbWzkC0aNEi6dGjh3Tq1Emeeuops8r9pk2bpEWLFjJv3jzp0qVLYJ4pYCnbJ0tD3vGeQW5pGOrTp0++D9js2bMd9yUyaIFImxUmT54szzzzjG/boEGDzAzWf/7zn/0eiHQo//Dhw+Xvf/+7WUhWD/ycOXOkYcOG5noNZNqhVP9TTp48KY0aNZLp06dn+sOhUwIMHTrULEqr96HhTftkVKhQwa/PFQgE2ydLQ97xnskdpiT4T4VH/37mtyuB3j5c5DkQ6cSL7du3v2Z7hw4d5LnnnhN/0oCjHUWbN29uAlGZMmXMYrLFixf37aPhTMOYVqc0LOkfjFatWsnevXslPv4/HWuffvpp+eijj2TZsmVmQkldf61du3aybds2OqHC8WyfLA15x3vmxpiS4D+0uetGFZ7KDuxK4IhAVLFiRTPnkK5dlpFu0+v8adKkSeY+586d69uWca4jrQ5NnTrVpFdtwlPz5883/UeWLFkiffv2NZ1rtaK0cOFCadmypa/ZT+93zZo10qZNG78+ZyAQbJ4sDfnDeyZnTEmAmwpEPXv2lFdeecVUV7Tv0I4dO6Rx48amU/XGjRtNhUav9yedDFIDy8MPP2w6cv/iF78w35R79+5trtdvyDr6pnXr1r7bxMTESNOmTU2/Jg1EWgVKS0vLtE9CQoLUqVPH7JNTINJmNj15nTlzxq+vDcgrWydLQ/7xnrkWUxIgJ5nH8F6HVl60/03//v1N09OuXbtMU5T2H9q9e7dZ8V4DiD9p85zOr1K9enUzO3a/fv1MGFuwYIG53jtjb9YRRXrZe52eR0dHS4kSJXLcJzsTJ040w6m9J39Xv4CbmSxN+8HpOWEIvGfyNyWBNj3nNI3FkSNHzH6wS64rRNo85fW73/3OnAJNO4zecccdMmHCBHNZ/wDs2bPHhKTHHnvMt59WqbI+16zbsrrRPiNGjJDBgwdnqhARigDA3ZiSADddIVI3Chn+pv0jatWqlWmbznnknTNBR96orJWelJQUX9VI90lNTTUdtHPaJzva9Fa0aNFMJwBA+ExJkB2msbBXngKR9jLXN9P1Tv6k/SV0tFhG+/bt8w3/05E2GnhWr17tu17Dj/Y30v5NSofn61prGffRcqg283n3AQDYNyWBd0kqL6axsFueRpnpaJZArtmUlc51pKFFm8w6d+4sX375pZkvwTtnglastB+TXq/9jPSkP8fFxfnmQ9Ln26tXL9MZXIfca2jTOYnq1q3rG3UGALADUxLAL4HoD3/4g5kLKFjuvPNOee+990x/nhdffNFUhHSYvXZ68xo2bJjp7K2jz7wTM65atco3B5FKTEyUggULmlDlnZhRR8XRIRUA7MOUBLipQBTs/kNeOoGinq73vMaMGWNO15t4atq0aeYEALBLdut1abOZ/t349ttvzXx12pqgrQw60ky7ZoTrel3w8ygzAADcgvW64NdAlLXzGQAAbsB6XQjI0h0AALgJ63XB78PuAQAAwhGBCAAAWI9ABAAArEcfIgAI06HlecXwctiMQATXfoDz4Q34b2i50lUAdIkmwEYEIoQMc4MAzhla7r0PwFYEIoQMc4MgP6gsZo+h5cDNIRAhZPgAR35QWQQQCAQiAK5CZRFAIBCIAAeiWShnVBYBBAKBCHAgmoUAILgIRIAD0SwEAMFFIAIciGYhAAgulu4AAADWo0IUYHSOBQDA+QhEAUbnWAAAnI9AFGB0jgUAwPkIRAFG51gAAJyPTtUAAMB6BCIAAGA9AhEAALAegQgAAFiPQAQAAKxHIAIAANYjEAEAAOsRiAAAgPWYmBHAddfcS05OznSe04zsOgkpANzM+p6h/LwhEAHI1Zp748ePz/G62bNnS40aNTiSAPyyvmcoPm8IRACuu+Zebm8PAIH+rPHeRyAQiMIMTR8I1Jp7ABDOnzUEojBD0wcAAHlHIAozNH0AANzo6tWrsnPnTjlx4oSULFlS6tWrJ5GRkUF7fAJRmHFyORIAgOxs2LBBZsyYIUePHvVtK1eunAwYMECaNGkiwcA8RAAAIKRhaPTo0VKtWjWZPn26rFy50pzrZd2u1wcDgQgAAISsmUwrQ/fcc4+MGzdOateuLXFxceZcL+v2mTNnmv0CjUAEAABCQvsMaTNZ165dpUCBzJFEL+v2I0eOmP0CjT5EAAD4GVOg5I52oFZVq1bN9nrvdu9+gUQgAgAgzKdAOXbsmJw+fTpPt0nOxTIaOSlWrJiULVv2hvvpaDKVlJRkmsmy0u0Z9wskAhEAAGE8BYqGoUe7PSZpqZfzdfvx1wluOYmKjpFFCxfcMBTp0HodTbZ48WLTZyhjs1l6errZXr58ebNfoBGIAAAI4ylQtDKkYehitaaSHlss4I9X4NJpkf3rzePeKBDpPEM6tF5Hk40aNcr0GdJmMq0MaRjavHmzjB07NijzERGIAACwgIah9MKlxWmaNGliQo+ONhs4cKBvu1aGdHuw5iEiEAEAgJDS0HPvvfcyUzUQDIz6APidgnNFRkZK/fr1Q/b4VIhgDaeN+gDczmm/U04dSQV3IBDBGk4a9QGEAyf9Tjl5JBXcgUAEazhp1IcX32j9d1wU3/bt/Z1y8kgquAOBCAgRvtEG5rgovu3by6kjqeB8BCIgRPhG64zj4rZv+8GuKir6ysAGBCIgxPhGy3FxclVR0VcGNiAQAYBLpmugegYEDoEIAFw0tFxRVQT8j0AEAC4ZWg4gcAhEAOCSoeUAAodA5CfMJwMAgHsRiPyA+WQAAHA3ApEfMJ/M9VE9AwA4HYHIjxj5cS2qZwAANyAQIaCongEA3IBAhKCgegYAcLICoX4CAAAAoUaFCAAACxS4eCqsHsffCEQAAFigUNKGUD8FRyMQAQBggYtVm0h6oeJBqRAVcmH4clUgmjhxojz33HMyaNAgmTp1qtnm8Xhk7NixZq2hkydPSqNGjWT69OlSu3Zt3+0uX74sQ4cOlaVLl8rFixelRYsWMmPGDKlQoUIIXw0AOL9Jwm3NHzQL5UzDUHrh0kH833AX1wSirVu3mtBTr169TNsnT54sU6ZMkXnz5pn1hsaNGyetWrWSvXv3Snx8vNnn6aeflo8++kiWLVsmpUqVkiFDhki7du1k27ZtEhkZGaJXBAD548Zv38HCsUFYB6Jz585J165d5Y033jCBx0urQ1opGjlypHTq1Mlsmz9/vpQtW1aWLFkiffv2NfPgzJkzRxYuXCgtW7Y0+yxatEgqVqwoa9askTZt2mT7mFpV0pPXmTNnAv46AfyMKkjomz68/w9uChk0CyGsA9HAgQOlbdu2JtBkDERJSUly9OhRad26tW9bTEyMNG3aVDZt2mQCkVaB0tLSMu2TkJAgderUMfvkFIi0eU6b4gCEhpv+CAcbTR8cG1gYiLSZ65///KdpMstKw5DSilBGejk5Odm3T3R0tJQoUeKafby3z86IESNk8ODBmSpEWlUCEBxUQQAEk6MD0Q8//GA6UK9atUpiY2Nz3C8iIiLTZW1Ky7otqxvto5UmPQEIDaogAILJ0TNVa3NXSkqKNGzYUAoWLGhO69evl1dffdX87K0MZa306G2815UrV05SU1PNCLSc9gEAAHZzdIVIh8fv2rUr07YePXpIzZo1Zfjw4VKtWjUTeFavXi3169c312v40dA0adIkc1nDVFRUlNmnc+fOZtuRI0dk9+7dZoQaEGoMEwaA0HN0INJh89r5OaPChQubofPe7TqkfsKECVK9enVz0p/j4uKkS5cu5vpixYpJr169zFB7vV3JkiXNnER169b1jToDQonOwwAQeo4ORLkxbNgwM9nigAEDfBMzap8j7xxEKjEx0TSxaYXIOzGjzlvEHETBQxUkZwwTBoDQc10gWrduXabL2jF6zJgx5pQT7ZA9bdo0c0JoUAXJGZ2HASD0XBeI4E5UQQAgtApcOh1Wj+NvBCIEBVUQAAgN7UsbFR0jsn990B4zKjrGPK6bEIgAAAhjOsXMooULzFJWeZGcnCzjx483y2NVrlw5T7fVMOS2qW0IRAAAhDkNJ/kNKJUrVzaLp4c7AhEAIGzQTwb5RSDyI4aWA0Bo0E8GN4tA5EcMLQfcOVLFbaNiODbXop8MbhaByI8YWg6485u+W0bFcGyuj34yuBkEIj9iaDkQum/6NoyKCUUVxC3HBrhZBCIAYfVNP9xHxVAFAQKjQIDuFwAAwDUIRAAAwHo0mQEhxrwpABB6BCIgRJg3BQCcg0AEhAjzpgCAcxCIgBBixBAAOAOBCEFBPxkAgJMRiBBQ9JMBALgBgQgBRT8ZAIAbEIgQcPSTAQA4HRMzAgAA6xGIAACA9QhEAADAegQiAABgPTpV+xFz7QAA4E4EIj9grh0AANyNQOQHzLUDAIC7EYj8hLl2AABwLzpVAwAA6xGIAACA9QhEAADAegQiAABgPQIRAACwHoEIAABYj0AEAACsRyACAADWIxABAADrEYgAAID1CEQAAMB6rGUGAAhrly5dkoMHD2Z7XXJycqbz7FSqVEliY2MD9vzgDAQiAEBY0zDUp0+f6+4zfvz4HK+bPXu21KhRIwDPDE5CIAKAMHCzVZBwroTo69JQczO3R/gjEAFAGLjZKkg4V0I05IXj64J/EYgAIAzcbBXEex+wC/2rfkYgAoAwQBUE+UH/qp8RiAAH4lsbgGCgf9XPCESAA/GtDUAwUFn8GYEIIUMVJGd8awOA4CIQIWSoguSMb205I0gDCAQCEUKGKgjygyANIBAIRAgZqiDID4I0gEAgEAFwFYI0gEBgtXsAAGA9AhEAALAegQgAAFiPPkQBxhBhAACcj0AUYAwRBgDA+QhEAcYQYQAAnI9AFGAMEQYAwPnoVA0AAKxHhQgAwtjVq1dl586dcuLECSlZsqTUq1dPIiMjQ/20AMchEAFAmNqwYYPMmDFDjh496ttWrlw5GTBggDRp0iSkzw1wGprMACBMw9Do0aOlWrVqMn36dFm5cqU518u6Xa8H8LMIj8fjyXAZOThz5owUK1ZMTp8+LUWLFuU4AXB0M1nXrl1N+Bk3bpwUKPDzd9/09HQZNWqUJCUlyaJFi2g+Q9g7k8u/31SIACDMaJ8hbSbTUJQxDCm9rNuPHDli9gPggkA0ceJEufPOOyU+Pl7KlCkjHTt2lL1792baRwtcY8aMkYSEBClUqJA0a9ZM9uzZk2mfy5cvy5NPPimlS5eWwoULS4cOHeTQoUNBfjUAEBzagVpVrVo12+u92737AXB4IFq/fr0MHDhQvvjiC1m9erVcuXJFWrduLefPn/ftM3nyZJkyZYq89tprsnXrVtNhsFWrVnL27FnfPk8//bS89957smzZMtm4caOcO3dO2rVrZ8rKABBudDSZ0max7Hi3e/cD4LI+RMePHzeVIg1KOkJCn7pWhjTwDB8+3FcNKlu2rEyaNEn69u1r2gxvueUWWbhwofz+9783+xw+fFgqVqxoOhm2adMmV49NHyIAbkEfIiDM+xDpi8n67UfbybVq5BUTEyNNmzaVTZs2mcvbtm2TtLS0TPtoiKpTp45vn+xosNKDmPEEAG6g8wzp0PrNmzebDtTajeDChQvmXC/r9v79+9OhGnDjPERaDRo8eLDcd999Jswo79waWhHKSC8nJyf79omOjpYSJUpcs0/GuTmy6780duzYALwSAAg8raLrZ5jOQ6RdD7zKly9vtjMPEeDSQPTEE0+YERHaByiriIiIa8JT1m1Z3WifESNGmADmpRUibWYDALfQ0HPvvfcyUzUQLoFIR4h9+OGHZiKxChUq+LZrB2qllR791uOVkpLiqxrpPqmpqXLy5MlMVSLdp3Hjxjk+pja96QkA3N58Vr9+/VA/DcDxHN2HSKs4WhlasWKFfPbZZ9cMIdXLGnh0BJqXhh/tdO0NOw0bNpSoqKhM++j8G7t3775uIAIAAPZwdIVI272XLFkiH3zwgZmLyNvnR3uL65xD2uSlI8wmTJgg1atXNyf9OS4uTrp06eLbt1evXjJkyBApVaqU6ZA9dOhQqVu3rrRs2TLErxAAADiBowPRzJkzzblOtpjR3LlzpXv37ubnYcOGycWLF82ICm0Wa9SokaxatcoEKK/ExEQpWLCgdO7c2ezbokULmTdvHiMsAACA++YhCiXmIQIAwH3Cch4iAACAQCAQAQAA6xGIAACA9QhEAADAegQiAABgPUcPu3cS72A8FnkFAMA9vH+3bzSonkCUS2fPnjXnrGcGAIA7/47r8PucMA9RLqWnp8vhw4fNhI83Wjg20LwLzf7www/XnVPBRhwbjg3vG36n+KwJrTMO+xullSENQwkJCVKgQM49hagQ5ZIexIwLyzqBvtGc8GZzIo4Nx4b3Db9TfNaEVlEH/Y26XmXIi07VAADAegQiAABgPQKRC8XExMjo0aPNOTg2vG/4neLzhs9hJ4lx6d8oOlUDAADrUSECAADWIxABAADrEYgAAID1CEQAAMB6BKIQmDhxotx5551m1usyZcpIx44dZe/evdfMrDlmzBgzs2ahQoWkWbNmsmfPnkz7zJ4922zXia909uxTp05d81gdOnSQSpUqSWxsrJQvX166detmZtx2qmAeG6/Lly/Lf/3Xf5n9duzYIU4VzGNTpUoVc13G05/+9CdxqmC/b/7nf/5HGjVqZO6ndOnS0qlTJ7H92Kxbt+6a94z3tHXrVrH9fbNv3z558MEHzftF97v33ntl7dq14lQTg3hs/vnPf0qrVq2kePHiUqpUKenTp4+cO3dOgo1AFALr16+XgQMHyhdffCGrV6+WK1euSOvWreX8+fO+fSZPnixTpkyR1157zXyYlCtXzrxhvGuqqQsXLsgDDzwgzz33XI6P1bx5c3n77bfNG/ndd9+V77//Xv77v/9bnCqYx8Zr2LBh5hfa6YJ9bF588UU5cuSI7zRq1ChxqmAeG/090i8WPXr0kK+//lo+//xz6dKli9h+bBo3bpzp/aKnP/7xjyZc33HHHWL7+6Zt27bm/j/77DPZtm2b+RLWrl07OXr0qNh8bA4fPiwtW7aUW2+9VbZs2SKffPKJCVXdu3eXoPMg5FJSUnQJXs/69evN5fT0dE+5cuU8f/nLX3z7XLp0yVOsWDHPrFmzrrn92rVrze1Pnjx5w8f64IMPPBEREZ7U1FSPGwT62KxcudJTs2ZNz549e8x+27dv97hFII9N5cqVPYmJiR63CtSxSUtL8/ziF7/wvPnmmx63CtbnjX7GlClTxvPiiy96bD82x48fN9s3bNjg23bmzBmzbc2aNR6bj83rr79u3idXr171bdPPYd3322+/9QQTFSIHOH36tDkvWbKkOU9KSjLfGjSNe+kEV02bNpVNmzbl+3FOnDghixcvNt/koqKixPZjc+zYMendu7csXLhQ4uLixG0C/b6ZNGmSKV/rN9nx48dLamqq2H5stLT/73//26xtWL9+fdMM/Zvf/OaaZgInC9bnzYcffig//vhjaL7pO+zY6O/R7bffLgsWLDAVFq22vP7661K2bFlp2LCh2HxsLl++LNHR0ZkWXdXmN7Vx40YJJgJRiGkb7ODBg+W+++6TOnXqmG3eEqr+smSkl/NTXh0+fLgULlzY/FIePHhQPvjgA7H92Oh96wd1v379HFvOD+X7ZtCgQbJs2TLTx+GJJ56QqVOnyoABA8T2Y7N//35zrv0mtAnx448/lhIlSpg/AvqFw+mC8XnjNWfOHGnTpo1Z9dwNAnlstO+MNjtt377d9MnRPp2JiYmmeUj7zdh8bO6//36z/1//+lfzpevkyZO+5jVtdg0mAlGI6R+bnTt3ytKlS7P9Jcr6psy6LTeeffZZ84u4atUqiYyMlMcee8zcl83HZtq0aXLmzBkZMWKEuFGg3zfPPPOM+SNfr1490w9k1qxZ5g/cTz/9JDYfm/T0dHM+cuRIeeihh8y3+7lz55r7eOedd8TpgvF5ow4dOiSffvqp9OrVS9wikMdG99cvFNo5+X//93/lyy+/NB2stQ9RsP/oO+3Y1K5dW+bPny8vv/yyqdRrP6Rq1aqZYKV/r4KJQBRCTz75pCkr67fwChUq+LbrG0JlTdkpKSnXpPHc0FENNWrUMJ3d9Fv/ypUrTUc5m4+NdmzUY6Al3oIFC5oOfUqrRY8//rg4WbDeNxndfffd5vy7774Tm4+NNpGpWrVq+bbpe0g/wLX66mTBfN9oSNSKtI5ydYNgfN5oNVE/f3V0WYMGDWTGjBmmaUjDgO3vmy5dupj70eZo/dKlFdjjx49L1apVJZgIRCGgCVoT94oVK8wvStb/dL2sbzYtsXppKVF7/Wv/n5t9bG+7rc3H5tVXXzUjhHSYvZ40JKrly5eb/jJOFMr3jVYYMwYCW4+NVoQ0AGUcfpyWliYHDhyQypUrixMF+32jj6eBSCvRTu+rGKxjoyOtVMZ+Mt7L3qqj03hC8HmjQapIkSLmc1ibFfVLfFAFtQs3jP79+5ue+OvWrfMcOXLEd7pw4YLvCGnPfd1nxYoVnl27dnkeeeQRT/ny5c3IBC+9jfbGf+ONN3wjGPTyTz/9ZK7fsmWLZ9q0aWbbgQMHPJ999pnnvvvu8/zyl780owFsPjZZJSUlOX6UWbCOzaZNmzxTpkwx2/bv3+9Zvny5JyEhwdOhQwePUwXzfTNo0CAz0uzTTz/1/L//9/88vXr1MqNkTpw44XGiYP9O6agpvf5f//qXx+mCdWx0lFmpUqU8nTp18uzYscOzd+9ez9ChQz1RUVHmsu3vm2nTpnm2bdtmjstrr73mKVSokOeVV14J+msmEIWAvimyO82dO9e3jw5pHD16tBnWGBMT42nSpIl5w2Wk11/vfnbu3Olp3ry5p2TJkuY+qlSp4unXr5/n0KFDHtuPjRsDUbCOjX4wNWrUyHzQxcbGem677TZzm/Pnz3ucKpjvGx1OPmTIEBOC4uPjPS1btvTs3r3b41TB/p3SP4qNGzf2uEEwj83WrVs9rVu3Np/H+r65++67zbQfTiVBPDbdunUzxyU6OtpTr149z4IFCzyhEKH/BLcmBQAA4Cz0IQIAANYjEAEAAOsRiAAAgPUIRAAAwHoEIgAAYD0CEQAAsB6BCAAAWI9ABAAArEcgAgAA1iMQAQgbOvF+y5YtpU2bNtdcp6uLFytWzPGr0gMIDQIRgLARERFhVlrfsmWLvP76677tSUlJMnz4cHnllVekUqVKfn1MXe0egPsRiACElYoVK5rgM3ToUBOEtGrUq1cvadGihdx1113y29/+VooUKSJly5aVbt26yY8//ui77SeffCL33XefFC9eXEqVKiXt2rWT77//3nf9gQMHTOh6++23pVmzZhIbGyuLFi0K0SsF4E8s7gogLHXs2FFOnTolDz30kPz5z3+WrVu3yh133CG9e/eWxx57TC5evGiqRleuXJHPPvvM3Obdd981gadu3bpy/vx5eeGFF0wI2rFjhxQoUMD8XLVqValSpYq8/PLLUr9+fYmJiZGEhIRQv1wAN4lABCAspaSkSJ06deSnn36Sv/3tb7J9+3bTlPbpp5/69jl06JCpKO3du1dq1KhxzX0cP35cypQpI7t27TL35Q1EU6dOlUGDBgX5FQEIJJrMAIQlDTJ9+vSR22+/XX73u9/Jtm3bZO3ataa5zHuqWbOm2dfbLKbnXbp0kWrVqknRokVN+FFZO2JrpQlAeCkY6icAAIFSsGBBc1Lp6enSvn17mTRp0jX7lS9f3pzr9VoxeuONN0wzmN5GK0OpqamZ9i9cuDD/aUCYIRABsEKDBg1MHyHt/+MNSRlp09o333xjRqf9+te/Nts2btwYgmcKIBRoMgNghYEDB8qJEyfkkUcekS+//FL2798vq1atkp49e8rVq1elRIkSZmTZ7Nmz5bvvvjMdrQcPHhzqpw0gSAhEAKygTWCff/65CT86caM2hWnHaJ2sUUeQ6WnZsmWmr5Fe98wzz8hf//rXUD9tAEHCKDMAAGA9KkQAAMB6BCIAAGA9AhEAALAegQgAAFiPQAQAAKxHIAIAANYjEAEAAOsRiAAAgPUIRAAAwHoEIgAAYD0CEQAAENv9fxd7Y4SezKLtAAAAAElFTkSuQmCC", "text/plain": [ "
" ] @@ -6735,22 +3322,15 @@ "There you have it! It seems that powerlifting got slightly more competitive in the female population over the years. Of course we cannot draw any statistical conclusions from this, but at least there is a tendency!\n", "\n" ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] } ], "metadata": { "celltoolbar": "Tags", "hide_input": false, "kernelspec": { - "display_name": "big_data_environment", + "display_name": "Python [conda env:big_data_environment]", "language": "python", - "name": "python3" + "name": "conda-env-big_data_environment-py" }, "language_info": { "codemirror_mode": { @@ -6762,7 +3342,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.13.2" + "version": "3.13.12" }, "toc": { "base_numbering": 1,