VizLib-Altair / app.py
awacke1's picture
Create app.py
1d769a2
raw
history blame
2.05 kB
import streamlit as st
import pandas as pd
import altair as alt
# Load hospital dataset
hospitals_df = pd.read_csv("https://data.medicare.gov/api/views/xubh-q36u/rows.csv?accessType=DOWNLOAD")
# Filter for the largest hospital in each state
largest_hospitals_df = hospitals_df.loc[hospitals_df.groupby("State")["Hospital overall rating"].idxmax()]
# Select columns to display
cols_to_display = ["State", "Hospital Name", "City", "Zip Code", "lat", "lng"]
# Create a Streamlit table to display the largest hospitals
st.table(largest_hospitals_df[cols_to_display])
# Define chart functions
def stacked_bar_chart():
chart = alt.Chart(largest_hospitals_df).mark_bar().encode(
x=alt.X('State:N'),
y=alt.Y('count():Q', stack="normalize"),
color=alt.Color('Hospital Type:N'),
tooltip=['Hospital Name', 'City', 'Hospital overall rating']
).properties(
width=700,
height=400,
title='Number of Hospitals by State and Type'
)
text = chart.mark_text(
align='center',
baseline='middle',
dx=0,
dy=5,
color='white'
).encode(
text=alt.Text('count():Q', format='.1f')
)
st.altair_chart(chart + text)
def bump_chart():
chart = alt.Chart(largest_hospitals_df).transform_rank(
'Hospital overall rating',
groupby=['State']
).mark_line().encode(
x='rank:Q',
y=alt.Y('Hospital Name:N', sort='-x'),
color=alt.Color('State:N'),
tooltip=['City', 'Zip Code', 'Hospital overall rating']
).properties(
width=700,
height=400,
title='Hospital Rankings by State'
)
st.altair_chart(chart)
# Define chart buttons
st.sidebar.header('Select a Chart')
chart_options = ['Stacked Bar Chart with Text Overlay', 'Bump Chart']
chart_choice = st.sidebar.selectbox('', chart_options)
# Call chart functions based on user input
if chart_choice == 'Stacked Bar Chart with Text Overlay':
stacked_bar_chart()
elif chart_choice == 'Bump Chart':
bump_chart()