{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# How many Pro Players are out there ?\n", "\n", "On [PlayGwent]() only data from the top 2860 pro players is shared. Though it is like there are (many) more. We'll try using some data science on the MMR scores from players from previous seasons to estmate how many players are actually out there. This can be done because the very first season in Masters 2 (Season of the Wolf) the total number of active players (MMR 2400 indicating at least 25 games were played) was about that threshold (the lowest MMR that season is 2407).\n", "\n", "Assuming the distribution of MMR scores remains similar accross seasons, we can leverage that to estimate the total number of players for seasons where there were more players. The idea is to determine the percentage of players with an MMR higher than 9700, 9800, 9900, 10000 and 10100 from the first season and, using those percentages, extrapolate the number of players above those thresholds to the total number of players for other seasons." ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "# # When running on Binder: Uncomment and execute this cell to install packages required\n", "# import sys\n", "# !conda install --yes --prefix {sys.prefix} seaborn\n", "# !conda install --yes --prefix {sys.prefix} nb_black" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "data": { "application/javascript": [ "\n", " setTimeout(function() {\n", " var nbb_cell_id = 2;\n", " var nbb_unformatted_code = \"%load_ext nb_black\\n\\nimport pandas as pd\\nimport numpy as np\\nimport seaborn as sns\\nimport matplotlib.pyplot as plt\";\n", " var nbb_formatted_code = \"%load_ext nb_black\\n\\nimport pandas as pd\\nimport numpy as np\\nimport seaborn as sns\\nimport matplotlib.pyplot as plt\";\n", " var nbb_cells = Jupyter.notebook.get_cells();\n", " for (var i = 0; i < nbb_cells.length; ++i) {\n", " if (nbb_cells[i].input_prompt_number == nbb_cell_id) {\n", " if (nbb_cells[i].get_text() == nbb_unformatted_code) {\n", " nbb_cells[i].set_text(nbb_formatted_code);\n", " }\n", " break;\n", " }\n", " }\n", " }, 500);\n", " " ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "%load_ext nb_black\n", "\n", "import pandas as pd\n", "import numpy as np\n", "import seaborn as sns\n", "import matplotlib.pyplot as plt" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
seasonmin_mmrmax_mmrnum_matches
0M2_01 Wolf 2020240710484699496
1M2_02 Love 2020777610537769172
2M2_03 Bear 2020942710669862283
3M2_04 Elf 20209666107511004603
4M2_05 Viper 2020963510622859640
5M2_06 Magic 2020962410597793013
6M2_07 Griffin 2020969810667996516
7M2_08 Draconid 2020966610546837545
8M2_09 Dryad 2020967810725854593
9M2_10 Cat 2020970310804928845
10M2_11 Mahakam 2020970610783983150
11M2_12 Wild Hunt 20209756107241182353
12M3_01 Wolf 2021963710653808651
13M3_02 Love 2021968410714917027
14M3_03 Bear 2021963710576766502
15M3_04 Elf 2021968610678944323
16M3_05 Viper 2021970110753956484
17M3_06 Magic 2021968110632869262
18M3_07 Griffin 2021966910633856103
19M3_08 Draconid 2021968110767911273
20M3_09 Dryad 2021968810809940655
21M3_10 Cat 2021961410366719696
22M3_11 Mahakam 20219725105801017256
23M3_12 Wild Hunt 20219735107141044941
24M4_01 Wolf 2022964610684883881
\n", "
" ], "text/plain": [ " season min_mmr max_mmr num_matches\n", "0 M2_01 Wolf 2020 2407 10484 699496\n", "1 M2_02 Love 2020 7776 10537 769172\n", "2 M2_03 Bear 2020 9427 10669 862283\n", "3 M2_04 Elf 2020 9666 10751 1004603\n", "4 M2_05 Viper 2020 9635 10622 859640\n", "5 M2_06 Magic 2020 9624 10597 793013\n", "6 M2_07 Griffin 2020 9698 10667 996516\n", "7 M2_08 Draconid 2020 9666 10546 837545\n", "8 M2_09 Dryad 2020 9678 10725 854593\n", "9 M2_10 Cat 2020 9703 10804 928845\n", "10 M2_11 Mahakam 2020 9706 10783 983150\n", "11 M2_12 Wild Hunt 2020 9756 10724 1182353\n", "12 M3_01 Wolf 2021 9637 10653 808651\n", "13 M3_02 Love 2021 9684 10714 917027\n", "14 M3_03 Bear 2021 9637 10576 766502\n", "15 M3_04 Elf 2021 9686 10678 944323\n", "16 M3_05 Viper 2021 9701 10753 956484\n", "17 M3_06 Magic 2021 9681 10632 869262\n", "18 M3_07 Griffin 2021 9669 10633 856103\n", "19 M3_08 Draconid 2021 9681 10767 911273\n", "20 M3_09 Dryad 2021 9688 10809 940655\n", "21 M3_10 Cat 2021 9614 10366 719696\n", "22 M3_11 Mahakam 2021 9725 10580 1017256\n", "23 M3_12 Wild Hunt 2021 9735 10714 1044941\n", "24 M4_01 Wolf 2022 9646 10684 883881" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" }, { "data": { "application/javascript": [ "\n", " setTimeout(function() {\n", " var nbb_cell_id = 3;\n", " var nbb_unformatted_code = \"df = pd.read_excel(\\\"./output/player_stats.xlsx\\\").drop(columns=[\\\"Unnamed: 0\\\"])\\nseasons_df = (\\n df.groupby([\\\"season\\\"])\\n .agg(\\n min_mmr=pd.NamedAgg(\\\"mmr\\\", \\\"min\\\"),\\n max_mmr=pd.NamedAgg(\\\"mmr\\\", \\\"max\\\"),\\n num_matches=pd.NamedAgg(\\\"matches\\\", \\\"sum\\\"),\\n )\\n .reset_index()\\n)\\n\\nseasons_df\";\n", " var nbb_formatted_code = \"df = pd.read_excel(\\\"./output/player_stats.xlsx\\\").drop(columns=[\\\"Unnamed: 0\\\"])\\nseasons_df = (\\n df.groupby([\\\"season\\\"])\\n .agg(\\n min_mmr=pd.NamedAgg(\\\"mmr\\\", \\\"min\\\"),\\n max_mmr=pd.NamedAgg(\\\"mmr\\\", \\\"max\\\"),\\n num_matches=pd.NamedAgg(\\\"matches\\\", \\\"sum\\\"),\\n )\\n .reset_index()\\n)\\n\\nseasons_df\";\n", " var nbb_cells = Jupyter.notebook.get_cells();\n", " for (var i = 0; i < nbb_cells.length; ++i) {\n", " if (nbb_cells[i].input_prompt_number == nbb_cell_id) {\n", " if (nbb_cells[i].get_text() == nbb_unformatted_code) {\n", " nbb_cells[i].set_text(nbb_formatted_code);\n", " }\n", " break;\n", " }\n", " }\n", " }, 500);\n", " " ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "df = pd.read_excel(\"./output/player_stats.xlsx\").drop(columns=[\"Unnamed: 0\"])\n", "seasons_df = (\n", " df.groupby([\"season\"])\n", " .agg(\n", " min_mmr=pd.NamedAgg(\"mmr\", \"min\"),\n", " max_mmr=pd.NamedAgg(\"mmr\", \"max\"),\n", " num_matches=pd.NamedAgg(\"matches\", \"sum\"),\n", " )\n", " .reset_index()\n", ")\n", "\n", "seasons_df" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "C:\\ProgramData\\Anaconda3\\lib\\site-packages\\seaborn\\distributions.py:2619: FutureWarning: `distplot` is a deprecated function and will be removed in a future version. Please adapt your code to use either `displot` (a figure-level function with similar flexibility) or `histplot` (an axes-level function for histograms).\n", " warnings.warn(msg, FutureWarning)\n" ] }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" }, { "data": { "application/javascript": [ "\n", " setTimeout(function() {\n", " var nbb_cell_id = 4;\n", " var nbb_unformatted_code = \"sns.distplot(df[df[\\\"season\\\"] == \\\"M2_01 Wolf 2020\\\"][\\\"mmr\\\"], bins=50)\\nplt.show()\";\n", " var nbb_formatted_code = \"sns.distplot(df[df[\\\"season\\\"] == \\\"M2_01 Wolf 2020\\\"][\\\"mmr\\\"], bins=50)\\nplt.show()\";\n", " var nbb_cells = Jupyter.notebook.get_cells();\n", " for (var i = 0; i < nbb_cells.length; ++i) {\n", " if (nbb_cells[i].input_prompt_number == nbb_cell_id) {\n", " if (nbb_cells[i].get_text() == nbb_unformatted_code) {\n", " nbb_cells[i].set_text(nbb_formatted_code);\n", " }\n", " break;\n", " }\n", " }\n", " }, 500);\n", " " ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "sns.distplot(df[df[\"season\"] == \"M2_01 Wolf 2020\"][\"mmr\"], bins=50)\n", "plt.show()" ] }, { "cell_type": "code", "execution_count": 5, "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", "
percentilemmr
00.02407.000
10.52413.285
21.02426.000
31.52447.855
42.02477.420
.........
19597.510037.575
19698.010064.000
19798.510088.145
19899.010135.170
19999.510290.865
\n", "

200 rows × 2 columns

\n", "
" ], "text/plain": [ " percentile mmr\n", "0 0.0 2407.000\n", "1 0.5 2413.285\n", "2 1.0 2426.000\n", "3 1.5 2447.855\n", "4 2.0 2477.420\n", ".. ... ...\n", "195 97.5 10037.575\n", "196 98.0 10064.000\n", "197 98.5 10088.145\n", "198 99.0 10135.170\n", "199 99.5 10290.865\n", "\n", "[200 rows x 2 columns]" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" }, { "data": { "application/javascript": [ "\n", " setTimeout(function() {\n", " var nbb_cell_id = 5;\n", " var nbb_unformatted_code = \"percentiles = np.percentile(\\n df[df[\\\"season\\\"] == \\\"M2_01 Wolf 2020\\\"][\\\"mmr\\\"], [x / 2 for x in range(0, 200, 1)]\\n)\\npercentiles_df = pd.DataFrame(\\n {\\\"percentile\\\": [x / 2 for x in range(0, 200, 1)], \\\"mmr\\\": percentiles}\\n)\\npercentiles_df.to_excel(\\\"temp.xlsx\\\")\\npercentiles_df\";\n", " var nbb_formatted_code = \"percentiles = np.percentile(\\n df[df[\\\"season\\\"] == \\\"M2_01 Wolf 2020\\\"][\\\"mmr\\\"], [x / 2 for x in range(0, 200, 1)]\\n)\\npercentiles_df = pd.DataFrame(\\n {\\\"percentile\\\": [x / 2 for x in range(0, 200, 1)], \\\"mmr\\\": percentiles}\\n)\\npercentiles_df.to_excel(\\\"temp.xlsx\\\")\\npercentiles_df\";\n", " var nbb_cells = Jupyter.notebook.get_cells();\n", " for (var i = 0; i < nbb_cells.length; ++i) {\n", " if (nbb_cells[i].input_prompt_number == nbb_cell_id) {\n", " if (nbb_cells[i].get_text() == nbb_unformatted_code) {\n", " nbb_cells[i].set_text(nbb_formatted_code);\n", " }\n", " break;\n", " }\n", " }\n", " }, 500);\n", " " ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "percentiles = np.percentile(\n", " df[df[\"season\"] == \"M2_01 Wolf 2020\"][\"mmr\"], [x / 2 for x in range(0, 200, 1)]\n", ")\n", "percentiles_df = pd.DataFrame(\n", " {\"percentile\": [x / 2 for x in range(0, 200, 1)], \"mmr\": percentiles}\n", ")\n", "percentiles_df.to_excel(\"temp.xlsx\")\n", "percentiles_df" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Test case\n", "\n", "To test if the method actually worked, I got into Pro Rank during the Season of the Dryad and stopped playing ranked (actually stopped playing that season entirely as I didn't have time to climb). The result was that I had an unimpressive MMR of 3360, good for rank of 12816. If our estimates work we should get a number that is in that order of magnitude. \n", "\n", "We'll check the percentage of players who are at MMR 9678 during the first season (74 percent is at or below this threshold, so 26 is above. So if the total number of players listed, 2 860 corresponds with 26 % of the total Pro players, we can quickly figure out the total number of player should be around 11 000. Still some ways off the total number I know by getting into Pro Rank and staying there. Actually, using the same trick we can use the MMR I got and the position to get an approximation of 13782 Pro Players with MMR 2400 or above that season. However, for now this is close enough." ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
percentilemmr
14874.09678.0
\n", "
" ], "text/plain": [ " percentile mmr\n", "148 74.0 9678.0" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" }, { "data": { "application/javascript": [ "\n", " setTimeout(function() {\n", " var nbb_cell_id = 6;\n", " var nbb_unformatted_code = \"# MMR cutoff to appear on pro ladder during the Season of the Dryad = 9678\\npercentiles_df[percentiles_df.mmr >= 9678][:1]\";\n", " var nbb_formatted_code = \"# MMR cutoff to appear on pro ladder during the Season of the Dryad = 9678\\npercentiles_df[percentiles_df.mmr >= 9678][:1]\";\n", " var nbb_cells = Jupyter.notebook.get_cells();\n", " for (var i = 0; i < nbb_cells.length; ++i) {\n", " if (nbb_cells[i].input_prompt_number == nbb_cell_id) {\n", " if (nbb_cells[i].get_text() == nbb_unformatted_code) {\n", " nbb_cells[i].set_text(nbb_formatted_code);\n", " }\n", " break;\n", " }\n", " }\n", " }, 500);\n", " " ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# MMR cutoff to appear on pro ladder during the Season of the Dryad = 9678\n", "percentiles_df[percentiles_df.mmr >= 9678][:1]" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "11000.0" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" }, { "data": { "application/javascript": [ "\n", " setTimeout(function() {\n", " var nbb_cell_id = 7;\n", " var nbb_unformatted_code = \"(2860 / 26) * 100\";\n", " var nbb_formatted_code = \"(2860 / 26) * 100\";\n", " var nbb_cells = Jupyter.notebook.get_cells();\n", " for (var i = 0; i < nbb_cells.length; ++i) {\n", " if (nbb_cells[i].input_prompt_number == nbb_cell_id) {\n", " if (nbb_cells[i].get_text() == nbb_unformatted_code) {\n", " nbb_cells[i].set_text(nbb_formatted_code);\n", " }\n", " break;\n", " }\n", " }\n", " }, 500);\n", " " ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "(2860 / 26) * 100" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Using multiple cutoffs\n", "\n", "As small changes in the number of players can cause a big shift, here we'll use multiple MMR cutoffs to make the estimations and do some statistics on them to see if we can get close to the total number of players we are aware off." ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "data": { "application/javascript": [ "\n", " setTimeout(function() {\n", " var nbb_cell_id = 8;\n", " var nbb_unformatted_code = \"seasons = list(set(df[\\\"season\\\"]))\\n\\noutput = []\\n\\nfor i in [9700, 9800, 9900, 10000, 10100]:\\n for season in seasons:\\n players_above_threshold = (\\n df[(df.season == season) & (df.mmr >= i)]\\n .groupby([\\\"season\\\"])\\n .agg(num_players=pd.NamedAgg(\\\"mmr\\\", \\\"count\\\"))\\n .reset_index()\\n ).iloc[0][\\\"num_players\\\"]\\n percentile = int(100 - percentiles_df[percentiles_df.mmr > i][:1][\\\"percentile\\\"])\\n\\n output.append(\\n {\\n \\\"season\\\": season,\\n \\\"mmr_cutoff\\\": i,\\n \\\"num_players\\\": players_above_threshold,\\n \\\"total_players_est\\\": players_above_threshold * 100 / percentile,\\n }\\n )\\n\\nestimates_df = pd.DataFrame(output).sort_values(\\\"season\\\")\";\n", " var nbb_formatted_code = \"seasons = list(set(df[\\\"season\\\"]))\\n\\noutput = []\\n\\nfor i in [9700, 9800, 9900, 10000, 10100]:\\n for season in seasons:\\n players_above_threshold = (\\n df[(df.season == season) & (df.mmr >= i)]\\n .groupby([\\\"season\\\"])\\n .agg(num_players=pd.NamedAgg(\\\"mmr\\\", \\\"count\\\"))\\n .reset_index()\\n ).iloc[0][\\\"num_players\\\"]\\n percentile = int(100 - percentiles_df[percentiles_df.mmr > i][:1][\\\"percentile\\\"])\\n\\n output.append(\\n {\\n \\\"season\\\": season,\\n \\\"mmr_cutoff\\\": i,\\n \\\"num_players\\\": players_above_threshold,\\n \\\"total_players_est\\\": players_above_threshold * 100 / percentile,\\n }\\n )\\n\\nestimates_df = pd.DataFrame(output).sort_values(\\\"season\\\")\";\n", " var nbb_cells = Jupyter.notebook.get_cells();\n", " for (var i = 0; i < nbb_cells.length; ++i) {\n", " if (nbb_cells[i].input_prompt_number == nbb_cell_id) {\n", " if (nbb_cells[i].get_text() == nbb_unformatted_code) {\n", " nbb_cells[i].set_text(nbb_formatted_code);\n", " }\n", " break;\n", " }\n", " }\n", " }, 500);\n", " " ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "seasons = list(set(df[\"season\"]))\n", "\n", "output = []\n", "\n", "for i in [9700, 9800, 9900, 10000, 10100]:\n", " for season in seasons:\n", " players_above_threshold = (\n", " df[(df.season == season) & (df.mmr >= i)]\n", " .groupby([\"season\"])\n", " .agg(num_players=pd.NamedAgg(\"mmr\", \"count\"))\n", " .reset_index()\n", " ).iloc[0][\"num_players\"]\n", " percentile = int(100 - percentiles_df[percentiles_df.mmr > i][:1][\"percentile\"])\n", "\n", " output.append(\n", " {\n", " \"season\": season,\n", " \"mmr_cutoff\": i,\n", " \"num_players\": players_above_threshold,\n", " \"total_players_est\": players_above_threshold * 100 / percentile,\n", " }\n", " )\n", "\n", "estimates_df = pd.DataFrame(output).sort_values(\"season\")" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
seasonlow_estimatehigh_estimatemean_estimatestd_err
0M2_01 Wolf 20202900.0000003600.03117.636364124.944153
1M2_02 Love 20204566.6666677100.05620.242424441.315936
2M2_03 Bear 20206036.36363610300.07329.272727760.229978
3M2_04 Elf 20209927.27272718000.012319.4545451494.370140
4M2_05 Viper 20207766.66666711400.09372.060606727.332197
5M2_06 Magic 20206800.0000009800.08320.181818618.201230
6M2_07 Griffin 202012836.36363619900.014683.2727271331.618216
7M2_08 Draconid 20209566.66666713300.011186.242424696.853229
8M2_09 Dryad 20209733.33333312580.011218.666667458.757501
9M2_10 Cat 202012800.00000014620.013774.181818369.275995
10M2_11 Mahakam 202012995.45454518900.016041.757576976.287680
11M2_12 Wild Hunt 202012995.45454535900.023051.7575763678.743988
12M3_01 Wolf 20217968.18181813700.09929.6363641046.105394
13M3_02 Love 202111645.45454519500.013977.7575761430.087791
14M3_03 Bear 20217466.66666710900.09195.333333715.137594
15M3_04 Elf 202111586.36363620300.014814.6060611527.809485
16M3_05 Viper 202112990.90909120900.016159.5151521322.547676
17M3_06 Magic 202111263.63636417200.013526.0606061034.558786
18M3_07 Griffin 202110140.90909115800.012241.5151521040.267969
19M3_08 Draconid 202111200.00000016900.012854.5454551051.176279
20M3_09 Dryad 202111868.18181815900.013442.969697746.264455
21M3_10 Cat 20215100.0000007770.06559.939394575.186402
22M3_11 Mahakam 202112981.81818223300.017920.3636361647.708090
23M3_12 Wild Hunt 202112981.81818227500.019567.6969702331.781053
24M4_01 Wolf 20228690.90909118900.012063.5151521789.893240
\n", "
" ], "text/plain": [ " season low_estimate high_estimate mean_estimate \\\n", "0 M2_01 Wolf 2020 2900.000000 3600.0 3117.636364 \n", "1 M2_02 Love 2020 4566.666667 7100.0 5620.242424 \n", "2 M2_03 Bear 2020 6036.363636 10300.0 7329.272727 \n", "3 M2_04 Elf 2020 9927.272727 18000.0 12319.454545 \n", "4 M2_05 Viper 2020 7766.666667 11400.0 9372.060606 \n", "5 M2_06 Magic 2020 6800.000000 9800.0 8320.181818 \n", "6 M2_07 Griffin 2020 12836.363636 19900.0 14683.272727 \n", "7 M2_08 Draconid 2020 9566.666667 13300.0 11186.242424 \n", "8 M2_09 Dryad 2020 9733.333333 12580.0 11218.666667 \n", "9 M2_10 Cat 2020 12800.000000 14620.0 13774.181818 \n", "10 M2_11 Mahakam 2020 12995.454545 18900.0 16041.757576 \n", "11 M2_12 Wild Hunt 2020 12995.454545 35900.0 23051.757576 \n", "12 M3_01 Wolf 2021 7968.181818 13700.0 9929.636364 \n", "13 M3_02 Love 2021 11645.454545 19500.0 13977.757576 \n", "14 M3_03 Bear 2021 7466.666667 10900.0 9195.333333 \n", "15 M3_04 Elf 2021 11586.363636 20300.0 14814.606061 \n", "16 M3_05 Viper 2021 12990.909091 20900.0 16159.515152 \n", "17 M3_06 Magic 2021 11263.636364 17200.0 13526.060606 \n", "18 M3_07 Griffin 2021 10140.909091 15800.0 12241.515152 \n", "19 M3_08 Draconid 2021 11200.000000 16900.0 12854.545455 \n", "20 M3_09 Dryad 2021 11868.181818 15900.0 13442.969697 \n", "21 M3_10 Cat 2021 5100.000000 7770.0 6559.939394 \n", "22 M3_11 Mahakam 2021 12981.818182 23300.0 17920.363636 \n", "23 M3_12 Wild Hunt 2021 12981.818182 27500.0 19567.696970 \n", "24 M4_01 Wolf 2022 8690.909091 18900.0 12063.515152 \n", "\n", " std_err \n", "0 124.944153 \n", "1 441.315936 \n", "2 760.229978 \n", "3 1494.370140 \n", "4 727.332197 \n", "5 618.201230 \n", "6 1331.618216 \n", "7 696.853229 \n", "8 458.757501 \n", "9 369.275995 \n", "10 976.287680 \n", "11 3678.743988 \n", "12 1046.105394 \n", "13 1430.087791 \n", "14 715.137594 \n", "15 1527.809485 \n", "16 1322.547676 \n", "17 1034.558786 \n", "18 1040.267969 \n", "19 1051.176279 \n", "20 746.264455 \n", "21 575.186402 \n", "22 1647.708090 \n", "23 2331.781053 \n", "24 1789.893240 " ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" }, { "data": { "application/javascript": [ "\n", " setTimeout(function() {\n", " var nbb_cell_id = 9;\n", " var nbb_unformatted_code = \"estimate_summary = (\\n estimates_df.groupby([\\\"season\\\"])\\n .agg(\\n low_estimate=pd.NamedAgg(\\\"total_players_est\\\", \\\"min\\\"),\\n high_estimate=pd.NamedAgg(\\\"total_players_est\\\", \\\"max\\\"),\\n mean_estimate=pd.NamedAgg(\\\"total_players_est\\\", \\\"mean\\\"),\\n std_err=pd.NamedAgg(\\\"total_players_est\\\", \\\"sem\\\"),\\n )\\n .reset_index()\\n)\\nestimate_summary.to_excel(\\\"./output/player_estimates.xlsx\\\")\\nestimate_summary\";\n", " var nbb_formatted_code = \"estimate_summary = (\\n estimates_df.groupby([\\\"season\\\"])\\n .agg(\\n low_estimate=pd.NamedAgg(\\\"total_players_est\\\", \\\"min\\\"),\\n high_estimate=pd.NamedAgg(\\\"total_players_est\\\", \\\"max\\\"),\\n mean_estimate=pd.NamedAgg(\\\"total_players_est\\\", \\\"mean\\\"),\\n std_err=pd.NamedAgg(\\\"total_players_est\\\", \\\"sem\\\"),\\n )\\n .reset_index()\\n)\\nestimate_summary.to_excel(\\\"./output/player_estimates.xlsx\\\")\\nestimate_summary\";\n", " var nbb_cells = Jupyter.notebook.get_cells();\n", " for (var i = 0; i < nbb_cells.length; ++i) {\n", " if (nbb_cells[i].input_prompt_number == nbb_cell_id) {\n", " if (nbb_cells[i].get_text() == nbb_unformatted_code) {\n", " nbb_cells[i].set_text(nbb_formatted_code);\n", " }\n", " break;\n", " }\n", " }\n", " }, 500);\n", " " ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "estimate_summary = (\n", " estimates_df.groupby([\"season\"])\n", " .agg(\n", " low_estimate=pd.NamedAgg(\"total_players_est\", \"min\"),\n", " high_estimate=pd.NamedAgg(\"total_players_est\", \"max\"),\n", " mean_estimate=pd.NamedAgg(\"total_players_est\", \"mean\"),\n", " std_err=pd.NamedAgg(\"total_players_est\", \"sem\"),\n", " )\n", " .reset_index()\n", ")\n", "estimate_summary.to_excel(\"./output/player_estimates.xlsx\")\n", "estimate_summary" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Results ... maybe ...\n", "\n", "So here we can see the minimum and maximum estimated numbers of Pro Players can differ a lot, and for the season of the Dryad even the max estimate is still at least 1000 players shy of the ground truth. Though, given the scarcity of data to work with and some of the assumptions we need to make (it is unlikely that the discribution remains exactly the same as buffs/nerfs to cards and new cards could affect how easy it is to reach a certain fMMR with specific factions) it is the best that can be done with the data at hand and it is probably close enough.\n", "\n", "One thing I wanted to check if if there is a correlation between the number of games played by the top 2860 players and the estimated total number of players. This can easily be done by mergin our estimations with the number of players in the season summaries and plotting them using a scatter plot (or regplot to have a regression line in the plot). We'll do this for the top 500 players seperately as well to see if the trend holds for that section of the players." ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
seasonmin_mmrmax_mmrnum_matchesnum_matches_top500low_estimatehigh_estimatemean_estimatestd_errMasters
0M2_01 Wolf 20202407104846994961783232900.0000003600.03117.636364124.944153M2
1M2_02 Love 20207776105377691721839724566.6666677100.05620.242424441.315936M2
2M2_03 Bear 20209427106698622832054396036.36363610300.07329.272727760.229978M2
3M2_04 Elf 202096661075110046032517129927.27272718000.012319.4545451494.370140M2
4M2_05 Viper 20209635106228596402076227766.66666711400.09372.060606727.332197M2
5M2_06 Magic 20209624105977930131885366800.0000009800.08320.181818618.201230M2
6M2_07 Griffin 202096981066799651625971312836.36363619900.014683.2727271331.618216M2
7M2_08 Draconid 20209666105468375452097859566.66666713300.011186.242424696.853229M2
8M2_09 Dryad 20209678107258545932020999733.33333312580.011218.666667458.757501M2
9M2_10 Cat 202097031080492884521386712800.00000014620.013774.181818369.275995M2
10M2_11 Mahakam 202097061078398315023071012995.45454518900.016041.757576976.287680M2
11M2_12 Wild Hunt 2020975610724118235329071812995.45454535900.023051.7575763678.743988M2
12M3_01 Wolf 20219637106538086512249987968.18181813700.09929.6363641046.105394M3
13M3_02 Love 202196841071491702724326611645.45454519500.013977.7575761430.087791M3
14M3_03 Bear 20219637105767665021891287466.66666710900.09195.333333715.137594M3
15M3_04 Elf 202196861067894432324279211586.36363620300.014814.6060611527.809485M3
16M3_05 Viper 202197011075395648424047212990.90909120900.016159.5151521322.547676M3
17M3_06 Magic 202196811063286926221575111263.63636417200.013526.0606061034.558786M3
18M3_07 Griffin 202196691063385610321276410140.90909115800.012241.5151521040.267969M3
19M3_08 Draconid 202196811076791127323236011200.00000016900.012854.5454551051.176279M3
20M3_09 Dryad 202196881080994065522383211868.18181815900.013442.969697746.264455M3
21M3_10 Cat 20219614103667196961491045100.0000007770.06559.939394575.186402M3
22M3_11 Mahakam 2021972510580101725624707812981.81818223300.017920.3636361647.708090M3
23M3_12 Wild Hunt 2021973510714104494125846912981.81818227500.019567.6969702331.781053M3
24M4_01 Wolf 20229646106848838812264118690.90909118900.012063.5151521789.893240M4
\n", "
" ], "text/plain": [ " season min_mmr max_mmr num_matches num_matches_top500 \\\n", "0 M2_01 Wolf 2020 2407 10484 699496 178323 \n", "1 M2_02 Love 2020 7776 10537 769172 183972 \n", "2 M2_03 Bear 2020 9427 10669 862283 205439 \n", "3 M2_04 Elf 2020 9666 10751 1004603 251712 \n", "4 M2_05 Viper 2020 9635 10622 859640 207622 \n", "5 M2_06 Magic 2020 9624 10597 793013 188536 \n", "6 M2_07 Griffin 2020 9698 10667 996516 259713 \n", "7 M2_08 Draconid 2020 9666 10546 837545 209785 \n", "8 M2_09 Dryad 2020 9678 10725 854593 202099 \n", "9 M2_10 Cat 2020 9703 10804 928845 213867 \n", "10 M2_11 Mahakam 2020 9706 10783 983150 230710 \n", "11 M2_12 Wild Hunt 2020 9756 10724 1182353 290718 \n", "12 M3_01 Wolf 2021 9637 10653 808651 224998 \n", "13 M3_02 Love 2021 9684 10714 917027 243266 \n", "14 M3_03 Bear 2021 9637 10576 766502 189128 \n", "15 M3_04 Elf 2021 9686 10678 944323 242792 \n", "16 M3_05 Viper 2021 9701 10753 956484 240472 \n", "17 M3_06 Magic 2021 9681 10632 869262 215751 \n", "18 M3_07 Griffin 2021 9669 10633 856103 212764 \n", "19 M3_08 Draconid 2021 9681 10767 911273 232360 \n", "20 M3_09 Dryad 2021 9688 10809 940655 223832 \n", "21 M3_10 Cat 2021 9614 10366 719696 149104 \n", "22 M3_11 Mahakam 2021 9725 10580 1017256 247078 \n", "23 M3_12 Wild Hunt 2021 9735 10714 1044941 258469 \n", "24 M4_01 Wolf 2022 9646 10684 883881 226411 \n", "\n", " low_estimate high_estimate mean_estimate std_err Masters \n", "0 2900.000000 3600.0 3117.636364 124.944153 M2 \n", "1 4566.666667 7100.0 5620.242424 441.315936 M2 \n", "2 6036.363636 10300.0 7329.272727 760.229978 M2 \n", "3 9927.272727 18000.0 12319.454545 1494.370140 M2 \n", "4 7766.666667 11400.0 9372.060606 727.332197 M2 \n", "5 6800.000000 9800.0 8320.181818 618.201230 M2 \n", "6 12836.363636 19900.0 14683.272727 1331.618216 M2 \n", "7 9566.666667 13300.0 11186.242424 696.853229 M2 \n", "8 9733.333333 12580.0 11218.666667 458.757501 M2 \n", "9 12800.000000 14620.0 13774.181818 369.275995 M2 \n", "10 12995.454545 18900.0 16041.757576 976.287680 M2 \n", "11 12995.454545 35900.0 23051.757576 3678.743988 M2 \n", "12 7968.181818 13700.0 9929.636364 1046.105394 M3 \n", "13 11645.454545 19500.0 13977.757576 1430.087791 M3 \n", "14 7466.666667 10900.0 9195.333333 715.137594 M3 \n", "15 11586.363636 20300.0 14814.606061 1527.809485 M3 \n", "16 12990.909091 20900.0 16159.515152 1322.547676 M3 \n", "17 11263.636364 17200.0 13526.060606 1034.558786 M3 \n", "18 10140.909091 15800.0 12241.515152 1040.267969 M3 \n", "19 11200.000000 16900.0 12854.545455 1051.176279 M3 \n", "20 11868.181818 15900.0 13442.969697 746.264455 M3 \n", "21 5100.000000 7770.0 6559.939394 575.186402 M3 \n", "22 12981.818182 23300.0 17920.363636 1647.708090 M3 \n", "23 12981.818182 27500.0 19567.696970 2331.781053 M3 \n", "24 8690.909091 18900.0 12063.515152 1789.893240 M4 " ] }, "execution_count": 13, "metadata": {}, "output_type": "execute_result" }, { "data": { "application/javascript": [ "\n", " setTimeout(function() {\n", " var nbb_cell_id = 13;\n", " var nbb_unformatted_code = \"# same thing but only considering the top 500 players\\nseasons_top500only_df = (\\n df[pd.to_numeric(df[\\\"rank\\\"]) <= 500]\\n .groupby([\\\"season\\\"])\\n .agg(\\n min_mmr=pd.NamedAgg(\\\"mmr\\\", \\\"min\\\"),\\n max_mmr=pd.NamedAgg(\\\"mmr\\\", \\\"max\\\"),\\n num_matches=pd.NamedAgg(\\\"matches\\\", \\\"sum\\\"),\\n )\\n .reset_index()\\n)\\n\\nmerged_df = pd.merge(\\n seasons_df,\\n seasons_top500only_df,\\n how=\\\"inner\\\",\\n on=\\\"season\\\",\\n suffixes=(\\\"\\\", \\\"_top500\\\"),\\n)\\nmerged_df = pd.merge(merged_df, estimate_summary, how=\\\"inner\\\", on=\\\"season\\\").drop(\\n columns=[\\\"min_mmr_top500\\\", \\\"max_mmr_top500\\\"]\\n)\\n\\nmerged_df[\\\"Masters\\\"] = merged_df[\\\"season\\\"].apply(lambda x: x.split('_')[0])\\n\\nmerged_df\";\n", " var nbb_formatted_code = \"# same thing but only considering the top 500 players\\nseasons_top500only_df = (\\n df[pd.to_numeric(df[\\\"rank\\\"]) <= 500]\\n .groupby([\\\"season\\\"])\\n .agg(\\n min_mmr=pd.NamedAgg(\\\"mmr\\\", \\\"min\\\"),\\n max_mmr=pd.NamedAgg(\\\"mmr\\\", \\\"max\\\"),\\n num_matches=pd.NamedAgg(\\\"matches\\\", \\\"sum\\\"),\\n )\\n .reset_index()\\n)\\n\\nmerged_df = pd.merge(\\n seasons_df,\\n seasons_top500only_df,\\n how=\\\"inner\\\",\\n on=\\\"season\\\",\\n suffixes=(\\\"\\\", \\\"_top500\\\"),\\n)\\nmerged_df = pd.merge(merged_df, estimate_summary, how=\\\"inner\\\", on=\\\"season\\\").drop(\\n columns=[\\\"min_mmr_top500\\\", \\\"max_mmr_top500\\\"]\\n)\\n\\nmerged_df[\\\"Masters\\\"] = merged_df[\\\"season\\\"].apply(lambda x: x.split(\\\"_\\\")[0])\\n\\nmerged_df\";\n", " var nbb_cells = Jupyter.notebook.get_cells();\n", " for (var i = 0; i < nbb_cells.length; ++i) {\n", " if (nbb_cells[i].input_prompt_number == nbb_cell_id) {\n", " if (nbb_cells[i].get_text() == nbb_unformatted_code) {\n", " nbb_cells[i].set_text(nbb_formatted_code);\n", " }\n", " break;\n", " }\n", " }\n", " }, 500);\n", " " ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# same thing but only considering the top 500 players\n", "seasons_top500only_df = (\n", " df[pd.to_numeric(df[\"rank\"]) <= 500]\n", " .groupby([\"season\"])\n", " .agg(\n", " min_mmr=pd.NamedAgg(\"mmr\", \"min\"),\n", " max_mmr=pd.NamedAgg(\"mmr\", \"max\"),\n", " num_matches=pd.NamedAgg(\"matches\", \"sum\"),\n", " )\n", " .reset_index()\n", ")\n", "\n", "merged_df = pd.merge(\n", " seasons_df,\n", " seasons_top500only_df,\n", " how=\"inner\",\n", " on=\"season\",\n", " suffixes=(\"\", \"_top500\"),\n", ")\n", "merged_df = pd.merge(merged_df, estimate_summary, how=\"inner\", on=\"season\").drop(\n", " columns=[\"min_mmr_top500\", \"max_mmr_top500\"]\n", ")\n", "\n", "merged_df[\"Masters\"] = merged_df[\"season\"].apply(lambda x: x.split(\"_\")[0])\n", "\n", "merged_df" ] }, { "cell_type": "code", "execution_count": 15, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" }, { "data": { "application/javascript": [ "\n", " setTimeout(function() {\n", " var nbb_cell_id = 15;\n", " var nbb_unformatted_code = \"sns.regplot(data=merged_df, x=\\\"num_matches\\\", y=\\\"high_estimate\\\", scatter=False,\\n color=\\\".25\\\",)\\nsns.scatterplot(\\n data=merged_df, x=\\\"num_matches\\\", y=\\\"high_estimate\\\", hue=\\\"Masters\\\"\\n)\\nplt.show()\";\n", " var nbb_formatted_code = \"sns.regplot(\\n data=merged_df, x=\\\"num_matches\\\", y=\\\"high_estimate\\\", scatter=False, color=\\\".25\\\",\\n)\\nsns.scatterplot(data=merged_df, x=\\\"num_matches\\\", y=\\\"high_estimate\\\", hue=\\\"Masters\\\")\\nplt.show()\";\n", " var nbb_cells = Jupyter.notebook.get_cells();\n", " for (var i = 0; i < nbb_cells.length; ++i) {\n", " if (nbb_cells[i].input_prompt_number == nbb_cell_id) {\n", " if (nbb_cells[i].get_text() == nbb_unformatted_code) {\n", " nbb_cells[i].set_text(nbb_formatted_code);\n", " }\n", " break;\n", " }\n", " }\n", " }, 500);\n", " " ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "sns.regplot(\n", " data=merged_df, x=\"num_matches\", y=\"high_estimate\", scatter=False, color=\".25\",\n", ")\n", "sns.scatterplot(data=merged_df, x=\"num_matches\", y=\"high_estimate\", hue=\"Masters\")\n", "plt.show()" ] }, { "cell_type": "code", "execution_count": 14, "metadata": { "scrolled": true }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" }, { "data": { "application/javascript": [ "\n", " setTimeout(function() {\n", " var nbb_cell_id = 14;\n", " var nbb_unformatted_code = \"sns.regplot(data=merged_df, x=\\\"num_matches_top500\\\", y=\\\"high_estimate\\\", scatter=False, color=\\\".25\\\")\\nsns.scatterplot(data=merged_df, x=\\\"num_matches_top500\\\", y=\\\"high_estimate\\\", hue=\\\"Masters\\\")\\nplt.show()\";\n", " var nbb_formatted_code = \"sns.regplot(\\n data=merged_df,\\n x=\\\"num_matches_top500\\\",\\n y=\\\"high_estimate\\\",\\n scatter=False,\\n color=\\\".25\\\",\\n)\\nsns.scatterplot(\\n data=merged_df, x=\\\"num_matches_top500\\\", y=\\\"high_estimate\\\", hue=\\\"Masters\\\"\\n)\\nplt.show()\";\n", " var nbb_cells = Jupyter.notebook.get_cells();\n", " for (var i = 0; i < nbb_cells.length; ++i) {\n", " if (nbb_cells[i].input_prompt_number == nbb_cell_id) {\n", " if (nbb_cells[i].get_text() == nbb_unformatted_code) {\n", " nbb_cells[i].set_text(nbb_formatted_code);\n", " }\n", " break;\n", " }\n", " }\n", " }, 500);\n", " " ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "sns.regplot(\n", " data=merged_df,\n", " x=\"num_matches_top500\",\n", " y=\"high_estimate\",\n", " scatter=False,\n", " color=\".25\",\n", ")\n", "sns.scatterplot(\n", " data=merged_df, x=\"num_matches_top500\", y=\"high_estimate\", hue=\"Masters\"\n", ")\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "There is a clear and mostly linear correlation between the number of Pro Ranked players and the number of games played by both the top 2860 and top 500 players. So the more players there are, the more matches someone has to play to get in the higher ranks. " ] } ], "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.7.6" } }, "nbformat": 4, "nbformat_minor": 4 }