In [52]:
import json
from PIL import Image
import os
import numpy as np
%matplotlib inline
import matplotlib.pyplot as plt
import scipy
import scipy.ndimage
import math
import cv2
from spotlight import spotlight
sz = 15

BS = 200 # bubble size (radius in pixels) used for the zoomlens task
In [2]:
def image_histogram_equalization(image, number_bins=256):
    # from http://www.janeriksolem.net/2009/06/histogram-equalization-with-python-and.html

    # get image histogram
    image_histogram, bins = np.histogram(image.flatten(), number_bins, normed=True)
    cdf = image_histogram.cumsum() # cumulative distribution function
    cdf = 255 * cdf / cdf[-1] # normalize

    # use linear interpolation of cdf to find new pixel values
    image_equalized = np.interp(image.flatten(), bins[:-1], cdf)

    return image_equalized.reshape(image.shape)

def transparent_cmap(cmap, N=255):
    "Copy colormap and set alpha values"

    mycmap = cmap
    mycmap._init()
    mycmap._lut[:,-1] = np.linspace(0, 0.8, N+4)
    return mycmap

def process_timestamp(curtime): # parse ISO 0861 date string
    #curtime = '2017-03-13T15:23:44.175Z'
    res = curtime.split('T')
    date,timestamp = res[0],res[1]
    timestamp = timestamp.replace('Z','')
    #print(timestamp)
    res = timestamp.split(':')
    return float(res[1])*60+float(res[2]) # minute * 60 + seconds elapsed (for easy computation purposes)
In [3]:
filename = 'out_sept26.json'
with open(filename) as data_file:    
    data = json.load(data_file)

