> ## Documentation Index
> Fetch the complete documentation index at: https://docs.graphext.com/llms.txt
> Use this file to discover all available pages before exploring further.

# cluster_network

> Identify clusters in the network. 

At the moment the only supported clustering algorithm is [Louvain](https://en.wikipedia.org/wiki/Louvain_modularity).
Louvain tries to identify the communities in a network by optimizing the modularity of the whole network, that is a
measure of the density of edges inside communities to edges outside communities. The result is a column of cluster IDs (integers),
where the value -1 is reserved for nodes in very small clusters, which are grouped into a "noise" cluster.

## Usage

The following example shows how the step can be used in a recipe.

<Accordion title="Examples" icon="code" defaultOpen="true">
  <Tabs>
    <Tab title="Example 1">
      The following configuration allows for smallish clusters and considers fewish data points as noise:

      ```stan theme={null}
      cluster_network(ds.targets, ds.weights, {
        "resolution": 0.3,
        "noise": 5
      }) -> (ds.cluster)
      ```
    </Tab>

    <Tab title="Signature">
      General syntax for using the step in a recipe. Shows the inputs and outputs the step is expected to receive and will produce respectively. For futher details see sections below.

      ```stan theme={null}
      cluster_network(targets: list[number], *weights: list[number], {
          "param": value,
          ...
      }) -> (cluster: column)
      ```
    </Tab>
  </Tabs>
</Accordion>

## Inputs & Outputs

The following are the inputs expected by the step and the outputs it produces. These are generally
columns (`ds.first_name`), datasets (`ds` or `ds[["first_name", "last_name"]]`) or models (referenced
by name e.g. `"churn-clf"`).

<Accordion title="Inputs" icon="right-to-bracket">
  <ParamField path="targets" type="column[list[number]]" required>
    A column containing link targets. Source is implied in the index.
  </ParamField>

  <ParamField path="*weights" type="column[list[number]]" />
</Accordion>

<Accordion title="Outputs" icon="right-from-bracket">
  <ParamField path="cluster" type="column" required>
    A column containing cluster tags.
  </ParamField>
</Accordion>

## Configuration

The following parameters can be used to configure the behaviour of the step by including them in
a json object as the last "input" to the step, i.e. `step(..., {"param": "value", ...}) -> (output)`.

<Accordion title="Parameters" defaultOpen="true" icon="sliders">
  <ParamField path="algorithm" type="string" default="louvain">
    Clustering algorithm to use.
    Only Louvain is currently supported.

    Values must be one of the following:

    * `louvain`
  </ParamField>

  <ParamField path="resolution" type="number" default="0.5">
    The higher this value the bigger the clusters.

    Values must be in the following range:

    ```javascript theme={null}
    0 < resolution ≤ 1
    ```
  </ParamField>

  <ParamField path="noise" type="integer" default="1">
    The larger the value, the more conservative the clustering.
    Cluster with this number of nodes or less will be considered noise.

    Values must be in the following range:

    ```javascript theme={null}
    0 ≤ noise < inf
    ```
  </ParamField>

  <ParamField path="query" type="string">
    The *graphext advanced query syntax* used to select rows.
  </ParamField>
</Accordion>
