Spaces:
Runtime error
Runtime error
| # LIBRARY IMPORTS | |
| import sys | |
| import streamlit as st | |
| from streamlit import cli as stcli | |
| import plotly.express as px | |
| import pandas as pd | |
| # FUNCTIONS | |
| def data_import(): | |
| """ | |
| Imports 2019 U.S. state energy data from https://www.eia.gov/state/. | |
| """ | |
| df = pd.read_csv('SelectedStateRankingsData.csv') | |
| return df | |
| def data_transformation(df): | |
| """ | |
| Transforms the data to prepare for analysis and visualization. | |
| """ | |
| # Drop last column | |
| df_tr = df.iloc[:, :-1] | |
| # Get list of original column names you want to change | |
| col_names = list(df_tr.columns) | |
| col_names.remove('State') | |
| # Create list of revised column names | |
| col_names2 = [ | |
| 'Production (U.S. Share %)', | |
| 'Production (Rank)', | |
| 'Consumption per Capita (Million BTU)', | |
| 'Consumption per Capita (Rank)', | |
| 'Expenditures per Capita ($)', | |
| 'Expenditures per Capita (Rank)' | |
| ] | |
| # Create dictionary of original and revised column names | |
| col_names_new = dict(zip(col_names, col_names2)) | |
| # Rename columns using previously created dictionary | |
| df_tr = df_tr.rename(columns=col_names_new) | |
| return df_tr, col_names_new | |
| def display_header(): | |
| """ | |
| Displays the header section of the app. | |
| """ | |
| st.title("Energy Production, Consumption, & Expenditure By State") | |
| st.subheader("This app displays data mined from the EIA.gov website for 2019 energy production, consumption, " | |
| "and expenditure by state. Use the dropdown menu to filter the heatmap, which is interactive so you " | |
| "can hover over each state to view the filtered information.") | |
| st.write("A separate Qlik dashboard to explore this data can be viewed here: [link](https://yq99nw4o7qdge1s.us.qlikcloud.com/single/?appid=68edb70d-68b9-4050-b956-34c12bc2460c&sheet=37d34302-8565-4551-afd2-abd2dcffa243&theme=horizon&opt=ctxmenu,currsel&select=clearall)") | |
| def display_filter(col_names): | |
| # Take values from col_names dictionary and convert to a list | |
| col_names_list = list(col_names.values()) | |
| # Create dropdown menu to filter data for chart | |
| filter_selection = st.selectbox('Filter the data', col_names_list) | |
| return filter_selection | |
| # noinspection PyShadowingBuiltins | |
| def display_chart(df_tr, filter): | |
| """ | |
| Displays various charts of the data. | |
| """ | |
| # Determine filter value in order to set proper color scale for chart | |
| if 'rank' in filter.lower(): | |
| color_scale = 'plasma_r' | |
| else: | |
| color_scale = 'plasma' | |
| #te | |
| # Create chart | |
| fig = px.choropleth(df_tr, | |
| locations='State', | |
| color=filter, | |
| locationmode='USA-states', # Set to plot as US States | |
| title='2019 U.S. Energy {filter}'.format(filter=filter), | |
| color_continuous_scale=color_scale, | |
| ) | |
| # Add title and set USA as boundary for map | |
| fig.update_layout(title_x=0.4, | |
| geo_scope='usa', # Plot only the USA instead of globe | |
| height=800, | |
| width=1000 | |
| ) | |
| # Display chart using Streamlit | |
| st.plotly_chart(fig) | |
| def main(): | |
| """ | |
| Main function for the app which calls all other functions to display the app. | |
| """ | |
| # IMPORT DATA | |
| energy_rankings = data_import() | |
| # TRANSFORM DATA | |
| energy_rankings_tr, col_names_new = data_transformation(energy_rankings) | |
| # DISPLAY DATA | |
| display_header() | |
| filter_selection = display_filter(col_names_new) | |
| display_chart(energy_rankings_tr, filter_selection) | |
| if __name__ == '__main__': | |
| if st._is_running_with_streamlit: | |
| main() | |
| else: | |
| sys.argv = ['streamlit', 'run', sys.argv[0]] | |
| sys.exit(stcli.main()) | |