diff options
Diffstat (limited to 'website/content/platform/developer_guide/obbject.mdx')
-rw-r--r-- | website/content/platform/developer_guide/obbject.mdx | 188 |
1 files changed, 188 insertions, 0 deletions
diff --git a/website/content/platform/developer_guide/obbject.mdx b/website/content/platform/developer_guide/obbject.mdx new file mode 100644 index 00000000000..1a737868ac3 --- /dev/null +++ b/website/content/platform/developer_guide/obbject.mdx @@ -0,0 +1,188 @@ +--- +title: OBBject +sidebar_position: 4 +description: This page provides information about the OBBject class in the OpenBB Platform. This class provides the interface to interact with commands +keywords: +- OBBject +- Python +- Development +- OpenBB Platform +- Results +- Commands +- Pandas +- DataFrame +- Polars +- Numpy +- extensions +--- + +import HeadTitle from '@site/src/components/General/HeadTitle.tsx'; + +<HeadTitle title="OBBject - Developer Guidelines - Development | OpenBB Platform Docs" /> + +The OBBject (OpenBB Object) is at the heart of developing around the OpenBB Platform. Every command will return this class as the command output. + +This class contains the following attributes: + +- results + - This contains serializable data that was obtained by running the command. +- provider + - The name of the provider that was used to obtain the data. +- warnings + - Any warnings that were generated by the command. +- extra + - Additional metadata about the command run, including any arguments, the route, the timestamp, etc. + +Additionally, the OBBject class contains a class variable, `accessors`, which is used to register extensions to the class. This is done by using the `@obbject_accessor` decorator. This decorator will register the class as an accessor to the OBBject class, and will be available on every OBBject returned by a command. + +```python + +from openbb import obb +res = obb.equity.price.historical("AAPL") +res.accessors +``` + +An example with the `openbb-charting` extension would output: + +```console +{'charting'} +``` + +> Find more about `OBBject` extensions [here](how-to/add_obbject_extension). + +## Example + +In the python interface, the OBBject class is returned by every command. The following example shows how to access the results of a command: + +```python +from openbb import obb + +obbject = obb.equity.price.historical("AAPL", provider="fmp") + +display(obbject) +``` + +```console +OBBject + +id: 0655d06a-8797-7310-8000-4daaa1d47936 +results: [{'date': datetime.datetime(2023, 11, 21, 0, 0), 'open': 191.41, 'high': 1... +provider: fmp +warnings: None +chart: None +extra: {'metadata': {'arguments': {'provider_choices': {'provider': 'fmp'}, 'standa... +``` + +The output type is `<class 'openbb_core.app.model.obbject.OBBject'>`. + +If we look at the results attribute, we see that we are returned a list of the Data models used, i.e + +```python +obbject.results[0] +``` + +```console +FMPEquityHistoricalData(date=2023-11-21 00:00:00, open=191.41, high=191.5, low=189.74, close=190.375, volume=24029603, vwap=190.54, label=November 21, 23, adj_close=190.375, unadjusted_volume=24029603.0, change=-1.03, change_percent=-0.5407241, change_over_time=-0.005407241) +``` + +In general, this will not be how you want to ingest or modify your data, so to help with this we have provided some methods. + +## OBBject Methods + +We understand that there is no one size fits all solution for data ingestion and manipulation, so we have provided a few methods to help with this and handle the conversion from Obbject to your preferred data type. These methods are accessed by running `obbject.<method>`. + +<details> +<summary mdxType="summary">to_dataframe()</summary> + +One of the most popular libraries for python data manipulation, this method will return a pandas dataframe with the results. + +We have designed this function to work with various data structures we have encountered. Given the time series nature of the data, we set the index to be `date` if that column appears in the models. + +This also has the shorter alias `to_df()`. + +```python +type(obb.equity.price.historical("AAPL", provider="fmp").to_dataframe()) +``` + +```console +<class 'pandas.core.frame.DataFrame'> +``` + +</details> + +<details> +<summary mdxType="summary">to_dict()</summary> + +A very common data structure is to return the data in a dictionary. This model provides an interface to do so, with options to return the dictionary in different orientations, just as in the pandas `to_dict()` method. The default method will return a dictionary that allows you to index to obtain data: + +```python +to_dict = obb.equity.price.historical("AAPL", provider="fmp").to_dict()["open"][:10] +``` + +```console +[150.16, 148.13, 149.45, 148.31, 145.14, 144.29, 141.4, 148.21, 145.96, 147.77] +``` + +Orienting as records will give you a list of dictionaries, commonly used in JSON data structures: + +```python +obb.equity.price.historical("AAPL", provider="fmp").to_dict("records")[0] +``` + +```python +{'date': datetime.date(2023, 3, 6), + 'open': 153.79, + 'high': 156.3, + 'low': 153.46, + 'close': 153.83, + 'volume': 87558000, + 'vwap': 154.53, + 'label': 'March 06, 23', + 'adj_close': 153.01, + 'unadjusted_volume': 87558000.0, + 'change': 0.04, + 'change_percent': 0.02600949, + 'change_over_time': 0.0002600949} +``` + +</details> + +<details> +<summary mdxType="summary">to_numpy()</summary> + +Returns numpy arrays of the results. Note that this loses the column names, so you will need to index the array to obtain the data. + +```python +to_numpy = obb.equity.price.historical("AAPL", provider="fmp").to_numpy()[:1] +``` + +```console +[ + [datetime.date(2023, 5, 19), 176.39, 176.39, 174.94, 175.16, + 55809475, 175.72, 174.23, 55809475.0, -1.23, -0.0069732] +], +... +``` + +</details> + +<details> +<summary mdxType="summary">to_polars()</summary> + +Growing in popularity, polars is a blazingly fast dataframe library. This method will return a polars dataframe. + +Note that we do not include polars in the core dependency tree, so it needs to be installed separately. +</details> + +<details> +<summary mdxType="summary">show()</summary> + +When a charting extension is installed, this method will display the chart if it was computed during the execution of the command, by setting the `chart` parameter to `True`. + +</details> + +## OBBject Extensions + +OBBject extensions registers an accessor in each OBBject that is returned when a command is executed. + +This [page](platform/user_guide/add_obbject_extension) details the process for extending the OBBject class. |