Skip to content

Instantly share code, notes, and snippets.

@whym
Created January 20, 2016 09:51
Show Gist options
  • Save whym/8e0907ca39f714045789 to your computer and use it in GitHub Desktop.
Save whym/8e0907ca39f714045789 to your computer and use it in GitHub Desktop.
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "code",
"execution_count": 76,
"metadata": {
"collapsed": false,
"scrolled": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"67 sites with edits\n",
"8 to go; 58 queries succeeded\n",
"1 to go; 65 queries succeeded\n",
"1 to go; 66 queries succeeded\n",
"5781\n"
]
}
],
"source": [
"import pandas as pd\n",
"import matplotlib.pyplot as plt\n",
"import json\n",
"import codecs\n",
"from six.moves import xrange, queue, urllib\n",
"import numpy as np\n",
"import multiprocessing as mp\n",
"from datetime import datetime \n",
"import time\n",
"from collections import namedtuple\n",
"\n",
"\n",
"username = 'Whym'\n",
"days = 500\n",
"uclimit = '500'\n",
"username = urllib.parse.quote(username)\n",
"\n",
"Product=namedtuple('Product', ('worker', 'content'))\n",
"\n",
"\n",
"def urlopen(url):\n",
" return codecs.getreader('utf-8')(urllib.request.urlopen(url))\n",
"\n",
"def get_sites(user):\n",
" f = urlopen(\n",
" 'https://meta.wikimedia.org/w/api.php?action=query&format=json&meta=globaluserinfo&guiuser=%s&guiprop=merged|editcount' % user\n",
" )\n",
" doc = json.load(f)\n",
" if 'error' in doc:\n",
" print(doc['error'])\n",
" return []\n",
" return [x['url'] for x in sorted(\n",
" doc['query']['globaluserinfo']['merged'],\n",
" key=lambda x: x['editcount']) if x['editcount'] > 0]\n",
"\n",
"\n",
"# infinite loop to call the API using \"continue\" unless there is an error\n",
"def continued_results(query, wait=1):\n",
" params = {'continue': ''}\n",
" while True:\n",
" url = '&'.join([query]+['%s=%s' % x for x in params.items()])\n",
" #print(url)\n",
" try:\n",
" f = urlopen(url)\n",
" doc = json.load(f)\n",
" if 'error' in doc:\n",
" print(doc['error'])\n",
" yield doc\n",
" if 'continue' in doc:\n",
" params = doc['continue']\n",
" else:\n",
" break\n",
" except Exception as e:\n",
" print('%s %s' % (query, e))\n",
" break\n",
" time.sleep(wait)\n",
"\n",
"\n",
"def get_rows(prodq, site, days):\n",
" #print('starting ' + site)\n",
" try:\n",
" for doc in continued_results(\n",
" u'%s/w/api.php?action=query&format=json&list=usercontribs&ucprop=%s&uclimit=%s&ucuser=%s' % (\n",
" site, 'ids|title|timestamp|comment|size|sizediff|flags', uclimit, username\n",
" )):\n",
" if doc is None:\n",
" break\n",
" df = pd.DataFrame.from_dict(doc['query']['usercontribs'])\n",
" if df is None or 'revid' not in df.keys():\n",
" break\n",
" df['wiki'] = site\n",
" df.timestamp = pd.to_datetime(df.timestamp)\n",
" prodq.put(Product(site, df))\n",
" if df.timestamp.min() - pd.to_datetime(datetime.now()) < pd.Timedelta('-%d days' % days):\n",
" break\n",
" finally:\n",
" # put terminator\n",
" prodq.put(Product(site, None))\n",
"\n",
"\n",
"def wrapped_get(x):\n",
" get_rows(*x)\n",
"\n",
"\n",
"sites = get_sites(username) + ['https://translatewiki.net']\n",
"print('%d sites with edits' % len(sites))\n",
"manager = mp.Manager()\n",
"pool = mp.Pool(mp.cpu_count() * 2 - 1)\n",
"prodq = manager.Queue()\n",
"r = pool.map_async(wrapped_get, [(prodq, site, days) for site in sites])\n",
"\n",
"dfs = []\n",
"processing = set(sites)\n",
"while len(processing) > 0:\n",
" try:\n",
" d = prodq.get(timeout=2)\n",
" except queue.Empty:\n",
" print('%d to go; %d queries succeeded' % (len(processing), len(dfs)))\n",
" continue\n",
" if d.content is None:\n",
" processing.remove(d.worker)\n",
" #print('finished ' + d.worker)\n",
" else:\n",
" dfs.append(d.content)\n",
"pool.terminate()\n",
"\n",
"df = pd.concat(dfs, ignore_index=True)\n",
"\n",
"now = pd.to_datetime(datetime.now())\n",
"df['delta'] = df.timestamp - now\n",
"df = df.sort('delta', ascending=False)\n",
"print(len(df))\n"
]
},
{
"cell_type": "code",
"execution_count": 77,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>timestamp</th>\n",
" <th>wiki</th>\n",
" <th>title</th>\n",
" <th>revid</th>\n",
" <th>sizediff</th>\n",
" <th>comment</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>3281</th>\n",
" <td>2016-01-19 11:29:31</td>\n",
" <td>https://ja.wikipedia.org</td>\n",
" <td>百万 (能)</td>\n",
" <td>58298236</td>\n",
" <td>4298</td>\n",
" <td>構成などの加筆です</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3282</th>\n",
" <td>2016-01-18 13:32:40</td>\n",
" <td>https://ja.wikipedia.org</td>\n",
" <td>百万</td>\n",
" <td>58289104</td>\n",
" <td>152</td>\n",
" <td></td>\n",
" </tr>\n",
" <tr>\n",
" <th>3283</th>\n",
" <td>2016-01-18 13:31:15</td>\n",
" <td>https://ja.wikipedia.org</td>\n",
" <td>百万 (能)</td>\n",
" <td>58289080</td>\n",
" <td>9510</td>\n",
" <td>能の演目の項目として作成します</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4781</th>\n",
" <td>2016-01-18 12:46:24</td>\n",
" <td>https://commons.wikimedia.org</td>\n",
" <td>File:Hyakuman Nougaku Zue.jpg</td>\n",
" <td>184987919</td>\n",
" <td>1</td>\n",
" <td>/* {{int:filedesc}} */ fix</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4782</th>\n",
" <td>2016-01-18 12:44:59</td>\n",
" <td>https://commons.wikimedia.org</td>\n",
" <td>File:Hyakuman Nougaku Zue.jpg</td>\n",
" <td>184987842</td>\n",
" <td>707</td>\n",
" <td>User created page with UploadWizard</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4783</th>\n",
" <td>2016-01-18 12:40:22</td>\n",
" <td>https://commons.wikimedia.org</td>\n",
" <td>Category:Noh</td>\n",
" <td>184987587</td>\n",
" <td>53</td>\n",
" <td>[[COM:AES|←]]Created page with '{{Category red...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4784</th>\n",
" <td>2016-01-15 10:43:29</td>\n",
" <td>https://commons.wikimedia.org</td>\n",
" <td>File:Akutagawa portrait Akutagawa Sakuhinshu 6...</td>\n",
" <td>184738253</td>\n",
" <td>44</td>\n",
" <td>fix information</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4785</th>\n",
" <td>2016-01-15 10:34:18</td>\n",
" <td>https://commons.wikimedia.org</td>\n",
" <td>Commons:Administrators/Requests</td>\n",
" <td>184737854</td>\n",
" <td>30</td>\n",
" <td>add [[Commons:Administrators/Requests/Yasu|RfA...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4786</th>\n",
" <td>2016-01-15 10:00:17</td>\n",
" <td>https://commons.wikimedia.org</td>\n",
" <td>User talk:Yasu</td>\n",
" <td>184735875</td>\n",
" <td>265</td>\n",
" <td>/* Adminship */ [[Commons:Administrators/Reque...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4787</th>\n",
" <td>2016-01-15 09:53:58</td>\n",
" <td>https://commons.wikimedia.org</td>\n",
" <td>Commons:Administrators/Requests/Yasu</td>\n",
" <td>184735532</td>\n",
" <td>2130</td>\n",
" <td>Nominating [[User:Yasu|Yasu]] for adminship. [...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4788</th>\n",
" <td>2016-01-11 03:19:07</td>\n",
" <td>https://commons.wikimedia.org</td>\n",
" <td>File:Hilbert.jpg</td>\n",
" <td>184368493</td>\n",
" <td>122</td>\n",
" <td>information template</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4789</th>\n",
" <td>2016-01-11 03:10:15</td>\n",
" <td>https://commons.wikimedia.org</td>\n",
" <td>Commons:Deletion requests/File:Mikihisako1956....</td>\n",
" <td>184368112</td>\n",
" <td>419</td>\n",
" <td>Deleted: The file page says \"許可なく転載を禁ず\" - \"no ...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4790</th>\n",
" <td>2016-01-11 03:02:44</td>\n",
" <td>https://commons.wikimedia.org</td>\n",
" <td>Commons:Deletion requests/File:Yin yang laozi.jpg</td>\n",
" <td>184367923</td>\n",
" <td>734</td>\n",
" <td>/* File:Yin yang laozi.jpg */ keep</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4791</th>\n",
" <td>2016-01-11 02:56:12</td>\n",
" <td>https://commons.wikimedia.org</td>\n",
" <td>Commons:Deletion requests/2016/01/11</td>\n",
" <td>184367674</td>\n",
" <td>58</td>\n",
" <td>Listing [[Commons:Deletion requests/Files uplo...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4792</th>\n",
" <td>2016-01-11 02:56:11</td>\n",
" <td>https://commons.wikimedia.org</td>\n",
" <td>User talk:SparkTroy</td>\n",
" <td>184367673</td>\n",
" <td>362</td>\n",
" <td>Some of your [[Commons:Deletion requests/Files...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4793</th>\n",
" <td>2016-01-11 02:56:10</td>\n",
" <td>https://commons.wikimedia.org</td>\n",
" <td>Commons:Deletion requests/Files uploaded by Sp...</td>\n",
" <td>184367669</td>\n",
" <td>737</td>\n",
" <td>Starting mass deletion request using [[COM:VFC...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4794</th>\n",
" <td>2016-01-11 02:50:48</td>\n",
" <td>https://commons.wikimedia.org</td>\n",
" <td>User talk:ラハール</td>\n",
" <td>184367467</td>\n",
" <td>0</td>\n",
" <td>Whym moved page [[User talk:ラハール (ursurped)]] ...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4795</th>\n",
" <td>2016-01-11 02:49:24</td>\n",
" <td>https://commons.wikimedia.org</td>\n",
" <td>User talk:Gravy inc</td>\n",
" <td>184367400</td>\n",
" <td>279</td>\n",
" <td>Please send permission for [[:File:Yasuaki Shi...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4796</th>\n",
" <td>2016-01-11 02:48:27</td>\n",
" <td>https://commons.wikimedia.org</td>\n",
" <td>User talk:Bule archi</td>\n",
" <td>184367380</td>\n",
" <td>261</td>\n",
" <td>Please send permission for [[:File:貴晴.jpg]] to...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4797</th>\n",
" <td>2016-01-11 02:47:12</td>\n",
" <td>https://commons.wikimedia.org</td>\n",
" <td>User talk:Yasu</td>\n",
" <td>184367346</td>\n",
" <td>603</td>\n",
" <td>/* Adminship */ re</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4798</th>\n",
" <td>2016-01-04 09:26:43</td>\n",
" <td>https://commons.wikimedia.org</td>\n",
" <td>User talk:Yasu</td>\n",
" <td>183707464</td>\n",
" <td>1204</td>\n",
" <td>/* Adminship */ re</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4281</th>\n",
" <td>2016-01-03 08:35:46</td>\n",
" <td>https://www.wikidata.org</td>\n",
" <td>Property:P98</td>\n",
" <td>288259878</td>\n",
" <td>203</td>\n",
" <td>/* wbeditentity-update:0| */ [[MediaWiki_talk:...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4282</th>\n",
" <td>2016-01-03 08:34:39</td>\n",
" <td>https://www.wikidata.org</td>\n",
" <td>Q107569</td>\n",
" <td>288259725</td>\n",
" <td>-403</td>\n",
" <td>should probably be the other way around - it's...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4283</th>\n",
" <td>2016-01-03 08:19:54</td>\n",
" <td>https://www.wikidata.org</td>\n",
" <td>Q371522</td>\n",
" <td>288257840</td>\n",
" <td>-329</td>\n",
" <td>/* wbremoveclaims-remove:1| */ [[Property:P227...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4284</th>\n",
" <td>2016-01-03 08:03:22</td>\n",
" <td>https://www.wikidata.org</td>\n",
" <td>Q371522</td>\n",
" <td>288255330</td>\n",
" <td>357</td>\n",
" <td>/* wbcreateclaim-create:1| */ [[Property:P213]...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4285</th>\n",
" <td>2016-01-03 08:03:20</td>\n",
" <td>https://www.wikidata.org</td>\n",
" <td>Q371522</td>\n",
" <td>288255325</td>\n",
" <td>346</td>\n",
" <td>/* wbcreateclaim-create:1| */ [[Property:P269]...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4286</th>\n",
" <td>2016-01-03 08:03:18</td>\n",
" <td>https://www.wikidata.org</td>\n",
" <td>Q371522</td>\n",
" <td>288255317</td>\n",
" <td>343</td>\n",
" <td>/* wbcreateclaim-create:1| */ [[Property:P906]...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4287</th>\n",
" <td>2016-01-03 08:03:14</td>\n",
" <td>https://www.wikidata.org</td>\n",
" <td>Q371522</td>\n",
" <td>288255299</td>\n",
" <td>351</td>\n",
" <td>/* wbcreateclaim-create:1| */ [[Property:P1207...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4288</th>\n",
" <td>2016-01-03 08:03:13</td>\n",
" <td>https://www.wikidata.org</td>\n",
" <td>Q371522</td>\n",
" <td>288255295</td>\n",
" <td>345</td>\n",
" <td>/* wbcreateclaim-create:1| */ [[Property:P409]...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4289</th>\n",
" <td>2016-01-03 08:03:11</td>\n",
" <td>https://www.wikidata.org</td>\n",
" <td>Q371522</td>\n",
" <td>288255289</td>\n",
" <td>352</td>\n",
" <td>/* wbcreateclaim-create:1| */ [[Property:P691]...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>...</th>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5356</th>\n",
" <td>2014-09-09 08:50:22</td>\n",
" <td>https://commons.wikimedia.org</td>\n",
" <td>File:B-727 Iberia.jpg</td>\n",
" <td>134203163</td>\n",
" <td>31</td>\n",
" <td>[[Help:Cat-a-lot|Cat-a-lot]]: Adding [[Categor...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5361</th>\n",
" <td>2014-09-09 08:50:22</td>\n",
" <td>https://commons.wikimedia.org</td>\n",
" <td>File:DC- 10 Iberia.jpg</td>\n",
" <td>134203155</td>\n",
" <td>31</td>\n",
" <td>[[Help:Cat-a-lot|Cat-a-lot]]: Adding [[Categor...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5363</th>\n",
" <td>2014-09-09 08:50:21</td>\n",
" <td>https://commons.wikimedia.org</td>\n",
" <td>File:A-321.jpg</td>\n",
" <td>134203153</td>\n",
" <td>31</td>\n",
" <td>[[Help:Cat-a-lot|Cat-a-lot]]: Adding [[Categor...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5362</th>\n",
" <td>2014-09-09 08:50:21</td>\n",
" <td>https://commons.wikimedia.org</td>\n",
" <td>File:Fokker F- 28.jpg</td>\n",
" <td>134203154</td>\n",
" <td>31</td>\n",
" <td>[[Help:Cat-a-lot|Cat-a-lot]]: Adding [[Categor...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5364</th>\n",
" <td>2014-09-09 08:50:21</td>\n",
" <td>https://commons.wikimedia.org</td>\n",
" <td>File:EC.IQR A340-600 IBE Salvador Dali.jpg</td>\n",
" <td>134203152</td>\n",
" <td>31</td>\n",
" <td>[[Help:Cat-a-lot|Cat-a-lot]]: Adding [[Categor...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5365</th>\n",
" <td>2014-09-09 08:50:21</td>\n",
" <td>https://commons.wikimedia.org</td>\n",
" <td>File:A-343 \"Plácido Domingo\".jpg</td>\n",
" <td>134203151</td>\n",
" <td>31</td>\n",
" <td>[[Help:Cat-a-lot|Cat-a-lot]]: Adding [[Categor...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5366</th>\n",
" <td>2014-09-09 08:50:20</td>\n",
" <td>https://commons.wikimedia.org</td>\n",
" <td>File:Dragon Rapide GAEML.jpg</td>\n",
" <td>134203150</td>\n",
" <td>31</td>\n",
" <td>[[Help:Cat-a-lot|Cat-a-lot]]: Adding [[Categor...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5367</th>\n",
" <td>2014-09-09 08:50:20</td>\n",
" <td>https://commons.wikimedia.org</td>\n",
" <td>File:A319 iberia airlines.jpg</td>\n",
" <td>134203149</td>\n",
" <td>31</td>\n",
" <td>[[Help:Cat-a-lot|Cat-a-lot]]: Adding [[Categor...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5368</th>\n",
" <td>2014-09-09 08:50:20</td>\n",
" <td>https://commons.wikimedia.org</td>\n",
" <td>File:Dragon Rapide.jpg</td>\n",
" <td>134203148</td>\n",
" <td>31</td>\n",
" <td>[[Help:Cat-a-lot|Cat-a-lot]]: Adding [[Categor...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5371</th>\n",
" <td>2014-09-09 08:50:19</td>\n",
" <td>https://commons.wikimedia.org</td>\n",
" <td>File:Dragon Rapide G-AEML FIO-Iberia Munz.ona.jpg</td>\n",
" <td>134203144</td>\n",
" <td>31</td>\n",
" <td>[[Help:Cat-a-lot|Cat-a-lot]]: Adding [[Categor...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5370</th>\n",
" <td>2014-09-09 08:50:19</td>\n",
" <td>https://commons.wikimedia.org</td>\n",
" <td>File:Dragon Rapide Iberia.jpg</td>\n",
" <td>134203145</td>\n",
" <td>31</td>\n",
" <td>[[Help:Cat-a-lot|Cat-a-lot]]: Adding [[Categor...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5369</th>\n",
" <td>2014-09-09 08:50:19</td>\n",
" <td>https://commons.wikimedia.org</td>\n",
" <td>File:Iberia first A340-300.jpg</td>\n",
" <td>134203146</td>\n",
" <td>31</td>\n",
" <td>[[Help:Cat-a-lot|Cat-a-lot]]: Adding [[Categor...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5373</th>\n",
" <td>2014-09-09 08:50:19</td>\n",
" <td>https://commons.wikimedia.org</td>\n",
" <td>File:John Wayne Iberia 1963.jpg</td>\n",
" <td>134203142</td>\n",
" <td>31</td>\n",
" <td>[[Help:Cat-a-lot|Cat-a-lot]]: Adding [[Categor...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5372</th>\n",
" <td>2014-09-09 08:50:19</td>\n",
" <td>https://commons.wikimedia.org</td>\n",
" <td>File:DragonRapideLaMunoza.jpg</td>\n",
" <td>134203143</td>\n",
" <td>31</td>\n",
" <td>[[Help:Cat-a-lot|Cat-a-lot]]: Adding [[Categor...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>326</th>\n",
" <td>2014-09-08 11:01:54</td>\n",
" <td>https://en.wiktionary.org</td>\n",
" <td>桜餅</td>\n",
" <td>28962926</td>\n",
" <td>18</td>\n",
" <td>/* Japanese */ kanjitab</td>\n",
" </tr>\n",
" <tr>\n",
" <th>327</th>\n",
" <td>2014-09-08 11:01:17</td>\n",
" <td>https://en.wiktionary.org</td>\n",
" <td>歯垢</td>\n",
" <td>28962924</td>\n",
" <td>11</td>\n",
" <td>/* Japanese */ kanjitab</td>\n",
" </tr>\n",
" <tr>\n",
" <th>328</th>\n",
" <td>2014-09-08 11:00:33</td>\n",
" <td>https://en.wiktionary.org</td>\n",
" <td>爪の垢を煎じて飲む</td>\n",
" <td>28962917</td>\n",
" <td>25</td>\n",
" <td>/* Japanese */ kanjitab, defaultsort</td>\n",
" </tr>\n",
" <tr>\n",
" <th>329</th>\n",
" <td>2014-09-08 10:59:52</td>\n",
" <td>https://en.wiktionary.org</td>\n",
" <td>Category:Japanese terms spelled with 煎 read as せん</td>\n",
" <td>28962912</td>\n",
" <td>28</td>\n",
" <td>Created page with \"{{ja-readingcat|煎|せん}}\"</td>\n",
" </tr>\n",
" <tr>\n",
" <th>330</th>\n",
" <td>2014-09-08 10:59:32</td>\n",
" <td>https://en.wiktionary.org</td>\n",
" <td>煎餅</td>\n",
" <td>28962910</td>\n",
" <td>24</td>\n",
" <td>/* Japanese */ kanjitab</td>\n",
" </tr>\n",
" <tr>\n",
" <th>331</th>\n",
" <td>2014-09-08 10:58:48</td>\n",
" <td>https://en.wiktionary.org</td>\n",
" <td>焼き餅</td>\n",
" <td>28962907</td>\n",
" <td>-9</td>\n",
" <td>/* Japanese */ kanjitab</td>\n",
" </tr>\n",
" <tr>\n",
" <th>332</th>\n",
" <td>2014-09-08 10:57:41</td>\n",
" <td>https://en.wiktionary.org</td>\n",
" <td>Category:Japanese terms spelled with kanji rea...</td>\n",
" <td>28962902</td>\n",
" <td>29</td>\n",
" <td>Created page with \"{{ja-readascat|かがみ‎}}\"</td>\n",
" </tr>\n",
" <tr>\n",
" <th>333</th>\n",
" <td>2014-09-08 10:57:20</td>\n",
" <td>https://en.wiktionary.org</td>\n",
" <td>Category:Japanese terms spelled with 餅 read as もち</td>\n",
" <td>28962901</td>\n",
" <td>32</td>\n",
" <td>Created page with \"{{ja-readingcat|餅|もち|kun}}\"</td>\n",
" </tr>\n",
" <tr>\n",
" <th>334</th>\n",
" <td>2014-09-08 10:57:03</td>\n",
" <td>https://en.wiktionary.org</td>\n",
" <td>Category:Japanese terms spelled with 鏡 read as...</td>\n",
" <td>28962898</td>\n",
" <td>35</td>\n",
" <td>Created page with \"{{ja-readingcat|鏡|かがみ|kun}}\"</td>\n",
" </tr>\n",
" <tr>\n",
" <th>335</th>\n",
" <td>2014-09-08 10:55:55</td>\n",
" <td>https://en.wiktionary.org</td>\n",
" <td>鏡餅</td>\n",
" <td>28962891</td>\n",
" <td>16</td>\n",
" <td>/* Japanese */ fix def etc</td>\n",
" </tr>\n",
" <tr>\n",
" <th>336</th>\n",
" <td>2014-09-08 10:53:54</td>\n",
" <td>https://en.wiktionary.org</td>\n",
" <td>帰りの会</td>\n",
" <td>28962887</td>\n",
" <td>47</td>\n",
" <td>/* Japanese */ format</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1945</th>\n",
" <td>2014-09-08 10:49:02</td>\n",
" <td>https://ja.wiktionary.org</td>\n",
" <td>寄付</td>\n",
" <td>726353</td>\n",
" <td>884</td>\n",
" <td>[[よりつき]]、用例追加</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1946</th>\n",
" <td>2014-09-08 10:42:30</td>\n",
" <td>https://ja.wiktionary.org</td>\n",
" <td>寄附</td>\n",
" <td>726350</td>\n",
" <td>548</td>\n",
" <td>用例、英語版へのリンク追加</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1947</th>\n",
" <td>2014-09-08 10:37:24</td>\n",
" <td>https://ja.wiktionary.org</td>\n",
" <td>Wiktionary:管理者への立候補</td>\n",
" <td>726349</td>\n",
" <td>1009</td>\n",
" <td>/* 管理者の信任投票 */ 5件投票</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2988</th>\n",
" <td>2014-09-08 00:26:43</td>\n",
" <td>https://meta.wikimedia.org</td>\n",
" <td>Tech/News/2014/37/ja</td>\n",
" <td>9789879</td>\n",
" <td>144</td>\n",
" <td>Created page with \"Phabricator への移行計画についての[$li...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2989</th>\n",
" <td>2014-09-08 00:26:42</td>\n",
" <td>https://meta.wikimedia.org</td>\n",
" <td>Translations:Tech/News/2014/37/12/ja</td>\n",
" <td>9789878</td>\n",
" <td>208</td>\n",
" <td>Created page with \"Phabricator への移行計画についての[$li...</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>1575 rows × 6 columns</p>\n",
"</div>"
],
"text/plain": [
" timestamp wiki \\\n",
"3281 2016-01-19 11:29:31 https://ja.wikipedia.org \n",
"3282 2016-01-18 13:32:40 https://ja.wikipedia.org \n",
"3283 2016-01-18 13:31:15 https://ja.wikipedia.org \n",
"4781 2016-01-18 12:46:24 https://commons.wikimedia.org \n",
"4782 2016-01-18 12:44:59 https://commons.wikimedia.org \n",
"4783 2016-01-18 12:40:22 https://commons.wikimedia.org \n",
"4784 2016-01-15 10:43:29 https://commons.wikimedia.org \n",
"4785 2016-01-15 10:34:18 https://commons.wikimedia.org \n",
"4786 2016-01-15 10:00:17 https://commons.wikimedia.org \n",
"4787 2016-01-15 09:53:58 https://commons.wikimedia.org \n",
"4788 2016-01-11 03:19:07 https://commons.wikimedia.org \n",
"4789 2016-01-11 03:10:15 https://commons.wikimedia.org \n",
"4790 2016-01-11 03:02:44 https://commons.wikimedia.org \n",
"4791 2016-01-11 02:56:12 https://commons.wikimedia.org \n",
"4792 2016-01-11 02:56:11 https://commons.wikimedia.org \n",
"4793 2016-01-11 02:56:10 https://commons.wikimedia.org \n",
"4794 2016-01-11 02:50:48 https://commons.wikimedia.org \n",
"4795 2016-01-11 02:49:24 https://commons.wikimedia.org \n",
"4796 2016-01-11 02:48:27 https://commons.wikimedia.org \n",
"4797 2016-01-11 02:47:12 https://commons.wikimedia.org \n",
"4798 2016-01-04 09:26:43 https://commons.wikimedia.org \n",
"4281 2016-01-03 08:35:46 https://www.wikidata.org \n",
"4282 2016-01-03 08:34:39 https://www.wikidata.org \n",
"4283 2016-01-03 08:19:54 https://www.wikidata.org \n",
"4284 2016-01-03 08:03:22 https://www.wikidata.org \n",
"4285 2016-01-03 08:03:20 https://www.wikidata.org \n",
"4286 2016-01-03 08:03:18 https://www.wikidata.org \n",
"4287 2016-01-03 08:03:14 https://www.wikidata.org \n",
"4288 2016-01-03 08:03:13 https://www.wikidata.org \n",
"4289 2016-01-03 08:03:11 https://www.wikidata.org \n",
"... ... ... \n",
"5356 2014-09-09 08:50:22 https://commons.wikimedia.org \n",
"5361 2014-09-09 08:50:22 https://commons.wikimedia.org \n",
"5363 2014-09-09 08:50:21 https://commons.wikimedia.org \n",
"5362 2014-09-09 08:50:21 https://commons.wikimedia.org \n",
"5364 2014-09-09 08:50:21 https://commons.wikimedia.org \n",
"5365 2014-09-09 08:50:21 https://commons.wikimedia.org \n",
"5366 2014-09-09 08:50:20 https://commons.wikimedia.org \n",
"5367 2014-09-09 08:50:20 https://commons.wikimedia.org \n",
"5368 2014-09-09 08:50:20 https://commons.wikimedia.org \n",
"5371 2014-09-09 08:50:19 https://commons.wikimedia.org \n",
"5370 2014-09-09 08:50:19 https://commons.wikimedia.org \n",
"5369 2014-09-09 08:50:19 https://commons.wikimedia.org \n",
"5373 2014-09-09 08:50:19 https://commons.wikimedia.org \n",
"5372 2014-09-09 08:50:19 https://commons.wikimedia.org \n",
"326 2014-09-08 11:01:54 https://en.wiktionary.org \n",
"327 2014-09-08 11:01:17 https://en.wiktionary.org \n",
"328 2014-09-08 11:00:33 https://en.wiktionary.org \n",
"329 2014-09-08 10:59:52 https://en.wiktionary.org \n",
"330 2014-09-08 10:59:32 https://en.wiktionary.org \n",
"331 2014-09-08 10:58:48 https://en.wiktionary.org \n",
"332 2014-09-08 10:57:41 https://en.wiktionary.org \n",
"333 2014-09-08 10:57:20 https://en.wiktionary.org \n",
"334 2014-09-08 10:57:03 https://en.wiktionary.org \n",
"335 2014-09-08 10:55:55 https://en.wiktionary.org \n",
"336 2014-09-08 10:53:54 https://en.wiktionary.org \n",
"1945 2014-09-08 10:49:02 https://ja.wiktionary.org \n",
"1946 2014-09-08 10:42:30 https://ja.wiktionary.org \n",
"1947 2014-09-08 10:37:24 https://ja.wiktionary.org \n",
"2988 2014-09-08 00:26:43 https://meta.wikimedia.org \n",
"2989 2014-09-08 00:26:42 https://meta.wikimedia.org \n",
"\n",
" title revid sizediff \\\n",
"3281 百万 (能) 58298236 4298 \n",
"3282 百万 58289104 152 \n",
"3283 百万 (能) 58289080 9510 \n",
"4781 File:Hyakuman Nougaku Zue.jpg 184987919 1 \n",
"4782 File:Hyakuman Nougaku Zue.jpg 184987842 707 \n",
"4783 Category:Noh 184987587 53 \n",
"4784 File:Akutagawa portrait Akutagawa Sakuhinshu 6... 184738253 44 \n",
"4785 Commons:Administrators/Requests 184737854 30 \n",
"4786 User talk:Yasu 184735875 265 \n",
"4787 Commons:Administrators/Requests/Yasu 184735532 2130 \n",
"4788 File:Hilbert.jpg 184368493 122 \n",
"4789 Commons:Deletion requests/File:Mikihisako1956.... 184368112 419 \n",
"4790 Commons:Deletion requests/File:Yin yang laozi.jpg 184367923 734 \n",
"4791 Commons:Deletion requests/2016/01/11 184367674 58 \n",
"4792 User talk:SparkTroy 184367673 362 \n",
"4793 Commons:Deletion requests/Files uploaded by Sp... 184367669 737 \n",
"4794 User talk:ラハール 184367467 0 \n",
"4795 User talk:Gravy inc 184367400 279 \n",
"4796 User talk:Bule archi 184367380 261 \n",
"4797 User talk:Yasu 184367346 603 \n",
"4798 User talk:Yasu 183707464 1204 \n",
"4281 Property:P98 288259878 203 \n",
"4282 Q107569 288259725 -403 \n",
"4283 Q371522 288257840 -329 \n",
"4284 Q371522 288255330 357 \n",
"4285 Q371522 288255325 346 \n",
"4286 Q371522 288255317 343 \n",
"4287 Q371522 288255299 351 \n",
"4288 Q371522 288255295 345 \n",
"4289 Q371522 288255289 352 \n",
"... ... ... ... \n",
"5356 File:B-727 Iberia.jpg 134203163 31 \n",
"5361 File:DC- 10 Iberia.jpg 134203155 31 \n",
"5363 File:A-321.jpg 134203153 31 \n",
"5362 File:Fokker F- 28.jpg 134203154 31 \n",
"5364 File:EC.IQR A340-600 IBE Salvador Dali.jpg 134203152 31 \n",
"5365 File:A-343 \"Plácido Domingo\".jpg 134203151 31 \n",
"5366 File:Dragon Rapide GAEML.jpg 134203150 31 \n",
"5367 File:A319 iberia airlines.jpg 134203149 31 \n",
"5368 File:Dragon Rapide.jpg 134203148 31 \n",
"5371 File:Dragon Rapide G-AEML FIO-Iberia Munz.ona.jpg 134203144 31 \n",
"5370 File:Dragon Rapide Iberia.jpg 134203145 31 \n",
"5369 File:Iberia first A340-300.jpg 134203146 31 \n",
"5373 File:John Wayne Iberia 1963.jpg 134203142 31 \n",
"5372 File:DragonRapideLaMunoza.jpg 134203143 31 \n",
"326 桜餅 28962926 18 \n",
"327 歯垢 28962924 11 \n",
"328 爪の垢を煎じて飲む 28962917 25 \n",
"329 Category:Japanese terms spelled with 煎 read as せん 28962912 28 \n",
"330 煎餅 28962910 24 \n",
"331 焼き餅 28962907 -9 \n",
"332 Category:Japanese terms spelled with kanji rea... 28962902 29 \n",
"333 Category:Japanese terms spelled with 餅 read as もち 28962901 32 \n",
"334 Category:Japanese terms spelled with 鏡 read as... 28962898 35 \n",
"335 鏡餅 28962891 16 \n",
"336 帰りの会 28962887 47 \n",
"1945 寄付 726353 884 \n",
"1946 寄附 726350 548 \n",
"1947 Wiktionary:管理者への立候補 726349 1009 \n",
"2988 Tech/News/2014/37/ja 9789879 144 \n",
"2989 Translations:Tech/News/2014/37/12/ja 9789878 208 \n",
"\n",
" comment \n",
"3281 構成などの加筆です \n",
"3282 \n",
"3283 能の演目の項目として作成します \n",
"4781 /* {{int:filedesc}} */ fix \n",
"4782 User created page with UploadWizard \n",
"4783 [[COM:AES|←]]Created page with '{{Category red... \n",
"4784 fix information \n",
"4785 add [[Commons:Administrators/Requests/Yasu|RfA... \n",
"4786 /* Adminship */ [[Commons:Administrators/Reque... \n",
"4787 Nominating [[User:Yasu|Yasu]] for adminship. [... \n",
"4788 information template \n",
"4789 Deleted: The file page says \"許可なく転載を禁ず\" - \"no ... \n",
"4790 /* File:Yin yang laozi.jpg */ keep \n",
"4791 Listing [[Commons:Deletion requests/Files uplo... \n",
"4792 Some of your [[Commons:Deletion requests/Files... \n",
"4793 Starting mass deletion request using [[COM:VFC... \n",
"4794 Whym moved page [[User talk:ラハール (ursurped)]] ... \n",
"4795 Please send permission for [[:File:Yasuaki Shi... \n",
"4796 Please send permission for [[:File:貴晴.jpg]] to... \n",
"4797 /* Adminship */ re \n",
"4798 /* Adminship */ re \n",
"4281 /* wbeditentity-update:0| */ [[MediaWiki_talk:... \n",
"4282 should probably be the other way around - it's... \n",
"4283 /* wbremoveclaims-remove:1| */ [[Property:P227... \n",
"4284 /* wbcreateclaim-create:1| */ [[Property:P213]... \n",
"4285 /* wbcreateclaim-create:1| */ [[Property:P269]... \n",
"4286 /* wbcreateclaim-create:1| */ [[Property:P906]... \n",
"4287 /* wbcreateclaim-create:1| */ [[Property:P1207... \n",
"4288 /* wbcreateclaim-create:1| */ [[Property:P409]... \n",
"4289 /* wbcreateclaim-create:1| */ [[Property:P691]... \n",
"... ... \n",
"5356 [[Help:Cat-a-lot|Cat-a-lot]]: Adding [[Categor... \n",
"5361 [[Help:Cat-a-lot|Cat-a-lot]]: Adding [[Categor... \n",
"5363 [[Help:Cat-a-lot|Cat-a-lot]]: Adding [[Categor... \n",
"5362 [[Help:Cat-a-lot|Cat-a-lot]]: Adding [[Categor... \n",
"5364 [[Help:Cat-a-lot|Cat-a-lot]]: Adding [[Categor... \n",
"5365 [[Help:Cat-a-lot|Cat-a-lot]]: Adding [[Categor... \n",
"5366 [[Help:Cat-a-lot|Cat-a-lot]]: Adding [[Categor... \n",
"5367 [[Help:Cat-a-lot|Cat-a-lot]]: Adding [[Categor... \n",
"5368 [[Help:Cat-a-lot|Cat-a-lot]]: Adding [[Categor... \n",
"5371 [[Help:Cat-a-lot|Cat-a-lot]]: Adding [[Categor... \n",
"5370 [[Help:Cat-a-lot|Cat-a-lot]]: Adding [[Categor... \n",
"5369 [[Help:Cat-a-lot|Cat-a-lot]]: Adding [[Categor... \n",
"5373 [[Help:Cat-a-lot|Cat-a-lot]]: Adding [[Categor... \n",
"5372 [[Help:Cat-a-lot|Cat-a-lot]]: Adding [[Categor... \n",
"326 /* Japanese */ kanjitab \n",
"327 /* Japanese */ kanjitab \n",
"328 /* Japanese */ kanjitab, defaultsort \n",
"329 Created page with \"{{ja-readingcat|煎|せん}}\" \n",
"330 /* Japanese */ kanjitab \n",
"331 /* Japanese */ kanjitab \n",
"332 Created page with \"{{ja-readascat|かがみ‎}}\" \n",
"333 Created page with \"{{ja-readingcat|餅|もち|kun}}\" \n",
"334 Created page with \"{{ja-readingcat|鏡|かがみ|kun}}\" \n",
"335 /* Japanese */ fix def etc \n",
"336 /* Japanese */ format \n",
"1945 [[よりつき]]、用例追加 \n",
"1946 用例、英語版へのリンク追加 \n",
"1947 /* 管理者の信任投票 */ 5件投票 \n",
"2988 Created page with \"Phabricator への移行計画についての[$li... \n",
"2989 Created page with \"Phabricator への移行計画についての[$li... \n",
"\n",
"[1575 rows x 6 columns]"
]
},
"execution_count": 77,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df[df.delta > pd.Timedelta('-%d days' % days)][['timestamp','wiki','title','revid','sizediff','comment']]"
]
},
{
"cell_type": "code",
"execution_count": 78,
"metadata": {
"collapsed": false,
"scrolled": true
},
"outputs": [
{
"data": {
"text/plain": [
"<matplotlib.axes._subplots.AxesSubplot at 0x7f8d25d8e4e0>"
]
},
"execution_count": 78,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x7f8d355de9b0>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"%matplotlib inline\n",
"ts=df[df.delta > pd.Timedelta('-%d days' % days)].set_index('timestamp').revid.resample('D', how=\"count\")\n",
"ts = ts.reindex(pd.date_range(ts.idxmin(), pd.to_datetime('today'))).fillna(0)\n",
"pd.rolling_mean(ts, 3, freq='2d', center=True).plot(style='.', color='lightgrey', grid=True)\n",
"pd.rolling_mean(ts, 7, freq='3d', center=True).plot()"
]
},
{
"cell_type": "code",
"execution_count": 79,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"1"
]
},
"execution_count": 79,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"1"
]
}
],
"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.4.3"
}
},
"nbformat": 4,
"nbformat_minor": 0
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment