Spaces:
Runtime error
Runtime error
| import streamlit as st | |
| import pandas as pd | |
| import plotly.express as px | |
| from gapminder import gapminder | |
| ####### | |
| # Data loading | |
| ####### | |
| df = gapminder | |
| year_values = (int(df["year"].min()), int(df["year"].max())) | |
| metrics = ["lifeExp", "pop", "gdpPercap"] | |
| dimension = ["country", "continent", "year"] | |
| ####### | |
| # Helper functions | |
| ####### | |
| def get_filtered_data( | |
| continents="All", | |
| countries="All", | |
| min_year=year_values[0], | |
| max_year=year_values[1], | |
| ): | |
| if isinstance(continents, str) and continents != "All": | |
| mask_continent = df["continent"] == continents | |
| else: | |
| mask_continent = df["continent"].isin(continents) | |
| if isinstance(countries, str) and countries != "All": | |
| mask_country = df["country"] == countries | |
| else: | |
| mask_country = df["country"].isin(countries) | |
| mask_year = ((df["year"] >= min_year) & (df["year"] <= max_year)) | |
| return df[mask_continent & mask_country & mask_year] | |
| def box_plot(df, x, y): | |
| fig = px.box( | |
| df, x=x, y=y, hover_data=df[dimension + [x]], | |
| points="all", color=x) | |
| return fig | |
| def scatter_plot(df, x, y, hue): | |
| fig = px.scatter( | |
| df, x=x, y=y, | |
| color=hue, symbol=hue) | |
| return fig | |
| ####### | |
| # Streamlit app code | |
| ####### | |
| st.title('[Gapminder] Exploratory Data Analysis') | |
| st.markdown("## Gapminder Table") | |
| selected_continents = st.multiselect("Select Continents:", df["continent"].unique(), key="table_continent") | |
| selected_countries = st.multiselect("Select Countries:", df.loc[df["continent"].isin(selected_continents), "country"].unique(), key="table_country") | |
| min_year, max_year = st.slider("Select Year:", year_values[0], year_values[1], year_values, key="table_year") | |
| st.dataframe(get_filtered_data(selected_continents, selected_countries, min_year, max_year)) | |
| st.markdown("## Gapminder Boxplot") | |
| col1, col2 = st.columns(2) | |
| with col1: | |
| x = st.selectbox("Select x Axis", dimension, key="boxplot_x") | |
| with col2: | |
| y = st.selectbox("Select y Axis", metrics, key="boxplot_y") | |
| st.plotly_chart(box_plot(df, x, y)) | |
| ## TODO add lineplot | |
| # st.markdown('## Gapminder Lineplot') | |
| st.markdown('## Gapminder Scatterplot') | |
| col1, col2, col3 = st.columns(3) | |
| with col1: | |
| x = st.selectbox("Select x Axis", metrics, key="scatterplot_x") | |
| with col2: | |
| y = st.selectbox("Select y Axis", metrics, key="scatterplot_y") | |
| with col3: | |
| hue = st.selectbox("Select hue", ["country", "continent"], key="scatterplot_hue") | |
| st.plotly_chart(scatter_plot(df, x, y, hue)) |