In [51]:
from github import Github
import configparser
import json
import datetime
import time
import pandas as pd
from pocket import Pocket, PocketException

In [52]:
config = configparser.ConfigParser()
config.read('secrets.ini')

gh_user = config.get('Github', 'username') 
gh_password =  config.get('Github', 'password')

gh = Github(gh_user,gh_password)

pocket_consumer_key = config.get('Pocket', 'consumer_key') 
pocket_access_token =  config.get('Pocket', 'access_token')

p = Pocket(consumer_key=pocket_consumer_key,
           access_token=pocket_access_token)

In [65]:
with open('cache_timestamps.json', 'r') as infile:
    cache_timestamps = json.load(infile)
pocket_cache_datetime = cache_timestamps['pocket']

# Fetch a list of articles
try:
     articles = p.retrieve(since=pocket_cache_datetime,detailType="complete")
except PocketException as e:
    print(e.message)
    
pocket_data = load_pocket_data()
for article,data in articles["list"].items():
        if article not in pocket_data.keys():
            if "tags" in data.keys():
                tags = list(data["tags"].keys())
            else:
                tags = []
            if data["has_video"] == "2":
                media_type = "video"
            elif data["has_image"] =="2":
                media_type = "image"
            else:
                media_type = "article"            
            try:
                pocket_data[article] = {'timestamp':data['time_added'],
                                       'title':data["resolved_title"],
                                       'tags':tags,
                                       'media_type':media_type,
                                       'excerpt':data["excerpt"],
                                       'word_count':data["word_count"],
                                       'url':data["resolved_url"]}
            except KeyError as e:
                print (str(e) + " not in article data")
                
dump_pocket_data(pocket_data)
cache_timestamps['pocket'] = str(int(time.time()))
with open('cache_timestamps.json', 'w') as outfile:
    json.dump(cache_timestamps, outfile)

In [66]:
pocket_data = load_pocket_data()
pocket_tag_tuples = []
for article,data in pocket_data.items():
    tags = data['tags']
    for tag in tags:
        pocket_tag_tuples.append((tag,datetime.datetime.fromtimestamp(int(data["timestamp"])),data["media_type"]))
df = pd.DataFrame(pocket_tag_tuples, columns=['tag', 'timestamp', 'media_type'])
df["hour"] = df["timestamp"].apply(lambda s : s.strftime("%Y-%m-%dT%H"))
df["date"] = df["timestamp"].apply(lambda s : s.date().strftime("%Y-%m-%d"))
df["month"] = df["timestamp"].apply(lambda s : s.date().strftime("%Y-%m"))
df["year"] = df["timestamp"].apply(lambda s : s.date().strftime("%Y"))
hourly_grouped = df.groupby(["hour","media_type","tag"])
daily_grouped = df.groupby(["date","media_type","tag"])
monthly_grouped = df.groupby(["month","media_type","tag"])
yearly_grouped = df.groupby(["year","media_type","tag"])
hourly_df = pd.DataFrame(hourly_grouped.size().reset_index(name = "Group_Count"))
daily_df = pd.DataFrame(daily_grouped.size().reset_index(name = "Group_Count"))
monthly_df = pd.DataFrame(monthly_grouped.size().reset_index(name = "Group_Count"))
yearly_df = pd.DataFrame(yearly_grouped.size().reset_index(name = "Group_Count"))
hourly_tuples = [tuple(x) for x in hourly_df.values]
daily_tuples = [tuple(x) for x in daily_df.values]
monthly_tuples = [tuple(x) for x in monthly_df.values]
yearly_tuples = [tuple(x) for x in yearly_df.values]
with open('pocket_tag_tuples.json', 'w') as outfile:
    json.dump({'hourly':hourly_tuples,'daily':daily_tuples,'monthly':monthly_tuples,'yearly':yearly_tuples}, outfile)

In [67]:
monthly_tuples


