In this project, we decided to use Object-Oriented Programming (OOP) for the dataset class, in order to expose some basic functions for clients to use. The Dataset class is defined in `src/Dataset.py`.
# System Architecture
The goal of this system is to develop a Python library that provides
dataset manipulation and visualization functionalities for use in Jupyter
Notebooks. In order to create a suitable architecture, we first had to make a
decision for a programming approach. In this project, we settled for an Object-Oriented
Programming (OOP) approach to ensure modularity, reusability, and
maintainability of our codebase.
For the plotting functions, we decided to define several commonly-used plotting functions in a separate file `src/Plotting.py`.
\ No newline at end of file
The system will encompass two classes, `Dataset` and `Plotter`, which will
expose functions that implement the two core functionalities of our system:
* Dataset-related operations such as load, clean, transofrm and analyze
datasets
* Visualization-related operations, such as exposing functions that realize
the visualization of different plots such as scatter-plots, bar-plots and box-
plots.
The `Dataset` class is defined in `src/Dataset.py`, the `Plotter`class is
defined in `src/Plotter.py`.
# UML Class Diagram
To further extend this system architecture description and elaborate on the
class structure and functionality, we have created an UML-Diagram encompassing both classes.
It describes their class attributes and functions:

# Usage
Using our dataset, an example usage can be found in our Narrative.ipynb
# Conclusion
This system architecture follows the Object-Oriented Programming (OOP)
approach, providing modularity and flexibility in handling dataset
manipulation and visualization tasks within Jupyter Notebooks.
Users can easily import and utilize the classes to load, clean, transform,
and analyze datasets using the `Dataset` class, as well as generate various
visualizations for better data understanding using the `Plotter` Class.