In [135]:
import numpy as np
from sklearn.hmm import MultinomialHMM
import MySQLdb
import matplotlib.pyplot as plt
import pylab as pl
from nltk.tag.hmm import HiddenMarkovModelTrainer, HiddenMarkovModelTagger

In [3]:
# Normalizes the time so that the average wait time for the next review is 1. 
def normalized(time):
    review_rate = len(time)/(time[len(time)-1]-time[0])
    normalized_time = np.zeros(len(time))
    for k in range(len(time)):
        normalized_time[k] = (time[k]-time[0])*review_rate
    return normalized_time

In [87]:
def GetTrainingSet(PID, tablename, cursor):
    sql = "Select RTime, RScore From " +tablename + " Where PID = " + '"' + PID +'";'
    cursor.execute(sql)
    data = cursor.fetchall()
    data = sorted(data)
    rating = np.array(zip(*data)[1], dtype = int)
    time = np.array(zip(*data)[0], dtype = float)
    normalized_time = normalized(time)
    normalized_time
    discrete_time = np.zeros(len(time))
    #ratings 1-5, mult by 2 if short wait for a rating,
    data_encoded = np.zeros(len(time))
    #data_encoded.append('temp')
    for k in range(1, len(time)):
        #rating[k] = rating[k]-1
        if (normalized_time[k] - normalized_time[k-1])> 1:
            discrete_time[k]=2
            #data_encoded[k] = 
            #data_encoded.append('f' + str(rating[k]))  #ok let's try strings instead
        else:
            discrete_time[k]=1
            #data_encoded.append('s' + str(rating[k]))
        data_encoded[k] = rating[k]*2 - discrete_time[k]
        rating[k] = rating[k]-1
    #print discrete_time
    discrete_time[0] = discrete_time[1]
    data_encoded[0] = rating[0]*2 - discrete_time[0]
    rating[0]=rating[0]-1
    data_string = ''
    for k in range(len(time)):
        data_string = data_string + str(int(data_encoded[k]))
    return data_string, rating, time 
    #return np.column_stack([rating, discrete_time]), time

In [88]:
def running_avg(data): #now assuming rating is 1 less than actual because sklearn hmm is so dumb
    avg = np.zeros(len(data), dtype = float)
    total = 0
    for k in range(len(data)):
        #avg[k] = np.mean(data[:k])
        total += data[k]+1
        avg[k] = float(total)/float((k+1))
    return avg

In [89]:
db = MySQLdb.connect(host="localhost", user="root", db = "home_kitchen")
cursor = db.cursor()

In [90]:
tablename = 'all_hk'

In [91]:
PID1 = ' B0000X7CMQ' #zojirushi, it breaks
PID2 = ' B000GXZ2GS'  #Later input PIDs from terminal or website or whatever
PID3 = ' B000GTR2F6'
PID4 = ' B000AQSMPO'
PID5 = ' B00005MF9C'
PID6 = ' B0000E2PEI'
PID7 = ' B0006SFFAQ'
PID8 = ' B00005AQ9Q'
PID9 = ' B00005R19P'
PID10 = ' B000FFQ554'
PID11 = ' B0006ZUHR0'

In [92]:
#Getting the Data:

In [124]:
#X1, T1 = GetTrainingSet(PID1, tablename, cursor)
#print X1, T1
#X2, T2 = GetTrainingSet(PID2, tablename, cursor)
#X3, T3 = GetTrainingSet(PID3, tablename, cursor)
D1, X1, T1 = GetTrainingSet(PID1, tablename, cursor)
D2, X2, T2 = GetTrainingSet(PID2, tablename, cursor)
D3, X3, T3 = GetTrainingSet(PID3, tablename, cursor)
D4, X4, T4 = GetTrainingSet(PID4, tablename, cursor)
D5, X5, T5 = GetTrainingSet(PID5, tablename, cursor)
D6, X6, T6 = GetTrainingSet(PID6, tablename, cursor)
D7, X7, T7 = GetTrainingSet(PID7, tablename, cursor)
D8, X8, T8 = GetTrainingSet(PID8, tablename, cursor)
D9, X9, T9 = GetTrainingSet(PID9, tablename, cursor)
D10, X10, T10 = GetTrainingSet(PID10, tablename, cursor)
D11, X11, T11 = GetTrainingSet(PID11, tablename, cursor)