Out[67]:
[('2011-10', 'http://techcrunch.com/2011/10/25/lead-bullets/', 'advice', 1),
 ('2011-11', 'http://batsov.com/articles/2011/11/19/why-emacs/', 'emacs', 1),
 ('2011-11',
  'http://batsov.com/articles/2011/11/19/why-emacs/',
  'programming',
  1),
 ('2011-11',
  'http://blogs.discovermagazine.com/badastronomy/2011/11/28/water-falls-moonbow-shines-aurorae-glow/',
  'cool',
  1),
 ('2011-11',
  'http://blogs.discovermagazine.com/badastronomy/2011/11/28/water-falls-moonbow-shines-aurorae-glow/',
  'picture',
  1),
 ('2011-11',
  'http://gizmodo.com/5859027/this-astounding-orbital-time-lapse-will-blow-your-brains-out-in-space',
  'nasa',
  1),
 ('2011-11',
  'http://gizmodo.com/5859027/this-astounding-orbital-time-lapse-will-blow-your-brains-out-in-space',
  'space',
  1),
 ('2011-11', 'http://i.imgur.com/4RJhd.jpg', 'funny', 1),
 ('2011-11', 'http://i.imgur.com/4RJhd.jpg', 'picture', 1),
 ('2011-11', 'http://i.imgur.com/p5do7.jpg', 'cool', 1),
 ('2011-11', 'http://i.imgur.com/p5do7.jpg', 'picture', 1),
 ('2011-11', 'http://i.imgur.com/p5do7.jpg', 'space', 1),
 ('2011-11', 'http://i.imgur.com/qqcRM.jpg', 'cool', 1),
 ('2011-11', 'http://i.imgur.com/qqcRM.jpg', 'picture', 1),
 ('2011-11', 'http://lifehacker.com/5864004/', 'advice', 1),
 ('2011-11', 'http://lifehacker.com/5864004/', 'cool', 1),
 ('2011-11', 'http://luatut.com/crash_course.html', 'lua', 1),
 ('2011-11', 'http://luatut.com/crash_course.html', 'programming', 1),
 ('2011-11',
  'http://m.motherjones.com/kevin-drum/2010/02/daniel-ellsberg-limitations-knowledge',
  'advice',
  1),
 ('2011-11',
  'http://m.motherjones.com/kevin-drum/2010/02/daniel-ellsberg-limitations-knowledge',
  'cool',
  1),
 ('2011-11',
  'http://m.motherjones.com/kevin-drum/2010/02/daniel-ellsberg-limitations-knowledge',
  'idea',
  1),
 ('2011-11',
  'http://thenextweb.com/apple/2011/11/15/stanford-university-offers-free-course-on-developing-apps-for-iphone-and-ipad/',
  'apps',
  1),
 ('2011-11',
  'http://thenextweb.com/apple/2011/11/15/stanford-university-offers-free-course-on-developing-apps-for-iphone-and-ipad/',
  'ipad',
  1),
 ('2011-11',
  'http://thenextweb.com/apple/2011/11/15/stanford-university-offers-free-course-on-developing-apps-for-iphone-and-ipad/',
  'programming',
  1),
 ('2011-11',
  'http://thenextweb.com/insider/2011/11/23/a-music-geek-spills-his-secrets-for-discovering-new-music/',
  'music',
  1),
 ('2011-11',
  'http://thenextweb.com/insider/2011/11/23/a-music-geek-spills-his-secrets-for-discovering-new-music/',
  'ted',
  1),
 ('2011-11',
  'http://www.elegantcoding.com/2011/11/eleven-equations-true-computer-science.html',
  'equations',
  1),
 ('2011-11',
  'http://www.wired.com/wiredscience/2011/11/equations-for-geeks/?pid=2364&viewall=true',
  'equations',
  1),
 ('2011-12',
  'http://jgneuf.wordpress.com/2011/12/20/all-programmers-are-self-taught/',
  'programming',
  1),
 ('2011-12',
  'http://news.nationalgeographic.com/news/2011/12/pictures/111201-best-space-pictures-year-2011-aurora-eclipse-meteor-sun/',
  'cool',
  1),
 ('2011-12',
  'http://news.nationalgeographic.com/news/2011/12/pictures/111201-best-space-pictures-year-2011-aurora-eclipse-meteor-sun/',
  'picture',
  1),
 ('2011-12',
  'http://news.nationalgeographic.com/news/2011/12/pictures/111201-best-space-pictures-year-2011-aurora-eclipse-meteor-sun/',
  'space',
  1),
 ('2011-12',
  'http://radar.oreilly.com/2011/11/sopa-protectip.html',
  'sopa',
  1),
 ('2011-12',
  'http://web.mit.edu/newsoffice/2011/mitx-faq-1219.html',
  'learning resource',
  1),
 ('2011-12',
  'http://www.flickr.com/photos/caseorganic/4536319810/',
  'cool',
  1),
 ('2011-12',
  'http://www.flickr.com/photos/caseorganic/4536319810/',
  'idea',
  1),
 ('2011-12',
  'http://www.hanselman.com/blog/ScottHanselmans2011UltimateDeveloperAndPowerUsersToolListForWindows.aspx',
  'programming',
  1),
 ('2012-01',
  'http://blog.marksoper.net/Top-10-TED-Talks-of-2011-to-Inspire-Tech-Startups.html',
  'startups',
  1),
 ('2012-01',
  'http://blog.marksoper.net/Top-10-TED-Talks-of-2011-to-Inspire-Tech-Startups.html',
  'tech',
  1),
 ('2012-01',
  'http://blog.marksoper.net/Top-10-TED-Talks-of-2011-to-Inspire-Tech-Startups.html',
  'ted',
  1),
 ('2012-01', 'http://i.imgur.com/Hz296.jpg', 'cool', 1),
 ('2012-01', 'http://i.imgur.com/Hz296.jpg', 'picture', 1),
 ('2012-01',
  'http://www.econbrowser.com/archives/2012/01/iranian_oil_emb.html',
  'hot topic',
  1),
 ('2012-01',
  'http://www.econbrowser.com/archives/2012/01/iranian_oil_emb.html',
  'iran',
  1),
 ('2012-01',
  'http://www.econbrowser.com/archives/2012/01/iranian_oil_emb.html',
  'oil',
  1),
 ('2012-01',
  'http://www.econbrowser.com/archives/2012/01/iranian_oil_emb.html',
  'politics',
  1),
 ('2012-03', 'http://i.imgur.com/3Pad4.jpg', 'cool', 1),
 ('2012-03', 'http://i.imgur.com/3Pad4.jpg', 'diy', 1),
 ('2012-03', 'http://i.imgur.com/3Pad4.jpg', 'idea', 1),
 ('2012-03', 'http://io9.com/5893615/', 'cool', 1),
 ('2012-03', 'http://io9.com/5893615/', 'shuttle launch', 1),
 ('2012-03', 'http://io9.com/5893615/', 'space', 1),
 ('2012-03', 'http://io9.com/5893615/', 'video', 1),
 ('2012-03', 'http://news.ycombinator.com/item?id=3746692', 'programming', 1),
 ('2012-03',
  'http://techcitement.com/culture/the-best-birth-control-in-the-world-is-for-men/#.UO4xgm93i3P',
  'birth control',
  1),
 ('2012-03',
  'http://www.codinghorror.com/blog/2012/03/the-end-of-pagination.html',
  'design',
  1),
 ('2012-03',
  'http://www.iamdann.com/2012/03/21/my-magnet-implant-body-modification',
  'cool',
  1),
 ('2012-03',
  'http://www.iamdann.com/2012/03/21/my-magnet-implant-body-modification',
  'magnet',
  1),
 ('2012-03',
  'http://www.rollingstone.com/politics/news/bank-of-america-too-crooked-to-fail-20120314',
  'bank of america',
  1),
 ('2012-04',
  'http://42floors.com/blog/posts/reclaiming-your-commute',
  'commute',
  1),
 ('2012-04',
  'http://42floors.com/blog/posts/reclaiming-your-commute',
  'idea',
  1),
 ('2012-04',
  'http://designresourcebox.com/all-the-cheat-sheets-an-up-to-date-web-designer-needs-css3-html5-and-jquery/',
  'cheat sheet',
  1),
 ('2012-04',
  'http://designresourcebox.com/all-the-cheat-sheets-an-up-to-date-web-designer-needs-css3-html5-and-jquery/',
  'css3',
  1),
 ('2012-04',
  'http://designresourcebox.com/all-the-cheat-sheets-an-up-to-date-web-designer-needs-css3-html5-and-jquery/',
  'html',
  1),
 ('2012-04',
  'http://designresourcebox.com/all-the-cheat-sheets-an-up-to-date-web-designer-needs-css3-html5-and-jquery/',
  'jquery',
  1),
 ('2012-04',
  'http://designresourcebox.com/all-the-cheat-sheets-an-up-to-date-web-designer-needs-css3-html5-and-jquery/',
  'programming',
  1),
 ('2012-04', 'http://i.imgur.com/IpIZs.jpg', 'advice', 1),
 ('2012-04', 'http://i.imgur.com/IpIZs.jpg', 'idea', 1),
 ('2012-04', 'http://i.imgur.com/IpIZs.jpg', 'well said', 1),
 ('2012-04',
  'http://i.telegraph.co.uk/multimedia/archive/02191/mantis-bike_2191258b.jpg',
  'cool',
  1),
 ('2012-04',
  'http://i.telegraph.co.uk/multimedia/archive/02191/mantis-bike_2191258b.jpg',
  'picture',
  1),
 ('2012-04',
  'http://inventwithpython.com/blog/2012/04/06/stop-using-print-for-debugging-a-5-minute-quickstart-guide-to-pythons-logging-module/',
  'learning resource',
  1),
 ('2012-04',
  'http://inventwithpython.com/blog/2012/04/06/stop-using-print-for-debugging-a-5-minute-quickstart-guide-to-pythons-logging-module/',
  'programming',
  1),
 ('2012-04',
  'http://inventwithpython.com/blog/2012/04/06/stop-using-print-for-debugging-a-5-minute-quickstart-guide-to-pythons-logging-module/',
  'python',
  1),
 ('2012-04', 'http://johncarlosbaez.wordpress.com/2012/04/15/ice/', 'cool', 1),
 ('2012-04', 'http://johncarlosbaez.wordpress.com/2012/04/15/ice/', 'ice', 1),
 ('2012-04', 'http://laughingsquid.com/topbrewer-coffee-faucet/', 'coffee', 1),
 ('2012-04', 'http://laughingsquid.com/topbrewer-coffee-faucet/', 'cool', 1),
 ('2012-04', 'http://laughingsquid.com/topbrewer-coffee-faucet/', 'design', 1),
 ('2012-04', 'http://laughingsquid.com/topbrewer-coffee-faucet/', 'diy', 1),
 ('2012-04', 'http://laughingsquid.com/topbrewer-coffee-faucet/', 'idea', 1),
 ('2012-04', 'http://rdegges.com/why-im-learning-node', 'node', 1),
 ('2012-04', 'http://rdegges.com/why-im-learning-node', 'programming', 1),
 ('2012-04',
  'http://thenextweb.com/lifehacks/2012/04/22/do-it-before-everyone-else-does-create-presentation-slides-with-ipad-drawing-app-paper/',
  'apps',
  1),
 ('2012-04',
  'http://thenextweb.com/lifehacks/2012/04/22/do-it-before-everyone-else-does-create-presentation-slides-with-ipad-drawing-app-paper/',
  'idea',
  1),
 ('2012-04',
  'http://thenextweb.com/lifehacks/2012/04/22/do-it-before-everyone-else-does-create-presentation-slides-with-ipad-drawing-app-paper/',
  'presentation',
  1),
 ('2012-04',
  'http://upload.wikimedia.org/wikipedia/commons/b/b8/Leopard_in_the_Colchester_Zoo.jpg',
  'cool',
  1),
 ('2012-04',
  'http://upload.wikimedia.org/wikipedia/commons/b/b8/Leopard_in_the_Colchester_Zoo.jpg',
  'picture',
  1),
 ('2012-04',
  'http://www.altdevblogaday.com/2011/08/06/demise-low-level-programmer/',
  'idea',
  1),
 ('2012-04',
  'http://www.altdevblogaday.com/2011/08/06/demise-low-level-programmer/',
  'programming',
  1),
 ('2012-04',
  'http://www.chrisstucchio.com/blog/2012/hft_apology.html',
  'high frequency trading',
  1),
 ('2012-04',
  'http://www.chrisstucchio.com/blog/2012/hft_apology.html',
  'stocks, trading',
  1),
 ('2012-04',
  'http://www.chrisstucchio.com/blog/2012/hft_apology2.html',
  'high frequency trading',
  1),
 ('2012-04',
  'http://www.chrisstucchio.com/blog/2012/hft_apology2.html',
  'stocks, trading',
  1),
 ('2012-04', 'http://www.diagram.ly/', 'apps', 1),
 ('2012-04', 'http://www.diagram.ly/', 'cool', 1),
 ('2012-04',
  'http://www.evanmiller.org/how-not-to-sort-by-average-rating.html',
  'programming',
  1),
 ('2012-04',
  'http://www.evanmiller.org/how-not-to-sort-by-average-rating.html',
  'sorting',
  1),
 ('2012-04',
  'http://www.makeuseof.com/tag/simulate-building-launching-model-rocket-openrocket/',
  'design',
  1),
 ('2012-04',
  'http://www.makeuseof.com/tag/simulate-building-launching-model-rocket-openrocket/',
  'diy',
  1),
 ('2012-04',
  'http://www.makeuseof.com/tag/simulate-building-launching-model-rocket-openrocket/',
  'rocket',
  1),
 ('2012-04',
  'http://www.makeuseof.com/tag/simulate-building-launching-model-rocket-openrocket/',
  'simulation',
  1),
 ('2012-04',
  'http://www.reuters.com/article/2012/04/01/traders-bitcoin-idUSL6E8ET5K620120401',
  'bitcoin',
  1),
 ('2012-04',
  'http://www.reuters.com/article/2012/04/01/traders-bitcoin-idUSL6E8ET5K620120401',
  'cool',
  1),
 ('2012-04',
  'http://www.stoimen.com/blog/2012/04/02/computer-algorithms-rabin-karp-string-searching/',
  'algorithms',
  1),
 ('2012-04',
  'http://www.stoimen.com/blog/2012/04/02/computer-algorithms-rabin-karp-string-searching/',
  'hashing',
  1),
 ('2012-04',
  'http://www.stoimen.com/blog/2012/04/02/computer-algorithms-rabin-karp-string-searching/',
  'pattern matching',
  1),
 ('2012-04',
  'http://www.stoimen.com/blog/2012/04/02/computer-algorithms-rabin-karp-string-searching/',
  'programming',
  1),
 ('2012-04',
  'http://www.thumbtack.com/engineering/a-primer-on-python-decorators/',
  'learning resource',
  1),
 ('2012-04',
  'http://www.thumbtack.com/engineering/a-primer-on-python-decorators/',
  'programming',
  1),
 ('2012-04',
  'http://www.thumbtack.com/engineering/a-primer-on-python-decorators/',
  'python',
  1),
 ('2012-04',
  'http://www.wired.com/wiredscience/2012/04/planetary-resources-asteroid-mining/',
  'asteroid mining',
  1),
 ('2012-04',
  'http://www.wired.com/wiredscience/2012/04/planetary-resources-asteroid-mining/',
  'awesome',
  1),
 ('2012-04',
  'http://www.wired.com/wiredscience/2012/04/planetary-resources-asteroid-mining/',
  'cool',
  1),
 ('2012-04',
  'http://www.wired.com/wiredscience/2012/04/what-space-looks-like-to-kids/',
  'cool',
  1),
 ('2012-04',
  'http://www.wired.com/wiredscience/2012/04/what-space-looks-like-to-kids/',
  'kids',
  1),
 ('2012-04',
  'http://www.wired.com/wiredscience/2012/04/what-space-looks-like-to-kids/',
  'picture',
  1),
 ('2012-04',
  'http://www.wired.com/wiredscience/2012/04/what-space-looks-like-to-kids/',
  'space',
  1),
 ('2012-04',
  'http://www2.macleans.ca/2012/04/03/oil-by-any-other-name/',
  'oil',
  1),
 ('2012-04',
  'http://www2.macleans.ca/2012/04/03/oil-by-any-other-name/',
  'tar sands',
  1),
 ('2012-04', 'https://www.firebase.com/', 'apps', 1),
 ('2012-04', 'https://www.firebase.com/', 'backend', 1),
 ('2012-04', 'https://www.firebase.com/', 'programming', 1),
 ('2012-05', 'http://i.imgur.com/CbGMy.jpg', 'cool', 1),
 ('2012-05', 'http://i.imgur.com/CbGMy.jpg', 'diy', 1),
 ('2012-05', 'http://i.imgur.com/PPn6C.jpg', 'awesome', 1),
 ('2012-05', 'http://i.imgur.com/PPn6C.jpg', 'cool', 1),
 ('2012-05', 'http://i.imgur.com/PPn6C.jpg', 'picture', 1),
 ('2012-05',
  'http://makeprojects.com/Project/Compressed-Air-Rocket/585/1',
  'diy',
  1),
 ('2012-05',
  'http://makeprojects.com/Project/Compressed-Air-Rocket/585/1',
  'rocket',
  1),
 ('2012-05',
  'http://satyajit.ranjeev.in/2012/05/17/python-a-few-things-to-remember.html',
  'advice',
  1),
 ('2012-05',
  'http://satyajit.ranjeev.in/2012/05/17/python-a-few-things-to-remember.html',
  'programming',
  1),
 ('2012-05',
  'http://satyajit.ranjeev.in/2012/05/17/python-a-few-things-to-remember.html',
  'python',
  1),
 ('2012-05',
  'http://thenextweb.com/entrepreneur/2012/05/01/build-the-rocket-first-from-0-to-500k-in-1-year-with-no-vc-money/',
  'advice',
  1),
 ('2012-05',
  'http://thenextweb.com/entrepreneur/2012/05/01/build-the-rocket-first-from-0-to-500k-in-1-year-with-no-vc-money/',
  'idea',
  1),
 ('2012-05',
  'http://thenextweb.com/entrepreneur/2012/05/01/build-the-rocket-first-from-0-to-500k-in-1-year-with-no-vc-money/',
  'startups',
  1),
 ('2012-05',
  'http://www.makeuseof.com/tag/broke-oneofakind-internet-mall/',
  'funny',
  1),
 ('2012-05',
  'http://www.randsinrepose.com/archives/2012/05/16/please_learn_to_write.html',
  'programming',
  1),
 ('2012-05',
  'http://www.theglobeandmail.com/globe-investor/personal-finance/rob-carrick/a-29-year-old-on-the-difficulties-of-landing-a-first-job/article2434807/singlepage/#articlecontent',
  'economy',
  1),
 ('2012-05',
  'http://www.theglobeandmail.com/globe-investor/personal-finance/rob-carrick/a-29-year-old-on-the-difficulties-of-landing-a-first-job/article2434807/singlepage/#articlecontent',
  'new grads',
  1),
 ('2012-05',
  'http://www.theglobeandmail.com/globe-investor/personal-finance/rob-carrick/a-29-year-old-on-the-difficulties-of-landing-a-first-job/article2434807/singlepage/#articlecontent',
  'well said',
  1),
 ('2012-10', 'http://gawker.com/5950981/', 'reddit', 1),
 ('2012-10',
  'http://www.edmontonsun.com/2012/10/15/not-a-pipe-dream',
  'cenovus',
  1),
 ('2012-10',
  'http://www.forbes.com/sites/markpmills/2012/10/06/down-the-digital-rabbit-hole-as-we-automate-everything/',
  'algorithms',
  1),
 ('2012-11',
  'http://cacm.acm.org/blogs/blog-cacm/156836-teaching-programming-to-a-highly-motivated-beginner/fulltext',
  'programming',
  1),
 ('2012-11',
  'http://cacm.acm.org/blogs/blog-cacm/156836-teaching-programming-to-a-highly-motivated-beginner/fulltext',
  'teaching',
  1),
 ('2012-11',
  'http://farm9.staticflickr.com/8332/8142570673_dbf8f6d56d_h.jpg',
  'cool',
  1),
 ('2012-11',
  'http://farm9.staticflickr.com/8332/8142570673_dbf8f6d56d_h.jpg',
  'physics',
  1),
 ('2012-11',
  'http://farm9.staticflickr.com/8332/8142570673_dbf8f6d56d_h.jpg',
  'picture',
  1),
 ('2012-11', 'http://i.imgur.com/YmeSA.jpg', 'cool', 1),
 ('2012-11', 'http://i.imgur.com/YmeSA.jpg', 'picture', 1),
 ('2012-11', 'http://i.imgur.com/rCJUS.jpg', 'cartoon', 1),
 ('2012-11', 'http://i.imgur.com/rCJUS.jpg', 'funny', 1),
 ('2012-11', 'http://i.imgur.com/sH0Xw.jpg', 'awesome', 1),
 ('2012-11', 'http://i.imgur.com/sH0Xw.jpg', 'picture', 1),
 ('2012-11',
  'http://www.wired.com/insights/2012/11/lets-talk-your-data-not-big-data/',
  'big data',
  1),
 ('2012-11',
  'http://www.wired.com/wiredscience/2012/10/ff-elon-musk-qa/',
  'mars',
  1),
 ('2012-11',
  'http://www.wired.com/wiredscience/2012/10/ff-elon-musk-qa/',
  'musk',
  1),
 ('2012-11',
  'http://www.wired.com/wiredscience/2012/10/ff-elon-musk-qa/',
  'spacex',
  1),
 ('2012-12', 'http://dickey.xxx/hackathons', 'hackathon', 1),
 ('2012-12',
  'http://gazit.me/2012/12/05/designing-presentations.html',
  'design',
  1),
 ('2012-12',
  'http://gazit.me/2012/12/05/designing-presentations.html',
  'presentation',
  1),
 ('2012-12', 'http://i.imgur.com/dUYms.jpg', 'awesome', 1),
 ('2012-12', 'http://i.imgur.com/dUYms.jpg', 'cool', 1),
 ('2012-12', 'http://i.imgur.com/dUYms.jpg', 'picture', 1),
 ('2012-12', 'http://imgur.com/YMzo9', 'cool', 1),
 ('2012-12', 'http://imgur.com/YMzo9', 'physics', 1),
 ('2012-12', 'http://imgur.com/YMzo9', 'picture', 1),
 ('2012-12',
  'http://m.infoworld.com/d/computer-hardware/making-it-real-3d-printing-208721?page=0,2',
  '3d printing',
  1),
 ('2012-12', 'http://pydanny.com/developer-time.html', 'development', 1),
 ('2012-12', 'http://sett.ociweb.com/sett/settDec2012.html', 'design', 1),
 ('2012-12', 'http://sett.ociweb.com/sett/settDec2012.html', 'mobile', 1),
 ('2012-12', 'http://sett.ociweb.com/sett/settDec2012.html', 'movile', 1),
 ('2012-12',
  'http://simpleprogrammer.com/2012/12/09/the-4-most-important-skills-for-a-software-developer/',
  'advice',
  1),
 ('2012-12',
  'http://simpleprogrammer.com/2012/12/09/the-4-most-important-skills-for-a-software-developer/',
  'programming',
  1),
 ('2012-12',
  'http://simpleprogrammer.com/2012/12/09/the-4-most-important-skills-for-a-software-developer/',
  'skills',
  1),
 ('2012-12',
  'http://www.codeofhonor.com/blog/whose-bug-is-this-anyway',
  'algorithms',
  1),
 ('2012-12',
  'http://www.codeofhonor.com/blog/whose-bug-is-this-anyway',
  'programming',
  1),
 ('2012-12',
  'http://www.codeofhonor.com/blog/whose-bug-is-this-anyway',
  'well said',
  1),
 ('2012-12',
  'http://www.linkedin.com/today/post/article/20121206081322-8353952-the-1-career-mistake-capable-people-make',
  'advice',
  1),
 ('2012-12',
  'http://www.linkedin.com/today/post/article/20121206081322-8353952-the-1-career-mistake-capable-people-make',
  'career',
  1),
 ('2012-12', 'http://www.raspberrypi.org/archives/2768', 'rasberrypi', 1),
 ('2012-12',
  'http://www.zemanta.com/blog/why-founders-shouldnt-be-the-developers/',
  'advice',
  1),
 ('2012-12',
  'http://www.zemanta.com/blog/why-founders-shouldnt-be-the-developers/',
  'startup',
  1),
 ('2012-12',
  'https://www.linkedin.com/today/post/article/20121205140005-20017018-10-things-bosses-wish-they-could-tell-employees',
  'advice',
  1),
 ('2012-12',
  'https://www.linkedin.com/today/post/article/20121205140005-20017018-10-things-bosses-wish-they-could-tell-employees',
  'bosses',
  1),
 ('2012-12',
  'https://www.stat.berkeley.edu/%7Ebreiman/RandomForests/cc_home.htm',
  'stats',
  1),
 ('2016-06',
  'http://cacm.acm.org/magazines/2016/7/204032-why-google-stores-billions-of-lines-of-code-in-a-single-repository/fulltext',
  'design',
  1),
 ('2016-06',
  'http://cacm.acm.org/magazines/2016/7/204032-why-google-stores-billions-of-lines-of-code-in-a-single-repository/fulltext',
  'google',
  1),
 ('2016-06',
  'http://cacm.acm.org/magazines/2016/7/204032-why-google-stores-billions-of-lines-of-code-in-a-single-repository/fulltext',
  'programming',
  1),
 ('2016-06',
  'http://www.askamathematician.com/2016/06/q-what-are-actual-pictures-of-atoms-actually-pictures-of/',
  'photo',
  1),
 ('2016-06',
  'http://www.askamathematician.com/2016/06/q-what-are-actual-pictures-of-atoms-actually-pictures-of/',
  'physics',
  1),
 ('2016-06',
  'http://www.askamathematician.com/2016/06/q-what-are-actual-pictures-of-atoms-actually-pictures-of/',
  'quantum',
  1),
 ('2016-06',
  'http://www.askamathematician.com/2016/06/q-what-are-actual-pictures-of-atoms-actually-pictures-of/',
  'science',
  1),
 ('2016-06',
  'http://www.bloomberg.com/view/articles/2016-06-17/blockchain-company-s-smart-contracts-were-dumb',
  'bitcoin',
  1),
 ('2016-06',
  'http://www.bloomberg.com/view/articles/2016-06-17/blockchain-company-s-smart-contracts-were-dumb',
  'blockchain',
  1),
 ('2016-06',
  'http://www.bloomberg.com/view/articles/2016-06-17/blockchain-company-s-smart-contracts-were-dumb',
  'ethereum',
  1),
 ('2016-06',
  'http://www.bloomberg.com/view/articles/2016-06-17/blockchain-company-s-smart-contracts-were-dumb',
  'futuorology',
  1),
 ('2016-06',
  'http://www.bloomberg.com/view/articles/2016-06-17/blockchain-company-s-smart-contracts-were-dumb',
  'hack',
  1),
 ('2016-06',
  'http://www.decibelsanddecimals.com/dbdblog/2016/6/13/spotify-related-artists',
  'data models',
  1),
 ('2016-06',
  'http://www.decibelsanddecimals.com/dbdblog/2016/6/13/spotify-related-artists',
  'datascience',
  1),
 ('2016-06',
  'http://www.decibelsanddecimals.com/dbdblog/2016/6/13/spotify-related-artists',
  'machine learning',
  1),
 ('2016-06',
  'http://www.decibelsanddecimals.com/dbdblog/2016/6/13/spotify-related-artists',
  'music',
  1),
 ('2016-06',
  'http://www.decibelsanddecimals.com/dbdblog/2016/6/13/spotify-related-artists',
  'project idea',
  1),
 ('2016-07',
  'http://blog.kaggle.com/2016/07/21/approaching-almost-any-machine-learning-problem-abhishek-thakur/',
  'data science',
  1),
 ('2016-07',
  'http://blog.kaggle.com/2016/07/21/approaching-almost-any-machine-learning-problem-abhishek-thakur/',
  'kaggle',
  1),
 ('2016-07',
  'http://blog.kaggle.com/2016/07/21/approaching-almost-any-machine-learning-problem-abhishek-thakur/',
  'machine learning',
  1),
 ('2016-07',
  'http://blog.kaggle.com/2016/07/21/approaching-almost-any-machine-learning-problem-abhishek-thakur/',
  'python',
  1),
 ('2016-07',
  'http://blog.scottlogic.com/2014/09/19/interactive.html',
  'd3',
  1),
 ('2016-07',
  'http://blog.scottlogic.com/2014/09/19/interactive.html',
  'dataviz',
  1),
 ('2016-07',
  'http://blog.scottlogic.com/2014/09/19/interactive.html',
  'learning resource',
  1),
 ('2016-07', 'http://platejoy.com/try', 'food', 1),
 ('2016-07', 'http://platejoy.com/try', 'health', 1),
 ('2016-07', 'http://platejoy.com/try', 'product', 1),
 ('2016-07', 'http://platejoy.com/try', 'recipes', 1),
 ('2016-07', 'http://platejoy.com/try', 'tech', 1),
 ('2016-07',
  'http://sigtbd.csail.mit.edu/pubs/veryconference-paper10.pdf',
  'funny',
  1),
 ('2016-07',
  'http://sigtbd.csail.mit.edu/pubs/veryconference-paper10.pdf',
  'geek',
  1),
 ('2016-07',
  'http://sigtbd.csail.mit.edu/pubs/veryconference-paper10.pdf',
  'satire',
  1),
 ('2016-07', 'http://www.d3noob.org/2014/02/styles-in-d3js.html', 'd3', 1),
 ('2016-07',
  'http://www.d3noob.org/2014/02/styles-in-d3js.html',
  'learning resource',
  1),
 ('2016-07', 'http://www.scipy-lectures.org/', 'data science', 1),
 ('2016-07', 'http://www.scipy-lectures.org/', 'learning resource', 1),
 ('2016-07', 'http://www.scipy-lectures.org/', 'machine learning', 1),
 ('2016-07', 'http://www.scipy-lectures.org/', 'programming', 1),
 ('2016-07', 'http://www.scipy-lectures.org/', 'python', 1),
 ('2016-07', 'http://www.scipy-lectures.org/', 'scipy', 1),
 ('2016-07',
  'http://www.theatlantic.com/magazine/archive/2016/07/when-the-body-attacks-the-mind/485564/',
  'brain',
  1),
 ('2016-07',
  'http://www.theatlantic.com/magazine/archive/2016/07/when-the-body-attacks-the-mind/485564/',
  'health',
  1),
 ('2016-07',
  'http://www.theatlantic.com/magazine/archive/2016/07/when-the-body-attacks-the-mind/485564/',
  'mental health',
  1),
 ('2016-07',
  'http://www.theatlantic.com/magazine/archive/2016/07/when-the-body-attacks-the-mind/485564/',
  'psychology',
  1),
 ('2016-07',
  'http://www.theatlantic.com/magazine/archive/2016/07/when-the-body-attacks-the-mind/485564/',
  'science',
  1),
 ('2016-07',
  'http://www.wsj.com/articles/driverless-cars-threaten-to-crash-insurers-earnings-1469542958',
  'artificial intelligence',
  1),
 ('2016-07',
  'http://www.wsj.com/articles/driverless-cars-threaten-to-crash-insurers-earnings-1469542958',
  'driverless cars',
  1),
 ('2016-07',
  'http://www.wsj.com/articles/driverless-cars-threaten-to-crash-insurers-earnings-1469542958',
  'economics',
  1),
 ('2016-07',
  'http://www.wsj.com/articles/driverless-cars-threaten-to-crash-insurers-earnings-1469542958',
  'futurology',
  1),
 ('2016-07',
  'http://www.wsj.com/articles/driverless-cars-threaten-to-crash-insurers-earnings-1469542958',
  'tech',
  1),
 ('2016-07', 'https://github.com/datasciencemasters/go/', 'data science', 1),
 ('2016-07',
  'https://github.com/datasciencemasters/go/',
  'learning resource',
  1),
 ('2016-07',
  'https://github.com/datasciencemasters/go/',
  'machine learning',
  1),
 ('2016-07', 'https://github.com/datasciencemasters/go/', 'python', 1),
 ('2016-07',
  'https://medium.com/@yegg/mental-models-i-find-repeatedly-useful-936f1cc405d#.iitjh96oc',
  'brain',
  1),
 ('2016-07',
  'https://medium.com/@yegg/mental-models-i-find-repeatedly-useful-936f1cc405d#.iitjh96oc',
  'mental models',
  1),
 ('2016-07',
  'https://medium.com/@yegg/mental-models-i-find-repeatedly-useful-936f1cc405d#.iitjh96oc',
  'productivity',
  1),
 ('2016-07',
  'https://medium.com/@yegg/mental-models-i-find-repeatedly-useful-936f1cc405d#.iitjh96oc',
  'psychology',
  1),
 ('2016-07', 'https://myactivity.google.com/', 'datasource', 1),
 ('2016-07', 'https://myactivity.google.com/', 'google', 1),
 ('2016-07', 'https://myactivity.google.com/', 'product', 1),
 ('2016-07',
  'https://stackoverflow.com/questions/21043260/3-dimension-x-y-and-z-graph-using-d3-js',
  'd3',
  1),
 ('2016-07',
  'https://stackoverflow.com/questions/21043260/3-dimension-x-y-and-z-graph-using-d3-js',
  'dataviz',
  1),
 ('2016-07',
  'https://stackoverflow.com/questions/21043260/3-dimension-x-y-and-z-graph-using-d3-js',
  'design',
  1),
 ('2016-07',
  'https://stackoverflow.com/questions/21043260/3-dimension-x-y-and-z-graph-using-d3-js',
  'learning resource',
  1),
 ('2016-07',
  'https://www.quandl.com/blog/alternative-data-satellite-companies',
  'companies',
  1),
 ('2016-07',
  'https://www.quandl.com/blog/alternative-data-satellite-companies',
  'datascience',
  1),
 ('2016-07',
  'https://www.quandl.com/blog/alternative-data-satellite-companies',
  'datasource',
  1),
 ('2016-07',
  'https://www.quandl.com/blog/alternative-data-satellite-companies',
  'economics',
  1),
 ('2016-07',
  'https://www.quandl.com/blog/alternative-data-satellite-companies',
  'space',
  1),
 ('2016-07',
  'https://www.reddit.com/r/AskReddit/comments/4uve7j/what_insider_secrets_does_the_company_you_work/',
  'business',
  1),
 ('2016-07',
  'https://www.reddit.com/r/AskReddit/comments/4uve7j/what_insider_secrets_does_the_company_you_work/',
  'corporations',
  1),
 ('2016-07',
  'https://www.reddit.com/r/AskReddit/comments/4uve7j/what_insider_secrets_does_the_company_you_work/',
  'reddit',
  1),
 ('2016-07',
  'https://www.reddit.com/r/bodyweightfitness/wiki/kb/recommended_routine',
  'exercise',
  1),
 ('2016-07',
  'https://www.reddit.com/r/bodyweightfitness/wiki/kb/recommended_routine',
  'fitness',
  1),
 ('2016-07',
  'https://www.reddit.com/r/bodyweightfitness/wiki/kb/recommended_routine',
  'health',
  1),
 ('2016-07',
  'https://www.reddit.com/r/bodyweightfitness/wiki/kb/recommended_routine',
  'workout',
  1),
 ('2016-07',
  'https://www.reddit.com/r/space/comments/4up9cw/saturns_hexagon_in_motion/d5rrg9r',
  'photo',
  1),
 ('2016-07',
  'https://www.reddit.com/r/space/comments/4up9cw/saturns_hexagon_in_motion/d5rrg9r',
  'planetary science',
  1),
 ('2016-07',
  'https://www.reddit.com/r/space/comments/4up9cw/saturns_hexagon_in_motion/d5rrg9r',
  'space',
  1),
 ('2016-08',
  'http://chrismm.com/blog/how-to-use-your-full-brain-when-writing-code/',
  'brain',
  1),
 ('2016-08',
  'http://chrismm.com/blog/how-to-use-your-full-brain-when-writing-code/',
  'javascript',
  1),
 ('2016-08',
  'http://chrismm.com/blog/how-to-use-your-full-brain-when-writing-code/',
  'learning',
  1),
 ('2016-08',
  'http://chrismm.com/blog/how-to-use-your-full-brain-when-writing-code/',
  'productivity',
  1),
 ('2016-08',
  'http://chrismm.com/blog/how-to-use-your-full-brain-when-writing-code/',
  'programming',
  1),
 ('2016-08',
  'http://chrismm.com/blog/how-to-use-your-full-brain-when-writing-code/',
  'psychology',
  1),
 ('2016-08',
  'http://chrismm.com/blog/how-to-use-your-full-brain-when-writing-code/',
  'python',
  1),
 ('2016-08',
  'https://www.reddit.com/r/dataisbeautiful/comments/4vnbqg/cost_obsessions_around_the_world_according_to/',
  'datascience',
  1),
 ('2016-08',
  'https://www.reddit.com/r/dataisbeautiful/comments/4vnbqg/cost_obsessions_around_the_world_according_to/',
  'dataviz',
  1),
 ('2016-08',
  'https://www.reddit.com/r/dataisbeautiful/comments/4vnbqg/cost_obsessions_around_the_world_according_to/',
  'project-idea',
  1),
 ('2016-08',
  'https://www.reddit.com/r/dataisbeautiful/comments/4vnbqg/cost_obsessions_around_the_world_according_to/',
  'reddit',
  1),
 ('2016-08',
  'https://www.washingtonpost.com/sports/olympics/olympic-executives-cash-in-on-a-movement-that-keeps-athletes-poor/2016/07/30/ed18c206-5346-11e6-88eb-7dda4e2f2aec_story.html',
  'economics',
  1),
 ('2016-08',
  'https://www.washingtonpost.com/sports/olympics/olympic-executives-cash-in-on-a-movement-that-keeps-athletes-poor/2016/07/30/ed18c206-5346-11e6-88eb-7dda4e2f2aec_story.html',
  'inequality',
  1),
 ('2016-08',
  'https://www.washingtonpost.com/sports/olympics/olympic-executives-cash-in-on-a-movement-that-keeps-athletes-poor/2016/07/30/ed18c206-5346-11e6-88eb-7dda4e2f2aec_story.html',
  'olympics',
  1),
 ('2016-08',
  'https://www.washingtonpost.com/sports/olympics/olympic-executives-cash-in-on-a-movement-that-keeps-athletes-poor/2016/07/30/ed18c206-5346-11e6-88eb-7dda4e2f2aec_story.html',
  'politics',
  1),
 ('2016-08',
  'https://www.washingtonpost.com/sports/olympics/olympic-executives-cash-in-on-a-movement-that-keeps-athletes-poor/2016/07/30/ed18c206-5346-11e6-88eb-7dda4e2f2aec_story.html',
  'sports',
  1)]

