mohcineelharras's picture
init
1a57d8f
raw
history blame
No virus
5.19 kB
#-------------------------------------libraries ----------------------------------
import os
import pandas as pd
import streamlit as st
import plotly.graph_objs as go
import numpy as np
import plotly.express as px
import logging
# Set up logging basic configuration
logging.basicConfig(level=logging.INFO)
# Example of logging
logging.info("Streamlit app has started")
#-------------------------------------back ----------------------------------
# etherscan
## Load the data from the CSV files
dataframes = []
for filename in os.listdir('output'):
if filename.endswith('.csv'):
df_temp = pd.read_csv(os.path.join('output', filename), sep=';')
dataframes.append(df_temp)
df_etherscan = pd.concat(dataframes)
del df_temp
# CMC
## Load cmc data
df_temp = pd.read_csv("output/top_100_update.csv", sep=',')
df_cmc = df_temp[df_temp["last_updated"] == df_temp["last_updated"].max()]
del df_temp
#-------------------------------------streamlit ----------------------------------
# Set the title and other page configurations
st.title('Crypto Analysis')
# Create two columns for the two plots
col1, col2 = st.columns(2)
with st.container():
with col1:
# etherscan
selected_token = st.selectbox('Select Token', df_etherscan['tokenSymbol'].unique(), index=0)
# Filter the data based on the selected token
filtered_df = df_etherscan[df_etherscan['tokenSymbol'] == selected_token]
# Plot the token value over time
st.plotly_chart(
go.Figure(
data=[
go.Scatter(
x=filtered_df['timeStamp'],
y=filtered_df['value'],
mode='lines',
name='Value over time'
)
],
layout=go.Layout(
title='Token Value Over Time',
yaxis=dict(
title=f'Value ({selected_token})',
),
showlegend=True,
legend=go.layout.Legend(x=0, y=1.0),
margin=go.layout.Margin(l=40, r=0, t=40, b=30),
width=500,
height=500
)
)
)
with col2:
# cmc
selected_var = st.selectbox('Select Token', ["percent_change_24h","percent_change_7d","percent_change_90d"], index=0)
# Sort the DataFrame by the 'percent_change_24h' column in ascending order
df_sorted = df_cmc.sort_values(by=selected_var, ascending=False)
# Select the top 10 and worst 10 rows
top_10 = df_sorted.head(10)
worst_10 = df_sorted.tail(10)
# Combine the top and worst dataframes for plotting
combined_df = pd.concat([top_10, worst_10], axis=0)
max_abs_val = max(abs(combined_df[selected_var].min()), abs(combined_df[selected_var].max()))
# Create a bar plot for the top 10 with a green color scale
fig = go.Figure(data=[
go.Bar(
x=top_10["symbol"],
y=top_10[selected_var],
marker_color='rgb(0,100,0)', # Green color for top 10
hovertext= "Name : "+top_10["name"].astype(str)+ '<br>' +
selected_var + " : " + top_10["percent_tokens_circulation"].astype(str) + '<br>' +
'Market Cap: ' + top_10["market_cap"].astype(str) + '<br>' +
'Fully Diluted Market Cap: ' + top_10["fully_diluted_market_cap"].astype(str) + '<br>' +
'Last Updated: ' + top_10["last_updated"].astype(str),
name="top_10"
)
])
# Add the worst 10 to the same plot with a red color scale
fig.add_traces(go.Bar(
x=worst_10["symbol"],
y=worst_10[selected_var],
marker_color='rgb(255,0,0)', # Red color for worst 10
hovertext="Name:"+worst_10["name"].astype(str)+ '<br>' +
selected_var + " : " + worst_10["percent_tokens_circulation"].astype(str) + '<br>' +
'Market Cap: ' + worst_10["market_cap"].astype(str) + '<br>' +
'Fully Diluted Market Cap: ' + worst_10["fully_diluted_market_cap"].astype(str) + '<br>' +
'Last Updated: ' + worst_10["last_updated"].astype(str),
name="worst_10"
)
)
# Customize aspect
fig.update_traces(marker_line_color='rgb(8,48,107)', marker_line_width=1.5, opacity=0.8)
fig.update_layout(title_text=f'Top 10 and Worst 10 by {selected_var.split("_")[-1]} Percentage Change')
fig.update_xaxes(categoryorder='total ascending')
fig.update_layout(
autosize=False,
width=500,
height=500,
margin=dict(
l=50,
r=50,
b=100,
t=100,
pad=4
),
#paper_bgcolor="LightSteelBlue",
)
st.plotly_chart(fig)
#-------------------------------------end ----------------------------------