Spaces:
Sleeping
Sleeping
prep
Browse files- prep/Hello.py +69 -0
- prep/README.md +44 -0
- prep/pages/1_Data_Introduction.py +18 -0
- prep/pages/2_Widget_Exploration.py +53 -0
- prep/pages/3_Other_Tools.py +12 -0
- prep/requirements.txt +5 -0
prep/Hello.py
ADDED
@@ -0,0 +1,69 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import streamlit as st
|
2 |
+
|
3 |
+
|
4 |
+
st.set_page_config(
|
5 |
+
page_title="Hello",
|
6 |
+
page_icon="👋",
|
7 |
+
)
|
8 |
+
|
9 |
+
st.sidebar.success("Select a Page")
|
10 |
+
|
11 |
+
st.title('This is my fancy title for my main page!')
|
12 |
+
|
13 |
+
# after this point, things will be a little different if you are on PL or running the code locally on your computer
|
14 |
+
# I'll be running locally usually, but let's look at PL first:
|
15 |
+
|
16 |
+
# INSTRUCTIONS FOR RUNNING ON PL:
|
17 |
+
# 1. Open a "Terminal" by: View --> Terminal OR just the "Terminal" through the hamburger menu
|
18 |
+
# 2. run in terminal with: "streamlit run <the app .py file>"
|
19 |
+
# 3. click the "Open in Browser" link that pops up OR click on "Ports" and copy the URL
|
20 |
+
# 4. Open a Simple Browswer with View --> Command Palette --> Simple Browser: Show
|
21 |
+
# 5. use the URL from prior steps as intput into this simple browser
|
22 |
+
|
23 |
+
### 1.1 Text in Streamlit ###
|
24 |
+
# Let's look at a few more ways to include text in our Streamlit apps.
|
25 |
+
# We usually start our app with a title (like what we had above).
|
26 |
+
# We can also have headers and subheaders.
|
27 |
+
# See: https://docs.streamlit.io/develop/api-reference/text
|
28 |
+
|
29 |
+
st.header('This is a "header"')
|
30 |
+
st.subheader('This is a "subheader"')
|
31 |
+
|
32 |
+
# On the docs there are several other ways to use text (like LaTeX and Markdown),
|
33 |
+
# but we'll usually just be using the plain text:
|
34 |
+
st.text("This is plain text.")
|
35 |
+
|
36 |
+
# You can also use "magic" commands like:
|
37 |
+
'This is also plain text!!'
|
38 |
+
|
39 |
+
# ... but we will be using the "write" command typically for consistency:
|
40 |
+
st.write('This is also some text.')
|
41 |
+
|
42 |
+
# ... or often we will use Markdown:
|
43 |
+
st.markdown("""
|
44 |
+
I can also use markdown to write stuff!
|
45 |
+
""")
|
46 |
+
|
47 |
+
# You should do whatever makes sense to you!
|
48 |
+
|
49 |
+
### 1.2 Layout elements ###
|
50 |
+
st.subheader('Layouts')
|
51 |
+
# There are several different ways we can layout our text/charts.
|
52 |
+
# See: https://docs.streamlit.io/develop/api-reference/layout
|
53 |
+
|
54 |
+
col1, col2 = st.columns(2)
|
55 |
+
col1.write('This is me adding in some text to column 1')
|
56 |
+
col2.write('This is me adding in some text to column 2')
|
57 |
+
|
58 |
+
# Note that in theory we can have multiple columns, but in practice
|
59 |
+
# the columns will "wrap" after a certain number by default.
|
60 |
+
|
61 |
+
# There is a lot of fun stuff here to play with in layouts!
|
62 |
+
# For our purposes, we'll start off with some of the simple defaults.
|
63 |
+
|
64 |
+
### 1.3 Images ###
|
65 |
+
st.subheader('Images')
|
66 |
+
# We can include images with a URL:
|
67 |
+
st.image('https://i.redd.it/on-a-scale-of-1-10-how-derpy-is-she-v0-z8gtdwu5n5zb1.jpg?width=3024&format=pjpg&auto=webp&s=345e7e1d5b45f20c733e497a9f746f4cbd3a61da',
|
68 |
+
width=400,
|
69 |
+
caption='A thinly veiled excuse to include a derpy corgi.')
|
prep/README.md
ADDED
@@ -0,0 +1,44 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
---
|
2 |
+
title: Streamlit Template (Shadi's Class)
|
3 |
+
emoji: 🏢
|
4 |
+
colorFrom: blue
|
5 |
+
colorTo: gray
|
6 |
+
sdk: streamlit
|
7 |
+
sdk_version: 1.39.0
|
8 |
+
app_file: Hello.py
|
9 |
+
pinned: false
|
10 |
+
license: mit
|
11 |
+
---
|
12 |
+
|
13 |
+
Check out the configuration reference at https://huggingface.co/docs/hub/spaces-config-reference
|
14 |
+
|
15 |
+
# Install what you need for this notebook
|
16 |
+
|
17 |
+
It is recommended you install into a conda environment:
|
18 |
+
|
19 |
+
```
|
20 |
+
conda create -n DataVizClass python=3.10
|
21 |
+
conda activate DataVizClass
|
22 |
+
```
|
23 |
+
|
24 |
+
Then you can install the correct packages. If you have downloaded the requirements document you can install directly with:
|
25 |
+
|
26 |
+
```
|
27 |
+
pip install -r /path/to/requirements.txt
|
28 |
+
```
|
29 |
+
|
30 |
+
Or you can install one by one with:
|
31 |
+
|
32 |
+
```
|
33 |
+
pip install streamlit==1.39.0 altair numpy pandas matplotlib
|
34 |
+
```
|
35 |
+
|
36 |
+
To work with the VSCode interface, be sure that `jupyter` is also installed:
|
37 |
+
|
38 |
+
```
|
39 |
+
pip install jupyter
|
40 |
+
```
|
41 |
+
|
42 |
+
Or you can install with `conda`.
|
43 |
+
|
44 |
+
Note that the package [Streamlit](https://streamlit.io/) that we will be working with requires we use Python scripts, so JupyterLab and/or Jupyter Notebooks won't work for this process.
|
prep/pages/1_Data_Introduction.py
ADDED
@@ -0,0 +1,18 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import streamlit as st
|
2 |
+
|
3 |
+
st.set_page_config(page_title="Introduction to Data", page_icon=":1234:") # not sure what this adds?
|
4 |
+
st.sidebar.header("Introduction to Data")
|
5 |
+
|
6 |
+
st.title('This is a title for Data Exploration')
|
7 |
+
|
8 |
+
mobility_url = 'https://raw.githubusercontent.com/UIUC-iSchool-DataViz/is445_data/main/mobility.csv'
|
9 |
+
|
10 |
+
st.write("Here is where we could give some background about our dataset.")
|
11 |
+
st.write("This would be a good place to include links, references, and images.")
|
12 |
+
|
13 |
+
import pandas as pd
|
14 |
+
df = pd.read_csv(mobility_url)
|
15 |
+
|
16 |
+
# There are a few ways to show the dataframe if we want our viewer to see the table:
|
17 |
+
#df
|
18 |
+
st.write(df)
|
prep/pages/2_Widget_Exploration.py
ADDED
@@ -0,0 +1,53 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import streamlit as st
|
2 |
+
|
3 |
+
st.set_page_config(page_title="Widget Exploration", page_icon=":1234:")
|
4 |
+
st.sidebar.header("Widget Exploration")
|
5 |
+
|
6 |
+
st.header("Simple Widgets")
|
7 |
+
|
8 |
+
st.write("How great are you feeling right now?")
|
9 |
+
sentiment_mapping = ["one", "two", "three", "four", "five"] # map to these numers
|
10 |
+
selected = st.feedback("stars")
|
11 |
+
if selected is not None: # make sure we have a selection
|
12 |
+
st.markdown(f"You selected {sentiment_mapping[selected]} star(s).")
|
13 |
+
if selected < 1:
|
14 |
+
st.markdown('Sorry to hear you are so sad :(')
|
15 |
+
elif selected < 3:
|
16 |
+
st.markdown('A solid medium is great!')
|
17 |
+
else:
|
18 |
+
st.markdown('Fantastic you are having such a great day!')
|
19 |
+
|
20 |
+
|
21 |
+
|
22 |
+
st.header("Tying Widgets to Pandas/Matplotlib Plots")
|
23 |
+
|
24 |
+
# we can also tie widget interaction to plots
|
25 |
+
|
26 |
+
# first, let's just try a simple plot with pandas
|
27 |
+
import pandas as pd
|
28 |
+
import matplotlib.pyplot as plt
|
29 |
+
|
30 |
+
df = pd.read_csv("https://raw.githubusercontent.com/UIUC-iSchool-DataViz/is445_data/main/mobility.csv")
|
31 |
+
|
32 |
+
# let's first make a plot
|
33 |
+
fig,ax = plt.subplots() # this changed
|
34 |
+
df.groupby('State')['Mobility'].mean().plot(kind='bar',ax=ax)
|
35 |
+
|
36 |
+
st.pyplot(fig) # this is different
|
37 |
+
|
38 |
+
# now, let's remake this plot, but allow for some interactivity by only
|
39 |
+
# selecting a subset of states to plot
|
40 |
+
# multi-select
|
41 |
+
states_selected = st.multiselect('Which states do you want to view?', df['State'].unique())
|
42 |
+
|
43 |
+
if len(states_selected) > 0: # if selected
|
44 |
+
df_subset = df[df['State'].isin(states_selected)]
|
45 |
+
|
46 |
+
fig2,ax2 = plt.subplots() # this changed
|
47 |
+
df_subset.groupby('State')['Mobility'].mean().plot(kind='bar',ax=ax2)
|
48 |
+
|
49 |
+
st.pyplot(fig2) # this is different
|
50 |
+
else: # otherwise plot all states
|
51 |
+
fig2,ax2 = plt.subplots() # this changed
|
52 |
+
df.groupby('State')['Mobility'].mean().plot(kind='bar',ax=ax2)
|
53 |
+
st.pyplot(fig2) # this is different
|
prep/pages/3_Other_Tools.py
ADDED
@@ -0,0 +1,12 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import streamlit as st
|
2 |
+
|
3 |
+
st.set_page_config(page_title="Other Tools", page_icon=":1234:")
|
4 |
+
st.sidebar.header("Other Tools")
|
5 |
+
|
6 |
+
st.title("Other cool things to check out")
|
7 |
+
|
8 |
+
st.markdown(""" While we won't have time to cover everything, a few things you might want to check out later:
|
9 |
+
1. You can connect databases to Streamlit [like AWS, MongoDB, etc](https://docs.streamlit.io/develop/tutorials/databases)
|
10 |
+
1. You can embed Streamlit Spaces [within other webpages](https://huggingface.co/docs/hub/en/spaces-sdks-streamlit#embed-streamlit-spaces-on-other-webpages)
|
11 |
+
1. If you have models hosted on HuggingFace, you can build [apps that use those models](https://huggingface.co/blog/streamlit-spaces) (like LLMs) and let others use them.
|
12 |
+
""")
|
prep/requirements.txt
ADDED
@@ -0,0 +1,5 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
streamlit==1.39.0
|
2 |
+
altair
|
3 |
+
numpy
|
4 |
+
pandas
|
5 |
+
matplotlib
|