# Automate a Cryptocurrency Portfolio using Python

I got caught up in the cryptocurrency craze back in 2017; the new hype in 2021 has piqued my interest again. There are some great crypto applications out there to track your portfolio, however I wanted to create my own.

‍_________

Using Python and AWS Lambda I'm refreshing a Google Data Studio dashboard via Google Sheets with only a few lines of code.

See my other [post](https://datatribute.com/automate-the-luxury-stuff-with-python) on scraping my local bike shops eCommerce page for an in-depth look at deployment via AWS Lambda, this article will mainly focus on Google authentication, sheets, data studio and the cryptocompare package.


### Create a Google Cloud Project
- If you don't already have a Google Cloud account, login with your Gmail to get started
- Create a New Project or use the default project created for you
- Navigate to API's & Services
- Enable the Google Drive's API service associated with the Gmail you are logged into
- Search for Google Drive and Enable Service



![60b003fb42c21d1d48505000_API_gcp.png](https://cdn.hashnode.com/res/hashnode/image/upload/v1642121437168/BpUdPzvts.png)



### Create a Service Account
- APIs & Services -> Credentials -> Create Credentials -> Service Account
- Name fields however you like, create and SAVE the JSON file
- This JSON file is your authentication file and should be placed in the root folder of your Python file
- Take note of the iam.gserviceaccount.com email - it should also be present in your JSON file
‍

### Create a Google Sheet
- Create a blank Google Sheet
- Share the sheet with the service account gmail created in the previous step
‍

### Query Crypto Prices - cryptocompare
- pip install cryptocompare
- Plug in a list of coins into a list
- *Optional*: I have a few obscure coins and not all are available via USDT direct trade, as such I created a second list based on the currency to get historical data only. The get_avg function asks to specify an exchange - this is why you may need a currency specification based on your coins.
- Loop over all coins and call get_price and get_avg
- Append this data to empty lists created before the for loop



``` python   
coin_list = [
        'BTC', 'XRP', 'NANO', 'OMG', 'ARK', 'SC', 'XRP', 'GNT', 'NEO', 'MIOTA',
        'REQ'
    ]
    currency_list = [
        'USDT', 'USDT', 'USDT', 'USDT', 'BTC', 'BTC', 'BTC', 'BTC', 'BTC',
        'BTC', 'BTC'
    ]
    coin_price_dict = {}
    coin_price = []
    coin_change = []


    for coin, curr in zip(coin_list, currency_list):

        price = '${0:,.2f}'.format(
            cryptocompare.get_price(coin, 'USD')[coin]['USD'])
        hist_price = '{0:,.2f}%'.format(
            cryptocompare.get_avg(coin, currency=curr,
                                  exchange='Binance')['CHANGEPCT24HOUR'])

        coin_price_dict[coin] = [price, hist_price]
        coin_price.append(price)
        coin_change.append(hist_price)
``` 



### Push Dataframe to Google Sheets
- pip install pygsheets
- Authenticate via secrets.json file (created from service account in previous step)
add the columns to the blank dataframe; these columns were built within the for loop in the previous step
- Open sheet via pygsheets, select the first sheet and set the dataframe to begin on the first row and column



```python
    #authorization
    gc = pygsheets.authorize(service_file='secrets.json')

    # Create empty dataframe
    df = pd.DataFrame()

    # Create a column
    df['Coin Name'] = coin_list
    df['Price'] = coin_price
    df['24hr Change'] = coin_change

    #open the google spreadsheet (where 'PY to Gsheet Test' is the name of my sheet)
    sh = gc.open('Crypto Dash')

    #select the first sheet
    wks = sh[0]

    #update the first sheet with df, starting at cell B2.
    wks.set_dataframe(df, (1, 1))
``` 



### Google Data Studio Dashboard
- Copy this [Google Data Studio (GDS)](https://datastudio.google.com/u/0/reporting/443a684e-6603-479e-9be3-203f81ffe9d7/page/HerIC) template or create your own!
- Replace the data source with the Google Sheet you created


![60b00fe9024e29a1b323b467_gds_ss.png](https://cdn.hashnode.com/res/hashnode/image/upload/v1642121630443/mQ6r1YQv7.png)


### Deploy Code in AWS Lambda
- Package all dependencies and code into a zip file
- Create a Lambda function and set your desired triggers
Important note about pandas and numpy for Lambda - there are a few commons errors that Lambda encounters when using pandas/numpy packages. If you have any errors related to these packages I suggest manually downloading pandas/numpy from pypi.org and plopping them into your zip file. You should download --your python version--manylinux--x86 -- 64, version of the package.
- See my other blog [post](https://datatribute.com/automate-the-luxury-stuff-with-python) for a detailed explanation of Lambda functions