In [29]:
def load_commit_data():
    with open("commit_data.json",'r') as infile:
        commit_data = json.load(infile)
    return commit_data

def dump_commit_data(data):
    with open('commit_data.json', 'w') as outfile:
        json.dump(data, outfile)

def load_pocket_data():
    with open("pocket_data.json",'r') as infile:
        commit_data = json.load(infile)
    return commit_data

def dump_pocket_data(data):
    with open('pocket_data.json', 'w') as outfile:
        json.dump(data, outfile)

In [56]:
def parse_commit_memo(memo):
    tags = [tag.replace('--',"") for tag in memo.split() if tag.startswith('--')]
    for tag in tags:
        memo = memo.replace(tag,"")
    memo = memo.replace('--',"").strip()
    return tags,memo

In [58]:
with open('cache_timestamps.json', 'r') as infile:
    cache_timestamps = json.load(infile)
gh_cache_datetime = datetime.datetime.strptime(cache_timestamps['github'],"%Y-%m-%dT%H:%M:%SZ")

profile = gh.get_user()
repos = profile.get_repos()
commit_data = load_commit_data()
for repo in repos:
    if repo.pushed_at >= gh_cache_datetime:
        commits = repo.get_commits(since = gh_cache_datetime)
        for commit in commits:
            if commit.sha not in commit_data.keys():
                message = commit.raw_data["commit"]["message"]
                tags,memo = parse_commit_memo(message)
                commit_data[commit.sha] = {'timestamp':commit.raw_data['commit']['author']['date'],
                                   'repo':repo.name,
                                   'tags':tags,
                                   'memo':memo,
                                   'stats':commit.raw_data['stats']}
