# Data Sets

Most charts use data sets to store the data, and these data sets can be used in a variety of ways. There is a dedicated module to data sets which can be accessed through `s.data`:

```python
s.data.append_to_data_set(
    uuid: Optional[str], name: Optional[str],
    data: Union[List[Dict], DataFrame]
) -> str

s.data.delete_data_set(uuid: Optional[str], name: Optional[str])


s.data.replace_data_from_data_set(
    uuid: Optional[str], name: Optional[str]
    data: Union[List[Dict], DataFrame],
):
       
s.data.get_data_from_data_set(
    uuid: Optional[str], name: Optional[str],
    limit: Optional[int]
) -> List[Dict]
```

But most of the time data sets will be created and managed through the module `s.plt`. When creating or deleting components  and menu paths the necessary data sets will be managed automatically. By default the SDK will try to reuse as much resources as possible but in the case of data sets the user will have to specify that the data sets are the same, if not all the data from the data sets would have to be checked. To toggle the functionality the following methods are provided:

```python
s.reuse_data_sets()  # to tell the SDK that the data sets won't change
s.update_data_sets() # to tell the SDK that the data has cahnged
```

Enabling this functionality will result in a notable speedup when reusing charts, and will optimize api calls.

Charts can share data sets between them, this can be useful for applying filters or aggregations to a single data set and affecting all charts that use it. To create the shared data sets the following function has to be used:

```python
s.plt.set_shared_data(
    dfs: Dict[str, Union[List[Dict], pd.DataFrame]],
    custom_data: Dict[str, Any]
)
```

This function will enable the specified data sets to be referenced by name when creating the different charts, instead of passing a dataframe or similar structure to the data parameter of the charts that use data sets, a string can be passed which will be used as a reference of the shared data sets.

An example on how this feature can be used:&#x20;

```python
s.plt.set_shared_data(
    dfs={
        'data': [
            {'date': dt.date(2021, 1, 1), 'x': 5, 'y': 5},
            {'date': dt.date(2021, 1, 2), 'x': 6, 'y': 5},
            {'date': dt.date(2021, 1, 3), 'x': 4, 'y': 5},
            {'date': dt.date(2021, 1, 4), 'x': 7, 'y': 5},
            {'date': dt.date(2021, 1, 5), 'x': 3, 'y': 5},
        ]
    }
)

s.plt.bar(order=0, data='data', x='date', y='y')
s.plt.line(order=1, data='data', x='date', y='x')
```

<figure><img src="https://3782181538-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FUlHTfmIZY46Z1EDfyGMz%2Fuploads%2FOXenvXGgmnXcrijfnYXd%2FShared%20Data.png?alt=media&#x26;token=fa9171a9-6db9-474e-b4ed-9499b14a6c00" alt=""><figcaption></figcaption></figure>

{% hint style="warning" %}
When changing menu paths the shared data sets will reset, as data sets exist only in menu paths, so make sure that the data sets are initializated before using a data set reference name.
{% endhint %}


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.shimoku.com/dev/elements/data-sets.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
