Spaces:
Running
Running
# visuals.py | |
import plotly.express as px | |
import streamlit as st | |
import pandas as pd | |
def render_summary(df: pd.DataFrame): | |
st.header("Summary Statistics") | |
col1, col2, col3 = st.columns(3) | |
with col1: | |
st.metric("Total Asteroids", len(df)) | |
with col2: | |
hazardous_count = df['is_hazardous'].sum() | |
st.metric("Potentially Hazardous", f"{hazardous_count} ({hazardous_count/len(df)*100:.1f}%)") | |
with col3: | |
st.metric("Avg. Size", f"{df['avg_diameter_km'].mean():.2f} km") | |
def render_visualizations(df: pd.DataFrame): | |
st.header("Visualizations") | |
viz_tab1, viz_tab2 = st.tabs(["Size Distribution", "Miss Distance"]) | |
with viz_tab1: | |
fig1 = px.histogram( | |
df, x="avg_diameter_km", color="is_hazardous", | |
title="Size Distribution of Near-Earth Objects", | |
labels={"avg_diameter_km": "Average Diameter (km)", "is_hazardous": "Potentially Hazardous"}, | |
color_discrete_map={True: "red", False: "green"} | |
) | |
st.plotly_chart(fig1, use_container_width=True) | |
with viz_tab2: | |
fig2 = px.scatter( | |
df, x="miss_distance_km", y="avg_diameter_km", color="is_hazardous", | |
size="relative_velocity_kph", hover_name="name", | |
title="Miss Distance vs. Size (with velocity)", | |
labels={ | |
"miss_distance_km": "Miss Distance (km)", | |
"avg_diameter_km": "Average Diameter (km)", | |
"is_hazardous": "Potentially Hazardous", | |
"relative_velocity_kph": "Velocity (km/h)" | |
}, | |
color_discrete_map={True: "red", False: "green"} | |
) | |
fig2.update_layout(xaxis_type="log") | |
st.plotly_chart(fig2, use_container_width=True) |