The Use Case Streamlit Is Actually Built For
Getting data in front of a million users has a well-trodden path: JSON API, React team, maybe Swift for iOS. Jenkins’s argument is that another design space gets far less attention. You are a programmer or data scientist. You have some data. You want to see it, maybe show colleagues, maybe put it on a company intranet.
“That is an underserved design space and” — Kris Jenkins
That range, from a quick personal look up to one concurrent user a second, is what Streamlit is built for.
Getting a Project Running in Under Two Minutes with UV
UV combines pip and virtual environment management in one tool. uv init creates a project. uv add streamlit installs the package into a central cache on the local machine. The next time any project needs that package, it skips the network entirely. For a live conference demo, that matters. Jenkins ran source venv/bin/activate then streamlit run main.py and had a browser open with live reload in roughly two minutes from an empty directory. No pre-prepared tricks.
Loading and Shaping Data with Pandas
pd.read_csv('votes.csv') returns 51,000 rows across nine columns. Drop the variable name bare and Streamlit renders a sortable, downloadable table. Jenkins then filtered to finals only using Pandas’s bitmask syntax: pass a boolean series back into the dataframe to get a WHERE clause equivalent. The trickier fix was a schema change in the data. Eurovision added a telephone vote in 2015, splitting jury and public scores. Pre-2015 rows have jury_points as null, with the score sitting in total_points. One fillna call normalises the column and makes the full history comparable.
One Line from Data to Chart
Group the filtered data by country pair, count how many times each pair gave 12 points to the other, then pass the result to st.scatter_chart. He walked through the Cyprus/Greece scatter chart reveal (17:43) live. Cyprus and Greece light up immediately as two oversized circles, always awarding each other the maximum. Sweden draws a dense cluster too. A line chart of Denmark flatlining for several years revealed the period Denmark dropped out of the contest entirely.
“Data processing is most of it and” — Kris Jenkins
Interactivity, Layout, and the Execution Model
st.selectbox takes a prompt and a list, renders a dropdown, and returns the chosen value. Swap the hardcoded country string for that return value and the chart updates on selection. He walked through the interactive country picker (24:15) and then added st.columns(2) and st.tabs to split views. The execution model is intentionally simple: Streamlit reruns the whole script on every interaction. For expensive operations like a remote CSV fetch, wrap the load in a function and add the st.cache_data decorator (30:22) with a TTL. A second variant, st.cache_resource, handles connections that cannot be serialised to disk.
Notable Quotes
That is an underserved design space and Kris Jenkins · ▶ 2:30
Aren’t charts great? You can actually Kris Jenkins · ▶ 22:19
Data processing is most of it and Kris Jenkins · ▶ 23:11
Key Takeaways
- Streamlit targets the gap between a quick personal look and a small internal audience, not public-scale apps.
- UV’s local package cache means project setup works without internet, and a virtual environment appears automatically.
- st.cache_data pins expensive data loads in memory; st.cache_resource handles connections that cannot be serialised.