Everything I know about Python...

Learn to Write Pythonic Code!

Check out the book Writing Idiomatic Python!

Looking for Python Tutoring? Remote and local (NYC) slots still available! Email me at jeff@jeffknupp.com for more info.

Analytics for Django Sites

This is the first in a series of posts I plan to do over the next month about Analytics and Django. In this post I'll walk through how I began to use a number of analytics tools to drive decisions about my site, IllestRhyme.

One of the first things I did when writing IllestRhyme was to sign up for Google Analytics. I had never run a web site before, but I was aware of Google's analytics offering. I admit, for the first few weeks after the site went live I would start at the Google Analytics page and hope to see users in the Live View. I wasn't really using the data for anything. I was using Google Analytics as a virtual scoreboard.

It wasn't until I signed up for Clicky that I started to take analytics seriously. In fact, more specifically, it was when I combined Clicky and django-analytical that I really took my first deep-dive into using analytics data for decision making. Since django-analytical already integrates with a number of analytics services, including Clicky, setup was a breeze. Sure, I could have inserted the raw code into my Django templates, but django-analytical gave me a single point at which to configure all my analytics services.

More importantly, and I can not stress this enough, django-analytical's Clicky integration let me see my users in Clicky via their contrib.auth usernames. This was huge. Now, instead of staring at IP addresses, I could follow users on their visit to the site (using Clicky's awesome Spy feature) in real-time by user name. Believe me, nothing will teach you more about you users than recognizing usernames and their associated behavior patterns. I could tell which users were hitting the site to check quickly for updates, which users hung around for a while, and which users used the site like it was crack. It was this last group that I was initially interested in.

I discovered I had about four or five hardcore users, that were on the site for hours a day. Now, part of that is just personality, but in addition, something on the site clicked for them. Since I want all my users on the site for hours a day, I decided to determine what they were doing in a more rigorous fashion. Naturally, I started coding...

I ended up writing a middleware that tracked a configurable set of users as they browsed the site and stored this information in the database. I then processed this information and organized it into "activities". If a user was going through all the new rhymes submitted and voting on them, this was 'updating'. If the user was submitting a bunch of new rhymes, this was 'bulk submitting', etc. After analyzing this information for my power users and a random sampling of other users, I noticed they were doing one thing more than any other, which I didn't even have a category for: they were following each other.

This was strange to me, as I didn't think of IllestRhyme as a community. To me it was more like a tool to get better at rapping. To some of my users, at least, it was a destination; a way to interact with like-minded people. I quickly realized the value of this and set to work adding tools that would encourage this interaction.

Using django-postman I gave them the ability to send Private Messages. I encouraged commenting by increasing the amount of Rep (virtual points representing a user's 'reputation' on the site, sort of like StackOverflow) adding comments was worth. Voting on other users' verses also received a boost.

That's just one example of the ways I use the analytics data I collect from Clicky, Google Analytics, HubSpot, and the rest to make decisions about my site. In my next Analytics post, I'll take a look at A/B testing in Django. Stay tuned!

Questions or comments on Analytics for Django Sites? Let me know in the comments below. Also, follow me on Twitter to see all of my blog posts and updates.

Posted on by
comments powered by Disqus