{ "cells": [ { "attachments": { "image.png": { "image/png": "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" } }, "cell_type": "markdown", "metadata": {}, "source": [ "![image.png](attachment:image.png)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Modin-spreadsheet\n", "Modin-spreadsheet is a Jupyter notebook widget that allows users to interact with Modin DataFrames in a spreadsheet-like fashion while taking advantage of the underlying capabilities of Modin. The widget makes it quick and easy to explore, sort, filter, edit data and export reproducible code. \n", "\n", "This tutorial will showcase how to use modin-spreadsheet. To follow along, just run the cells; no editing required!" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "# This notebook expects that Modin and Ray are installed, e.g. by `pip install modin[ray]`.\n", "# For all ways to install Modin see official documentation at:\n", "# https://modin.readthedocs.io/en/latest/installation.html\n", "import modin.pandas as pd\n", "\n", "# modin-spreadsheet is the pip distribution name, modin_spreadsheet is the import name\n", "import modin_spreadsheet" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Create a Modin DataFrame\n", "The following cells creates a DataFrame using a NYC taxi dataset." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "columns_names = [\n", " \"trip_id\", \"vendor_id\", \"pickup_datetime\", \"dropoff_datetime\", \"store_and_fwd_flag\",\n", " \"rate_code_id\", \"pickup_longitude\", \"pickup_latitude\", \"dropoff_longitude\", \"dropoff_latitude\",\n", " \"passenger_count\", \"trip_distance\", \"fare_amount\", \"extra\", \"mta_tax\", \"tip_amount\",\n", " \"tolls_amount\", \"ehail_fee\", \"improvement_surcharge\", \"total_amount\", \"payment_type\",\n", " \"trip_type\", \"pickup\", \"dropoff\", \"cab_type\", \"precipitation\", \"snow_depth\", \"snowfall\",\n", " \"max_temperature\", \"min_temperature\", \"average_wind_speed\", \"pickup_nyct2010_gid\",\n", " \"pickup_ctlabel\", \"pickup_borocode\", \"pickup_boroname\", \"pickup_ct2010\",\n", " \"pickup_boroct2010\", \"pickup_cdeligibil\", \"pickup_ntacode\", \"pickup_ntaname\", \"pickup_puma\",\n", " \"dropoff_nyct2010_gid\", \"dropoff_ctlabel\", \"dropoff_borocode\", \"dropoff_boroname\",\n", " \"dropoff_ct2010\", \"dropoff_boroct2010\", \"dropoff_cdeligibil\", \"dropoff_ntacode\",\n", " \"dropoff_ntaname\", \"dropoff_puma\",\n", " ]\n", "parse_dates=[\"pickup_datetime\", \"dropoff_datetime\"]" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "df = pd.read_csv('https://modin-datasets.s3.amazonaws.com/trips_data.csv', names=columns_names,\n", " header=None, parse_dates=parse_dates)" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "scrolled": true }, "outputs": [], "source": [ "df" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Generate a spreadsheet widget with the DataFrame\n", "`modin-spreadsheet.show_grid` takes in a DataFrame, optional configuration options, and returns a `SpreadsheetWidget`, which contains all the logic for displaying the spreadsheet view of the DataFrame. The object returned will not be rendered unless displayed." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "spreadsheet = modin_spreadsheet.show_grid(df, show_toolbar=True, grid_options={'forceFitColumns': False})" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Displaying the Spreadsheet\n", "The widget is displayed when the widget is returned by an input cell or passed to the `display` function e.g. `display(spreadsheet)`. When displayed, the SpreadsheetWidget will generate a transformation history cell that contains a record of the transformations applied to the DataFrame unless the cell already exists or the feature is disabled.\n", "\n", "### Basic Usage\n", "`Modin-spreadsheet` creates a copy of the input DataFrame, so changes do not alter the original DataFrame.\n", "\n", "**Filter** - Each column can be filtered according to its datatype using the filter button to the right of the column header. Any number of columns can be filtered simultaneously.\\\n", "**Sort** - Each column can be sorted by clicking on the column header. Assumptions on the order of the data should only be made according to the latest sort i.e. the 2nd last sort may not be in order even if grouped by the duplicates in the last sorted column.\\\n", "**Cell Edit** - Double click on a cell to edit its value.\\\n", "**Add Row**(toolbar) - Click on the `Add Row` button in the toolbar to duplicate the last row in the DataFrame.\\\n", "**Remove Row**(toolbar) - Select row(s) on the spreadsheet and click the `Remove Row` button in the toolbar to remove them.\\\n", "**Reset Filters**(toolbar) - Click on the `Reset Filters` button in the toolbar to remove all filters on the data.\\\n", "**Reset Sort**(toolbar) - Click on the `Reset Sort` button in the toolbar to remove any sorting on the data.\n", "\n", "### Transformation History and Reproducible Code\n", "The widget records the history of transformations, such as filtering, that occur on the spreadsheet. These transformations are updated in the `spreadsheet transformation history` cell as they happen and can be easily copied for reproducibility. The history can be cleared using the `Clear History` button in the toolbar.\n", "\n", "**Try making some changes to the spreadsheet!**" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "scrolled": true }, "outputs": [], "source": [ "spreadsheet" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Modin-spreadsheet API\n", "The API on `SpreadsheetWidget` allows users to duplicate some of the functionality on the GUI, but also provides other functionality such as applying the history on another DataFrame or getting the DataFrame that matches the spreadsheet state." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "# Duplicates the `Reset Filters` button\n", "spreadsheet.reset_filters()" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "# Duplicates the `Reset Sort` button\n", "spreadsheet.reset_sort()" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "qgrid6f69f373-ae0e-423e-8e26-429f52e1669d": true }, "outputs": [], "source": [ "# Duplicates the `Clear History` button\n", "spreadsheet.clear_history()" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "# Gets the modified DataFrame that matches the changes to the spreadsheet\n", "spreadsheet.get_changed_df()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Retrieving and Applying Transformation History \n", "The transformation history can be retrieved as a list of code snippets using the `get_history` API. The `apply_history` API will apply the transformations on the input DataFrame and return the resultant DataFrame." ] }, { "cell_type": "code", "execution_count": null, "metadata": { "scrolled": false }, "outputs": [], "source": [ "spreadsheet.get_history()" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "another_df = df.copy()\n", "spreadsheet.apply_history(another_df)" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.8.5" } }, "nbformat": 4, "nbformat_minor": 4 }