CoolFace
Apppublic

EshaTariq/AstroViz_AI

sourceHugging Facemitupdated 2y agoView on Hugging Face
1likes
app.py83 linesDownload Raw Back to root
1import streamlit as st2import requests3 4import plotly.graph_objects as go5import pandas as pd6import pydeck as pdk7import os8from dotenv import load_dotenv9 10# Load environment variables11load_dotenv()12 13# NASA API Key14NASA_API_KEY = os.getenv("NASA_API_KEY")15 16# Fetch NASA data (Example: Asteroids - NeoWs)17@st.cache_data18def get_nasa_data():19    url = f"https://api.nasa.gov/neo/rest/v1/feed?api_key={NASA_API_KEY}"20    response = requests.get(url)21    if response.status_code == 200:22        return response.json()23    else:24        return None25 26# Streamlit UI27st.title("๐ŸŒŒ AstroViz AI - Space Data Visualization")28st.sidebar.header("Navigation")29page = st.sidebar.selectbox("Choose a visualization:", ["Asteroid Data", "3D Space View", "Planet Data Visualization"])30 31if page == "Asteroid Data":32    st.subheader("๐Ÿš€ Near Earth Objects (NEOs)")33    data = get_nasa_data()34    if data:35        neos = []36        for date, objects in data['near_earth_objects'].items():37            for obj in objects:38                neos.append({39                    "Name": obj['name'],40                    "Diameter (m)": obj['estimated_diameter']['meters']['estimated_diameter_max'],41                    "Velocity (km/h)": obj['close_approach_data'][0]['relative_velocity']['kilometers_per_hour'],42                    "Miss Distance (km)": obj['close_approach_data'][0]['miss_distance']['kilometers'],43                    "Orbiting Body": obj['close_approach_data'][0]['orbiting_body']44                })45        df = pd.DataFrame(neos)46        st.dataframe(df)47        fig = px.bar(df, x="Name", y="Diameter (m)", color="Orbiting Body", title="Asteroid Sizes")48        st.plotly_chart(fig)49        scatter_fig = px.scatter(df, x="Miss Distance (km)", y="Velocity (km/h)", size="Diameter (m)", color="Orbiting Body", hover_data=["Name"], title="Asteroid Miss Distance vs. Speed")50        st.plotly_chart(scatter_fig)51    else:52        st.error("Failed to fetch NASA data. Try again later.")53 54elif page == "3D Space View":55    st.subheader("๐ŸŒ 3D Visualization of Earth & Objects")56    layer = pdk.Layer(57        "ScatterplotLayer",58        data=pd.DataFrame({"lat": [0], "lon": [0], "size": [500000]}),59        get_position="[lon, lat]",60        get_radius="size",61        get_color="[255, 0, 0, 160]",62        pickable=True,63    )64    view_state = pdk.ViewState(latitude=0, longitude=0, zoom=1, pitch=50, bearing=0)65    st.pydeck_chart(pdk.Deck(layers=[layer], initial_view_state=view_state))66 67elif page == "Planet Data Visualization":68    st.subheader("๐Ÿช Explore Planetary Data")69    planet_data = pd.DataFrame({70        "Planet": ["Mercury", "Venus", "Earth", "Mars", "Jupiter", "Saturn", "Uranus", "Neptune"],71        "Mass (10^24 kg)": [0.33, 4.87, 5.97, 0.64, 1898, 568, 86.8, 102],72        "Diameter (km)": [4879, 12104, 12756, 6792, 142984, 120536, 51118, 49528],73        "Distance from Sun (10^6 km)": [57.9, 108.2, 149.6, 227.9, 778.5, 1432.0, 2867.0, 4497.1]74    })75    selected_planet = st.selectbox("Choose a planet to visualize:", planet_data["Planet"].tolist())76    planet_info = planet_data[planet_data["Planet"] == selected_planet]77    st.write(planet_info)78    planet_fig = go.Figure(data=[go.Bar(x=planet_info["Planet"], y=planet_info["Diameter (km)"], marker_color='blue')])79    planet_fig.update_layout(title="Planet Diameter Comparison", xaxis_title="Planet", yaxis_title="Diameter (km)")80    st.plotly_chart(planet_fig)81 82st.sidebar.info("Data sourced from NASA API.")83