dump_commit_data(commit_data)
cache_timestamps['github'] = datetime.datetime.utcnow().strftime("%Y-%m-%dT%H:%M:%SZ")
with open('cache_timestamps.json', 'w') as outfile:
    json.dump(cache_timestamps, outfile)

In [59]:
commit_data = load_commit_data()
commit_tag_tuples = []
for commit,data in commit_data.items():
    tags = data['tags']
    for tag in tags:
        commit_tag_tuples.append((tag,datetime.datetime.strptime(data["timestamp"],"%Y-%m-%dT%H:%M:%SZ"),data["repo"]))
df = pd.DataFrame(commit_tag_tuples, columns=['tag', 'timestamp', 'repo'])
df["hour"] = df["timestamp"].apply(lambda s : s.strftime("%Y-%m-%dT%H"))
df["date"] = df["timestamp"].apply(lambda s : s.date().strftime("%Y-%m-%d"))
df["month"] = df["timestamp"].apply(lambda s : s.date().strftime("%Y-%m"))
df["year"] = df["timestamp"].apply(lambda s : s.date().strftime("%Y"))
hourly_grouped = df.groupby(["hour","repo","tag"])
daily_grouped = df.groupby(["date","repo","tag"])
monthly_grouped = df.groupby(["month","repo","tag"])
yearly_grouped = df.groupby(["year","repo","tag"])
hourly_df = pd.DataFrame(hourly_grouped.size().reset_index(name = "Group_Count"))
daily_df = pd.DataFrame(daily_grouped.size().reset_index(name = "Group_Count"))
monthly_df = pd.DataFrame(monthly_grouped.size().reset_index(name = "Group_Count"))
yearly_df = pd.DataFrame(yearly_grouped.size().reset_index(name = "Group_Count"))
hourly_tuples = [tuple(x) for x in hourly_df.values]
daily_tuples = [tuple(x) for x in daily_df.values]
monthly_tuples = [tuple(x) for x in monthly_df.values]
yearly_tuples = [tuple(x) for x in yearly_df.values]
with open('commit_tag_tuples.json', 'w') as outfile:
    json.dump({'hourly':hourly_tuples,'daily':daily_tuples,'monthly':monthly_tuples,'yearly':yearly_tuples}, outfile)

