{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Hash et distribution\n", "\n", "Une [fonction de hash](https://en.wikipedia.org/wiki/Hash_function) a pour propriété statistiques de transformer une distribution quelconque en distribution uniforme. C'est pour cela que beaucoup d'algorithmes utilisent ce type de fonction avant tout traitement pour répartir les données de manières uniformes plutôt que d'utiliser une variable une colonne telle quelle." ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "ExecuteTime": { "end_time": "2016-11-05T15:54:02.328548", "start_time": "2016-11-05T15:54:02.314546" } }, "outputs": [], "source": [ "%matplotlib inline\n", "import matplotlib.pyplot as plt" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Récupérer un fichier wikipédia" ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "ExecuteTime": { "end_time": "2016-11-05T15:23:15.295619", "start_time": "2016-11-05T15:22:28.337739" } }, "outputs": [ { "data": { "text/plain": [ "'./pageviews-20180201-000000.gz'" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from mlstatpy.data.wikipedia import download_pageviews\n", "import os\n", "from datetime import datetime\n", "\n", "download_pageviews(datetime(2018, 2, 1), folder=\".\")" ] }, { "cell_type": "markdown", "metadata": { "ExecuteTime": { "end_time": "2016-11-05T15:24:45.698455", "start_time": "2016-11-05T15:24:45.690457" } }, "source": [ "On ne garde que les pages françaises." ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "ExecuteTime": { "end_time": "2016-11-05T15:29:31.840352", "start_time": "2016-11-05T15:29:27.522790" } }, "outputs": [], "source": [ "with open(\"pageviews-20180201-000000\", \"r\", encoding=\"utf-8\") as f:\n", " fr = filter(lambda line: line.startswith(\"fr \"), f)\n", " with open(\"pageviews-20180201-000000.fr.txt\", \"w\", encoding=\"utf-8\") as g:\n", " for line in fr:\n", " g.write(line)" ] }, { "cell_type": "code", "execution_count": 8, "metadata": { "ExecuteTime": { "end_time": "2016-11-05T15:29:50.180490", "start_time": "2016-11-05T15:29:49.934039" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "(136440, 2)\n" ] }, { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
pageimpressions
131064Wikipédia:Accueil_principal10868
115817Sp?cial:Search8031
116771Spécial:Recherche2815
95020Patrick_Dils841
44847France668
\n", "
" ], "text/plain": [ " page impressions\n", "131064 Wikipédia:Accueil_principal 10868\n", "115817 Sp?cial:Search 8031\n", "116771 Spécial:Recherche 2815\n", "95020 Patrick_Dils 841\n", "44847 France 668" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "import pandas\n", "\n", "df = pandas.read_csv(\n", " \"pageviews-20180201-000000.fr.txt\", encoding=\"utf-8\", sep=\" \", header=None\n", ")\n", "df.columns = \"country page impressions _\".split()\n", "df = df[[\"page\", \"impressions\"]]\n", "df = df.sort_values(\"impressions\", ascending=False)\n", "print(df.shape)\n", "df.head()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Les données sont biaisées car les pages non démandées par les utilisateurs sur cett date ne sont pas répertoriées mais cela ne nuit pas à la démonstration faite ci-dessous." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Distribution volume, impressions par rapprt au premier caractère" ] }, { "cell_type": "code", "execution_count": 9, "metadata": { "ExecuteTime": { "end_time": "2016-11-05T15:31:12.869696", "start_time": "2016-11-05T15:31:12.741686" } }, "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", "
pageimpressionsch1
131064Wikipédia:Accueil_principal10868W
115817Sp?cial:Search8031S
116771Spécial:Recherche2815S
95020Patrick_Dils841P
44847France668F
\n", "
" ], "text/plain": [ " page impressions ch1\n", "131064 Wikipédia:Accueil_principal 10868 W\n", "115817 Sp?cial:Search 8031 S\n", "116771 Spécial:Recherche 2815 S\n", "95020 Patrick_Dils 841 P\n", "44847 France 668 F" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df[\"ch1\"] = df[\"page\"].apply(lambda r: r[0] if isinstance(r, str) else r)\n", "df.head()" ] }, { "cell_type": "code", "execution_count": 10, "metadata": { "ExecuteTime": { "end_time": "2016-11-05T15:34:10.528138", "start_time": "2016-11-05T15:34:10.462105" } }, "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", "
ch1pageimpressionsvolume
0$$21
1&&_(album)11
2''Ndrangheta'Alî_Sharî'atî'Mamohato'Îmran84
3((3753)_Cruithne(What's_the_Story)_Morning_Glor...6054
4---17-16-92-93-305-18-19-20-241-30424911
\n", "
" ], "text/plain": [ " ch1 page impressions volume\n", "0 $ $ 2 1\n", "1 & &_(album) 1 1\n", "2 ' 'Ndrangheta'Alî_Sharî'atî'Mamohato'Îmran 8 4\n", "3 ( (3753)_Cruithne(What's_the_Story)_Morning_Glor... 60 54\n", "4 - --17-16-92-93-305-18-19-20-241-304 249 11" ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], "source": [ "co = df.copy()\n", "co[\"volume\"] = 1\n", "gr = co.groupby(\"ch1\", as_index=False).sum().sort_values(\"ch1\")\n", "gr.head()" ] }, { "cell_type": "code", "execution_count": 11, "metadata": { "ExecuteTime": { "end_time": "2016-11-05T15:35:36.166922", "start_time": "2016-11-05T15:35:35.653742" } }, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 11, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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ixc7urVrTJw4Uc2aNdPKlSv1wQcfqHfv3goJCdHf//53SdLTTz+tmTNnOjQYSk1NVdmyZQvcXqZMGZ06deo2dpS/qKgobdmyRfHx8erSpYvdto0bN6pv375asWJFvr+o3U5/zHtLY/77x57Wr1/v8L/U5efw4cNq1qyZ+djT01Ourv8bbNm+fXuFhYU5ojU7mzZtMv9tGIZ69eql9957T3/6058c2NW1vL29Hd1Csbj33nvNXy4c5YMPPtDgwYNVqVIlPfTQQ+b6rKwsBQcH69SpU0pISHBgh84lKipKderUUatWrUrl90xJ+vTTTwvclpiYqLfeeku5ubm3saNrTZ8+Xe7u7vrxxx+vCfqnT5+u7t27a/r06Tcc8XY7rFixQu+8846eeuopSdKXX36pkJAQvffee3bf5x2pMOdz8ODB+uKLL/TWW285qEspMjJSS5YsUVBQkLZt26b+/ftr2LBh2r59u+bMmaP+/fvLzc3NYf1J0m+//WZ3DhMSEtSzZ0/zcbt27XT8+HFHtGYnICDghgFwabhEZt68efmuT09PV1JSknr37q2PP/7Y/MOaI1WoUEHDhg3TsGHDdPjwYS1btkwLFy7Uiy++qB49eujf//63o1s0eXp6qmvXrrr33nvVpUsXff7551qyZEmp+COPzWbTihUr1K9fPz311FNavXq1jhw5ovbt22vPnj2qU6eOo1s0/fzzz/rkk09UuXJl9enTx+EjmfLTp08f3XvvverTp486duyof/3rX7f98jE7Bm6Km5ubMX78eOM///mP3foyZcoY+/btc1BX+atatarx3XffGYZhGGfPnjVcXFyMnTt3mtsPHDhgeHt7O6i7q+6++27j008/LXD7P//5T8Pf3//2NVSABx54wJgxY0aB21999VWje/fut7Gj/Lm4uBipqanmYy8vL+PHH380H6ekpBiurq6OaM10ox5LC09PT+PgwYMFbj9w4IDh4eFxGzsqnNJ6PlG8/v73vxvly5c3Nm3aZBiGYZw7d8649957jXr16hn//e9/HdtcISUnJzv8+5FhGMbYsWONypUrGy1btjTmz59vnD592tEtFcrBgweNvn37Gm5ubsaQIUOMo0ePOrSfOnXqGLGxsQVu//zzz406dercvoauw93d3Th27JjdOg8PD+P48eMO6uhahTmfLi4uxrRp025jV9fy9/c3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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "gr[(gr[\"ch1\"] >= \"A\") & (gr[\"ch1\"] <= \"Z\")].plot(\n", " x=\"ch1\", y=[\"impressions\", \"volume\"], kind=\"bar\", figsize=(14, 4)\n", ")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Il est possible de distribuer les impressions et les volumns sur plusieurs machines mais ce serait beaucoup plus simple si les volumes (volume de données) et les impressions (usage de ces données) suivent des distributions identiques." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Distribution après hashage" ] }, { "cell_type": "code", "execution_count": 12, "metadata": { "ExecuteTime": { "end_time": "2016-11-05T15:39:49.277534", "start_time": "2016-11-05T15:39:49.268529" } }, "outputs": [ { "data": { "text/plain": [ "'0309a6c666a7a803fdb9db95de71cf01'" ] }, "execution_count": 12, "metadata": {}, "output_type": "execute_result" } ], "source": [ "import hashlib\n", "\n", "\n", "def hash(text):\n", " md5 = hashlib.md5()\n", " md5.update(text.encode(\"utf-8\"))\n", " return md5.hexdigest()\n", "\n", "\n", "hash(\"France\")" ] }, { "cell_type": "code", "execution_count": 13, "metadata": { "ExecuteTime": { "end_time": "2016-11-05T15:40:42.198890", "start_time": "2016-11-05T15:40:41.705045" } }, "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", "
pageimpressionsch1volumehash
131064Wikipédia:Accueil_principal10868W16cc68aa5234cb8c4e129d5b431eea95a
115817Sp?cial:Search8031S1e4c619292a0e11c8afba20eb4531cbf8
116771Spécial:Recherche2815S16f86a30966129c5bf50147eb44c4e82c
95020Patrick_Dils841P1624f2274ebdbb30187e57d430c58990d
44847France668F10309a6c666a7a803fdb9db95de71cf01
\n", "
" ], "text/plain": [ " page impressions ch1 volume \\\n", "131064 Wikipédia:Accueil_principal 10868 W 1 \n", "115817 Sp?cial:Search 8031 S 1 \n", "116771 Spécial:Recherche 2815 S 1 \n", "95020 Patrick_Dils 841 P 1 \n", "44847 France 668 F 1 \n", "\n", " hash \n", "131064 6cc68aa5234cb8c4e129d5b431eea95a \n", "115817 e4c619292a0e11c8afba20eb4531cbf8 \n", "116771 6f86a30966129c5bf50147eb44c4e82c \n", "95020 624f2274ebdbb30187e57d430c58990d \n", "44847 0309a6c666a7a803fdb9db95de71cf01 " ] }, "execution_count": 13, "metadata": {}, "output_type": "execute_result" } ], "source": [ "ha = co.copy()\n", "ha[\"hash\"] = ha[\"page\"].apply(lambda r: hash(r) if isinstance(r, str) else r)\n", "ha.head()" ] }, { "cell_type": "code", "execution_count": 14, "metadata": { "ExecuteTime": { "end_time": "2016-11-05T15:41:38.768438", "start_time": "2016-11-05T15:41:38.646889" } }, "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", "
pageimpressionsch1volumehashch2
131064Wikipédia:Accueil_principal10868W16cc68aa5234cb8c4e129d5b431eea95a6
115817Sp?cial:Search8031S1e4c619292a0e11c8afba20eb4531cbf8e
116771Spécial:Recherche2815S16f86a30966129c5bf50147eb44c4e82c6
95020Patrick_Dils841P1624f2274ebdbb30187e57d430c58990d6
44847France668F10309a6c666a7a803fdb9db95de71cf010
\n", "
" ], "text/plain": [ " page impressions ch1 volume \\\n", "131064 Wikipédia:Accueil_principal 10868 W 1 \n", "115817 Sp?cial:Search 8031 S 1 \n", "116771 Spécial:Recherche 2815 S 1 \n", "95020 Patrick_Dils 841 P 1 \n", "44847 France 668 F 1 \n", "\n", " hash ch2 \n", "131064 6cc68aa5234cb8c4e129d5b431eea95a 6 \n", "115817 e4c619292a0e11c8afba20eb4531cbf8 e \n", "116771 6f86a30966129c5bf50147eb44c4e82c 6 \n", "95020 624f2274ebdbb30187e57d430c58990d 6 \n", "44847 0309a6c666a7a803fdb9db95de71cf01 0 " ] }, "execution_count": 14, "metadata": {}, "output_type": "execute_result" } ], "source": [ "ha[\"ch2\"] = ha[\"hash\"].apply(lambda r: r[0] if isinstance(r, str) else r)\n", "ha.head()" ] }, { "cell_type": "code", "execution_count": 15, "metadata": { "ExecuteTime": { "end_time": "2016-11-05T15:42:15.235400", "start_time": "2016-11-05T15:42:15.178888" } }, "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", "
ch2pageimpressionsch1volumehash
00FranceSpécial:JournalLua_BlancoGitListe_des_ép...18493FSLGLLDLÎAÉJNDSÉSSCBBCJGASM1LAATSARAALDZJSMCML...85310309a6c666a7a803fdb9db95de71cf010bc97f0b21a608...
11Élisabeth_RevolGrand_ReimsÉdouard_LockroyNora_...16615ÉGÉNCTNNNSMSALJTRFLAPLVMWSCFDJJVCTBLHNLJLRDDFT...851314edb218946d67eb425e08231e3c25b51f01421c8827b1...
22Australie-OccidentaleRoger_FedererSpécial:List...17276ARSSSESNLYBP4NIAPAÉADNDLCPJLSCSNESLFSLNUSJSJPS...85142350f0145112af1d3b70bdfe583dbfb6203b3bdfe59c7a...
33Daniel_Balavoine-1er_févrierSid_ViciousLune_ro...17219D-1SLDSCACLCETFLBMBLBASSZDJHDDONCDTSASMQPABJBG...85473f922364907f960c529c4a65ac44372e336d5ebc543653...
44Rasual_ButlerPetra_(cygne)Mehdi_Carcela-Gonzal...16847RPMCTFTSEGPHDSACCCCBDLRHMHREPSMLRLLSISMLMPRNTS...84684b85266e177e3327174b900be1d8147c4a2130906289ef...
\n", "
" ], "text/plain": [ " ch2 page impressions \\\n", "0 0 FranceSpécial:JournalLua_BlancoGitListe_des_ép... 18493 \n", "1 1 Élisabeth_RevolGrand_ReimsÉdouard_LockroyNora_... 16615 \n", "2 2 Australie-OccidentaleRoger_FedererSpécial:List... 17276 \n", "3 3 Daniel_Balavoine-1er_févrierSid_ViciousLune_ro... 17219 \n", "4 4 Rasual_ButlerPetra_(cygne)Mehdi_Carcela-Gonzal... 16847 \n", "\n", " ch1 volume \\\n", "0 FSLGLLDLÎAÉJNDSÉSSCBBCJGASM1LAATSARAALDZJSMCML... 8531 \n", "1 ÉGÉNCTNNNSMSALJTRFLAPLVMWSCFDJJVCTBLHNLJLRDDFT... 8513 \n", "2 ARSSSESNLYBP4NIAPAÉADNDLCPJLSCSNESLFSLNUSJSJPS... 8514 \n", "3 D-1SLDSCACLCETFLBMBLBASSZDJHDDONCDTSASMQPABJBG... 8547 \n", "4 RPMCTFTSEGPHDSACCCCBDLRHMHREPSMLRLLSISMLMPRNTS... 8468 \n", "\n", " hash \n", "0 0309a6c666a7a803fdb9db95de71cf010bc97f0b21a608... \n", "1 14edb218946d67eb425e08231e3c25b51f01421c8827b1... \n", "2 2350f0145112af1d3b70bdfe583dbfb6203b3bdfe59c7a... \n", "3 3f922364907f960c529c4a65ac44372e336d5ebc543653... \n", "4 4b85266e177e3327174b900be1d8147c4a2130906289ef... " ] }, "execution_count": 15, "metadata": {}, "output_type": "execute_result" } ], "source": [ "gr = ha.groupby(\"ch2\", as_index=False).sum().sort_values(\"ch2\")\n", "gr.head()" ] }, { "cell_type": "code", "execution_count": 16, "metadata": { "ExecuteTime": { "end_time": "2016-11-05T15:43:04.796228", "start_time": "2016-11-05T15:43:04.371960" } }, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 16, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAABIYAAAFuCAYAAAD0wBNIAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/SrBM8AAAACXBIWXMAAA9hAAAPYQGoP6dpAABDTUlEQVR4nO3deVhV5f7+8XsDMihucGJKEtQcMGcNSSstjmjk0TTLMqe0jgaVkmPH0LTCTDNL08wc6mhp88kBNUytpCyURFOPORzsqwxpQGoCwvr90Y+V+4gWgmx1vV/Xta/Y6/nstT/rCWV7s9azbIZhGAIAAAAAAIDluDi7AQAAAAAAADgHwRAAAAAAAIBFEQwBAAAAAABYFMEQAAAAAACARREMAQAAAAAAWBTBEAAAAAAAgEURDAEAAAAAAFgUwRAAAAAAAIBFuTm7AWcqLi7W0aNHVb16ddlsNme3AwAAAAAAUCEMw9Cvv/6qoKAgubhc+LwgSwdDR48eVXBwsLPbAAAAAAAAuCyOHDmiunXrXnDc0sFQ9erVJf0+SXa73cndAAAAAAAAVIy8vDwFBweb2ceFWDoYKrl8zG63EwwBAAAAAIBrzp8tncPi0wAAAAAAABZFMAQAAAAAAGBRBEMAAAAAAAAWZek1hgAAAAAAuBoVFRWpsLDQ2W3AiapUqSJXV9dy74dgCAAAAACAq4RhGMrIyFBOTo6zW8EVwNfXVwEBAX+6wPTFEAwBAAAAAHCVKAmF/Pz8VLVq1XIFArh6GYah06dPKysrS5IUGBh4yfsiGAIAAAAA4CpQVFRkhkK1atVydjtwMi8vL0lSVlaW/Pz8LvmyMhafBgAAAADgKlCyplDVqlWd3AmuFCXfC+VZb4pgCAAAAACAqwiXj6FERXwvEAwBAAAAAABYFMEQAAAAAAC4rDp37qyRI0c6u40KtWnTJtlstqv+DnEsPg0AAAAAwFUsZPzqSn2/w9Oiy/yaDz/8UFWqVLkM3TjPzTffrGPHjsnHx8fZrZQLwRAAAFeYivhwdykf2AAAAC6XmjVrVvp7FhQUyN3d/bLt393dXQEBAZdt/5WFS8kAAAAAAMBlde6lZCEhIXr22Wc1cOBAeXt7q169evr3v/+t7Oxs9ezZU97e3mrRooW+++478/VLliyRr6+vPv74Y91www3y9PRUVFSUjhw5YtZMnjxZrVq10sKFCxUaGipPT09JUk5OjoYNG6Y6derIbrfr9ttv1/fff2++7vvvv1eXLl1UvXp12e12tW3b1nzv//73v+rRo4dq1KihatWqqVmzZlqzZo2k0i8l++CDD9SsWTN5eHgoJCREM2fOdJiHkJAQPf/883rooYdUvXp1XX/99VqwYIE5XlBQoNjYWAUGBsrT01P16tVTQkJCxfxPuACCIQAAAAAAUKlmzZqljh07aseOHYqOjtaAAQM0cOBAPfjgg9q+fbsaNGiggQMHyjAM8zWnT5/Wc889p7feektfffWVcnJy1K9fP4f9/vjjj/rggw/04YcfKjU1VZLUt29fZWVlae3atUpJSVGbNm10xx136MSJE5Kk/v37q27duvr222+VkpKi8ePHm5e9xcTEKD8/X1u2bFFaWppeeOEFeXt7l3pMKSkpuvfee9WvXz+lpaVp8uTJevrpp7VkyRKHupkzZ6pdu3basWOHHn30UY0YMUL79u2TJL3yyiv697//rZUrV2rfvn1atmyZQkJCKmDGL4xLyQAAAAAAQKW688479Y9//EOSFB8fr3nz5ql9+/bq27evJGncuHGKiIhQZmameblWYWGh5syZo/DwcEnS0qVL1bRpU23btk033XSTpN/PuHnrrbdUp04dSdKXX36pbdu2KSsrSx4eHpKkGTNm6OOPP9b777+vRx55ROnp6RozZoyaNGkiSbrhhhvMPtPT09WnTx81b95cklS/fv0LHtNLL72kO+64Q08//bQkqVGjRvrhhx/04osvavDgwQ7H/uijj5rHOWvWLH3++edq3Lix0tPTdcMNN6hTp06y2WyqV69eOWb5r+GMIQAAAAAAUKlatGhhfu3v7y9JZvhy7rasrCxzm5ubm9q3b28+b9KkiXx9fbVnzx5zW7169cxQSPr9MrGTJ0+qVq1a8vb2Nh+HDh3SgQMHJElxcXEaNmyYIiMjNW3aNHO7JD3++ON69tln1bFjR02aNEk7d+684DHt2bNHHTt2dNjWsWNH7d+/X0VFRaUeu81mU0BAgHmcgwcPVmpqqho3bqzHH39c69evv+D7VRSCIQAAAAAAUKnOvUOZzWa74Lbi4uIy7bdatWoOz0+ePKnAwEClpqY6PPbt26cxY8ZI+n1tot27dys6OlobN25UWFiYPvroI0nSsGHDdPDgQQ0YMEBpaWlq166dXn31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3549e/T1118rIiJCTZo00d69ezV79mzl5+frwQcf1O233+7sFitFXFxcqduLioo0bdo08wfQSy+9VJltXVFOnTqllStX6scff1RgYKDuv//+q/YHM8rnscce07333qtbbrnF2a3gCnXs2DHNmzdPX375pY4dOyYXFxfVr19fvXr10uDBg+Xq6ursFivdwYMHdffddystLU02m808I9Vms0n6/eeNVf3vXFjN66+/ruXLl5+3vVmzZurXr58lgqELfQ4rjdU+i33wwQcaMGCA+vfvrx07dig/P1+SlJubq+eff15r1qxxcoeXl6+vrw4dOiQ/Pz8dPnz4qj57iDOGKlGHDh3UsmVLzZ8//7wfLoZhaPjw4dq5c6eSk5Od1OGV58iRI5o0aZIWLVrk7FYuu//85z/q2rWr0tPTZbPZ1KlTJ7377rsKDAyU9HuAGBQUZJkPZ4mJierZs6e8vb11+vRpffTRRxo4cKBatmyp4uJibd68WevXr7dEOOTi4qKWLVvK19fXYfvmzZvVrl07VatWTTabTRs3bnROg04QFhamL7/8UjVr1tSRI0d066236pdfflGjRo104MABubm56euvv1ZoaKizW73stm/frho1apjH+vbbb2v+/PlKT09XvXr1FBsbq379+jm5y8rj4uIim82mBg0aaOjQoRo0aJACAgKc3ZZTzZkzR9u2bdOdd96pfv366e2331ZCQoKKi4vVu3dvTZkyRW5u1vhd4XfffafIyEg1bNhQXl5eSk5O1gMPPKCCggKtW7dOYWFhSkxMVPXq1Z3daqXq0aOHXF1dtXDhQoWGhmrbtm06fvy4nnzySc2YMcOSQeubb76pWbNmaf/+/ZKkG264QSNHjtSwYcOc3Fnl8vT01J49e877eXrw4EGFhYXpzJkzTuqs8nTp0sXh+fbt23X27Fk1btxY0u+f4V1dXdW2bVtLfRaTpNatW2vUqFEaOHCgqlevru+//17169fXjh071L17d/MKmWvVI488orfeekuBgYFKT09X3bp1L/jLhYMHD1Zyd2VkoNJ4enoae/bsueD4nj17DE9Pz0rs6MqXmppquLi4OLuNStGrVy8jOjrayM7ONvbv329ER0cboaGhxn//+1/DMAwjIyPDMnNhGIYRERFh/POf/zQMwzDeeecdo0aNGsZTTz1ljo8fP97429/+5qz2KlVC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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "gr.plot(x=\"ch2\", y=[\"impressions\", \"volume\"], kind=\"bar\", figsize=(14, 4))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Après avoir appliqué une fonction de hashage, les deux distributions volumes et impressions sont presque uniforme par rapport au premier caractère du hash. Il reste un pic : il provient de la page wikipédia la plus demandée. Ces pages très demandées sont très souvent en très petit nombre et on implémentera une mécanisme de cache s'il s'agit d'un site web. En revanche, lors d'un calcul distribué sur Map / Reduce, un des problèmes consistera à traiter ces clés de distributions qui regroupent une part trop importante des données.\n", "\n", "On recommence le même raisonnement en utilisant les deux premiers caractères du hash comme clé de distribution." ] }, { "cell_type": "code", "execution_count": 17, "metadata": { "ExecuteTime": { "end_time": "2016-11-05T15:57:15.095161", "start_time": "2016-11-05T15:57:14.464595" } }, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 17, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAABIYAAAFzCAYAAABLiAINAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/SrBM8AAAACXBIWXMAAA9hAAAPYQGoP6dpAACjGUlEQVR4nOzdd3hU1dYG8Hdqeg9pEEJooXeEACIIigJeECwoylVRLGC/1qtcr41P7FjAdgEV7IIIiCC9l0AoAUJJIIF00uu08/2x55zMJJMwExInkPf3PPMkmTkzc2Zyyj5rr722SpIkCURERERERERE1OKo3b0CRERERERERETkHgwMERERERERERG1UAwMERERERERERG1UAwMERERERERERG1UAwMERERERERERG1UAwMERERERERERG1UAwMERERERERERG1UAwMERERERERERG1UFp3r4A7WSwWZGRkwM/PDyqVyt2rQ0RERERERETUKCRJQklJCaKioqBW150X1KIDQxkZGYiOjnb3ahARERERERERNYn09HS0adOmzsdbdGDIz88PgPiS/P393bw2RERERERERESNo7i4GNHR0Ursoy4tOjAkDx/z9/dnYIiIiIiIiIiIrjgXK53D4tNERERERERERC0UA0NERERERERERC0UA0NERERERERERC1Ui64xRERERERERHS5kSQJJpMJZrPZ3atCbqTRaKDVai9aQ+hiXA4MbdmyBW+//TYSEhKQmZmJZcuWYeLEiQAAo9GIl156CatXr0ZKSgoCAgIwevRo/N///R+ioqKU18jPz8ejjz6K33//HWq1GpMnT8aHH34IX19fZZlDhw5h5syZ2Lt3L1q1aoVHH30Uzz77rN26/PTTT3j55Zdx5swZdOrUCW+99RbGjh3bwK+CiIiIiIiIqHkzGAzIzMxEeXm5u1eFmgFvb29ERkZCr9c3+DVcDgyVlZWhd+/euO+++zBp0iS7x8rLy7F//368/PLL6N27NwoKCvD444/jH//4B/bt26csN3XqVGRmZmLdunUwGo249957MWPGDCxduhSAmFLt+uuvx+jRo7FgwQIcPnwY9913HwIDAzFjxgwAwI4dO3DHHXdgzpw5GD9+PJYuXYqJEydi//796NGjR4O/ECIiIiIiIqLmyGKxIDU1FRqNBlFRUdDr9ZecLUKXJ0mSYDAY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6enp7tX5Wy1atAhPPPEECgsL3b0qzUp924SzMQ/WGCIiIqIGMVuHkJlZfJqIiIjossXAEBERETWI2VpayMShZERERESXLQaGiIiIqEGUjCEGhoiIiKiJ3XPPPRxG1kQYGCIiIqIGkTOFzC23XCERERHRZY+BISIiImoQOVOINYaIiIiILl8MDBEREVGDyIEh1hgiIiIiunwxMEREREQNomQMMTBEREREdNliYIiIiIgahDWGiIiIiC5/DAwRERFRg9hmDEkMDhEREVETUqlUWL58ubtX44rEwBARERE1iO0QMg4nIyIiIro8MTBEREREDWJbdJoFqImIiIguTwwMERERUYOYLRab3xkYIiIiIsc+//xzREVFwWLTdgCACRMm4L777gMAzJ8/Hx06dIBer0dcXBy++eabOl9v06ZNUKlUKCwsVO5LTEyESqXCmTNnAACLFi1CYGAgVq5cibi4OHh7e+OWW25BeXk5Fi9ejHbt2iEoKAiPPfYYzGaz8jpVVVX417/+hdatW8PHxweDBg3Cpk2bGu27aI607l4BIiIiujzZZgmxADUREZEbSBJgLHfPe+u8AZXKqUVvvfVWPProo9i4cSNGjRoFAMjPz8eaNWuwevVqLFu2DI8//jg++OADjB49GitXrsS9996LNm3aYOTIkQ1exfLycsybNw/ff/89SkpKMGnSJNx8880IDAzE6tWrkZKSgsmTJ2Po0KG4/fbbAQCzZs3C0aNH8f333yMqKgrLli3DDTfcgMOHD6NTp04NXpfmjIEhIiIiahCLTTDIbGZgiIiI6G9nLAfejHLPe7+YAeh9nFo0KCgIN954I5YuXaoEhn7++WeEhoZi5MiRuPrqq3HPPffgkUceAQA89dRT2LVrF955551LCgwZjUYlEwkAbrnlFnzzzTfIzs6Gr68vunXrhpEjR2Ljxo24/fbbkZaWhoULFyItLQ1RUeJ7/de//oU1a9Zg4cKFePPNNxu8Ls0Zh5IRERFRg5jMrDFEREREzpk6dSp++eUXVFVVAQCWLFmCKVOmQK1W49ixYxg6dKjd8kOHDsWxY8cu6T29vb2VoBAAhIeHo127dvD19bW7LycnBwBw+PBhmM1mdO7cGb6+vspt8+bNOH369CWtS3PGjCEiIiJqEM5KRkRE5GY6b5G54673dsFNN90ESZKwatUqDBw4EFu3bsX777/foLdWq0WOi2STvWw0Gmuvok5n97dKpXJ4n1z7qLS0FBqNBgkJCdBoNHbL2QaTrjQMDBEREVGDsMYQERGRm6lUTg/ncjdPT09MmjQJS5YswalTpxAXF4d+/foBALp27Yrt27fjn//8p7L89u3b0a1bN4ev1apVKwBAZmYmgoKCAIji05eqb9++MJvNyMnJwdVXX33Jr3e5YGCIiIiIGoQ1hoiIiMgVU6dOxfjx45GUlIS77rpLuf+ZZ57Bbbfdhr59+2L06NH4/fff8euvv+Kvv/5y+DodO3ZEdHQ0XnnlFbzxxhs4ceIE3n333Utev86dO2Pq1KmYNm0a3n33XfTt2xe5ublYv349evXqhXHjxl3yezRHrDFEREREDWJfY8hSz5JEREREwLXXXovg4GAkJyfjzjvvVO6fOHEiPvzwQ7zzzjvo3r07PvvsMyxcuBAjRoxw+Do6nQ7fffcdjh8/jl69euGtt97C66+/3ijruHDhQkybNg1PP/004uLiMHHiROzduxdt27ZtlNdvjlSS1HJzv4uLixEQEICioiL4+/u7e3WIiIguK2Pe34Lk7BIAwLonh6NTuJ+b14iIiOjKVllZidTUVMTGxsLT09Pdq0PNQH3bhLMxD2YMERERUYPYZgmxxhARERHR5YmBISIiImoQ24nITKwxRERERHRZYmCIiIiIGsQuY4jT1RMRERFdlhgYIiIiogYx2xWfZmCIiIiI6HLEwBARERE1iG0wiBlDRERERJcnBoaIiIioQSwSA0NERETu0IInF6caGmNbYGCIiIiIGoQZQ0RERH8vnU4HACgvL3fzmlBzIW8L8rbRENrGWhkiIiJqWexrDFnqWZKIiIgag0ajQWBgIHJycgAA3t7eUKlUbl4rcgdJklBeXo6cnBwEBgZCo9E0+LUYGCIiIqIGYcYQERHR3y8iIgIAlOAQtWyBgYHKNtFQDAwRERFRg5hZY4iIiOhvp1KpEBkZibCwMBiNRnevDrmRTqe7pEwhGQNDRERE1CBmZgwRERG5jUajaZSgAJHLxae3bNmCm266CVFRUVCpVFi+fLnd45IkYfbs2YiMjISXlxdGjx6NkydP2i2Tn5+PqVOnwt/fH4GBgZg+fTpKS0vtljl06BCuvvpqeHp6Ijo6GnPnzq21Lj/99BO6dOkCT09P9OzZE6tXr3b14xAREVEDSJJkFwwyMTBEREREdFlyOTBUVlaG3r1745NPPnH4+Ny5czFv3jwsWLAAu3fvho+PD8aMGYPKykplmalTpyIpKQnr1q3DypUrsWXLFsyYMUN5vLi4GNdffz1iYmKQkJCAt99+G6+88go+//xzZZkdO3bgjjvuwPTp03HgwAFMnDgREydOxJEjR1z9SEREROSimnEgZgwRERERXZ5U0iVMeq9SqbBs2TJMnDgRgOg9jIqKwtNPP41//etfAICioiKEh4dj0aJFmDJlCo4dO4Zu3bph7969GDBgAABgzZo1GDt2LM6dO4eoqCjMnz8f//73v5GVlQW9Xg8AeP7557F8+XIcP34cAHD77bejrKwMK1euVNZn8ODB6NOnDxYsWODU+hcXFyMgIABFRUXw9/dv6NdARETU4lSZzIh7aY3y97u39sbk/m3cuEZEREREZMvZmIfLGUP1SU1NRVZWFkaPHq3cFxAQgEGDBmHnzp0AgJ07dyIwMFAJCgHA6NGjoVarsXv3bmWZ4cOHK0EhABgzZgySk5NRUFCgLGP7PvIy8vs4UlVVheLiYrsbERERua5mhhAzhoiIiIguT40aGMrKygIAhIeH290fHh6uPJaVlYWwsDC7x7VaLYKDg+2WcfQatu9R1zLy447MmTMHAQEByi06OtrVj0hERESoXVOINYaIiIiILk+NGhhq7l544QUUFRUpt/T0dHevEhER0WXJUitjyOKmNSEiIiKiS9GogaGIiAgAQHZ2tt392dnZymMRERHIycmxe9xkMiE/P99uGUevYfsedS0jP+6Ih4cH/P397W5ERETkOmYMEREREV0ZGjUwFBsbi4iICKxfv165r7i4GLt370Z8fDwAID4+HoWFhUhISFCW2bBhAywWCwYNGqQss2XLFhiNRmWZdevWIS4uDkFBQcoytu8jLyO/DxERETUd1hgiIiIiujK4HBgqLS1FYmIiEhMTAYiC04mJiUhLS4NKpcITTzyB119/HStWrMDhw4cxbdo0REVFKTOXde3aFTfccAMeeOAB7NmzB9u3b8esWbMwZcoUREVFAQDuvPNO6PV6TJ8+HUlJSfjhhx/w4Ycf4qmnnlLW4/HHH8eaNWvw7rvv4vjx43jllVewb98+zJo169K/FSIiIqpXzQwhBoaIiIiILk9aV5+wb98+jBw5UvlbDtb885//xKJFi/Dss8+i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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "def substr(s, size=2):\n", " if isinstance(s, str):\n", " if len(s) < size:\n", " return s\n", " return s[:size]\n", " return s\n", "\n", "\n", "ha = ha.copy()\n", "ha[\"ch12\"] = ha[\"hash\"].apply(substr)\n", "gr = ha.groupby(\"ch12\", as_index=False).sum().sort_values(\"ch12\")\n", "gr.plot(x=\"ch12\", y=[\"impressions\", \"volume\"], figsize=(14, 4))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Dans ce cas précis, si le traitement appliqué aux données est d'un coût proportionnelle à la taille des données associées à chaque clé, cela signifie qu'une opération de type **reduce** aura un temps de traitement proportionnel au volume de données associée à la plus grande clé et non au nombre de machines puisque toutes les données d'une même clé sont envoyées sur la même machine." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.10.12" } }, "nbformat": 4, "nbformat_minor": 2 }