# charankumarkharade/eurovision-visualisation architecture

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

- Interactive diagram: https://gitdiagram.com/charankumarkharade/eurovision-visualisation
- Repository: https://github.com/charankumarkharade/eurovision-visualisation

## Overview

The repository is an interactive Eurovision voting-analysis dashboard, with a companion static community-map export. The main user workflow is to explore voting data over time, compare directed affinities and voting profiles, and inspect country-pair trends or detected blocs. The README documents additional filters and analyses that are represented as dashboard capabilities. The sampled code is partial and most dashboard behavior lives in app.py, so internal wiring is shown only where supported; the map exporter is a separate documented workflow.

Main entry points: [`app.py`](https://github.com/charankumarkharade/eurovision-visualisation/blob/main/app.py) (Streamlit dashboard), [`static_exports/generate_community_world_map.py`](https://github.com/charankumarkharade/eurovision-visualisation/blob/main/static_exports/generate_community_world_map.py) (Community map exporter), [`eurovision_senior.csv`](https://github.com/charankumarkharade/eurovision-visualisation/blob/main/eurovision_senior.csv) (Voting records), [`nodes_with_coordinates.csv`](https://github.com/charankumarkharade/eurovision-visualisation/blob/main/nodes_with_coordinates.csv) (Country metadata)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_dashboard["Interactive dashboard"]
  node_app["Streamlit dashboard<br/>[app.py]"]
  node_filters["Participation and top-N filters<br/>[app.py]"]
  node_drafts["Draft visualizations"]
end

subgraph group_analysis["Voting analysis"]
  node_period["Period aggregation<br/>[app.py]"]
  node_nvs["NVS analysis<br/>[app.py]"]
  node_matrices["Voting matrices<br/>[app.py]"]
  node_correlation["Profile correlation<br/>[app.py]"]
  node_comparison["Period comparison<br/>[app.py]"]
  node_pair["Pair trend analysis<br/>[app.py]"]
  node_communities["Community detection<br/>[app.py]"]
end

subgraph group_data["Inputs and exports"]
  node_votes[("Voting records")]
  node_countries[("Country metadata")]
end

subgraph group_map["Static map"]
  node_map_exporter["Community map exporter"]
  node_map_output["Static map output"]
end

node_visitor(("Dashboard user"))

node_visitor -->|"explores"| node_app
node_app -->|"reads"| node_votes
node_app -->|"reads"| node_countries
node_app -->|"computes periods"| node_period
node_period -->|"normalizes votes"| node_nvs
node_app -->|"applies filters"| node_filters
node_app -->|"renders matrices"| node_matrices
node_app -->|"computes profiles"| node_correlation
node_app -->|"compares periods"| node_comparison
node_app -->|"analyzes pairs"| node_pair
node_app -->|"detects blocs"| node_communities
node_app -->|"dispatches drafts"| node_drafts
node_map_exporter -->|"reads"| node_votes
node_map_exporter -->|"reads"| node_countries
node_map_exporter -->|"exports"| node_map_output

click node_app "https://github.com/charankumarkharade/eurovision-visualisation/blob/main/app.py"
click node_period "https://github.com/charankumarkharade/eurovision-visualisation/blob/main/app.py"
click node_nvs "https://github.com/charankumarkharade/eurovision-visualisation/blob/main/app.py"
click node_matrices "https://github.com/charankumarkharade/eurovision-visualisation/blob/main/app.py"
click node_correlation "https://github.com/charankumarkharade/eurovision-visualisation/blob/main/app.py"
click node_comparison "https://github.com/charankumarkharade/eurovision-visualisation/blob/main/app.py"
click node_pair "https://github.com/charankumarkharade/eurovision-visualisation/blob/main/app.py"
click node_communities "https://github.com/charankumarkharade/eurovision-visualisation/blob/main/app.py"
click node_filters "https://github.com/charankumarkharade/eurovision-visualisation/blob/main/app.py"
click node_drafts "https://github.com/charankumarkharade/eurovision-visualisation/blob/main/draft_visualizations.py"
click node_votes "https://github.com/charankumarkharade/eurovision-visualisation/blob/main/eurovision_senior.csv"
click node_countries "https://github.com/charankumarkharade/eurovision-visualisation/blob/main/nodes_with_coordinates.csv"
click node_map_exporter "https://github.com/charankumarkharade/eurovision-visualisation/blob/main/static_exports/generate_community_world_map.py"
click node_map_output "https://github.com/charankumarkharade/eurovision-visualisation/tree/main/static_exports"

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_app,node_filters,node_drafts,node_visitor toneBlue
class node_period,node_nvs,node_matrices,node_correlation,node_comparison,node_pair,node_communities toneAmber
class node_votes,node_countries toneMint
class node_map_exporter,node_map_output toneRose
```

## Components

### Interactive dashboard

- [Streamlit dashboard](https://github.com/charankumarkharade/eurovision-visualisation/blob/main/app.py): `app.py`
- [Participation and top-N filters](https://github.com/charankumarkharade/eurovision-visualisation/blob/main/app.py): `app.py`
- [Draft visualizations](https://github.com/charankumarkharade/eurovision-visualisation/blob/main/draft_visualizations.py): `draft_visualizations.py`

### Voting analysis

- [Period aggregation](https://github.com/charankumarkharade/eurovision-visualisation/blob/main/app.py): `app.py`
- [NVS analysis](https://github.com/charankumarkharade/eurovision-visualisation/blob/main/app.py): `app.py`
- [Voting matrices](https://github.com/charankumarkharade/eurovision-visualisation/blob/main/app.py): `app.py`
- [Profile correlation](https://github.com/charankumarkharade/eurovision-visualisation/blob/main/app.py): `app.py`
- [Period comparison](https://github.com/charankumarkharade/eurovision-visualisation/blob/main/app.py): `app.py`
- [Pair trend analysis](https://github.com/charankumarkharade/eurovision-visualisation/blob/main/app.py): `app.py`
- [Community detection](https://github.com/charankumarkharade/eurovision-visualisation/blob/main/app.py): `app.py`

### Inputs and exports

- [Voting records](https://github.com/charankumarkharade/eurovision-visualisation/blob/main/eurovision_senior.csv): `eurovision_senior.csv`
- [Country metadata](https://github.com/charankumarkharade/eurovision-visualisation/blob/main/nodes_with_coordinates.csv): `nodes_with_coordinates.csv`

### Static map

- [Community map exporter](https://github.com/charankumarkharade/eurovision-visualisation/blob/main/static_exports/generate_community_world_map.py): `static_exports/generate_community_world_map.py`
- [Static map output](https://github.com/charankumarkharade/eurovision-visualisation/tree/main/static_exports): `static_exports`

### Other components

- **Dashboard user**

## Connections

- Dashboard user → Streamlit dashboard: explores
- Streamlit dashboard → Voting records: reads
- Streamlit dashboard → Country metadata: reads
- Streamlit dashboard → Period aggregation: computes periods
- Period aggregation → NVS analysis: normalizes votes
- Streamlit dashboard → Participation and top-N filters: applies filters
- Streamlit dashboard → Voting matrices: renders matrices
- Streamlit dashboard → Profile correlation: computes profiles
- Streamlit dashboard → Period comparison: compares periods
- Streamlit dashboard → Pair trend analysis: analyzes pairs
- Streamlit dashboard → Community detection: detects blocs
- Streamlit dashboard → Draft visualizations: dispatches drafts
- Community map exporter → Voting records: reads
- Community map exporter → Country metadata: reads
- Community map exporter → Static map output: exports