In [60]:
hourly_tuples


Out[60]:
[('2016-07-23T02', 'cole-maclean.github.io', 'jupyter', 1),
 ('2016-07-23T02', 'cole-maclean.github.io', 'python', 1),
 ('2016-07-23T03', 'cole-maclean.github.io', 'API', 1),
 ('2016-07-23T03', 'cole-maclean.github.io', 'json', 1),
 ('2016-07-23T03', 'cole-maclean.github.io', 'jupyter', 2),
 ('2016-07-23T03', 'cole-maclean.github.io', 'python', 2),
 ('2016-07-23T04', 'cole-maclean.github.io', 'pandas', 2),
 ('2016-07-23T04', 'cole-maclean.github.io', 'python', 1),
 ('2016-07-23T20', 'cole-maclean.github.io', 'd3.js', 1),
 ('2016-07-23T20', 'cole-maclean.github.io', 'dataviz', 1),
 ('2016-07-25T03', 'cole-maclean.github.io', 'd3.js', 1),
 ('2016-07-25T20', 'cole-maclean.github.io', 'd3.js', 2),
 ('2016-07-25T20', 'cole-maclean.github.io', 'dataviz', 1),
 ('2016-07-25T21', 'cole-maclean.github.io', 'd3.js', 2),
 ('2016-07-25T22', 'cole-maclean.github.io', 'd3.js', 1),
 ('2016-07-26T05', 'cole-maclean.github.io', 'd3.js', 1),
 ('2016-07-26T05', 'cole-maclean.github.io', 'dataviz', 1),
 ('2016-07-26T05', 'cole-maclean.github.io', 'debugging', 1),
 ('2016-07-26T05', 'cole-maclean.github.io', 'python', 2),
 ('2016-07-26T06', 'cole-maclean.github.io', 'd3.js', 1),
 ('2016-07-26T06', 'cole-maclean.github.io', 'dataviz', 1),
 ('2016-07-27T03', 'cole-maclean.github.io', 'd3.js', 1),
 ('2016-07-27T03', 'cole-maclean.github.io', 'dataviz.', 1),
 ('2016-07-27T03', 'cole-maclean.github.io', 'html', 1),
 ('2016-07-27T03', 'cole-maclean.github.io', 'js', 1),
 ('2016-07-27T21', 'cole-maclean.github.io', 'svg', 1),
 ('2016-07-27T22', 'cole-maclean.github.io', 'svg', 1),
 ('2016-08-02T19', 'cole-maclean.github.io', 'd3.js', 2),
 ('2016-08-02T19', 'cole-maclean.github.io', 'dataviz', 2),
 ('2016-08-02T19', 'cole-maclean.github.io', 'design', 1),
 ('2016-08-02T22', 'cole-maclean.github.io', 'd3.js', 1),
 ('2016-08-02T22', 'cole-maclean.github.io', 'dataviz', 1),
 ('2016-08-02T22', 'cole-maclean.github.io', 'debugging', 1),
 ('2016-08-02T22', 'cole-maclean.github.io', 'html', 1),
 ('2016-08-02T23', 'cole-maclean.github.io', 'css', 1),
 ('2016-08-02T23', 'cole-maclean.github.io', 'd3.js', 1),
 ('2016-08-02T23', 'cole-maclean.github.io', 'dataviz', 1),
 ('2016-08-02T23', 'cole-maclean.github.io', 'debugging', 1),
 ('2016-08-02T23', 'cole-maclean.github.io', 'documentation', 1),
 ('2016-08-02T23', 'cole-maclean.github.io', 'html', 1),
 ('2016-08-02T23', 'cole-maclean.github.io', 'python', 1),
 ('2016-08-03T21', 'cole-maclean.github.io', 'API', 1),
 ('2016-08-03T21', 'cole-maclean.github.io', 'data-scrapping', 1),
 ('2016-08-03T21', 'cole-maclean.github.io', 'json', 1),
 ('2016-08-03T21', 'cole-maclean.github.io', 'jupyter', 1),
 ('2016-08-03T21', 'cole-maclean.github.io', 'python', 1)]