#data = []
#with open(filename) as f:
#    for line in f:
#        data.append(json.loads(line))
In [58]:
data['A116DNB5LSACL9_3H781YYV6TRNQRMDDHXM3LXO0HUTE9'][3]
Out[58]:
{'events': [{'text': '',
   'time': '2017-03-13T15:23:43.556Z',
   'x': 0.9932746405354821,
   'y': 0.23227089479313243},
  {'text': '',
   'time': '2017-03-13T15:23:43.614Z',
   'x': 0.9932746405354821,
   'y': 0.23227089479313243},
  {'text': '',
   'time': '2017-03-13T15:23:43.615Z',
   'x': 0.8820585610932852,
   'y': 0.2214675973608937},
  {'text': '',
   'time': '2017-03-13T15:23:43.622Z',
   'x': 0.8552133005382722,
   'y': 0.21606594864477435},
  {'text': '',
   'time': '2017-03-13T15:23:43.625Z',
   'x': 0.8552133005382722,
   'y': 0.21606594864477435},
  {'text': '',
   'time': '2017-03-13T15:23:43.630Z',
   'x': 0.8398731516496933,
   'y': 0.21066429992865499},
  {'text': '',
   'time': '2017-03-13T15:23:43.637Z',
   'x': 0.8398731516496933,
   'y': 0.21066429992865499},
  {'text': '',
   'time': '2017-03-13T15:23:43.638Z',
   'x': 0.8130278910946803,
   'y': 0.20256182685447593},
  {'text': '',
   'time': '2017-03-13T15:23:43.644Z',
   'x': 0.7861826305396673,
   'y': 0.1944593537802969},
  {'text': '',
   'time': '2017-03-13T15:23:43.646Z',
   'x': 0.7861826305396673,
   'y': 0.1944593537802969},
  {'text': '',
   'time': '2017-03-13T15:23:43.654Z',
   'x': 0.7555023327625096,
   'y': 0.18905770506417754},
  {'text': '',
   'time': '2017-03-13T15:23:43.657Z',
   'x': 0.7555023327625096,
   'y': 0.18905770506417754},
  {'text': '',
   'time': '2017-03-13T15:23:43.662Z',
   'x': 0.7248220349853518,
   'y': 0.18095523198999852},
  {'text': '',
   'time': '2017-03-13T15:23:43.664Z',
   'x': 0.7248220349853518,
   'y': 0.18095523198999852},
  {'text': '',
   'time': '2017-03-13T15:23:43.670Z',
   'x': 0.7018118116524834,
   'y': 0.17285275891581947},
  {'text': '',
   'time': '2017-03-13T15:23:43.673Z',
   'x': 0.7018118116524834,
   'y': 0.17285275891581947},
  {'text': '',
   'time': '2017-03-13T15:23:43.676Z',
   'x': 0.6788015883196151,
   'y': 0.1674511101997001},
  {'text': '',
   'time': '2017-03-13T15:23:43.679Z',
   'x': 0.6788015883196151,
   'y': 0.1674511101997001},
  {'text': '',
   'time': '2017-03-13T15:23:43.686Z',
   'x': 0.667296476653181,
   'y': 0.16475028584164045},
  {'text': '',
   'time': '2017-03-13T15:23:43.689Z',
   'x': 0.667296476653181,
   'y': 0.16475028584164045},
  {'text': '',
   'time': '2017-03-13T15:23:43.694Z',
   'x': 0.6366161788760233,
   'y': 0.15934863712552108},
  {'text': '',
   'time': '2017-03-13T15:23:43.697Z',
   'x': 0.6366161788760233,
   'y': 0.15934863712552108},
  {'text': '',
   'time': '2017-03-13T15:23:43.704Z',
   'x': 0.6251110672095891,
   'y': 0.15934863712552108},
  {'text': '',
   'time': '2017-03-13T15:23:43.706Z',
   'x': 0.6251110672095891,
   'y': 0.15934863712552108},
  {'text': '',
   'time': '2017-03-13T15:23:43.710Z',
   'x': 0.6136059555431549,
   'y': 0.15934863712552108},
  {'text': '',
   'time': '2017-03-13T15:23:43.713Z',
   'x': 0.6136059555431549,
   'y': 0.15934863712552108},
  {'text': '',
   'time': '2017-03-13T15:23:43.721Z',
   'x': 0.5982658066545761,
   'y': 0.1566478127674614},
  {'text': '',
   'time': '2017-03-13T15:23:43.724Z',
   'x': 0.5982658066545761,
   'y': 0.1566478127674614},
  {'text': '',
   'time': '2017-03-13T15:23:43.727Z',
   'x': 0.5867606949881419,
   'y': 0.1566478127674614},
  {'text': '',
   'time': '2017-03-13T15:23:43.737Z',
   'x': 0.5752555833217078,
   'y': 0.1539469884094017},
  {'text': '',
   'time': '2017-03-13T15:23:43.740Z',
   'x': 0.5752555833217078,
   'y': 0.1539469884094017},
  {'text': '',
   'time': '2017-03-13T15:23:43.742Z',
   'x': 0.5675855088774183,
   'y': 0.1539469884094017},
  {'text': '',
   'time': '2017-03-13T15:23:43.745Z',
   'x': 0.5675855088774183,
   'y': 0.1539469884094017},
  {'text': '',
   'time': '2017-03-13T15:23:43.753Z',
   'x': 0.5599154344331289,
   'y': 0.1539469884094017},
  {'text': '',
   'time': '2017-03-13T15:23:43.755Z',
   'x': 0.5599154344331289,
   'y': 0.1539469884094017},
  {'text': '',
   'time': '2017-03-13T15:23:43.758Z',
   'x': 0.5560803972109841,
   'y': 0.14854533969328235},
  {'text': '',
   'time': '2017-03-13T15:23:43.760Z',
   'x': 0.5560803972109841,
   'y': 0.14854533969328235},
  {'text': '',
   'time': '2017-03-13T15:23:43.770Z',
   'x': 0.54457528554455,
   'y': 0.14854533969328235},
  {'text': '',
   'time': '2017-03-13T15:23:43.772Z',
   'x': 0.54457528554455,
   'y': 0.14854533969328235},
  {'text': '',
   'time': '2017-03-13T15:23:43.774Z',
   'x': 0.5407402483224053,
   'y': 0.14854533969328235},
  {'text': '',
   'time': '2017-03-13T15:23:43.786Z',
   'x': 0.5330701738781158,
   'y': 0.14854533969328235},
  {'text': '',
   'time': '2017-03-13T15:23:43.789Z',
   'x': 0.5330701738781158,
   'y': 0.14854533969328235},
  {'text': '',
   'time': '2017-03-13T15:23:43.790Z',
   'x': 0.5254000994338264,
   'y': 0.1458445153352227},
  {'text': '',
   'time': '2017-03-13T15:23:43.802Z',
   'x': 0.5215650622116816,
   'y': 0.1458445153352227},
  {'text': '',
   'time': '2017-03-13T15:23:43.804Z',
   'x': 0.5215650622116816,
   'y': 0.1458445153352227},
  {'text': '',
   'time': '2017-03-13T15:23:43.806Z',
   'x': 0.5138949877673923,
   'y': 0.1458445153352227},
  {'text': '',
   'time': '2017-03-13T15:23:43.818Z',
   'x': 0.5100599505452476,
   'y': 0.1458445153352227},
  {'text': '',
   'time': '2017-03-13T15:23:43.822Z',
   'x': 0.5100599505452476,
   'y': 0.1458445153352227},
  {'text': '',
   'time': '2017-03-13T15:23:43.823Z',
   'x': 0.5062249133231028,
   'y': 0.143143690977163},
  {'text': '',
   'time': '2017-03-13T15:23:43.830Z',
   'x': 0.4947198016566687,
   'y': 0.143143690977163},
  {'text': '',
   'time': '2017-03-13T15:23:43.836Z',
   'x': 0.4947198016566687,
   'y': 0.143143690977163},
  {'text': '',
   'time': '2017-03-13T15:23:43.838Z',
   'x': 0.49088476443452395,
   'y': 0.143143690977163},
  {'text': '',
   'time': '2017-03-13T15:23:43.846Z',
   'x': 0.4870497272123792,
   'y': 0.143143690977163},
  {'text': '',
   'time': '2017-03-13T15:23:43.852Z',
   'x': 0.4870497272123792,
   'y': 0.143143690977163},
  {'text': '',
   'time': '2017-03-13T15:23:43.856Z',
   'x': 0.48321468999023454,
   'y': 0.143143690977163},
  {'text': '',
   'time': '2017-03-13T15:23:43.859Z',
   'x': 0.48321468999023454,
   'y': 0.143143690977163},
  {'text': '',
   'time': '2017-03-13T15:23:43.862Z',
   'x': 0.4793796527680898,
   'y': 0.14044286661910332},
  {'text': '',
   'time': '2017-03-13T15:23:43.868Z',
   'x': 0.4793796527680898,
   'y': 0.14044286661910332},
  {'text': '',
   'time': '2017-03-13T15:23:43.870Z',
   'x': 0.47170957832380034,
   'y': 0.14044286661910332},
  {'text': '',
   'time': '2017-03-13T15:23:43.878Z',
   'x': 0.47170957832380034,
   'y': 0.14044286661910332},
  {'text': '',
   'time': '2017-03-13T15:23:43.878Z',
   'x': 0.47170957832380034,
   'y': 0.14044286661910332},
  {'text': '',
   'time': '2017-03-13T15:23:43.887Z',
   'x': 0.46787454110165566,
   'y': 0.14044286661910332},
  {'text': '',
   'time': '2017-03-13T15:23:43.890Z',
   'x': 0.46787454110165566,
   'y': 0.14044286661910332},
  {'text': '',
   'time': '2017-03-13T15:23:43.894Z',
   'x': 0.46787454110165566,
   'y': 0.13774204226104364},
  {'text': '',
   'time': '2017-03-13T15:23:43.896Z',
   'x': 0.46787454110165566,
   'y': 0.13774204226104364},
  {'text': '',
   'time': '2017-03-13T15:23:43.903Z',
   'x': 0.46787454110165566,
   'y': 0.13774204226104364},
  {'text': '',
   'time': '2017-03-13T15:23:43.904Z',
   'x': 0.46787454110165566,
   'y': 0.13774204226104364},
  {'text': '',
   'time': '2017-03-13T15:23:43.910Z',
   'x': 0.46403950387951093,
   'y': 0.13774204226104364},
  {'text': '',
   'time': '2017-03-13T15:23:43.912Z',
   'x': 0.46403950387951093,
   'y': 0.13774204226104364},
  {'text': '',
   'time': '2017-03-13T15:23:43.919Z',
   'x': 0.46403950387951093,
   'y': 0.13774204226104364},
  {'text': '',
   'time': '2017-03-13T15:23:43.921Z',
   'x': 0.46403950387951093,
   'y': 0.13774204226104364},
  {'text': '',
   'time': '2017-03-13T15:23:43.938Z',
   'x': 0.46403950387951093,
   'y': 0.13504121790298396},
  {'text': '',
   'time': '2017-03-13T15:23:43.941Z',
   'x': 0.46403950387951093,
   'y': 0.13504121790298396},
  {'text': '',
   'time': '2017-03-13T15:23:43.942Z',
   'x': 0.4602044666573662,
   'y': 0.13504121790298396},
  {'text': '',
   'time': '2017-03-13T15:23:43.953Z',
   'x': 0.4602044666573662,
   'y': 0.13504121790298396},
  {'text': '',
   'time': '2017-03-13T15:23:43.954Z',
   'x': 0.4602044666573662,
   'y': 0.13504121790298396},
  {'text': '',
   'time': '2017-03-13T15:23:43.958Z',
   'x': 0.4602044666573662,
   'y': 0.13504121790298396},
  {'text': '',
   'time': '2017-03-13T15:23:43.959Z',
   'x': 0.4602044666573662,
   'y': 0.13504121790298396},
  {'text': '',
   'time': '2017-03-13T15:23:43.972Z',
   'x': 0.45636942943522146,
   'y': 0.12963956918686462},
  {'text': '',
   'time': '2017-03-13T15:23:43.975Z',
   'x': 0.45636942943522146,
   'y': 0.12963956918686462},
  {'text': '',
   'time': '2017-03-13T15:23:43.986Z',
   'x': 0.44869935499093205,
   'y': 0.12693874482880493},
  {'text': '',
   'time': '2017-03-13T15:23:43.988Z',
   'x': 0.44869935499093205,
   'y': 0.12693874482880493},
  {'text': '',
   'time': '2017-03-13T15:23:43.990Z',
   'x': 0.44869935499093205,
   'y': 0.12693874482880493},
  {'text': '',
   'time': '2017-03-13T15:23:44.002Z',
   'x': 0.4448643177687873,
   'y': 0.12423792047074525},
  {'text': '',
   'time': '2017-03-13T15:23:44.005Z',
   'x': 0.4448643177687873,
   'y': 0.12423792047074525},
  {'text': '',
   'time': '2017-03-13T15:23:44.006Z',
   'x': 0.4371942433244979,
   'y': 0.12153709611268557},
  {'text': '',
   'time': '2017-03-13T15:23:44.019Z',
   'x': 0.4333592061023532,
   'y': 0.12153709611268557},
  {'text': '',
   'time': '2017-03-13T15:23:44.022Z',
   'x': 0.4333592061023532,
   'y': 0.12153709611268557},
  {'text': '',
   'time': '2017-03-13T15:23:44.023Z',
   'x': 0.42952416888020845,
   'y': 0.11343462303850653},
  {'text': '',
   'time': '2017-03-13T15:23:44.030Z',
   'x': 0.4180190572137743,
   'y': 0.11343462303850653},
  {'text': '',
   'time': '2017-03-13T15:23:44.035Z',
   'x': 0.4180190572137743,
   'y': 0.11343462303850653},
  {'text': '',
   'time': '2017-03-13T15:23:44.038Z',
   'x': 0.41034898276948484,
   'y': 0.11073379868044685},
  {'text': '',
   'time': '2017-03-13T15:23:44.041Z',
   'x': 0.41034898276948484,
   'y': 0.11073379868044685},
  {'text': '',
   'time': '2017-03-13T15:23:44.046Z',
   'x': 0.40651394554734016,
   'y': 0.10803297432238718},
  {'text': '',
   'time': '2017-03-13T15:23:44.051Z',
   'x': 0.40651394554734016,
   'y': 0.10803297432238718},
  {'text': '',
   'time': '2017-03-13T15:23:44.054Z',
   'x': 0.39500883388090596,
   'y': 0.10533214996432749},
  {'text': '',
   'time': '2017-03-13T15:23:44.058Z',
   'x': 0.39500883388090596,
   'y': 0.10533214996432749},
  {'text': '',
   'time': '2017-03-13T15:23:44.062Z',
   'x': 0.38733875943661655,
   'y': 0.10533214996432749},
  {'text': '',
   'time': '2017-03-13T15:23:44.064Z',
   'x': 0.38733875943661655,
   'y': 0.10533214996432749},
  {'text': '',
   'time': '2017-03-13T15:23:44.071Z',
   'x': 0.3835037222144718,
   'y': 0.10263132560626781},
  {'text': '',
   'time': '2017-03-13T15:23:44.074Z',
   'x': 0.3835037222144718,
   'y': 0.10263132560626781},
  {'text': '',
   'time': '2017-03-13T15:23:44.077Z',
   'x': 0.36816357332589295,
   'y': 0.10263132560626781},
  {'text': '',
   'time': '2017-03-13T15:23:44.080Z',
   'x': 0.36816357332589295,
   'y': 0.10263132560626781},
  {'text': '',
   'time': '2017-03-13T15:23:44.086Z',
   'x': 0.36432853610374827,
   'y': 0.09993050124820813},
  {'text': '',
   'time': '2017-03-13T15:23:44.089Z',
   'x': 0.36432853610374827,
   'y': 0.09993050124820813},
  {'text': '',
   'time': '2017-03-13T15:23:44.094Z',
   'x': 0.36049349888160354,
   'y': 0.09993050124820813},
  {'text': '',
   'time': '2017-03-13T15:23:44.096Z',
   'x': 0.36049349888160354,
   'y': 0.09993050124820813},
  {'text': '',
   'time': '2017-03-13T15:23:44.102Z',
   'x': 0.35282342443731407,
   'y': 0.09452885253208877},
  {'text': '',
   'time': '2017-03-13T15:23:44.104Z',
   'x': 0.35282342443731407,
   'y': 0.09452885253208877},
  {'text': '',
   'time': '2017-03-13T15:23:44.110Z',
   'x': 0.34515334999302466,
   'y': 0.09182802817402909},
  {'text': '',
   'time': '2017-03-13T15:23:44.113Z',
   'x': 0.34515334999302466,
   'y': 0.09182802817402909},
  {'text': '',
   'time': '2017-03-13T15:23:44.119Z',
   'x': 0.34131831277087993,
   'y': 0.09182802817402909},
  {'text': '',
   'time': '2017-03-13T15:23:44.122Z',
   'x': 0.34131831277087993,
   'y': 0.09182802817402909},
  {'text': '',
   'time': '2017-03-13T15:23:44.126Z',
   'x': 0.3374832755487352,
   'y': 0.09182802817402909},
  {'text': '',
   'time': '2017-03-13T15:23:44.128Z',
   'x': 0.3374832755487352,
   'y': 0.09182802817402909},
  {'text': '',
   'time': '2017-03-13T15:23:44.135Z',
   'x': 0.3336482383265905,
   'y': 0.08912720381596942},
  {'text': '',
   'time': '2017-03-13T15:23:44.138Z',
   'x': 0.3336482383265905,
   'y': 0.08912720381596942},
  {'text': '',
   'time': '2017-03-13T15:23:44.142Z',
   'x': 0.3298132011044458,
   'y': 0.08912720381596942},
  {'text': '',
   'time': '2017-03-13T15:23:44.145Z',
   'x': 0.3298132011044458,
   'y': 0.08912720381596942},
  {'text': '',
   'time': '2017-03-13T15:23:44.152Z',
   'x': 0.3298132011044458,
   'y': 0.08912720381596942},
  {'text': '',
   'time': '2017-03-13T15:23:44.152Z',
   'x': 0.3298132011044458,
   'y': 0.08912720381596942},
  {'text': '',
   'time': '2017-03-13T15:23:44.158Z',
   'x': 0.32597816388230105,
   'y': 0.08912720381596942},
  {'text': '',
   'time': '2017-03-13T15:23:44.160Z',
   'x': 0.32597816388230105,
   'y': 0.08912720381596942},
  {'text': '',
   'time': '2017-03-13T15:23:44.175Z',
   'x': 0.32597816388230105,
   'y': 0.08642637945790974},
  {'text': '',
   'time': '2017-03-13T15:23:44.179Z',
   'x': 0.32597816388230105,
   'y': 0.08642637945790974},
  {'text': '',
   'time': '2017-03-13T15:23:44.190Z',
   'x': 0.31830808943801164,
   'y': 0.08642637945790974},
  {'text': '',
   'time': '2017-03-13T15:23:44.193Z',
   'x': 0.31830808943801164,
   'y': 0.08642637945790974},
  {'text': '',
   'time': '2017-03-13T15:23:44.236Z',
   'x': 0.31830808943801164,
   'y': 0.08642637945790974},
  {'text': '',
   'time': '2017-03-13T15:23:44.237Z',
   'x': 0.31830808943801164,
   'y': 0.08642637945790974},
  {'text': '',
   'time': '2017-03-13T15:23:44.239Z',
   'x': 0.3298132011044458,
   'y': 0.08642637945790974},
  {'text': '',
   'time': '2017-03-13T15:23:44.250Z',
   'x': 0.3336482383265905,
   'y': 0.08642637945790974},
  {'text': '',
   'time': '2017-03-13T15:23:44.254Z',
   'x': 0.3336482383265905,
   'y': 0.08642637945790974},
  {'text': '',
   'time': '2017-03-13T15:23:44.255Z',
   'x': 0.34515334999302466,
   'y': 0.08642637945790974},
  {'text': '',
   'time': '2017-03-13T15:23:44.262Z',
   'x': 0.36049349888160354,
   'y': 0.08372555509985005},
  {'text': '',
   'time': '2017-03-13T15:23:44.269Z',
   'x': 0.36049349888160354,
   'y': 0.08372555509985005},
  {'text': '',
   'time': '2017-03-13T15:23:44.271Z',
   'x': 0.39500883388090596,
   'y': 0.08372555509985005},
  {'text': '',
   'time': '2017-03-13T15:23:44.279Z',
   'x': 0.4371942433244979,
   'y': 0.08372555509985005},
  {'text': '',
   'time': '2017-03-13T15:23:44.285Z',
   'x': 0.4371942433244979,
   'y': 0.08372555509985005},
  {'text': '',
   'time': '2017-03-13T15:23:44.286Z',
   'x': 0.48321468999023454,
   'y': 0.08372555509985005},
  {'text': '',
   'time': '2017-03-13T15:23:44.295Z',
   'x': 0.5407402483224053,
   'y': 0.08372555509985005},
  {'text': '',
   'time': '2017-03-13T15:23:44.302Z',
   'x': 0.5407402483224053,
   'y': 0.08372555509985005},
  {'text': '',
   'time': '2017-03-13T15:23:44.303Z',
   'x': 0.6519563277646021,
   'y': 0.08372555509985005},
  {'text': '',
   'time': '2017-03-13T15:23:44.310Z',
   'x': 0.8206979655389697,
   'y': 0.08372555509985005},
  {'text': '',
   'time': '2017-03-13T15:23:44.314Z',
   'x': 0.8206979655389697,
   'y': 0.08372555509985005},
  {'text': '',
   'time': '2017-03-13T15:23:44.319Z',
   'x': 0.8897286355375746,
   'y': 0.08372555509985005},
  {'text': '',
   'time': '2017-03-13T15:23:44.321Z',
   'x': 0.8897286355375746,
   'y': 0.08372555509985005}],
 'filename': 'a-guide-to-bird-feeding_52d65ac07dbea.jpg',
 'tags': ['birds',
  'bird feed',
  'chart',
  'bird watching',
  'bird identifying',
  'nature'],
 'validation': True}

data is structured as a list of HITs, each of which contains a list of images, each of which constains the filename, tags, and mouse movements (list of events) for the image (as well as whether it was a validation image in terms of tags). e.g. to get all the mouse movement events of user A11... on image 3: data['A116DNB5LSACL9_3H781YYV6TRNQRMDDHXM3LXO0HUTE9'][3]['events']

