#-------------------------------------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)+ '
' + selected_var + " : " + top_10["percent_tokens_circulation"].astype(str) + '
' + 'Market Cap: ' + top_10["market_cap"].astype(str) + '
' + 'Fully Diluted Market Cap: ' + top_10["fully_diluted_market_cap"].astype(str) + '
' + '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)+ '
' + selected_var + " : " + worst_10["percent_tokens_circulation"].astype(str) + '
' + 'Market Cap: ' + worst_10["market_cap"].astype(str) + '
' + 'Fully Diluted Market Cap: ' + worst_10["fully_diluted_market_cap"].astype(str) + '
' + '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 ----------------------------------