Spaces:
Sleeping
Sleeping
import ibis | |
from ibis import _ | |
import streamlit as st | |
st.set_page_config(layout="wide", | |
page_title="TPL LandVote", | |
page_icon=":globe:") | |
''' | |
# LandVote Prototype | |
''' | |
## Chatbot | |
import os | |
import pandas as pd | |
import matplotlib.pyplot as plt | |
from pandasai.llm.openai import OpenAI | |
from pandasai import Agent | |
from pandasai.responses.streamlit_response import StreamlitResponse | |
llm = OpenAI(api_token=st.secrets["OPENAI_API_KEY"]) | |
df1 = pd.read_csv("data.csv") | |
agent = Agent( | |
[df1], | |
config={"verbose": True, "response_parser": StreamlitResponse, "llm": llm}, | |
) | |
with st.sidebar: | |
''' | |
## Data Assistant (experimental) | |
Ask questions about the landvote data, like: | |
- What are the top states for approved conservation funds? | |
- Plot the total funds spent in conservation each year. | |
- What city has approved the most funds in a single measure? What was the description of that vote? | |
- Which state has had largest number measures fail? What is that as a fraction of it's total measures? | |
''' | |
prompt = st.chat_input("Ask about the data") | |
if prompt: | |
with st.spinner(): | |
resp = agent.chat(prompt) | |
if os.path.isfile('exports/charts/temp_chart.png'): | |
im = plt.imread('exports/charts/temp_chart.png') | |
st.image(im) | |
os.remove('exports/charts/temp_chart.png') | |
st.write(resp) | |
# year = st.slider("Select a year", min_value=1988, max_value=2024, value=2022, step=2) | |
year = st.slider("Select a year", min_value=1988, max_value=2024, value=2022, step=1) | |
#gdf = df.filter(_.year==year).execute() | |
import leafmap.maplibregl as leafmap | |
m = leafmap.Map(style="positron", center=(-100, 30), zoom=5) | |
url = "https://huggingface.co/datasets/boettiger-lab/landvote/resolve/main/vote.pmtiles" | |
#gdf = df.filter(_.year==1988).execute() | |
#gdf.to_file("vote.geojson") | |
outcome = [ | |
'match', | |
['get', 'Status'], | |
"Pass", '#2E865F', | |
"Fail", '#FF3300', | |
'#ccc' | |
] | |
paint = {"fill-extrusion-color": outcome, | |
"fill-extrusion-opacity": 0.7, | |
"fill-extrusion-height": ["*", ["get", "log_amount"], 5000], | |
} | |
style = { | |
"layers": [ | |
{ | |
"id": "votes", | |
"source": "vote", | |
"source-layer": "vote", | |
"type": "fill-extrusion", | |
"filter": [ | |
"==", | |
["get", "year"], | |
year, | |
], # only show buildings with height info | |
"paint": paint | |
}, | |
], | |
} | |
m.add_pmtiles( | |
url, | |
style=style, | |
visible=True, | |
opacity=1.0, | |
tooltip=True, | |
fit_bounds=True, | |
) | |
#m.add_layer_control() | |
m.to_streamlit() | |