In [125]:
R1 = running_avg(X1)
#R2 = running_avg(X2)
#R3 = running_avg(X3)
#R4 = running_avg(X4)
#R5 = running_avg(X5)
#R6 = running_avg(X6)
#R7 = running_avg(X7)
#R8 = running_avg(X8)
#R9 = running_avg(X9)
#R10 = running_avg(X10)
#R11 = running_avg(X11)

In [126]:
#print R1

In [127]:
#print D1

In [128]:
#### HMM Time

In [129]:
n_components = 4 #? number of states in the model. I'm just guessing here.

In [130]:
states = ['a', 'b', 'c', 'd']

In [131]:
symbols = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9']

In [132]:
example = HiddenMarkovModelTrainer(states, symbols)

In [152]:
ataggermaybe = example.train_unsupervised([D1, D2, D3, D4, D5, D6, D7])


iteration 0 logprob -39577.4513225
iteration 1 logprob -31576.9896627
iteration 2 logprob -31576.9896627

In [153]:
ataggermaybe.tag(D4)


Out[153]:
[('8', 'a'),
 ('8', 'a'),
 ('8', 'a'),
 ('4', 'a'),
 ('4', 'a'),
 ('8', 'a'),
 ('8', 'a'),
 ('6', 'a'),
 ('8', 'a'),
 ('9', 'a'),
 ('8', 'a'),
 ('9', 'a'),
 ('8', 'a'),
 ('9', 'a'),
 ('6', 'a'),
 ('6', 'a'),
 ('8', 'a'),
 ('8', 'a'),
 ('8', 'a'),
 ('9', 'a'),
 ('6', 'a'),
 ('9', 'a'),
 ('8', 'a'),
 ('8', 'a'),
 ('9', 'a'),
 ('7', 'a'),
 ('9', 'a'),
 ('8', 'a'),
 ('9', 'a'),
 ('8', 'a'),
 ('6', 'a'),
 ('8', 'a'),
 ('8', 'a'),
 ('4', 'a'),
 ('8', 'a'),
 ('8', 'a'),
 ('8', 'a'),
 ('8', 'a'),
 ('9', 'a'),
 ('8', 'a'),
 ('8', 'a'),
 ('9', 'a'),
 ('8', 'a'),
 ('6', 'a'),
 ('9', 'a'),
 ('9', 'a'),
 ('9', 'a'),
 ('8', 'a'),
 ('9', 'a'),
 ('8', 'a'),
 ('6', 'a'),
 ('6', 'a'),
 ('8', 'a'),
 ('2', 'a'),
 ('8', 'a'),
 ('9', 'a'),
 ('4', 'a'),
 ('9', 'a'),
 ('9', 'a'),
 ('9', 'a'),
 ('9', 'a'),
 ('9', 'a'),
 ('8', 'a'),
 ('8', 'a'),
 ('9', 'a'),
 ('8', 'a'),
 ('8', 'a'),
 ('8', 'a'),
 ('8', 'a'),
 ('8', 'a'),
 ('8', 'a'),
 ('9', 'a'),
 ('1', 'a'),
 ('8', 'a'),
 ('8', 'a'),
 ('9', 'a'),
 ('8', 'a'),
 ('8', 'a'),
 ('5', 'a'),
 ('9', 'a'),
 ('8', 'a'),
 ('1', 'a'),
 ('9', 'a'),
 ('9', 'a'),
 ('6', 'a'),
 ('9', 'a'),
 ('9', 'a'),
 ('9', 'a'),
 ('9', 'a'),
 ('9', 'a'),
 ('9', 'a'),
 ('9', 'a'),
 ('9', 'a'),
 ('7', 'a'),
 ('3', 'a'),
 ('7', 'a'),
 ('6', 'a'),
 ('7', 'a'),
 ('9', 'a'),
 ('9', 'a'),
 ('9', 'a'),
 ('9', 'a'),
 ('9', 'a'),
 ('1', 'a'),
 ('9', 'a'),
 ('1', 'a'),
 ('7', 'a'),
 ('9', 'a'),
 ('9', 'a'),
 ('9', 'a'),
 ('9', 'a'),
 ('9', 'a'),
 ('9', 'a'),
 ('9', 'a'),
 ('9', 'a'),
 ('8', 'a'),
 ('0', 'a'),
 ('9', 'a'),
 ('9', 'a'),
 ('9', 'a'),
 ('5', 'a'),
 ('9', 'a'),
 ('9', 'a'),
 ('9', 'a'),
 ('8', 'a'),
 ('9', 'a'),
 ('9', 'a'),
 ('2', 'a'),
 ('9', 'a'),
 ('9', 'a'),
 ('9', 'a'),
 ('8', 'a'),
 ('8', 'a'),
 ('8', 'a'),
 ('9', 'a'),
 ('8', 'a'),
 ('7', 'a'),
 ('9', 'a'),
 ('8', 'a'),
 ('8', 'a'),
 ('8', 'a'),
 ('8', 'a'),
 ('9', 'a'),
 ('8', 'a'),
 ('8', 'a'),
 ('9', 'a'),
 ('9', 'a'),
 ('8', 'a'),
 ('6', 'a'),
 ('9', 'a'),
 ('6', 'a'),
 ('8', 'a'),
 ('3', 'a'),
 ('8', 'a'),
 ('1', 'a'),
 ('5', 'a'),
 ('9', 'a'),
 ('8', 'a'),
 ('8', 'a'),
 ('9', 'a'),
 ('8', 'a'),
 ('9', 'a'),
 ('9', 'a'),
 ('9', 'a'),
 ('9', 'a'),
 ('3', 'a'),
 ('7', 'a'),
 ('0', 'a'),
 ('6', 'a'),
 ('8', 'a'),
 ('6', 'a'),
 ('7', 'a'),
 ('8', 'a'),
 ('8', 'a'),
 ('8', 'a'),
 ('9', 'a'),
 ('9', 'a'),
 ('9', 'a'),
 ('6', 'a'),
 ('9', 'a'),
 ('6', 'a'),
 ('8', 'a'),
 ('9', 'a'),
 ('9', 'a'),
 ('8', 'a'),
 ('6', 'a'),
 ('8', 'a'),
 ('8', 'a'),
 ('9', 'a'),
 ('7', 'a'),
 ('8', 'a'),
 ('0', 'a'),
 ('8', 'a'),
 ('0', 'a'),
 ('7', 'a'),
 ('8', 'a'),
 ('6', 'a'),
 ('8', 'a'),
 ('9', 'a'),
 ('4', 'a'),
 ('7', 'a'),
 ('4', 'a'),
 ('6', 'a'),
 ('8', 'a'),
 ('6', 'a'),
 ('9', 'a'),
 ('3', 'a'),
 ('9', 'a'),
 ('9', 'a'),
 ('8', 'a'),
 ('8', 'a'),
 ('8', 'a'),
 ('8', 'a'),
 ('9', 'a'),
 ('4', 'a'),
 ('9', 'a'),
 ('8', 'a'),
 ('7', 'a'),
 ('9', 'a'),
 ('9', 'a'),
 ('8', 'a'),
 ('5', 'a'),
 ('6', 'a'),
 ('8', 'a'),
 ('9', 'a'),
 ('9', 'a'),
 ('0', 'a'),
 ('2', 'a'),
 ('8', 'a'),
 ('8', 'a'),
 ('8', 'a'),
 ('9', 'a'),
 ('9', 'a'),
 ('4', 'a'),
 ('9', 'a'),
 ('9', 'a'),
 ('9', 'a'),
 ('9', 'a'),
 ('8', 'a'),
 ('9', 'a'),
 ('7', 'a'),
 ('9', 'a'),
 ('9', 'a'),
 ('8', 'a'),
 ('9', 'a'),
 ('0', 'a'),
 ('5', 'a'),
 ('7', 'a'),
 ('9', 'a'),
 ('9', 'a'),
 ('9', 'a'),
 ('6', 'a'),
 ('6', 'a'),
 ('9', 'a'),
 ('3', 'a'),
 ('9', 'a'),
 ('8', 'a'),
 ('9', 'a'),
 ('9', 'a'),
 ('7', 'a'),
 ('9', 'a'),
 ('3', 'a'),
 ('9', 'a'),
 ('9', 'a'),
 ('8', 'a'),
 ('8', 'a'),
 ('7', 'a'),
 ('9', 'a'),
 ('1', 'a'),
 ('9', 'a'),
 ('6', 'a'),
 ('9', 'a'),
 ('9', 'a'),
 ('7', 'a'),
 ('7', 'a'),
 ('5', 'a'),
 ('9', 'a'),
 ('4', 'a'),
 ('9', 'a'),
 ('9', 'a'),
 ('9', 'a'),
 ('9', 'a'),
 ('8', 'a'),
 ('7', 'a'),
 ('9', 'a'),
 ('9', 'a'),
 ('8', 'a'),
 ('9', 'a'),
 ('9', 'a'),
 ('9', 'a'),
 ('9', 'a'),
 ('7', 'a'),
 ('8', 'a'),
 ('9', 'a'),
 ('8', 'a'),
 ('6', 'a'),
 ('7', 'a'),
 ('9', 'a'),
 ('9', 'a'),
 ('9', 'a'),
 ('9', 'a'),
 ('3', 'a'),
 ('9', 'a'),
 ('8', 'a'),
 ('6', 'a'),
 ('8', 'a'),
 ('4', 'a'),
 ('9', 'a'),
 ('9', 'a'),
 ('9', 'a'),
 ('9', 'a'),
 ('7', 'a'),
 ('9', 'a'),
 ('4', 'a'),
 ('8', 'a'),
 ('6', 'a'),
 ('9', 'a'),
 ('6', 'a'),
 ('9', 'a'),
 ('8', 'a'),
 ('4', 'a'),
 ('8', 'a'),
 ('2', 'a'),
 ('8', 'a'),
 ('9', 'a'),
 ('6', 'a'),
 ('8', 'a'),
 ('8', 'a'),
 ('6', 'a'),
 ('9', 'a'),
 ('9', 'a'),
 ('9', 'a'),
 ('3', 'a'),
 ('9', 'a'),
 ('0', 'a'),
 ('9', 'a'),
 ('8', 'a'),
 ('8', 'a'),
 ('3', 'a'),
 ('9', 'a'),
 ('8', 'a'),
 ('8', 'a'),
 ('9', 'a'),
 ('8', 'a'),
 ('8', 'a'),
 ('0', 'a'),
 ('8', 'a'),
 ('8', 'a'),
 ('8', 'a'),
 ('8', 'a'),
 ('8', 'a'),
 ('4', 'a'),
 ('7', 'a'),
 ('9', 'a'),
 ('8', 'a'),
 ('6', 'a'),
 ('1', 'a'),
 ('7', 'a'),
 ('6', 'a'),
 ('9', 'a'),
 ('9', 'a'),
 ('8', 'a'),
 ('8', 'a'),
 ('6', 'a'),
 ('9', 'a'),
 ('6', 'a'),
 ('8', 'a'),
 ('8', 'a'),
 ('8', 'a'),
 ('8', 'a'),
 ('4', 'a'),
 ('9', 'a'),
 ('9', 'a'),
 ('9', 'a'),
 ('9', 'a'),
 ('8', 'a'),
 ('9', 'a'),
 ('8', 'a'),
 ('8', 'a'),
 ('1', 'a'),
 ('8', 'a'),
 ('0', 'a'),
 ('8', 'a'),
 ('8', 'a'),
 ('0', 'a'),
 ('8', 'a'),
 ('6', 'a'),
 ('7', 'a'),
 ('8', 'a'),
 ('2', 'a'),
 ('3', 'a'),
 ('8', 'a'),
 ('8', 'a'),
 ('0', 'a'),
 ('9', 'a'),
 ('7', 'a'),
 ('5', 'a'),
 ('9', 'a'),
 ('8', 'a'),
 ('9', 'a'),
 ('9', 'a'),
 ('6', 'a'),
 ('7', 'a'),
 ('9', 'a'),
 ('9', 'a'),
 ('5', 'a'),
 ('7', 'a'),
 ('1', 'a'),
 ('7', 'a'),
 ('8', 'a'),
 ('9', 'a'),
 ('6', 'a'),
 ('7', 'a'),
 ('9', 'a'),
 ('9', 'a'),
 ('9', 'a'),
 ('9', 'a'),
 ('0', 'a'),
 ('9', 'a'),
 ('9', 'a'),
 ('5', 'a'),
 ('7', 'a'),
 ('9', 'a'),
 ('9', 'a'),
 ('9', 'a'),
 ('9', 'a'),
 ('2', 'a'),
 ('9', 'a'),
 ('3', 'a'),
 ('9', 'a'),
 ('7', 'a'),
 ('5', 'a'),
 ('7', 'a'),
 ('9', 'a'),
 ('9', 'a'),
 ('7', 'a'),
 ('9', 'a'),
 ('9', 'a'),
 ('7', 'a'),
 ('3', 'a'),
 ('9', 'a'),
 ('9', 'a'),
 ('9', 'a'),
 ('9', 'a'),
 ('8', 'a'),
 ('9', 'a'),
 ('9', 'a'),
 ('8', 'a'),
 ('9', 'a'),
 ('2', 'a'),
 ('9', 'a'),
 ('9', 'a'),
 ('3', 'a'),
 ('7', 'a'),
 ('7', 'a'),
 ('9', 'a'),
 ('9', 'a'),
 ('9', 'a'),
 ('1', 'a'),
 ('9', 'a'),
 ('9', 'a'),
 ('9', 'a'),
 ('9', 'a'),
 ('0', 'a'),
 ('0', 'a'),
 ('9', 'a'),
 ('9', 'a'),
 ('3', 'a'),
 ('9', 'a'),
 ('9', 'a'),
 ('3', 'a'),
 ('9', 'a'),
 ('9', 'a'),
 ('9', 'a'),
 ('5', 'a'),
 ('9', 'a'),
 ('9', 'a'),
 ('8', 'a'),
 ('9', 'a'),
 ('9', 'a'),
 ('1', 'a'),
 ('4', 'a'),
 ('9', 'a'),
 ('2', 'a'),
 ('6', 'a'),
 ('8', 'a'),
 ('9', 'a'),
 ('9', 'a'),
 ('9', 'a'),
 ('9', 'a'),
 ('7', 'a'),
 ('9', 'a'),
 ('8', 'a'),
 ('0', 'a'),
 ('7', 'a'),
 ('9', 'a'),
 ('9', 'a'),
 ('0', 'a'),
 ('3', 'a'),
 ('1', 'a'),
 ('8', 'a'),
 ('8', 'a'),
 ('6', 'a'),
 ('7', 'a'),
 ('9', 'a'),
 ('9', 'a'),
 ('1', 'a'),
 ('9', 'a'),
 ('6', 'a'),
 ('8', 'a'),
 ('8', 'a'),
 ('5', 'a'),
 ('8', 'a'),
 ('7', 'a'),
 ('8', 'a'),
 ('8', 'a'),
 ('7', 'a'),
 ('9', 'a'),
 ('8', 'a'),
 ('9', 'a'),
 ('9', 'a'),
 ('6', 'a'),
 ('8', 'a'),
 ('9', 'a'),
 ('8', 'a'),
 ('3', 'a'),
 ('9', 'a'),
 ('8', 'a'),
 ('6', 'a'),
 ('9', 'a'),
 ('8', 'a'),
 ('8', 'a'),
 ('9', 'a'),
 ('8', 'a'),
 ('8', 'a'),
 ('8', 'a'),
 ('8', 'a'),
 ('8', 'a'),
 ('9', 'a'),
 ('7', 'a'),
 ('8', 'a'),
 ('8', 'a'),
 ('9', 'a'),
 ('6', 'a'),
 ('9', 'a'),
 ('0', 'a'),
 ('6', 'a'),
 ('8', 'a'),
 ('4', 'a'),
 ('9', 'a'),
 ('9', 'a'),
 ('8', 'a'),
 ('6', 'a'),
 ('9', 'a'),
 ('8', 'a'),
 ('8', 'a'),
 ('8', 'a'),
 ('9', 'a'),
 ('8', 'a'),
 ('9', 'a'),
 ('8', 'a'),
 ('6', 'a'),
 ('9', 'a'),
 ('6', 'a'),
 ('9', 'a'),
 ('8', 'a'),
 ('6', 'a'),
 ('5', 'a'),
 ('9', 'a'),
 ('0', 'a'),
 ('1', 'a'),
 ('9', 'a'),
 ('8', 'a'),
 ('6', 'a'),
 ('9', 'a'),
 ('7', 'a'),
 ('7', 'a'),
 ('6', 'a'),
 ('8', 'a'),
 ('9', 'a'),
 ('8', 'a'),
 ('8', 'a'),
 ('8', 'a'),
 ('8', 'a'),
 ('9', 'a'),
 ('8', 'a'),
 ('8', 'a'),
 ('4', 'a'),
 ('7', 'a'),
 ('7', 'a'),
 ('9', 'a'),
 ('7', 'a'),
 ('9', 'a'),
 ('9', 'a'),
 ('8', 'a'),
 ('9', 'a'),
 ('9', 'a'),
 ('2', 'a'),
 ('8', 'a'),
 ('2', 'a'),
 ('6', 'a'),
 ('9', 'a'),
 ('9', 'a'),
 ('9', 'a'),
 ('8', 'a'),
 ('2', 'a'),
 ('9', 'a'),
 ('9', 'a'),
 ('9', 'a'),
 ('7', 'a'),
 ('9', 'a'),
 ('1', 'a'),
 ('9', 'a'),
 ('8', 'a'),
 ('9', 'a'),
 ('9', 'a'),
 ('9', 'a'),
 ('5', 'a'),
 ('9', 'a'),
 ('6', 'a'),
 ('3', 'a'),
 ('9', 'a'),
 ('6', 'a'),
 ('9', 'a'),
 ('9', 'a'),
 ('0', 'a'),
 ('9', 'a'),
 ('9', 'a'),
 ('9', 'a'),
 ('9', 'a'),
 ('8', 'a'),
 ('9', 'a'),
 ('4', 'a'),
 ('8', 'a'),
 ('9', 'a'),
 ('5', 'a'),
 ('9', 'a'),
 ('9', 'a'),
 ('9', 'a'),
 ('9', 'a'),
 ('9', 'a'),
 ('1', 'a'),
 ('9', 'a'),
 ('9', 'a'),
 ('9', 'a'),
 ('0', 'a'),
 ('1', 'a'),
 ('3', 'a'),
 ('1', 'a'),
 ('8', 'a'),
 ('0', 'a'),
 ('7', 'a'),
 ('7', 'a'),
 ('0', 'a'),
 ('0', 'a'),
 ('1', 'a'),
 ('0', 'a'),
 ('0', 'a'),
 ('1', 'a'),
 ('9', 'a'),
 ('9', 'a'),
 ('9', 'a'),
 ('9', 'a'),
 ('0', 'a'),
 ('5', 'a'),
 ('7', 'a'),
 ('0', 'a'),
 ('1', 'a'),
 ('7', 'a'),
 ('2', 'a'),
 ('8', 'a'),
 ('9', 'a'),
 ('7', 'a'),
 ('7', 'a'),
 ('7', 'a'),
 ('9', 'a'),
 ('9', 'a'),
 ('1', 'a'),
 ('9', 'a'),
 ('9', 'a'),
 ('9', 'a'),
 ('9', 'a'),
 ('7', 'a'),
 ('9', 'a'),
 ('1', 'a'),
 ('7', 'a'),
 ('9', 'a'),
 ('8', 'a'),
 ('9', 'a'),
 ('1', 'a'),
 ('0', 'a'),
 ('9', 'a'),
 ('8', 'a'),
 ('5', 'a'),
 ('9', 'a'),
 ('0', 'a'),
 ('0', 'a'),
 ('5', 'a'),
 ('9', 'a'),
 ('9', 'a'),
 ('9', 'a'),
 ('8', 'a'),
 ('1', 'a'),
 ('1', 'a'),
 ('0', 'a'),
 ('4', 'a'),
 ('7', 'a'),
 ('9', 'a'),
 ('5', 'a'),
 ('4', 'a'),
 ('8', 'a'),
 ('0', 'a'),
 ('2', 'a'),
 ('1', 'a'),
 ('2', 'a'),
 ('1', 'a'),
 ('8', 'a'),
 ('0', 'a'),
 ('0', 'a'),
 ('5', 'a'),
 ('8', 'a'),
 ('8', 'a'),
 ('6', 'a'),
 ('7', 'a'),
 ('1', 'a'),
 ('1', 'a'),
 ('9', 'a'),
 ('4', 'a'),
 ('9', 'a'),
 ('2', 'a'),
 ('2', 'a'),
 ('9', 'a'),
 ('4', 'a'),
 ('8', 'a'),
 ('9', 'a'),
 ('8', 'a'),
 ('6', 'a'),
 ('8', 'a'),
 ('9', 'a'),
 ('7', 'a'),
 ('6', 'a'),
 ('0', 'a'),
 ('9', 'a'),
 ('6', 'a'),
 ('9', 'a'),
 ('8', 'a'),
 ('8', 'a'),
 ('9', 'a'),
 ('9', 'a'),
 ('9', 'a'),
 ('9', 'a'),
 ('9', 'a'),
 ('9', 'a'),
 ('7', 'a'),
 ('9', 'a'),
 ('8', 'a'),
 ('4', 'a'),
 ('8', 'a'),
 ('9', 'a'),
 ('9', 'a'),
 ('9', 'a'),
 ('8', 'a'),
 ('0', 'a'),
 ('8', 'a'),
 ('6', 'a'),
 ('9', 'a'),
 ('2', 'a'),
 ('5', 'a'),
 ('8', 'a'),
 ('3', 'a'),
 ('3', 'a'),
 ('1', 'a'),
 ('9', 'a'),
 ('9', 'a'),
 ('0', 'a'),
 ('9', 'a'),
 ('0', 'a'),
 ('6', 'a'),
 ('7', 'a'),
 ('9', 'a'),
 ('0', 'a'),
 ('9', 'a'),
 ('0', 'a'),
 ('3', 'a'),
 ('1', 'a'),
 ('8', 'a'),
 ('0', 'a'),
 ('8', 'a'),
 ('8', 'a'),
 ('9', 'a'),
 ('9', 'a'),
 ('0', 'a'),
 ('9', 'a'),
 ('1', 'a'),
 ('8', 'a'),
 ('8', 'a'),
 ('6', 'a'),
 ('1', 'a'),
 ('9', 'a'),
 ('6', 'a'),
 ('9', 'a'),
 ('9', 'a'),
 ('9', 'a'),
 ('9', 'a'),
 ('9', 'a'),
 ('4', 'a'),
 ('0', 'a'),
 ('9', 'a'),
 ('9', 'a'),
 ('0', 'a'),
 ('9', 'a'),
 ('1', 'a'),
 ('7', 'a'),
 ('8', 'a'),
 ('3', 'a'),
 ('3', 'a'),
 ('4', 'a'),
 ('1', 'a'),
 ('3', 'a'),
 ('6', 'a'),
 ('3', 'a'),
 ('7', 'a'),
 ('1', 'a'),
 ('5', 'a'),
 ('1', 'a'),
 ('9', 'a'),
 ('8', 'a'),
 ('1', 'a'),
 ('9', 'a'),
 ('8', 'a'),
 ('8', 'a'),
 ('9', 'a'),
 ('1', 'a'),
 ('4', 'a'),
 ('9', 'a'),
 ('8', 'a'),
 ('7', 'a'),
 ('5', 'a'),
 ('3', 'a'),
 ('3', 'a'),
 ('0', 'a'),
 ('9', 'a'),
 ('0', 'a'),
 ('9', 'a'),
 ('9', 'a'),
 ('9', 'a'),
 ('9', 'a'),
 ('5', 'a'),
 ('9', 'a'),
 ('5', 'a'),
 ('8', 'a'),
 ('2', 'a'),
 ('5', 'a'),
 ('3', 'a'),
 ('7', 'a'),
 ('7', 'a'),
 ('9', 'a'),
 ('3', 'a'),
 ('9', 'a'),
 ('8', 'a'),
 ('9', 'a'),
 ('3', 'a'),
 ('0', 'a'),
 ('1', 'a'),
 ('5', 'a'),
 ('0', 'a'),
 ('1', 'a'),
 ('3', 'a'),
 ('3', 'a'),
 ('3', 'a'),
 ('6', 'a'),
 ('9', 'a'),
 ('2', 'a'),
 ('0', 'a'),
 ('7', 'a'),
 ('1', 'a'),
 ('9', 'a'),
 ('1', 'a'),
 ('1', 'a'),
 ('1', 'a'),
 ('1', 'a'),
 ('9', 'a'),
 ('1', 'a'),
 ('3', 'a'),
 ('3', 'a'),
 ('1', 'a'),
 ('7', 'a'),
 ('9', 'a'),
 ('3', 'a'),
 ('7', 'a'),
 ('9', 'a'),
 ('1', 'a'),
 ('9', 'a'),
 ('9', 'a'),
 ('9', 'a'),
 ('5', 'a'),
 ('9', 'a'),
 ('9', 'a'),
 ('5', 'a'),
 ('9', 'a'),
 ('7', 'a'),
 ('9', 'a'),
 ('9', 'a'),
 ('7', 'a'),
 ('7', 'a'),
 ('9', 'a'),
 ('5', 'a'),
 ('7', 'a'),
 ('9', 'a'),
 ('9', 'a'),
 ('3', 'a'),
 ('7', 'a'),
 ('5', 'a'),
 ('7', 'a'),
 ('9', 'a'),
 ('9', 'a'),
 ('9', 'a'),
 ('9', 'a'),
 ('9', 'a'),
 ('9', 'a'),
 ('9', 'a'),
 ('0', 'a'),
 ('5', 'a'),
 ('9', 'a'),
 ('7', 'a'),
 ('9', 'a'),
 ('7', 'a'),
 ('9', 'a'),
 ('9', 'a'),
 ('9', 'a'),
 ('2', 'a'),
 ('7', 'a'),
 ('1', 'a'),
 ('7', 'a'),
 ('2', 'a'),
 ('9', 'a'),
 ('7', 'a'),
 ('7', 'a'),
 ('9', 'a'),
 ('2', 'a'),
 ('4', 'a'),
 ('2', 'a'),
 ('7', 'a'),
 ('7', 'a'),
 ('0', 'a'),
 ('3', 'a'),
 ('3', 'a'),
 ('9', 'a'),
 ('4', 'a'),
 ('1', 'a'),
 ('9', 'a'),
 ('9', 'a'),
 ('9', 'a'),
 ('9', 'a'),
 ('3', 'a'),
 ('5', 'a'),
 ('9', 'a'),
 ('9', 'a'),
 ('9', 'a'),
 ('1', 'a'),
 ('1', 'a'),
 ('9', 'a'),
 ('9', 'a'),
 ('9', 'a'),
 ('3', 'a'),
 ('2', 'a'),
 ('9', 'a'),
 ('1', 'a'),
 ('6', 'a'),
 ('9', 'a'),
 ('1', 'a'),
 ('2', 'a'),
 ('9', 'a'),
 ('7', 'a'),
 ('9', 'a'),
 ('2', 'a'),
 ('8', 'a'),
 ('9', 'a'),
 ('1', 'a'),
 ('1', 'a'),
 ('0', 'a'),
 ('9', 'a'),
 ('2', 'a'),
 ('5', 'a'),
 ('2', 'a'),
 ('1', 'a'),
 ('1', 'a'),
 ('3', 'a'),
 ('9', 'a'),
 ('9', 'a'),
 ('9', 'a'),
 ('2', 'a'),
 ('1', 'a'),
 ('0', 'a'),
 ('2', 'a'),
 ('9', 'a'),
 ('8', 'a'),
 ('8', 'a'),
 ('0', 'a'),
 ('9', 'a'),
 ...]

In [ ]: