Python Plotly: Data Visualization ETH Tipping

in blurtech •  4 years ago 

Few weeks ago, Publish0x, blogging platform, added ETH tipping.

You can tip 7 times a day and it is free. It doesn't cost you anything to tip, and when you tip you can change the tip amount like this 👇
iitmpxf.gif

You can tip 100% to the content author or change the tip % so that you can keep some % of the tip to your self, and give other % to the content author. You can keep 80% of the tip and give 20% to the author. It is totally up to you how much you tip.

Tipping money is not a lot but it comes from their tipping pool, not from your pocket, so it is pretty much free money everyday.
When they added ETH tipping, they also increased the tipping reward by 30% which is a pretty big increase, BUT I am not sure exactly how much ETH I am receiving from tips or how often I get ETH tipping because they also have BAT tipping and LRC tipping.
So I have been collecting sample data like this 👇

#80/20 Tipping
tipping_data = {
    '1': {
        'eth': [0.00002799, 0.00002823, 0.00002823],
        'bat': [0.0828, 0.0409],
        'lrc': [0.0404, 0.0408]
    },

Right now, my data is too small to do anything, but I decided to visualize this data using Plotly.
I have never used this before but it looks kind of cool and easy to use, and you can make fancy charts like these 👇
1.png
source

My chart is not fancy like those but I have got this so far... with fake data.
2.png
I think it is not too bad for the first time. What I like about Plotly is that their UI gives more info if you mouse over to it.
So I am going to collect more data and then push this to somewhere so you can see the pop up info.

Python script

from tip_data import tipping_data
import plotly.graph_objects as go
import requests


def get_price(id):
    # Call coingecko API to get usd price
    base_url = 'https://api.coingecko.com/api/v3/simple/price'
    eth_url = '?ids=ethereum&vs_currencies=usd'
    bat_url = '?ids=basic-attention-token&vs_currencies=usd'
    lrc_url = '?ids=loopring&vs_currencies=usd'

    if id == 'ethereum':
        try:
            r = requests.get(base_url + eth_url, timeout=3)
            r.raise_for_status()
        except Exception as err:
            print("Exception Error:", err)
            return 0.0
    elif id == 'basic-attention-token':
        try:
            r = requests.get(base_url + bat_url, timeout=3)
            r.raise_for_status()
        except Exception as err:
            print("Exception Error:", err)
            return 0.0
    elif id == 'loopring':
        try:
            r = requests.get(base_url + lrc_url, timeout=3)
            r.raise_for_status()
        except Exception as err:
            print("Exception Error:", err)
            return 0.0
    else:
        return 0.0

    return r.json()[id]['usd']


def main():
    eth_price = get_price('ethereum')
    bat_price = get_price('basic-attention-token')
    lrc_price = get_price('loopring')

    eth_total = 0.0
    bat_total = 0.0
    lrc_total = 0.0
    days = []
    eth_data = []
    bat_data = []
    lrc_data = []
    total_data = []

    for key in tipping_data:
        eth_total = f"{sum(tipping_data[key]['eth']) * eth_price:.3f}"
        bat_total = f"{sum(tipping_data[key]['bat']) * bat_price:.3f}"
        lrc_total = f"{sum(tipping_data[key]['lrc']) * lrc_price:.3f}"

        days.append('Day ' + key)
        eth_data.append(eth_total)
        bat_data.append(bat_total)
        lrc_data.append(lrc_total)
        tip_total = float(eth_total) + float(bat_total) + float(lrc_total)
        total_data.append(tip_total)

    # Daily tipping bar chart
    fig = go.Figure(data=[
        go.Bar(name='BAT', x=days, y=bat_data),
        go.Bar(name='ETH', x=days, y=eth_data),
        go.Bar(name='LRC', x=days, y=lrc_data)],
        layout_title_text="Publish0x Tips 20% Author / 80% Me"
    )
    fig.add_trace(
        go.Scatter(
            name='Tip Total',
            x=days,
            y=total_data
        ))

    # Change the bar mode
    fig.update_layout(
        # barmode='stack',
        xaxis_title="Date",
        yaxis_title="$ Amount",
        legend_title="Tips",
    )
    fig.write_html('chart_20_80.html', auto_open=True)
    fig.show()


if __name__ == '__main__':
    main()
Authors get paid when people like you upvote their post.
If you enjoyed what you read here, create your account today and start earning FREE BLURT!
Sort Order:  
  ·  4 years ago  ·  

Uuuu fake data, nice 😂. I can't wait for the real thing.

  ·  4 years ago  ·  

I needed some data to test this thing!!! But collecting data takes time.... ugh
I want to do at least 3 charts 20/80, 50/50, 80/20... I don't know if I can wait that long 😂😂😂

  ·  4 years ago  ·  

You can use statistics to "guess" some of the values I think... 🤔🤔🤔

  ·  4 years ago  ·  

I don't want to guess... I will just use small data that I have got