Last active
July 30, 2018 19:21
-
-
Save dineshj1/26cbe7dbcb797658048bdcb16fc9d061 to your computer and use it in GitHub Desktop.
How to dump parameters to google spreadsheet to track experiments
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# First make sure you pip install google-api-python-client | |
from apiclient.discovery import build | |
from httplib2 import Http | |
from oauth2client import file, client, tools | |
def store_opts(opt): # opt is the object returned by argparse | |
params = dict(opt.__dict__) | |
# here I remove parameters I don't want recorded in google sheets | |
params.pop('retain_in_test', None) | |
params.pop('exec_mode', None) | |
params.pop('sacred', None) | |
# some boilerplate code... once you figure out how the Sheets API works, this section becomes clear. | |
SCOPES = 'https://www.googleapis.com/auth/spreadsheets' | |
store = file.Storage('credentials.json') | |
creds = store.get() | |
if not creds or creds.invalid: | |
flow = client.flow_from_clientsecrets('client_secret.json', SCOPES) # this is a user-specific thing you'll have to download | |
creds = tools.run_flow(flow, store) | |
service = build('sheets', 'v4', http=creds.authorize(Http())) | |
result = service.spreadsheets().values().get(spreadsheetId=config.spreadsheet_id, # Will look like 1Y_5-d9Az2m1Mc8vVoUNv6KVjNApuvhy5oiNdaadgvP0. See Google Sheets API for how to get a spreadsheet ID (it is the key portion of the URL) | |
range=config.title_range_).execute() # I set config.title_range_ to 'Sheet1!A1:AZ1', which are the cell addresses that contains the title row of my sheet ... | |
keys = result.get('values', []) | |
if len(keys) == 0: | |
keys = sorted(params.keys()) | |
first_keys = ['job_id', 'dist_regress', 'data_version', 'limit_trn_files', 'seed', # for setting a good ordering of the columns in the spreadsheet first time around, I specify which columns I want first | |
'posneg_ratio', 'lr', 'lr_stepsize', 'lr_gamma', 'kl_lambda', 'batch_size', | |
'sysid_featlen', 'act_featlen', 'sysid_lstm_nlayers', 'feat_len', | |
'vae', 'epochs', 'freeze_imgfeat', 'save_freq'] | |
for k in first_keys: | |
try: | |
print(k) | |
keys.remove(k) | |
except ValueError: | |
pass | |
keys = first_keys + keys | |
value_range_body = { | |
"values": [ | |
[key for key in keys] | |
] | |
} | |
request = service.spreadsheets().values().append( | |
spreadsheetId=config.spreadsheet_id, # Will look like 1Y_5-d9Az2m1Mc8vVoUNv6KVjNApuvhy5oiNdaadgvP0. See Google Sheets API for how to get a spreadsheet ID (it is the key portion of the URL) | |
range=config.title_range_, # Will look like Sheet1!A1:ZZ1 | |
valueInputOption='RAW', | |
insertDataOption='OVERWRITE', | |
body=value_range_body) | |
response = request.execute() | |
value_range_body = { | |
"values": [ | |
[(params[key] if key in params else 'NA') for key in keys[0]] | |
] | |
} | |
# The portion where I actually dump parameters | |
request = service.spreadsheets().values().append( | |
spreadsheetId=config.spreadsheet_id, | |
range=config.range_, # Sheet1!A2:ZZ100 | |
valueInputOption='RAW', | |
insertDataOption='INSERT_ROWS', | |
body=value_range_body) | |
response = request.execute() | |
return response |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment