|
|
|
|
|
|
|
|
|
|
|
import streamlit as st |
|
|
import pandas as pd |
|
|
import joblib |
|
|
import matplotlib.pyplot as plt |
|
|
import seaborn as sns |
|
|
import os |
|
|
|
|
|
|
|
|
print(os.getcwd()) |
|
|
|
|
|
|
|
|
@st.cache_data |
|
|
def load_data(): |
|
|
file_path = "pokemon_cleaned.csv" |
|
|
|
|
|
if not os.path.exists(file_path): |
|
|
st.error(f"❌ File not found: {file_path}") |
|
|
return None |
|
|
|
|
|
try: |
|
|
df = pd.read_csv(file_path) |
|
|
return df |
|
|
except Exception as e: |
|
|
st.error(f"❌ Failed to load the CSV: {e}") |
|
|
return None |
|
|
|
|
|
df = load_data() |
|
|
|
|
|
if df is None: |
|
|
st.stop() |
|
|
|
|
|
|
|
|
model = joblib.load("random_forest.pkl") |
|
|
model = joblib.load("logistic_regression.pkl") |
|
|
model = joblib.load("naive_bayes.pkl") |
|
|
|
|
|
st.sidebar.title("🔍 Pokémon Explorer") |
|
|
st.sidebar.markdown("Navigate through different sections!") |
|
|
page = st.sidebar.radio(" Select a Page", ["Home", "Data Overview", "Visualization and Prediction"]) |
|
|
|
|
|
|
|
|
if page == "Home": |
|
|
st.title("Pokémon Explorer") |
|
|
st.markdown("Explore Pokémon stats, types, and visualizations interactively! ") |
|
|
st.markdown("### Features:") |
|
|
st.write("✔️ Browse Pokémon data") |
|
|
st.write("✔️ Visualize Pokémon stats") |
|
|
st.write("✔️ Search and filter Pokémon") |
|
|
st.write("✔️ Predict Pokémon attributes") |
|
|
|
|
|
|
|
|
elif page == "Data Overview": |
|
|
st.title("Pokémon Data Overview") |
|
|
st.write("Browse and explore the Pokémon dataset.") |
|
|
|
|
|
name_search = st.text_input("🔍 Search Pokémon by Name") |
|
|
type_filter = st.selectbox("🎨 Filter by Type", ["All"] + sorted(df['Type 1'].unique().tolist())) |
|
|
|
|
|
filtered_df = df |
|
|
if name_search: |
|
|
filtered_df = filtered_df[filtered_df['Name'].str.contains(name_search, case=False, na=False)] |
|
|
if type_filter != "All": |
|
|
filtered_df = filtered_df[filtered_df['Type 1'] == type_filter] |
|
|
|
|
|
st.dataframe(filtered_df, use_container_width=True) |
|
|
|
|
|
|
|
|
elif page == "Visualization and Prediction": |
|
|
st.title(" Pokémon Data Visualization and Prediction") |
|
|
st.write("Explore Pokémon stats with interactive graphs!") |
|
|
|
|
|
pokemon_list = df['Name'].unique().tolist() |
|
|
selected_pokemon_name = st.selectbox("🔍 Select a Pokémon", pokemon_list) |
|
|
selected_pokemon = df[df['Name'] == selected_pokemon_name] |
|
|
|
|
|
if not selected_pokemon.empty: |
|
|
st.write(f"### {selected_pokemon.iloc[0]['Name']}") |
|
|
st.write(f"**Type:** {selected_pokemon.iloc[0]['Type 1']} / {selected_pokemon.iloc[0].get('Type 2', 'None')}") |
|
|
st.write(f"**Legendary:** {'Yes' if selected_pokemon.iloc[0]['Legendary'] else 'No'}") |
|
|
st.write(f"**Generation:** {selected_pokemon.iloc[0]['Generation']}") |
|
|
|
|
|
stats = ["HP", "Attack", "Defense", "Speed"] |
|
|
fig, ax = plt.subplots(figsize=(8, 5)) |
|
|
sns.barplot(x=stats, y=selected_pokemon.iloc[0][stats].values, ax=ax) |
|
|
ax.set_xlabel("Stats") |
|
|
ax.set_ylabel("Value") |
|
|
ax.set_title(f"Stat Distribution for {selected_pokemon.iloc[0]['Name']}") |
|
|
st.pyplot(fig) |
|
|
|
|
|
st.sidebar.markdown("---") |
|
|
st.sidebar.write("✨ Made by CI-DAVE") |
|
|
|