diff --git a/src/explore.ipynb b/src/explore.ipynb index e85452a6e91033dc193abad4432264e5d41359ec..9bd0d229e1f1fbc2ff2d58ef10f49c425ac8e3f8 100644 --- a/src/explore.ipynb +++ b/src/explore.ipynb @@ -2,13 +2,19 @@ "cells": [ { "cell_type": "code", - "execution_count": 6, + "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "import pandas as pd\n", "import itertools\n", - "import collections" + "import collections\n", + "import numpy as np\n", + "import matplotlib\n", + "import matplotlib.pyplot as plt\n", + "\n", + "# set some nicer defaults for matplotlib\n", + "from matplotlib import rcParams" ] }, { @@ -20,13 +26,12 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": 19, "metadata": {}, "outputs": [], "source": [ "df = pd.read_csv(\"20190106115600_filters-sorted-by-hits-manual-tags.csv\", sep='\\t')\n", - "df_origin = pd.read_csv(\"quarry-32518-all-filters-sorted-num-hits.csv\", sep=',')\n", - "df_hits = pd.read_csv(\"quarry-34014-how-many-abuse-filter-hits-have-been-there-per-month-en-wiki-run346197.csv\", sep=',')" + "df_origin = pd.read_csv(\"quarry-32518-all-filters-sorted-num-hits.csv\", sep=',')\n" ] }, { @@ -211,7 +216,7 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": 43, "metadata": {}, "outputs": [ { @@ -242,152 +247,152 @@ " <tbody>\n", " <tr>\n", " <th>0</th>\n", - " <td>201903</td>\n", + " <td>2019-03-01</td>\n", " <td>34309</td>\n", " </tr>\n", " <tr>\n", " <th>1</th>\n", - " <td>201902</td>\n", + " <td>2019-02-01</td>\n", " <td>236606</td>\n", " </tr>\n", " <tr>\n", " <th>2</th>\n", - " <td>201901</td>\n", + " <td>2019-01-01</td>\n", " <td>252668</td>\n", " </tr>\n", " <tr>\n", " <th>3</th>\n", - " <td>201812</td>\n", + " <td>2018-12-01</td>\n", " <td>226287</td>\n", " </tr>\n", " <tr>\n", " <th>4</th>\n", - " <td>201811</td>\n", + " <td>2018-11-01</td>\n", " <td>253233</td>\n", " </tr>\n", " <tr>\n", " <th>5</th>\n", - " <td>201810</td>\n", + " <td>2018-10-01</td>\n", " <td>256438</td>\n", " </tr>\n", " <tr>\n", " <th>6</th>\n", - " <td>201809</td>\n", + " <td>2018-09-01</td>\n", " <td>230354</td>\n", " </tr>\n", " <tr>\n", " <th>7</th>\n", - " <td>201808</td>\n", + " <td>2018-08-01</td>\n", " <td>216045</td>\n", " </tr>\n", " <tr>\n", " <th>8</th>\n", - " <td>201807</td>\n", + " <td>2018-07-01</td>\n", " <td>205477</td>\n", " </tr>\n", " <tr>\n", " <th>9</th>\n", - " <td>201806</td>\n", + " <td>2018-06-01</td>\n", " <td>209374</td>\n", " </tr>\n", " <tr>\n", " <th>10</th>\n", - " <td>201805</td>\n", + " <td>2018-05-01</td>\n", " <td>238235</td>\n", " </tr>\n", " <tr>\n", " <th>11</th>\n", - " <td>201804</td>\n", + " <td>2018-04-01</td>\n", " <td>242857</td>\n", " </tr>\n", " <tr>\n", " <th>12</th>\n", - " <td>201803</td>\n", + " <td>2018-03-01</td>\n", " <td>255431</td>\n", " </tr>\n", " <tr>\n", " <th>13</th>\n", - " <td>201802</td>\n", + " <td>2018-02-01</td>\n", " <td>213548</td>\n", " </tr>\n", " <tr>\n", " <th>14</th>\n", - " <td>201801</td>\n", + " <td>2018-01-01</td>\n", " <td>235705</td>\n", " </tr>\n", " <tr>\n", " <th>15</th>\n", - " <td>201712</td>\n", + " <td>2017-12-01</td>\n", " <td>213359</td>\n", " </tr>\n", " <tr>\n", " <th>16</th>\n", - " <td>201711</td>\n", + " <td>2017-11-01</td>\n", " <td>254671</td>\n", " </tr>\n", " <tr>\n", " <th>17</th>\n", - " <td>201710</td>\n", + " <td>2017-10-01</td>\n", " <td>224244</td>\n", " </tr>\n", " <tr>\n", " <th>18</th>\n", - " <td>201709</td>\n", + " <td>2017-09-01</td>\n", " <td>212790</td>\n", " </tr>\n", " <tr>\n", " <th>19</th>\n", - " <td>201708</td>\n", + " <td>2017-08-01</td>\n", " <td>195593</td>\n", " </tr>\n", " <tr>\n", " <th>20</th>\n", - " <td>201707</td>\n", + " <td>2017-07-01</td>\n", " <td>176778</td>\n", " </tr>\n", " <tr>\n", " <th>21</th>\n", - " <td>201706</td>\n", + " <td>2017-06-01</td>\n", " <td>184406</td>\n", " </tr>\n", " <tr>\n", " <th>22</th>\n", - " <td>201705</td>\n", + " <td>2017-05-01</td>\n", " <td>231250</td>\n", " </tr>\n", " <tr>\n", " <th>23</th>\n", - " <td>201704</td>\n", + " <td>2017-04-01</td>\n", " <td>225176</td>\n", " </tr>\n", " <tr>\n", " <th>24</th>\n", - " <td>201703</td>\n", + " <td>2017-03-01</td>\n", " <td>257081</td>\n", " </tr>\n", " <tr>\n", " <th>25</th>\n", - " <td>201702</td>\n", + " <td>2017-02-01</td>\n", " <td>246199</td>\n", " </tr>\n", " <tr>\n", " <th>26</th>\n", - " <td>201701</td>\n", + " <td>2017-01-01</td>\n", " <td>256925</td>\n", " </tr>\n", " <tr>\n", " <th>27</th>\n", - " <td>201612</td>\n", + " <td>2016-12-01</td>\n", " <td>226680</td>\n", " </tr>\n", " <tr>\n", " <th>28</th>\n", - " <td>201611</td>\n", + " <td>2016-11-01</td>\n", " <td>258655</td>\n", " </tr>\n", " <tr>\n", " <th>29</th>\n", - " <td>201610</td>\n", + " <td>2016-10-01</td>\n", " <td>254070</td>\n", " </tr>\n", " <tr>\n", @@ -397,152 +402,152 @@ " </tr>\n", " <tr>\n", " <th>91</th>\n", - " <td>201108</td>\n", + " <td>2011-08-01</td>\n", " <td>133965</td>\n", " </tr>\n", " <tr>\n", " <th>92</th>\n", - " <td>201107</td>\n", + " <td>2011-07-01</td>\n", " <td>133186</td>\n", " </tr>\n", " <tr>\n", " <th>93</th>\n", - " <td>201106</td>\n", + " <td>2011-06-01</td>\n", " <td>143617</td>\n", " </tr>\n", " <tr>\n", " <th>94</th>\n", - " <td>201105</td>\n", + " <td>2011-05-01</td>\n", " <td>173431</td>\n", " </tr>\n", " <tr>\n", " <th>95</th>\n", - " <td>201104</td>\n", + " <td>2011-04-01</td>\n", " <td>160696</td>\n", " </tr>\n", " <tr>\n", " <th>96</th>\n", - " <td>201103</td>\n", + " <td>2011-03-01</td>\n", " <td>177539</td>\n", " </tr>\n", " <tr>\n", " <th>97</th>\n", - " <td>201102</td>\n", + " <td>2011-02-01</td>\n", " <td>173222</td>\n", " </tr>\n", " <tr>\n", " <th>98</th>\n", - " <td>201101</td>\n", + " <td>2011-01-01</td>\n", " <td>181135</td>\n", " </tr>\n", " <tr>\n", " <th>99</th>\n", - " <td>201012</td>\n", + " <td>2010-12-01</td>\n", " <td>157738</td>\n", " </tr>\n", " <tr>\n", " <th>100</th>\n", - " <td>201011</td>\n", + " <td>2010-11-01</td>\n", " <td>195329</td>\n", " </tr>\n", " <tr>\n", " <th>101</th>\n", - " <td>201010</td>\n", + " <td>2010-10-01</td>\n", " <td>206730</td>\n", " </tr>\n", " <tr>\n", " <th>102</th>\n", - " <td>201009</td>\n", + " <td>2010-09-01</td>\n", " <td>174706</td>\n", " </tr>\n", " <tr>\n", " <th>103</th>\n", - " <td>201008</td>\n", + " <td>2010-08-01</td>\n", " <td>138323</td>\n", " </tr>\n", " <tr>\n", " <th>104</th>\n", - " <td>201007</td>\n", + " <td>2010-07-01</td>\n", " <td>127687</td>\n", " </tr>\n", " <tr>\n", " <th>105</th>\n", - " <td>201006</td>\n", + " <td>2010-06-01</td>\n", " <td>146164</td>\n", " </tr>\n", " <tr>\n", " <th>106</th>\n", - " <td>201005</td>\n", + " <td>2010-05-01</td>\n", " <td>206822</td>\n", " </tr>\n", " <tr>\n", " <th>107</th>\n", - " <td>201004</td>\n", + " <td>2010-04-01</td>\n", " <td>197381</td>\n", " </tr>\n", " <tr>\n", " <th>108</th>\n", - " <td>201003</td>\n", + " <td>2010-03-01</td>\n", " <td>217092</td>\n", " </tr>\n", " <tr>\n", " <th>109</th>\n", - " <td>201002</td>\n", + " <td>2010-02-01</td>\n", " <td>206380</td>\n", " </tr>\n", " <tr>\n", " <th>110</th>\n", - " <td>201001</td>\n", + " <td>2010-01-01</td>\n", " <td>193376</td>\n", " </tr>\n", " <tr>\n", " <th>111</th>\n", - " <td>200912</td>\n", + " <td>2009-12-01</td>\n", " <td>166506</td>\n", " </tr>\n", " <tr>\n", " <th>112</th>\n", - " <td>200911</td>\n", + " <td>2009-11-01</td>\n", " <td>210227</td>\n", " </tr>\n", " <tr>\n", " <th>113</th>\n", - " <td>200910</td>\n", + " <td>2009-10-01</td>\n", " <td>226865</td>\n", " </tr>\n", " <tr>\n", " <th>114</th>\n", - " <td>200909</td>\n", + " <td>2009-09-01</td>\n", " <td>213208</td>\n", " </tr>\n", " <tr>\n", " <th>115</th>\n", - " <td>200908</td>\n", + " <td>2009-08-01</td>\n", " <td>162281</td>\n", " </tr>\n", " <tr>\n", " <th>116</th>\n", - " <td>200907</td>\n", + " <td>2009-07-01</td>\n", " <td>160993</td>\n", " </tr>\n", " <tr>\n", " <th>117</th>\n", - " <td>200906</td>\n", + " <td>2009-06-01</td>\n", " <td>179176</td>\n", " </tr>\n", " <tr>\n", " <th>118</th>\n", - " <td>200905</td>\n", + " <td>2009-05-01</td>\n", " <td>211879</td>\n", " </tr>\n", " <tr>\n", " <th>119</th>\n", - " <td>200904</td>\n", + " <td>2009-04-01</td>\n", " <td>179152</td>\n", " </tr>\n", " <tr>\n", " <th>120</th>\n", - " <td>200903</td>\n", + " <td>2009-03-01</td>\n", " <td>99008</td>\n", " </tr>\n", " </tbody>\n", @@ -551,93 +556,132 @@ "</div>" ], "text/plain": [ - " LogMonth Freq\n", - "0 201903 34309\n", - "1 201902 236606\n", - "2 201901 252668\n", - "3 201812 226287\n", - "4 201811 253233\n", - "5 201810 256438\n", - "6 201809 230354\n", - "7 201808 216045\n", - "8 201807 205477\n", - "9 201806 209374\n", - "10 201805 238235\n", - "11 201804 242857\n", - "12 201803 255431\n", - "13 201802 213548\n", - "14 201801 235705\n", - "15 201712 213359\n", - "16 201711 254671\n", - "17 201710 224244\n", - "18 201709 212790\n", - "19 201708 195593\n", - "20 201707 176778\n", - "21 201706 184406\n", - "22 201705 231250\n", - "23 201704 225176\n", - "24 201703 257081\n", - "25 201702 246199\n", - "26 201701 256925\n", - "27 201612 226680\n", - "28 201611 258655\n", - "29 201610 254070\n", - ".. ... ...\n", - "91 201108 133965\n", - "92 201107 133186\n", - "93 201106 143617\n", - "94 201105 173431\n", - "95 201104 160696\n", - "96 201103 177539\n", - "97 201102 173222\n", - "98 201101 181135\n", - "99 201012 157738\n", - "100 201011 195329\n", - "101 201010 206730\n", - "102 201009 174706\n", - "103 201008 138323\n", - "104 201007 127687\n", - "105 201006 146164\n", - "106 201005 206822\n", - "107 201004 197381\n", - "108 201003 217092\n", - "109 201002 206380\n", - "110 201001 193376\n", - "111 200912 166506\n", - "112 200911 210227\n", - "113 200910 226865\n", - "114 200909 213208\n", - "115 200908 162281\n", - "116 200907 160993\n", - "117 200906 179176\n", - "118 200905 211879\n", - "119 200904 179152\n", - "120 200903 99008\n", + " LogMonth Freq\n", + "0 2019-03-01 34309\n", + "1 2019-02-01 236606\n", + "2 2019-01-01 252668\n", + "3 2018-12-01 226287\n", + "4 2018-11-01 253233\n", + "5 2018-10-01 256438\n", + "6 2018-09-01 230354\n", + "7 2018-08-01 216045\n", + "8 2018-07-01 205477\n", + "9 2018-06-01 209374\n", + "10 2018-05-01 238235\n", + "11 2018-04-01 242857\n", + "12 2018-03-01 255431\n", + "13 2018-02-01 213548\n", + "14 2018-01-01 235705\n", + "15 2017-12-01 213359\n", + "16 2017-11-01 254671\n", + "17 2017-10-01 224244\n", + "18 2017-09-01 212790\n", + "19 2017-08-01 195593\n", + "20 2017-07-01 176778\n", + "21 2017-06-01 184406\n", + "22 2017-05-01 231250\n", + "23 2017-04-01 225176\n", + "24 2017-03-01 257081\n", + "25 2017-02-01 246199\n", + "26 2017-01-01 256925\n", + "27 2016-12-01 226680\n", + "28 2016-11-01 258655\n", + "29 2016-10-01 254070\n", + ".. ... ...\n", + "91 2011-08-01 133965\n", + "92 2011-07-01 133186\n", + "93 2011-06-01 143617\n", + "94 2011-05-01 173431\n", + "95 2011-04-01 160696\n", + "96 2011-03-01 177539\n", + "97 2011-02-01 173222\n", + "98 2011-01-01 181135\n", + "99 2010-12-01 157738\n", + "100 2010-11-01 195329\n", + "101 2010-10-01 206730\n", + "102 2010-09-01 174706\n", + "103 2010-08-01 138323\n", + "104 2010-07-01 127687\n", + "105 2010-06-01 146164\n", + "106 2010-05-01 206822\n", + "107 2010-04-01 197381\n", + "108 2010-03-01 217092\n", + "109 2010-02-01 206380\n", + "110 2010-01-01 193376\n", + "111 2009-12-01 166506\n", + "112 2009-11-01 210227\n", + "113 2009-10-01 226865\n", + "114 2009-09-01 213208\n", + "115 2009-08-01 162281\n", + "116 2009-07-01 160993\n", + "117 2009-06-01 179176\n", + "118 2009-05-01 211879\n", + "119 2009-04-01 179152\n", + "120 2009-03-01 99008\n", "\n", "[121 rows x 2 columns]" ] }, - "execution_count": 3, + "execution_count": 43, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# filter hits per month (all filters) (data quarry from 05.03.2019, that's why hitcount Mar 2019 is so small)\n", + "df_hits = pd.read_csv(\"quarry-34014-how-many-abuse-filter-hits-have-been-there-per-month-en-wiki-run346197.csv\", sep=',')\n", + "df_hits['LogMonth'] = pd.to_datetime(df_hits['LogMonth'], format=\"%Y%m\")\n", "df_hits" ] }, { - "cell_type": "markdown", + "cell_type": "code", + "execution_count": 52, "metadata": {}, + "outputs": [ + { + "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": [ - "## Helper functions" + "plt.xlabel('Month')\n", + "plt.ylabel('Num hits')\n" ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, + "outputs": [ + { + "ename": "NameError", + "evalue": "name 'calendar' is not defined", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mNameError\u001b[0m Traceback (most recent call last)", + "\u001b[0;32m<ipython-input-14-0175097c371b>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0mcalendar\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mmonth_name\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", + "\u001b[0;31mNameError\u001b[0m: name 'calendar' is not defined" + ] + } + ], + "source": [ + "calendar.month_name" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, "outputs": [], "source": [ "flatten = lambda x: list(itertools.chain.from_iterable(x))"