{"id":44608238,"url":"https://github.com/sauravbhattacharya001/graphvisual","last_synced_at":"2026-04-10T05:14:11.759Z","repository":{"id":76701918,"uuid":"68620630","full_name":"sauravbhattacharya001/GraphVisual","owner":"sauravbhattacharya001","description":"A graph visual application to study community evolution in student communities.","archived":false,"fork":false,"pushed_at":"2026-04-03T04:38:26.000Z","size":8341,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2026-04-03T05:36:43.174Z","etag":null,"topics":["bluetooth-proximity","community-detection","data-visualization","desktop-application","graph-visualization","java","jung-framework","maven","network-analysis","postgresql","research-tool","social-network-analysis"],"latest_commit_sha":null,"homepage":"","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/sauravbhattacharya001.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2016-09-19T15:46:27.000Z","updated_at":"2026-04-03T04:38:30.000Z","dependencies_parsed_at":null,"dependency_job_id":"6e9bd797-ec9c-49bd-b60b-7d087c83afb3","html_url":"https://github.com/sauravbhattacharya001/GraphVisual","commit_stats":null,"previous_names":[],"tags_count":34,"template":false,"template_full_name":null,"purl":"pkg:github/sauravbhattacharya001/GraphVisual","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sauravbhattacharya001%2FGraphVisual","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sauravbhattacharya001%2FGraphVisual/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sauravbhattacharya001%2FGraphVisual/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sauravbhattacharya001%2FGraphVisual/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/sauravbhattacharya001","download_url":"https://codeload.github.com/sauravbhattacharya001/GraphVisual/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sauravbhattacharya001%2FGraphVisual/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31446531,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-05T15:22:31.103Z","status":"ssl_error","status_checked_at":"2026-04-05T15:22:00.205Z","response_time":75,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["bluetooth-proximity","community-detection","data-visualization","desktop-application","graph-visualization","java","jung-framework","maven","network-analysis","postgresql","research-tool","social-network-analysis"],"created_at":"2026-02-14T11:25:49.556Z","updated_at":"2026-04-05T19:01:25.396Z","avatar_url":"https://github.com/sauravbhattacharya001.png","language":"Java","readme":"\u003cdiv align=\"center\"\u003e\n\n# 📊 GraphVisual\n\n**Community evolution visualization for student social networks**\n\nBuilt with Java and [JUNG](http://jung.sourceforge.net/) (Java Universal Network/Graph Framework)\n\n[![CI](https://github.com/sauravbhattacharya001/GraphVisual/actions/workflows/ci.yml/badge.svg)](https://github.com/sauravbhattacharya001/GraphVisual/actions/workflows/ci.yml)\n[![CodeQL](https://github.com/sauravbhattacharya001/GraphVisual/actions/workflows/codeql.yml/badge.svg)](https://github.com/sauravbhattacharya001/GraphVisual/actions/workflows/codeql.yml)\n[![Java](https://img.shields.io/badge/Java-8%2B-orange?logo=openjdk)](https://openjdk.org/)\n[![JUNG](https://img.shields.io/badge/JUNG-2.0.1-blue)](http://jung.sourceforge.net/)\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://github.com/sauravbhattacharya001/GraphVisual/blob/master/LICENSE)\n[![Docker](https://github.com/sauravbhattacharya001/GraphVisual/actions/workflows/docker.yml/badge.svg)](https://github.com/sauravbhattacharya001/GraphVisual/actions/workflows/docker.yml)\n[![Coverage](https://github.com/sauravbhattacharya001/GraphVisual/actions/workflows/coverage.yml/badge.svg)](https://github.com/sauravbhattacharya001/GraphVisual/actions/workflows/coverage.yml)\n[![GitHub repo size](https://img.shields.io/github/repo-size/sauravbhattacharya001/GraphVisual)](https://github.com/sauravbhattacharya001/GraphVisual)\n[![Pages](https://github.com/sauravbhattacharya001/GraphVisual/actions/workflows/pages.yml/badge.svg)](https://github.com/sauravbhattacharya001/GraphVisual/actions/workflows/pages.yml)\n[![Maven](https://img.shields.io/badge/Build-Maven-C71A36?logo=apachemaven)](https://maven.apache.org/)\n[![GitHub stars](https://img.shields.io/github/stars/sauravbhattacharya001/GraphVisual?style=flat\u0026logo=github)](https://github.com/sauravbhattacharya001/GraphVisual/stargazers)\n[![Last commit](https://img.shields.io/github/last-commit/sauravbhattacharya001/GraphVisual)](https://github.com/sauravbhattacharya001/GraphVisual/commits/master)\n[![Release](https://img.shields.io/github/v/release/sauravbhattacharya001/GraphVisual?logo=github)](https://github.com/sauravbhattacharya001/GraphVisual/releases/latest)\n[![Open Issues](https://img.shields.io/github/issues/sauravbhattacharya001/GraphVisual)](https://github.com/sauravbhattacharya001/GraphVisual/issues)\n[![Contributors](https://img.shields.io/github/contributors/sauravbhattacharya001/GraphVisual)](https://github.com/sauravbhattacharya001/GraphVisual/graphs/contributors)\n[![57 Analyzers](https://img.shields.io/badge/Analyzers-57-blueviolet)](ALGORITHMS.md)\n[![Publish](https://github.com/sauravbhattacharya001/GraphVisual/actions/workflows/publish.yml/badge.svg)](https://github.com/sauravbhattacharya001/GraphVisual/actions/workflows/publish.yml)\n[![Dependabot](https://img.shields.io/badge/Dependabot-enabled-025E8C?logo=dependabot)](https://github.com/sauravbhattacharya001/GraphVisual/blob/master/.github/dependabot.yml)\n[![2500+ Tests](https://img.shields.io/badge/Tests-2500%2B-brightgreen)](Gvisual/test/)\n\n\u003c/div\u003e\n\n---\n\n## Overview\n\nGraphVisual is a desktop application for studying **community evolution** in student populations using Bluetooth proximity data. It processes meeting records from a PostgreSQL database, classifies social relationships (friends, classmates, strangers, study groups, familiar strangers), and renders interactive graph visualizations with timeline playback.\n\nThe tool was developed for research on **social network analysis** — specifically understanding how communities form, dissolve, and evolve over time in university settings.\n\n## Features\n\n- **Interactive graph visualization** — Drag, zoom, rotate nodes with JUNG's built-in graph mouse\n- **Timeline playback** — Animate community graphs across 92 days (March–May 2011) with play/pause/stop controls\n- **5 relationship categories** — Friends (green), Classmates (blue), Familiar Strangers (gray), Strangers (red), Study Groups (orange)\n- **Adjustable thresholds** — Tune meeting duration and frequency thresholds per relationship type in real-time\n- **Cluster-based layout** — Nodes auto-grouped into a 3×3 grid by relationship type, with randomized positioning\n- **Edge weighting** — Line thickness reflects interaction frequency × duration\n- **New member highlighting** — Nodes appearing for the first time are drawn larger\n- **Notes panel** — Annotate each timestamp during analysis\n- **Graph export** — Save visualizations as PNG images, edge lists, and JSON (D3.js/vis.js/Cytoscape.js compatible)\n- **Network statistics panel** — Real-time metrics including node/edge counts, per-category breakdowns, graph density, average/max degree, average edge weight, isolated node count, and top-3 hub nodes\n- **Centrality analysis** — Compute degree, betweenness (Brandes' algorithm), and closeness centrality for all nodes. Interactive panel with metric sorting, top-10 ranking with medals, network topology classification, and per-metric averages/maximums\n- **Small-world analysis** — Test whether a graph exhibits Watts-Strogatz small-world properties. Computes local/global clustering coefficients, average path length, sigma (σ) and omega (ω) coefficients, random/lattice baselines, and classifies networks as Small-World, Random-Like, Lattice-Like, or Disconnected\n- **Subgraph extraction** — Extract focused subgraphs using a fluent builder API. Filter by edge type, weight range, degree range, k-hop neighborhood, node whitelist, or time window. Export results as CSV edge lists with retention statistics and edge type breakdowns\n- **Community detection** — Interactive browser tool with 4 algorithms (Louvain modularity, Label Propagation, Girvan-Newman edge betweenness, Spectral Bisection). 6 preset graphs (Karate Club, Barbell, Caveman, SBM, Ring of Cliques), force-directed layout with adjustable parameters, color-coded communities, modularity scoring, per-community density stats, drag-to-move nodes, pan/zoom, JSON/SVG export\n- **Network flow visualizer** — Interactive browser tool for max-flow / min-cut visualization with Edmonds-Karp and Ford-Fulkerson algorithms. Step-by-step animation, 5 preset networks (simple, diamond, bipartite matching, complex, bottleneck), canvas graph editor, min-cut highlighting, JSON/SVG export. Java `NetworkFlowExporter` class for programmatic flow computation and HTML export\n- **Random graph generator** — Interactive browser tool for generating graphs using 7 classic models (Erdős–Rényi, Barabási–Albert, Watts-Strogatz, Random Geometric, Complete, Star, Ring). Force-directed layout, degree/community coloring, drag-and-zoom, degree distribution chart, real-time stats (density, clustering, diameter, components), JSON/PNG export\n- **Network resilience analyzer** — Interactive browser tool for simulating targeted and random attacks on networks. 4 attack strategies (highest-degree, highest-betweenness, random, cascading with recalculation), 6 preset graphs (Barabási-Albert, Erdős-Rényi, Watts-Strogatz, Star, Grid, Karate Club), real-time robustness curve plotting, R-index computation, strategy comparison overlay, step-through animation, attack log, force-directed layout with drag interaction\n\n## Architecture\n\nGraphVisual consists of 145 source classes (~55,000+ lines of production code, 100,000+ total with tests), 57 graph analyzers, and a Bluetooth-to-graph data pipeline. See **[ARCHITECTURE.md](ARCHITECTURE.md)** and **[ALGORITHMS.md](ALGORITHMS.md)** for full details including the analyzer reference table, design patterns, and dependency map.\n\n```\nGvisual/src/\n├── gvisual/           # 145 classes — GUI, edge model, 57 analyzers, utilities\n│   ├── Main.java                       # Swing GUI — graph panel, timeline, controls\n│   ├── edge.java                       # Edge model (type, vertices, weight, label)\n│   ├── EdgeType.java                   # Enum — relationship categories, colors, defaults\n│   ├── GraphStats.java                 # Network metrics (density, degree, hubs)\n│   ├── GraphMLExporter.java            # GraphML XML export\n│   ├── JsonGraphExporter.java          # JSON export (D3.js/vis.js/Cytoscape.js compatible)\n│   ├── GraphGenerator.java             # 10 synthetic graph topologies\n│   ├── GraphUtils.java                 # BFS, connected components, utility methods\n│   ├── GraphPartitioner.java           # Spectral/Kernighan-Lin partitioning\n│   ├── ForceDirectedLayout.java        # Force-directed graph layout (Barnes-Hut)\n│   ├── AnalysisTask.java               # Async analysis with timeout/cancellation\n│   ├── AnalysisResult.java             # Analysis result container\n│   │\n│   │── # ─── Structural Analyzers ──────────────────\n│   ├── ArticulationPointAnalyzer.java  # Cut vertices/bridges (Tarjan's)\n│   ├── BipartiteAnalyzer.java          # Bipartiteness testing + 2-coloring\n│   ├── ChordalGraphAnalyzer.java       # Chordal graph recognition (PEO)\n│   ├── CliqueAnalyzer.java             # Maximal cliques (Bron-Kerbosch)\n│   ├── CycleAnalyzer.java             # Cycle detection and enumeration\n│   ├── EulerianPathAnalyzer.java       # Euler path/circuit (Hierholzer's)\n│   ├── GraphComplementAnalyzer.java    # Graph complement computation\n│   ├── GraphIsomorphismAnalyzer.java   # Graph isomorphism testing\n│   ├── GraphIsomorphismChecker.java    # VF2-inspired isomorphism (backtracking)\n│   ├── GraphMinorAnalyzer.java         # Graph minor detection\n│   ├── GraphRegularityAnalyzer.java    # Regularity testing\n│   ├── GraphSymmetryAnalyzer.java      # Automorphism \u0026 symmetry analysis\n│   ├── LineGraphAnalyzer.java          # Line graph construction + analysis\n│   ├── PerfectGraphAnalyzer.java       # Perfect graph recognition\n│   ├── PlanarGraphAnalyzer.java        # Planarity testing\n│   ├── TreeAnalyzer.java               # Tree properties, LCA, diameter\n│   ├── TopologicalSortAnalyzer.java    # Topo sort + cycle detection\n│   ├── StronglyConnectedComponentsAnalyzer.java  # SCC (Tarjan/Kosaraju)\n│   │\n│   │── # ─── Centrality \u0026 Ranking ──────────────────\n│   ├── NodeCentralityAnalyzer.java     # Degree/betweenness/closeness\n│   ├── EdgeBetweennessAnalyzer.java    # Edge betweenness centrality\n│   ├── PageRankAnalyzer.java           # PageRank (power iteration)\n│   ├── DegreeDistributionAnalyzer.java # Degree stats + power-law fitting\n│   ├── RichClubAnalyzer.java           # Rich-club coefficient\n│   │\n│   │── # ─── Community \u0026 Clustering ────────────────\n│   ├── CommunityDetector.java          # Connected component communities\n│   ├── LouvainCommunityDetector.java   # Louvain modularity optimization\n│   ├── CliqueCoverAnalyzer.java        # Clique cover computation\n│   ├── GraphClusterQualityAnalyzer.java # Cluster quality metrics\n│   ├── KTrussAnalyzer.java             # K-truss decomposition\n│   ├── MotifAnalyzer.java              # Network motif detection\n│   ├── NodeSimilarityAnalyzer.java     # Jaccard/cosine node similarity\n│   ├── SignedGraphAnalyzer.java        # Signed graph balance theory\n│   ├── StructuralHoleAnalyzer.java     # Burt's structural holes\n│   │\n│   │── # ─── Optimization \u0026 NP-hard ────────────────\n│   ├── BandwidthMinimizer.java         # Graph bandwidth minimization\n│   ├── ChromaticPolynomialCalculator.java # Chromatic polynomial (deletion-contraction)\n│   ├── DominatingSetAnalyzer.java      # Minimum dominating set\n│   ├── FeedbackVertexSetAnalyzer.java  # Feedback vertex set\n│   ├── GraphColoringAnalyzer.java      # Welsh-Powell vertex coloring\n│   ├── HamiltonianAnalyzer.java        # Hamiltonian path/cycle\n│   ├── IndependentSetAnalyzer.java     # Maximum independent set\n│   ├── MaxCutAnalyzer.java             # Maximum cut problem\n│   ├── MetricDimensionAnalyzer.java    # Metric dimension (resolving sets)\n│   ├── SteinerTreeAnalyzer.java        # Steiner tree approximation\n│   ├── TreewidthAnalyzer.java          # Treewidth estimation\n│   ├── VertexConnectivityAnalyzer.java # Vertex connectivity\n│   ├── VertexCoverAnalyzer.java        # Minimum vertex cover\n│   │\n│   │── # ─── Network Analysis ──────────────────────\n│   ├── GraphAnomalyDetector.java       # Network anomaly detection\n│   ├── GraphNeighborhoodAnalyzer.java  # k-hop neighborhood analysis\n│   ├── LinkPredictionAnalyzer.java     # Edge prediction metrics\n│   ├── NetworkFlowAnalyzer.java        # Max-flow/min-cut (Ford-Fulkerson)\n│   ├── GraphResilienceAnalyzer.java    # Attack/failure resilience\n│   ├── GraphSparsificationAnalyzer.java # Graph sparsification algorithms\n│   ├── InfluenceSpreadSimulator.java   # IC/LT influence models\n│   ├── RandomWalkAnalyzer.java         # Random walks, hitting/cover times\n│   ├── SmallWorldAnalyzer.java         # Small-world property testing (σ, ω)\n│   ├── TemporalGraph.java              # Temporal graph evolution analysis\n│   │\n│   │── # ─── Metrics \u0026 Comparison ──────────────────\n│   ├── AdjacencyMatrixHeatmap.java     # Adjacency matrix visualization\n│   ├── GraphEntropyAnalyzer.java       # 9 entropy measures\n│   ├── GraphSimilarityAnalyzer.java    # Entropy-based graph comparison\n│   ├── GraphDiffAnalyzer.java          # Structural diff between graphs\n│   ├── GraphDrawingQualityAnalyzer.java # Layout quality metrics\n│   ├── EdgePersistenceAnalyzer.java    # Edge stability over time\n│   ├── GrowthRateAnalyzer.java         # Network growth modeling\n│   ├── LaplacianBuilder.java           # Laplacian matrix construction\n│   ├── SpectralAnalyzer.java           # Eigenvalue spectral analysis\n│   ├── GraphSpectrumAnalyzer.java      # Full spectrum analysis\n│   ├── TournamentAnalyzer.java         # Tournament graph analysis\n│   │\n│   │── # ─── Algorithms ────────────────────────────\n│   ├── KCoreDecomposition.java         # K-core peeling\n│   ├── MinimumSpanningTree.java        # Kruskal's MST\n│   ├── ShortestPathFinder.java         # BFS + weighted Dijkstra\n│   ├── GraphRenderers.java             # Custom graph rendering\n│   └── GraphDiameterAnalyzer.java      # Diameter, radius, eccentricity\n└── app/               # Data pipeline — Bluetooth → meetings → edge files\n    ├── Network.java, Util.java, findMeetings.java, addLocation.java, matchImei.java\n```\n\n100 test classes with **2,500+ tests** cover all analyzers and utilities.\n\n## Requirements\n\n- **Java JDK 8** or later\n- **PostgreSQL** database with the expected schema (`meeting`, `event_3`, `device_1`, `deviceID` tables)\n- **Apache Ant** (NetBeans project build system)\n\n## Setup\n\n### 1. Clone the repository\n\n```bash\ngit clone https://github.com/sauravbhattacharya001/GraphVisual.git\ncd GraphVisual\n```\n\n### 2. Configure database credentials\n\nGraphVisual reads credentials from environment variables (no hardcoded secrets):\n\n```bash\nexport DB_HOST=localhost    # PostgreSQL host (default: localhost)\nexport DB_USER=your_user    # Required\nexport DB_PASS=your_pass    # Required\n```\n\n### 3. Build\n\n```bash\ncd Gvisual\nant build\n```\n\nOr compile manually:\n\n```bash\ncd Gvisual\nmkdir -p build/classes\nfind src -name '*.java' \u003e sources.txt\njavac -cp \"$(find lib -name '*.jar' | tr '\\n' ':')\" -d build/classes @sources.txt\n```\n\n### 4. Run the data pipeline\n\nExecute these in order to populate the meeting database:\n\n```bash\n# Step 1: Match device nodes to IMEIs\njava -cp \"build/classes:lib/*\" app.matchImei\n\n# Step 2: Extract meetings from Bluetooth events\njava -cp \"build/classes:lib/*\" app.findMeetings\n\n# Step 3: Classify meeting locations\njava -cp \"build/classes:lib/*\" app.addLocation\n```\n\n### 5. Launch the visualizer\n\n```bash\njava -cp \"build/classes:lib/*\" gvisual.Main\n```\n\n## GUI Components\n\n| Component | Description |\n|-----------|-------------|\n| **Image Panel** | Main graph canvas powered by JUNG. Supports drag, zoom, and rotation. |\n| **Timeline Panel** | Slider (days 1–92) with play/pause/stop and skip controls. Speed adjustable. |\n| **Toolbar** | Left-side tools for interaction mode (transform vs. pick), image/edge-list export. |\n| **Category Panel** | Toggle visibility of each relationship type. Expand to adjust duration/frequency thresholds. |\n| **Notes Pane** | Free-text area for annotating the currently viewed graph timestamp. |\n| **Statistics Panel** | Live network metrics — node/edge counts, density, degree stats, and hub identification. |\n| **Centrality Panel** | Compute and rank nodes by degree, betweenness, and closeness centrality with sortable metric selector. |\n\n## Relationship Classification\n\n| Type | Color | Location | Duration Threshold | Meeting Count |\n|------|-------|----------|--------------------|---------------|\n| **Friends** | 🟢 Green | Public areas | \u003e 10 min | ≥ 2/day |\n| **Classmates** | 🔵 Blue | Classrooms | \u003e 30 min | ≥ 1/day |\n| **Study Groups** | 🟠 Orange | Classrooms | \u003e 20 min | ≤ 1/day |\n| **Familiar Strangers** | ⚪ Gray | Public/paths | \u003c 2 min | \u003e 1/day |\n| **Strangers** | 🔴 Red | Public/paths | \u003c 2 min | \u003c 2/day |\n\nAll thresholds are adjustable at runtime via the Category Panel sliders.\n\n## Tech Stack\n\n| Technology | Purpose |\n|------------|---------|\n| **Java 8+** | Application language |\n| **JUNG 2.0.1** | Graph data structures and visualization |\n| **Swing** | Desktop GUI framework |\n| **PostgreSQL** | Meeting and Bluetooth event storage |\n| **Apache Ant** | Build system (NetBeans) |\n| **Commons IO** | File I/O utilities |\n| **Java3D** | 3D graph rendering support |\n| **JUnit 4** | Unit testing framework |\n| **GitHub Actions** | CI/CD (build + test on JDK 11/17) |\n| **CodeQL** | Automated security scanning |\n\n## Testing\n\nRun tests with JUnit 4:\n\n```bash\ncd Gvisual\nmkdir -p build/test/classes\n\n# Download JUnit (if not present)\ncurl -sL -o lib/test/junit-4.13.2.jar \\\n  https://repo1.maven.org/maven2/junit/junit/4.13.2/junit-4.13.2.jar\ncurl -sL -o lib/test/hamcrest-core-1.3.jar \\\n  https://repo1.maven.org/maven2/org/hamcrest/hamcrest-core/1.3/hamcrest-core-1.3.jar\n\n# Compile and run\nfind test -name '*.java' \u003e test-sources.txt\njavac -cp \"build/classes:$(find lib -name '*.jar' | tr '\\n' ':')\" \\\n  -d build/test/classes @test-sources.txt\n\njava -cp \"build/classes:build/test/classes:$(find lib -name '*.jar' | tr '\\n' ':')\" \\\n  org.junit.runner.JUnitCore app.UtilMethodsTest gvisual.EdgeTest\n```\n\n## Maven / GitHub Packages\n\nGraphVisual is published to [GitHub Packages](https://github.com/sauravbhattacharya001/GraphVisual/packages) as a Maven artifact. You can use it as a library dependency or download the fat JAR directly.\n\n### Add as a Maven dependency\n\n1. Configure GitHub Packages in your `~/.m2/settings.xml`:\n\n```xml\n\u003cservers\u003e\n  \u003cserver\u003e\n    \u003cid\u003egithub\u003c/id\u003e\n    \u003cusername\u003eYOUR_GITHUB_USERNAME\u003c/username\u003e\n    \u003cpassword\u003eYOUR_GITHUB_TOKEN\u003c/password\u003e\n  \u003c/server\u003e\n\u003c/servers\u003e\n```\n\n2. Add the repository and dependency to your `pom.xml`:\n\n```xml\n\u003crepositories\u003e\n  \u003crepository\u003e\n    \u003cid\u003egithub\u003c/id\u003e\n    \u003curl\u003ehttps://maven.pkg.github.com/sauravbhattacharya001/GraphVisual\u003c/url\u003e\n  \u003c/repository\u003e\n\u003c/repositories\u003e\n\n\u003cdependency\u003e\n  \u003cgroupId\u003ecom.github.sauravbhattacharya001\u003c/groupId\u003e\n  \u003cartifactId\u003egraphvisual\u003c/artifactId\u003e\n  \u003cversion\u003e1.1.0\u003c/version\u003e\n\u003c/dependency\u003e\n```\n\n### Download the fat JAR\n\nEach [release](https://github.com/sauravbhattacharya001/GraphVisual/releases) includes a standalone `graphvisual-*-all.jar` with all dependencies bundled:\n\n```bash\njava -jar graphvisual-1.1.0-all.jar\n```\n\n### Build with Maven locally\n\n```bash\n# Install vendored local JARs first\nmvn initialize -P install-local-deps\n\n# Build the project\nmvn package -B\n```\n\n## Docker\n\n### Build\n\n```bash\ndocker build -t graphvisual .\n```\n\n### Run with X11 (Linux/macOS — GUI mode)\n\n```bash\n# Allow X11 forwarding\nxhost +local:docker\n\ndocker run --rm \\\n  -e DISPLAY=$DISPLAY \\\n  -v /tmp/.X11-unix:/tmp/.X11-unix \\\n  graphvisual\n```\n\n### Pull from GitHub Container Registry\n\n```bash\ndocker pull ghcr.io/sauravbhattacharya001/graphvisual:latest\n```\n\n\u003e **Note:** The Dockerfile builds a fat JAR with all dependencies, compiles source, runs tests during build, and packages a minimal JRE-based runtime image (~300MB). X11 libraries are included for optional GUI support via display forwarding.\n\n## Quick Start — No Database Required\n\nYou can explore GraphVisual's 43 analyzers using the built-in **synthetic graph generators** without any database setup:\n\n```java\nimport gvisual.GraphGenerator;\n\n// Generate a 100-node scale-free network (Barabási-Albert)\nvar graph = GraphGenerator.barabasiAlbert(100, 3);\n\n// Or try other topologies:\n// GraphGenerator.erdosRenyi(50, 0.15)\n// GraphGenerator.wattsStrogatz(60, 6, 0.3)\n// GraphGenerator.complete(20)\n// GraphGenerator.star(30)\n// GraphGenerator.grid(8, 8)\n```\n\nThen run any analyzer:\n\n```java\nimport gvisual.*;\n\nvar centrality = new NodeCentralityAnalyzer();\nvar result = centrality.analyze(graph);\nSystem.out.println(result);\n\nvar smallWorld = new SmallWorldAnalyzer();\nSystem.out.println(smallWorld.analyze(graph));\n```\n\n## Analyzer Categories\n\n| Category | Count | Highlights |\n|----------|-------|------------|\n| **Structural** | 12 | Cliques, cycles, planarity, isomorphism, articulation points |\n| **Centrality \u0026 Ranking** | 3 | PageRank, degree/betweenness/closeness, degree distribution |\n| **Community \u0026 Clustering** | 4 | Community detection, motifs, structural holes, signed graphs |\n| **NP-hard Optimization** | 11 | Graph coloring, Hamiltonian paths, vertex cover, max cut |\n| **Network Analysis** | 8 | Max-flow, influence spread, random walks, resilience testing |\n| **Metrics \u0026 Comparison** | 8 | Spectral analysis, entropy, graph diff, edge persistence |\n\nSee **[ALGORITHMS.md](ALGORITHMS.md)** for the complete reference with time complexities and algorithm details.\n\n## Research Context\n\nThis project was built to study **community evolution in student social networks** using Bluetooth proximity sensing. Key research questions:\n\n- How do social communities form and evolve over a semester?\n- What distinguishes friends from familiar strangers based on meeting patterns?\n- How do physical spaces (classrooms vs. public areas) shape community structure?\n\nThe visualization tool enables researchers to explore these questions interactively by adjusting relationship parameters and observing how graph structures change over time.\n\n## Contributing\n\nContributions are welcome! See **[CONTRIBUTING.md](CONTRIBUTING.md)** for full details on:\n\n- Development setup and building\n- Code style and architecture overview\n- Testing guidelines\n- Pull request process and commit conventions\n\nQuick start: fork → branch → make changes with tests → submit PR.\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsauravbhattacharya001%2Fgraphvisual","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsauravbhattacharya001%2Fgraphvisual","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsauravbhattacharya001%2Fgraphvisual/lists"}