File size: 3,067 Bytes
9890a43
 
 
 
 
0c60647
 
 
9890a43
 
 
 
 
0c60647
 
 
 
 
9890a43
0c60647
9890a43
 
 
0c60647
9890a43
0c60647
9890a43
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
# utils_eda.py
import streamlit as st
import pandas as pd
import numpy as np
import plotly.express as px
import os

_this_file_dir = os.path.dirname(os.path.abspath(__file__))

@st.cache_data
def load_data():
    """Loads the cleaned datasets required for the app."""
    try:
        # --- Construct absolute paths to the data files ---
        path_engineered = os.path.join(_this_file_dir, 'cleaned_engineered_data.csv')
        path_merged = os.path.join(_this_file_dir, 'cleaned_merged_data.csv')

        engineered_data = pd.read_csv(path_engineered)
        engineered_data['Date'] = pd.to_datetime(engineered_data['Date'])
        ts_data = pd.read_csv(path_merged)
        ts_data['Date'] = pd.to_datetime(ts_data['Date'])
        return engineered_data, ts_data
    except FileNotFoundError as e:
        st.error(f"Error loading data: {e}. Make sure 'cleaned_engineered_data.csv' and 'cleaned_merged_data.csv' are present in the main directory.")
        return None, None
    

def create_target_variable_plots(df):
    """Creates all plots related to the target variable analysis."""
    st.markdown("#### Distribution of Insect Counts")
    fig_hist = px.histogram(df, x='Number of insects', labels={'Number of insects': 'Number of Insects', 'count': 'Frequency'}, nbins=30, color_discrete_sequence=['skyblue'])
    st.plotly_chart(fig_hist, use_container_width=True)

    st.markdown("#### Insect Counts by Location")
    fig_box = px.box(df, x='Location', y='Number of insects', color='Location', labels={'Number of insects': 'Number of Insects'})
    st.plotly_chart(fig_box, use_container_width=True)
    
    st.markdown("#### Daily Insect Activity Over Time")
    daily_stats = df.groupby('Date')['Number of insects'].agg(['sum', 'mean']).reset_index()
    fig_time = px.line(daily_stats, x='Date', y=['sum', 'mean'], labels={'value': 'Number of Insects', 'variable': 'Metric'})
    st.plotly_chart(fig_time, use_container_width=True)

def create_correlation_plots(df):
    """Creates all plots related to correlation analysis."""
    numeric_cols = df.select_dtypes(include=np.number).columns
    corr_matrix = df[numeric_cols].corr()
    st.markdown("#### Full Feature Correlation Matrix")
    fig_corr_full = px.imshow(corr_matrix, text_auto=True, aspect="auto", color_continuous_scale="RdBu_r", zmin=-1, zmax=1)
    st.plotly_chart(fig_corr_full, use_container_width=True)

def create_weather_analysis_plots(df):
    """Creates all plots for the weather patterns section."""
    st.markdown("#### Temperature vs. Insect Activity")
    fig_temp = px.scatter(df, x='Average Temperature', y='Number of insects', color='Number of insects', color_continuous_scale='Viridis')
    st.plotly_chart(fig_temp, use_container_width=True)

    st.markdown("#### Humidity vs. Insect Activity")
    fig_humidity = px.scatter(df, x='Average Humidity', y='Number of insects', color='Number of insects', color_continuous_scale='Plasma')
    st.plotly_chart(fig_humidity, use_container_width=True)