@Kent: thanks for the script. It is kool. Here is 2010 list of Top-20 (as of now):
2010 (1155 posts, 204 posters) ==== Alan Gauld 127 (11.0%) Kent Johnson 108 (9.4%) spir 52 (4.5%) Wayne Watson 46 (4.0%) Luke Paireepinart 32 (2.8%) Shashwat Anand 30 (2.6%) Wayne Werner 29 (2.5%) Steven D'Aprano 28 (2.4%) Stefan Behnel 24 (2.1%) Dave Angel 22 (1.9%) Lie Ryan 19 (1.6%) Hugo Arts 16 (1.4%) Benno Lang 14 (1.2%) David 14 (1.2%) Giorgio 14 (1.2%) Serdar Tumgoren 14 (1.2%) Grigor Kolev 13 (1.1%) Eike Welk 13 (1.1%) Christian Witts 12 (1.0%) invincible patriot 12 (1.0%) No more spamming now :P ~l0nwlf On Fri, Feb 26, 2010 at 9:10 AM, Shashwat Anand <anand.shash...@gmail.com>wrote: > How about Top-40 posters (so that I can make the cut..Yayyy) :P > > > 2009 (7730 posts, 709 posters) > ==== > Alan Gauld 969 (12.5%) > Kent Johnson 804 (10.4%) > Dave Angel 254 (3.3%) > spir 254 (3.3%) > Wayne Watson 222 (2.9%) > bob gailer 191 (2.5%) > Lie Ryan 186 (2.4%) > David 127 (1.6%) > Emile van Sebille 115 (1.5%) > Wayne 112 (1.4%) > Sander Sweers 111 (1.4%) > Serdar Tumgoren 100 (1.3%) > Luke Paireepinart 99 (1.3%) > wesley chun 99 (1.3%) > W W 74 (1.0%) > Marc Tompkins 72 (0.9%) > A.T.Hofkamp 71 (0.9%) > Robert Berman 68 (0.9%) > vince spicer 63 (0.8%) > Emad Nawfal 62 (0.8%) > Andre Engels 61 (0.8%) > Rich Lovely 60 (0.8%) > Christian Witts 57 (0.7%) > Martin Walsh 51 (0.7%) > Eduardo Vieira 47 (0.6%) > Tim Golden 47 (0.6%) > prasad rao 47 (0.6%) > Dinesh B Vadhia 47 (0.6%) > John Fouhy 42 (0.5%) > Norman Khine 41 (0.5%) > Che M 41 (0.5%) > Stephen Nelson-Smith 40 (0.5%) > Mark Tolonen 40 (0.5%) > Chris Fuller 38 (0.5%) > Stefan Behnel 35 (0.5%) > Wayne Werner 34 (0.4%) > Steve Willoughby 32 (0.4%) > Shashwat Anand 32 (0.4%) > Eike Welk 31 (0.4%) > Albert-Jan Roskam 30 (0.4%) > > ~l0nwlf > > > On Fri, Feb 26, 2010 at 9:04 AM, Shashwat Anand > <anand.shash...@gmail.com>wrote: > >> nice. Kudos to all top posters. May be I should search my rank ;) >> >> ~l0nwlf >> >> >> On Fri, Feb 26, 2010 at 8:23 AM, Kent Johnson <ken...@tds.net> wrote: >> >>> It's not really about keeping score :-), but once again I've compiled >>> a list of the top 20 posters to the tutor list for the last year. For >>> 2009, the rankings are >>> >>> 2009 (7730 posts, 709 posters) >>> ==== >>> Alan Gauld 969 (12.5%) >>> Kent Johnson 804 (10.4%) >>> Dave Angel 254 (3.3%) >>> spir 254 (3.3%) >>> Wayne Watson 222 (2.9%) >>> bob gailer 191 (2.5%) >>> Lie Ryan 186 (2.4%) >>> David 127 (1.6%) >>> Emile van Sebille 115 (1.5%) >>> Wayne 112 (1.4%) >>> Sander Sweers 111 (1.4%) >>> Serdar Tumgoren 100 (1.3%) >>> Luke Paireepinart 99 (1.3%) >>> wesley chun 99 (1.3%) >>> W W 74 (1.0%) >>> Marc Tompkins 72 (0.9%) >>> A.T.Hofkamp 71 (0.9%) >>> Robert Berman 68 (0.9%) >>> vince spicer 63 (0.8%) >>> Emad Nawfal 62 (0.8%) >>> >>> Alan, congratulations, you pulled ahead of me for the first time in >>> years! You posted more than in 2008, I posted less. Overall posts are >>> up from last year, which was the slowest year since I started >>> measuring (2003). >>> >>> Thank you to everyone who asks and answers questions here! >>> >>> The rankings are compiled by scraping the monthly author pages from >>> the tutor archives, using Beautiful Soup to extract author names. I >>> consolidate counts for different capitalizations of the same name but >>> not for different spellings. The script is below. >>> >>> Kent >>> >>> ''' Counts all posts to Python-tutor by author''' >>> # -*- coding: latin-1 -*- >>> from datetime import date, timedelta >>> import operator, urllib2 >>> from BeautifulSoup import BeautifulSoup >>> >>> today = date.today() >>> >>> for year in range(2009, 2010): >>> startDate = date(year, 1, 1) >>> endDate = date(year, 12, 31) >>> thirtyOne = timedelta(days=31) >>> counts = {} >>> >>> # Collect all the counts for a year by scraping the monthly author >>> archive pages >>> while startDate < endDate and startDate < today: >>> dateString = startDate.strftime('%Y-%B') >>> >>> url = 'http://mail.python.org/pipermail/tutor/%s/author.html' >>> % dateString >>> data = urllib2.urlopen(url).read() >>> soup = BeautifulSoup(data) >>> >>> li = soup.findAll('li')[2:-2] >>> >>> for l in li: >>> name = l.i.string.strip() >>> counts[name] = counts.get(name, 0) + 1 >>> >>> startDate += thirtyOne >>> >>> # Consolidate names that vary by case under the most popular spelling >>> nameMap = dict() # Map lower-case name to most popular name >>> >>> # Use counts.items() so we can delete from the dict. >>> for name, count in sorted(counts.items(), >>> key=operator.itemgetter(1), reverse=True): >>> lower = name.lower() >>> if lower in nameMap: >>> # Add counts for a name we have seen already and remove the >>> duplicate >>> counts[nameMap[lower]] += count >>> del counts[name] >>> else: >>> nameMap[lower] = name >>> >>> totalPosts = sum(counts.itervalues()) >>> posters = len(counts) >>> >>> print >>> print '%s (%s posts, %s posters)' % (year, totalPosts, posters) >>> print '====' >>> for name, count in sorted(counts.iteritems(), >>> key=operator.itemgetter(1), reverse=True)[:20]: >>> pct = round(100.0*count/totalPosts, 1) >>> print '%s %s (%s%%)' % (name.encode('utf-8', >>> 'xmlcharrefreplace'), count, pct) >>> print >>> _______________________________________________ >>> Tutor maillist - Tutor@python.org >>> To unsubscribe or change subscription options: >>> http://mail.python.org/mailman/listinfo/tutor >>> >> >> >
_______________________________________________ Tutor maillist - Tutor@python.org To unsubscribe or change subscription options: http://mail.python.org/mailman/listinfo/tutor