  # Change Nickname

Current Nickname:

Certifications

Certificate Issued at Valid until Serial No. File
Serial No. Valid until

Not having one? Apply now! >>>

Invoice

ProductName CreateTime ID Price File
ProductName CreateTime ID Price File

# Harmonic Centrality

✓ File Writeback ✓ Property Writeback ✓ Direct Return ✓ Stream Return ✕ Stats

## Overview

Harmonic Centrality is a variant of Closeness Centrality. The average shortest distance measurement proposed by harmonic centrality is compatible with infinite values which would occur in disconnected graph. Harmonic centrality was first proposed by M. Marchiori and V. Latora in 2000, and then by A. Dekker and Y. Rochat in 2005 and 2009:

Harmonic centrality takes on values between 0 to 1, nodes with higher scores have shorter distances to all other nodes.

## Concepts

### Shortest Distance

The shortest distance of two nodes is the number of edges contained in the shortest path between them. Please refer to Closeness Centrality for more details.

### Harmonic Mean

Harmonic mean is the inverse of the arithmetic mean of the inverses of the variables. The formula for calculating the arithmetic mean `A` and the harmonic mean `H` is as follows: A classic application of harmonic mean is to calculate the average speed when traveling back and forth at different speeds. Suppose there is a round trip, the forward and backward speeds are 30 km/h and 10 km/h respectively. What is the average speed for the entire trip?

The arithmetic mean `A = (30+10)/2 = 20 km/h` does not seem reasonable in this case. Since the backward journey takes three times as long as the forward, during most time of the entire trip the speed stays at 10 km/h, so we expect the average speed to be closer to 10 km/h.

Assuming that one-way distance is 1, then the average speed that takes travel time into consideration is `2/(1/30+1/10) = 15 km/h`, and this is the harmonic mean, it is adjusted by the time spent during each journey.

### Harmonic Centrality

Harmonic centrality score of a node defined by this algorithm is the inverse of the harmonic mean of the shortest distances from the node to all other nodes. The formula is: where `x` is the target node, `y` is any node in the graph other than `x`, `k-1` is the number of `y`, `d(x,y)` is the shortest distance between `x` and `y`, `d(x,y) = +∞` when `x` and `y` are not reachable to each other, in this case `1/d(x,y) = 0`. The harmonic centrality of node a in the above graph is `(1 + 1/2 + 1/+∞ + 1/+∞) / 4 = 0.375`, and the harmonic centrality of node d is `(1/+∞ + 1/+∞ + 1/+∞ + 1) / 4 = 0.25`.

Harmonic Centrality algorithm consumes considerable computing resources. For a graph with V nodes, it is recommended to perform (uniform) sampling when V > 10,000, and the suggested number of samples is the base-10 logarithm of the number of nodes (`log(V)`).

For each execution of the algorithm, sampling is performed only once, centrality score of each node is computed based on the shortest distance between the node and all sample nodes.

## Considerations

• The harmonic centrality score of isolated nodes is 0.

## Syntax

• Command: `algo(harmonic_centrality)`
• Parameters:
Name
Type
Spec
Default
Optional
Description
ids / uuids []`_id` / []`_uuid` / / Yes ID/UUID of the nodes to calculate, calculate for all nodes if not set
direction string `in`, `out` / Yes Direction of all edges in each shortest path, `in` for incoming direction, `out` for outgoing direction
sample_size int `-1`, `-2`, [1, V] `-1` Yes Number of samples to compute centrality scores; `-1` means to sample `log(V)` nodes; `-2` means not to perform sampling; a number within [1, V] means to sample the set number of nodes; `sample_size` is only valid when `ids` (`uuids`) is ignored or when it specifies all nodes
limit int ≥-1 `-1` Yes Number of results to return, `-1` to return all results
order string `asc`, `desc` / Yes Sort nodes by the centrality score

## Examples

The example graph is as follows: ### File Writeback

Spec Content
filename `_id`,`centrality`
``````algo(harmonic_centrality).params().write({
file:{
filename: 'centrality'
}
})
``````

Results: File centrality

``````LH,0
LG,0.142857
LF,0.142857
LE,0.357143
LD,0.357143
LC,0.428571
LB,0.428571
LA,0.571429
``````

### Property Writeback

Spec Content Write to Data Type
property `centrality` Node property `float`
``````algo(harmonic_centrality).params().write({
db:{
property: 'hc'
}
})
``````

Results: Centrality score for each node is written to a new property named hc

### Direct Return

Alias Ordinal Type
Description
Columns
0 []perNode Node and its centrality `_uuid`, `centrality`
``````algo(harmonic_centrality).params({
direction: 'out',
order: 'desc',
limit: 3
}) as hc
return hc
``````

Results: hc

_uuid centrality
1 0.35714301
4 0.33333299
3 0.28571400

### Stream Return

Alias Ordinal Type
Description
Columns
0 []perNode Node and its centrality `_uuid`, `centrality`
``````algo(harmonic_centrality).params({
direction: 'in'
}).stream() as hc
where hc.centrality == 0
return hc
``````

Results: hc

_uuid centrality
8 0.0000000
6 0.0000000
4 0.0000000