In [17]:
locs_by_img = dict();
tags_by_img = dict();
times_for_locs = dict();

for hit in data:
    for im in data[hit]:

        coords = []
        times = []
        prevtime = 0
        for ev in im['events']:
            if ev['x'] is not None and ev['y'] is not None:
                coords.append((ev['x'],ev['y']))
                #print('got here %d'%prevtime)
                curtime = process_timestamp(ev['time'])
                if prevtime>0: # only start counting from the second entry
                    times.append(curtime-prevtime)
                prevtime = curtime
        
        if isinstance(im['filename'],list):
            assert(len(im['filename'])==1) # list of one element
            filename = im['filename'][0]
        else:
            filename = im['filename']
        
        if filename not in locs_by_img.keys():
            locs_by_img[filename] = dict()
            tags_by_img[filename] = dict()
            times_for_locs[filename] = dict()
        
        locs_by_img[filename][hit] = coords[:-1] # eliminate the last time point
        tags_by_img[filename][hit] = im['tags']
        times_for_locs[filename][hit] = times
        
        assert(len(locs_by_img[filename][hit])==len(times_for_locs[filename][hit]))
        
    
In [18]:
filename = 'why-protect-antarcticas-ocean-2_503b538a2f76d.jpg'
curim = locs_by_img[filename]
print('Seen by',len(curim),'users.')

imdir = "/data/graphics/SpandanGraphsProject/fullsize-60k/"
im = Image.open(os.path.join(imdir,filename))
im_arr = np.array(im, dtype=np.uint8)
[ydim,xdim,dim3] = im_arr.shape
Seen by 9 users.
In [50]:
# run this cell to compute coordinates per user

# binary viewing path per viewer

fig = plt.figure(figsize=(sz,sz))
dim2 = math.ceil(len(curim)/3.0)
ii = 1
for hit in curim:
    coords = curim[hit]

    xs = [min(math.floor(elem[0]*xdim),xdim-1) for elem in coords]
    ys = [min(math.floor(elem[1]*ydim),ydim-1) for elem in coords]
    
    if not len(ys) or not len(xs):
        continue

    res = np.zeros((ydim,xdim),dtype=np.uint8)
    indexes = (np.array(ys),np.array(xs))
    res[indexes] = 255.0

    kernel = cv2.getStructuringElement(cv2.MORPH_ELLIPSE,(BS,BS))
    dilation = cv2.dilate(res,kernel,iterations = 1)

    plt.subplot(dim2,3,ii); ii += 1
    plt.imshow(dilation); plt.axis('off')
In [38]:
# filter out outliners (using inter-quartile range)
import scipy.stats 
plt.hist(curtimes); plt.show()
IQR = scipy.stats.iqr(curtimes)
Q1 = np.percentile(curtimes,25)
Q3 = np.percentile(curtimes,75)
print('Low bound: %2.2f, Upper bound: %2.2f'%(Q1-3*IQR,Q3+3*IQR))
curtimes2 = [c for c in curtimes if c>Q1-3*IQR and c<Q3+3*IQR]
plt.hist(curtimes2)
Low bound: -0.03, Upper bound: 0.08
Out[38]:
(array([ 598.,    4.,    9.,  292.,    0.,    0.,   41.,    0.,    0.,   23.]),
 array([ 0.015 ,  0.0203,  0.0256,  0.0309,  0.0362,  0.0415,  0.0468,
         0.0521,  0.0574,  0.0627,  0.068 ]),
 <a list of 10 Patch objects>)
In [104]:
# run this cell to compute coordinates per user

# every point is weighted by viewing time (normalized to max time)

filteroutliers = True # filter out outliers (points with super high viewing times)

fig = plt.figure(figsize=(sz,sz))
dim2 = math.ceil(len(curim)/3.0)

curim = locs_by_img[filename]
hits = [k for k in curim.keys()]

times_for_locs[filename][hit]

ii = 1
for i in range(len(curim)):
    coords = curim[hits[i]]
    curtimes = times_for_locs[filename][hits[i]]

    xs = [min(math.floor(elem[0]*xdim),xdim-1) for elem in coords]
    ys = [min(math.floor(elem[1]*ydim),ydim-1) for elem in coords]
    
    if not len(ys) or not len(xs):
        continue

    res = np.zeros((ydim,xdim),dtype=np.uint8)
    
    if filteroutliers:
        IQR = scipy.stats.iqr(curtimes)
        Q1 = np.percentile(curtimes,25)
        Q3 = np.percentile(curtimes,75)
        curtimes2 = [c for c in curtimes if c>Q1-3*IQR and c<Q3+3*IQR]
        maxval = np.amax(curtimes2)
    else:
        maxval = np.amax(curtimes)
    
    for j in range(len(xs)):
        c = curtimes[j]
        if filteroutliers and (c<Q1-3*IQR or c>Q3+3*IQR):
            continue
        res[ys[j]][xs[j]] = 255.0*c/float(maxval)
        #res[ys[i]][xs[i]] = float(c)
        
    #maxval = np.amax(res)/255.0
    
    #if maxval:
    #    print('got here')
    #    #res = 255.0*res/float(maxval)
    #    res //= maxval
        
    kernel = cv2.getStructuringElement(cv2.MORPH_ELLIPSE,(BS,BS))
    dilation = cv2.dilate(res,kernel,iterations = 1)
    #heatmap = scipy.ndimage.filters.gaussian_filter(dilation,sigma=10)

    #kernel = cv2.getStructuringElement(cv2.MORPH_ELLIPSE,(200,200))
    #heatmap = cv2.dilate(res,kernel,iterations = 1)

    plt.subplot(dim2,3,ii); 
    plt.imshow(dilation); plt.axis('off'); plt.title(ii)
    
    print('%d)'%(ii),end='')
    print(tags_by_img[filename][hits[i]])
    
    ii += 1
1)['antarctica', 'ocean', 'penguins', 'glaciers', 'protectthepenguins', 'protectthepolarbears']
2)['ocean', 'conservation', 'penguins', 'arctic', 'ecosystem']
3)['ocean', 'protect', 'Antartica', 'ecosystems', 'climatechange']
4)['oceanic conservation', 'antarctica ocean', 'antarctica wildlife', 'iceberg preservation', 'wildlife preservation']
5)['antartica', 'saveocean', 'saveplanet', 'saveecosystem', 'antarticocean']
6)['antartica', 'ocean', 'ecosystem', 'penguin', 'protect']
7)['antarctica', 'projectantarctica', 'antarcticocean', 'alliance', 'penguin']
8)['protectocean', 'antartica', 'ecosystems', 'climatechange', 'wildsouth']
In [115]:
# run this cell to compute coordinates per user

# every point is weighted by viewing time (normalized to max time)

mycmap = transparent_cmap(cmap=plt.get_cmap('viridis'))

filteroutliers = True # filter out outliers (points with super high viewing times)

fig = plt.figure(figsize=(sz,sz))
dim2 = math.ceil(len(curim)/3.0)

curim = locs_by_img[filename]
hits = [k for k in curim.keys()]

times_for_locs[filename][hit]

ii = 1
for i in range(len(curim)):
    coords = curim[hits[i]]
    curtimes = times_for_locs[filename][hits[i]]

    xs = [min(math.floor(elem[0]*xdim),xdim-1) for elem in coords]
    ys = [min(math.floor(elem[1]*ydim),ydim-1) for elem in coords]
    
    if not len(ys) or not len(xs):
        continue

    res = np.zeros((ydim,xdim),dtype=np.uint8)
    
    if filteroutliers:
        IQR = scipy.stats.iqr(curtimes)
        Q1 = np.percentile(curtimes,25)
        Q3 = np.percentile(curtimes,75)
        curtimes2 = [c for c in curtimes if c>Q1-3*IQR and c<Q3+3*IQR]
        maxval = np.amax(curtimes2)
    else:
        maxval = np.amax(curtimes)
    
    for j in range(len(xs)):
        c = curtimes[j]
        if filteroutliers and (c<Q1-3*IQR or c>Q3+3*IQR):
            continue
        res[ys[j]][xs[j]] = 255.0*c/float(maxval)
        #res[ys[i]][xs[i]] = float(c)
        
    #maxval = np.amax(res)/255.0
    
    #if maxval:
    #    print('got here')
    #    #res = 255.0*res/float(maxval)
    #    res //= maxval
        
    kernel = cv2.getStructuringElement(cv2.MORPH_ELLIPSE,(BS,BS))
    dilation = cv2.dilate(res,kernel,iterations = 1)
    #heatmap = scipy.ndimage.filters.gaussian_filter(dilation,sigma=10)

    #kernel = cv2.getStructuringElement(cv2.MORPH_ELLIPSE,(200,200))
    #heatmap = cv2.dilate(res,kernel,iterations = 1)

    #plt.subplot(dim2,3,ii); 
    #ax = plt.subplot(dim2,3,ii)
    #fig,ax = plt.figure()
    #fig, ax = plt.subplots(figsize=(8,8))
    fig, ax = plt.subplots(figsize=(sz,sz))
    #ax = plt.figure(figsize=(sz,sz))
    
    ax.imshow(im)
    #cb = ax.contourf(x, y, heatmap.reshape(x.shape[0], y.shape[1]), 15, cmap=mycmap)
    ax.imshow(dilation, cmap=mycmap); 
    plt.axis('off'); plt.title(ii); 
    
    print('%d)'%(ii),end='')
    print(tags_by_img[filename][hits[i]])
    
    plt.show()
    
    ii += 1
1)['antarctica', 'ocean', 'penguins', 'glaciers', 'protectthepenguins', 'protectthepolarbears']
<matplotlib.figure.Figure at 0x7fabb0379400>
2)['ocean', 'conservation', 'penguins', 'arctic', 'ecosystem']
3)['ocean', 'protect', 'Antartica', 'ecosystems', 'climatechange']
4)['oceanic conservation', 'antarctica ocean', 'antarctica wildlife', 'iceberg preservation', 'wildlife preservation']
5)['antartica', 'saveocean', 'saveplanet', 'saveecosystem', 'antarticocean']
6)['antartica', 'ocean', 'ecosystem', 'penguin', 'protect']
7)['antarctica', 'projectantarctica', 'antarcticocean', 'alliance', 'penguin']
8)['protectocean', 'antartica', 'ecosystems', 'climatechange', 'wildsouth']
In [54]:
# run this cell if want to aggregate all coordinates together
allcoords = []
for hit in curim:
    coords = curim[hit]
    allcoords.extend(coords)
    
xs = [min(math.floor(elem[0]*xdim),xdim-1) for elem in allcoords]
ys = [min(math.floor(elem[1]*ydim),ydim-1) for elem in allcoords]

res = np.zeros((ydim,xdim),dtype=np.uint8)
indexes = (np.array(ys),np.array(xs))
res[indexes] = 255.0

kernel = cv2.getStructuringElement(cv2.MORPH_ELLIPSE,(50,50))
dilation = cv2.dilate(res,kernel,iterations = 1)
plt.imshow(dilation)
heatmap = scipy.ndimage.filters.gaussian_filter(dilation,sigma=50)
#heatmap = scipy.ndimage.filters.gaussian_filter(res,sigma=50)
In [55]:
targetdim = min(xdim,ydim);
targetdim = round(targetdim*2/3.0);

rowsums = heatmap.sum(axis=1)
colsums = heatmap.sum(axis=0)

inds = np.argsort(rowsums) # first elements of inds will be ones with smallest row sums
inds = np.flip(inds,axis=0) # first elements are most important

colinds = np.argsort(colsums)
colinds = np.flip(colinds,axis=0)

# cut rows
keepthese = inds[0:targetdim]
keepthese.sort()
thumb = im_arr[keepthese,:]

# cut columns
keepthese = colinds[0:targetdim]
keepthese.sort()
thumb = thumb[:,keepthese]
In [56]:
fig = plt.figure(figsize=(sz,sz))
plt.subplot(1,4,1); plt.axis('off'); plt.title('Input')
plt.imshow(im)
plt.subplot(1,4,2); plt.axis('off'); plt.title('Mouse heatmap')
plt.imshow(heatmap)

