citationconnectivity

Use Graphing Algorithms to determine and plot the connectivity of research citations

https://github.com/joeyrussoniello/citationconnectivity

Science Score: 13.0%

This score indicates how likely this project is to be science-related based on various indicators:

  • CITATION.cff file
  • codemeta.json file
    Found codemeta.json file
  • .zenodo.json file
  • DOI references
  • Academic publication links
  • Academic email domains
  • Institutional organization owner
  • JOSS paper metadata
  • Scientific vocabulary similarity
    Low similarity (14.6%) to scientific vocabulary
Last synced: 10 months ago · JSON representation

Repository

Use Graphing Algorithms to determine and plot the connectivity of research citations

Basic Info
  • Host: GitHub
  • Owner: JoeyRussoniello
  • Language: Rust
  • Default Branch: main
  • Size: 6.55 MB
Statistics
  • Stars: 0
  • Watchers: 1
  • Forks: 0
  • Open Issues: 0
  • Releases: 0
Created over 1 year ago · Last pushed over 1 year ago
Metadata Files
Citation

https://github.com/JoeyRussoniello/CitationConnectivity/blob/main/

# CitationConnectivity
# Table of Contents
1. [Project Description](#project-description)
2. [Full Writeup](#full-writeup)
3. [Features](#features)
4. [Installation](#installation)
5. [Usage](#usage)
6. [Output](#output)
7. [Testing](#testing)
8. [Contribution](#contribution)
## Project Description
CitationConnectivity is a Rust project that analyzes and visualizes the connectivity of a citation network (example provided [from the CORA citations dataset](https://graphsandnetworks.com/the-cora-dataset/)). It processes citation data to identify connected components, visualize their structure, and generate subgraph statistics for different research subjects. The project is designed to work with CSV files containing nodes (representing research papers) and edges (representing citations between them).
#### Full Writeup
The detailed writeup for this project and all of it's functions can be found in `Writeup.pdf`
## Features
- **Connected Components Analysis**:Identify and analyze the connected components of a citation network.
- **Component Visualization**: Generate visualizations for the overall network and its subgraphs to represent connectivity patterns.
- **Subgraph Analysis**: Break down the network by research subjects and calculate connectivity statistics for each subgraph.
  - *In subgraph creation, both the original nodes of the graph and the edges in the adjacency list are modified to only include vertices within the specified field*
- **Customizable Visualizations**: Supports creating tailored plots for understanding connectivity and aggregation of components.
## Installation
### Dependencies
- [Rust](https://www.rust-lang.org/) (latest stable version)
- `csv` crate for reading CSV files
- `plotters` crate for generating visualizations
- `rand` crate for random number generation
### Steps
1. Clone this repository:
```bash
git clone https://github.com/your-repo/CitationConnectivity.git
cd CitationConnectivity
```
2. Build the project:
```bash
cargo build
```
3. Run the project:
```bash
cargo run
```

### File Structure
```bash
CitationConnectivity/
 src/
    main.rs                # Entry point for the application
    graph/
       mod.rs             # Main module for graph structure and operations (includes test cases)
       component_functions/
          mod.rs         # Helper Functions for handling BFS component analysis
       visualization_support/
           mod.rs         # Helper functions for graph visualization
 citation_network/
    edges.csv              # Example complete input file containing citation edges
    nodes.csv              # Example complete input file containing node metadata
 plots/
    connected_components.png # Output visualization of connected components
    subgraphs/             # Visualizations of subgraph connectivity
 tests/
    test_data/             # Small csv files for unit tests of graph module functionality
    test_output/           # .png results of test cases on small inputs
 Cargo.toml                 # Project dependencies
 Writeup.pdf                # Complete Project writeup
```
## Usage
Input Files
The project reads two CSV files from [the CORA citations dataset](https://graphsandnetworks.com/the-cora-dataset/):

nodes.csv: Contains metadata for each node, including:
- Node ID
- Label
- Subject
- Features (A one-hot encoded list indicating the presence of common words in the paper)

edges.csv: Contains directed edges between nodes, specifying the citation network.
### Main Function
The main.rs function loads the graph, computes connected components, visualizes them, and generates subgraph statistics. Example usage:

```rust
//Create Graph From input CSV files
let graph = Graph::from_csvs("citation_network\\edges.csv","citation_network\\nodes.csv").unwrap();

//Divide graph by research subject
let subgraphs = graph.calculate_subgraphs();

//Plot each research subject's self-connectivity
subgraphs.iter().for_each(|(subject, subgraph)| {
    subgraph.visualize_connectivity(
        &format!("plots\\subgraphs\\{}_connectivity.png",subject), //File path of output image
        3.0,  //The Biggest Circle will only take up 1/3.0 of the graph's total space
        (1024,1024), //Build graph on a 1024 x 1024 canvas
        &format!("Connectivity of Research Papers in {}",subject)).unwrap(); //Graph Title
});
```
## Output
- Component Sizes: Prints the sizes of connected components.
- Visualizations: Generates plots for the overall network and subgraphs in the `plots/` directory.

#### Customization
You can modify the visualization parameters (e.g., plot dimensions, circle sizes) in the visualization_support module.

#### Visualizations Supported
- Connected Components: A visualization of all connected components in the network.
- Subgraph Connectivity: Visualizations for individual research subjects to understand their connectivity.
- Component Progress: A line graph of the aggregate % of data captured in each of the largest components
#### Example Visualizations
See below visualizations of citation networks by research genre, displaying how a papers genre may impact its connectivity within its field.

Example Graph for Rule Learning Connectivity Example Graph for Genetic Algorithms Connectivity

## Testing This project includes unit tests to ensure core functionality in the `graph` module. ### Running Tests To run all the tests, use the command `cargo test` ## Contribution Feel free to contribute to CitationConnectivity! Heres how: Fork the repository. Create a new branch: ```bash git checkout -b feature/your-feature-name ``` Commit your changes: ```bash git commit -m "Add your feature description" ``` Push to the branch: ```bash git push origin feature/your-feature-name ``` Open a pull request.

Owner

  • Name: Joseph Russoniello
  • Login: JoeyRussoniello
  • Kind: user

GitHub Events

Total
  • Push event: 18
  • Create event: 2
Last Year
  • Push event: 18
  • Create event: 2

Dependencies

Cargo.lock cargo
Cargo.toml cargo