diff --git a/src/explore.ipynb b/src/explore.ipynb index 06b41e325993b25359baa6e5e170beccdbbdf5be..15079c74f0870b4266814bfd615767dc996efb4b 100644 --- a/src/explore.ipynb +++ b/src/explore.ipynb @@ -1749,12 +1749,224 @@ "source": [ "# Which actions were triggered how often over the years\n", "df_actions = pd.read_csv(\"quarry-34047-number-of-abuse-filters-filter-actions-per-month-en-wiki-run346492.csv\", sep=',')\n", - "df_actions.fillna('log')" + "df_actions['LogMonth'] = pd.to_datetime(df_actions['LogMonth'], format=\"%Y%m\")\n", + "df_actions.fillna('log only')\n" ] }, { "cell_type": "code", - "execution_count": 2, + "execution_count": 30, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + " LogMonth FilterActions Freq\n", + "14 2018-12-01 NaN 83958\n", + "15 2018-12-01 disallow 33417\n", + "16 2018-12-01 disallow,tag 6\n", + "17 2018-12-01 tag 76257\n", + "18 2018-12-01 warn 32649\n", + "19 2018-11-01 NaN 83866\n", + "20 2018-11-01 disallow 43244\n", + "21 2018-11-01 disallow,tag 5\n", + "22 2018-11-01 tag 86062\n", + "23 2018-11-01 warn 40056\n", + "24 2018-10-01 NaN 87070\n", + "25 2018-10-01 disallow 38163\n", + "26 2018-10-01 disallow,tag 8\n", + "27 2018-10-01 tag 86140\n", + "28 2018-10-01 warn 45057\n", + "29 2018-09-01 NaN 88941\n", + "30 2018-09-01 disallow 27452\n", + "31 2018-09-01 disallow,tag 1\n", + "32 2018-09-01 tag 75443\n", + "33 2018-09-01 warn 38517\n", + "34 2018-08-01 NaN 97404\n", + "35 2018-08-01 disallow 22387\n", + "36 2018-08-01 disallow,tag 2\n", + "37 2018-08-01 tag 69333\n", + "38 2018-08-01 warn 26919\n", + "39 2018-07-01 NaN 93867\n", + "40 2018-07-01 disallow 18885\n", + "41 2018-07-01 disallow,tag 3\n", + "42 2018-07-01 tag 68355\n", + "43 2018-07-01 warn 24367\n", + "44 2018-06-01 NaN 87889\n", + "45 2018-06-01 disallow 21996\n", + "46 2018-06-01 disallow,tag 3\n", + "47 2018-06-01 tag 70779\n", + "48 2018-06-01 warn 28707\n", + "49 2018-05-01 NaN 83190\n", + "50 2018-05-01 disallow 30660\n", + "51 2018-05-01 disallow,tag 2\n", + "52 2018-05-01 tag 81854\n", + "53 2018-05-01 warn 42529\n", + "54 2018-04-01 NaN 88356\n", + "55 2018-04-01 disallow 30991\n", + "56 2018-04-01 disallow,tag 2\n", + "57 2018-04-01 tag 83492\n", + "58 2018-04-01 warn 40016\n", + "59 2018-03-01 NaN 89214\n", + "60 2018-03-01 disallow 34215\n", + "61 2018-03-01 disallow,tag 14\n", + "62 2018-03-01 tag 87523\n", + "63 2018-03-01 warn 44465\n", + "64 2018-02-01 NaN 62171\n", + "65 2018-02-01 disallow 32644\n", + "66 2018-02-01 disallow,tag 9\n", + "67 2018-02-01 tag 76656\n", + "68 2018-02-01 warn 42068\n", + "69 2018-01-01 NaN 73898\n", + "70 2018-01-01 disallow 32164\n", + "71 2018-01-01 disallow,tag 16\n", + "72 2018-01-01 tag 82561\n", + "73 2018-01-01 warn 47066\n" + ] + }, + { + "data": { + "text/plain": [ + "15 33417\n", + "20 43244\n", + "25 38163\n", + "30 27452\n", + "35 22387\n", + "40 18885\n", + "45 21996\n", + "50 30660\n", + "55 30991\n", + "60 34215\n", + "65 32644\n", + "70 32164\n", + "Name: Freq, dtype: int64" + ] + }, + "execution_count": 30, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "mask2018 = (df_actions['LogMonth'] >= '2018-01-01') & (df_actions['LogMonth'] < '2019-01-01')\n", + "actions_2018 = df_actions.loc[mask2018]\n", + "print (actions_2018)" + ] + }, + { + "cell_type": "code", + "execution_count": 51, + "metadata": {}, + "outputs": [ + { + "ename": "ValueError", + "evalue": "shape mismatch: objects cannot be broadcast to a single shape", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mValueError\u001b[0m Traceback (most recent call last)", + "\u001b[0;32m<ipython-input-51-46c8522bf62c>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m\u001b[0m\n\u001b[1;32m 5\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0ma\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mactions_2018\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m'FilterActions'\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mfillna\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m'log_only'\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0munique\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 6\u001b[0m \u001b[0mac\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mactions_2018\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mfillna\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m'log_only'\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mquery\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m'FilterActions==@a'\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 7\u001b[0;31m \u001b[0mplt\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mbar\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mind\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mac\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m'Freq'\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mwidth\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mbottom\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0my_offset\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 8\u001b[0m \u001b[0my_offset\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0my_offset\u001b[0m \u001b[0;34m+\u001b[0m \u001b[0mac\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m'Freq'\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 9\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m~/uni/ma-arbeit-filters/src/env3/lib/python3.6/site-packages/matplotlib/pyplot.py\u001b[0m in \u001b[0;36mbar\u001b[0;34m(x, height, width, bottom, align, data, **kwargs)\u001b[0m\n\u001b[1;32m 2455\u001b[0m return gca().bar(\n\u001b[1;32m 2456\u001b[0m \u001b[0mx\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mheight\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mwidth\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mwidth\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mbottom\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mbottom\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0malign\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0malign\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 2457\u001b[0;31m **({\"data\": data} if data is not None else {}), **kwargs)\n\u001b[0m\u001b[1;32m 2458\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 2459\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m~/uni/ma-arbeit-filters/src/env3/lib/python3.6/site-packages/matplotlib/__init__.py\u001b[0m in \u001b[0;36minner\u001b[0;34m(ax, data, *args, **kwargs)\u001b[0m\n\u001b[1;32m 1808\u001b[0m \u001b[0;34m\"the Matplotlib list!)\"\u001b[0m \u001b[0;34m%\u001b[0m \u001b[0;34m(\u001b[0m\u001b[0mlabel_namer\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mfunc\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m__name__\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1809\u001b[0m RuntimeWarning, stacklevel=2)\n\u001b[0;32m-> 1810\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mfunc\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0max\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m*\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 1811\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1812\u001b[0m inner.__doc__ = _add_data_doc(inner.__doc__,\n", + "\u001b[0;32m~/uni/ma-arbeit-filters/src/env3/lib/python3.6/site-packages/matplotlib/axes/_axes.py\u001b[0m in \u001b[0;36mbar\u001b[0;34m(self, x, height, width, bottom, align, **kwargs)\u001b[0m\n\u001b[1;32m 2249\u001b[0m x, height, width, y, linewidth = np.broadcast_arrays(\n\u001b[1;32m 2250\u001b[0m \u001b[0;31m# Make args iterable too.\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 2251\u001b[0;31m np.atleast_1d(x), height, width, y, linewidth)\n\u001b[0m\u001b[1;32m 2252\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 2253\u001b[0m \u001b[0;31m# Now that units have been converted, set the tick locations.\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m~/uni/ma-arbeit-filters/src/env3/lib/python3.6/site-packages/numpy/lib/stride_tricks.py\u001b[0m in \u001b[0;36mbroadcast_arrays\u001b[0;34m(*args, **kwargs)\u001b[0m\n\u001b[1;32m 250\u001b[0m \u001b[0margs\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34m[\u001b[0m\u001b[0mnp\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0marray\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0m_m\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mcopy\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mFalse\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0msubok\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0msubok\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0m_m\u001b[0m \u001b[0;32min\u001b[0m \u001b[0margs\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 251\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 252\u001b[0;31m \u001b[0mshape\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0m_broadcast_shape\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 253\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 254\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mall\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0marray\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mshape\u001b[0m \u001b[0;34m==\u001b[0m \u001b[0mshape\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0marray\u001b[0m \u001b[0;32min\u001b[0m \u001b[0margs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m~/uni/ma-arbeit-filters/src/env3/lib/python3.6/site-packages/numpy/lib/stride_tricks.py\u001b[0m in \u001b[0;36m_broadcast_shape\u001b[0;34m(*args)\u001b[0m\n\u001b[1;32m 185\u001b[0m \u001b[0;31m# use the old-iterator because np.nditer does not handle size 0 arrays\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 186\u001b[0m \u001b[0;31m# consistently\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 187\u001b[0;31m \u001b[0mb\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mnp\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mbroadcast\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;36m32\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 188\u001b[0m \u001b[0;31m# unfortunately, it cannot handle 32 or more arguments directly\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 189\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0mpos\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mrange\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;36m32\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mlen\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;36m31\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;31mValueError\u001b[0m: shape mismatch: objects cannot be broadcast to a single shape" + ] + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "<Figure size 432x288 with 1 Axes>" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "ind = np.arange(12) # the x locations for the groups\n", + "width = 0.35 # the width of the bars: can also be len(x) sequence\n", + "y_offset = np.zeros(len(ind))\n", + "\n", + "for a in actions_2018['FilterActions'].fillna('log_only').unique():\n", + " ac = actions_2018.fillna('log_only').query('FilterActions==@a')\n", + " plt.bar(ind, ac['Freq'], width, bottom=y_offset)\n", + " y_offset = y_offset + ac['Freq']\n", + "\n", + "plt.show()" + ] + }, + { + "cell_type": "code", + "execution_count": 36, + "metadata": {}, + "outputs": [ + { + "ename": "ValueError", + "evalue": "shape mismatch: objects cannot be broadcast to a single shape", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mValueError\u001b[0m Traceback (most recent call last)", + "\u001b[0;32m<ipython-input-36-c599c7c7dd11>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m\u001b[0m\n\u001b[1;32m 11\u001b[0m \u001b[0mp1\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mplt\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mbar\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mind\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mdisallow\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m'Freq'\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mwidth\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 12\u001b[0m \u001b[0mp2\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mplt\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mbar\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mind\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mdisallow_tag\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m'Freq'\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mwidth\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mbottom\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mdisallow\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m'Freq'\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 13\u001b[0;31m \u001b[0mp3\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mplt\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mbar\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mind\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mtag\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m'Freq'\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mwidth\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mbottom\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mdisallow\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m'Freq'\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m+\u001b[0m\u001b[0mdisallow_tag\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m'Freq'\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 14\u001b[0m \u001b[0mp4\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mplt\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mbar\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mind\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mwarn\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m'Freq'\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mwidth\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mbottom\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mdisallow\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m'Freq'\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m+\u001b[0m\u001b[0mdisallow_tag\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m'Freq'\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m+\u001b[0m\u001b[0mtag\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m'Freq'\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 15\u001b[0m \u001b[0mp5\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mplt\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mbar\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mind\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mlog\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m'Freq'\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mwidth\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mbottom\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mdisallow\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m'Freq'\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m+\u001b[0m\u001b[0mdisallow_tag\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m'Freq'\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m+\u001b[0m\u001b[0mtag\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m'Freq'\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m+\u001b[0m\u001b[0mwarn\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m'Freq'\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m~/uni/ma-arbeit-filters/src/env3/lib/python3.6/site-packages/matplotlib/pyplot.py\u001b[0m in \u001b[0;36mbar\u001b[0;34m(x, height, width, bottom, align, data, **kwargs)\u001b[0m\n\u001b[1;32m 2455\u001b[0m return gca().bar(\n\u001b[1;32m 2456\u001b[0m \u001b[0mx\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mheight\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mwidth\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mwidth\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mbottom\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mbottom\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0malign\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0malign\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 2457\u001b[0;31m **({\"data\": data} if data is not None else {}), **kwargs)\n\u001b[0m\u001b[1;32m 2458\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 2459\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m~/uni/ma-arbeit-filters/src/env3/lib/python3.6/site-packages/matplotlib/__init__.py\u001b[0m in \u001b[0;36minner\u001b[0;34m(ax, data, *args, **kwargs)\u001b[0m\n\u001b[1;32m 1808\u001b[0m \u001b[0;34m\"the Matplotlib list!)\"\u001b[0m \u001b[0;34m%\u001b[0m \u001b[0;34m(\u001b[0m\u001b[0mlabel_namer\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mfunc\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m__name__\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1809\u001b[0m RuntimeWarning, stacklevel=2)\n\u001b[0;32m-> 1810\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mfunc\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0max\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m*\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 1811\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1812\u001b[0m inner.__doc__ = _add_data_doc(inner.__doc__,\n", + "\u001b[0;32m~/uni/ma-arbeit-filters/src/env3/lib/python3.6/site-packages/matplotlib/axes/_axes.py\u001b[0m in \u001b[0;36mbar\u001b[0;34m(self, x, height, width, bottom, align, **kwargs)\u001b[0m\n\u001b[1;32m 2249\u001b[0m x, height, width, y, linewidth = np.broadcast_arrays(\n\u001b[1;32m 2250\u001b[0m \u001b[0;31m# Make args iterable too.\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 2251\u001b[0;31m np.atleast_1d(x), height, width, y, linewidth)\n\u001b[0m\u001b[1;32m 2252\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 2253\u001b[0m \u001b[0;31m# Now that units have been converted, set the tick locations.\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m~/uni/ma-arbeit-filters/src/env3/lib/python3.6/site-packages/numpy/lib/stride_tricks.py\u001b[0m in \u001b[0;36mbroadcast_arrays\u001b[0;34m(*args, **kwargs)\u001b[0m\n\u001b[1;32m 250\u001b[0m \u001b[0margs\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34m[\u001b[0m\u001b[0mnp\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0marray\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0m_m\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mcopy\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mFalse\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0msubok\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0msubok\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0m_m\u001b[0m \u001b[0;32min\u001b[0m \u001b[0margs\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 251\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 252\u001b[0;31m \u001b[0mshape\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0m_broadcast_shape\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 253\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 254\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mall\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0marray\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mshape\u001b[0m \u001b[0;34m==\u001b[0m \u001b[0mshape\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0marray\u001b[0m \u001b[0;32min\u001b[0m \u001b[0margs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m~/uni/ma-arbeit-filters/src/env3/lib/python3.6/site-packages/numpy/lib/stride_tricks.py\u001b[0m in \u001b[0;36m_broadcast_shape\u001b[0;34m(*args)\u001b[0m\n\u001b[1;32m 185\u001b[0m \u001b[0;31m# use the old-iterator because np.nditer does not handle size 0 arrays\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 186\u001b[0m \u001b[0;31m# consistently\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 187\u001b[0;31m \u001b[0mb\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mnp\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mbroadcast\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;36m32\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 188\u001b[0m \u001b[0;31m# unfortunately, it cannot handle 32 or more arguments directly\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 189\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0mpos\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mrange\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;36m32\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mlen\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;36m31\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;31mValueError\u001b[0m: shape mismatch: objects cannot be broadcast to a single shape" + ] + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYcAAAD8CAYAAACcjGjIAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDMuMC4zLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvnQurowAAD1FJREFUeJzt3W+snnV9x/H3Zy0oahSUE4It2SGxaqrJhjaII1kMbFDEWB6ow2zSGGYfCBtuJq74hEwlwWTxD4ljIdJZnLESNKHRuq4DjPEBSBEnFkY4Q5B2YKvlj84oQ797cH7d7vV3yjlt7/Y6f96v5M59Xd/rd13390qb8znXn/s6qSokSRr1O0M3IEmafwwHSVLHcJAkdQwHSVLHcJAkdQwHSVLHcJAkdQwHSVLHcJAkdZYP3cCROvXUU2tycnLoNiRpwbj33nt/WlUTcxm7YMNhcnKSnTt3Dt2GJC0YSR6b61hPK0mSOoaDJKljOEiSOoaDJKljOEiSOoaDJKljOEiSOoaDJKljOEiSOgv2G9ILxeTGb8w65tHrLj4OnUjS3HnkIEnqGA6SpI7hIEnqGA6SpI7hIEnqGA6SpI7hIEnqGA6SpI7hIEnqGA6SpI7hIEnqzDkckixLcl+Sr7f5M5PcnWQqyVeSnNjqL2rzU2355Mg2rm71h5JcOFJf22pTSTaOb/ckSUficI4crgIeHJn/JPDpqnoN8BRweatfDjzV6p9u40iyGrgUeAOwFvj7FjjLgM8BFwGrgfe2sZKkgcwpHJKsBC4GPt/mA5wH3NqGbAYuadPr2jxt+flt/DpgS1X9uqp+BEwBZ7fXVFU9UlXPAVvaWEnSQOZ65PAZ4CPAb9v8q4Cnq+r5Nr8bWNGmVwCPA7Tlz7Tx/1s/aJ1D1TtJNiTZmWTnvn375ti6JOlwzRoOSd4B7K2qe49DPy+oqm6sqjVVtWZiYmLodiRp0ZrLH/s5F3hnkrcDLwZeDnwWODnJ8nZ0sBLY08bvAc4AdidZDrwC+NlI/YDRdQ5VlyQNYNYjh6q6uqpWVtUk0xeU76iqPwXuBN7Vhq0HbmvTW9s8bfkdVVWtfmm7m+lMYBXwXeAeYFW7++nE9hlbx7J3kqQjcjR/JvRvgC1JPgHcB9zU6jcBX0wyBexn+oc9VbUryS3AA8DzwBVV9RuAJFcC24FlwKaq2nUUfUmSjtJhhUNVfQv4Vpt+hOk7jQ4e8yvg3YdY/1rg2hnq24Bth9OLJOnY8RvSkqSO4SBJ6hgOkqTO0VyQ1jwyufEbcxr36HUXH+NOJC0GHjlIkjqGgySpYzhIkjqGgySpYzhIkjqGgySpYzhIkjqGgySpYzhIkjqGgySpYzhIkjqGgySpYzhIkjqGgySpYzhIkjqGgySpYzhIkjqGgySp458JlbTg+Gdxjz2PHCRJHcNBktQxHCRJnSV5zWEu5ys9VylpKfPIQZLUMRwkSZ0leVpJkuZqqZ6G9shBktQxHCRJHU8rSdI8MZ9OYXnkIEnqGA6SpI7hIEnqGA6SpI4XpCWNhY/RXlxmPXJI8uIk303yb0l2JfnbVj8zyd1JppJ8JcmJrf6iNj/Vlk+ObOvqVn8oyYUj9bWtNpVk4/h3U5J0OOZy5PBr4Lyq+kWSE4DvJPkm8NfAp6tqS5J/AC4HbmjvT1XVa5JcCnwS+JMkq4FLgTcArwb+Nclr22d8DvhjYDdwT5KtVfXAGPdTWrLm0+2RWjhmPXKoab9osye0VwHnAbe2+mbgkja9rs3Tlp+fJK2+pap+XVU/AqaAs9trqqoeqarngC1trCRpIHO6IJ1kWZLvA3uBHcB/AE9X1fNtyG5gRZteATwO0JY/A7xqtH7QOoeqS5IGMqdwqKrfVNXvAyuZ/k3/9ce0q0NIsiHJziQ79+3bN0QLkrQkHNatrFX1NHAn8Fbg5CQHrlmsBPa06T3AGQBt+SuAn43WD1rnUPWZPv/GqlpTVWsmJiYOp3VJ0mGYy91KE0lObtMnMX3h+EGmQ+Jdbdh64LY2vbXN05bfUVXV6pe2u5nOBFYB3wXuAVa1u59OZPqi9dZx7Jwk6cjM5W6l04HNSZYxHSa3VNXXkzwAbEnyCeA+4KY2/ibgi0mmgP1M/7CnqnYluQV4AHgeuKKqfgOQ5EpgO7AM2FRVu8a2h5KkwzZrOFTVD4CzZqg/wvT1h4PrvwLefYhtXQtcO0N9G7BtDv1Kko4DH58hSeoYDpKkjuEgSeoYDpKkjuEgSeoYDpKkjuEgSer4x3502PyjLtLi55GDJKljOEiSOoaDJKljOEiSOoaDJKljOEiSOoaDJKljOEiSOoaDJKljOEiSOoaDJKljOEiSOoaDJKljOEiSOoaDJKljOEiSOoaDJKljOEiSOoaDJKljOEiSOoaDJKljOEiSOoaDJKljOEiSOsuHbkB6IZMbvzHrmEevu/g4dCItLYaDNABDT/Odp5UkSR3DQZLUMRwkSR3DQZLUMRwkSZ1ZwyHJGUnuTPJAkl1Jrmr1VybZkeTh9n5KqyfJ9UmmkvwgyZtGtrW+jX84yfqR+puT3N/WuT5JjsXOSpLmZi5HDs8DH66q1cA5wBVJVgMbgdurahVwe5sHuAhY1V4bgBtgOkyAa4C3AGcD1xwIlDbmAyPrrT36XZMkHalZw6Gqnqiq77XpnwMPAiuAdcDmNmwzcEmbXgfcXNPuAk5OcjpwIbCjqvZX1VPADmBtW/byqrqrqgq4eWRbkqQBHNY1hySTwFnA3cBpVfVEW/QkcFqbXgE8PrLa7lZ7ofruGeqSpIHMORySvAz4KvChqnp2dFn7jb/G3NtMPWxIsjPJzn379h3rj5OkJWtO4ZDkBKaD4UtV9bVW/kk7JUR739vqe4AzRlZf2WovVF85Q71TVTdW1ZqqWjMxMTGX1iVJR2AudysFuAl4sKo+NbJoK3DgjqP1wG0j9cvaXUvnAM+000/bgQuSnNIuRF8AbG/Lnk1yTvusy0a2JUkawFwevHcu8D7g/iTfb7WPAtcBtyS5HHgMeE9btg14OzAF/BJ4P0BV7U/yceCeNu5jVbW/TX8Q+AJwEvDN9pIkDWTWcKiq7wCH+t7B+TOML+CKQ2xrE7BphvpO4I2z9SJJOj58ZLfU+Bht6f/4+AxJUsdwkCR1DAdJUsdwkCR1DAdJUsdwkCR1DAdJUsdwkCR1DAdJUsdwkCR1DAdJUsdwkCR1DAdJUsdwkCR1DAdJUsdwkCR1DAdJUsdwkCR1DAdJUsdwkCR1DAdJUsdwkCR1DAdJUsdwkCR1DAdJUsdwkCR1DAdJUsdwkCR1DAdJUsdwkCR1DAdJUsdwkCR1DAdJUsdwkCR1DAdJUsdwkCR1DAdJUsdwkCR1Zg2HJJuS7E3yw5HaK5PsSPJwez+l1ZPk+iRTSX6Q5E0j66xv4x9Osn6k/uYk97d1rk+Sce+kJOnwzOXI4QvA2oNqG4Hbq2oVcHubB7gIWNVeG4AbYDpMgGuAtwBnA9ccCJQ25gMj6x38WZKk42zWcKiqbwP7DyqvAza36c3AJSP1m2vaXcDJSU4HLgR2VNX+qnoK2AGsbcteXlV3VVUBN49sS5I0kCO95nBaVT3Rpp8ETmvTK4DHR8btbrUXqu+eoS5JGtBRX5Buv/HXGHqZVZINSXYm2blv377j8ZGStCQdaTj8pJ0Sor3vbfU9wBkj41a22gvVV85Qn1FV3VhVa6pqzcTExBG2LkmazZGGw1bgwB1H64HbRuqXtbuWzgGeaaeftgMXJDmlXYi+ANjelj2b5Jx2l9JlI9uSJA1k+WwDknwZeBtwapLdTN91dB1wS5LLgceA97Th24C3A1PAL4H3A1TV/iQfB+5p4z5WVQcucn+Q6TuiTgK+2V6SpAHNGg5V9d5DLDp/hrEFXHGI7WwCNs1Q3wm8cbY+JEnHj9+QliR1DAdJUsdwkCR1DAdJUsdwkCR1DAdJUsdwkCR1DAdJUsdwkCR1DAdJUsdwkCR1DAdJUsdwkCR1DAdJUsdwkCR1DAdJUsdwkCR1DAdJUsdwkCR1DAdJUsdwkCR1DAdJUsdwkCR1DAdJUsdwkCR1DAdJUsdwkCR1DAdJUsdwkCR1DAdJUsdwkCR1DAdJUsdwkCR1DAdJUsdwkCR1DAdJUsdwkCR1DAdJUsdwkCR15k04JFmb5KEkU0k2Dt2PJC1l8yIckiwDPgdcBKwG3ptk9bBdSdLSNS/CATgbmKqqR6rqOWALsG7gniRpyZov4bACeHxkfnerSZIGkKoaugeSvAtYW1V/3ubfB7ylqq48aNwGYEObfR3w0JhaOBX46Zi2NZ+4XwvHYtwncL/mm9+tqom5DFx+rDuZoz3AGSPzK1vt/6mqG4Ebx/3hSXZW1Zpxb3do7tfCsRj3CdyvhWy+nFa6B1iV5MwkJwKXAlsH7kmSlqx5ceRQVc8nuRLYDiwDNlXVroHbkqQla16EA0BVbQO2DfTxYz9VNU+4XwvHYtwncL8WrHlxQVqSNL/Ml2sOkqR5ZMmHw2J8bEeSM5LcmeSBJLuSXDV0T+OSZFmS+5J8fehexiXJyUluTfLvSR5M8tahexqHJH/V/v/9MMmXk7x46J4OV5JNSfYm+eFI7ZVJdiR5uL2fMmSPx8qSDodF/NiO54EPV9Vq4BzgikWyXwBXAQ8O3cSYfRb456p6PfB7LIL9S7IC+EtgTVW9kekbTS4dtqsj8gVg7UG1jcDtVbUKuL3NLzpLOhxYpI/tqKonqup7bfrnTP+wWfDfOE+yErgY+PzQvYxLklcAfwjcBFBVz1XV08N2NTbLgZOSLAdeAvznwP0ctqr6NrD/oPI6YHOb3gxcclybOk6Wejgs+sd2JJkEzgLuHraTsfgM8BHgt0M3MkZnAvuAf2ynyz6f5KVDN3W0qmoP8HfAj4EngGeq6l+G7WpsTquqJ9r0k8BpQzZzrCz1cFjUkrwM+Crwoap6duh+jkaSdwB7q+reoXsZs+XAm4Abquos4L9YBKcp2nn4dUyH36uBlyb5s2G7Gr+avt1zUd7yudTDYU6P7ViIkpzAdDB8qaq+NnQ/Y3Au8M4kjzJ9+u+8JP80bEtjsRvYXVUHjuxuZTosFro/An5UVfuq6r+BrwF/MHBP4/KTJKcDtPe9A/dzTCz1cFiUj+1IEqbPYT9YVZ8aup9xqKqrq2plVU0y/e90R1Ut+N9Eq+pJ4PEkr2ul84EHBmxpXH4MnJPkJe3/4/ksggvtzVZgfZteD9w2YC/HzLz5hvQQFvFjO84F3gfcn+T7rfbR9i10zT9/AXyp/YLyCPD+gfs5alV1d5Jbge8xfffcfSzAbxUn+TLwNuDUJLuBa4DrgFuSXA48BrxnuA6PHb8hLUnqLPXTSpKkGRgOkqSO4SBJ6hgOkqSO4SBJ6hgOkqSO4SBJ6hgOkqTO/wBIryJP5WoCgQAAAABJRU5ErkJggg==\n", + "text/plain": [ + "<Figure size 432x288 with 1 Axes>" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "disallow = actions_2018.query('FilterActions==\"disallow\"')\n", + "disallow_tag = actions_2018.query('FilterActions==\"disallow,tag\"')\n", + "tag = actions_2018.query('FilterActions==\"tag\"')\n", + "warn = actions_2018.query('FilterActions==\"warn\"')\n", + "log = actions_2018.fillna('log_only').query('FilterActions==\"log_only\"')\n", + "\n", + "\n", + "ind = np.arange(12) # the x locations for the groups\n", + "width = 0.35 # the width of the bars: can also be len(x) sequence\n", + "\n", + "'''\n", + "p1 = plt.bar(ind, disallow['Freq'], width)\n", + "p2 = plt.bar(ind, disallow_tag['Freq'], width, bottom=disallow['Freq'])\n", + "p3 = plt.bar(ind, tag['Freq'], width, bottom=(disallow['Freq']+disallow_tag['Freq']))\n", + "p4 = plt.bar(ind, warn['Freq'], width, bottom=(disallow['Freq']+disallow_tag['Freq']+tag['Freq']))\n", + "p5 = plt.bar(ind, log['Freq'], width, bottom=(disallow['Freq']+disallow_tag['Freq']+tag['Freq']+warn['Freq']))\n", + "\n", + "plt.ylabel('Frequency of edit filter actions')\n", + "plt.title('Edit filter actions per month')\n", + "plt.xticks(ind, ('G1', 'G2', 'G3', 'G4', 'G5'))\n", + "plt.legend((p1[0], p2[0], p3[0], p4[0], p5[0]), ('disallow', 'disallow, tag', 'tag', 'warn', 'log only'))\n", + "'''\n", + "\n", + "\n", + "\n", + "plt.show()\n" + ] + }, + { + "cell_type": "code", + "execution_count": 23, "metadata": { "scrolled": true }, @@ -1788,181 +2000,181 @@ " <tbody>\n", " <tr>\n", " <th>0</th>\n", - " <td>201903</td>\n", + " <td>2019-03-01</td>\n", " <td>autocreateaccount</td>\n", " <td>47</td>\n", " </tr>\n", " <tr>\n", " <th>1</th>\n", - " <td>201903</td>\n", + " <td>2019-03-01</td>\n", " <td>createaccount</td>\n", " <td>4780</td>\n", " </tr>\n", " <tr>\n", " <th>2</th>\n", - " <td>201903</td>\n", + " <td>2019-03-01</td>\n", " <td>delete</td>\n", " <td>5</td>\n", " </tr>\n", " <tr>\n", " <th>3</th>\n", - " <td>201903</td>\n", + " <td>2019-03-01</td>\n", " <td>edit</td>\n", " <td>37950</td>\n", " </tr>\n", " <tr>\n", " <th>4</th>\n", - " <td>201903</td>\n", + " <td>2019-03-01</td>\n", " <td>move</td>\n", " <td>84</td>\n", " </tr>\n", " <tr>\n", " <th>5</th>\n", - " <td>201903</td>\n", + " <td>2019-03-01</td>\n", " <td>upload</td>\n", " <td>3</td>\n", " </tr>\n", " <tr>\n", " <th>6</th>\n", - " <td>201902</td>\n", + " <td>2019-02-01</td>\n", " <td>autocreateaccount</td>\n", " <td>454</td>\n", " </tr>\n", " <tr>\n", " <th>7</th>\n", - " <td>201902</td>\n", + " <td>2019-02-01</td>\n", " <td>createaccount</td>\n", " <td>25204</td>\n", " </tr>\n", " <tr>\n", " <th>8</th>\n", - " <td>201902</td>\n", + " <td>2019-02-01</td>\n", " <td>delete</td>\n", " <td>5</td>\n", " </tr>\n", " <tr>\n", " <th>9</th>\n", - " <td>201902</td>\n", + " <td>2019-02-01</td>\n", " <td>edit</td>\n", " <td>210488</td>\n", " </tr>\n", " <tr>\n", " <th>10</th>\n", - " <td>201902</td>\n", + " <td>2019-02-01</td>\n", " <td>move</td>\n", " <td>445</td>\n", " </tr>\n", " <tr>\n", " <th>11</th>\n", - " <td>201902</td>\n", + " <td>2019-02-01</td>\n", " <td>upload</td>\n", " <td>10</td>\n", " </tr>\n", " <tr>\n", " <th>12</th>\n", - " <td>201901</td>\n", + " <td>2019-01-01</td>\n", " <td>autocreateaccount</td>\n", " <td>281</td>\n", " </tr>\n", " <tr>\n", " <th>13</th>\n", - " <td>201901</td>\n", + " <td>2019-01-01</td>\n", " <td>createaccount</td>\n", " <td>27924</td>\n", " </tr>\n", " <tr>\n", " <th>14</th>\n", - " <td>201901</td>\n", + " <td>2019-01-01</td>\n", " <td>delete</td>\n", " <td>21</td>\n", " </tr>\n", " <tr>\n", " <th>15</th>\n", - " <td>201901</td>\n", + " <td>2019-01-01</td>\n", " <td>edit</td>\n", " <td>223870</td>\n", " </tr>\n", " <tr>\n", " <th>16</th>\n", - " <td>201901</td>\n", + " <td>2019-01-01</td>\n", " <td>move</td>\n", " <td>568</td>\n", " </tr>\n", " <tr>\n", " <th>17</th>\n", - " <td>201901</td>\n", + " <td>2019-01-01</td>\n", " <td>upload</td>\n", " <td>4</td>\n", " </tr>\n", " <tr>\n", " <th>18</th>\n", - " <td>201812</td>\n", + " <td>2018-12-01</td>\n", " <td>autocreateaccount</td>\n", " <td>102</td>\n", " </tr>\n", " <tr>\n", " <th>19</th>\n", - " <td>201812</td>\n", + " <td>2018-12-01</td>\n", " <td>createaccount</td>\n", " <td>35405</td>\n", " </tr>\n", " <tr>\n", " <th>20</th>\n", - " <td>201812</td>\n", + " <td>2018-12-01</td>\n", " <td>delete</td>\n", " <td>5</td>\n", " </tr>\n", " <tr>\n", " <th>21</th>\n", - " <td>201812</td>\n", + " <td>2018-12-01</td>\n", " <td>edit</td>\n", " <td>189795</td>\n", " </tr>\n", " <tr>\n", " <th>22</th>\n", - " <td>201812</td>\n", + " <td>2018-12-01</td>\n", " <td>move</td>\n", " <td>959</td>\n", " </tr>\n", " <tr>\n", " <th>23</th>\n", - " <td>201812</td>\n", + " <td>2018-12-01</td>\n", " <td>upload</td>\n", " <td>21</td>\n", " </tr>\n", " <tr>\n", " <th>24</th>\n", - " <td>201811</td>\n", + " <td>2018-11-01</td>\n", " <td>autocreateaccount</td>\n", " <td>486</td>\n", " </tr>\n", " <tr>\n", " <th>25</th>\n", - " <td>201811</td>\n", + " <td>2018-11-01</td>\n", " <td>createaccount</td>\n", " <td>35421</td>\n", " </tr>\n", " <tr>\n", " <th>26</th>\n", - " <td>201811</td>\n", + " <td>2018-11-01</td>\n", " <td>delete</td>\n", " <td>2</td>\n", " </tr>\n", " <tr>\n", " <th>27</th>\n", - " <td>201811</td>\n", + " <td>2018-11-01</td>\n", " <td>edit</td>\n", " <td>216220</td>\n", " </tr>\n", " <tr>\n", " <th>28</th>\n", - " <td>201811</td>\n", + " <td>2018-11-01</td>\n", " <td>move</td>\n", " <td>1048</td>\n", " </tr>\n", " <tr>\n", " <th>29</th>\n", - " <td>201811</td>\n", + " <td>2018-11-01</td>\n", " <td>upload</td>\n", " <td>56</td>\n", " </tr>\n", @@ -1974,181 +2186,181 @@ " </tr>\n", " <tr>\n", " <th>535</th>\n", - " <td>200911</td>\n", + " <td>2009-11-01</td>\n", " <td>move</td>\n", " <td>128</td>\n", " </tr>\n", " <tr>\n", " <th>536</th>\n", - " <td>200910</td>\n", + " <td>2009-10-01</td>\n", " <td>createaccount</td>\n", " <td>145</td>\n", " </tr>\n", " <tr>\n", " <th>537</th>\n", - " <td>200910</td>\n", + " <td>2009-10-01</td>\n", " <td>edit</td>\n", " <td>226571</td>\n", " </tr>\n", " <tr>\n", " <th>538</th>\n", - " <td>200910</td>\n", + " <td>2009-10-01</td>\n", " <td>move</td>\n", " <td>149</td>\n", " </tr>\n", " <tr>\n", " <th>539</th>\n", - " <td>200909</td>\n", + " <td>2009-09-01</td>\n", " <td>createaccount</td>\n", " <td>35</td>\n", " </tr>\n", " <tr>\n", " <th>540</th>\n", - " <td>200909</td>\n", + " <td>2009-09-01</td>\n", " <td>edit</td>\n", " <td>213070</td>\n", " </tr>\n", " <tr>\n", " <th>541</th>\n", - " <td>200909</td>\n", + " <td>2009-09-01</td>\n", " <td>move</td>\n", " <td>103</td>\n", " </tr>\n", " <tr>\n", " <th>542</th>\n", - " <td>200908</td>\n", + " <td>2009-08-01</td>\n", " <td>createaccount</td>\n", " <td>95</td>\n", " </tr>\n", " <tr>\n", " <th>543</th>\n", - " <td>200908</td>\n", + " <td>2009-08-01</td>\n", " <td>delete</td>\n", " <td>2</td>\n", " </tr>\n", " <tr>\n", " <th>544</th>\n", - " <td>200908</td>\n", + " <td>2009-08-01</td>\n", " <td>edit</td>\n", " <td>162038</td>\n", " </tr>\n", " <tr>\n", " <th>545</th>\n", - " <td>200908</td>\n", + " <td>2009-08-01</td>\n", " <td>move</td>\n", " <td>146</td>\n", " </tr>\n", " <tr>\n", " <th>546</th>\n", - " <td>200907</td>\n", + " <td>2009-07-01</td>\n", " <td>createaccount</td>\n", " <td>124</td>\n", " </tr>\n", " <tr>\n", " <th>547</th>\n", - " <td>200907</td>\n", + " <td>2009-07-01</td>\n", " <td>delete</td>\n", " <td>1</td>\n", " </tr>\n", " <tr>\n", " <th>548</th>\n", - " <td>200907</td>\n", + " <td>2009-07-01</td>\n", " <td>edit</td>\n", " <td>160740</td>\n", " </tr>\n", " <tr>\n", " <th>549</th>\n", - " <td>200907</td>\n", + " <td>2009-07-01</td>\n", " <td>move</td>\n", " <td>128</td>\n", " </tr>\n", " <tr>\n", " <th>550</th>\n", - " <td>200906</td>\n", + " <td>2009-06-01</td>\n", " <td>createaccount</td>\n", " <td>141</td>\n", " </tr>\n", " <tr>\n", " <th>551</th>\n", - " <td>200906</td>\n", + " <td>2009-06-01</td>\n", " <td>edit</td>\n", " <td>178879</td>\n", " </tr>\n", " <tr>\n", " <th>552</th>\n", - " <td>200906</td>\n", + " <td>2009-06-01</td>\n", " <td>move</td>\n", " <td>156</td>\n", " </tr>\n", " <tr>\n", " <th>553</th>\n", - " <td>200905</td>\n", + " <td>2009-05-01</td>\n", " <td>createaccount</td>\n", " <td>156</td>\n", " </tr>\n", " <tr>\n", " <th>554</th>\n", - " <td>200905</td>\n", + " <td>2009-05-01</td>\n", " <td>delete</td>\n", " <td>2</td>\n", " </tr>\n", " <tr>\n", " <th>555</th>\n", - " <td>200905</td>\n", + " <td>2009-05-01</td>\n", " <td>edit</td>\n", " <td>211506</td>\n", " </tr>\n", " <tr>\n", " <th>556</th>\n", - " <td>200905</td>\n", + " <td>2009-05-01</td>\n", " <td>move</td>\n", " <td>215</td>\n", " </tr>\n", " <tr>\n", " <th>557</th>\n", - " <td>200904</td>\n", + " <td>2009-04-01</td>\n", " <td>createaccount</td>\n", " <td>24</td>\n", " </tr>\n", " <tr>\n", " <th>558</th>\n", - " <td>200904</td>\n", + " <td>2009-04-01</td>\n", " <td>delete</td>\n", " <td>7</td>\n", " </tr>\n", " <tr>\n", " <th>559</th>\n", - " <td>200904</td>\n", + " <td>2009-04-01</td>\n", " <td>edit</td>\n", " <td>178865</td>\n", " </tr>\n", " <tr>\n", " <th>560</th>\n", - " <td>200904</td>\n", + " <td>2009-04-01</td>\n", " <td>move</td>\n", " <td>256</td>\n", " </tr>\n", " <tr>\n", " <th>561</th>\n", - " <td>200903</td>\n", + " <td>2009-03-01</td>\n", " <td>createaccount</td>\n", " <td>418</td>\n", " </tr>\n", " <tr>\n", " <th>562</th>\n", - " <td>200903</td>\n", + " <td>2009-03-01</td>\n", " <td>delete</td>\n", " <td>3</td>\n", " </tr>\n", " <tr>\n", " <th>563</th>\n", - " <td>200903</td>\n", + " <td>2009-03-01</td>\n", " <td>edit</td>\n", " <td>98346</td>\n", " </tr>\n", " <tr>\n", " <th>564</th>\n", - " <td>200903</td>\n", + " <td>2009-03-01</td>\n", " <td>move</td>\n", " <td>241</td>\n", " </tr>\n", @@ -2158,73 +2370,73 @@ "</div>" ], "text/plain": [ - " LogMonth EditorActions Freq\n", - "0 201903 autocreateaccount 47\n", - "1 201903 createaccount 4780\n", - "2 201903 delete 5\n", - "3 201903 edit 37950\n", - "4 201903 move 84\n", - "5 201903 upload 3\n", - "6 201902 autocreateaccount 454\n", - "7 201902 createaccount 25204\n", - "8 201902 delete 5\n", - "9 201902 edit 210488\n", - "10 201902 move 445\n", - "11 201902 upload 10\n", - "12 201901 autocreateaccount 281\n", - "13 201901 createaccount 27924\n", - "14 201901 delete 21\n", - "15 201901 edit 223870\n", - "16 201901 move 568\n", - "17 201901 upload 4\n", - "18 201812 autocreateaccount 102\n", - "19 201812 createaccount 35405\n", - "20 201812 delete 5\n", - "21 201812 edit 189795\n", - "22 201812 move 959\n", - "23 201812 upload 21\n", - "24 201811 autocreateaccount 486\n", - "25 201811 createaccount 35421\n", - "26 201811 delete 2\n", - "27 201811 edit 216220\n", - "28 201811 move 1048\n", - "29 201811 upload 56\n", - ".. ... ... ...\n", - "535 200911 move 128\n", - "536 200910 createaccount 145\n", - "537 200910 edit 226571\n", - "538 200910 move 149\n", - "539 200909 createaccount 35\n", - "540 200909 edit 213070\n", - "541 200909 move 103\n", - "542 200908 createaccount 95\n", - "543 200908 delete 2\n", - "544 200908 edit 162038\n", - "545 200908 move 146\n", - "546 200907 createaccount 124\n", - "547 200907 delete 1\n", - "548 200907 edit 160740\n", - "549 200907 move 128\n", - "550 200906 createaccount 141\n", - "551 200906 edit 178879\n", - "552 200906 move 156\n", - "553 200905 createaccount 156\n", - "554 200905 delete 2\n", - "555 200905 edit 211506\n", - "556 200905 move 215\n", - "557 200904 createaccount 24\n", - "558 200904 delete 7\n", - "559 200904 edit 178865\n", - "560 200904 move 256\n", - "561 200903 createaccount 418\n", - "562 200903 delete 3\n", - "563 200903 edit 98346\n", - "564 200903 move 241\n", + " LogMonth EditorActions Freq\n", + "0 2019-03-01 autocreateaccount 47\n", + "1 2019-03-01 createaccount 4780\n", + "2 2019-03-01 delete 5\n", + "3 2019-03-01 edit 37950\n", + "4 2019-03-01 move 84\n", + "5 2019-03-01 upload 3\n", + "6 2019-02-01 autocreateaccount 454\n", + "7 2019-02-01 createaccount 25204\n", + "8 2019-02-01 delete 5\n", + "9 2019-02-01 edit 210488\n", + "10 2019-02-01 move 445\n", + "11 2019-02-01 upload 10\n", + "12 2019-01-01 autocreateaccount 281\n", + "13 2019-01-01 createaccount 27924\n", + "14 2019-01-01 delete 21\n", + "15 2019-01-01 edit 223870\n", + "16 2019-01-01 move 568\n", + "17 2019-01-01 upload 4\n", + "18 2018-12-01 autocreateaccount 102\n", + "19 2018-12-01 createaccount 35405\n", + "20 2018-12-01 delete 5\n", + "21 2018-12-01 edit 189795\n", + "22 2018-12-01 move 959\n", + "23 2018-12-01 upload 21\n", + "24 2018-11-01 autocreateaccount 486\n", + "25 2018-11-01 createaccount 35421\n", + "26 2018-11-01 delete 2\n", + "27 2018-11-01 edit 216220\n", + "28 2018-11-01 move 1048\n", + "29 2018-11-01 upload 56\n", + ".. ... ... ...\n", + "535 2009-11-01 move 128\n", + "536 2009-10-01 createaccount 145\n", + "537 2009-10-01 edit 226571\n", + "538 2009-10-01 move 149\n", + "539 2009-09-01 createaccount 35\n", + "540 2009-09-01 edit 213070\n", + "541 2009-09-01 move 103\n", + "542 2009-08-01 createaccount 95\n", + "543 2009-08-01 delete 2\n", + "544 2009-08-01 edit 162038\n", + "545 2009-08-01 move 146\n", + "546 2009-07-01 createaccount 124\n", + "547 2009-07-01 delete 1\n", + "548 2009-07-01 edit 160740\n", + "549 2009-07-01 move 128\n", + "550 2009-06-01 createaccount 141\n", + "551 2009-06-01 edit 178879\n", + "552 2009-06-01 move 156\n", + "553 2009-05-01 createaccount 156\n", + "554 2009-05-01 delete 2\n", + "555 2009-05-01 edit 211506\n", + "556 2009-05-01 move 215\n", + "557 2009-04-01 createaccount 24\n", + "558 2009-04-01 delete 7\n", + "559 2009-04-01 edit 178865\n", + "560 2009-04-01 move 256\n", + "561 2009-03-01 createaccount 418\n", + "562 2009-03-01 delete 3\n", + "563 2009-03-01 edit 98346\n", + "564 2009-03-01 move 241\n", "\n", "[565 rows x 3 columns]" ] }, - "execution_count": 2, + "execution_count": 23, "metadata": {}, "output_type": "execute_result" } @@ -2232,6 +2444,7 @@ "source": [ "# Which editors' actions triggered a filter\n", "df_ed_actions = pd.read_csv(\"quarry-34050-which-actions-triggered-an-abuse-filter-en-wiki-run346498.csv\", sep=',')\n", + "df_ed_actions['LogMonth'] = pd.to_datetime(df_ed_actions['LogMonth'], format=\"%Y%m\")\n", "df_ed_actions" ] },