# Copyright 2018-2022 Streamlit Inc. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. from typing import Any def intro(): import streamlit as st st.sidebar.success("Select a demo above.") st.markdown( """ Streamlit is an open-source app framework built specifically for Machine Learning and Data Science projects. **👈 Select a demo from the dropdown on the left** to see some examples of what Streamlit can do! ### Want to learn more? - Check out [streamlit.io](https://streamlit.io) - Jump into our [documentation](https://docs.streamlit.io) - Ask a question in our [community forums](https://discuss.streamlit.io) ### See more complex demos - Use a neural net to [analyze the Udacity Self-driving Car Image Dataset](https://github.com/streamlit/demo-self-driving) - Explore a [New York City rideshare dataset](https://github.com/streamlit/demo-uber-nyc-pickups) """ ) # Turn off black formatting for this function to present the user with more # compact code. # fmt: off def mapping_demo(): import streamlit as st import pandas as pd import pydeck as pdk from urllib.error import URLError @st.cache def from_data_file(filename): url = ( "http://raw.githubusercontent.com/streamlit/" "example-data/master/hello/v1/%s" % filename) return pd.read_json(url) try: ALL_LAYERS = { "Bike Rentals": pdk.Layer( "HexagonLayer", data=from_data_file("bike_rental_stats.json"), get_position=["lon", "lat"], radius=200, elevation_scale=4, elevation_range=[0, 1000], extruded=True, ), "Bart Stop Exits": pdk.Layer( "ScatterplotLayer", data=from_data_file("bart_stop_stats.json"), get_position=["lon", "lat"], get_color=[200, 30, 0, 160], get_radius="[exits]", radius_scale=0.05, ), "Bart Stop Names": pdk.Layer( "TextLayer", data=from_data_file("bart_stop_stats.json"), get_position=["lon", "lat"], get_text="name", get_color=[0, 0, 0, 200], get_size=15, get_alignment_baseline="'bottom'", ), "Outbound Flow": pdk.Layer( "ArcLayer", data=from_data_file("bart_path_stats.json"), get_source_position=["lon", "lat"], get_target_position=["lon2", "lat2"], get_source_color=[200, 30, 0, 160], get_target_color=[200, 30, 0, 160], auto_highlight=True, width_scale=0.0001, get_width="outbound", width_min_pixels=3, width_max_pixels=30, ), } st.sidebar.markdown('### Map Layers') selected_layers = [ layer for layer_name, layer in ALL_LAYERS.items() if st.sidebar.checkbox(layer_name, True)] if selected_layers: st.pydeck_chart(pdk.Deck( map_style="mapbox://styles/mapbox/light-v9", initial_view_state={"latitude": 37.76, "longitude": -122.4, "zoom": 11, "pitch": 50}, layers=selected_layers, )) else: st.error("Please choose at least one layer above.") except URLError as e: st.error(""" **This demo requires internet access.** Connection error: %s """ % e.reason) # fmt: on # Turn off black formatting for this function to present the user with more # compact code. # fmt: off def fractal_demo(): import streamlit as st import numpy as np # Interactive Streamlit elements, like these sliders, return their value. # This gives you an extremely simple interaction model. iterations = st.sidebar.slider("Level of detail", 2, 20, 10, 1) separation = st.sidebar.slider("Separation", 0.7, 2.0, 0.7885) # Non-interactive elements return a placeholder to their location # in the app. Here we're storing progress_bar to update it later. progress_bar = st.sidebar.progress(0) # These two elements will be filled in later, so we create a placeholder # for them using st.empty() frame_text = st.sidebar.empty() image = st.empty() m, n, s = 960, 640, 400 x = np.linspace(-m / s, m / s, num=m).reshape((1, m)) y = np.linspace(-n / s, n / s, num=n).reshape((n, 1)) for frame_num, a in enumerate(np.linspace(0.0, 4 * np.pi, 100)): # Here were setting value for these two elements. progress_bar.progress(frame_num) frame_text.text("Frame %i/100" % (frame_num + 1)) # Performing some fractal wizardry. c = separation * np.exp(1j * a) Z = np.tile(x, (n, 1)) + 1j * np.tile(y, (1, m)) C = np.full((n, m), c) M: Any = np.full((n, m), True, dtype=bool) N = np.zeros((n, m)) for i in range(iterations): Z[M] = Z[M] * Z[M] + C[M] M[np.abs(Z) > 2] = False N[M] = i # Update the image placeholder by calling the image() function on it. image.image(1.0 - (N / N.max()), use_column_width=True) # We clear elements by calling empty on them. progress_bar.empty() frame_text.empty() # Streamlit widgets automatically run the script from top to bottom. Since # this button is not connected to any other logic, it just causes a plain # rerun. st.button("Re-run") # fmt: on # Turn off black formatting for this function to present the user with more # compact code. # fmt: off def plotting_demo(): import streamlit as st import time import numpy as np progress_bar = st.sidebar.progress(0) status_text = st.sidebar.empty() last_rows = np.random.randn(1, 1) chart = st.line_chart(last_rows) for i in range(1, 101): new_rows = last_rows[-1, :] + np.random.randn(5, 1).cumsum(axis=0) status_text.text("%i%% Complete" % i) chart.add_rows(new_rows) progress_bar.progress(i) last_rows = new_rows time.sleep(0.05) progress_bar.empty() # Streamlit widgets automatically run the script from top to bottom. Since # this button is not connected to any other logic, it just causes a plain # rerun. st.button("Re-run") # fmt: on # Turn off black formatting for this function to present the user with more # compact code. # fmt: off def data_frame_demo(): import streamlit as st import pandas as pd import altair as alt from urllib.error import URLError @st.cache def get_UN_data(): AWS_BUCKET_URL = "http://streamlit-demo-data.s3-us-west-2.amazonaws.com" df = pd.read_csv(AWS_BUCKET_URL + "/agri.csv.gz") return df.set_index("Region") try: df = get_UN_data() countries = st.multiselect( "Choose countries", list(df.index), ["China", "United States of America"] ) if not countries: st.error("Please select at least one country.") else: data = df.loc[countries] data /= 1000000.0 st.write("### Gross Agricultural Production ($B)", data.sort_index()) data = data.T.reset_index() data = pd.melt(data, id_vars=["index"]).rename( columns={"index": "year", "value": "Gross Agricultural Product ($B)"} ) chart = ( alt.Chart(data) .mark_area(opacity=0.3) .encode( x="year:T", y=alt.Y("Gross Agricultural Product ($B):Q", stack=None), color="Region:N", ) ) st.altair_chart(chart, use_container_width=True) except URLError as e: st.error( """ **This demo requires internet access.** Connection error: %s """ % e.reason ) # fmt: on