spot = spotlight(im,heatmap,toplot=False)
plt.subplot(1,4,3); plt.axis('off'); plt.title('Spotlight')
plt.imshow(spot)

plt.subplot(1,4,4); plt.axis('off'); plt.title('Thumbnail')
plt.imshow(thumb)
Out[56]:
<matplotlib.image.AxesImage at 0x7f47a42159b0>

TODO:

  • use the timing information to aggregate heat for each user
  • dilation and blurring should be a function of number of participants as well
In [129]:
# run for all images at once (I just copied code from multiple cells above into a single cell here
# in order to run it on all images at once; the cells above can be used for testing individual parts)
imdir = "/data/graphics/SpandanGraphsProject/fullsize-60k/"
imdir2 = "/data/graphics/graphsProject/graphScraping/Img_folder"
mycmap = transparent_cmap(cmap=plt.get_cmap('viridis'))

withthumbnail = False
pn = 4 if withthumbnail == True else 3

for filename in locs_by_img:
    
    curim = locs_by_img[filename]
    
    if os.path.isfile(os.path.join(imdir,filename)):
        im = Image.open(os.path.join(imdir,filename))
    else:
        im = Image.open(os.path.join(imdir2,filename))
        
    im_arr = np.array(im, dtype=np.uint8)
    if len(im_arr.shape)==3:
        [ydim,xdim,dim3] = im_arr.shape
    else:
        [ydim,xdim] = im_arr.shape
     
    
    res = np.zeros((ydim,xdim),dtype=np.uint8)
    
    nusers = len(curim)
    numus = 0
    for hit in curim:
        allcoords = curim[hit]
        if allcoords:
            numus += 1
        else:
            continue
        xs = [min(math.floor(elem[0]*xdim),xdim-1) for elem in allcoords]
        ys = [min(math.floor(elem[1]*ydim),ydim-1) for elem in allcoords]
        
        #res_temp = np.zeros((ydim,xdim),dtype=np.uint8)
        for j in range(len(xs)):
            res[ys[j]][xs[j]] += 1 # aggregate "fixations" per pixel
            #res_temp[ys[j]][xs[j]] += 1

        
    maxval = np.amax(res)/255.0
    
    res = np.divide(res,maxval)

    sig = int(0.03*min(ydim,xdim))
    #sig = BS
    #kernel = cv2.getStructuringElement(cv2.MORPH_ELLIPSE,(sig,sig))
    dilation = res
    #dilation = cv2.dilate(res,kernel,iterations = 1)
    #heatmap = dilation
    heatmap = scipy.ndimage.filters.gaussian_filter(dilation,sigma=sig)
    
    # equalize the heatmap
    heatmap = image_histogram_equalization(heatmap, number_bins=256)
    
    # --------- MAKE THUMBNAIL --------- 
    targetdim = min(xdim,ydim);
    targetdim = round(targetdim*2/3.0); # make the thumbnail have square side length = 2/3 of the smallest side length

    rowsums = heatmap.sum(axis=1)
    colsums = heatmap.sum(axis=0)

    inds = np.argsort(rowsums) # first elements of inds will be ones with smallest row sums
    inds = np.flip(inds,axis=0) # first elements are most important

    colinds = np.argsort(colsums)
    colinds = np.flip(colinds,axis=0)

    # cut rows
    keepthese = inds[0:targetdim]
    keepthese.sort()
    thumb = im_arr[keepthese,:]

    # cut columns
    keepthese = colinds[0:targetdim]
    keepthese.sort()
    thumb = thumb[:,keepthese]
    
    # --------- GENERATE PLOTS --------- 
    fig = plt.figure(figsize=(sz,sz))
    plt.rcParams['image.cmap'] = 'gist_heat'
    
    plt.subplot(1,pn,1); plt.axis('off'); #plt.title(filename)
    plt.imshow(im)
    
    #plt.subplot(1,pn,2); plt.axis('off'); plt.title('Mouse heatmap (%d)'%(nusers))
    #plt.imshow(heatmap)

    # Import image and get x and y extents
    #p = np.asarray(im).astype('float')
    #w, h = im.size
    w, h = im.size
    y, x = np.mgrid[0:h, 0:w]

    #Plot image and overlay colormap
    ax = plt.subplot(1,pn,2)
    ax.imshow(im)
    cb = ax.contourf(x, y, heatmap.reshape(x.shape[0], y.shape[1]), 15, cmap=mycmap)
    plt.axis('off');
    plt.title('%d viewers'%(numus))
    #plt.colorbar(cb)
    # ---------------

    spot = spotlight(im,heatmap,toplot=False)
    plt.subplot(1,pn,3); plt.axis('off'); plt.title('Spotlight')
    plt.imshow(spot)

    if withthumbnail:
        plt.subplot(1,pn,4); plt.axis('off'); plt.title('Thumbnail')
        plt.imshow(thumb)
        
    alltags = []
    for entry in tags_by_img[filename].keys():
        alltags.extend(tags_by_img[filename][entry])
    print(alltags)
        
    plt.show()
    
    
