1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980 |
- # pandas and numpy for data manipulation
- import pandas as pd
- import numpy as np
- # fbprophet for additive models
- import fbprophet
- # gspread for Google Sheets access
- import gspread
- # slacker for interacting with Slack
- from slacker import Slacker
- # oauth2client for authorizing access to Google Sheets
- from oauth2client.service_account import ServiceAccountCredentials
- # os for deleting images
- import os
- # matplotlib for plotting
- import matplotlib.pyplot as plt
- import matplotlib.patches as mpatches
- import matplotlib
- # import weighter
- from weighter import Weighter
- if __name__ == "__main__":
- # google sheets access
- scope = ["https://spreadsheets.google.com/feeds"]
- # Use local stored credentials in json file
- # make sure to first share the sheet with the email in the json file
- credentials = ServiceAccountCredentials.from_json_keyfile_name(
- "C:/Users/Will Koehrsen/Desktop/weighter-2038ffb4e5a6.json", scope
- )
- # Authorize access
- gc = gspread.authorize(credentials)
- # Slack api key is stored as text file
- with open("C:/Users/Will Koehrsen/Desktop/slack_api.txt", "r") as f:
- slack_api_key = f.read()
- slack = Slacker(slack_api_key)
- # Open the sheet, need to share the sheet with email specified in json file
- gsheet = gc.open("Auto Weight Challenge").sheet1
- # List of lists with each row in the sheet as a list
- weight_lists = gsheet.get_all_values()
- # Headers are the first list
- # Pop returns the element (list in this case) and removes it from the list
- headers = weight_lists.pop(0)
- # Convert list of lists to a dataframe with specified column header
- weights = pd.DataFrame(weight_lists, columns=headers)
- # Record column should be a boolean
- weights["Record"] = weights["Record"].astype(bool)
- # Name column is a string
- weights["Name"] = weights["Name"].astype(str)
- # Convert dates to datetime, then set as index, then set the time zone
- weights["Date"] = pd.to_datetime(weights["Date"], unit="s")
- weights = weights.set_index("Date", drop=True).tz_localize(tz="US/Eastern")
- # Drop any extra entries
- weights = weights.drop("NaT")
- # If there are new entries create the weighter object
- if len(weights) > np.count_nonzero(weights["Record"]):
- # Initialize with dataframe of weights, google sheet, and slack object
- weighter = Weighter(weights, gsheet, slack)
- weighter.process_entries()
- print("Success")
|