# rmarufs/edudata-analytics architecture

> Architecture diagram of the GitHub repository rmarufs/edudata-analytics, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-28). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/rmarufs/edudata-analytics
- Repository: https://github.com/rmarufs/edudata-analytics

## Overview

EduStat AI is a Streamlit application for educational-data analysis, cleaning, statistical comparison, and predictive modeling. Its principal workflow is to upload a dataset, clean it automatically or manually, explore and compare the data, then train models and request AI guidance. The README also describes project and dataset persistence through Supabase. Page capabilities and navigation are documented, but most page implementations were not sampled, so page-to-helper wiring is shown only where supported by the documented workflow; GMDH internals are grounded in sampled source.

Main entry points: [`Home.py`](https://github.com/rmarufs/edudata-analytics/blob/main/Home.py) (App entry and navigation), [`pages/09_CatBoost_Modeling.py`](https://github.com/rmarufs/edudata-analytics/blob/main/pages/09_CatBoost_Modeling.py) (CatBoost modeling), [`pages/10_GMDH_Modeling.py`](https://github.com/rmarufs/edudata-analytics/blob/main/pages/10_GMDH_Modeling.py) (GMDH modeling), [`Utils/database_utils.py`](https://github.com/rmarufs/edudata-analytics/blob/main/Utils/database_utils.py) (Project and dataset persistence)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_app["Application"]
  node_home["App entry and navigation<br/>[Home.py]"]
end

subgraph group_data["Data preparation"]
  node_upload["Dataset upload<br/>[01_Data_Upload.py]"]
  node_dataset[("Active dataset")]
  node_auto_clean["Automatic cleaning"]
  node_missing["Missing values"]
  node_outliers["Outlier handling"]
end

subgraph group_analysis["Analysis"]
  node_visual["Visual analysis"]
  node_pivots["Pivot tables<br/>[06_Pivot_Tables.py]"]
  node_comparison["Group comparison"]
end

subgraph group_modeling["Modeling and assistance"]
  node_logistic["Logistic regression"]
  node_catboost["CatBoost modeling"]
  node_catboost_utils["CatBoost routines"]
  node_gmdh_page["GMDH modeling"]
  node_gmdh_model["GMDH regressor<br/>[model.py]"]
  node_gmdh_layer["Layer selection<br/>[layer.py]"]
  node_gmdh_neuron["Polynomial neuron<br/>[neuron.py]"]
  node_chat_page["AI chat<br/>[11_AI_Chat.py]"]
  node_chat["Chat integration<br/>[chat.py]"]
  node_ai_helper["LLM requests<br/>[AI_helper.py]"]
end

subgraph group_persistence["Persistence"]
  node_database_utils["Project and dataset persistence<br/>[database_utils.py]"]
  node_supabase_client["Supabase client<br/>[supabase_client.py]"]
end

node_analyst(("Analyst"))
node_supabase[("Supabase storage")]
node_llm_service{{"OpenAI or OpenRouter"}}

node_analyst -->|"opens"| node_home
node_home -->|"navigates"| node_upload
node_home -->|"navigates"| node_auto_clean
node_home -->|"navigates"| node_missing
node_home -->|"navigates"| node_outliers
node_home -->|"navigates"| node_visual
node_home -->|"navigates"| node_pivots
node_home -->|"navigates"| node_comparison
node_home -->|"navigates"| node_logistic
node_home -->|"navigates"| node_catboost
node_home -->|"navigates"| node_gmdh_page
node_home -->|"navigates"| node_chat_page
node_upload -->|"loads"| node_dataset
node_auto_clean -->|"cleans"| node_dataset
node_missing -->|"edits"| node_dataset
node_outliers -->|"edits"| node_dataset
node_visual -->|"analyzes"| node_dataset
node_pivots -->|"summarizes"| node_dataset
node_comparison -->|"compares"| node_dataset
node_logistic -->|"trains from"| node_dataset
node_catboost -->|"trains from"| node_dataset
node_catboost -->|"calls"| node_catboost_utils
node_gmdh_page -->|"trains from"| node_dataset
node_gmdh_page -->|"fits and predicts"| node_gmdh_model
node_gmdh_model -->|"builds layers"| node_gmdh_layer
node_gmdh_layer -->|"fits candidates"| node_gmdh_neuron
node_chat_page -->|"uses"| node_chat
node_chat -->|"requests completion"| node_ai_helper
node_ai_helper -.->|"calls API"| node_llm_service
node_database_utils -->|"gets client"| node_supabase_client
node_supabase_client -->|"connects"| node_supabase
node_database_utils -->|"reads and writes"| node_supabase

click node_home "https://github.com/rmarufs/edudata-analytics/blob/main/Home.py"
click node_upload "https://github.com/rmarufs/edudata-analytics/blob/main/pages/01_Data_Upload.py"
click node_auto_clean "https://github.com/rmarufs/edudata-analytics/blob/main/pages/02_Auto_Processing.py"
click node_missing "https://github.com/rmarufs/edudata-analytics/blob/main/pages/03_Missing_Values.py"
click node_outliers "https://github.com/rmarufs/edudata-analytics/blob/main/pages/04_Outlier_Handling.py"
click node_visual "https://github.com/rmarufs/edudata-analytics/blob/main/pages/05_Visual_Analysis.py"
click node_pivots "https://github.com/rmarufs/edudata-analytics/blob/main/pages/06_Pivot_Tables.py"
click node_comparison "https://github.com/rmarufs/edudata-analytics/blob/main/pages/07_Group_Comparison.py"
click node_logistic "https://github.com/rmarufs/edudata-analytics/blob/main/pages/08_Logistic_Regression.py"
click node_catboost "https://github.com/rmarufs/edudata-analytics/blob/main/pages/09_CatBoost_Modeling.py"
click node_catboost_utils "https://github.com/rmarufs/edudata-analytics/blob/main/Utils/catboost_modeling.py"
click node_gmdh_page "https://github.com/rmarufs/edudata-analytics/blob/main/pages/10_GMDH_Modeling.py"
click node_gmdh_model "https://github.com/rmarufs/edudata-analytics/blob/main/gmdh/model.py"
click node_gmdh_layer "https://github.com/rmarufs/edudata-analytics/blob/main/gmdh/layer.py"
click node_gmdh_neuron "https://github.com/rmarufs/edudata-analytics/blob/main/gmdh/neuron.py"
click node_chat_page "https://github.com/rmarufs/edudata-analytics/blob/main/pages/11_AI_Chat.py"
click node_chat "https://github.com/rmarufs/edudata-analytics/blob/main/Utils/chat.py"
click node_ai_helper "https://github.com/rmarufs/edudata-analytics/blob/main/Utils/AI_helper.py"
click node_database_utils "https://github.com/rmarufs/edudata-analytics/blob/main/Utils/database_utils.py"
click node_supabase_client "https://github.com/rmarufs/edudata-analytics/blob/main/Utils/supabase_client.py"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_home toneBlue
class node_upload,node_dataset,node_auto_clean,node_missing,node_outliers,node_supabase toneAmber
class node_visual,node_pivots,node_comparison,node_llm_service toneMint
class node_logistic,node_catboost,node_catboost_utils,node_gmdh_page,node_gmdh_model,node_gmdh_layer,node_gmdh_neuron,node_chat_page,node_chat,node_ai_helper toneRose
class node_database_utils,node_supabase_client,node_analyst toneIndigo
```

## Components

### Application

- [App entry and navigation](https://github.com/rmarufs/edudata-analytics/blob/main/Home.py): `Home.py`

### Data preparation

- [Dataset upload](https://github.com/rmarufs/edudata-analytics/blob/main/pages/01_Data_Upload.py): `pages/01_Data_Upload.py`
- **Active dataset**
- [Automatic cleaning](https://github.com/rmarufs/edudata-analytics/blob/main/pages/02_Auto_Processing.py): `pages/02_Auto_Processing.py`
- [Missing values](https://github.com/rmarufs/edudata-analytics/blob/main/pages/03_Missing_Values.py): `pages/03_Missing_Values.py`
- [Outlier handling](https://github.com/rmarufs/edudata-analytics/blob/main/pages/04_Outlier_Handling.py): `pages/04_Outlier_Handling.py`

### Analysis

- [Visual analysis](https://github.com/rmarufs/edudata-analytics/blob/main/pages/05_Visual_Analysis.py): `pages/05_Visual_Analysis.py`
- [Pivot tables](https://github.com/rmarufs/edudata-analytics/blob/main/pages/06_Pivot_Tables.py): `pages/06_Pivot_Tables.py`
- [Group comparison](https://github.com/rmarufs/edudata-analytics/blob/main/pages/07_Group_Comparison.py): `pages/07_Group_Comparison.py`

### Modeling and assistance

- [Logistic regression](https://github.com/rmarufs/edudata-analytics/blob/main/pages/08_Logistic_Regression.py): `pages/08_Logistic_Regression.py`
- [CatBoost modeling](https://github.com/rmarufs/edudata-analytics/blob/main/pages/09_CatBoost_Modeling.py): `pages/09_CatBoost_Modeling.py`
- [CatBoost routines](https://github.com/rmarufs/edudata-analytics/blob/main/Utils/catboost_modeling.py): `Utils/catboost_modeling.py`
- [GMDH modeling](https://github.com/rmarufs/edudata-analytics/blob/main/pages/10_GMDH_Modeling.py): `pages/10_GMDH_Modeling.py`
- [GMDH regressor](https://github.com/rmarufs/edudata-analytics/blob/main/gmdh/model.py): `gmdh/model.py`
- [Layer selection](https://github.com/rmarufs/edudata-analytics/blob/main/gmdh/layer.py): `gmdh/layer.py`
- [Polynomial neuron](https://github.com/rmarufs/edudata-analytics/blob/main/gmdh/neuron.py): `gmdh/neuron.py`
- [AI chat](https://github.com/rmarufs/edudata-analytics/blob/main/pages/11_AI_Chat.py): `pages/11_AI_Chat.py`
- [Chat integration](https://github.com/rmarufs/edudata-analytics/blob/main/Utils/chat.py): `Utils/chat.py`
- [LLM requests](https://github.com/rmarufs/edudata-analytics/blob/main/Utils/AI_helper.py): `Utils/AI_helper.py`

### Persistence

- [Project and dataset persistence](https://github.com/rmarufs/edudata-analytics/blob/main/Utils/database_utils.py): `Utils/database_utils.py`
- [Supabase client](https://github.com/rmarufs/edudata-analytics/blob/main/Utils/supabase_client.py): `Utils/supabase_client.py`

### Other components

- **Analyst**
- **Supabase storage**
- **OpenAI or OpenRouter**

## Connections

- Analyst → App entry and navigation: opens
- App entry and navigation → Dataset upload: navigates
- App entry and navigation → Automatic cleaning: navigates
- App entry and navigation → Missing values: navigates
- App entry and navigation → Outlier handling: navigates
- App entry and navigation → Visual analysis: navigates
- App entry and navigation → Pivot tables: navigates
- App entry and navigation → Group comparison: navigates
- App entry and navigation → Logistic regression: navigates
- App entry and navigation → CatBoost modeling: navigates
- App entry and navigation → GMDH modeling: navigates
- App entry and navigation → AI chat: navigates
- Dataset upload → Active dataset: loads
- Automatic cleaning → Active dataset: cleans
- Missing values → Active dataset: edits
- Outlier handling → Active dataset: edits
- Visual analysis → Active dataset: analyzes
- Pivot tables → Active dataset: summarizes
- Group comparison → Active dataset: compares
- Logistic regression → Active dataset: trains from
- CatBoost modeling → Active dataset: trains from
- CatBoost modeling → CatBoost routines: calls
- GMDH modeling → Active dataset: trains from
- GMDH modeling → GMDH regressor: fits and predicts
- GMDH regressor → Layer selection: builds layers
- Layer selection → Polynomial neuron: fits candidates
- AI chat → Chat integration: uses
- Chat integration → LLM requests: requests completion
- LLM requests → OpenAI or OpenRouter: calls API
- Project and dataset persistence → Supabase client: gets client
- Supabase client → Supabase storage: connects
- Project and dataset persistence → Supabase storage: reads and writes