['pie chart', 'information', 'infographic', 'users', 'colors', 'tidbits', 'infographics', 'marketing', 'incorrect', 'random', 'info', 'knowledgeispower', 'piechart', 'potato', 'facts', 'piechart', 'infograph', 'information', 'potato', 'web', 'potato', 'uselessstats', 'madeupstats', 'infographicsrule', 'statslie', 'lunchbreath', 'web data', 'marketing', 'potato', 'statistics', 'potato', 'infographic', 'pointless', 'piecharts', 'whysendlinks', 'internet', 'infographics', 'clicks', 'information', 'links', 'Infographic', 'Charts', 'Forwards', 'Potato', 'PieStats', 'users', 'potato', 'piechart', 'red', ' blue', 'web', 'internet', 'graphics', 'information', 'potato', 'pie chart', 'internet', 'sharing', 'social media', 'infographic', 'web', 'email', 'infographic', 'links', 'info', 'potato', 'pie', 'graph', 'patriotic', 'red', 'white', 'blue', 'web', 'info', 'funny', 'graph', 'pointless', 'potato', 'silly', 'Chart', 'Statistics', 'Humor', 'Share', 'Graph', 'graph', 'piechart', 'information', 'forward', 'webuser', 'chart', 'circle', 'info', 'weird', 'data', 'infographic', 'link', 'internet', 'popularsharing', 'pointlessinformation', 'potato']
['facts', 'cars', 'auto insurance', 'required', 'state law', 'Car Insurance', 'Cars', 'Facts', 'Save Money', 'Vehicles', 'carinsurance', 'facts', 'allstates', 'deductible', 'theft', 'legalities', 'carinsurancefacts', 'autoinsurance', 'factsaboutautoins', 'geico', 'allstate', 'carinsurance', 'insurance', 'taxes', 'auto', 'car', 'car', 'insurance', 'tax deductible', 'auto', 'United States', 'car', 'insurance', 'facts', 'autoinsurance', 'tips', 'carinsurance', 'auto', 'deductible', 'facts', 'theft', 'law', 'US', 'carinsurance', 'insurancefacts', 'infographic', 'cartheft', 'carinsuracefacts', 'CarInsurance', 'InsuranceFacts', '50States', 'AutoInsurance', 'Deductibles', 'Insurance', 'Auto', 'InsuranceFacts', 'Protection', 'USA', 'autoinsuredmeanssomething', 'insureyourself', 'carinsurancewoes', 'tryinsurance', 'insuranceisrequiredbymost']
['music', 'timeline', 'evolution', 'chart', 'kova sound', 'musicevolution', 'musichistory', 'music101', 'pophistory', 'popevolution', 'music', 'evolution', 'industry', 'records', 'cds', 'evolution', 'music', 'history', 'learning', 'interesting', 'evolutionofmusic', 'industryofmusic', 'longways', 'startedfromthebottom', 'kovasound', 'timeline', 'music', 'evolution', '120 years', 'industry', 'EvolutionOfMusic', 'MusicIndustry', 'MusicTimeLine', 'Entertainment', 'Trivia', 'change', 'evolve', 'evolution', 'changes', 'beingnew', 'evolution', 'music', 'chart', 'industry', 'composition', 'TIMESLINES', 'MUSICINDUSTRY', 'MUSICCHANGES', 'BIGTIMES', 'MUSIC', 'musicindustry', 'music', 'evolution', 'kovasound', 'timeline', 'musicindustry', 'history', 'change', 'technology', 'evolution', 'music', 'industry', 'evolution', 'flashback', '1877 to 1999', 'KOVA sound', 'Yellow', 'Evolution', 'Grey', 'Piano Keys', 'Swirls', 'music evolution', 'music history', 'music industry', 'started in 1877', 'record to mp3', 'music', 'evolution', 'timeline', 'recording', 'genres', 'musicevolution', 'music', 'musicyearly', 'timeline', 'evolution', 'kova', 'music', 'evolution', 'progression', 'art', 'musicindustry', 'historyofmusic', 'evolutionofmusic', 'fromlabtocd', 'acenturyofmusicindustry', ' music', 'artist', 'singers', 'vocalist', ' time frame', 'EVOLUTION', 'musicindustry', 'yankeedoodle', 'KovaSound', 'radio', 'music', 'evolution', 'radio', 'musicvideo', 'infographic', 'kovasound', 'history', 'evolution', 'music', 'audio', 'record', 'industry', 'MusicIndustry', 'Goodvibes', 'TruthBomb', 'HistoryLesson', 'KovaSound', 'Evolution', 'music', 'evolution', 'history', '1877', '1999']
['internet', 'broadband', 'chart', 'graph', 'cost', 'Internet Speeds', 'Internet Costs', 'Worldly internet', 'Top Broadband', 'ITIF Rankings', 'internet', 'speed', 'costs', 'global', 'broadband', 'internet', 'speed', 'world', 'broadband', 'percentage', 'webpricesallaround', 'howmuchisurinternet', 'areyouoverspendingtosurf', 'checkyourusageincost', 'worldwidewebusage', 'Numbers', 'Maps', 'HowMuch', 'NotSoFast', 'Japan', 'internet', 'high speed', 'broadband', 'costs', 'world', 'Internet', 'Speed', 'World', 'Price', 'Money', 'Broadband', 'Worldwide', 'internet', 'speed', 'costs', 'world', 'chart', 'internet', 'speed', 'cost', 'world', 'global', 'internet', 'broadband', 'connectionspeed', 'mbps', 'worldstats', 'Internet', 'speed', 'worldwide', 'cost', 'top20']
['big bang', 'innovations', 'chart', 'predictions', 'users', 'Analytics', 'Amazon', 'Ebay', 'Data', 'Research', 'analytics', 'fico', 'timeline', 'marketing', 'data', 'analytics big bang', 'analytics now and then', 'now and then', 'analytics evolution', 'commercialization', 'scientificevolutionlies', 'nobigbang', 'sciencelied', 'bigbangimagination', 'creationrules', 'BigBang', 'Analytics', 'Milestones', 'Newusers', 'KeyInovations', 'big bang', 'analytics', 'computers', 'big data', 'technology', 'analytics', 'bigbang', 'business', 'startup', 'cloud', 'predictive', 'analytics', 'bigbang', 'business', 'bigdata', 'computer', 'Analytics', ' Big', 'Bang', 'Data', 'technologies', 'bigbang', 'bigbanganalytics', 'whybigbang', 'bigbangtheory', 'bang', 'BBB', 'bigbangbaby', 'deepspace', 'ancientaliens', 'womeninscience', 'Science', 'BigBang', 'Universe', 'Space', 'Physics', 'Facts', 'Educational', 'Learning', 'Interesting', 'bigbang', 'physics', 'space', 'universe', 'science', 'bigdata', 'analytical', 'innovation', 'analyticsporn', 'globalization']
['coffee', 'machines', 'chart', 'prices', 'ratings', 'coffee', 'espresso', 'GaggiaClassic', 'RancilioSilvia', 'rating', 'comparison', 'consumer', 'espresso', 'coffee', 'pre ground', 'compare', 'amazon rating', 'Espresso', 'Coffee', 'Java', 'Ratings', 'Quality', 'gaggiaclassic', 'ranciliosilvia', 'comparison', ' espresso', 'coffee', 'coffee', 'espresso', 'espressomachine', 'coffeemaker', 'coffeedrinkers', 'gaggia', 'classic', 'rancilliosilvia', 'comparison', 'cost', 'coffee', 'espresso', 'gaggia', 'rancilio', 'quality', 'gaggia classic', 'rancilio silvia', 'coffee', 'coffeeshopsesspresso', 'amazon rating', 'coffeeandespresso', 'consumerreviews', 'highquality', 'pricingcomparison', 'temperature']
['facebook', 'twitter', 'competition', 'conversation', 'visibility', 'facebook', 'twitter', 'ventajas', 'marketing', 'web', 'espanol', 'comparison', 'facebookvstwitter', 'matchup', 'que', 'SPANSIH', 'FACEBOOK', 'TWITTER', 'THROWDOWN', 'SOCIALMEDIA', 'facebook', 'twitter', 'spanish', 'espanol', 'bilingual', 'facebook', 'twitter', 'shopping', 'computer', 'socialmedia', 'facebook', 'twitter', 'socialmedia', 'internet', 'online', 'facebook', 'twitter', 'socialmedia', 'comparingsocials', 'bettermedia', 'internationalsocialmedia', 'socialmediadifferences', 'twittervsfacebook', 'fbvstw', 'factorfiction']
['table', 'elements', 'colors', 'periodic table', 'success', 'howtosucceed', 'periodictableofsuccess', 'elementsofsuccess', 'inspirational', 'motivational', 'elements', 'success', 'periodictable', 'action', 'habit', 'opportunity', 'people', 'life', 'science', 'periodictable', 'sucess', 'elements', 'life', 'ElementsofSuccess', 'succeedinlife', 'thebasics', 'whatuneed', 'happylife', 'periodic table', 'elements', 'success', 'motivational', 'guide', 'elementsofsuccess', 'periodictable', 'success', 'keytosuccess', 'periodictableofsuccess', 'success', 'keys', 'elements', 'become', 'great', 'elements', 'success', 'action', 'effort', 'opportunity', 'habit', 'adventure']
['facts', 'instagram', 'users', 'photos', 'filters', 'instagram', 'branding', 'marketing', 'top companies', 'filters', 'instagram', 'filters', '16billion', 'hashtag', 'nike', 'instagram', 'facts', '130million', 'users', 'photos', 'instagram', 'infographic', 'photos', 'ivesaquino', 'facts', 'instagramfacts', 'instagrampopularity', 'instagramismorefun', 'promotinginstagram', 'funfactsoninstagram', 'ivesaquino', 'instagram', 'users', 'topbrands', 'starbucks', 'instagram', 'socialmedia', 'photography', 'ivesquino', 'infographic', 'social media', 'instagram', 'photos', 'videos', 'branding', 'instagramfacts', 'photospersecond', 'instadvertisment', 'billionsofphotes', 'millionsofusers', 'Instagram', 'Facts', 'Photos', '130 Million', 'Uploaded', 'pictures', 'doubleTap', 'Insta', 'Upload', 'Share', 'instagram', 'instagramfacts', 'instagrammarketing', 'aboutinstagram', 'instagood', 'InstaFacts', 'InstagramBranding', 'InstagramStats', 'Statistics', 'LotsOfUsers']
['zombies', 'apocalypse', 'danger', 'zombie type', 'chart', 'zombie', 'danger', 'movies', 'funny', 'undead', 'zombie', 'livingdead', 'danger', 'diseased', 'movies', 'zombies', 'yahoo movies', 'horror', 'films', 'undead', 'zombies', 'horror', 'george romero', 'walking dead', 'monsters', 'zombie', 'apocalypse', 'undead', 'zombie movies', 'zombie intelligence', 'zombie', 'zombiesurvival', 'yahoomovies', 'horror', 'evildead', 'zombie', 'walkingdead', 'combat', 'gamingdead', 'zombiegame', 'danger', 'zombie', 'axis', 'movies', 'yahoo', 'zombies', 'zombie movies', 'zombie apocalypse', 'zombie chart', 'chart', 'horror movies', 'zombie', 'apocalypse', 'scary', 'undead', 'Dangerous', 'Zombie', 'Smart', 'Dumb', 'Slow', 'Fast', 'zombie', 'apocalypse', 'horror', 'scary', 'undead', 'zombies', 'danger', 'apocalypse', 'run', 'zombiesafety', 'zombiefacts', 'nomorezombies', 'endzombies', 'arezombiesweird', 'idkillazombie', 'zombies', 'danger', 'livingdead', 'yahoomovies', 'undead', 'zombie danger', 'dangerous zombies', 'zombie types', 'zombies in tv', 'zombies in movies', 'zombies', 'brains', 'horror', 'dead', 'headshots', 'ZombiesOnlyWantYouForYourBrains', 'ZombieDanger', 'SlowVSFast', 'SmartVSDumb', 'ZombieLove', 'zombie', 'smartvdangerous', 'dawnofthedead', 'shaunofthedead', 'survival']
['Choices', 'Limo', 'Service', 'Bentley', 'Hummer', 'Wedding', ' Grouptransportation', 'Tips', 'wedding', 'limousine', 'tips', 'budget', 'car', 'wedding', 'limo', 'limousine', 'vehicles', 'rental', 'tips', 'wedding', 'limo', 'whiteroselimo', 'transportation', 'bridalparty', 'limo', ' long car', ' fancy wedding', 'be jealou', ' cheap deals', 'limo', 'service', 'bestchoice', 'tips', 'wedding', 'wedding', 'limousine', 'tips', 'cars', 'brides', 'weddinglimo', 'hitchedrides', 'limostyle', 'limolife', 'Imgettingmarried', 'wedding limousine', 'perfect wedding', 'style limo', 'size limo', 'usage limo', 'poshride', 'limousine', 'stylin', 'getbooked', 'weddingarrival', 'wedding', 'limo', 'style', 'budget', 'justmarried', 'wedding', 'limo', 'marriage', 'romantic', 'ride', 'justmarried', 'Wedding', 'Limousine', 'Car', 'Tips', 'udget', 'wedding', 'limousine', 'transportation', 'classy', 'budgetfriendly', 'wedding', 'limousine', 'tips', 'Bentley', 'Hummer', 'Wedding', 'Limousine', 'tips', 'Passengers', 'Budget', 'limos', 'limousine', 'weddingplanning', 'weddingtips', 'savingmoney', 'wedding', 'bride', 'weddinglimo', 'bridalstyle', 'groomstyle', 'weddingwheels', 'limo', 'wedding', 'weddingplanning', 'infographic', 'advertising', 'Marriage', 'Tips', 'Wedding', 'Bride', 'Groom', 'Style', 'Reception', 'wedding', 'limo', 'gettinhitched', 'service', 'car', 'WEDDING', 'LIMO', 'CARS', 'RECEPTION', 'BRIDE', 'whiteroselimo', 'limo deal', 'wedding limo', 'limousine', 'budget limo', 'Getting Married', 'LIMO RIDE', 'How To', 'TraditionalVSNon-Traditional', 'budget']
['nurses', 'Malevsfemale', 'Statistics', 'facts', 'carrington', 'medical', 'Male', 'Female', 'Nurse', 'Hospital', 'Job', 'nursing', 'highereducation', 'medicine', 'health', 'jobstatistics', 'nurse', 'nurselife', 'career', 'womenwin', 'college', 'nurse', 'medical', 'gender', 'infograph', 'facts', 'nurses', 'malenurse', 'femalenurse', 'salary', 'gender', 'male vs Female', 'Nurses', 'Male earns', 'than female', 'Gaylord Focker', 'nursing', 'gender', 'salary', 'gender equality', 'pay gap', 'nurses', 'nursing', 'stereotypes', 'workforce', 'hospital', 'gendered nursing', 'nurses', 'nurse facts', 'U', 'nursing differences', 'nurses', 'male', 'female', 'job', 'degree', 'comparison', 'male nurses', 'female nurses', 'gender in nursing', ' male vs female', 'nursing gender stats', 'genderequality', 'supportnurses', 'statisticsdontlie', 'careersinnursing', 'caringforthefuture', 'nursegender', 'nursecomparison', 'generalnurse', 'carrington', 'nursing', 'TeamNurse', 'Stereotypes', 'TruthBomb', 'MaleNurse', 'ThankYou', 'SavingLives', 'Stats', 'malenurses', 'femalenurses', 'nursing', 'stats', 'stereotypes', 'nurses', 'Male', 'Female', 'Bedside Manners', 'percent of', 'nurseinfo', 'nursechallenges', 'nursegender', 'nursestats', 'notallnurses']
['water', 'conservation', 'savings', 'waste', 'household', 'renewableresources', 'waterwasted', 'waterathome', 'watersaving', 'conserve', 'water', 'water', 'savemoney', 'waseful', 'ecoimpact', 'conversation', 'waterwaste', 'home', 'savings', 'huseholds', '4billion', 'Water', 'Wasted', 'Home', 'Conserve', 'Renewable', 'water', 'waste', 'money', 'showers', 'toilet', 'water', 'waste', 'environment', 'conserve', 'home', 'sustainability', 'waterwaste', 'savings', 'shower', 'infographic', 'water', 'H20 conservation', 'reserve', 'reduce', 'green peace', 'water', 'environment', 'conserve', 'earthfriendly', 'home']
['dating', 'bases', 'chart', 'methaphorsexplained', 'sex', 'hookingup', 'hot stuff', 'sex', 'rounding the bases', 'base metaphor', 'explantion chart', 'comicstrip', 'redflag', 'basemetaphorexplained', 'oral sex', 'thirdbase', 'romance', 'hookingup', 'basemetaphor', 'diagram', 'makingout', 'comics', 'funny', 'dating humor', 'baseball', 'metaphor', 'comic', 'hookup', 'relationship', 'humor', 'bases']
['infographic', 'Ebook', 'trends', 'facts', 'libboo', 'consumers', 'ebook', 'trends', 'female', 'facebook', 'IM', 'social', 'ebooks', 'stats', 'libboo', 'infographic', 'meetgirls', 'ebook', 'book', 'reading', 'readbooks', 'amazon', 'bookinfo', 'ebook trends', 'infographic', 'ebook growth', 'buying ebooks', 'kindle', 'nook', 'ereader', 'ebook', 'kindle', 'demographics', 'literature', 'technology', 'ebook', 'amazon', 'kindle', 'reading', 'technology', 'pagesaresmelly', '1000booksinonedevice', 'readmore', 'timesaver', 'howwillpplknowwhatiamreadingthough', 'ebooktrends', 'infographic', 'libbo', 'ebooks', 'startreading']
['mouthmatters', 'facts', 'dentalhealth', 'floss', 'toothdecay', 'statistics', 'health', 'lifestyle', 'hygiene', 'mouth', 'teeth', 'teeth', 'Mouth', 'hygine', 'facts', 'dental', 'cleangrille', 'flossdaily', 'cavityfree', 'teethhistory', 'dontforgetthetongue', 'mouth', 'dentist', 'teeth', 'gingivitis', 'toothdecay', 'decay', 'oralhealth', 'brushing', 'flossing', 'saliva', 'cavity', 'floss', 'dentalcare', 'toothbrush', 'toothpaste', 'DENTAL', 'MOUTHMATTERS', 'CLEANTEETH', 'DENTIST', 'INFOGRAPHIC', 'oral hygiene', 'tooth decay', 'halitosis', 'bacterial', 'cavity', 'oral', 'mouth', 'hygiene', 'health', 'dental', 'mouth matters', 'cavity', 'floss', 'dental care', 'tooth decay', 'infographic', ' dentistry', 'mouth', 'hygiene', 'toothcare']
['Pinterest', 'Business', 'advice', 'howto', 'succeed', 'promote', 'infographic', 'pinterest', 'business', 'useful', 'promotion', 'pinterest', 'marketing', 'businesswithpinteresr', 'growyourbusiness', 'pinterestcanhelp', 'pinterest', 'savvy', 'business', 'marketing', 'money', 'pintrest', 'pintrest business', 'gcds', 'goldcast design', 'social pintrest', 'pinterest', 'business', 'socialmedia', 'sharing', 'network']
['funfacts', 'professions', 'rating', 'coffeeconsumption', 'surveyresults', 'top15', 'coffee', 'northeast', 'job', 'productive', 'statistics', 'drinking', 'coffee', 'caffeine', 'coffeebeans', 'profession', 'coffee', 'everyone', 'sogood', 'caffeine', 'icedcoffee', 'coffee', 'scientist', 'Dunkin donuts', 'starbucks', 'caffeine', 'addiction', 'coffee', 'drinkers', 'caffeine', 'whoisaddicted', 'profession', 'javapower', 'bouncingoffthewalls', 'caffeineworks', 'adcoffee', 'liquidmotivation', 'coffee', 'drink', 'habits', 'professionals', 'breakfast']
['BouquetTypes', 'Flowers', 'Styles', 'Occasions', 'SimplyBridal', 'FullfullingDreams', 'Events', 'blooming', 'bouquet', 'composite', 'biedermeier', 'posy', 'nosegay', 'bouquet', 'biedermeier', 'armsheaf', 'nosegay', 'ballerina', 'bouquets', 'flowers', 'somanycolors', 'simpleorfancy', 'longorshort', 'flowers', 'bouquet', 'gardenia', 'flora', 'wedding', 'bouquet', 'flowers', 'garden', 'wedding', 'for women', 'bouquet', 'flowers', 'ballerina', 'nosegay', ' basket', ' flowers', 'bouquet', 'color', 'beauty', 'nature', 'bouquets', 'flowers', 'flowerarrangements', 'weddings', 'weddingplanning', 'bride', 'flowers', 'bouquet', 'wedding', 'valentine', 'FlowerPower', 'BouquetGormet', 'BouquetFacts', 'FactorialPictorial', 'FlowerFacts', 'wedding', 'bouqet', 'women', 'flowers', 'design']
['gains', 'muscle', 'protein', 'training', 'diet', 'muscle', 'building', 'fast', 'Training', 'protein', 'Build Muscle', 'Training', 'Mercury TCR', 'Protein', '1000 Calories', 'musclebuilding', 'dietrules', 'ProteinIntake', 'workout', 'rest', 'Build', 'Muscle', 'Fast', 'Rest', 'Protein', 'howto', 'training', 'fitness', 'buildmuscle', 'muscle', 'power', 'protein', 'build muscle', ' muscles fast', 'muscle exercises', 'bulk up', 'training', 'muscles', 'exercise', 'bodypositive', 'health', 'training', 'buildmuscle', 'fitness', 'protein', 'workout', 'bodybuilding', 'Build', 'Muscle', 'Boost', ' Intake', 'Calories', 'exercise', 'strength', 'muscle', 'body building', 'weights', 'imouttashape', 'thiswouldhavebeengoodinfoyearsago', 'iwanttoskiptotherest', 'ineedtoworkoutagain', 'wheresthechocolate']
['green', 'environment', 'bio-gas', 'earth', 'sustainability', 'farming', 'biogasdigestor', 'cow', 'gas', 'soil', 'compost', 'digester', 'bio-gas', 'land', 'farm', 'biogasdigester', 'animals', 'garden', 'outhouse', 'fertilizer', 'bio', 'biogas', 'biogasdigester', 'farming', 'compost', 'Bio-Gas Digester', 'Reusable', 'Poop converter', 'Energy transfer', 'Poop gas', 'bio gas', 'sustainable', 'cheap', 'cooking', 'healthy', 'bio', 'gas', 'farm', 'agriculture', 'nature', 'newrules', 'newfuels', 'deadfossils', 'rebirth', 'newlife', 'POOP', 'biogas', 'environment', 'energy', 'renewable', 'fertilizer', 'infographic', 'waste', 'defecation', 'animal', 'farm', 'biogas', 'energy', 'poop', 'gas', 'fertilizer', 'defecation', 'wasteproduct', 'environment', 'green', 'clean', 'earth', 'sustainable', 'cleangas', 'farmlife', 'poo', 'waste', 'fertile', 'dirtywater']
['startup', 'funding', 'ipo', 'structure', 'business', 'fundinghistoryfacts', 'learnaboutfunding', 'fundinghistory', 'fundingstartups', 'wherefundingstarted', 'startups', 'company', 'growth', 'funding', 'investors', 'startup funding', 'graphs', 'statistics', 'pie charts', 'how to make money', 'startup', 'funding', 'angelinvestor', 'venturecapital', 'ipo', 'funding', 'startup', 'infographic', 'startupculture', 'money', 'tech', 'cash', 'investments', 'experiences', ' class groups', ' funds', 'startupfunding', 'entrepreneurship', 'charts', 'FundersandFounders', 'Business', 'startup', 'funding', 'idea', 'ipo', 'investors', 'option', 'IPA2IPO', 'fundersandfounders', 'splitthepie', 'investnow', '100', 'startup funding', 'funders and founders', 'splitting the pie', 'ipo', 'stock', 'infographic', 'startups', 'funding', 'investing', 'money']
['summer', 'facts', 'pests', 'grill', 'fun', 'summer', 'funinthesun', 'paris', 'USA', 'BBQ', 'Summer', 'Fun', 'Facts', 'Replacement', 'Parts', 'summer', 'outdoors', 'bugs', 'sun', 'barbeque', 'replacementparts', 'summerfunfacts', 'haveafunsummer', 'whatdidyoudothissummer', 'comehavefun', 'summer', 'funfacts', 'solstice', 'icecream', 'grills', 'summer', 'fun', 'facts', 'learn', 'information', 'seasons', 'summer', 'funfacts', 'summerfun', 'solstice', 'eiffeltowergrowth', 'mosquitos', 'frisbeefun', 'icecream', 'icepops', 'hemispheres', 'grilling', 'Summer', 'Grilling', 'Sunny', 'Food', 'Travel', 'summer', 'facts', 'obscure', 'ice cream', 'grilling', 'summer', 'fun', 'facts', 'fun facts', 'sunshine', 'outdoors', 'summer', 'fun', 'facts', 'solstice', 'activites', 'summer', 'facts', 'funfacts', 'replacementparts', 'parkrideflyusa']
['exercise', 'mental', 'health', 'benefits', 'facts', 'exercise', 'benefits', 'feelbetter', 'health', 'workout', 'mental', 'psychology', 'moodboost', 'exercise', 'benefits', 'exercise', 'health', 'mood', 'endorphins', 'depression', 'exercise', 'health', 'mood', 'fitness', 'brain', 'exercise', 'mental health', 'mood booster', 'health', 'physical health', 'exercise', 'mind', 'health', 'benefits', 'workout', 'discipline', 'health', 'fitness', 'preventsheartdisease', 'reducestress', 'improvemood', 'brain', 'exercise', 'mentalhealth', 'healthy', 'gym', 'wellness', 'selfcare', 'letsgetphysical', 'mentalhealth', 'breathein', 'breatheout', 'feelgoodhormones', 'staypositive', 'mentalexercise', 'brainfitness', 'brainbenefits', 'mentaldiscipline', 'mindcontrol']
['social media', 'networking', 'marketing', 'statistics', 'figures', 'media', '500', 'social', 'statistics', 'facebook', 'socialmedia', '1billion', 'facebook', 'moms', 'blogger', 'socialmediarules', 'onlywithsocialmedia', 'making', 'getwiththeage', 'socialmediasuccess', 'socialmedia', 'statistics', 'usage', 'facebook', 'twitter', 'blogs', 'emerge', 'SocialMedia', 'Statistics', 'Users', 'Facebook', 'Twitter']
['resume', 'applications', 'funny', 'mistakes', 'cv', 'resumemistakes', 'funnyresume', 'funnymistakes', 'nothired', 'unemployable', 'humor', 'resume', 'job', 'list', 'mistakes', 'Resume Mistakes', 'Funny', 'Humor', 'Top Ten', 'comedy', 'resume', 'coverletter', 'mistakes', 'jobs', 'top10', 'lol', 'fail', 'resumefail', 'adulting', 'whatnottodo', 'resumemistakes', 'mistakes', 'humor', 'careerjourney', 'topten', 'resume', 'humor', 'cv', 'employment', 'job', 'hr', 'application', 'proofread', 'funnyresumes', 'funnywriting', 'funny', 'jokes', 'smile', 'resume', 'errors', 'misspelled', 'noaction', 'nojob', 'cv', 'resume', 'funny', 'mistakes', 'resumemistakes', 'career', 'applications', 'top10', 'resume', 'mistakes', 'funny', ' business', 'funnymistakesonresumes', 'whatnottowriteonresusmes', 'realbutfunnyfqctsonresumes', 'top10funniestmistakesonresumes', 'carefulondoingresumes', 'top10', 'funny', 'crv', 'resume', 'list', 'resumegoals', 'dontmakethesemistakes', 'howtodoyourresume', 'dontforgetthedetails', 'doitright', 'resumeoops', 'resumeblunders', 'doingitwrong', 'nojoboffer', 'dontgethired', 'resume', 'CV', 'mistakes', 'fuuny', 'Top10']
['hunger', 'facts', 'america', 'social issues', 'statistics', '10facts', 'hunger', 'america', 'unitedstates', 'numbers', 'hunger', 'needychildren', 'kids', 'help', 'donate', 'hunger', 'statistics', 'feeding america', 'philanthropy', 'food', 'hungerinamerica', 'infograph', 'facts', 'children', 'suffering', 'hunger', 'facts', 'america', 'lovewithfood', 'feedingamerica', 'hunger', 'America', '10 facts', 'poverty', 'education', 'hunger', 'america', 'statistics', 'food', 'foodinsecurity', 'foodpantry']
['birds', 'feeding', 'identification', 'facts', 'foods', 'birds', 'quickbirdchart', 'birdfeeding', 'chart', 'quickid', 'Quick', 'Bird', 'ID', 'Feeding', 'Chart', 'bird', 'feed', 'uk', 'wildlife', 'pretty', 'IDbirds', 'UKgardenbirds', 'Feedthebirds', 'HangingFeeder', 'GroundFeeder', 'VineHouseFarmBirdFeeders', 'birds', 'feeding', 'birdfoods', 'wildlife', 'animalnutrition', 'birds', 'feeding', 'hobbies', 'greenfinch', 'wren', 'pigeon', 'food', 'birds', 'nature', 'identification', 'UKbirds', 'birdfeeding', 'birdid', 'feedthebird', 'starling', 'robin', 'wren', 'bird', 'identification', 'birdfeed', 'chart', 'types', 'wildlife', 'birds', 'bird feed', 'chart', 'bird watching', 'bird identifying', 'nature', 'birds', 'nature', 'blackbird', 'seeds', 'nuts', 'bird id', 'vinehousefarm', 'feeding birds', 'bird chrt', 'the wildlife trust', 'birds', 'feeding chart', 'UK Birds', 'vinehousefarm', 'birdID', 'bird', 'feeding', 'wings', 'moult', 'plumage', 'tail', 'seeds', 'Bird ID', 'Bird feeding', 'www', 'UK birds', 'Blackbird', 'Bluetit']
['coffee', 'guide', 'macchiato', 'espresso', 'cappuccino', 'coffee', 'sugar', 'drink', 'cuban', 'decaf', 'Coffee', 'Drinks', 'Guide', 'Pictograph', 'expresso', 'coffee', 'guide', 'diagram', 'espresso', 'latte', 'mocha', 'coffee', 'venn diagram', 'guide', 'mug', 'infograph', 'COFFEE', 'DECAF', 'DRINKS', 'ESPRESSO', 'CHART', 'coffee', 'espresso', 'latte', 'cappuccino', 'milk', 'coffee', 'espresso', 'mocha', 'drinks', 'recipe', 'Coffee', 'Guides', 'Drinks', 'Milk', 'Cappuccinno', 'Latte', 'Espresso', 'Americano', 'Water', 'Macchiato', 'ilikecoffeewithmymilk', 'whatsyourflavor', 'guidetocoffeedrinks', 'coffeenewbie', 'gimmethegodstuff', 'coffee', 'guide', 'lifehack', 'ingredients', 'doneeasy', 'supersimple', 'coffee', 'triple shot', 'cappuccino', 'macchiato', 'soy milk', 'Drinks', 'Coffee', 'Guide', 'Milk', 'Espresso', 'Cappuchino', 'Water']
['football', 'premiereleague', 'soccer', 'EnglishFootball', 'Liverpool', 'football', 'clubs', 'Liverpool', 'FootballLeague', 'England', 'sports', 'football', 'trophies', 'chart', 'clubs', 'English football clubs', 'www', 'Peter Scarks Design', 'European Football', 'Liverpool', 'football', 'soccer', 'England', 'Liverpool', 'Arsenal', 'ManUnited', 'Info', 'Stats', 'Graphs', 'englishfootball', 'liverpool', 'manunited', 'arsenal', 'astonvilla', 'football', 'clubs', 'liverpool', 'soccer', 'successful', 'football', 'english', 'liverpool', 'manchester united', 'arsenal', 'englishfootball', 'soccor', 'topfive', 'liverpool', 'sports', 'epl', 'arsenal', 'manu', 'liverpool', 'westham', 'football', 'success', 'englishsoccer', 'liverpoolthebest', 'gosoccer', 'football', ' successful', 'europe', 'league', ' liverpool', 'EnglishFootball', 'Top5', 'Liverpool', 'ManUnited', 'Arsenal', 'Astonvilla', 'football', 'footballcub', 'english', 'englishfootball', 'soccernotfootball', 'top5', 'football', 'soccer', 'clubs', 'englishsoccer', 'SOCCER', 'SPORTS', 'CLUBS', 'TOP', 'WIN', 'stillhavetodecideifitsfootballorsoccer', 'neverwatchedawholegame', 'didntknowtheywerecalledclubs', 'soccerisagoodworkout', 'soccerdad']
['Calories', 'FitFam', 'Exercise', 'WeightLoss', 'Fitness', 'health', 'calories', 'work', 'jobs', 'workout', 'gethealthy', 'calories', 'workout', 'exercise', 'fitbit', 'running', 'active', 'PE', 'school', 'Health', 'exercising', 'workouts', 'burn calories', 'calorie burn', 'daily burn', 'working burn', 'retail burn', 'top burners', 'fitbit', 'burncalories', 'work', 'fitbit', 'activity', 'yoga', 'cycling', 'running', 'fitness', 'work', 'fitbit', 'burningcalories', 'toughjobs', 'calories', 'job', 'work', 'burn', 'fitbit', 'calories', 'burn', 'work', 'exercise', 'fitbit']
['wine', 'beer', 'alcohol', 'calories', 'drinking', 'Alcohol', 'Wine', 'Beer', 'WineFolly', 'DrinkResponsibly', 'wine', 'beer', 'alcoholbenefits', 'winefolly', 'health', 'winevsbeer', 'drinkers', 'wine', 'beer', 'healthbenefits', 'alcohol', 'wine', 'beer', 'beverage', 'health', 'drinking', 'winevsbeer', 'healthbenefit', 'calories', 'study', 'winefolly', 'vinoandbrew', 'wineisbetter', 'beerisbetter', 'drinkingvs', 'whattodrink', 'BOOZE', 'WINE', 'BEER', 'WINEVSBEER', 'DRINKUP', 'wine', 'beer', 'calories', 'healthbenefits', 'winefolly', 'winevsbeer', 'drinkersvsnondrinkers', 'countcarbbs', 'countcalories', 'drinkingadvantages', 'winerules', 'beerdrools', 'beerforlife', 'beermaster', 'winelife', 'alcohol', 'wineisbetterthanbeer', 'beerisbetterthanwine', 'wine', 'beer']
['space', 'solar', 'environment', 'science', 'IFLS', 'solar panels', 'elements capital group', 'fossil fuels', 'Solar powered', 'solar energy', 'solar', 'solarpanels', 'savemoney', 'gogreen', 'sustainable', 'solar', 'energy', 'MoneySmart', 'sustainability', 'Elements', 'solar', 'planets', 'nasa', 'funding', 'outthere', 'solar', 'sun', 'solarpanels', 'elementscaptialgroup', 'cleanenergy', 'Solar', 'Panels', 'Future', 'Energy', 'Saves', 'solarpanel', 'futuristic', 'solar-poweredeverything', 'efficiency', 'sustainable', 'sun', 'solar', 'solarenergy', 'gogreen', 'solarpower', 'solar panels', 'save money', 'future', 'environment', 'greenhouse gas', 'greenliving', 'future', 'infographics', 'data', 'facts', 'solar', 'panels', 'energy', 'savingmoney', 'sustainable', 'solar', 'stars', 'sun', 'energy', 'savings', 'solarpanels', 'green', 'futuristic', 'solarenergy', 'savemoney', 'solarpanels', 'green', 'low', 'save', 'boost', 'sunnylife', 'beasun', 'gogreen', 'ecofriendly', 'hipsterstatus', 'Sun', 'SolarPanels', 'PropertyValues', 'RenewableEnergy', 'SolarPower', 'space', 'science', 'universe', 'solar', 'power', 'solar panels', 'solar system', 'ecofriendly', 'solar power', 'energy', 'solar panels', 'green energy', 'electricity', 'low cost', 'conservation', 'solar', 'savemoney', 'sustainable', 'energy', 'power', 'solarenergy', 'solarenergyfacts', 'conserveenergy', 'gosolar', 'solarpanels', 'solarsystem', 'sun', 'astronomy', 'stars', 'planets', 'solarpanel', 'solar', 'energy', 'green', 'save', 'savemoney', 'solar', 'futuristic', 'energy', 'save', 'power', 'solarenergy', 'solarfacts', 'cleanenergy', 'solarsaves', 'solaristhefuture']
['tech', 'apple', 'iPhone', 'iMac', 'stevejobs', 'iosversion', 'iostimeline', 'timeline', 'apple', 'ios', 'iOS', 'Timeline', 'History', 'phone', 'iPhone', 'Apple', 'ios', 'apple', 'mac', 'iphone', 'ipod', 'technology', 'iOS History', 'iOS timeline', 'iOS 1', 'iOS 6', 'Apple iOS', 'iphone', 'ios', 'smart device', ' criteria', 'apple', 'ios', 'history', 'timeline', 'apple', 'iphone', 'ios', 'apple', 'itunes', 'smartphone', 'appstore', 'Visual Timeline', 'Apple Milestones', 'Facetime', 'Ipad', 'Ipod', 'iphone', 'apple', 'technology', 'evolution', 'advancement', 'ioshistogram', 'iosfacts', 'iostime', 'iosevolve', 'iosversions']
['LOL', 'LeagueofLegends', 'games', 'gamers', 'fantasy', 'gamer', 'esports', 'esportstournament', 'leagueoflegends', 'gamertournament', 'leagueoflegends', 'lol', 'lolseason3', 'leagueoflegendsseason3', 'diamondleague', 'leageofledgens', 'ledgends', 'gaming', 'games', 'LOL', 'leaguestystem', 'LoL', 'leagueoflegends', 'ranking', 'competitivegaming', 'gamers', 'Season', 'League', 'Legends', 'Ranked', 'System', 'leagueoflegends', 'lol', 'competitiveplay', 'esports', 'riotgames', 'league', 'legends', 'tournament', 'weapon', 'military', 'computer', 'gaming', 'characters', 'community', 'rankings', 'lol', 'leagues', 'game', 'fun', 'competition', 'league of legends', 'season3', 'League system', 'leagues', 'rpg', 'league', 'season3', 'compete', 'propath', 'tiers']
['chocolate', 'sweets', 'nutrition', 'education', 'sweet', 'facts', 'chocolate', 'mythbusting', 'information', 'knowledge', 'chocolate', 'chocolatelover', 'chocoholics', 'fun facts', 'candy', 'sugar', 'chocolate', 'myth', 'fact', 'health', 'sugar', 'factsaboutchocolate', 'mythsaboutchocolate', 'whattoknowaboutchocolate', 'chocolate', 'chocomania', 'chocolatemyths', 'chocolatefacts', 'chocolate', 'chocomania', 'chocolicious', 'Chocolicious', 'Eats', 'ChocoFacts', 'Chocomania', 'Good4U', '7', 'Facts', 'Myths', 'about', 'Chocolate', 'Facts', 'myths', 'chocolate', 'cholesterol', 'caffeine', 'cavities', 'stress', 'acne', 'chocolate', 'chocoholics', 'gourmet', 'candy', 'delicious', 'chocolate', 'holidays', 'christmas', 'valentines', 'myths', 'chocolicious', 'chocolate', 'unsweetened', 'eyecandy', 'dairy free']
['facts', 'funfacts', 'cities', 'states', 'geography', 'uscities', 'biggestcities', 'citycensus', 'cityarea', 'citysize', '20biggest', 'states', 'usa', 'statistics', 'biggest', 'US Data', 'biggest cities', 'uxblog', 'fun facts', 'US statistics', 'maps', 'metrics', ' biggest', 'facts', 'learn', '20biggest', 'cities', 'sitka', 'kansascity', 'LA', 'big', 'spacious', 'city', 'unitedstates', 'moving', 'cities', 'population', 'big', 'unitedstates', 'travel', 'ranking', 'surprising', 'Biggest Cities', 'United States', 'Census', 'US Cities', 'Ranked Cities']
['marketing', 'contentmarketing', 'sidehustle', 'business', 'money', 'contentmarketing', 'matrix', 'awareness', 'purchasing', 'marketinggoals', 'smartinsights', 'rational', 'socialmedia', 'marketing', 'business', 'ecommerce', 'first10', 'content marketing', 'games', 'matrix', 'forums', 'articles', 'content marketing', 'inspire', 'convince', 'educate', 'entertain', 'marketing', 'matrix', 'guide', 'chart', 'finance', 'marketing', 'brand', 'goals', 'content', 'advertising', 'Content', 'Marketing', 'First10', 'Marketing', 'Awarness', 'Purchase', 'content', 'marketing', 'matrix', 'awareness', 'emotional', 'rational', 'purchase', 'marketing', 'smartinsights', 'marketing', 'strategy', 'content', 'awareness', 'purchase', 'product', 'marketing', 'first10', 'smartinsights', 'awarenesspurchase', 'emtionalrational']
['android', 'google', 'phones', 'tech', 'smartphone', 'android', 'apps', 'androidapps', 'androidhistory', 'androiddevices', 'android', 'google', 'linux', 'history', 'technology', 'OS systems', 'android', 'timeline', 'history', 'smartphone', 'tech', 'android', 'history', 'timeline', 'distribution', 'spice', 'android', 'history', 'milestones', 'versions', 'devices', 'android', 'history', 'technology', 'change', 'operatingsystems', 'andriod', 'andriod history', 'started2003', 'food updates', 'enhancements', 'android', 'history', 'infographic', 'distribution', 'devices', 'android', 'mobile', 'google', 'technology', 'spice', 'Android', 'Google', 'History', 'Cellphone', 'linux', 'Android', 'Google', 'bluetooth', 'SDK', 'Gingerbread']
['autoinsurance', 'insurancefacts', 'enhanceinsurance', 'insuranceinfo', 'drivingstatistics', 'insurance', 'automobile', 'facts', 'pictograph', 'cars', 'vehicles', 'autoinsurance', 'coverage', 'accident', 'enhanceinsurance', 'investment', 'cars', 'insurance', 'auto insurance', 'car insurance', 'state-by-state', 'auto', 'cars', 'insurance', 'costly', 'faqs', 'cars', 'insurance', 'usa', 'red', 'michigan', 'Automobile Insurance', 'Facts', '50 States', 'Stop', 'Motorcycle', 'automobiles', 'cars', 'facts', 'insurance', 'statistics', 'automobile', 'insurance', 'red', 'car', 'state', 'insurance', 'automobile', 'top', 'facts', 'statistics', 'insurance', 'claims', 'policy', 'safety', 'speeding', 'Insurance', 'Security', 'Safety', 'Automobile', 'Facts', 'car', 'insurance', 'infographic', 'automobile', 'nhtsa', 'facts', 'US', 'Automobile', 'Insurance', 'Red Cars', '50 States', 'Speed', 'Insurance', 'Automobile', ' Cars', ' States', ' Speed', 'auto insurance', 'uninsured', 'insurance facts', 'red cars', 'ehance insurance']
['writingtips', 'writingadvice', 'contenttips', 'content101', 'writingstyle', 'writeonsocialmedia', 'kingofsocialmedia', 'socialmediawriting', 'facebookwriter', 'kingofwritingonsocialmedia', 'writing', 'content', 'story', 'grammar', 'blogs', 'content', 'writing', 'style', 'story', 'context', 'inspire', 'schooling', 'understandingyou', 'getgood', 'study', 'content', 'writing', 'tips', ' work', ' graphics', 'cartoons', 'content', 'original', 'writing', 'social media', 'blog', 'writewithcontent', 'knowyourwriting', 'learntowritebetter', 'writingtips', 'writebetterthenthecompetition']
['hairremoval', 'foreversmooth', 'noshaving', 'laserremoval', 'nevershave', 'doctor', 'laser', 'medical', 'information', 'hair removal', 'Laser', 'Hair', 'Removal', 'Energy', 'Treatments', 'FrickenLaserbeams', 'Hairy', 'HowTo', 'Beauty', 'HowItWorks', 'DRTATOFF', 'laser', 'hair', 'removal', 'treatments', 'information', 'hair removal', 'laser', 'treatments', 'doctors', 'no hair', 'Dr', 'Laser', 'Hair Removal', 'Funnel Incorporated', 'Bye Tanning', 'laser', 'hair', 'removal', 'method', 'treatment', 'hairy', 'lasers', 'hairremoval', 'smooth', 'noshaving', 'RemoveThatHair', 'ThatHairTho', 'HairRemoval', 'DrTattoff', 'LaserHairRemoval', 'hairremoval', 'laserhairremoval', 'whylasersforhairremoval', 'drtattoffhairremoval', 'hairremovalwhattoavoid']
['nursingfacts', 'nursinginfo', 'nursesworld', 'aboutnursing', 'nursing', 'nurs', 'fact', 'sick', 'information', 'biohazard', 'nursing', 'around the world', 'overtime', 'doctors', 'hospital', 'nursing', 'nurses', 'around the world', 'medicine', 'nursing facts', 'nursing', 'facts', 'medical', 'RN', 'global', 'health', 'nursing', 'medicene', 'scrubs', 'international', 'nursing', 'interestingfacts', 'culture', 'scrubs', 'diversity', 'Nursing', 'Interesting', '16 Facts', 'Scrubsmag', 'World', 'TruthBomb', 'WorldFacts', 'Stats', 'Healthcare', 'Schooling', 'MedicalSchool', 'nursing facts', 'Vietnam', 'Mexico', 'China', 'Australia', 'nurses', 'nursing', 'healthcare', 'patients', 'trends', 'statistics', 'International nursing', 'Scrubsmag', 'Nurse facts', 'Nursing taboos', 'RN']
['worldmining', 'mining', 'topmining', 'miningdata', 'miningfacts', 'mining', 'gdp', 'mineral reserves', 'hyrdralok', 'coal', 'miningcountries', 'worldwidemining', 'mining', 'mininggdp', 'miningstats', 'miningcompanies', 'minedminerals', 'GDP', 'Mining Companies', 'Hydralok', 'World', 'BHP Billiton', 'TOP5', 'countries', 'minning', 'laborjob', 'minerals', 'countries', 'worldwide', 'global', 'wealth', 'equality', 'mining', 'energy', 'minerals', 'global', 'statistics', 'Mining Countries', 'Companies', 'Reserves', 'Facts', 'Minerals', 'mining', 'countries', 'citygold', 'copper', 'coal', 'best', 'mining', 'statistics', 'hydralok', 'industry', 'mining', 'gdp', 'global', 'policy', 'resources', 'mine', ' mineral', ' map', ' areas', ' numbers', 'miningcompanies', 'topfive', 'GDP', 'minerals', 'mininfacts', 'Mining', 'TopMiners', 'MineSouthAfrica', 'MineralReserves', 'PlatinumWins', 'gross domestic product', 'gdp', 'gdp map', 'world map', 'mining', 'MiningBusiness', 'MotherEarth', 'TruthBomb', 'FunFact', 'Stats', 'BigBusiness', 'miningcountries', 'worldwide', 'mineralreserves', 'GDP', 'economy']
['latency', 'latencydata', 'lowlatency', 'latencyfacts', 'latencyindustry', 'latency', 'RTD', 'internet', 'speed', 'finance', 'latency', 'it', 'web traffic', 'internet speed', 'internet', 'finances', 'latency', 'networks', 'wallstreet', 'staylow', 'lowlatency', 'networking', 'wallstreet', 'brokers', 'internet', 'low latency', 'online gaming', 'Cloudgaming', 'critical', 'datasets', 'real time', 'Network', 'Speed', 'Information', 'Performance', 'Latency', 'cloud', 'network', 'lowlatency', 'data', 'performance', 'Networks', 'LowLatency', 'WallStreet', 'Speedy', 'NeedSpeed', 'CriticalNetwork', 'latency', 'networks', 'low', 'industry', 'education', 'online', 'gaming', 'Wall Street', 'Latency', ' Networking', 'Learning', 'Computers', 'evolution', 'Changes', 'networking', 'data', 'info', 'latency', 'adhoc', 'lowlatency', 'networks', 'performance', 'cloud', 'userexperience', 'LowLatencyNetworking', 'HighTech', 'Homebusiness', 'FutureTechnology', 'SecretsOfSuccess', 'networks', 'Latency', 'technology', 'infographic', 'networksolutions']
['youtube', 'search', 'youtubesearch', 'aboutyoutube', 'youtubefacts', 'youtubesimpact', 'youtubedtoday', 'allyoutubeeverything', 'whyyoutuberules', 'youtubeandyou', 'youloveyoutube', 'youtube', 'infographic', 'searchengine', 'videos', 'social', 'you tube', ' search engine', ' number2', '3billion searches month', 'play', 'youtube', 'history', 'infographic', 'facts', 'video streaming', 'search engine', 'searchthis', 'ilovetosearch', 'searchlife', 'searchqueen', 'searchking', 'youtube', ' searchengine', 'video', 'searching', 'growing']
['socialmedia', 'business', 'businesswebsites', 'marketing', 'webhosting', 'business', 'internet', 'socialmedia', 'twitter', 'facebook', 'website', 'SocialMedia', 'business', 'info', 'Aware', 'socialmedia', 'availability', 'costeffective', 'advantages', 'businesses', 'socialmedia', 'businesses', 'products', 'brands', 'marketing', 'socialmedia', 'business', 'commerce', 'ecommerce', 'businessontheweb', 'socialmedia', 'benefits', 'promos', 'coupons', 'followers', 'Niche Markets', 'business profile', 'advertising', 'getthewordout', 'businesswebsite', 'socialmedia', 'makingmoney', 'social media', 'website alternatives', 'website disadvantages', 'website advantages', 'business chart', 'businesswebsites', 'socialmedia', 'Webhosting', 'website', 'websiteadvantage', 'social media for business', 'social networks', 'SEO', 'marketing', 'online', 'business', 'scoialmedia', 'websites', 'increasetraffic', 'favorableperception', 'nichemarkets', 'businessmarketing', 'SocialMedia', 'Business', 'Websites', 'Benefits', 'CostEffective']
['iphone', 'facts', 'smartphone', 'ebay', 'photos', 'technology', 'apple', 'iphone', 'facts', 'informative', 'iphone', 'facts', 'apple', 'ebay', 'money', 'iPhone', 'phonefacts', 'smartphone', 'iPhonefacts', 'iPhoneevolution', 'iPhone', ' fun', 'AppStore', 'ebay', 'iPhoneography', 'iphonerules', 'commandingiphonereality', 'funifacts', 'iphonetexts', 'howapplechangedus', 'iPhone', 'iOS', 'Texting', 'Stats', 'Music', 'FunFacts', 'apple', 'iphone', 'ios', 'technologyrevolution', 'revolutionary', 'iphone', 'texting', 'appstore', 'ebay', 'smartphone', 'patents', 'iphone', 'mobile', 'smartphone', 'technology', 'apps', 'iphone', 'funfacts', 'apple', 'innovation', 'greenpower', '200patents', 'IPHONE', 'FACTORCRAP', 'FACT', 'LEARN', 'NEWWAYS']
['bodyimage', 'selfworth', 'stats', 'media', 'eatingdisorders', 'bodyimage', 'selflove', 'findyourbeauty', 'famalestats', 'innerhealth', 'body', 'image', 'statistics', 'women', 'woman', 'BodyImage', 'Health', 'AverageWomen', 'WomenStatistics', 'Informational', 'bodyimage', 'women', 'information', 'findyourbeauty', 'statistics', 'women', 'body', 'bodyimage', 'mental', 'mentalhealth', 'imageryofwomen', 'noticethefemalefacts', 'viewingwomen', 'imagestatsofoursociety', 'noticethemnottheirpounds', 'bodyimage', 'beauty', 'selfimage', 'loveyourself', 'realpeople', 'body image', 'statistics', 'self esteem', 'fat shame', 'female body', 'bodyimage', 'statistics', 'women', 'girls', 'television', 'movies', 'bodyimage', 'statistics', 'women', 'weight', 'findyourtruebeauty', 'body', 'statistics', 'women', 'health', 'eating disorder', 'Body', 'Image', ' Statistics', 'Girls', 'Women', 'Weight', 'Height', 'Body Image', 'Statistics', 'Women', 'Pink', 'Grey', 'Insecure', 'Thinner', 'Fat', '98', 'Diets', 'body', 'image', 'stats', 'women', 'guide', 'girls', 'bodyimage', 'bodylove', 'womenshealth', 'healthyimage', 'bmi', 'bodyimage', 'whathealthylookslike', 'wheredoifit', 'letsgetrealwomen', 'moretolove', 'body', 'image', 'bodyimage', 'fashion', 'moviestar', 'realisticbody', 'insecurity', 'women', 'womenbody', 'skinny', 'fat', 'model', 'teenagegirls', 'diet', 'anorexic', 'bulimic']
['money', 'gender', 'relationships', 'shopping', 'emotions', 'men', 'women', 'money', 'inforgraph', 'differences', 'money', 'spending', 'spendinghabits', 'spendingdifferences', 'spendingbreakdown', 'money', 'menwomen', 'sexist', 'different', 'informative', 'men', 'women', 'money', 'spendingmoney', 'moneymatters', 'spendingmoney', 'menandwomen', 'graphs', 'genders', 'differences', 'spending', 'money', 'spendingmoney', 'womenandmoney', 'menandmoney', 'retailtherapy', 'men', 'women', 'dating', 'money', 'spend cash', 'different', 'MenandWomen', 'SpendMoney', 'Different', 'Valentines', 'RetailTherapy', 'MEN', 'WOMEN', 'MONEY', 'SPEND', 'YOUORME', 'spendingmoney', 'genderpurchases', 'spending', 'retailtherapy', 'genderdemographic', 'money', 'men', 'women', 'spending', 'differences', 'money', 'genderdifferences', 'howwespend', 'spendingbysex', 'spending']
---------------------------------------------------------------------------
IndexError                                Traceback (most recent call last)
<ipython-input-129-54f3a03bb702> in <module>()
    106     # ---------------
    107 
--> 108     spot = spotlight(im,heatmap,toplot=False)
    109     plt.subplot(1,pn,3); plt.axis('off'); plt.title('Spotlight')
    110     plt.imshow(spot)

/data/graphics/SpandanGraphsProject/KimResults/spotlight.py in spotlight(im, heatmap, toplot)
     37     b=np.array([a,a,a])
     38     b=b.transpose((1,2,0))
---> 39     r_channel=singleim[:,:,0]
     40     g_channel=singleim[:,:,1]
     41     b_channel=singleim[:,:,2]

IndexError: too many indices for array
In [ ]: