{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Formula 1 - Predicting the winner of a race\n", "\n", "*NOTE: Due to featuretools' memory requirement, this notebook will not run on MyBinder.*\n", "\n", "In this notebook we will benchmark getML against featuretools to predict the winner of a Formula 1 race.\n", "\n", "Summary:\n", "\n", "- Prediction type: __Classification model__\n", "- Domain: __Sports__\n", "- Prediction target: __Win__ \n", "- Population size: __31578__\n", "\n", "_Author: Dr. Patrick Urbanke_" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ " " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Background\n", "\n", "We would like to develop a prediction model for Formula 1 races, that would allow us to predict the winner of a race before the race has started.\n", "\n", "We use dataset of all Formula 1 races from 1950 to 2017. The dataset includes information such as the time taken in each lap, the time taken for pit stops, the performance in the qualifying rounds etc.\n", "\n", "The dataset has been downloaded from the [CTU Prague relational learning repository](https://relational.fit.cvut.cz/dataset/ErgastF1) (Motl and Schulte, 2015).\n", "\n", "We will benchmark [getML](https://www.getml.com) 's feature learning algorithms against [featuretools](https://www.featuretools.com), an open-source implementation of the propositionalization algorithm, similar to getML's FastProp." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ " " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### A web frontend for getML\n", "\n", "The getML monitor is a frontend built to support your work with getML. The getML monitor displays information such as the imported data frames, trained pipelines and allows easy data and feature exploration. You can launch the getML monitor [here](http://localhost:1709)." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ " " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Where is this running?\n", "\n", "Your getML live session is running inside a docker container on [mybinder.org](https://mybinder.org/), a service built by the Jupyter community and funded by Google Cloud, OVH, GESIS Notebooks and the Turing Institute. As it is a free service, this session will shut down after 10 minutes of inactivity." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ " " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Analysis" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Let's get started with the analysis and set up your session:" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\n", "\n", "\n", "Connected to project 'formula1'\n" ] } ], "source": [ "import copy\n", "import os\n", "from urllib import request\n", "\n", "import numpy as np\n", "import pandas as pd\n", "from IPython.display import Image\n", "import matplotlib.pyplot as plt\n", "plt.style.use('seaborn')\n", "%matplotlib inline \n", "\n", "import featuretools\n", "import getml\n", "\n", "getml.engine.set_project('formula1')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ " " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 1. Loading data" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 1.1 Download from source\n", "\n", "We begin by downloading the data:" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "Connection(conn_id='default',\n", " dbname='ErgastF1',\n", " dialect='mysql',\n", " host='relational.fit.cvut.cz',\n", " port=3306)" ] }, "execution_count": 2, "metadata": {}, "output_type": "execute_result" } ], "source": [ "conn = getml.database.connect_mariadb(\n", " host=\"relational.fit.cvut.cz\",\n", " dbname=\"ErgastF1\",\n", " port=3306,\n", " user=\"guest\",\n", " password=\"relational\"\n", ")\n", "\n", "conn" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [], "source": [ "def load_if_needed(name):\n", " \"\"\"\n", " Loads the data from the relational learning\n", " repository, if the data frame has not already\n", " been loaded.\n", " \"\"\"\n", " if not getml.data.exists(name):\n", " data_frame = getml.data.DataFrame.from_db(\n", " name=name,\n", " table_name=name,\n", " conn=conn\n", " )\n", " data_frame.save()\n", " else:\n", " data_frame = getml.data.load_data_frame(name)\n", " return data_frame" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [], "source": [ "driverStandings = load_if_needed(\"driverStandings\")\n", "drivers = load_if_needed(\"drivers\")\n", "lapTimes = load_if_needed(\"lapTimes\")\n", "pitStops = load_if_needed(\"pitStops\")\n", "races = load_if_needed(\"races\")\n", "qualifying = load_if_needed(\"qualifying\")" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "data": { "text/html": [ "\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
namedriverStandingsId raceId driverId points position winspositionText
role unused_floatunused_floatunused_floatunused_floatunused_floatunused_floatunused_string
0\n", " 1 \n", " \n", " 18 \n", " \n", " 1 \n", " \n", " 10 \n", " \n", " 1 \n", " \n", " 1 \n", " 1
1\n", " 2 \n", " \n", " 18 \n", " \n", " 2 \n", " \n", " 8 \n", " \n", " 2 \n", " \n", " 0 \n", " 2
2\n", " 3 \n", " \n", " 18 \n", " \n", " 3 \n", " \n", " 6 \n", " \n", " 3 \n", " \n", " 0 \n", " 3
3\n", " 4 \n", " \n", " 18 \n", " \n", " 4 \n", " \n", " 5 \n", " \n", " 4 \n", " \n", " 0 \n", " 4
4\n", " 5 \n", " \n", " 18 \n", " \n", " 5 \n", " \n", " 4 \n", " \n", " 5 \n", " \n", " 0 \n", " 5
\n", " ... \n", " \n", " ... \n", " \n", " ... \n", " \n", " ... \n", " \n", " ... \n", " \n", " ... \n", " ...
31573\n", " 68456 \n", " \n", " 982 \n", " \n", " 835 \n", " \n", " 8 \n", " \n", " 16 \n", " \n", " 0 \n", " 16
31574\n", " 68457 \n", " \n", " 982 \n", " \n", " 154 \n", " \n", " 26 \n", " \n", " 13 \n", " \n", " 0 \n", " 13
31575\n", " 68458 \n", " \n", " 982 \n", " \n", " 836 \n", " \n", " 5 \n", " \n", " 18 \n", " \n", " 0 \n", " 18
31576\n", " 68459 \n", " \n", " 982 \n", " \n", " 18 \n", " \n", " 0 \n", " \n", " 22 \n", " \n", " 0 \n", " 22
31577\n", " 68460 \n", " \n", " 982 \n", " \n", " 814 \n", " \n", " 0 \n", " \n", " 23 \n", " \n", " 0 \n", " 23
\n", "\n", "

\n", " 31578 rows x 7 columns
\n", " memory usage: 1.85 MB
\n", " name: driverStandings
\n", " type: getml.DataFrame
\n", " url: http://localhost:1709/#/getdataframe/formula1/driverStandings/\n", "

\n" ], "text/plain": [ " name driverStandingsId raceId driverId points position wins positionText \n", " role unused_float unused_float unused_float unused_float unused_float unused_float unused_string\n", " 0 1 18 1 10 1 1 1 \n", " 1 2 18 2 8 2 0 2 \n", " 2 3 18 3 6 3 0 3 \n", " 3 4 18 4 5 4 0 4 \n", " 4 5 18 5 4 5 0 5 \n", " ... ... ... ... ... ... ... \n", "31573 68456 982 835 8 16 0 16 \n", "31574 68457 982 154 26 13 0 13 \n", "31575 68458 982 836 5 18 0 18 \n", "31576 68459 982 18 0 22 0 22 \n", "31577 68460 982 814 0 23 0 23 \n", "\n", "\n", "31578 rows x 7 columns\n", "memory usage: 1.85 MB\n", "name: driverStandings\n", "type: getml.DataFrame\n", "url: http://localhost:1709/#/getdataframe/formula1/driverStandings/" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "driverStandings" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "data": { "text/html": [ "\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
name driverId numberdriverRef code forename surname dob nationality url
roleunused_floatunused_floatunused_stringunused_stringunused_stringunused_stringunused_stringunused_stringunused_string
0\n", " 1 \n", " \n", " 44 \n", " hamiltonHAMLewisHamilton1985-01-07Britishhttp://en.wikipedia.org/wiki/Lew...
1\n", " 2 \n", " \n", " nan \n", " heidfeldHEINickHeidfeld1977-05-10Germanhttp://en.wikipedia.org/wiki/Nic...
2\n", " 3 \n", " \n", " 6 \n", " rosbergROSNicoRosberg1985-06-27Germanhttp://en.wikipedia.org/wiki/Nic...
3\n", " 4 \n", " \n", " 14 \n", " alonsoALOFernandoAlonso1981-07-29Spanishhttp://en.wikipedia.org/wiki/Fer...
4\n", " 5 \n", " \n", " nan \n", " kovalainenKOVHeikkiKovalainen1981-10-19Finnishhttp://en.wikipedia.org/wiki/Hei...
\n", " ... \n", " \n", " ... \n", " .....................
835\n", " 837 \n", " \n", " 88 \n", " haryantoHARRioHaryanto1993-01-22Indonesianhttp://en.wikipedia.org/wiki/Rio...
836\n", " 838 \n", " \n", " 2 \n", " vandoorneVANStoffelVandoorne1992-03-26Belgianhttp://en.wikipedia.org/wiki/Sto...
837\n", " 839 \n", " \n", " 31 \n", " oconOCOEstebanOcon1996-09-17Frenchhttp://en.wikipedia.org/wiki/Est...
838\n", " 840 \n", " \n", " 18 \n", " strollSTRLanceStroll1998-10-29Canadianhttp://en.wikipedia.org/wiki/Lan...
839\n", " 841 \n", " \n", " 36 \n", " giovinazziGIOAntonioGiovinazzi1993-12-14Italianhttp://en.wikipedia.org/wiki/Ant...
\n", "\n", "

\n", " 840 rows x 9 columns
\n", " memory usage: 0.14 MB
\n", " name: drivers
\n", " type: getml.DataFrame
\n", " url: http://localhost:1709/#/getdataframe/formula1/drivers/\n", "

\n" ], "text/plain": [ "name driverId number driverRef code forename surname dob \n", "role unused_float unused_float unused_string unused_string unused_string unused_string unused_string\n", " 0 1 44 hamilton HAM Lewis Hamilton 1985-01-07 \n", " 1 2 nan heidfeld HEI Nick Heidfeld 1977-05-10 \n", " 2 3 6 rosberg ROS Nico Rosberg 1985-06-27 \n", " 3 4 14 alonso ALO Fernando Alonso 1981-07-29 \n", " 4 5 nan kovalainen KOV Heikki Kovalainen 1981-10-19 \n", " ... ... ... ... ... ... ... \n", " 835 837 88 haryanto HAR Rio Haryanto 1993-01-22 \n", " 836 838 2 vandoorne VAN Stoffel Vandoorne 1992-03-26 \n", " 837 839 31 ocon OCO Esteban Ocon 1996-09-17 \n", " 838 840 18 stroll STR Lance Stroll 1998-10-29 \n", " 839 841 36 giovinazzi GIO Antonio Giovinazzi 1993-12-14 \n", "\n", "name nationality url \n", "role unused_string unused_string \n", " 0 British http://en.wikipedia.org/wiki/Lew...\n", " 1 German http://en.wikipedia.org/wiki/Nic...\n", " 2 German http://en.wikipedia.org/wiki/Nic...\n", " 3 Spanish http://en.wikipedia.org/wiki/Fer...\n", " 4 Finnish http://en.wikipedia.org/wiki/Hei...\n", " ... ... \n", " 835 Indonesian http://en.wikipedia.org/wiki/Rio...\n", " 836 Belgian http://en.wikipedia.org/wiki/Sto...\n", " 837 French http://en.wikipedia.org/wiki/Est...\n", " 838 Canadian http://en.wikipedia.org/wiki/Lan...\n", " 839 Italian http://en.wikipedia.org/wiki/Ant...\n", "\n", "\n", "840 rows x 9 columns\n", "memory usage: 0.14 MB\n", "name: drivers\n", "type: getml.DataFrame\n", "url: http://localhost:1709/#/getdataframe/formula1/drivers/" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "drivers" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "data": { "text/html": [ "\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
name raceId driverId lap positionmillisecondstime
roleunused_floatunused_floatunused_floatunused_floatunused_floatunused_string
0\n", " 1 \n", " \n", " 1 \n", " \n", " 1 \n", " \n", " 13 \n", " \n", " 109088 \n", " 1:49.088
1\n", " 1 \n", " \n", " 1 \n", " \n", " 2 \n", " \n", " 12 \n", " \n", " 93740 \n", " 1:33.740
2\n", " 1 \n", " \n", " 1 \n", " \n", " 3 \n", " \n", " 11 \n", " \n", " 91600 \n", " 1:31.600
3\n", " 1 \n", " \n", " 1 \n", " \n", " 4 \n", " \n", " 10 \n", " \n", " 91067 \n", " 1:31.067
4\n", " 1 \n", " \n", " 1 \n", " \n", " 5 \n", " \n", " 10 \n", " \n", " 92129 \n", " 1:32.129
\n", " ... \n", " \n", " ... \n", " \n", " ... \n", " \n", " ... \n", " \n", " ... \n", " ...
420364\n", " 982 \n", " \n", " 840 \n", " \n", " 54 \n", " \n", " 8 \n", " \n", " 107528 \n", " 1:47.528
420365\n", " 982 \n", " \n", " 840 \n", " \n", " 55 \n", " \n", " 8 \n", " \n", " 107512 \n", " 1:47.512
420366\n", " 982 \n", " \n", " 840 \n", " \n", " 56 \n", " \n", " 8 \n", " \n", " 108143 \n", " 1:48.143
420367\n", " 982 \n", " \n", " 840 \n", " \n", " 57 \n", " \n", " 8 \n", " \n", " 107848 \n", " 1:47.848
420368\n", " 982 \n", " \n", " 840 \n", " \n", " 58 \n", " \n", " 8 \n", " \n", " 108699 \n", " 1:48.699
\n", "\n", "

\n", " 420369 rows x 6 columns
\n", " memory usage: 23.96 MB
\n", " name: lapTimes
\n", " type: getml.DataFrame
\n", " url: http://localhost:1709/#/getdataframe/formula1/lapTimes/\n", "

\n" ], "text/plain": [ " name raceId driverId lap position milliseconds time \n", " role unused_float unused_float unused_float unused_float unused_float unused_string\n", " 0 1 1 1 13 109088 1:49.088 \n", " 1 1 1 2 12 93740 1:33.740 \n", " 2 1 1 3 11 91600 1:31.600 \n", " 3 1 1 4 10 91067 1:31.067 \n", " 4 1 1 5 10 92129 1:32.129 \n", " ... ... ... ... ... ... \n", "420364 982 840 54 8 107528 1:47.528 \n", "420365 982 840 55 8 107512 1:47.512 \n", "420366 982 840 56 8 108143 1:48.143 \n", "420367 982 840 57 8 107848 1:47.848 \n", "420368 982 840 58 8 108699 1:48.699 \n", "\n", "\n", "420369 rows x 6 columns\n", "memory usage: 23.96 MB\n", "name: lapTimes\n", "type: getml.DataFrame\n", "url: http://localhost:1709/#/getdataframe/formula1/lapTimes/" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "lapTimes" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "data": { "text/html": [ "\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
name raceId driverId stop lapmillisecondstime duration
roleunused_floatunused_floatunused_floatunused_floatunused_floatunused_stringunused_string
0\n", " 841 \n", " \n", " 1 \n", " \n", " 1 \n", " \n", " 16 \n", " \n", " 23227 \n", " 17:28:2423.227
1\n", " 841 \n", " \n", " 1 \n", " \n", " 2 \n", " \n", " 36 \n", " \n", " 23199 \n", " 17:59:2923.199
2\n", " 841 \n", " \n", " 2 \n", " \n", " 1 \n", " \n", " 15 \n", " \n", " 22994 \n", " 17:27:4122.994
3\n", " 841 \n", " \n", " 2 \n", " \n", " 2 \n", " \n", " 30 \n", " \n", " 25098 \n", " 17:51:3225.098
4\n", " 841 \n", " \n", " 3 \n", " \n", " 1 \n", " \n", " 16 \n", " \n", " 23716 \n", " 17:29:0023.716
\n", " ... \n", " \n", " ... \n", " \n", " ... \n", " \n", " ... \n", " \n", " ... \n", " ......
6065\n", " 982 \n", " \n", " 839 \n", " \n", " 6 \n", " \n", " 38 \n", " \n", " 29134 \n", " 21:29:0729.134
6066\n", " 982 \n", " \n", " 840 \n", " \n", " 1 \n", " \n", " 1 \n", " \n", " 37403 \n", " 20:06:4337.403
6067\n", " 982 \n", " \n", " 840 \n", " \n", " 2 \n", " \n", " 2 \n", " \n", " 29294 \n", " 20:10:0729.294
6068\n", " 982 \n", " \n", " 840 \n", " \n", " 3 \n", " \n", " 3 \n", " \n", " 25584 \n", " 20:13:1625.584
6069\n", " 982 \n", " \n", " 840 \n", " \n", " 4 \n", " \n", " 26 \n", " \n", " 29412 \n", " 21:05:0729.412
\n", "\n", "

\n", " 6070 rows x 7 columns
\n", " memory usage: 0.44 MB
\n", " name: pitStops
\n", " type: getml.DataFrame
\n", " url: http://localhost:1709/#/getdataframe/formula1/pitStops/\n", "

\n" ], "text/plain": [ "name raceId driverId stop lap milliseconds time duration \n", "role unused_float unused_float unused_float unused_float unused_float unused_string unused_string\n", " 0 841 1 1 16 23227 17:28:24 23.227 \n", " 1 841 1 2 36 23199 17:59:29 23.199 \n", " 2 841 2 1 15 22994 17:27:41 22.994 \n", " 3 841 2 2 30 25098 17:51:32 25.098 \n", " 4 841 3 1 16 23716 17:29:00 23.716 \n", " ... ... ... ... ... ... ... \n", "6065 982 839 6 38 29134 21:29:07 29.134 \n", "6066 982 840 1 1 37403 20:06:43 37.403 \n", "6067 982 840 2 2 29294 20:10:07 29.294 \n", "6068 982 840 3 3 25584 20:13:16 25.584 \n", "6069 982 840 4 26 29412 21:05:07 29.412 \n", "\n", "\n", "6070 rows x 7 columns\n", "memory usage: 0.44 MB\n", "name: pitStops\n", "type: getml.DataFrame\n", "url: http://localhost:1709/#/getdataframe/formula1/pitStops/" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "pitStops" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "data": { "text/html": [ "\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
name raceId year round circuitIdname date time url
roleunused_floatunused_floatunused_floatunused_floatunused_string unused_stringunused_stringunused_string
0\n", " 1 \n", " \n", " 2009 \n", " \n", " 1 \n", " \n", " 1 \n", " Australian Grand Prix2009-03-2906:00:00http://en.wikipedia.org/wiki/200...
1\n", " 2 \n", " \n", " 2009 \n", " \n", " 2 \n", " \n", " 2 \n", " Malaysian Grand Prix2009-04-0509:00:00http://en.wikipedia.org/wiki/200...
2\n", " 3 \n", " \n", " 2009 \n", " \n", " 3 \n", " \n", " 17 \n", " Chinese Grand Prix2009-04-1907:00:00http://en.wikipedia.org/wiki/200...
3\n", " 4 \n", " \n", " 2009 \n", " \n", " 4 \n", " \n", " 3 \n", " Bahrain Grand Prix2009-04-2612:00:00http://en.wikipedia.org/wiki/200...
4\n", " 5 \n", " \n", " 2009 \n", " \n", " 5 \n", " \n", " 4 \n", " Spanish Grand Prix2009-05-1012:00:00http://en.wikipedia.org/wiki/200...
\n", " ... \n", " \n", " ... \n", " \n", " ... \n", " \n", " ... \n", " ............
971\n", " 984 \n", " \n", " 2017 \n", " \n", " 16 \n", " \n", " 22 \n", " Japanese Grand Prix2017-10-0805:00:00https://en.wikipedia.org/wiki/20...
972\n", " 985 \n", " \n", " 2017 \n", " \n", " 17 \n", " \n", " 69 \n", " United States Grand Prix2017-10-2219:00:00https://en.wikipedia.org/wiki/20...
973\n", " 986 \n", " \n", " 2017 \n", " \n", " 18 \n", " \n", " 32 \n", " Mexican Grand Prix2017-10-2919:00:00https://en.wikipedia.org/wiki/20...
974\n", " 987 \n", " \n", " 2017 \n", " \n", " 19 \n", " \n", " 18 \n", " Brazilian Grand Prix2017-11-1216:00:00https://en.wikipedia.org/wiki/20...
975\n", " 988 \n", " \n", " 2017 \n", " \n", " 20 \n", " \n", " 24 \n", " Abu Dhabi Grand Prix2017-11-2617:00:00https://en.wikipedia.org/wiki/20...
\n", "\n", "

\n", " 976 rows x 8 columns
\n", " memory usage: 0.15 MB
\n", " name: races
\n", " type: getml.DataFrame
\n", " url: http://localhost:1709/#/getdataframe/formula1/races/\n", "

\n" ], "text/plain": [ "name raceId year round circuitId name date time \n", "role unused_float unused_float unused_float unused_float unused_string unused_string unused_string\n", " 0 1 2009 1 1 Australian Grand Prix 2009-03-29 06:00:00 \n", " 1 2 2009 2 2 Malaysian Grand Prix 2009-04-05 09:00:00 \n", " 2 3 2009 3 17 Chinese Grand Prix 2009-04-19 07:00:00 \n", " 3 4 2009 4 3 Bahrain Grand Prix 2009-04-26 12:00:00 \n", " 4 5 2009 5 4 Spanish Grand Prix 2009-05-10 12:00:00 \n", " ... ... ... ... ... ... ... \n", " 971 984 2017 16 22 Japanese Grand Prix 2017-10-08 05:00:00 \n", " 972 985 2017 17 69 United States Grand Prix 2017-10-22 19:00:00 \n", " 973 986 2017 18 32 Mexican Grand Prix 2017-10-29 19:00:00 \n", " 974 987 2017 19 18 Brazilian Grand Prix 2017-11-12 16:00:00 \n", " 975 988 2017 20 24 Abu Dhabi Grand Prix 2017-11-26 17:00:00 \n", "\n", "name url \n", "role unused_string \n", " 0 http://en.wikipedia.org/wiki/200...\n", " 1 http://en.wikipedia.org/wiki/200...\n", " 2 http://en.wikipedia.org/wiki/200...\n", " 3 http://en.wikipedia.org/wiki/200...\n", " 4 http://en.wikipedia.org/wiki/200...\n", " ... \n", " 971 https://en.wikipedia.org/wiki/20...\n", " 972 https://en.wikipedia.org/wiki/20...\n", " 973 https://en.wikipedia.org/wiki/20...\n", " 974 https://en.wikipedia.org/wiki/20...\n", " 975 https://en.wikipedia.org/wiki/20...\n", "\n", "\n", "976 rows x 8 columns\n", "memory usage: 0.15 MB\n", "name: races\n", "type: getml.DataFrame\n", "url: http://localhost:1709/#/getdataframe/formula1/races/" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "races" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "data": { "text/html": [ "\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
name qualifyId raceId driverIdconstructorId number positionq1 q2 q3
roleunused_floatunused_floatunused_float unused_floatunused_floatunused_floatunused_stringunused_stringunused_string
0\n", " 1 \n", " \n", " 18 \n", " \n", " 1 \n", " \n", " 1 \n", " \n", " 22 \n", " \n", " 1 \n", " 1:26.5721:25.1871:26.714
1\n", " 2 \n", " \n", " 18 \n", " \n", " 9 \n", " \n", " 2 \n", " \n", " 4 \n", " \n", " 2 \n", " 1:26.1031:25.3151:26.869
2\n", " 3 \n", " \n", " 18 \n", " \n", " 5 \n", " \n", " 1 \n", " \n", " 23 \n", " \n", " 3 \n", " 1:25.6641:25.4521:27.079
3\n", " 4 \n", " \n", " 18 \n", " \n", " 13 \n", " \n", " 6 \n", " \n", " 2 \n", " \n", " 4 \n", " 1:25.9941:25.6911:27.178
4\n", " 5 \n", " \n", " 18 \n", " \n", " 2 \n", " \n", " 2 \n", " \n", " 3 \n", " \n", " 5 \n", " 1:25.9601:25.5181:27.236
\n", " ... \n", " \n", " ... \n", " \n", " ... \n", " \n", " ... \n", " \n", " ... \n", " \n", " ... \n", " .........
7392\n", " 7415 \n", " \n", " 982 \n", " \n", " 825 \n", " \n", " 210 \n", " \n", " 20 \n", " \n", " 16 \n", " 1:43.756NULLNULL
7393\n", " 7416 \n", " \n", " 982 \n", " \n", " 13 \n", " \n", " 3 \n", " \n", " 19 \n", " \n", " 17 \n", " 1:44.014NULLNULL
7394\n", " 7417 \n", " \n", " 982 \n", " \n", " 840 \n", " \n", " 3 \n", " \n", " 18 \n", " \n", " 18 \n", " 1:44.728NULLNULL
7395\n", " 7418 \n", " \n", " 982 \n", " \n", " 836 \n", " \n", " 15 \n", " \n", " 94 \n", " \n", " 19 \n", " 1:45.059NULLNULL
7396\n", " 7419 \n", " \n", " 982 \n", " \n", " 828 \n", " \n", " 15 \n", " \n", " 9 \n", " \n", " 20 \n", " 1:45.570NULLNULL
\n", "\n", "

\n", " 7397 rows x 9 columns
\n", " memory usage: 0.70 MB
\n", " name: qualifying
\n", " type: getml.DataFrame
\n", " url: http://localhost:1709/#/getdataframe/formula1/qualifying/\n", "

\n" ], "text/plain": [ "name qualifyId raceId driverId constructorId number position q1 \n", "role unused_float unused_float unused_float unused_float unused_float unused_float unused_string\n", " 0 1 18 1 1 22 1 1:26.572 \n", " 1 2 18 9 2 4 2 1:26.103 \n", " 2 3 18 5 1 23 3 1:25.664 \n", " 3 4 18 13 6 2 4 1:25.994 \n", " 4 5 18 2 2 3 5 1:25.960 \n", " ... ... ... ... ... ... ... \n", "7392 7415 982 825 210 20 16 1:43.756 \n", "7393 7416 982 13 3 19 17 1:44.014 \n", "7394 7417 982 840 3 18 18 1:44.728 \n", "7395 7418 982 836 15 94 19 1:45.059 \n", "7396 7419 982 828 15 9 20 1:45.570 \n", "\n", "name q2 q3 \n", "role unused_string unused_string\n", " 0 1:25.187 1:26.714 \n", " 1 1:25.315 1:26.869 \n", " 2 1:25.452 1:27.079 \n", " 3 1:25.691 1:27.178 \n", " 4 1:25.518 1:27.236 \n", " ... ... \n", "7392 NULL NULL \n", "7393 NULL NULL \n", "7394 NULL NULL \n", "7395 NULL NULL \n", "7396 NULL NULL \n", "\n", "\n", "7397 rows x 9 columns\n", "memory usage: 0.70 MB\n", "name: qualifying\n", "type: getml.DataFrame\n", "url: http://localhost:1709/#/getdataframe/formula1/qualifying/" ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], "source": [ "qualifying" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ " " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 1.2 Prepare data for getML" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ " " ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
raceIdyearroundcircuitIdnamedatetimeurl
01.02009.01.01.0Australian Grand Prix2009-03-2906:00:00http://en.wikipedia.org/wiki/2009_Australian_G...
12.02009.02.02.0Malaysian Grand Prix2009-04-0509:00:00http://en.wikipedia.org/wiki/2009_Malaysian_Gr...
23.02009.03.017.0Chinese Grand Prix2009-04-1907:00:00http://en.wikipedia.org/wiki/2009_Chinese_Gran...
34.02009.04.03.0Bahrain Grand Prix2009-04-2612:00:00http://en.wikipedia.org/wiki/2009_Bahrain_Gran...
45.02009.05.04.0Spanish Grand Prix2009-05-1012:00:00http://en.wikipedia.org/wiki/2009_Spanish_Gran...
...........................
971984.02017.016.022.0Japanese Grand Prix2017-10-0805:00:00https://en.wikipedia.org/wiki/2017_Japanese_Gr...
972985.02017.017.069.0United States Grand Prix2017-10-2219:00:00https://en.wikipedia.org/wiki/2017_United_Stat...
973986.02017.018.032.0Mexican Grand Prix2017-10-2919:00:00https://en.wikipedia.org/wiki/2017_Mexican_Gra...
974987.02017.019.018.0Brazilian Grand Prix2017-11-1216:00:00https://en.wikipedia.org/wiki/2017_Brazilian_G...
975988.02017.020.024.0Abu Dhabi Grand Prix2017-11-2617:00:00https://en.wikipedia.org/wiki/2017_Abu_Dhabi_G...
\n", "

976 rows × 8 columns

\n", "
" ], "text/plain": [ " raceId year round circuitId name date \\\n", "0 1.0 2009.0 1.0 1.0 Australian Grand Prix 2009-03-29 \n", "1 2.0 2009.0 2.0 2.0 Malaysian Grand Prix 2009-04-05 \n", "2 3.0 2009.0 3.0 17.0 Chinese Grand Prix 2009-04-19 \n", "3 4.0 2009.0 4.0 3.0 Bahrain Grand Prix 2009-04-26 \n", "4 5.0 2009.0 5.0 4.0 Spanish Grand Prix 2009-05-10 \n", ".. ... ... ... ... ... ... \n", "971 984.0 2017.0 16.0 22.0 Japanese Grand Prix 2017-10-08 \n", "972 985.0 2017.0 17.0 69.0 United States Grand Prix 2017-10-22 \n", "973 986.0 2017.0 18.0 32.0 Mexican Grand Prix 2017-10-29 \n", "974 987.0 2017.0 19.0 18.0 Brazilian Grand Prix 2017-11-12 \n", "975 988.0 2017.0 20.0 24.0 Abu Dhabi Grand Prix 2017-11-26 \n", "\n", " time url \n", "0 06:00:00 http://en.wikipedia.org/wiki/2009_Australian_G... \n", "1 09:00:00 http://en.wikipedia.org/wiki/2009_Malaysian_Gr... \n", "2 07:00:00 http://en.wikipedia.org/wiki/2009_Chinese_Gran... \n", "3 12:00:00 http://en.wikipedia.org/wiki/2009_Bahrain_Gran... \n", "4 12:00:00 http://en.wikipedia.org/wiki/2009_Spanish_Gran... \n", ".. ... ... \n", "971 05:00:00 https://en.wikipedia.org/wiki/2017_Japanese_Gr... \n", "972 19:00:00 https://en.wikipedia.org/wiki/2017_United_Stat... \n", "973 19:00:00 https://en.wikipedia.org/wiki/2017_Mexican_Gra... \n", "974 16:00:00 https://en.wikipedia.org/wiki/2017_Brazilian_G... \n", "975 17:00:00 https://en.wikipedia.org/wiki/2017_Abu_Dhabi_G... \n", "\n", "[976 rows x 8 columns]" ] }, "execution_count": 11, "metadata": {}, "output_type": "execute_result" } ], "source": [ "racesPd = races.to_pandas()\n", "racesPd" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We actually need some set-up, because the target variable is not readily available. The `wins` column in `driverStandings` is actually the accumulated number of wins over a year, but what we want is a boolean variable indicated whether someone has one a particular race or not." ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [ { "data": { "text/html": [ "\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
namedriverStandingsId raceId driverId points position wins year round winpositionText date
role unused_floatunused_floatunused_floatunused_floatunused_floatunused_floatunused_floatunused_floatunused_floatunused_stringunused_string
0\n", " 1 \n", " \n", " 18 \n", " \n", " 1 \n", " \n", " 10 \n", " \n", " 1 \n", " \n", " 1 \n", " \n", " 2008 \n", " \n", " 1 \n", " \n", " 1 \n", " 12008-03-16
1\n", " 2 \n", " \n", " 18 \n", " \n", " 2 \n", " \n", " 8 \n", " \n", " 2 \n", " \n", " 0 \n", " \n", " 2008 \n", " \n", " 1 \n", " \n", " 0 \n", " 22008-03-16
2\n", " 3 \n", " \n", " 18 \n", " \n", " 3 \n", " \n", " 6 \n", " \n", " 3 \n", " \n", " 0 \n", " \n", " 2008 \n", " \n", " 1 \n", " \n", " 0 \n", " 32008-03-16
3\n", " 4 \n", " \n", " 18 \n", " \n", " 4 \n", " \n", " 5 \n", " \n", " 4 \n", " \n", " 0 \n", " \n", " 2008 \n", " \n", " 1 \n", " \n", " 0 \n", " 42008-03-16
4\n", " 5 \n", " \n", " 18 \n", " \n", " 5 \n", " \n", " 4 \n", " \n", " 5 \n", " \n", " 0 \n", " \n", " 2008 \n", " \n", " 1 \n", " \n", " 0 \n", " 52008-03-16
\n", " ... \n", " \n", " ... \n", " \n", " ... \n", " \n", " ... \n", " \n", " ... \n", " \n", " ... \n", " \n", " ... \n", " \n", " ... \n", " \n", " ... \n", " ......
31573\n", " 68456 \n", " \n", " 982 \n", " \n", " 835 \n", " \n", " 8 \n", " \n", " 16 \n", " \n", " 0 \n", " \n", " 2017 \n", " \n", " 14 \n", " \n", " 0 \n", " 162017-09-17
31574\n", " 68457 \n", " \n", " 982 \n", " \n", " 154 \n", " \n", " 26 \n", " \n", " 13 \n", " \n", " 0 \n", " \n", " 2017 \n", " \n", " 14 \n", " \n", " 0 \n", " 132017-09-17
31575\n", " 68458 \n", " \n", " 982 \n", " \n", " 836 \n", " \n", " 5 \n", " \n", " 18 \n", " \n", " 0 \n", " \n", " 2017 \n", " \n", " 14 \n", " \n", " 0 \n", " 182017-09-17
31576\n", " 68459 \n", " \n", " 982 \n", " \n", " 18 \n", " \n", " 0 \n", " \n", " 22 \n", " \n", " 0 \n", " \n", " 2017 \n", " \n", " 14 \n", " \n", " 0 \n", " 222017-09-17
31577\n", " 68460 \n", " \n", " 982 \n", " \n", " 814 \n", " \n", " 0 \n", " \n", " 23 \n", " \n", " 0 \n", " \n", " 2017 \n", " \n", " 14 \n", " \n", " 0 \n", " 232017-09-17
\n", "\n", "

\n", " 31578 rows x 11 columns
\n", " memory usage: 3.21 MB
\n", " name: driver_standings
\n", " type: getml.DataFrame
\n", " url: http://localhost:1709/#/getdataframe/formula1/driver_standings/\n", "

\n" ], "text/plain": [ " name driverStandingsId raceId driverId points ... year round win\n", " role unused_float unused_float unused_float unused_float ... unused_float unused_float unused_float\n", " 0 1 18 1 10 ... 2008 1 1\n", " 1 2 18 2 8 ... 2008 1 0\n", " 2 3 18 3 6 ... 2008 1 0\n", " 3 4 18 4 5 ... 2008 1 0\n", " 4 5 18 5 4 ... 2008 1 0\n", " ... ... ... ... ... ... ...\n", "31573 68456 982 835 8 ... 2017 14 0\n", "31574 68457 982 154 26 ... 2017 14 0\n", "31575 68458 982 836 5 ... 2017 14 0\n", "31576 68459 982 18 0 ... 2017 14 0\n", "31577 68460 982 814 0 ... 2017 14 0\n", "\n", " name positionText date \n", " role unused_string unused_string\n", " 0 1 2008-03-16 \n", " 1 2 2008-03-16 \n", " 2 3 2008-03-16 \n", " 3 4 2008-03-16 \n", " 4 5 2008-03-16 \n", " ... ... \n", "31573 16 2017-09-17 \n", "31574 13 2017-09-17 \n", "31575 18 2017-09-17 \n", "31576 22 2017-09-17 \n", "31577 23 2017-09-17 \n", "\n", "\n", "31578 rows x 11 columns\n", "memory usage: 3.21 MB\n", "name: driver_standings\n", "type: getml.DataFrame\n", "url: http://localhost:1709/#/getdataframe/formula1/driver_standings/" ] }, "execution_count": 12, "metadata": {}, "output_type": "execute_result" } ], "source": [ "driverStandingsPd = driverStandings.to_pandas()\n", "\n", "driverStandingsPd = driverStandingsPd.merge(\n", " racesPd[[\"raceId\", \"year\", \"date\", \"round\"]],\n", " on=\"raceId\"\n", ")\n", "\n", "previousStanding = driverStandingsPd.merge(\n", " driverStandingsPd[[\"driverId\", \"year\", \"wins\", \"round\"]],\n", " on=[\"driverId\", \"year\"],\n", ")\n", "\n", "isPreviousRound = (previousStanding[\"round_x\"] - previousStanding[\"round_y\"] == 1.0)\n", "\n", "previousStanding = previousStanding[isPreviousRound]\n", "\n", "previousStanding[\"win\"] = previousStanding[\"wins_x\"] - previousStanding[\"wins_y\"]\n", "\n", "driverStandingsPd = driverStandingsPd.merge(\n", " previousStanding[[\"raceId\", \"driverId\", \"win\"]],\n", " on=[\"raceId\", \"driverId\"],\n", " how=\"left\",\n", ")\n", "\n", "driverStandingsPd[\"win\"] = [win if win == win else wins for win, wins in zip(driverStandingsPd[\"win\"], driverStandingsPd[\"wins\"])]\n", "\n", "driver_standings = getml.data.DataFrame.from_pandas(driverStandingsPd, \"driver_standings\")\n", "\n", "driver_standings" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We also need to include the date of the race to `lapTimes` and `pitStops`, because we cannot use this data for the race we would like to predict. We can only take lap times and pit stops from previous races." ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [ { "data": { "text/html": [ "\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
name raceId driverId lap positionmilliseconds yeartime date
roleunused_floatunused_floatunused_floatunused_floatunused_floatunused_floatunused_stringunused_string
0\n", " 1 \n", " \n", " 1 \n", " \n", " 1 \n", " \n", " 13 \n", " \n", " 109088 \n", " \n", " 2009 \n", " 1:49.0882009-03-29
1\n", " 1 \n", " \n", " 1 \n", " \n", " 2 \n", " \n", " 12 \n", " \n", " 93740 \n", " \n", " 2009 \n", " 1:33.7402009-03-29
2\n", " 1 \n", " \n", " 1 \n", " \n", " 3 \n", " \n", " 11 \n", " \n", " 91600 \n", " \n", " 2009 \n", " 1:31.6002009-03-29
3\n", " 1 \n", " \n", " 1 \n", " \n", " 4 \n", " \n", " 10 \n", " \n", " 91067 \n", " \n", " 2009 \n", " 1:31.0672009-03-29
4\n", " 1 \n", " \n", " 1 \n", " \n", " 5 \n", " \n", " 10 \n", " \n", " 92129 \n", " \n", " 2009 \n", " 1:32.1292009-03-29
\n", " ... \n", " \n", " ... \n", " \n", " ... \n", " \n", " ... \n", " \n", " ... \n", " \n", " ... \n", " ......
420364\n", " 982 \n", " \n", " 840 \n", " \n", " 54 \n", " \n", " 8 \n", " \n", " 107528 \n", " \n", " 2017 \n", " 1:47.5282017-09-17
420365\n", " 982 \n", " \n", " 840 \n", " \n", " 55 \n", " \n", " 8 \n", " \n", " 107512 \n", " \n", " 2017 \n", " 1:47.5122017-09-17
420366\n", " 982 \n", " \n", " 840 \n", " \n", " 56 \n", " \n", " 8 \n", " \n", " 108143 \n", " \n", " 2017 \n", " 1:48.1432017-09-17
420367\n", " 982 \n", " \n", " 840 \n", " \n", " 57 \n", " \n", " 8 \n", " \n", " 107848 \n", " \n", " 2017 \n", " 1:47.8482017-09-17
420368\n", " 982 \n", " \n", " 840 \n", " \n", " 58 \n", " \n", " 8 \n", " \n", " 108699 \n", " \n", " 2017 \n", " 1:48.6992017-09-17
\n", "\n", "

\n", " 420369 rows x 8 columns
\n", " memory usage: 35.31 MB
\n", " name: lap_times
\n", " type: getml.DataFrame
\n", " url: http://localhost:1709/#/getdataframe/formula1/lap_times/\n", "

\n" ], "text/plain": [ " name raceId driverId lap position milliseconds year time \n", " role unused_float unused_float unused_float unused_float unused_float unused_float unused_string\n", " 0 1 1 1 13 109088 2009 1:49.088 \n", " 1 1 1 2 12 93740 2009 1:33.740 \n", " 2 1 1 3 11 91600 2009 1:31.600 \n", " 3 1 1 4 10 91067 2009 1:31.067 \n", " 4 1 1 5 10 92129 2009 1:32.129 \n", " ... ... ... ... ... ... ... \n", "420364 982 840 54 8 107528 2017 1:47.528 \n", "420365 982 840 55 8 107512 2017 1:47.512 \n", "420366 982 840 56 8 108143 2017 1:48.143 \n", "420367 982 840 57 8 107848 2017 1:47.848 \n", "420368 982 840 58 8 108699 2017 1:48.699 \n", "\n", " name date \n", " role unused_string\n", " 0 2009-03-29 \n", " 1 2009-03-29 \n", " 2 2009-03-29 \n", " 3 2009-03-29 \n", " 4 2009-03-29 \n", " ... \n", "420364 2017-09-17 \n", "420365 2017-09-17 \n", "420366 2017-09-17 \n", "420367 2017-09-17 \n", "420368 2017-09-17 \n", "\n", "\n", "420369 rows x 8 columns\n", "memory usage: 35.31 MB\n", "name: lap_times\n", "type: getml.DataFrame\n", "url: http://localhost:1709/#/getdataframe/formula1/lap_times/" ] }, "execution_count": 13, "metadata": {}, "output_type": "execute_result" } ], "source": [ "lapTimesPd = lapTimes.to_pandas()\n", "\n", "lapTimesPd = lapTimesPd.merge(\n", " racesPd[[\"raceId\", \"date\", \"year\"]],\n", " on=\"raceId\"\n", ")\n", "\n", "lap_times = getml.data.DataFrame.from_pandas(lapTimesPd, \"lap_times\")\n", "\n", "lap_times" ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [ { "data": { "text/html": [ "\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
name raceId driverId stop lapmilliseconds yeartime duration date
roleunused_floatunused_floatunused_floatunused_floatunused_floatunused_floatunused_stringunused_stringunused_string
0\n", " 841 \n", " \n", " 1 \n", " \n", " 1 \n", " \n", " 16 \n", " \n", " 23227 \n", " \n", " 2011 \n", " 17:28:2423.2272011-03-27
1\n", " 841 \n", " \n", " 1 \n", " \n", " 2 \n", " \n", " 36 \n", " \n", " 23199 \n", " \n", " 2011 \n", " 17:59:2923.1992011-03-27
2\n", " 841 \n", " \n", " 2 \n", " \n", " 1 \n", " \n", " 15 \n", " \n", " 22994 \n", " \n", " 2011 \n", " 17:27:4122.9942011-03-27
3\n", " 841 \n", " \n", " 2 \n", " \n", " 2 \n", " \n", " 30 \n", " \n", " 25098 \n", " \n", " 2011 \n", " 17:51:3225.0982011-03-27
4\n", " 841 \n", " \n", " 3 \n", " \n", " 1 \n", " \n", " 16 \n", " \n", " 23716 \n", " \n", " 2011 \n", " 17:29:0023.7162011-03-27
\n", " ... \n", " \n", " ... \n", " \n", " ... \n", " \n", " ... \n", " \n", " ... \n", " \n", " ... \n", " .........
6065\n", " 982 \n", " \n", " 839 \n", " \n", " 6 \n", " \n", " 38 \n", " \n", " 29134 \n", " \n", " 2017 \n", " 21:29:0729.1342017-09-17
6066\n", " 982 \n", " \n", " 840 \n", " \n", " 1 \n", " \n", " 1 \n", " \n", " 37403 \n", " \n", " 2017 \n", " 20:06:4337.4032017-09-17
6067\n", " 982 \n", " \n", " 840 \n", " \n", " 2 \n", " \n", " 2 \n", " \n", " 29294 \n", " \n", " 2017 \n", " 20:10:0729.2942017-09-17
6068\n", " 982 \n", " \n", " 840 \n", " \n", " 3 \n", " \n", " 3 \n", " \n", " 25584 \n", " \n", " 2017 \n", " 20:13:1625.5842017-09-17
6069\n", " 982 \n", " \n", " 840 \n", " \n", " 4 \n", " \n", " 26 \n", " \n", " 29412 \n", " \n", " 2017 \n", " 21:05:0729.4122017-09-17
\n", "\n", "

\n", " 6070 rows x 9 columns
\n", " memory usage: 0.60 MB
\n", " name: pit_stops
\n", " type: getml.DataFrame
\n", " url: http://localhost:1709/#/getdataframe/formula1/pit_stops/\n", "

\n" ], "text/plain": [ "name raceId driverId stop lap milliseconds year time duration \n", "role unused_float unused_float unused_float unused_float unused_float unused_float unused_string unused_string\n", " 0 841 1 1 16 23227 2011 17:28:24 23.227 \n", " 1 841 1 2 36 23199 2011 17:59:29 23.199 \n", " 2 841 2 1 15 22994 2011 17:27:41 22.994 \n", " 3 841 2 2 30 25098 2011 17:51:32 25.098 \n", " 4 841 3 1 16 23716 2011 17:29:00 23.716 \n", " ... ... ... ... ... ... ... ... \n", "6065 982 839 6 38 29134 2017 21:29:07 29.134 \n", "6066 982 840 1 1 37403 2017 20:06:43 37.403 \n", "6067 982 840 2 2 29294 2017 20:10:07 29.294 \n", "6068 982 840 3 3 25584 2017 20:13:16 25.584 \n", "6069 982 840 4 26 29412 2017 21:05:07 29.412 \n", "\n", "name date \n", "role unused_string\n", " 0 2011-03-27 \n", " 1 2011-03-27 \n", " 2 2011-03-27 \n", " 3 2011-03-27 \n", " 4 2011-03-27 \n", " ... \n", "6065 2017-09-17 \n", "6066 2017-09-17 \n", "6067 2017-09-17 \n", "6068 2017-09-17 \n", "6069 2017-09-17 \n", "\n", "\n", "6070 rows x 9 columns\n", "memory usage: 0.60 MB\n", "name: pit_stops\n", "type: getml.DataFrame\n", "url: http://localhost:1709/#/getdataframe/formula1/pit_stops/" ] }, "execution_count": 14, "metadata": {}, "output_type": "execute_result" } ], "source": [ "pitStopsPd = pitStops.to_pandas()\n", "\n", "pitStopsPd = pitStopsPd.merge(\n", " racesPd[[\"raceId\", \"date\", \"year\"]],\n", " on=\"raceId\"\n", ")\n", "\n", "pit_stops = getml.data.DataFrame.from_pandas(pitStopsPd, \"pit_stops\")\n", "\n", "pit_stops" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "getML requires that we define *roles* for each of the columns." ] }, { "cell_type": "code", "execution_count": 15, "metadata": {}, "outputs": [ { "data": { "text/html": [ "\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
name date raceIddriverId year win positiondriverStandingsId points wins roundpositionText
role time_stampjoin_keyjoin_keyjoin_keytargetnumerical unused_floatunused_floatunused_floatunused_floatunused_string
unittime stamp, comparison only
02008-03-161812008\n", " 1 \n", " \n", " 1 \n", " \n", " 1 \n", " \n", " 10 \n", " \n", " 1 \n", " \n", " 1 \n", " 1
12008-03-161822008\n", " 0 \n", " \n", " 2 \n", " \n", " 2 \n", " \n", " 8 \n", " \n", " 0 \n", " \n", " 1 \n", " 2
22008-03-161832008\n", " 0 \n", " \n", " 3 \n", " \n", " 3 \n", " \n", " 6 \n", " \n", " 0 \n", " \n", " 1 \n", " 3
32008-03-161842008\n", " 0 \n", " \n", " 4 \n", " \n", " 4 \n", " \n", " 5 \n", " \n", " 0 \n", " \n", " 1 \n", " 4
42008-03-161852008\n", " 0 \n", " \n", " 5 \n", " \n", " 5 \n", " \n", " 4 \n", " \n", " 0 \n", " \n", " 1 \n", " 5
............\n", " ... \n", " \n", " ... \n", " \n", " ... \n", " \n", " ... \n", " \n", " ... \n", " \n", " ... \n", " ...
315732017-09-179828352017\n", " 0 \n", " \n", " 16 \n", " \n", " 68456 \n", " \n", " 8 \n", " \n", " 0 \n", " \n", " 14 \n", " 16
315742017-09-179821542017\n", " 0 \n", " \n", " 13 \n", " \n", " 68457 \n", " \n", " 26 \n", " \n", " 0 \n", " \n", " 14 \n", " 13
315752017-09-179828362017\n", " 0 \n", " \n", " 18 \n", " \n", " 68458 \n", " \n", " 5 \n", " \n", " 0 \n", " \n", " 14 \n", " 18
315762017-09-17982182017\n", " 0 \n", " \n", " 22 \n", " \n", " 68459 \n", " \n", " 0 \n", " \n", " 0 \n", " \n", " 14 \n", " 22
315772017-09-179828142017\n", " 0 \n", " \n", " 23 \n", " \n", " 68460 \n", " \n", " 0 \n", " \n", " 0 \n", " \n", " 14 \n", " 23
\n", "\n", "

\n", " 31578 rows x 11 columns
\n", " memory usage: 2.49 MB
\n", " name: driver_standings
\n", " type: getml.DataFrame
\n", " url: http://localhost:1709/#/getdataframe/formula1/driver_standings/\n", "

\n" ], "text/plain": [ " name date raceId driverId year ... driverStandingsId points wins\n", " role time_stamp join_key join_key join_key ... unused_float unused_float unused_float\n", " unit time stamp, comparison only ... \n", " 0 2008-03-16 18 1 2008 ... 1 10 1\n", " 1 2008-03-16 18 2 2008 ... 2 8 0\n", " 2 2008-03-16 18 3 2008 ... 3 6 0\n", " 3 2008-03-16 18 4 2008 ... 4 5 0\n", " 4 2008-03-16 18 5 2008 ... 5 4 0\n", " ... ... ... ... ... ... ...\n", "31573 2017-09-17 982 835 2017 ... 68456 8 0\n", "31574 2017-09-17 982 154 2017 ... 68457 26 0\n", "31575 2017-09-17 982 836 2017 ... 68458 5 0\n", "31576 2017-09-17 982 18 2017 ... 68459 0 0\n", "31577 2017-09-17 982 814 2017 ... 68460 0 0\n", "\n", " name round positionText \n", " role unused_float unused_string\n", " unit \n", " 0 1 1 \n", " 1 1 2 \n", " 2 1 3 \n", " 3 1 4 \n", " 4 1 5 \n", " ... ... \n", "31573 14 16 \n", "31574 14 13 \n", "31575 14 18 \n", "31576 14 22 \n", "31577 14 23 \n", "\n", "\n", "31578 rows x 11 columns\n", "memory usage: 2.49 MB\n", "name: driver_standings\n", "type: getml.DataFrame\n", "url: http://localhost:1709/#/getdataframe/formula1/driver_standings/" ] }, "execution_count": 15, "metadata": {}, "output_type": "execute_result" } ], "source": [ "driver_standings.set_role(\"win\", getml.data.roles.target)\n", "driver_standings.set_role([\"raceId\", \"driverId\", \"year\"], getml.data.roles.join_key)\n", "driver_standings.set_role(\"position\", getml.data.roles.numerical)\n", "driver_standings.set_role(\"date\", getml.data.roles.time_stamp)\n", "\n", "driver_standings" ] }, { "cell_type": "code", "execution_count": 16, "metadata": {}, "outputs": [ { "data": { "text/html": [ "\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
namedriverIdnationalitydriverRef numbercode forename surname dob url
rolejoin_keycategoricalcategoricalunused_floatunused_stringunused_stringunused_stringunused_stringunused_string
01Britishhamilton\n", " 44 \n", " HAMLewisHamilton1985-01-07http://en.wikipedia.org/wiki/Lew...
12Germanheidfeld\n", " nan \n", " HEINickHeidfeld1977-05-10http://en.wikipedia.org/wiki/Nic...
23Germanrosberg\n", " 6 \n", " ROSNicoRosberg1985-06-27http://en.wikipedia.org/wiki/Nic...
34Spanishalonso\n", " 14 \n", " ALOFernandoAlonso1981-07-29http://en.wikipedia.org/wiki/Fer...
45Finnishkovalainen\n", " nan \n", " KOVHeikkiKovalainen1981-10-19http://en.wikipedia.org/wiki/Hei...
.........\n", " ... \n", " ...............
835837Indonesianharyanto\n", " 88 \n", " HARRioHaryanto1993-01-22http://en.wikipedia.org/wiki/Rio...
836838Belgianvandoorne\n", " 2 \n", " VANStoffelVandoorne1992-03-26http://en.wikipedia.org/wiki/Sto...
837839Frenchocon\n", " 31 \n", " OCOEstebanOcon1996-09-17http://en.wikipedia.org/wiki/Est...
838840Canadianstroll\n", " 18 \n", " STRLanceStroll1998-10-29http://en.wikipedia.org/wiki/Lan...
839841Italiangiovinazzi\n", " 36 \n", " GIOAntonioGiovinazzi1993-12-14http://en.wikipedia.org/wiki/Ant...
\n", "\n", "

\n", " 840 rows x 9 columns
\n", " memory usage: 0.11 MB
\n", " name: drivers
\n", " type: getml.DataFrame
\n", " url: http://localhost:1709/#/getdataframe/formula1/drivers/\n", "

\n" ], "text/plain": [ "name driverId nationality driverRef number code forename surname dob \n", "role join_key categorical categorical unused_float unused_string unused_string unused_string unused_string\n", " 0 1 British hamilton 44 HAM Lewis Hamilton 1985-01-07 \n", " 1 2 German heidfeld nan HEI Nick Heidfeld 1977-05-10 \n", " 2 3 German rosberg 6 ROS Nico Rosberg 1985-06-27 \n", " 3 4 Spanish alonso 14 ALO Fernando Alonso 1981-07-29 \n", " 4 5 Finnish kovalainen nan KOV Heikki Kovalainen 1981-10-19 \n", " ... ... ... ... ... ... ... ... \n", " 835 837 Indonesian haryanto 88 HAR Rio Haryanto 1993-01-22 \n", " 836 838 Belgian vandoorne 2 VAN Stoffel Vandoorne 1992-03-26 \n", " 837 839 French ocon 31 OCO Esteban Ocon 1996-09-17 \n", " 838 840 Canadian stroll 18 STR Lance Stroll 1998-10-29 \n", " 839 841 Italian giovinazzi 36 GIO Antonio Giovinazzi 1993-12-14 \n", "\n", "name url \n", "role unused_string \n", " 0 http://en.wikipedia.org/wiki/Lew...\n", " 1 http://en.wikipedia.org/wiki/Nic...\n", " 2 http://en.wikipedia.org/wiki/Nic...\n", " 3 http://en.wikipedia.org/wiki/Fer...\n", " 4 http://en.wikipedia.org/wiki/Hei...\n", " ... \n", " 835 http://en.wikipedia.org/wiki/Rio...\n", " 836 http://en.wikipedia.org/wiki/Sto...\n", " 837 http://en.wikipedia.org/wiki/Est...\n", " 838 http://en.wikipedia.org/wiki/Lan...\n", " 839 http://en.wikipedia.org/wiki/Ant...\n", "\n", "\n", "840 rows x 9 columns\n", "memory usage: 0.11 MB\n", "name: drivers\n", "type: getml.DataFrame\n", "url: http://localhost:1709/#/getdataframe/formula1/drivers/" ] }, "execution_count": 16, "metadata": {}, "output_type": "execute_result" } ], "source": [ "drivers.set_role(\"driverId\", getml.data.roles.join_key)\n", "drivers.set_role([\"nationality\", \"driverRef\"], getml.data.roles.categorical)\n", "\n", "drivers" ] }, { "cell_type": "code", "execution_count": 17, "metadata": {}, "outputs": [ { "data": { "text/html": [ "\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
name date raceIddriverId year lapmilliseconds positiontime
role time_stampjoin_keyjoin_keyjoin_keynumerical numericalnumericalunused_string
unittime stamp, comparison only
02009-03-29112009\n", " 1 \n", " \n", " 109088 \n", " \n", " 13 \n", " 1:49.088
12009-03-29112009\n", " 2 \n", " \n", " 93740 \n", " \n", " 12 \n", " 1:33.740
22009-03-29112009\n", " 3 \n", " \n", " 91600 \n", " \n", " 11 \n", " 1:31.600
32009-03-29112009\n", " 4 \n", " \n", " 91067 \n", " \n", " 10 \n", " 1:31.067
42009-03-29112009\n", " 5 \n", " \n", " 92129 \n", " \n", " 10 \n", " 1:32.129
............\n", " ... \n", " \n", " ... \n", " \n", " ... \n", " ...
4203642017-09-179828402017\n", " 54 \n", " \n", " 107528 \n", " \n", " 8 \n", " 1:47.528
4203652017-09-179828402017\n", " 55 \n", " \n", " 107512 \n", " \n", " 8 \n", " 1:47.512
4203662017-09-179828402017\n", " 56 \n", " \n", " 108143 \n", " \n", " 8 \n", " 1:48.143
4203672017-09-179828402017\n", " 57 \n", " \n", " 107848 \n", " \n", " 8 \n", " 1:47.848
4203682017-09-179828402017\n", " 58 \n", " \n", " 108699 \n", " \n", " 8 \n", " 1:48.699
\n", "\n", "

\n", " 420369 rows x 8 columns
\n", " memory usage: 25.64 MB
\n", " name: lap_times
\n", " type: getml.DataFrame
\n", " url: http://localhost:1709/#/getdataframe/formula1/lap_times/\n", "

\n" ], "text/plain": [ " name date raceId driverId year lap milliseconds position time \n", " role time_stamp join_key join_key join_key numerical numerical numerical unused_string\n", " unit time stamp, comparison only \n", " 0 2009-03-29 1 1 2009 1 109088 13 1:49.088 \n", " 1 2009-03-29 1 1 2009 2 93740 12 1:33.740 \n", " 2 2009-03-29 1 1 2009 3 91600 11 1:31.600 \n", " 3 2009-03-29 1 1 2009 4 91067 10 1:31.067 \n", " 4 2009-03-29 1 1 2009 5 92129 10 1:32.129 \n", " ... ... ... ... ... ... ... ... \n", "420364 2017-09-17 982 840 2017 54 107528 8 1:47.528 \n", "420365 2017-09-17 982 840 2017 55 107512 8 1:47.512 \n", "420366 2017-09-17 982 840 2017 56 108143 8 1:48.143 \n", "420367 2017-09-17 982 840 2017 57 107848 8 1:47.848 \n", "420368 2017-09-17 982 840 2017 58 108699 8 1:48.699 \n", "\n", "\n", "420369 rows x 8 columns\n", "memory usage: 25.64 MB\n", "name: lap_times\n", "type: getml.DataFrame\n", "url: http://localhost:1709/#/getdataframe/formula1/lap_times/" ] }, "execution_count": 17, "metadata": {}, "output_type": "execute_result" } ], "source": [ "lap_times.set_role([\"raceId\", \"driverId\", \"year\"], getml.data.roles.join_key)\n", "lap_times.set_role([\"lap\", \"milliseconds\", \"position\"], getml.data.roles.numerical)\n", "lap_times.set_role(\"date\", getml.data.roles.time_stamp)\n", "\n", "lap_times" ] }, { "cell_type": "code", "execution_count": 18, "metadata": {}, "outputs": [ { "data": { "text/html": [ "\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
name date raceIddriverId year lapmilliseconds stoptime duration
role time_stampjoin_keyjoin_keyjoin_keynumerical numericalnumericalunused_stringunused_string
unittime stamp, comparison only
02011-03-2784112011\n", " 16 \n", " \n", " 23227 \n", " \n", " 1 \n", " 17:28:2423.227
12011-03-2784112011\n", " 36 \n", " \n", " 23199 \n", " \n", " 2 \n", " 17:59:2923.199
22011-03-2784122011\n", " 15 \n", " \n", " 22994 \n", " \n", " 1 \n", " 17:27:4122.994
32011-03-2784122011\n", " 30 \n", " \n", " 25098 \n", " \n", " 2 \n", " 17:51:3225.098
42011-03-2784132011\n", " 16 \n", " \n", " 23716 \n", " \n", " 1 \n", " 17:29:0023.716
............\n", " ... \n", " \n", " ... \n", " \n", " ... \n", " ......
60652017-09-179828392017\n", " 38 \n", " \n", " 29134 \n", " \n", " 6 \n", " 21:29:0729.134
60662017-09-179828402017\n", " 1 \n", " \n", " 37403 \n", " \n", " 1 \n", " 20:06:4337.403
60672017-09-179828402017\n", " 2 \n", " \n", " 29294 \n", " \n", " 2 \n", " 20:10:0729.294
60682017-09-179828402017\n", " 3 \n", " \n", " 25584 \n", " \n", " 3 \n", " 20:13:1625.584
60692017-09-179828402017\n", " 26 \n", " \n", " 29412 \n", " \n", " 4 \n", " 21:05:0729.412
\n", "\n", "

\n", " 6070 rows x 9 columns
\n", " memory usage: 0.46 MB
\n", " name: pit_stops
\n", " type: getml.DataFrame
\n", " url: http://localhost:1709/#/getdataframe/formula1/pit_stops/\n", "

\n" ], "text/plain": [ "name date raceId driverId year lap milliseconds stop time \n", "role time_stamp join_key join_key join_key numerical numerical numerical unused_string\n", "unit time stamp, comparison only \n", " 0 2011-03-27 841 1 2011 16 23227 1 17:28:24 \n", " 1 2011-03-27 841 1 2011 36 23199 2 17:59:29 \n", " 2 2011-03-27 841 2 2011 15 22994 1 17:27:41 \n", " 3 2011-03-27 841 2 2011 30 25098 2 17:51:32 \n", " 4 2011-03-27 841 3 2011 16 23716 1 17:29:00 \n", " ... ... ... ... ... ... ... ... \n", "6065 2017-09-17 982 839 2017 38 29134 6 21:29:07 \n", "6066 2017-09-17 982 840 2017 1 37403 1 20:06:43 \n", "6067 2017-09-17 982 840 2017 2 29294 2 20:10:07 \n", "6068 2017-09-17 982 840 2017 3 25584 3 20:13:16 \n", "6069 2017-09-17 982 840 2017 26 29412 4 21:05:07 \n", "\n", "name duration \n", "role unused_string\n", "unit \n", " 0 23.227 \n", " 1 23.199 \n", " 2 22.994 \n", " 3 25.098 \n", " 4 23.716 \n", " ... \n", "6065 29.134 \n", "6066 37.403 \n", "6067 29.294 \n", "6068 25.584 \n", "6069 29.412 \n", "\n", "\n", "6070 rows x 9 columns\n", "memory usage: 0.46 MB\n", "name: pit_stops\n", "type: getml.DataFrame\n", "url: http://localhost:1709/#/getdataframe/formula1/pit_stops/" ] }, "execution_count": 18, "metadata": {}, "output_type": "execute_result" } ], "source": [ "pit_stops.set_role([\"raceId\", \"driverId\", \"year\"], getml.data.roles.join_key)\n", "pit_stops.set_role([\"lap\", \"milliseconds\", \"stop\"], getml.data.roles.numerical)\n", "pit_stops.set_role(\"date\", getml.data.roles.time_stamp)\n", "\n", "pit_stops" ] }, { "cell_type": "code", "execution_count": 19, "metadata": {}, "outputs": [ { "data": { "text/html": [ "\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
name raceIddriverIdqualifyId position numberconstructorIdq1 q2 q3
rolejoin_keyjoin_key join_keynumericalnumerical unused_floatunused_stringunused_stringunused_string
01811\n", " 1 \n", " \n", " 22 \n", " \n", " 1 \n", " 1:26.5721:25.1871:26.714
11892\n", " 2 \n", " \n", " 4 \n", " \n", " 2 \n", " 1:26.1031:25.3151:26.869
21853\n", " 3 \n", " \n", " 23 \n", " \n", " 1 \n", " 1:25.6641:25.4521:27.079
318134\n", " 4 \n", " \n", " 2 \n", " \n", " 6 \n", " 1:25.9941:25.6911:27.178
41825\n", " 5 \n", " \n", " 3 \n", " \n", " 2 \n", " 1:25.9601:25.5181:27.236
.........\n", " ... \n", " \n", " ... \n", " \n", " ... \n", " .........
73929828257415\n", " 16 \n", " \n", " 20 \n", " \n", " 210 \n", " 1:43.756NULLNULL
7393982137416\n", " 17 \n", " \n", " 19 \n", " \n", " 3 \n", " 1:44.014NULLNULL
73949828407417\n", " 18 \n", " \n", " 18 \n", " \n", " 3 \n", " 1:44.728NULLNULL
73959828367418\n", " 19 \n", " \n", " 94 \n", " \n", " 15 \n", " 1:45.059NULLNULL
73969828287419\n", " 20 \n", " \n", " 9 \n", " \n", " 15 \n", " 1:45.570NULLNULL
\n", "\n", "

\n", " 7397 rows x 9 columns
\n", " memory usage: 0.61 MB
\n", " name: qualifying
\n", " type: getml.DataFrame
\n", " url: http://localhost:1709/#/getdataframe/formula1/qualifying/\n", "

\n" ], "text/plain": [ "name raceId driverId qualifyId position number constructorId q1 q2 q3 \n", "role join_key join_key join_key numerical numerical unused_float unused_string unused_string unused_string\n", " 0 18 1 1 1 22 1 1:26.572 1:25.187 1:26.714 \n", " 1 18 9 2 2 4 2 1:26.103 1:25.315 1:26.869 \n", " 2 18 5 3 3 23 1 1:25.664 1:25.452 1:27.079 \n", " 3 18 13 4 4 2 6 1:25.994 1:25.691 1:27.178 \n", " 4 18 2 5 5 3 2 1:25.960 1:25.518 1:27.236 \n", " ... ... ... ... ... ... ... ... ... \n", "7392 982 825 7415 16 20 210 1:43.756 NULL NULL \n", "7393 982 13 7416 17 19 3 1:44.014 NULL NULL \n", "7394 982 840 7417 18 18 3 1:44.728 NULL NULL \n", "7395 982 836 7418 19 94 15 1:45.059 NULL NULL \n", "7396 982 828 7419 20 9 15 1:45.570 NULL NULL \n", "\n", "\n", "7397 rows x 9 columns\n", "memory usage: 0.61 MB\n", "name: qualifying\n", "type: getml.DataFrame\n", "url: http://localhost:1709/#/getdataframe/formula1/qualifying/" ] }, "execution_count": 19, "metadata": {}, "output_type": "execute_result" } ], "source": [ "qualifying.set_role([\"raceId\", \"driverId\", \"qualifyId\"], getml.data.roles.join_key)\n", "qualifying.set_role([\"position\", \"number\"], getml.data.roles.numerical)\n", "\n", "qualifying" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 2. Predictive modeling\n", "\n", "We loaded the data and defined the roles and units. Next, we create a getML pipeline for relational learning." ] }, { "cell_type": "code", "execution_count": 20, "metadata": {}, "outputs": [ { "data": { "text/html": [ "\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
0train
1train
2train
3test
4train
...
\n", "\n", "

\n", " infinite number of rows
\n", " \n", " type: StringColumnView
\n", " \n", "

\n" ], "text/plain": [ " \n", " 0 train\n", " 1 train\n", " 2 train\n", " 3 test \n", " 4 train\n", " ... \n", "\n", "\n", "infinite number of rows\n", "type: StringColumnView" ] }, "execution_count": 20, "metadata": {}, "output_type": "execute_result" } ], "source": [ "split = getml.data.split.random(train=0.8, test=0.2)\n", "split" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 2.1 Define relational model" ] }, { "cell_type": "code", "execution_count": 21, "metadata": {}, "outputs": [ { "data": { "text/html": [ "

data model

\n", "

diagram


driver_standingslap_timespit_stopsqualifyingdriverspopulationdriverId = driverIddate <= dateHorizon: 1.0 daysLagged targets alloweddriverId = driverIddate <= dateHorizon: 1.0 daysdriverId = driverIddate <= dateHorizon: 1.0 daysdriverId = driverIdraceId = raceIdRelationship: many-to-onedriverId = driverIdRelationship: many-to-one


staging

\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
data frames staging table
0population, qualifying, driversPOPULATION__STAGING_TABLE_1
1driver_standingsDRIVER_STANDINGS__STAGING_TABLE_2
2lap_timesLAP_TIMES__STAGING_TABLE_3
3pit_stopsPIT_STOPS__STAGING_TABLE_4
\n", "

container

\n", "
\n", "

population

\n", " \n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
subsetname rowstype
0testdriver_standings6229View
1traindriver_standings25349View
\n", "
\n", "
\n", "

peripheral

\n", " \n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
name rowstype
0driver_standings31578DataFrame
1lap_times420369DataFrame
2pit_stops6070DataFrame
3qualifying7397DataFrame
4drivers840DataFrame
\n", "
" ], "text/plain": [ "data model\n", "\n", " population:\n", " columns:\n", " - raceId: join_key\n", " - driverId: join_key\n", " - year: join_key\n", " - win: target\n", " - date: time_stamp\n", " - ...\n", "\n", " joins:\n", " - right: 'driver_standings'\n", " on: \n", " - (population.driverId, driver_standings.driverId)\n", " time_stamps: (population.date, driver_standings.date)\n", " relationship: 'many-to-many'\n", " horizon: 86400.0\n", " lagged_targets: True\n", " - right: 'lap_times'\n", " on: \n", " - (population.driverId, lap_times.driverId)\n", " time_stamps: (population.date, lap_times.date)\n", " relationship: 'many-to-many'\n", " horizon: 86400.0\n", " lagged_targets: False\n", " - right: 'pit_stops'\n", " on: \n", " - (population.driverId, pit_stops.driverId)\n", " time_stamps: (population.date, pit_stops.date)\n", " relationship: 'many-to-many'\n", " horizon: 86400.0\n", " lagged_targets: False\n", " - right: 'qualifying'\n", " on: \n", " - (population.driverId, qualifying.driverId)\n", " - (population.raceId, qualifying.raceId)\n", " relationship: 'many-to-one'\n", " lagged_targets: False\n", " - right: 'drivers'\n", " on: \n", " - (population.driverId, drivers.driverId)\n", " relationship: 'many-to-one'\n", " lagged_targets: False\n", "\n", " driver_standings:\n", " columns:\n", " - raceId: join_key\n", " - driverId: join_key\n", " - year: join_key\n", " - position: numerical\n", " - win: target\n", " - ...\n", "\n", " lap_times:\n", " columns:\n", " - raceId: join_key\n", " - driverId: join_key\n", " - year: join_key\n", " - lap: numerical\n", " - milliseconds: numerical\n", " - ...\n", "\n", " pit_stops:\n", " columns:\n", " - raceId: join_key\n", " - driverId: join_key\n", " - year: join_key\n", " - lap: numerical\n", " - milliseconds: numerical\n", " - ...\n", "\n", " qualifying:\n", " columns:\n", " - raceId: join_key\n", " - driverId: join_key\n", " - qualifyId: join_key\n", " - position: numerical\n", " - number: numerical\n", " - ...\n", "\n", " drivers:\n", " columns:\n", " - nationality: categorical\n", " - driverRef: categorical\n", " - driverId: join_key\n", " - number: unused_float\n", " - code: unused_string\n", " - ...\n", "\n", "\n", "container\n", "\n", " population\n", " subset name rows type\n", " 0 test driver_standings 6229 View\n", " 1 train driver_standings 25349 View\n", "\n", " peripheral\n", " name rows type \n", " 0 driver_standings 31578 DataFrame\n", " 1 lap_times 420369 DataFrame\n", " 2 pit_stops 6070 DataFrame\n", " 3 qualifying 7397 DataFrame\n", " 4 drivers 840 DataFrame" ] }, "execution_count": 21, "metadata": {}, "output_type": "execute_result" } ], "source": [ "star_schema = getml.data.StarSchema(population=driver_standings.drop([\"position\"]), alias=\"population\", split=split)\n", "\n", "star_schema.join(\n", " driver_standings,\n", " on=[\"driverId\"],\n", " time_stamps=\"date\",\n", " horizon=getml.data.time.days(1),\n", " lagged_targets=True,\n", ")\n", "\n", "# We cannot use lap times for the race\n", "# we would like to predict, so we set\n", "# a non-zero horizon.\n", "star_schema.join(\n", " lap_times,\n", " on=[\"driverId\"],\n", " time_stamps=\"date\",\n", " horizon=getml.data.time.days(1),\n", ")\n", "\n", "# We cannot use pit stops for the race\n", "# we would like to predict, so we set\n", "# a non-zero horizon.\n", "star_schema.join(\n", " pit_stops,\n", " on=[\"driverId\"],\n", " time_stamps=\"date\",\n", " horizon=getml.data.time.days(1),\n", ")\n", "\n", "star_schema.join(\n", " qualifying,\n", " on=[\"driverId\", \"raceId\"],\n", " relationship=getml.data.relationship.many_to_one,\n", ")\n", "\n", "star_schema.join(\n", " drivers,\n", " on=[\"driverId\"],\n", " relationship=getml.data.relationship.many_to_one,\n", ")\n", "\n", "star_schema" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ " " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 2.2 getML pipeline" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "__Set-up the feature learner & predictor__" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We use the relboost algorithms for this problem. Because of the large number of keywords, we regularize the model a bit by requiring a minimum support for the keywords (`min_num_samples`)." ] }, { "cell_type": "code", "execution_count": 22, "metadata": {}, "outputs": [], "source": [ "mapping = getml.preprocessors.Mapping()\n", "\n", "fast_prop = getml.feature_learning.FastProp(\n", " loss_function=getml.feature_learning.loss_functions.CrossEntropyLoss,\n", " aggregation=getml.feature_learning.FastProp.agg_sets.All,\n", " num_threads=1,\n", ")\n", "\n", "relboost = getml.feature_learning.Relboost(\n", " loss_function=getml.feature_learning.loss_functions.CrossEntropyLoss,\n", " num_threads=1,\n", ")\n", "\n", "relmt = getml.feature_learning.RelMT(\n", " loss_function=getml.feature_learning.loss_functions.CrossEntropyLoss,\n", " num_threads=1,\n", ")\n", "\n", "predictor = getml.predictors.XGBoostClassifier(n_jobs=1)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "__Build the pipeline__" ] }, { "cell_type": "code", "execution_count": 23, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
Pipeline(data_model='population',\n",
       "         feature_learners=['FastProp'],\n",
       "         feature_selectors=[],\n",
       "         include_categorical=True,\n",
       "         loss_function=None,\n",
       "         peripheral=['driver_standings', 'drivers', 'lap_times', 'pit_stops', 'qualifying'],\n",
       "         predictors=['XGBoostClassifier'],\n",
       "         preprocessors=['Mapping'],\n",
       "         share_selected_features=0.5,\n",
       "         tags=['fast_prop'])
" ], "text/plain": [ "Pipeline(data_model='population',\n", " feature_learners=['FastProp'],\n", " feature_selectors=[],\n", " include_categorical=True,\n", " loss_function=None,\n", " peripheral=['driver_standings', 'drivers', 'lap_times', 'pit_stops', 'qualifying'],\n", " predictors=['XGBoostClassifier'],\n", " preprocessors=['Mapping'],\n", " share_selected_features=0.5,\n", " tags=['fast_prop'])" ] }, "execution_count": 23, "metadata": {}, "output_type": "execute_result" } ], "source": [ "pipe1 = getml.pipeline.Pipeline(\n", " tags=['fast_prop'],\n", " data_model=star_schema.data_model,\n", " preprocessors=[mapping],\n", " feature_learners=[fast_prop],\n", " predictors=[predictor],\n", " include_categorical=True,\n", ")\n", "\n", "pipe1" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ " " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 2.3 Model training" ] }, { "cell_type": "code", "execution_count": 24, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Checking data model...\n", "\n", "\n", "Staging...\n", "[========================================] 100%\n", "\n", "Preprocessing...\n", "[========================================] 100%\n", "\n", "Checking...\n", "[========================================] 100%\n", "\n", "\n", "INFO [FOREIGN KEYS NOT FOUND]: When joining POPULATION__STAGING_TABLE_1 and LAP_TIMES__STAGING_TABLE_3 over 'driverId' and 'driverId', there are no corresponding entries for 68.551028% of entries in 'driverId' in 'POPULATION__STAGING_TABLE_1'. You might want to double-check your join keys.\n", "INFO [FOREIGN KEYS NOT FOUND]: When joining POPULATION__STAGING_TABLE_1 and PIT_STOPS__STAGING_TABLE_4 over 'driverId' and 'driverId', there are no corresponding entries for 82.527910% of entries in 'driverId' in 'POPULATION__STAGING_TABLE_1'. You might want to double-check your join keys.\n" ] } ], "source": [ "pipe1.check(star_schema.train)" ] }, { "cell_type": "code", "execution_count": 25, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Checking data model...\n", "\n", "\n", "Staging...\n", "[========================================] 100%\n", "\n", "\n", "INFO [FOREIGN KEYS NOT FOUND]: When joining POPULATION__STAGING_TABLE_1 and LAP_TIMES__STAGING_TABLE_3 over 'driverId' and 'driverId', there are no corresponding entries for 68.551028% of entries in 'driverId' in 'POPULATION__STAGING_TABLE_1'. You might want to double-check your join keys.\n", "INFO [FOREIGN KEYS NOT FOUND]: When joining POPULATION__STAGING_TABLE_1 and PIT_STOPS__STAGING_TABLE_4 over 'driverId' and 'driverId', there are no corresponding entries for 82.527910% of entries in 'driverId' in 'POPULATION__STAGING_TABLE_1'. You might want to double-check your join keys.\n", "\n", "\n", "Staging...\n", "[========================================] 100%\n", "\n", "Preprocessing...\n", "[========================================] 100%\n", "\n", "FastProp: Trying 867 features...\n", "[========================================] 100%\n", "\n", "FastProp: Building features...\n", "[========================================] 100%\n", "\n", "XGBoost: Training as predictor...\n", "[========================================] 100%\n", "\n", "\n", "Trained pipeline.\n", "Time taken: 0h:10m:31.904886\n", "\n" ] }, { "data": { "text/html": [ "
Pipeline(data_model='population',\n",
       "         feature_learners=['FastProp'],\n",
       "         feature_selectors=[],\n",
       "         include_categorical=True,\n",
       "         loss_function=None,\n",
       "         peripheral=['driver_standings', 'drivers', 'lap_times', 'pit_stops', 'qualifying'],\n",
       "         predictors=['XGBoostClassifier'],\n",
       "         preprocessors=['Mapping'],\n",
       "         share_selected_features=0.5,\n",
       "         tags=['fast_prop', 'container-iDDODO'])

url: http://localhost:1709/#/getpipeline/formula1/sSpaJ1/0/
" ], "text/plain": [ "Pipeline(data_model='population',\n", " feature_learners=['FastProp'],\n", " feature_selectors=[],\n", " include_categorical=True,\n", " loss_function=None,\n", " peripheral=['driver_standings', 'drivers', 'lap_times', 'pit_stops', 'qualifying'],\n", " predictors=['XGBoostClassifier'],\n", " preprocessors=['Mapping'],\n", " share_selected_features=0.5,\n", " tags=['fast_prop', 'container-iDDODO'])\n", "\n", "url: http://localhost:1709/#/getpipeline/formula1/sSpaJ1/0/" ] }, "execution_count": 25, "metadata": {}, "output_type": "execute_result" } ], "source": [ "pipe1.fit(star_schema.train)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ " " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 2.4 Model evaluation" ] }, { "cell_type": "code", "execution_count": 26, "metadata": { "lines_to_next_cell": 0 }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\n", "\n", "Staging...\n", "[========================================] 100%\n", "\n", "Preprocessing...\n", "[========================================] 100%\n", "\n", "FastProp: Building features...\n", "[========================================] 100%\n", "\n", "\n" ] }, { "data": { "text/html": [ "\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
date time set usedtargetaccuracy auccross entropy
02021-08-23 21:25:33trainwin0.97340.9570.07563
12021-08-23 21:26:01testwin0.97270.92420.08486
" ], "text/plain": [ " date time set used target accuracy auc cross entropy\n", "0 2021-08-23 21:25:33 train win 0.9734 0.957 0.07563\n", "1 2021-08-23 21:26:01 test win 0.9727 0.9242 0.08486" ] }, "execution_count": 26, "metadata": {}, "output_type": "execute_result" } ], "source": [ "pipe1.score(star_schema.test)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ " " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 2.5 featuretools" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "featuretools requires some additional data preparation before we can start engineering features." ] }, { "cell_type": "code", "execution_count": 27, "metadata": {}, "outputs": [], "source": [ "population_train_pd = star_schema.train.population.drop([\"position\"]).to_pandas()\n", "population_test_pd = star_schema.test.population.drop([\"position\"]).to_pandas()" ] }, { "cell_type": "code", "execution_count": 28, "metadata": {}, "outputs": [], "source": [ "driver_standings_pd = driver_standings.drop(driver_standings.roles.unused).to_pandas()\n", "lap_times_pd = lap_times.drop(lap_times.roles.unused).to_pandas()\n", "pit_stops_pd = pit_stops.drop(pit_stops.roles.unused).to_pandas()\n", "qualifying_pd = qualifying.drop(qualifying.roles.unused).to_pandas()\n", "drivers_pd = drivers.drop(drivers.roles.unused).to_pandas()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Because `qualifying` and `drivers` are many-to-one joins, we can directly join them onto our table." ] }, { "cell_type": "code", "execution_count": 29, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
dateraceIddriverIdyearwinidqualifyIdpositionnumbernationalitydriverRef
02008-03-1618120081.0011.022.0Britishhamilton
12008-03-1618220080.0155.03.0Germanheidfeld
22008-03-1618320080.0277.07.0Germanrosberg
32008-03-1618520080.0333.023.0Finnishkovalainen
42008-03-1618620080.041414.08.0Japanesenakajima
....................................
253442017-09-1798283520170.025344741011.030.0Britishjolyon_palmer
253452017-09-1798215420170.025345741415.08.0Frenchgrosjean
253462017-09-1798283620170.025346741819.094.0Germanwehrlein
253472017-09-179821820170.025347NaNNaNNaNBritishbutton
253482017-09-1798281420170.025348NaNNaNNaNBritishresta
\n", "

25349 rows × 11 columns

\n", "
" ], "text/plain": [ " date raceId driverId year win id qualifyId position \\\n", "0 2008-03-16 18 1 2008 1.0 0 1 1.0 \n", "1 2008-03-16 18 2 2008 0.0 1 5 5.0 \n", "2 2008-03-16 18 3 2008 0.0 2 7 7.0 \n", "3 2008-03-16 18 5 2008 0.0 3 3 3.0 \n", "4 2008-03-16 18 6 2008 0.0 4 14 14.0 \n", "... ... ... ... ... ... ... ... ... \n", "25344 2017-09-17 982 835 2017 0.0 25344 7410 11.0 \n", "25345 2017-09-17 982 154 2017 0.0 25345 7414 15.0 \n", "25346 2017-09-17 982 836 2017 0.0 25346 7418 19.0 \n", "25347 2017-09-17 982 18 2017 0.0 25347 NaN NaN \n", "25348 2017-09-17 982 814 2017 0.0 25348 NaN NaN \n", "\n", " number nationality driverRef \n", "0 22.0 British hamilton \n", "1 3.0 German heidfeld \n", "2 7.0 German rosberg \n", "3 23.0 Finnish kovalainen \n", "4 8.0 Japanese nakajima \n", "... ... ... ... \n", "25344 30.0 British jolyon_palmer \n", "25345 8.0 French grosjean \n", "25346 94.0 German wehrlein \n", "25347 NaN British button \n", "25348 NaN British resta \n", "\n", "[25349 rows x 11 columns]" ] }, "execution_count": 29, "metadata": {}, "output_type": "execute_result" } ], "source": [ "population_train_pd[\"id\"] = population_train_pd.index\n", "\n", "population_train_pd = population_train_pd.merge(\n", " qualifying_pd,\n", " on=[\"driverId\", \"raceId\"],\n", " how=\"left\",\n", ")\n", "\n", "population_train_pd = population_train_pd.merge(\n", " drivers_pd,\n", " on=[\"driverId\"],\n", " how=\"left\",\n", ")\n", "\n", "population_train_pd" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Same for the testing set." ] }, { "cell_type": "code", "execution_count": 30, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
dateraceIddriverIdyearwinidqualifyIdpositionnumbernationalitydriverRef
02008-03-1618420080.001212.05.0Spanishalonso
12008-03-1618720080.011818.014.0Frenchbourdais
22008-03-2319320080.023816.07.0Germanrosberg
32008-03-23191120080.034220.018.0Japanesesato
42008-04-0620720080.045915.014.0Frenchbourdais
....................................
62242017-09-0398183520170.06224739617.030.0Britishjolyon_palmer
62252017-09-0398181420170.06225NaNNaNNaNBritishresta
62262017-09-1798282220170.0622674056.077.0Finnishbottas
62272017-09-1798283220170.06227740910.055.0Spanishsainz
62282017-09-1798282620170.06228741213.026.0Russiankvyat
\n", "

6229 rows × 11 columns

\n", "
" ], "text/plain": [ " date raceId driverId year win id qualifyId position number \\\n", "0 2008-03-16 18 4 2008 0.0 0 12 12.0 5.0 \n", "1 2008-03-16 18 7 2008 0.0 1 18 18.0 14.0 \n", "2 2008-03-23 19 3 2008 0.0 2 38 16.0 7.0 \n", "3 2008-03-23 19 11 2008 0.0 3 42 20.0 18.0 \n", "4 2008-04-06 20 7 2008 0.0 4 59 15.0 14.0 \n", "... ... ... ... ... ... ... ... ... ... \n", "6224 2017-09-03 981 835 2017 0.0 6224 7396 17.0 30.0 \n", "6225 2017-09-03 981 814 2017 0.0 6225 NaN NaN NaN \n", "6226 2017-09-17 982 822 2017 0.0 6226 7405 6.0 77.0 \n", "6227 2017-09-17 982 832 2017 0.0 6227 7409 10.0 55.0 \n", "6228 2017-09-17 982 826 2017 0.0 6228 7412 13.0 26.0 \n", "\n", " nationality driverRef \n", "0 Spanish alonso \n", "1 French bourdais \n", "2 German rosberg \n", "3 Japanese sato \n", "4 French bourdais \n", "... ... ... \n", "6224 British jolyon_palmer \n", "6225 British resta \n", "6226 Finnish bottas \n", "6227 Spanish sainz \n", "6228 Russian kvyat \n", "\n", "[6229 rows x 11 columns]" ] }, "execution_count": 30, "metadata": {}, "output_type": "execute_result" } ], "source": [ "population_test_pd[\"id\"] = population_test_pd.index\n", "\n", "population_test_pd = population_test_pd.merge(\n", " qualifying_pd,\n", " on=[\"driverId\", \"raceId\"],\n", " how=\"left\",\n", ")\n", "\n", "population_test_pd = population_test_pd.merge(\n", " drivers_pd,\n", " on=[\"driverId\"],\n", " how=\"left\",\n", ")\n", "\n", "population_test_pd" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "featuretools requires us to expand our peripheral tables so they can be joined using the unique id from the population table. Luckily, we can write a simple helper function that works for all three remaining peripheral tables." ] }, { "cell_type": "code", "execution_count": 31, "metadata": {}, "outputs": [], "source": [ "def prepare_peripheral(peripheral, train_or_test):\n", " \"\"\"\n", " Helper function that imitates the behavior of \n", " the data model defined above.\n", " \"\"\"\n", " peripheral_new = peripheral.merge(\n", " train_or_test[[\"id\", \"driverId\", \"date\"]],\n", " on=[\"driverId\"],\n", " )\n", "\n", " peripheral_new = peripheral_new[\n", " peripheral_new[\"date_x\"] < peripheral_new[\"date_y\"]\n", " ]\n", " \n", " del peripheral_new[\"date_y\"]\n", " del peripheral_new[\"driverId\"]\n", " del peripheral_new[\"raceId\"]\n", "\n", " return peripheral_new.rename(columns={\"date_x\": \"date\"})" ] }, { "cell_type": "code", "execution_count": 32, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
dateyearwinpositionid
12008-03-1620081.01.06
22008-03-1620081.01.022
32008-03-1620081.01.039
42008-03-1620081.01.054
52008-03-1620081.01.072
..................
26562302017-07-3020170.012.025323
26562312017-07-3020170.012.025341
26562422017-08-2720170.013.025323
26562432017-08-2720170.013.025341
26562552017-09-0320170.012.025341
\n", "

1317941 rows × 5 columns

\n", "
" ], "text/plain": [ " date year win position id\n", "1 2008-03-16 2008 1.0 1.0 6\n", "2 2008-03-16 2008 1.0 1.0 22\n", "3 2008-03-16 2008 1.0 1.0 39\n", "4 2008-03-16 2008 1.0 1.0 54\n", "5 2008-03-16 2008 1.0 1.0 72\n", "... ... ... ... ... ...\n", "2656230 2017-07-30 2017 0.0 12.0 25323\n", "2656231 2017-07-30 2017 0.0 12.0 25341\n", "2656242 2017-08-27 2017 0.0 13.0 25323\n", "2656243 2017-08-27 2017 0.0 13.0 25341\n", "2656255 2017-09-03 2017 0.0 12.0 25341\n", "\n", "[1317941 rows x 5 columns]" ] }, "execution_count": 32, "metadata": {}, "output_type": "execute_result" } ], "source": [ "driver_standings_train_pd = prepare_peripheral(driver_standings_pd, population_train_pd)\n", "driver_standings_test_pd = prepare_peripheral(driver_standings_pd, population_test_pd)\n", "driver_standings_train_pd" ] }, { "cell_type": "code", "execution_count": 33, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
dateyearlapmillisecondspositionid
282009-03-2920091.0109088.013.05874
292009-03-2920091.0109088.013.05904
302009-03-2920091.0109088.013.05918
312009-03-2920091.0109088.013.05936
322009-03-2920091.0109088.013.05954
.....................
548118982017-04-0920173.0156151.017.025264
548118992017-04-0920173.0156151.017.025281
548119002017-04-0920173.0156151.017.025300
548119012017-04-0920173.0156151.017.025320
548119022017-04-0920173.0156151.017.025337
\n", "

25544456 rows × 6 columns

\n", "
" ], "text/plain": [ " date year lap milliseconds position id\n", "28 2009-03-29 2009 1.0 109088.0 13.0 5874\n", "29 2009-03-29 2009 1.0 109088.0 13.0 5904\n", "30 2009-03-29 2009 1.0 109088.0 13.0 5918\n", "31 2009-03-29 2009 1.0 109088.0 13.0 5936\n", "32 2009-03-29 2009 1.0 109088.0 13.0 5954\n", "... ... ... ... ... ... ...\n", "54811898 2017-04-09 2017 3.0 156151.0 17.0 25264\n", "54811899 2017-04-09 2017 3.0 156151.0 17.0 25281\n", "54811900 2017-04-09 2017 3.0 156151.0 17.0 25300\n", "54811901 2017-04-09 2017 3.0 156151.0 17.0 25320\n", "54811902 2017-04-09 2017 3.0 156151.0 17.0 25337\n", "\n", "[25544456 rows x 6 columns]" ] }, "execution_count": 33, "metadata": {}, "output_type": "execute_result" } ], "source": [ "lap_times_train_pd = prepare_peripheral(lap_times_pd, population_train_pd)\n", "lap_times_test_pd = prepare_peripheral(lap_times_pd, population_test_pd)\n", "lap_times_train_pd" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "`lap_times` demonstrates one of the greatest dangers of featuretools. Because it is written in pure Python, featuretools requires you expand your tables so that they can be more easily joined. But this comes at the cost of increased memory consumption: In this case a table that used to have about 420,000 rows has now been expanded to over 25 million rows." ] }, { "cell_type": "code", "execution_count": 34, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
dateyearlapmillisecondsstopid
572011-03-27201116.023227.01.022459
582011-03-27201116.023227.01.022498
592011-03-27201116.023227.01.022536
602011-03-27201116.023227.01.022555
612011-03-27201116.023227.01.022574
.....................
6881202017-04-0920172.029443.01.025264
6881212017-04-0920172.029443.01.025281
6881222017-04-0920172.029443.01.025300
6881232017-04-0920172.029443.01.025320
6881242017-04-0920172.029443.01.025337
\n", "

213549 rows × 6 columns

\n", "
" ], "text/plain": [ " date year lap milliseconds stop id\n", "57 2011-03-27 2011 16.0 23227.0 1.0 22459\n", "58 2011-03-27 2011 16.0 23227.0 1.0 22498\n", "59 2011-03-27 2011 16.0 23227.0 1.0 22536\n", "60 2011-03-27 2011 16.0 23227.0 1.0 22555\n", "61 2011-03-27 2011 16.0 23227.0 1.0 22574\n", "... ... ... ... ... ... ...\n", "688120 2017-04-09 2017 2.0 29443.0 1.0 25264\n", "688121 2017-04-09 2017 2.0 29443.0 1.0 25281\n", "688122 2017-04-09 2017 2.0 29443.0 1.0 25300\n", "688123 2017-04-09 2017 2.0 29443.0 1.0 25320\n", "688124 2017-04-09 2017 2.0 29443.0 1.0 25337\n", "\n", "[213549 rows x 6 columns]" ] }, "execution_count": 34, "metadata": {}, "output_type": "execute_result" } ], "source": [ "pit_stops_train_pd = prepare_peripheral(pit_stops_pd, population_train_pd)\n", "pit_stops_test_pd = prepare_peripheral(pit_stops_pd, population_test_pd)\n", "pit_stops_train_pd" ] }, { "cell_type": "code", "execution_count": 35, "metadata": {}, "outputs": [], "source": [ "del population_train_pd[\"driverId\"]\n", "del population_train_pd[\"raceId\"]\n", "del population_train_pd[\"year\"]\n", "del population_train_pd[\"qualifyId\"]" ] }, { "cell_type": "code", "execution_count": 36, "metadata": {}, "outputs": [], "source": [ "del population_test_pd[\"driverId\"]\n", "del population_test_pd[\"raceId\"]\n", "del population_test_pd[\"year\"]\n", "del population_test_pd[\"qualifyId\"]" ] }, { "cell_type": "code", "execution_count": 37, "metadata": {}, "outputs": [], "source": [ "entities_train = {\n", " \"population\" : (population_train_pd, \"id\"),\n", " \"driver_standings\": (driver_standings_train_pd, \"index\"),\n", " \"lap_times\" : (lap_times_train_pd, \"index\"),\n", " \"pit_stops\" : (pit_stops_train_pd, \"index\"),\n", "}" ] }, { "cell_type": "code", "execution_count": 38, "metadata": {}, "outputs": [], "source": [ "entities_test = {\n", " \"population\" : (population_test_pd, \"id\"),\n", " \"driver_standings\": (driver_standings_test_pd, \"index\"),\n", " \"lap_times\" : (lap_times_test_pd, \"index\"),\n", " \"pit_stops\" : (pit_stops_test_pd, \"index\")\n", "}" ] }, { "cell_type": "code", "execution_count": 39, "metadata": {}, "outputs": [], "source": [ "relationships = [\n", " (\"population\", \"id\", \"driver_standings\", \"id\"),\n", " (\"population\", \"id\", \"lap_times\", \"id\"),\n", " (\"population\", \"id\", \"pit_stops\", \"id\")\n", "]" ] }, { "cell_type": "code", "execution_count": 40, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "/home/patrick/.local/lib/python3.9/site-packages/featuretools/entityset/entity.py:462: UserWarning: index index not found in dataframe, creating new integer column\n", " warnings.warn(\"index {} not found in dataframe, creating new \"\n" ] } ], "source": [ "featuretools_train_pd = featuretools.dfs(\n", " entities=entities_train,\n", " relationships=relationships,\n", " target_entity=\"population\")[0]" ] }, { "cell_type": "code", "execution_count": 41, "metadata": {}, "outputs": [], "source": [ "featuretools_test_pd = featuretools.dfs(\n", " entities=entities_test,\n", " relationships=relationships,\n", " target_entity=\"population\")[0]" ] }, { "cell_type": "code", "execution_count": 42, "metadata": {}, "outputs": [], "source": [ "featuretools_train = getml.data.DataFrame.from_pandas(featuretools_train_pd, \"featuretools_train\")\n", "featuretools_test = getml.data.DataFrame.from_pandas(featuretools_test_pd, \"featuretools_test\")" ] }, { "cell_type": "code", "execution_count": 43, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "90.725472% of all entries of column 'MAX(pit_stops.lap)' are NULL values.\n", "90.725472% of all entries of column 'MAX(pit_stops.milliseconds)' are NULL values.\n", "90.725472% of all entries of column 'MAX(pit_stops.stop)' are NULL values.\n", "90.725472% of all entries of column 'MEAN(pit_stops.lap)' are NULL values.\n", "90.725472% of all entries of column 'MEAN(pit_stops.milliseconds)' are NULL values.\n", "90.725472% of all entries of column 'MEAN(pit_stops.stop)' are NULL values.\n", "90.725472% of all entries of column 'MIN(pit_stops.lap)' are NULL values.\n", "90.725472% of all entries of column 'MIN(pit_stops.milliseconds)' are NULL values.\n", "90.725472% of all entries of column 'MIN(pit_stops.stop)' are NULL values.\n", "90.725472% of all entries of column 'NUM_UNIQUE(pit_stops.year)' are NULL values.\n", "90.934554% of all entries of column 'SKEW(pit_stops.lap)' are NULL values.\n", "90.934554% of all entries of column 'SKEW(pit_stops.milliseconds)' are NULL values.\n", "90.934554% of all entries of column 'SKEW(pit_stops.stop)' are NULL values.\n", "90.757032% of all entries of column 'STD(pit_stops.lap)' are NULL values.\n", "90.757032% of all entries of column 'STD(pit_stops.milliseconds)' are NULL values.\n", "90.757032% of all entries of column 'STD(pit_stops.stop)' are NULL values.\n", "90.725472% of all entries of column 'MODE(pit_stops.DAY(date))' are NULL values.\n", "90.725472% of all entries of column 'MODE(pit_stops.MONTH(date))' are NULL values.\n", "90.725472% of all entries of column 'MODE(pit_stops.WEEKDAY(date))' are NULL values.\n", "90.725472% of all entries of column 'MODE(pit_stops.YEAR(date))' are NULL values.\n", "90.725472% of all entries of column 'NUM_UNIQUE(pit_stops.DAY(date))' are NULL values.\n", "90.725472% of all entries of column 'NUM_UNIQUE(pit_stops.MONTH(date))' are NULL values.\n", "90.725472% of all entries of column 'NUM_UNIQUE(pit_stops.WEEKDAY(date))' are NULL values.\n", "90.725472% of all entries of column 'NUM_UNIQUE(pit_stops.YEAR(date))' are NULL values.\n", "90.725472% of all entries of column 'MODE(pit_stops.year)' are NULL values.\n" ] }, { "data": { "text/html": [ "\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
name winnationalitydriverRef MODE(driver_standings.year)MODE(lap_times.year)MODE(pit_stops.year) position numberCOUNT(driver_standings)MAX(driver_standings.position)MAX(driver_standings.win)MEAN(driver_standings.position)MEAN(driver_standings.win)MIN(driver_standings.position)MIN(driver_standings.win)NUM_UNIQUE(driver_standings.year)SKEW(driver_standings.position)SKEW(driver_standings.win)STD(driver_standings.position)STD(driver_standings.win)SUM(driver_standings.position)SUM(driver_standings.win)COUNT(lap_times)MAX(lap_times.lap)MAX(lap_times.milliseconds)MAX(lap_times.position)MEAN(lap_times.lap)MEAN(lap_times.milliseconds)MEAN(lap_times.position)MIN(lap_times.lap)MIN(lap_times.milliseconds)MIN(lap_times.position)NUM_UNIQUE(lap_times.year)SKEW(lap_times.lap)SKEW(lap_times.milliseconds)SKEW(lap_times.position)STD(lap_times.lap)STD(lap_times.milliseconds)STD(lap_times.position)SUM(lap_times.lap)SUM(lap_times.milliseconds)SUM(lap_times.position)COUNT(pit_stops)MAX(pit_stops.lap)MAX(pit_stops.milliseconds)MAX(pit_stops.stop)MEAN(pit_stops.lap)MEAN(pit_stops.milliseconds)MEAN(pit_stops.stop)MIN(pit_stops.lap)MIN(pit_stops.milliseconds)MIN(pit_stops.stop)NUM_UNIQUE(pit_stops.year)SKEW(pit_stops.lap)SKEW(pit_stops.milliseconds)SKEW(pit_stops.stop)STD(pit_stops.lap)STD(pit_stops.milliseconds)STD(pit_stops.stop)SUM(pit_stops.lap)SUM(pit_stops.milliseconds)SUM(pit_stops.stop)DAY(date)MONTH(date)WEEKDAY(date)YEAR(date)MODE(driver_standings.DAY(date))MODE(driver_standings.MONTH(date))MODE(driver_standings.WEEKDAY(date))MODE(driver_standings.YEAR(date))NUM_UNIQUE(driver_standings.DAY(date))NUM_UNIQUE(driver_standings.MONTH(date))NUM_UNIQUE(driver_standings.WEEKDAY(date))NUM_UNIQUE(driver_standings.YEAR(date))MODE(lap_times.DAY(date))MODE(lap_times.MONTH(date))MODE(lap_times.WEEKDAY(date))MODE(lap_times.YEAR(date))NUM_UNIQUE(lap_times.DAY(date))NUM_UNIQUE(lap_times.MONTH(date))NUM_UNIQUE(lap_times.WEEKDAY(date))NUM_UNIQUE(lap_times.YEAR(date))MODE(pit_stops.DAY(date))MODE(pit_stops.MONTH(date))MODE(pit_stops.WEEKDAY(date))MODE(pit_stops.YEAR(date))NUM_UNIQUE(pit_stops.DAY(date))NUM_UNIQUE(pit_stops.MONTH(date))NUM_UNIQUE(pit_stops.WEEKDAY(date))NUM_UNIQUE(pit_stops.YEAR(date))
roletargetcategoricalcategorical categorical categorical categorical numericalnumerical numerical numerical numerical numerical numerical numerical numerical numerical numerical numerical numerical numerical numerical numerical numerical numerical numerical numerical numerical numerical numerical numerical numerical numerical numerical numerical numerical numerical numerical numerical numerical numerical numerical numerical numerical numerical numerical numerical numerical numerical numerical numerical numerical numerical numerical numerical numerical numerical numerical numerical numerical numerical numerical numericalnumerical numerical numerical numerical numerical numerical numerical numerical numerical numerical numerical numerical numerical numerical numerical numerical numerical numerical numerical numerical numerical numerical numerical numerical numerical numerical numerical numerical
0\n", " 1 \n", " Britishhamilton20072007NULL\n", " 1 \n", " \n", " 22 \n", " \n", " 17 \n", " \n", " 3 \n", " \n", " 1 \n", " \n", " 1.4706\n", " \n", " 0.2353\n", " \n", " 1 \n", " \n", " 0 \n", " \n", " 1 \n", " \n", " 1.3538\n", " \n", " 1.3723\n", " \n", " 0.7998\n", " \n", " 0.4372\n", " \n", " 25 \n", " \n", " 4 \n", " \n", " 1037 \n", " \n", " 78 \n", " \n", " 1453884 \n", " \n", " 19 \n", " \n", " 32.0559\n", " \n", " 90600.8602\n", " \n", " 3.2575\n", " \n", " 1 \n", " \n", " 72506 \n", " \n", " 1 \n", " \n", " 1 \n", " \n", " 0.1882\n", " \n", " 26.093\n", " \n", " 2.4493\n", " \n", " 19.1156\n", " \n", " 45564.9471\n", " \n", " 3.4488\n", " \n", " 33242 \n", " \n", " 93953092 \n", " \n", " 3378 \n", " \n", " 0 \n", " \n", " nan \n", " \n", " nan \n", " \n", " nan \n", " \n", " nan \n", " \n", " nan \n", " \n", " nan \n", " \n", " nan \n", " \n", " nan \n", " \n", " nan \n", " \n", " nan \n", " \n", " nan \n", " \n", " nan \n", " \n", " nan \n", " \n", " nan \n", " \n", " nan \n", " \n", " nan \n", " \n", " 0 \n", " \n", " 0 \n", " \n", " 0 \n", " \n", " 16 \n", " \n", " 3 \n", " \n", " 6 \n", " \n", " 2008 \n", " \n", " 8 \n", " \n", " 7 \n", " \n", " 6 \n", " \n", " 2007 \n", " \n", " 16 \n", " \n", " 8 \n", " \n", " 1 \n", " \n", " 1 \n", " \n", " 8 \n", " \n", " 7 \n", " \n", " 6 \n", " \n", " 2007 \n", " \n", " 16 \n", " \n", " 8 \n", " \n", " 1 \n", " \n", " 1 \n", " \n", " nan \n", " \n", " nan \n", " \n", " nan \n", " \n", " nan \n", " \n", " nan \n", " \n", " nan \n", " \n", " nan \n", " \n", " nan \n", "
1\n", " 0 \n", " Germanheidfeld20052007NULL\n", " 5 \n", " \n", " 3 \n", " \n", " 134 \n", " \n", " 21 \n", " \n", " 0 \n", " \n", " 10.8582\n", " \n", " 0 \n", " \n", " 4 \n", " \n", " 0 \n", " \n", " 8 \n", " \n", " 0.4681\n", " \n", " 0 \n", " \n", " 5.136\n", " \n", " 0 \n", " \n", " 1455 \n", " \n", " 0 \n", " \n", " 6863 \n", " \n", " 78 \n", " \n", " 1285986 \n", " \n", " 22 \n", " \n", " 30.4682\n", " \n", " 89072.7102\n", " \n", " 9.6799\n", " \n", " 1 \n", " \n", " 70516 \n", " \n", " 1 \n", " \n", " 8 \n", " \n", " 0.2623\n", " \n", " 30.5344\n", " \n", " 0.3339\n", " \n", " 18.7041\n", " \n", " 20544.1746\n", " \n", " 4.199\n", " \n", " 209103 \n", " \n", " 611306010 \n", " \n", " 66433 \n", " \n", " 0 \n", " \n", " nan \n", " \n", " nan \n", " \n", " nan \n", " \n", " nan \n", " \n", " nan \n", " \n", " nan \n", " \n", " nan \n", " \n", " nan \n", " \n", " nan \n", " \n", " nan \n", " \n", " nan \n", " \n", " nan \n", " \n", " nan \n", " \n", " nan \n", " \n", " nan \n", " \n", " nan \n", " \n", " 0 \n", " \n", " 0 \n", " \n", " 0 \n", " \n", " 16 \n", " \n", " 3 \n", " \n", " 6 \n", " \n", " 2008 \n", " \n", " 1 \n", " \n", " 7 \n", " \n", " 6 \n", " \n", " 2005 \n", " \n", " 31 \n", " \n", " 8 \n", " \n", " 1 \n", " \n", " 8 \n", " \n", " 1 \n", " \n", " 7 \n", " \n", " 6 \n", " \n", " 2007 \n", " \n", " 31 \n", " \n", " 8 \n", " \n", " 1 \n", " \n", " 8 \n", " \n", " nan \n", " \n", " nan \n", " \n", " nan \n", " \n", " nan \n", " \n", " nan \n", " \n", " nan \n", " \n", " nan \n", " \n", " nan \n", "
2\n", " 0 \n", " Germanrosberg20062007NULL\n", " 7 \n", " \n", " 7 \n", " \n", " 35 \n", " \n", " 17 \n", " \n", " 0 \n", " \n", " 11.9714\n", " \n", " 0 \n", " \n", " 7 \n", " \n", " 0 \n", " \n", " 2 \n", " \n", " 0.1328\n", " \n", " 0 \n", " \n", " 3.1761\n", " \n", " 0 \n", " \n", " 419 \n", " \n", " 0 \n", " \n", " 1627 \n", " \n", " 77 \n", " \n", " 191891 \n", " \n", " 22 \n", " \n", " 30.4124\n", " \n", " 89820.1174\n", " \n", " 9.9809\n", " \n", " 1 \n", " \n", " 73159 \n", " \n", " 3 \n", " \n", " 2 \n", " \n", " 0.2225\n", " \n", " 1.7858\n", " \n", " 0.5491\n", " \n", " 18.6109\n", " \n", " 14212.8848\n", " \n", " 3.733\n", " \n", " 49481 \n", " \n", " 146137331 \n", " \n", " 16239 \n", " \n", " 0 \n", " \n", " nan \n", " \n", " nan \n", " \n", " nan \n", " \n", " nan \n", " \n", " nan \n", " \n", " nan \n", " \n", " nan \n", " \n", " nan \n", " \n", " nan \n", " \n", " nan \n", " \n", " nan \n", " \n", " nan \n", " \n", " nan \n", " \n", " nan \n", " \n", " nan \n", " \n", " nan \n", " \n", " 0 \n", " \n", " 0 \n", " \n", " 0 \n", " \n", " 16 \n", " \n", " 3 \n", " \n", " 6 \n", " \n", " 2008 \n", " \n", " 8 \n", " \n", " 7 \n", " \n", " 6 \n", " \n", " 2006 \n", " \n", " 25 \n", " \n", " 8 \n", " \n", " 1 \n", " \n", " 2 \n", " \n", " 8 \n", " \n", " 5 \n", " \n", " 6 \n", " \n", " 2007 \n", " \n", " 25 \n", " \n", " 8 \n", " \n", " 1 \n", " \n", " 2 \n", " \n", " nan \n", " \n", " nan \n", " \n", " nan \n", " \n", " nan \n", " \n", " nan \n", " \n", " nan \n", " \n", " nan \n", " \n", " nan \n", "
3\n", " 0 \n", " Finnishkovalainen20072007NULL\n", " 3 \n", " \n", " 23 \n", " \n", " 17 \n", " \n", " 11 \n", " \n", " 0 \n", " \n", " 8.3529\n", " \n", " 0 \n", " \n", " 7 \n", " \n", " 0 \n", " \n", " 1 \n", " \n", " 0.7931\n", " \n", " 0 \n", " \n", " 1.4116\n", " \n", " 0 \n", " \n", " 142 \n", " \n", " 0 \n", " \n", " 1023 \n", " \n", " 76 \n", " \n", " 1394884 \n", " \n", " 22 \n", " \n", " 31.4526\n", " \n", " 92458.8299\n", " \n", " 9.4018\n", " \n", " 1 \n", " \n", " 73998 \n", " \n", " 1 \n", " \n", " 1 \n", " \n", " 0.1906\n", " \n", " 26.2493\n", " \n", " 0.6941\n", " \n", " 18.6943\n", " \n", " 43578.4946\n", " \n", " 4.1724\n", " \n", " 32176 \n", " \n", " 94585383 \n", " \n", " 9618 \n", " \n", " 0 \n", " \n", " nan \n", " \n", " nan \n", " \n", " nan \n", " \n", " nan \n", " \n", " nan \n", " \n", " nan \n", " \n", " nan \n", " \n", " nan \n", " \n", " nan \n", " \n", " nan \n", " \n", " nan \n", " \n", " nan \n", " \n", " nan \n", " \n", " nan \n", " \n", " nan \n", " \n", " nan \n", " \n", " 0 \n", " \n", " 0 \n", " \n", " 0 \n", " \n", " 16 \n", " \n", " 3 \n", " \n", " 6 \n", " \n", " 2008 \n", " \n", " 8 \n", " \n", " 7 \n", " \n", " 6 \n", " \n", " 2007 \n", " \n", " 16 \n", " \n", " 8 \n", " \n", " 1 \n", " \n", " 1 \n", " \n", " 8 \n", " \n", " 7 \n", " \n", " 6 \n", " \n", " 2007 \n", " \n", " 16 \n", " \n", " 8 \n", " \n", " 1 \n", " \n", " 1 \n", " \n", " nan \n", " \n", " nan \n", " \n", " nan \n", " \n", " nan \n", " \n", " nan \n", " \n", " nan \n", " \n", " nan \n", " \n", " nan \n", "
4\n", " 0 \n", " Japanesenakajima20072007NULL\n", " 14 \n", " \n", " 8 \n", " \n", " 1 \n", " \n", " 22 \n", " \n", " 0 \n", " \n", " 22 \n", " \n", " 0 \n", " \n", " 22 \n", " \n", " 0 \n", " \n", " 1 \n", " \n", " nan \n", " \n", " nan \n", " \n", " nan \n", " \n", " nan \n", " \n", " 22 \n", " \n", " 0 \n", " \n", " 70 \n", " \n", " 70 \n", " \n", " 104396 \n", " \n", " 16 \n", " \n", " 35.5\n", " \n", " 76228.3571\n", " \n", " 10.9143\n", " \n", " 1 \n", " \n", " 73116 \n", " \n", " 9 \n", " \n", " 1 \n", " \n", " 0 \n", " \n", " 4.4222\n", " \n", " 1.2783\n", " \n", " 20.3511\n", " \n", " 4785.2529\n", " \n", " 1.8552\n", " \n", " 2485 \n", " \n", " 5335985 \n", " \n", " 764 \n", " \n", " 0 \n", " \n", " nan \n", " \n", " nan \n", " \n", " nan \n", " \n", " nan \n", " \n", " nan \n", " \n", " nan \n", " \n", " nan \n", " \n", " nan \n", " \n", " nan \n", " \n", " nan \n", " \n", " nan \n", " \n", " nan \n", " \n", " nan \n", " \n", " nan \n", " \n", " nan \n", " \n", " nan \n", " \n", " 0 \n", " \n", " 0 \n", " \n", " 0 \n", " \n", " 16 \n", " \n", " 3 \n", " \n", " 6 \n", " \n", " 2008 \n", " \n", " 21 \n", " \n", " 10 \n", " \n", " 6 \n", " \n", " 2007 \n", " \n", " 1 \n", " \n", " 1 \n", " \n", " 1 \n", " \n", " 1 \n", " \n", " 21 \n", " \n", " 10 \n", " \n", " 6 \n", " \n", " 2007 \n", " \n", " 1 \n", " \n", " 1 \n", " \n", " 1 \n", " \n", " 1 \n", " \n", " nan \n", " \n", " nan \n", " \n", " nan \n", " \n", " nan \n", " \n", " nan \n", " \n", " nan \n", " \n", " nan \n", " \n", " nan \n", "
\n", " ... \n", " ...............\n", " ... \n", " \n", " ... \n", " \n", " ... \n", " \n", " ... \n", " \n", " ... \n", " \n", " ... \n", " \n", " ... \n", " \n", " ... \n", " \n", " ... \n", " \n", " ... \n", " \n", " ... \n", " \n", " ... \n", " \n", " ... \n", " \n", " ... \n", " \n", " ... \n", " \n", " ... \n", " \n", " ... \n", " \n", " ... \n", " \n", " ... \n", " \n", " ... \n", " \n", " ... \n", " \n", " ... \n", " \n", " ... \n", " \n", " ... \n", " \n", " ... \n", " \n", " ... \n", " \n", " ... \n", " \n", " ... \n", " \n", " ... \n", " \n", " ... \n", " \n", " ... \n", " \n", " ... \n", " \n", " ... \n", " \n", " ... \n", " \n", " ... \n", " \n", " ... \n", " \n", " ... \n", " \n", " ... \n", " \n", " ... \n", " \n", " ... \n", " \n", " ... \n", " \n", " ... \n", " \n", " ... \n", " \n", " ... \n", " \n", " ... \n", " \n", " ... \n", " \n", " ... \n", " \n", " ... \n", " \n", " ... \n", " \n", " ... \n", " \n", " ... \n", " \n", " ... \n", " \n", " ... \n", " \n", " ... \n", " \n", " ... \n", " \n", " ... \n", " \n", " ... \n", " \n", " ... \n", " \n", " ... \n", " \n", " ... \n", " \n", " ... \n", " \n", " ... \n", " \n", " ... \n", " \n", " ... \n", " \n", " ... \n", " \n", " ... \n", " \n", " ... \n", " \n", " ... \n", " \n", " ... \n", " \n", " ... \n", " \n", " ... \n", " \n", " ... \n", " \n", " ... \n", " \n", " ... \n", " \n", " ... \n", " \n", " ... \n", " \n", " ... \n", " \n", " ... \n", " \n", " ... \n", " \n", " ... \n", " \n", " ... \n", " \n", " ... \n", " \n", " ... \n", " \n", " ... \n", "
25344\n", " 0 \n", " Britishjolyon_palmer201620162016\n", " 11 \n", " \n", " 30 \n", " \n", " 34 \n", " \n", " 20 \n", " \n", " 0 \n", " \n", " 18.0588\n", " \n", " 0 \n", " \n", " 11 \n", " \n", " 0 \n", " \n", " 2 \n", " \n", " -1.7626\n", " \n", " 0 \n", " \n", " 1.8413\n", " \n", " 0 \n", " \n", " 614 \n", " \n", " 0 \n", " \n", " 1517 \n", " \n", " 78 \n", " \n", " 1223356 \n", " \n", " 22 \n", " \n", " 29.4199\n", " \n", " 98411.6038\n", " \n", " 14.5175\n", " \n", " 1 \n", " \n", " 68652 \n", " \n", " 7 \n", " \n", " 2 \n", " \n", " 0.2921\n", " \n", " 21.0237\n", " \n", " 0.3751\n", " \n", " 18.5854\n", " \n", " 43393.1519\n", " \n", " 3.0483\n", " \n", " 44630 \n", " \n", " 149290403 \n", " \n", " 22023 \n", " \n", " 56 \n", " \n", " 50 \n", " \n", " 1088294 \n", " \n", " 4 \n", " \n", " 20.9286\n", " \n", " 61015.1429\n", " \n", " 1.7857\n", " \n", " 1 \n", " \n", " 16851 \n", " \n", " 1 \n", " \n", " 2 \n", " \n", " 0.3035\n", " \n", " 5.1507\n", " \n", " 0.8981\n", " \n", " 13.473\n", " \n", " 191214.0556\n", " \n", " 0.9088\n", " \n", " 1172 \n", " \n", " 3416848 \n", " \n", " 100 \n", " \n", " 17 \n", " \n", " 9 \n", " \n", " 6 \n", " \n", " 2017 \n", " \n", " 3 \n", " \n", " 7 \n", " \n", " 6 \n", " \n", " 2016 \n", " \n", " 25 \n", " \n", " 9 \n", " \n", " 1 \n", " \n", " 2 \n", " \n", " 9 \n", " \n", " 7 \n", " \n", " 6 \n", " \n", " 2016 \n", " \n", " 25 \n", " \n", " 9 \n", " \n", " 1 \n", " \n", " 2 \n", " \n", " 9 \n", " \n", " 7 \n", " \n", " 6 \n", " \n", " 2016 \n", " \n", " 21 \n", " \n", " 9 \n", " \n", " 1 \n", " \n", " 2 \n", "
25345\n", " 0 \n", " Frenchgrosjean201620162014\n", " 15 \n", " \n", " 8 \n", " \n", " 118 \n", " \n", " 24 \n", " \n", " 0 \n", " \n", " 11.5254\n", " \n", " 0 \n", " \n", " 5 \n", " \n", " 0 \n", " \n", " 7 \n", " \n", " 1.3306\n", " \n", " 0 \n", " \n", " 4.1709\n", " \n", " 0 \n", " \n", " 1360 \n", " \n", " 0 \n", " \n", " 5518 \n", " \n", " 78 \n", " \n", " 3670560 \n", " \n", " 24 \n", " \n", " 29.4511\n", " \n", " 99489.4235\n", " \n", " 10.7356\n", " \n", " 1 \n", " \n", " 68590 \n", " \n", " 1 \n", " \n", " 7 \n", " \n", " 0.2565\n", " \n", " 39.9299\n", " \n", " 0.06907\n", " \n", " 18.0521\n", " \n", " 63108.3058\n", " \n", " 4.8371\n", " \n", " 162511 \n", " \n", " 548982639 \n", " \n", " 59239 \n", " \n", " 206 \n", " \n", " 62 \n", " \n", " 1313665 \n", " \n", " 5 \n", " \n", " 22.9369\n", " \n", " 46260.6214\n", " \n", " 1.801\n", " \n", " 1 \n", " \n", " 15073 \n", " \n", " 1 \n", " \n", " 6 \n", " \n", " 0.3075\n", " \n", " 7.1215\n", " \n", " 1.2186\n", " \n", " 13.7483\n", " \n", " 154388.9496\n", " \n", " 0.9288\n", " \n", " 4725 \n", " \n", " 9529688 \n", " \n", " 371 \n", " \n", " 17 \n", " \n", " 9 \n", " \n", " 6 \n", " \n", " 2017 \n", " \n", " 27 \n", " \n", " 7 \n", " \n", " 6 \n", " \n", " 2016 \n", " \n", " 31 \n", " \n", " 9 \n", " \n", " 1 \n", " \n", " 7 \n", " \n", " 9 \n", " \n", " 7 \n", " \n", " 6 \n", " \n", " 2016 \n", " \n", " 31 \n", " \n", " 9 \n", " \n", " 1 \n", " \n", " 7 \n", " \n", " 9 \n", " \n", " 7 \n", " \n", " 6 \n", " \n", " 2014 \n", " \n", " 31 \n", " \n", " 9 \n", " \n", " 1 \n", " \n", " 6 \n", "
25346\n", " 0 \n", " Germanwehrlein201620162016\n", " 19 \n", " \n", " 94 \n", " \n", " 32 \n", " \n", " 22 \n", " \n", " 0 \n", " \n", " 17.25\n", " \n", " 0 \n", " \n", " 13 \n", " \n", " 0 \n", " \n", " 2 \n", " \n", " 0.3213\n", " \n", " 0 \n", " \n", " 2.2718\n", " \n", " 0 \n", " \n", " 552 \n", " \n", " 0 \n", " \n", " 1636 \n", " \n", " 76 \n", " \n", " 2118880 \n", " \n", " 22 \n", " \n", " 30.3839\n", " \n", " 99952.8594\n", " \n", " 15.8319\n", " \n", " 1 \n", " \n", " 69241 \n", " \n", " 4 \n", " \n", " 2 \n", " \n", " 0.2027\n", " \n", " 20.0905\n", " \n", " -0.8509\n", " \n", " 18.2369\n", " \n", " 77850.4087\n", " \n", " 3.2136\n", " \n", " 49708 \n", " \n", " 163522878 \n", " \n", " 25901 \n", " \n", " 62 \n", " \n", " 52 \n", " \n", " 2008464 \n", " \n", " 5 \n", " \n", " 21.6129\n", " \n", " 119925.5968\n", " \n", " 1.8065\n", " \n", " 1 \n", " \n", " 18064 \n", " \n", " 1 \n", " \n", " 2 \n", " \n", " 0.1765\n", " \n", " 3.9986\n", " \n", " 1.1414\n", " \n", " 12.8896\n", " \n", " 368710.9372\n", " \n", " 0.9381\n", " \n", " 1340 \n", " \n", " 7435387 \n", " \n", " 112 \n", " \n", " 17 \n", " \n", " 9 \n", " \n", " 6 \n", " \n", " 2017 \n", " \n", " 3 \n", " \n", " 7 \n", " \n", " 6 \n", " \n", " 2016 \n", " \n", " 24 \n", " \n", " 9 \n", " \n", " 1 \n", " \n", " 2 \n", " \n", " 3 \n", " \n", " 7 \n", " \n", " 6 \n", " \n", " 2016 \n", " \n", " 24 \n", " \n", " 9 \n", " \n", " 1 \n", " \n", " 2 \n", " \n", " 3 \n", " \n", " 7 \n", " \n", " 6 \n", " \n", " 2016 \n", " \n", " 24 \n", " \n", " 8 \n", " \n", " 1 \n", " \n", " 2 \n", "
25347\n", " 0 \n", " Britishbutton201620132011\n", " nan \n", " \n", " nan \n", " \n", " 309 \n", " \n", " 22 \n", " \n", " 1 \n", " \n", " 9.6828\n", " \n", " 0.04854\n", " \n", " 1 \n", " \n", " 0 \n", " \n", " 18 \n", " \n", " 0.3055\n", " \n", " 4.2218\n", " \n", " 5.8899\n", " \n", " 0.2153\n", " \n", " 2992 \n", " \n", " 15 \n", " \n", " 16272 \n", " \n", " 78 \n", " \n", " 7503775 \n", " \n", " 22 \n", " \n", " 30.2853\n", " \n", " 95662.1676\n", " \n", " 8.4123\n", " \n", " 1 \n", " \n", " 69828 \n", " \n", " 1 \n", " \n", " 18 \n", " \n", " 0.2244\n", " \n", " 64.7495\n", " \n", " 0.4521\n", " \n", " 18.3544\n", " \n", " 79242.6165\n", " \n", " 4.859\n", " \n", " 492803 \n", " \n", " 1556614792 \n", " \n", " 136885 \n", " \n", " 259 \n", " \n", " 64 \n", " \n", " 2010062 \n", " \n", " 6 \n", " \n", " 24.9344\n", " \n", " 45562.5985\n", " \n", " 1.8571\n", " \n", " 1 \n", " \n", " 14501 \n", " \n", " 1 \n", " \n", " 7 \n", " \n", " 0.3229\n", " \n", " 8.7373\n", " \n", " 1.148\n", " \n", " 13.5509\n", " \n", " 179696.8608\n", " \n", " 0.9353\n", " \n", " 6458 \n", " \n", " 11800713 \n", " \n", " 481 \n", " \n", " 17 \n", " \n", " 9 \n", " \n", " 6 \n", " \n", " 2017 \n", " \n", " 24 \n", " \n", " 7 \n", " \n", " 6 \n", " \n", " 2016 \n", " \n", " 31 \n", " \n", " 9 \n", " \n", " 1 \n", " \n", " 18 \n", " \n", " 24 \n", " \n", " 7 \n", " \n", " 6 \n", " \n", " 2013 \n", " \n", " 31 \n", " \n", " 9 \n", " \n", " 1 \n", " \n", " 18 \n", " \n", " 25 \n", " \n", " 7 \n", " \n", " 6 \n", " \n", " 2011 \n", " \n", " 31 \n", " \n", " 9 \n", " \n", " 1 \n", " \n", " 7 \n", "
25348\n", " 0 \n", " Britishresta201220122011\n", " nan \n", " \n", " nan \n", " \n", " 61 \n", " \n", " 23 \n", " \n", " 0 \n", " \n", " 12.6066\n", " \n", " 0 \n", " \n", " 8 \n", " \n", " 0 \n", " \n", " 4 \n", " \n", " 1.244\n", " \n", " 0 \n", " \n", " 3.4558\n", " \n", " 0 \n", " \n", " 769 \n", " \n", " 0 \n", " \n", " 3284 \n", " \n", " 78 \n", " \n", " 7503980 \n", " \n", " 24 \n", " \n", " 30.3097\n", " \n", " 103049.4318\n", " \n", " 10.7728\n", " \n", " 1 \n", " \n", " 76855 \n", " \n", " 1 \n", " \n", " 4 \n", " \n", " 0.1989\n", " \n", " 44.5439\n", " \n", " 0.1348\n", " \n", " 18.0742\n", " \n", " 144158.4761\n", " \n", " 3.5107\n", " \n", " 99537 \n", " \n", " 338414334 \n", " \n", " 35378 \n", " \n", " 127 \n", " \n", " 57 \n", " \n", " 123124 \n", " \n", " 4 \n", " \n", " 25.1496\n", " \n", " 24084.2598\n", " \n", " 1.7323\n", " \n", " 1 \n", " \n", " 14538 \n", " \n", " 1 \n", " \n", " 4 \n", " \n", " 0.3166\n", " \n", " 8.1337\n", " \n", " 0.8105\n", " \n", " 13.8456\n", " \n", " 9973.774\n", " \n", " 0.7913\n", " \n", " 3194 \n", " \n", " 3058701 \n", " \n", " 220 \n", " \n", " 17 \n", " \n", " 9 \n", " \n", " 6 \n", " \n", " 2017 \n", " \n", " 27 \n", " \n", " 7 \n", " \n", " 6 \n", " \n", " 2012 \n", " \n", " 27 \n", " \n", " 9 \n", " \n", " 1 \n", " \n", " 4 \n", " \n", " 27 \n", " \n", " 7 \n", " \n", " 6 \n", " \n", " 2012 \n", " \n", " 27 \n", " \n", " 9 \n", " \n", " 1 \n", " \n", " 4 \n", " \n", " 25 \n", " \n", " 5 \n", " \n", " 6 \n", " \n", " 2011 \n", " \n", " 27 \n", " \n", " 9 \n", " \n", " 1 \n", " \n", " 4 \n", "
\n", "\n", "

\n", " 25349 rows x 90 columns
\n", " memory usage: 17.74 MB
\n", " name: featuretools_train
\n", " type: getml.DataFrame
\n", " url: http://localhost:1709/#/getdataframe/formula1/featuretools_train/\n", "

\n" ], "text/plain": [ " name win nationality driverRef MODE(driver_standings.year) ... MODE(pit_stops.YEAR(date))\n", " role target categorical categorical categorical ... numerical\n", " 0 1 British hamilton 2007 ... nan \n", " 1 0 German heidfeld 2005 ... nan \n", " 2 0 German rosberg 2006 ... nan \n", " 3 0 Finnish kovalainen 2007 ... nan \n", " 4 0 Japanese nakajima 2007 ... nan \n", " ... ... ... ... ...\n", "25344 0 British jolyon_palmer 2016 ... 2016 \n", "25345 0 French grosjean 2016 ... 2014 \n", "25346 0 German wehrlein 2016 ... 2016 \n", "25347 0 British button 2016 ... 2011 \n", "25348 0 British resta 2012 ... 2011 \n", "\n", " name NUM_UNIQUE(pit_stops.DAY(date)) NUM_UNIQUE(pit_stops.MONTH(date)) NUM_UNIQUE(pit_stops.WEEKDAY(date))\n", " role numerical numerical numerical\n", " 0 nan nan nan \n", " 1 nan nan nan \n", " 2 nan nan nan \n", " 3 nan nan nan \n", " 4 nan nan nan \n", " ... ... ...\n", "25344 21 9 1 \n", "25345 31 9 1 \n", "25346 24 8 1 \n", "25347 31 9 1 \n", "25348 27 9 1 \n", "\n", " name NUM_UNIQUE(pit_stops.YEAR(date))\n", " role numerical\n", " 0 nan \n", " 1 nan \n", " 2 nan \n", " 3 nan \n", " 4 nan \n", " ...\n", "25344 2 \n", "25345 6 \n", "25346 2 \n", "25347 7 \n", "25348 4 \n", "\n", "\n", "25349 rows x 90 columns\n", "memory usage: 17.74 MB\n", "name: featuretools_train\n", "type: getml.DataFrame\n", "url: http://localhost:1709/#/getdataframe/formula1/featuretools_train/" ] }, "execution_count": 43, "metadata": {}, "output_type": "execute_result" } ], "source": [ "featuretools_train.set_role(\"win\", getml.data.roles.target)\n", "featuretools_train.set_role(featuretools_train.roles.unused_float, getml.data.roles.numerical)\n", "featuretools_train.set_role(featuretools_train.roles.unused_string, getml.data.roles.categorical)\n", "\n", "featuretools_train" ] }, { "cell_type": "code", "execution_count": 44, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "90.191042% of all entries of column 'MAX(pit_stops.lap)' are NULL values.\n", "90.191042% of all entries of column 'MAX(pit_stops.milliseconds)' are NULL values.\n", "90.191042% of all entries of column 'MAX(pit_stops.stop)' are NULL values.\n", "90.191042% of all entries of column 'MEAN(pit_stops.lap)' are NULL values.\n", "90.191042% of all entries of column 'MEAN(pit_stops.milliseconds)' are NULL values.\n", "90.191042% of all entries of column 'MEAN(pit_stops.stop)' are NULL values.\n", "90.191042% of all entries of column 'MIN(pit_stops.lap)' are NULL values.\n", "90.191042% of all entries of column 'MIN(pit_stops.milliseconds)' are NULL values.\n", "90.191042% of all entries of column 'MIN(pit_stops.stop)' are NULL values.\n", "90.191042% of all entries of column 'NUM_UNIQUE(pit_stops.year)' are NULL values.\n", "90.351581% of all entries of column 'SKEW(pit_stops.lap)' are NULL values.\n", "90.351581% of all entries of column 'SKEW(pit_stops.milliseconds)' are NULL values.\n", "90.351581% of all entries of column 'SKEW(pit_stops.stop)' are NULL values.\n", "90.239204% of all entries of column 'STD(pit_stops.lap)' are NULL values.\n", "90.239204% of all entries of column 'STD(pit_stops.milliseconds)' are NULL values.\n", "90.239204% of all entries of column 'STD(pit_stops.stop)' are NULL values.\n", "90.191042% of all entries of column 'MODE(pit_stops.DAY(date))' are NULL values.\n", "90.191042% of all entries of column 'MODE(pit_stops.MONTH(date))' are NULL values.\n", "90.191042% of all entries of column 'MODE(pit_stops.WEEKDAY(date))' are NULL values.\n", "90.191042% of all entries of column 'MODE(pit_stops.YEAR(date))' are NULL values.\n", "90.191042% of all entries of column 'NUM_UNIQUE(pit_stops.DAY(date))' are NULL values.\n", "90.191042% of all entries of column 'NUM_UNIQUE(pit_stops.MONTH(date))' are NULL values.\n", "90.191042% of all entries of column 'NUM_UNIQUE(pit_stops.WEEKDAY(date))' are NULL values.\n", "90.191042% of all entries of column 'NUM_UNIQUE(pit_stops.YEAR(date))' are NULL values.\n", "90.191042% of all entries of column 'MODE(pit_stops.year)' are NULL values.\n" ] }, { "data": { "text/html": [ "\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
name winnationalitydriverRef MODE(driver_standings.year)MODE(lap_times.year)MODE(pit_stops.year) position numberCOUNT(driver_standings)MAX(driver_standings.position)MAX(driver_standings.win)MEAN(driver_standings.position)MEAN(driver_standings.win)MIN(driver_standings.position)MIN(driver_standings.win)NUM_UNIQUE(driver_standings.year)SKEW(driver_standings.position)SKEW(driver_standings.win)STD(driver_standings.position)STD(driver_standings.win)SUM(driver_standings.position)SUM(driver_standings.win)COUNT(lap_times)MAX(lap_times.lap)MAX(lap_times.milliseconds)MAX(lap_times.position)MEAN(lap_times.lap)MEAN(lap_times.milliseconds)MEAN(lap_times.position)MIN(lap_times.lap)MIN(lap_times.milliseconds)MIN(lap_times.position)NUM_UNIQUE(lap_times.year)SKEW(lap_times.lap)SKEW(lap_times.milliseconds)SKEW(lap_times.position)STD(lap_times.lap)STD(lap_times.milliseconds)STD(lap_times.position)SUM(lap_times.lap)SUM(lap_times.milliseconds)SUM(lap_times.position)COUNT(pit_stops)MAX(pit_stops.lap)MAX(pit_stops.milliseconds)MAX(pit_stops.stop)MEAN(pit_stops.lap)MEAN(pit_stops.milliseconds)MEAN(pit_stops.stop)MIN(pit_stops.lap)MIN(pit_stops.milliseconds)MIN(pit_stops.stop)NUM_UNIQUE(pit_stops.year)SKEW(pit_stops.lap)SKEW(pit_stops.milliseconds)SKEW(pit_stops.stop)STD(pit_stops.lap)STD(pit_stops.milliseconds)STD(pit_stops.stop)SUM(pit_stops.lap)SUM(pit_stops.milliseconds)SUM(pit_stops.stop)DAY(date)MONTH(date)WEEKDAY(date)YEAR(date)MODE(driver_standings.DAY(date))MODE(driver_standings.MONTH(date))MODE(driver_standings.WEEKDAY(date))MODE(driver_standings.YEAR(date))NUM_UNIQUE(driver_standings.DAY(date))NUM_UNIQUE(driver_standings.MONTH(date))NUM_UNIQUE(driver_standings.WEEKDAY(date))NUM_UNIQUE(driver_standings.YEAR(date))MODE(lap_times.DAY(date))MODE(lap_times.MONTH(date))MODE(lap_times.WEEKDAY(date))MODE(lap_times.YEAR(date))NUM_UNIQUE(lap_times.DAY(date))NUM_UNIQUE(lap_times.MONTH(date))NUM_UNIQUE(lap_times.WEEKDAY(date))NUM_UNIQUE(lap_times.YEAR(date))MODE(pit_stops.DAY(date))MODE(pit_stops.MONTH(date))MODE(pit_stops.WEEKDAY(date))MODE(pit_stops.YEAR(date))NUM_UNIQUE(pit_stops.DAY(date))NUM_UNIQUE(pit_stops.MONTH(date))NUM_UNIQUE(pit_stops.WEEKDAY(date))NUM_UNIQUE(pit_stops.YEAR(date))
roletargetcategoricalcategorical categorical categorical categorical numericalnumerical numerical numerical numerical numerical numerical numerical numerical numerical numerical numerical numerical numerical numerical numerical numerical numerical numerical numerical numerical numerical numerical numerical numerical numerical numerical numerical numerical numerical numerical numerical numerical numerical numerical numerical numerical numerical numerical numerical numerical numerical numerical numerical numerical numerical numerical numerical numerical numerical numerical numerical numerical numerical numerical numericalnumerical numerical numerical numerical numerical numerical numerical numerical numerical numerical numerical numerical numerical numerical numerical numerical numerical numerical numerical numerical numerical numerical numerical numerical numerical numerical numerical numerical
0\n", " 0 \n", " Spanishalonso20052006NULL\n", " 12 \n", " \n", " 5 \n", " \n", " 105 \n", " \n", " 23 \n", " \n", " 1 \n", " \n", " 5.6667\n", " \n", " 0.181\n", " \n", " 1 \n", " \n", " 0 \n", " \n", " 6 \n", " \n", " 1.7319\n", " \n", " 1.6816\n", " \n", " 7.1598\n", " \n", " 0.3868\n", " \n", " 595 \n", " \n", " 19 \n", " \n", " 5769 \n", " \n", " 78 \n", " \n", " 1406432 \n", " \n", " 21 \n", " \n", " 30.436\n", " \n", " 88439.8289\n", " \n", " 5.2479\n", " \n", " 1 \n", " \n", " 70526 \n", " \n", " 1 \n", " \n", " 6 \n", " \n", " 0.2301\n", " \n", " 34.9402\n", " \n", " 1.3932\n", " \n", " 18.3774\n", " \n", " 22633.3599\n", " \n", " 4.9145\n", " \n", " 175585 \n", " \n", " 510209373 \n", " \n", " 30275 \n", " \n", " 0 \n", " \n", " nan \n", " \n", " nan \n", " \n", " nan \n", " \n", " nan \n", " \n", " nan \n", " \n", " nan \n", " \n", " nan \n", " \n", " nan \n", " \n", " nan \n", " \n", " nan \n", " \n", " nan \n", " \n", " nan \n", " \n", " nan \n", " \n", " nan \n", " \n", " nan \n", " \n", " nan \n", " \n", " 0 \n", " \n", " 0 \n", " \n", " 0 \n", " \n", " 16 \n", " \n", " 3 \n", " \n", " 6 \n", " \n", " 2008 \n", " \n", " 1 \n", " \n", " 7 \n", " \n", " 6 \n", " \n", " 2005 \n", " \n", " 31 \n", " \n", " 8 \n", " \n", " 1 \n", " \n", " 6 \n", " \n", " 24 \n", " \n", " 7 \n", " \n", " 6 \n", " \n", " 2006 \n", " \n", " 31 \n", " \n", " 8 \n", " \n", " 1 \n", " \n", " 6 \n", " \n", " nan \n", " \n", " nan \n", " \n", " nan \n", " \n", " nan \n", " \n", " nan \n", " \n", " nan \n", " \n", " nan \n", " \n", " nan \n", "
1\n", " 0 \n", " FrenchbourdaisNULLNULLNULL\n", " 18 \n", " \n", " 14 \n", " \n", " 0 \n", " \n", " nan \n", " \n", " nan \n", " \n", " nan \n", " \n", " nan \n", " \n", " nan \n", " \n", " nan \n", " \n", " nan \n", " \n", " nan \n", " \n", " nan \n", " \n", " nan \n", " \n", " nan \n", " \n", " 0 \n", " \n", " 0 \n", " \n", " 0 \n", " \n", " nan \n", " \n", " nan \n", " \n", " nan \n", " \n", " nan \n", " \n", " nan \n", " \n", " nan \n", " \n", " nan \n", " \n", " nan \n", " \n", " nan \n", " \n", " nan \n", " \n", " nan \n", " \n", " nan \n", " \n", " nan \n", " \n", " nan \n", " \n", " nan \n", " \n", " nan \n", " \n", " 0 \n", " \n", " 0 \n", " \n", " 0 \n", " \n", " 0 \n", " \n", " nan \n", " \n", " nan \n", " \n", " nan \n", " \n", " nan \n", " \n", " nan \n", " \n", " nan \n", " \n", " nan \n", " \n", " nan \n", " \n", " nan \n", " \n", " nan \n", " \n", " nan \n", " \n", " nan \n", " \n", " nan \n", " \n", " nan \n", " \n", " nan \n", " \n", " nan \n", " \n", " 0 \n", " \n", " 0 \n", " \n", " 0 \n", " \n", " 16 \n", " \n", " 3 \n", " \n", " 6 \n", " \n", " 2008 \n", " \n", " nan \n", " \n", " nan \n", " \n", " nan \n", " \n", " nan \n", " \n", " nan \n", " \n", " nan \n", " \n", " nan \n", " \n", " nan \n", " \n", " nan \n", " \n", " nan \n", " \n", " nan \n", " \n", " nan \n", " \n", " nan \n", " \n", " nan \n", " \n", " nan \n", " \n", " nan \n", " \n", " nan \n", " \n", " nan \n", " \n", " nan \n", " \n", " nan \n", " \n", " nan \n", " \n", " nan \n", " \n", " nan \n", " \n", " nan \n", "
2\n", " 0 \n", " Germanrosberg20062007NULL\n", " 16 \n", " \n", " 7 \n", " \n", " 36 \n", " \n", " 17 \n", " \n", " 0 \n", " \n", " 11.7222\n", " \n", " 0 \n", " \n", " 3 \n", " \n", " 0 \n", " \n", " 3 \n", " \n", " -0.1958\n", " \n", " 0 \n", " \n", " 3.4691\n", " \n", " 0 \n", " \n", " 422 \n", " \n", " 0 \n", " \n", " 1685 \n", " \n", " 77 \n", " \n", " 191891 \n", " \n", " 22 \n", " \n", " 30.381\n", " \n", " 90110.451\n", " \n", " 9.7822\n", " \n", " 1 \n", " \n", " 73159 \n", " \n", " 2 \n", " \n", " 3 \n", " \n", " 0.2179\n", " \n", " 1.8323\n", " \n", " 0.5148\n", " \n", " 18.5504\n", " \n", " 14476.8352\n", " \n", " 3.8237\n", " \n", " 51192 \n", " \n", " 151836110 \n", " \n", " 16483 \n", " \n", " 0 \n", " \n", " nan \n", " \n", " nan \n", " \n", " nan \n", " \n", " nan \n", " \n", " nan \n", " \n", " nan \n", " \n", " nan \n", " \n", " nan \n", " \n", " nan \n", " \n", " nan \n", " \n", " nan \n", " \n", " nan \n", " \n", " nan \n", " \n", " nan \n", " \n", " nan \n", " \n", " nan \n", " \n", " 0 \n", " \n", " 0 \n", " \n", " 0 \n", " \n", " 23 \n", " \n", " 3 \n", " \n", " 6 \n", " \n", " 2008 \n", " \n", " 8 \n", " \n", " 7 \n", " \n", " 6 \n", " \n", " 2006 \n", " \n", " 25 \n", " \n", " 8 \n", " \n", " 1 \n", " \n", " 3 \n", " \n", " 16 \n", " \n", " 5 \n", " \n", " 6 \n", " \n", " 2007 \n", " \n", " 25 \n", " \n", " 8 \n", " \n", " 1 \n", " \n", " 3 \n", " \n", " nan \n", " \n", " nan \n", " \n", " nan \n", " \n", " nan \n", " \n", " nan \n", " \n", " nan \n", " \n", " nan \n", " \n", " nan \n", "
3\n", " 0 \n", " Japanesesato20042007NULL\n", " 20 \n", " \n", " 18 \n", " \n", " 84 \n", " \n", " 23 \n", " \n", " 0 \n", " \n", " 16.9405\n", " \n", " 0 \n", " \n", " 7 \n", " \n", " 0 \n", " \n", " 6 \n", " \n", " -0.493\n", " \n", " 0 \n", " \n", " 5.5479\n", " \n", " 0 \n", " \n", " 1423 \n", " \n", " 0 \n", " \n", " 4309 \n", " \n", " 76 \n", " \n", " 1921214 \n", " \n", " 22 \n", " \n", " 29.1091\n", " \n", " 91287.2075\n", " \n", " 12.4342\n", " \n", " 1 \n", " \n", " 70727 \n", " \n", " 1 \n", " \n", " 7 \n", " \n", " 0.2832\n", " \n", " 32.4719\n", " \n", " -0.2034\n", " \n", " 18.0839\n", " \n", " 42719.4804\n", " \n", " 4.861\n", " \n", " 125431 \n", " \n", " 393356577 \n", " \n", " 53579 \n", " \n", " 0 \n", " \n", " nan \n", " \n", " nan \n", " \n", " nan \n", " \n", " nan \n", " \n", " nan \n", " \n", " nan \n", " \n", " nan \n", " \n", " nan \n", " \n", " nan \n", " \n", " nan \n", " \n", " nan \n", " \n", " nan \n", " \n", " nan \n", " \n", " nan \n", " \n", " nan \n", " \n", " nan \n", " \n", " 0 \n", " \n", " 0 \n", " \n", " 0 \n", " \n", " 23 \n", " \n", " 3 \n", " \n", " 6 \n", " \n", " 2008 \n", " \n", " 12 \n", " \n", " 7 \n", " \n", " 6 \n", " \n", " 2004 \n", " \n", " 31 \n", " \n", " 8 \n", " \n", " 1 \n", " \n", " 6 \n", " \n", " 25 \n", " \n", " 7 \n", " \n", " 6 \n", " \n", " 2007 \n", " \n", " 31 \n", " \n", " 8 \n", " \n", " 1 \n", " \n", " 7 \n", " \n", " nan \n", " \n", " nan \n", " \n", " nan \n", " \n", " nan \n", " \n", " nan \n", " \n", " nan \n", " \n", " nan \n", " \n", " nan \n", "
4\n", " 0 \n", " Frenchbourdais20082008NULL\n", " 15 \n", " \n", " 14 \n", " \n", " 2 \n", " \n", " 10 \n", " \n", " 0 \n", " \n", " 8.5\n", " \n", " 0 \n", " \n", " 7 \n", " \n", " 0 \n", " \n", " 1 \n", " \n", " nan \n", " \n", " nan \n", " \n", " 2.1213\n", " \n", " 0 \n", " \n", " 17 \n", " \n", " 0 \n", " \n", " 55 \n", " \n", " 55 \n", " \n", " 156156 \n", " \n", " 16 \n", " \n", " 28 \n", " \n", " 98864.3818\n", " \n", " 9.7818\n", " \n", " 1 \n", " \n", " 89534 \n", " \n", " 4 \n", " \n", " 1 \n", " \n", " 0 \n", " \n", " 2.2604\n", " \n", " -0.06348\n", " \n", " 16.0208\n", " \n", " 17491.8075\n", " \n", " 4.3149\n", " \n", " 1540 \n", " \n", " 5437541 \n", " \n", " 538 \n", " \n", " 0 \n", " \n", " nan \n", " \n", " nan \n", " \n", " nan \n", " \n", " nan \n", " \n", " nan \n", " \n", " nan \n", " \n", " nan \n", " \n", " nan \n", " \n", " nan \n", " \n", " nan \n", " \n", " nan \n", " \n", " nan \n", " \n", " nan \n", " \n", " nan \n", " \n", " nan \n", " \n", " nan \n", " \n", " 0 \n", " \n", " 0 \n", " \n", " 0 \n", " \n", " 6 \n", " \n", " 4 \n", " \n", " 6 \n", " \n", " 2008 \n", " \n", " 16 \n", " \n", " 3 \n", " \n", " 6 \n", " \n", " 2008 \n", " \n", " 2 \n", " \n", " 1 \n", " \n", " 1 \n", " \n", " 1 \n", " \n", " 16 \n", " \n", " 3 \n", " \n", " 6 \n", " \n", " 2008 \n", " \n", " 1 \n", " \n", " 1 \n", " \n", " 1 \n", " \n", " 1 \n", " \n", " nan \n", " \n", " nan \n", " \n", " nan \n", " \n", " nan \n", " \n", " nan \n", " \n", " nan \n", " \n", " nan \n", " \n", " nan \n", "
\n", " ... \n", " ...............\n", " ... \n", " \n", " ... \n", " \n", " ... \n", " \n", " ... \n", " \n", " ... \n", " \n", " ... \n", " \n", " ... \n", " \n", " ... \n", " \n", " ... \n", " \n", " ... \n", " \n", " ... \n", " \n", " ... \n", " \n", " ... \n", " \n", " ... \n", " \n", " ... \n", " \n", " ... \n", " \n", " ... \n", " \n", " ... \n", " \n", " ... \n", " \n", " ... \n", " \n", " ... \n", " \n", " ... \n", " \n", " ... \n", " \n", " ... \n", " \n", " ... \n", " \n", " ... \n", " \n", " ... \n", " \n", " ... \n", " \n", " ... \n", " \n", " ... \n", " \n", " ... \n", " \n", " ... \n", " \n", " ... \n", " \n", " ... \n", " \n", " ... \n", " \n", " ... \n", " \n", " ... \n", " \n", " ... \n", " \n", " ... \n", " \n", " ... \n", " \n", " ... \n", " \n", " ... \n", " \n", " ... \n", " \n", " ... \n", " \n", " ... \n", " \n", " ... \n", " \n", " ... \n", " \n", " ... \n", " \n", " ... \n", " \n", " ... \n", " \n", " ... \n", " \n", " ... \n", " \n", " ... \n", " \n", " ... \n", " \n", " ... \n", " \n", " ... \n", " \n", " ... \n", " \n", " ... \n", " \n", " ... \n", " \n", " ... \n", " \n", " ... \n", " \n", " ... \n", " \n", " ... \n", " \n", " ... \n", " \n", " ... \n", " \n", " ... \n", " \n", " ... \n", " \n", " ... \n", " \n", " ... \n", " \n", " ... \n", " \n", " ... \n", " \n", " ... \n", " \n", " ... \n", " \n", " ... \n", " \n", " ... \n", " \n", " ... \n", " \n", " ... \n", " \n", " ... \n", " \n", " ... \n", " \n", " ... \n", " \n", " ... \n", " \n", " ... \n", " \n", " ... \n", " \n", " ... \n", "
6224\n", " 0 \n", " Britishjolyon_palmer201620162016\n", " 17 \n", " \n", " 30 \n", " \n", " 33 \n", " \n", " 20 \n", " \n", " 0 \n", " \n", " 18.0303\n", " \n", " 0 \n", " \n", " 11 \n", " \n", " 0 \n", " \n", " 2 \n", " \n", " -1.7159\n", " \n", " 0 \n", " \n", " 1.8622\n", " \n", " 0 \n", " \n", " 595 \n", " \n", " 0 \n", " \n", " 1488 \n", " \n", " 78 \n", " \n", " 1223356 \n", " \n", " 22 \n", " \n", " 29.7009\n", " \n", " 98587.2056\n", " \n", " 14.5195\n", " \n", " 1 \n", " \n", " 68652 \n", " \n", " 7 \n", " \n", " 2 \n", " \n", " 0.2691\n", " \n", " 20.8455\n", " \n", " 0.3776\n", " \n", " 18.6186\n", " \n", " 43789.6099\n", " \n", " 3.0523\n", " \n", " 44195 \n", " \n", " 146697762 \n", " \n", " 21605 \n", " \n", " 55 \n", " \n", " 50 \n", " \n", " 1088294 \n", " \n", " 4 \n", " \n", " 20.8545\n", " \n", " 61560.7273\n", " \n", " 1.8\n", " \n", " 1 \n", " \n", " 16851 \n", " \n", " 1 \n", " \n", " 2 \n", " \n", " 0.3181\n", " \n", " 5.1018\n", " \n", " 0.8728\n", " \n", " 13.5857\n", " \n", " 192932.4401\n", " \n", " 0.9108\n", " \n", " 1147 \n", " \n", " 3385840 \n", " \n", " 99 \n", " \n", " 3 \n", " \n", " 9 \n", " \n", " 6 \n", " \n", " 2017 \n", " \n", " 9 \n", " \n", " 7 \n", " \n", " 6 \n", " \n", " 2016 \n", " \n", " 25 \n", " \n", " 9 \n", " \n", " 1 \n", " \n", " 2 \n", " \n", " 9 \n", " \n", " 7 \n", " \n", " 6 \n", " \n", " 2016 \n", " \n", " 25 \n", " \n", " 9 \n", " \n", " 1 \n", " \n", " 2 \n", " \n", " 9 \n", " \n", " 7 \n", " \n", " 6 \n", " \n", " 2016 \n", " \n", " 21 \n", " \n", " 9 \n", " \n", " 1 \n", " \n", " 2 \n", "
6225\n", " 0 \n", " Britishresta201220122011\n", " nan \n", " \n", " nan \n", " \n", " 60 \n", " \n", " 23 \n", " \n", " 0 \n", " \n", " 12.4333\n", " \n", " 0 \n", " \n", " 8 \n", " \n", " 0 \n", " \n", " 4 \n", " \n", " 1.155\n", " \n", " 0 \n", " \n", " 3.2068\n", " \n", " 0 \n", " \n", " 746 \n", " \n", " 0 \n", " \n", " 3284 \n", " \n", " 78 \n", " \n", " 7503980 \n", " \n", " 24 \n", " \n", " 30.3097\n", " \n", " 103049.4318\n", " \n", " 10.7728\n", " \n", " 1 \n", " \n", " 76855 \n", " \n", " 1 \n", " \n", " 4 \n", " \n", " 0.1989\n", " \n", " 44.5439\n", " \n", " 0.1348\n", " \n", " 18.0742\n", " \n", " 144158.4761\n", " \n", " 3.5107\n", " \n", " 99537 \n", " \n", " 338414334 \n", " \n", " 35378 \n", " \n", " 127 \n", " \n", " 57 \n", " \n", " 123124 \n", " \n", " 4 \n", " \n", " 25.1496\n", " \n", " 24084.2598\n", " \n", " 1.7323\n", " \n", " 1 \n", " \n", " 14538 \n", " \n", " 1 \n", " \n", " 4 \n", " \n", " 0.3166\n", " \n", " 8.1337\n", " \n", " 0.8105\n", " \n", " 13.8456\n", " \n", " 9973.774\n", " \n", " 0.7913\n", " \n", " 3194 \n", " \n", " 3058701 \n", " \n", " 220 \n", " \n", " 3 \n", " \n", " 9 \n", " \n", " 6 \n", " \n", " 2017 \n", " \n", " 27 \n", " \n", " 7 \n", " \n", " 6 \n", " \n", " 2012 \n", " \n", " 27 \n", " \n", " 9 \n", " \n", " 1 \n", " \n", " 4 \n", " \n", " 27 \n", " \n", " 7 \n", " \n", " 6 \n", " \n", " 2012 \n", " \n", " 27 \n", " \n", " 9 \n", " \n", " 1 \n", " \n", " 4 \n", " \n", " 25 \n", " \n", " 5 \n", " \n", " 6 \n", " \n", " 2011 \n", " \n", " 27 \n", " \n", " 9 \n", " \n", " 1 \n", " \n", " 4 \n", "
6226\n", " 0 \n", " Finnishbottas201620162016\n", " 6 \n", " \n", " 77 \n", " \n", " 91 \n", " \n", " 18 \n", " \n", " 1 \n", " \n", " 8.1868\n", " \n", " 0.02198\n", " \n", " 3 \n", " \n", " 0 \n", " \n", " 5 \n", " \n", " 1.0124\n", " \n", " 6.6307\n", " \n", " 4.9976\n", " \n", " 0.1474\n", " \n", " 745 \n", " \n", " 2 \n", " \n", " 5153 \n", " \n", " 78 \n", " \n", " 3689718 \n", " \n", " 22 \n", " \n", " 30.4306\n", " \n", " 99678.869\n", " \n", " 8.0584\n", " \n", " 1 \n", " \n", " 67847 \n", " \n", " 1 \n", " \n", " 5 \n", " \n", " 0.2271\n", " \n", " 32.1149\n", " \n", " 0.5698\n", " \n", " 18.18\n", " \n", " 74208.5105\n", " \n", " 4.885\n", " \n", " 156809 \n", " \n", " 513645212 \n", " \n", " 41525 \n", " \n", " 183 \n", " \n", " 59 \n", " \n", " 2008595 \n", " \n", " 5 \n", " \n", " 24.1093\n", " \n", " 68069.5082\n", " \n", " 1.7268\n", " \n", " 1 \n", " \n", " 14978 \n", " \n", " 1 \n", " \n", " 5 \n", " \n", " 0.3284\n", " \n", " 5.9016\n", " \n", " 1.0949\n", " \n", " 13.4151\n", " \n", " 242520.4324\n", " \n", " 0.8527\n", " \n", " 4412 \n", " \n", " 12456720 \n", " \n", " 316 \n", " \n", " 17 \n", " \n", " 9 \n", " \n", " 6 \n", " \n", " 2017 \n", " \n", " 9 \n", " \n", " 7 \n", " \n", " 6 \n", " \n", " 2016 \n", " \n", " 31 \n", " \n", " 9 \n", " \n", " 1 \n", " \n", " 5 \n", " \n", " 9 \n", " \n", " 7 \n", " \n", " 6 \n", " \n", " 2016 \n", " \n", " 31 \n", " \n", " 9 \n", " \n", " 1 \n", " \n", " 5 \n", " \n", " 9 \n", " \n", " 7 \n", " \n", " 6 \n", " \n", " 2016 \n", " \n", " 31 \n", " \n", " 9 \n", " \n", " 1 \n", " \n", " 5 \n", "
6227\n", " 0 \n", " Spanishsainz201620162016\n", " 10 \n", " \n", " 55 \n", " \n", " 53 \n", " \n", " 16 \n", " \n", " 0 \n", " \n", " 11.8679\n", " \n", " 0 \n", " \n", " 7 \n", " \n", " 0 \n", " \n", " 3 \n", " \n", " 0.06274\n", " \n", " 0 \n", " \n", " 2.481\n", " \n", " 0 \n", " \n", " 629 \n", " \n", " 0 \n", " \n", " 2690 \n", " \n", " 78 \n", " \n", " 2122068 \n", " \n", " 21 \n", " \n", " 29.7457\n", " \n", " 99861.4349\n", " \n", " 10.655\n", " \n", " 1 \n", " \n", " 69150 \n", " \n", " 3 \n", " \n", " 3 \n", " \n", " 0.3078\n", " \n", " 24.5072\n", " \n", " 0.3527\n", " \n", " 18.3133\n", " \n", " 61998.6099\n", " \n", " 3.5636\n", " \n", " 80016 \n", " \n", " 268627260 \n", " \n", " 28662 \n", " \n", " 97 \n", " \n", " 51 \n", " \n", " 2008828 \n", " \n", " 4 \n", " \n", " 22.6289\n", " \n", " 84961.6907\n", " \n", " 1.6701\n", " \n", " 1 \n", " \n", " 14966 \n", " \n", " 1 \n", " \n", " 3 \n", " \n", " 0.3388\n", " \n", " 5.1188\n", " \n", " 1.0447\n", " \n", " 12.7919\n", " \n", " 297744.5008\n", " \n", " 0.8\n", " \n", " 2195 \n", " \n", " 8241284 \n", " \n", " 162 \n", " \n", " 17 \n", " \n", " 9 \n", " \n", " 6 \n", " \n", " 2017 \n", " \n", " 3 \n", " \n", " 7 \n", " \n", " 6 \n", " \n", " 2016 \n", " \n", " 29 \n", " \n", " 9 \n", " \n", " 1 \n", " \n", " 3 \n", " \n", " 30 \n", " \n", " 5 \n", " \n", " 6 \n", " \n", " 2016 \n", " \n", " 29 \n", " \n", " 9 \n", " \n", " 1 \n", " \n", " 3 \n", " \n", " 9 \n", " \n", " 7 \n", " \n", " 6 \n", " \n", " 2016 \n", " \n", " 29 \n", " \n", " 9 \n", " \n", " 1 \n", " \n", " 3 \n", "
6228\n", " 0 \n", " Russiankvyat201620152016\n", " 13 \n", " \n", " 26 \n", " \n", " 72 \n", " \n", " 22 \n", " \n", " 0 \n", " \n", " 12.6111\n", " \n", " 0 \n", " \n", " 7 \n", " \n", " 0 \n", " \n", " 4 \n", " \n", " -0.3133\n", " \n", " 0 \n", " \n", " 3.4214\n", " \n", " 0 \n", " \n", " 908 \n", " \n", " 0 \n", " \n", " 3585 \n", " \n", " 78 \n", " \n", " 3690660 \n", " \n", " 22 \n", " \n", " 29.2739\n", " \n", " 100722.5623\n", " \n", " 11.2388\n", " \n", " 1 \n", " \n", " 68061 \n", " \n", " 2 \n", " \n", " 4 \n", " \n", " 0.2624\n", " \n", " 33.405\n", " \n", " -0.07759\n", " \n", " 18.0505\n", " \n", " 79720.0053\n", " \n", " 4.0792\n", " \n", " 104947 \n", " \n", " 361090386 \n", " \n", " 40291 \n", " \n", " 145 \n", " \n", " 59 \n", " \n", " 2011266 \n", " \n", " 5 \n", " \n", " 23.6207\n", " \n", " 64171.0069\n", " \n", " 1.7724\n", " \n", " 1 \n", " \n", " 16139 \n", " \n", " 1 \n", " \n", " 4 \n", " \n", " 0.2769\n", " \n", " 6.5459\n", " \n", " 0.9965\n", " \n", " 15.0675\n", " \n", " 236423.1748\n", " \n", " 0.8559\n", " \n", " 3425 \n", " \n", " 9304796 \n", " \n", " 257 \n", " \n", " 17 \n", " \n", " 9 \n", " \n", " 6 \n", " \n", " 2017 \n", " \n", " 9 \n", " \n", " 7 \n", " \n", " 6 \n", " \n", " 2016 \n", " \n", " 31 \n", " \n", " 9 \n", " \n", " 1 \n", " \n", " 4 \n", " \n", " 30 \n", " \n", " 7 \n", " \n", " 6 \n", " \n", " 2015 \n", " \n", " 31 \n", " \n", " 9 \n", " \n", " 1 \n", " \n", " 4 \n", " \n", " 9 \n", " \n", " 7 \n", " \n", " 6 \n", " \n", " 2016 \n", " \n", " 31 \n", " \n", " 9 \n", " \n", " 1 \n", " \n", " 4 \n", "
\n", "\n", "

\n", " 6229 rows x 90 columns
\n", " memory usage: 4.36 MB
\n", " name: featuretools_test
\n", " type: getml.DataFrame
\n", " url: http://localhost:1709/#/getdataframe/formula1/featuretools_test/\n", "

\n" ], "text/plain": [ "name win nationality driverRef MODE(driver_standings.year) ... MODE(pit_stops.YEAR(date))\n", "role target categorical categorical categorical ... numerical\n", " 0 0 Spanish alonso 2005 ... nan \n", " 1 0 French bourdais NULL ... nan \n", " 2 0 German rosberg 2006 ... nan \n", " 3 0 Japanese sato 2004 ... nan \n", " 4 0 French bourdais 2008 ... nan \n", " ... ... ... ... ...\n", "6224 0 British jolyon_palmer 2016 ... 2016 \n", "6225 0 British resta 2012 ... 2011 \n", "6226 0 Finnish bottas 2016 ... 2016 \n", "6227 0 Spanish sainz 2016 ... 2016 \n", "6228 0 Russian kvyat 2016 ... 2016 \n", "\n", "name NUM_UNIQUE(pit_stops.DAY(date)) NUM_UNIQUE(pit_stops.MONTH(date)) NUM_UNIQUE(pit_stops.WEEKDAY(date))\n", "role numerical numerical numerical\n", " 0 nan nan nan \n", " 1 nan nan nan \n", " 2 nan nan nan \n", " 3 nan nan nan \n", " 4 nan nan nan \n", " ... ... ...\n", "6224 21 9 1 \n", "6225 27 9 1 \n", "6226 31 9 1 \n", "6227 29 9 1 \n", "6228 31 9 1 \n", "\n", "name NUM_UNIQUE(pit_stops.YEAR(date))\n", "role numerical\n", " 0 nan \n", " 1 nan \n", " 2 nan \n", " 3 nan \n", " 4 nan \n", " ...\n", "6224 2 \n", "6225 4 \n", "6226 5 \n", "6227 3 \n", "6228 4 \n", "\n", "\n", "6229 rows x 90 columns\n", "memory usage: 4.36 MB\n", "name: featuretools_test\n", "type: getml.DataFrame\n", "url: http://localhost:1709/#/getdataframe/formula1/featuretools_test/" ] }, "execution_count": 44, "metadata": {}, "output_type": "execute_result" } ], "source": [ "featuretools_test.set_role(\"win\", getml.data.roles.target)\n", "featuretools_test.set_role(featuretools_test.roles.unused_float, getml.data.roles.numerical)\n", "featuretools_test.set_role(featuretools_test.roles.unused_string, getml.data.roles.categorical)\n", "\n", "featuretools_test" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We train an untuned XGBoostRegressor on top of featuretools' features, just like we have done for getML's features.\n", "\n", "Since some of featuretools features are categorical, we allow the pipeline to include these features as well. Other features contain NaN values, which is why we also apply getML's Imputation preprocessor." ] }, { "cell_type": "code", "execution_count": 45, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
Pipeline(data_model='population',\n",
       "         feature_learners=[],\n",
       "         feature_selectors=[],\n",
       "         include_categorical=True,\n",
       "         loss_function=None,\n",
       "         peripheral=[],\n",
       "         predictors=['XGBoostClassifier'],\n",
       "         preprocessors=['Imputation'],\n",
       "         share_selected_features=0.5,\n",
       "         tags=['featuretools'])
" ], "text/plain": [ "Pipeline(data_model='population',\n", " feature_learners=[],\n", " feature_selectors=[],\n", " include_categorical=True,\n", " loss_function=None,\n", " peripheral=[],\n", " predictors=['XGBoostClassifier'],\n", " preprocessors=['Imputation'],\n", " share_selected_features=0.5,\n", " tags=['featuretools'])" ] }, "execution_count": 45, "metadata": {}, "output_type": "execute_result" } ], "source": [ "imputation = getml.preprocessors.Imputation()\n", "\n", "predictor = getml.predictors.XGBoostClassifier(n_jobs=1)\n", "\n", "pipe2 = getml.pipeline.Pipeline(\n", " tags=['featuretools'],\n", " preprocessors=[imputation],\n", " predictors=[predictor],\n", " include_categorical=True,\n", ")\n", "\n", "pipe2" ] }, { "cell_type": "code", "execution_count": 46, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Checking data model...\n", "\n", "\n", "Staging...\n", "[========================================] 100%\n", "\n", "Preprocessing...\n", "[========================================] 100%\n", "\n", "Checking...\n", "[========================================] 100%\n", "\n", "\n", "WARNING [COLUMN SHOULD BE UNUSED]: 90.725472% of all entries in column 'mode(pit_stops.year)' in POPULATION__STAGING_TABLE_1 are NULL values. You should consider setting its role to unused_string.\n", "WARNING [COLUMN SHOULD BE UNUSED]: All non-NULL entries in column 'COALESCE( min(lap_times.lap), 1.000000 )' in POPULATION__STAGING_TABLE_1 are equal to each other. You should consider setting its role to unused_float or using it for comparison only (you can do the latter by setting a unit that contains 'comparison only').\n", "WARNING [COLUMN SHOULD BE UNUSED]: All non-NULL entries in column 'COALESCE( min(pit_stops.stop), 1.000000 )' in POPULATION__STAGING_TABLE_1 are equal to each other. You should consider setting its role to unused_float or using it for comparison only (you can do the latter by setting a unit that contains 'comparison only').\n", "WARNING [COLUMN SHOULD BE UNUSED]: All non-NULL entries in column 'COALESCE( mode(lap_times.weekday(date)), 6.000000 )' in POPULATION__STAGING_TABLE_1 are equal to each other. You should consider setting its role to unused_float or using it for comparison only (you can do the latter by setting a unit that contains 'comparison only').\n", "WARNING [COLUMN SHOULD BE UNUSED]: All non-NULL entries in column 'COALESCE( num_unique(lap_times.weekday(date)), 1.000000 )' in POPULATION__STAGING_TABLE_1 are equal to each other. You should consider setting its role to unused_float or using it for comparison only (you can do the latter by setting a unit that contains 'comparison only').\n", "WARNING [COLUMN SHOULD BE UNUSED]: All non-NULL entries in column 'COALESCE( mode(pit_stops.weekday(date)), 6.000000 )' in POPULATION__STAGING_TABLE_1 are equal to each other. You should consider setting its role to unused_float or using it for comparison only (you can do the latter by setting a unit that contains 'comparison only').\n", "WARNING [COLUMN SHOULD BE UNUSED]: All non-NULL entries in column 'COALESCE( num_unique(pit_stops.weekday(date)), 1.000000 )' in POPULATION__STAGING_TABLE_1 are equal to each other. You should consider setting its role to unused_float or using it for comparison only (you can do the latter by setting a unit that contains 'comparison only').\n", "\n", "\n", "Staging...\n", "[========================================] 100%\n", "\n", "Preprocessing...\n", "[========================================] 100%\n", "\n", "XGBoost: Training as predictor...\n", "[========================================] 100%\n", "\n", "\n", "Trained pipeline.\n", "Time taken: 0h:0m:7.319103\n", "\n" ] }, { "data": { "text/html": [ "
Pipeline(data_model='population',\n",
       "         feature_learners=[],\n",
       "         feature_selectors=[],\n",
       "         include_categorical=True,\n",
       "         loss_function=None,\n",
       "         peripheral=[],\n",
       "         predictors=['XGBoostClassifier'],\n",
       "         preprocessors=['Imputation'],\n",
       "         share_selected_features=0.5,\n",
       "         tags=['featuretools'])

url: http://localhost:1709/#/getpipeline/formula1/DDRwHL/0/
" ], "text/plain": [ "Pipeline(data_model='population',\n", " feature_learners=[],\n", " feature_selectors=[],\n", " include_categorical=True,\n", " loss_function=None,\n", " peripheral=[],\n", " predictors=['XGBoostClassifier'],\n", " preprocessors=['Imputation'],\n", " share_selected_features=0.5,\n", " tags=['featuretools'])\n", "\n", "url: http://localhost:1709/#/getpipeline/formula1/DDRwHL/0/" ] }, "execution_count": 46, "metadata": {}, "output_type": "execute_result" } ], "source": [ "pipe2.fit(featuretools_train)" ] }, { "cell_type": "code", "execution_count": 47, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\n", "\n", "Staging...\n", "[========================================] 100%\n", "\n", "Preprocessing...\n", "[========================================] 100%\n", "\n", "\n" ] }, { "data": { "text/html": [ "\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
date time set used targetaccuracy auccross entropy
02021-08-23 21:29:30featuretools_trainwin0.97170.93910.0837
12021-08-23 21:29:30featuretools_testwin0.97240.92020.08684
" ], "text/plain": [ " date time set used target accuracy auc cross entropy\n", "0 2021-08-23 21:29:30 featuretools_train win 0.9717 0.9391 0.0837 \n", "1 2021-08-23 21:29:30 featuretools_test win 0.9724 0.9202 0.08684" ] }, "execution_count": 47, "metadata": {}, "output_type": "execute_result" } ], "source": [ "pipe2.score(featuretools_test)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ " " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 2.6 Studying features\n", "\n", "We would like to understand why getML outperforms featuretools. In particular, getML's FastProp is based on an approach that is very similar to featuretools.\n", "\n", "To investigate this matter, we first take a look at the importance of the features FastProp has learned:" ] }, { "cell_type": "code", "execution_count": 48, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "names, importances = pipe1.features.importances(target_num=0)\n", "\n", "plt.subplots(figsize=(20, 10))\n", "\n", "plt.bar(names[:30], importances[:30], color='#6829c2')\n", "\n", "plt.title(\"feature importances\")\n", "plt.grid(True)\n", "plt.xlabel(\"column\")\n", "plt.ylabel(\"importance\")\n", "plt.xticks(rotation='vertical')\n", "\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We take a look at the most important features, to get an idea where the predictive power comes from:" ] }, { "cell_type": "code", "execution_count": 49, "metadata": { "scrolled": true }, "outputs": [ { "data": { "text/markdown": [ "```sql\n", "DROP TABLE IF EXISTS \"T4__DRIVERREF__MAPPING_TARGET_1_AVG\";\n", "\n", "CREATE TABLE \"T4__DRIVERREF__MAPPING_TARGET_1_AVG\"(key TEXT NOT NULL PRIMARY KEY, value REAL);\n", "\n", "INSERT INTO \"T4__DRIVERREF__MAPPING_TARGET_1_AVG\"(key, value)\n", "VALUES('fangio', 0.3653846153846154),\n", " ('ascari', 0.3055555555555556),\n", " ('michael_schumacher', 0.3032786885245902),\n", " ('hamilton', 0.2981366459627329),\n", " ('stewart', 0.2948717948717949),\n", " ('prost', 0.264367816091954),\n", " ('vettel', 0.2467532467532468),\n", " ('clark', 0.2394366197183098),\n", " ('senna', 0.2323943661971831),\n", " ('damon_hill', 0.2159090909090909),\n", " ('moss', 0.1866666666666667),\n", " ('mansell', 0.1569767441860465),\n", " ('lauda', 0.1390728476821192),\n", " ('alonso', 0.1282051282051282),\n", " ('hakkinen', 0.1278195488721804),\n", " ('rosberg', 0.10625),\n", " ('hunt', 0.1058823529411765),\n", " ('jack_brabham', 0.1052631578947368),\n", " ('piquet', 0.09714285714285714),\n", " ('farina', 0.09523809523809523),\n", " ('jones', 0.09259259259259259),\n", " ('brooks', 0.09090909090909091),\n", " ('scheckter', 0.09),\n", " ('montoya', 0.08536585365853659),\n", " ('emerson_fittipaldi', 0.08403361344537816),\n", " ('rindt', 0.08333333333333333),\n", " ('hulme', 0.08247422680412371),\n", " ('peterson', 0.08247422680412371),\n", " ('reutemann', 0.07936507936507936),\n", " ('mario_andretti', 0.07142857142857142),\n", " ('raikkonen', 0.0684931506849315),\n", " ('villeneuve', 0.06153846153846154),\n", " ('surtees', 0.0576923076923077),\n", " ('hill', 0.05194805194805195),\n", " ('gilles_villeneuve', 0.05),\n", " ('berger', 0.05),\n", " ('keke_rosberg', 0.04901960784313725),\n", " ('hawthorn', 0.04878048780487805),\n", " ('ickx', 0.04878048780487805),\n", " ('gurney', 0.04819277108433735),\n", " ('collins', 0.04761904761904762),\n", " ('arnoux', 0.04697986577181208),\n", " ('massa', 0.04587155963302753),\n", " ('button', 0.04511278195488722),\n", " ('pironi', 0.04347826086956522),\n", " ('coulthard', 0.0427807486631016),\n", " ('revson', 0.0425531914893617),\n", " ('ricciardo', 0.0425531914893617),\n", " ('webber', 0.04216867469879518),\n", " ('ralf_schumacher', 0.03846153846153846),\n", " ('barrichello', 0.036),\n", " ('phil_hill', 0.03448275862068965),\n", " ('rodriguez', 0.03333333333333333),\n", " ('scarfiotti', 0.03333333333333333),\n", " ('laffite', 0.03311258278145696),\n", " ('regazzoni', 0.03225806451612903),\n", " ('jabouille', 0.03076923076923077),\n", " ('baghetti', 0.02941176470588235),\n", " ('flaherty', 0.02941176470588235),\n", " ('watson', 0.02898550724637681),\n", " ('mclaren', 0.02803738317757009),\n", " ('gethin', 0.02777777777777778),\n", " ('musso', 0.02702702702702703),\n", " ('cevert', 0.02631578947368421),\n", " ('ruttman', 0.025),\n", " ('irvine', 0.025),\n", " ('max_verstappen', 0.02380952380952381),\n", " ('hanks', 0.02325581395348837),\n", " ('alboreto', 0.02298850574712644),\n", " ('boutsen', 0.02290076335877863),\n", " ('herbert', 0.02222222222222222),\n", " ('parsons', 0.02083333333333333),\n", " ('bryan', 0.02040816326530612),\n", " ('trintignant', 0.02),\n", " ('kubica', 0.0196078431372549),\n", " ('patrese', 0.01951219512195122),\n", " ('rathmann', 0.01923076923076923),\n", " ('bandini', 0.01851851851851852),\n", " ('tambay', 0.01834862385321101),\n", " ('ginther', 0.01639344262295082),\n", " ('fisichella', 0.01621621621621622),\n", " ('ward', 0.01612903225806452),\n", " ('frentzen', 0.01574803149606299),\n", " ('brambilla', 0.01492537313432836),\n", " ('bottas', 0.01470588235294118),\n", " ('pace', 0.0136986301369863),\n", " ('maldonado', 0.01298701298701299),\n", " ('beltoise', 0.01282051282051282),\n", " ('siffert', 0.01265822784810127),\n", " ('depailler', 0.0108695652173913),\n", " ('angelis', 0.0108695652173913),\n", " ('bonnier', 0.009009009009009009),\n", " ('mass', 0.008771929824561403),\n", " ('panis', 0.007692307692307693),\n", " ('darter', 0),\n", " ('pretorius', 0),\n", " ('adamich', 0),\n", " ('trevor_taylor', 0),\n", " ('love', 0),\n", " ('anderson', 0),\n", " ('bianchi', 0),\n", " ('courage', 0),\n", " ('tingle', 0),\n", " ('attwood', 0),\n", " ('spence', 0),\n", " ('resta', 0),\n", " ('chiron', 0),\n", " ('reece', 0),\n", " ('linden', 0),\n", " ('agabashian', 0),\n", " ('manzon', 0),\n", " ('rosier', 0),\n", " ('villoresi', 0),\n", " ('graffenried', 0),\n", " ('hulkenberg', 0),\n", " ('petrov', 0),\n", " ('bruno_senna', 0),\n", " ('daywalt', 0),\n", " ('perez', 0),\n", " ('vergne', 0),\n", " ('pic', 0),\n", " ('chilton', 0),\n", " ('gutierrez', 0),\n", " ('jules_bianchi', 0),\n", " ('kevin_magnussen', 0),\n", " ('kvyat', 0),\n", " ('ericsson', 0),\n", " ('nasr', 0),\n", " ('sainz', 0),\n", " ('schell', 0),\n", " ('maggs', 0),\n", " ('gregory', 0),\n", " ('andre_pilette', 0),\n", " ('beaufort', 0),\n", " ('burgess', 0),\n", " ('salvadori', 0),\n", " ('trips', 0),\n", " ('herrmann', 0),\n", " ('scarlatti', 0),\n", " ('menditeguy', 0),\n", " ('gonzalez', 0),\n", " ('ireland', 0),\n", " ('thomson', 0),\n", " ('johnson', 0),\n", " ('ertl', 0),\n", " ('hartley', 0),\n", " ('stevenson', 0),\n", " ('freeland', 0),\n", " ('bettenhausen', 0),\n", " ('boyd', 0),\n", " ('gould', 0),\n", " ('behra', 0),\n", " ('paul_russo', 0),\n", " ('martini', 0),\n", " ('larini', 0),\n", " ('katayama', 0),\n", " ('morbidelli', 0),\n", " ('lamy', 0),\n", " ('brundle', 0),\n", " ('montermini', 0),\n", " ('blundell', 0),\n", " ('suzuki', 0),\n", " ('moreno', 0),\n", " ('wendlinger', 0),\n", " ('gachot', 0),\n", " ('magnussen', 0),\n", " ('tarquini', 0),\n", " ('comas', 0),\n", " ('bernard', 0),\n", " ('fittipaldi', 0),\n", " ('lehto', 0),\n", " ('cesaris', 0),\n", " ('alliot', 0),\n", " ('dalmas', 0),\n", " ('warwick', 0),\n", " ('capelli', 0),\n", " ('gugelmin', 0),\n", " ('rosa', 0),\n", " ('heidfeld', 0),\n", " ('kovalainen', 0),\n", " ('glock', 0),\n", " ('sato', 0),\n", " ('trulli', 0),\n", " ('sutil', 0),\n", " ('liuzzi', 0),\n", " ('wurz', 0),\n", " ('speed', 0),\n", " ('albers', 0),\n", " ('klien', 0),\n", " ('grouillard', 0),\n", " ('karthikeyan', 0),\n", " ('zonta', 0),\n", " ('gene', 0),\n", " ('verstappen', 0),\n", " ('alesi', 0),\n", " ('salo', 0),\n", " ('diniz', 0),\n", " ('buemi', 0),\n", " ('badoer', 0),\n", " ('zanardi', 0),\n", " ('hoffmann', 0),\n", " ('henton', 0),\n", " ('daly', 0),\n", " ('villota', 0),\n", " ('keegan', 0),\n", " ('rebaque', 0),\n", " ('merzario', 0),\n", " ('stuck', 0),\n", " ('lunger', 0),\n", " ('stommelen', 0),\n", " ('ian_scheckter', 0),\n", " ('pryce', 0),\n", " ('jarier', 0),\n", " ('oliver', 0),\n", " ('amon', 0),\n", " ('pescarolo', 0),\n", " ('wilson_fittipaldi', 0),\n", " ('keizan', 0),\n", " ('charlton', 0),\n", " ('hailwood', 0),\n", " ('ganley', 0),\n", " ('redman', 0),\n", " ('schenken', 0),\n", " ('palmer', 0),\n", " ('modena', 0),\n", " ('caffi', 0),\n", " ('lammers', 0),\n", " ('satoru_nakajima', 0),\n", " ('johansson', 0),\n", " ('nannini', 0),\n", " ('schneider', 0),\n", " ('giacomelli', 0),\n", " ('alguersuari', 0),\n", " ('grosjean', 0),\n", " ('kobayashi', 0),\n", " ('wisell', 0),\n", " ('danner', 0),\n", " ('cheever', 0),\n", " ('ghinzani', 0),\n", " ('streiff', 0),\n", " ('fabi', 0),\n", " ('surer', 0),\n", " ('manfred_winkelhock', 0),\n", " ('baldi', 0),\n", " ('serra', 0),\n", " ('salazar', 0);\n", "\n", "ALTER TABLE \"POPULATION__STAGING_TABLE_1\" ADD COLUMN \"t4__driverref__mapping_target_1_avg\";\n", "\n", "UPDATE \"POPULATION__STAGING_TABLE_1\" SET \"t4__driverref__mapping_target_1_avg\" = 0.0;\n", "\n", "UPDATE \"POPULATION__STAGING_TABLE_1\"\n", "SET \"t4__driverref__mapping_target_1_avg\" = t2.\"value\"\n", "FROM \"T4__DRIVERREF__MAPPING_TARGET_1_AVG\" AS t2\n", "WHERE \"POPULATION__STAGING_TABLE_1\".\"t4__driverref\" = t2.\"key\";\n", "\n", "DROP TABLE IF EXISTS \"T4__DRIVERREF__MAPPING_TARGET_1_AVG\";\n", "```" ], "text/plain": [ "'DROP TABLE IF EXISTS \"T4__DRIVERREF__MAPPING_TARGET_1_AVG\";\\n\\nCREATE TABLE \"T4__DRIVERREF__MAPPING_TARGET_1_AVG\"(key TEXT NOT NULL PRIMARY KEY, value REAL);\\n\\nINSERT INTO \"T4__DRIVERREF__MAPPING_TARGET_1_AVG\"(key, value)\\nVALUES(\\'fangio\\', 0.3653846153846154),\\n (\\'ascari\\', 0.3055555555555556),\\n (\\'michael_schumacher\\', 0.3032786885245902),\\n (\\'hamilton\\', 0.2981366459627329),\\n (\\'stewart\\', 0.2948717948717949),\\n (\\'prost\\', 0.264367816091954),\\n (\\'vettel\\', 0.2467532467532468),\\n (\\'clark\\', 0.2394366197183098),\\n (\\'senna\\', 0.2323943661971831),\\n (\\'damon_hill\\', 0.2159090909090909),\\n (\\'moss\\', 0.1866666666666667),\\n (\\'mansell\\', 0.1569767441860465),\\n (\\'lauda\\', 0.1390728476821192),\\n (\\'alonso\\', 0.1282051282051282),\\n (\\'hakkinen\\', 0.1278195488721804),\\n (\\'rosberg\\', 0.10625),\\n (\\'hunt\\', 0.1058823529411765),\\n (\\'jack_brabham\\', 0.1052631578947368),\\n (\\'piquet\\', 0.09714285714285714),\\n (\\'farina\\', 0.09523809523809523),\\n (\\'jones\\', 0.09259259259259259),\\n (\\'brooks\\', 0.09090909090909091),\\n (\\'scheckter\\', 0.09),\\n (\\'montoya\\', 0.08536585365853659),\\n (\\'emerson_fittipaldi\\', 0.08403361344537816),\\n (\\'rindt\\', 0.08333333333333333),\\n (\\'hulme\\', 0.08247422680412371),\\n (\\'peterson\\', 0.08247422680412371),\\n (\\'reutemann\\', 0.07936507936507936),\\n (\\'mario_andretti\\', 0.07142857142857142),\\n (\\'raikkonen\\', 0.0684931506849315),\\n (\\'villeneuve\\', 0.06153846153846154),\\n (\\'surtees\\', 0.0576923076923077),\\n (\\'hill\\', 0.05194805194805195),\\n (\\'gilles_villeneuve\\', 0.05),\\n (\\'berger\\', 0.05),\\n (\\'keke_rosberg\\', 0.04901960784313725),\\n (\\'hawthorn\\', 0.04878048780487805),\\n (\\'ickx\\', 0.04878048780487805),\\n (\\'gurney\\', 0.04819277108433735),\\n (\\'collins\\', 0.04761904761904762),\\n (\\'arnoux\\', 0.04697986577181208),\\n (\\'massa\\', 0.04587155963302753),\\n (\\'button\\', 0.04511278195488722),\\n (\\'pironi\\', 0.04347826086956522),\\n (\\'coulthard\\', 0.0427807486631016),\\n (\\'revson\\', 0.0425531914893617),\\n (\\'ricciardo\\', 0.0425531914893617),\\n (\\'webber\\', 0.04216867469879518),\\n (\\'ralf_schumacher\\', 0.03846153846153846),\\n (\\'barrichello\\', 0.036),\\n (\\'phil_hill\\', 0.03448275862068965),\\n (\\'rodriguez\\', 0.03333333333333333),\\n (\\'scarfiotti\\', 0.03333333333333333),\\n (\\'laffite\\', 0.03311258278145696),\\n (\\'regazzoni\\', 0.03225806451612903),\\n (\\'jabouille\\', 0.03076923076923077),\\n (\\'baghetti\\', 0.02941176470588235),\\n (\\'flaherty\\', 0.02941176470588235),\\n (\\'watson\\', 0.02898550724637681),\\n (\\'mclaren\\', 0.02803738317757009),\\n (\\'gethin\\', 0.02777777777777778),\\n (\\'musso\\', 0.02702702702702703),\\n (\\'cevert\\', 0.02631578947368421),\\n (\\'ruttman\\', 0.025),\\n (\\'irvine\\', 0.025),\\n (\\'max_verstappen\\', 0.02380952380952381),\\n (\\'hanks\\', 0.02325581395348837),\\n (\\'alboreto\\', 0.02298850574712644),\\n (\\'boutsen\\', 0.02290076335877863),\\n (\\'herbert\\', 0.02222222222222222),\\n (\\'parsons\\', 0.02083333333333333),\\n (\\'bryan\\', 0.02040816326530612),\\n (\\'trintignant\\', 0.02),\\n (\\'kubica\\', 0.0196078431372549),\\n (\\'patrese\\', 0.01951219512195122),\\n (\\'rathmann\\', 0.01923076923076923),\\n (\\'bandini\\', 0.01851851851851852),\\n (\\'tambay\\', 0.01834862385321101),\\n (\\'ginther\\', 0.01639344262295082),\\n (\\'fisichella\\', 0.01621621621621622),\\n (\\'ward\\', 0.01612903225806452),\\n (\\'frentzen\\', 0.01574803149606299),\\n (\\'brambilla\\', 0.01492537313432836),\\n (\\'bottas\\', 0.01470588235294118),\\n (\\'pace\\', 0.0136986301369863),\\n (\\'maldonado\\', 0.01298701298701299),\\n (\\'beltoise\\', 0.01282051282051282),\\n (\\'siffert\\', 0.01265822784810127),\\n (\\'depailler\\', 0.0108695652173913),\\n (\\'angelis\\', 0.0108695652173913),\\n (\\'bonnier\\', 0.009009009009009009),\\n (\\'mass\\', 0.008771929824561403),\\n (\\'panis\\', 0.007692307692307693),\\n (\\'darter\\', 0),\\n (\\'pretorius\\', 0),\\n (\\'adamich\\', 0),\\n (\\'trevor_taylor\\', 0),\\n (\\'love\\', 0),\\n (\\'anderson\\', 0),\\n (\\'bianchi\\', 0),\\n (\\'courage\\', 0),\\n (\\'tingle\\', 0),\\n (\\'attwood\\', 0),\\n (\\'spence\\', 0),\\n (\\'resta\\', 0),\\n (\\'chiron\\', 0),\\n (\\'reece\\', 0),\\n (\\'linden\\', 0),\\n (\\'agabashian\\', 0),\\n (\\'manzon\\', 0),\\n (\\'rosier\\', 0),\\n (\\'villoresi\\', 0),\\n (\\'graffenried\\', 0),\\n (\\'hulkenberg\\', 0),\\n (\\'petrov\\', 0),\\n (\\'bruno_senna\\', 0),\\n (\\'daywalt\\', 0),\\n (\\'perez\\', 0),\\n (\\'vergne\\', 0),\\n (\\'pic\\', 0),\\n (\\'chilton\\', 0),\\n (\\'gutierrez\\', 0),\\n (\\'jules_bianchi\\', 0),\\n (\\'kevin_magnussen\\', 0),\\n (\\'kvyat\\', 0),\\n (\\'ericsson\\', 0),\\n (\\'nasr\\', 0),\\n (\\'sainz\\', 0),\\n (\\'schell\\', 0),\\n (\\'maggs\\', 0),\\n (\\'gregory\\', 0),\\n (\\'andre_pilette\\', 0),\\n (\\'beaufort\\', 0),\\n (\\'burgess\\', 0),\\n (\\'salvadori\\', 0),\\n (\\'trips\\', 0),\\n (\\'herrmann\\', 0),\\n (\\'scarlatti\\', 0),\\n (\\'menditeguy\\', 0),\\n (\\'gonzalez\\', 0),\\n (\\'ireland\\', 0),\\n (\\'thomson\\', 0),\\n (\\'johnson\\', 0),\\n (\\'ertl\\', 0),\\n (\\'hartley\\', 0),\\n (\\'stevenson\\', 0),\\n (\\'freeland\\', 0),\\n (\\'bettenhausen\\', 0),\\n (\\'boyd\\', 0),\\n (\\'gould\\', 0),\\n (\\'behra\\', 0),\\n (\\'paul_russo\\', 0),\\n (\\'martini\\', 0),\\n (\\'larini\\', 0),\\n (\\'katayama\\', 0),\\n (\\'morbidelli\\', 0),\\n (\\'lamy\\', 0),\\n (\\'brundle\\', 0),\\n (\\'montermini\\', 0),\\n (\\'blundell\\', 0),\\n (\\'suzuki\\', 0),\\n (\\'moreno\\', 0),\\n (\\'wendlinger\\', 0),\\n (\\'gachot\\', 0),\\n (\\'magnussen\\', 0),\\n (\\'tarquini\\', 0),\\n (\\'comas\\', 0),\\n (\\'bernard\\', 0),\\n (\\'fittipaldi\\', 0),\\n (\\'lehto\\', 0),\\n (\\'cesaris\\', 0),\\n (\\'alliot\\', 0),\\n (\\'dalmas\\', 0),\\n (\\'warwick\\', 0),\\n (\\'capelli\\', 0),\\n (\\'gugelmin\\', 0),\\n (\\'rosa\\', 0),\\n (\\'heidfeld\\', 0),\\n (\\'kovalainen\\', 0),\\n (\\'glock\\', 0),\\n (\\'sato\\', 0),\\n (\\'trulli\\', 0),\\n (\\'sutil\\', 0),\\n (\\'liuzzi\\', 0),\\n (\\'wurz\\', 0),\\n (\\'speed\\', 0),\\n (\\'albers\\', 0),\\n (\\'klien\\', 0),\\n (\\'grouillard\\', 0),\\n (\\'karthikeyan\\', 0),\\n (\\'zonta\\', 0),\\n (\\'gene\\', 0),\\n (\\'verstappen\\', 0),\\n (\\'alesi\\', 0),\\n (\\'salo\\', 0),\\n (\\'diniz\\', 0),\\n (\\'buemi\\', 0),\\n (\\'badoer\\', 0),\\n (\\'zanardi\\', 0),\\n (\\'hoffmann\\', 0),\\n (\\'henton\\', 0),\\n (\\'daly\\', 0),\\n (\\'villota\\', 0),\\n (\\'keegan\\', 0),\\n (\\'rebaque\\', 0),\\n (\\'merzario\\', 0),\\n (\\'stuck\\', 0),\\n (\\'lunger\\', 0),\\n (\\'stommelen\\', 0),\\n (\\'ian_scheckter\\', 0),\\n (\\'pryce\\', 0),\\n (\\'jarier\\', 0),\\n (\\'oliver\\', 0),\\n (\\'amon\\', 0),\\n (\\'pescarolo\\', 0),\\n (\\'wilson_fittipaldi\\', 0),\\n (\\'keizan\\', 0),\\n (\\'charlton\\', 0),\\n (\\'hailwood\\', 0),\\n (\\'ganley\\', 0),\\n (\\'redman\\', 0),\\n (\\'schenken\\', 0),\\n (\\'palmer\\', 0),\\n (\\'modena\\', 0),\\n (\\'caffi\\', 0),\\n (\\'lammers\\', 0),\\n (\\'satoru_nakajima\\', 0),\\n (\\'johansson\\', 0),\\n (\\'nannini\\', 0),\\n (\\'schneider\\', 0),\\n (\\'giacomelli\\', 0),\\n (\\'alguersuari\\', 0),\\n (\\'grosjean\\', 0),\\n (\\'kobayashi\\', 0),\\n (\\'wisell\\', 0),\\n (\\'danner\\', 0),\\n (\\'cheever\\', 0),\\n (\\'ghinzani\\', 0),\\n (\\'streiff\\', 0),\\n (\\'fabi\\', 0),\\n (\\'surer\\', 0),\\n (\\'manfred_winkelhock\\', 0),\\n (\\'baldi\\', 0),\\n (\\'serra\\', 0),\\n (\\'salazar\\', 0);\\n\\nALTER TABLE \"POPULATION__STAGING_TABLE_1\" ADD COLUMN \"t4__driverref__mapping_target_1_avg\";\\n\\nUPDATE \"POPULATION__STAGING_TABLE_1\" SET \"t4__driverref__mapping_target_1_avg\" = 0.0;\\n\\nUPDATE \"POPULATION__STAGING_TABLE_1\"\\nSET \"t4__driverref__mapping_target_1_avg\" = t2.\"value\"\\nFROM \"T4__DRIVERREF__MAPPING_TARGET_1_AVG\" AS t2\\nWHERE \"POPULATION__STAGING_TABLE_1\".\"t4__driverref\" = t2.\"key\";\\n\\nDROP TABLE IF EXISTS \"T4__DRIVERREF__MAPPING_TARGET_1_AVG\";'" ] }, "execution_count": 49, "metadata": {}, "output_type": "execute_result" } ], "source": [ "pipe1.features.to_sql().find(names[0])[0]" ] }, { "cell_type": "code", "execution_count": 50, "metadata": {}, "outputs": [ { "data": { "text/markdown": [ "```sql\n", "DROP TABLE IF EXISTS \"FEATURE_1_76\";\n", "\n", "CREATE TABLE \"FEATURE_1_76\" AS\n", "SELECT EWMA_90D( t2.\"win\", t1.\"date\" - t2.\"date, '+1.000000 days'\" ) AS \"feature_1_76\",\n", " t1.rowid AS \"rownum\"\n", "FROM \"POPULATION__STAGING_TABLE_1\" t1\n", "LEFT JOIN \"DRIVER_STANDINGS__STAGING_TABLE_2\" t2\n", "ON t1.\"driverid\" = t2.\"driverid\"\n", "WHERE t2.\"date, '+1.000000 days'\" <= t1.\"date\"\n", "GROUP BY t1.rowid;\n", "```" ], "text/plain": [ "'DROP TABLE IF EXISTS \"FEATURE_1_76\";\\n\\nCREATE TABLE \"FEATURE_1_76\" AS\\nSELECT EWMA_90D( t2.\"win\", t1.\"date\" - t2.\"date, \\'+1.000000 days\\'\" ) AS \"feature_1_76\",\\n t1.rowid AS \"rownum\"\\nFROM \"POPULATION__STAGING_TABLE_1\" t1\\nLEFT JOIN \"DRIVER_STANDINGS__STAGING_TABLE_2\" t2\\nON t1.\"driverid\" = t2.\"driverid\"\\nWHERE t2.\"date, \\'+1.000000 days\\'\" <= t1.\"date\"\\nGROUP BY t1.rowid;'" ] }, "execution_count": 50, "metadata": {}, "output_type": "execute_result" } ], "source": [ "pipe1.features.to_sql()[names[1]]" ] }, { "cell_type": "code", "execution_count": 51, "metadata": {}, "outputs": [ { "data": { "text/markdown": [ "```sql\n", "DROP TABLE IF EXISTS \"FEATURE_1_77\";\n", "\n", "CREATE TABLE \"FEATURE_1_77\" AS\n", "SELECT EWMA_365D( t2.\"win\", t1.\"date\" - t2.\"date, '+1.000000 days'\" ) AS \"feature_1_77\",\n", " t1.rowid AS \"rownum\"\n", "FROM \"POPULATION__STAGING_TABLE_1\" t1\n", "LEFT JOIN \"DRIVER_STANDINGS__STAGING_TABLE_2\" t2\n", "ON t1.\"driverid\" = t2.\"driverid\"\n", "WHERE t2.\"date, '+1.000000 days'\" <= t1.\"date\"\n", "GROUP BY t1.rowid;\n", "```" ], "text/plain": [ "'DROP TABLE IF EXISTS \"FEATURE_1_77\";\\n\\nCREATE TABLE \"FEATURE_1_77\" AS\\nSELECT EWMA_365D( t2.\"win\", t1.\"date\" - t2.\"date, \\'+1.000000 days\\'\" ) AS \"feature_1_77\",\\n t1.rowid AS \"rownum\"\\nFROM \"POPULATION__STAGING_TABLE_1\" t1\\nLEFT JOIN \"DRIVER_STANDINGS__STAGING_TABLE_2\" t2\\nON t1.\"driverid\" = t2.\"driverid\"\\nWHERE t2.\"date, \\'+1.000000 days\\'\" <= t1.\"date\"\\nGROUP BY t1.rowid;'" ] }, "execution_count": 51, "metadata": {}, "output_type": "execute_result" } ], "source": [ "pipe1.features.to_sql()[names[2]]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "What we can learn from these features is the following: Knowing which driver we are talking aboyt and who won the most recent races is the best predictor for whether a driver will win this race." ] }, { "cell_type": "code", "execution_count": 52, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "names, importances = pipe2.features.importances()\n", "\n", "plt.subplots(figsize=(20, 10))\n", "\n", "plt.bar(names[:30], importances[:30], color='#6829c2')\n", "\n", "plt.title(\"feature importances\")\n", "plt.grid(True)\n", "plt.xlabel(\"column\")\n", "plt.ylabel(\"importance\")\n", "plt.xticks(rotation='vertical')\n", "\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "As we can see, featuretools generally builds features that are similar to the features identified by getML's FastProp." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ " " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ " " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 2.7 Productionization\n", "\n", "It is possible to productionize the pipeline by transpiling the features into production-ready SQL code. Please also refer to getML's `sqlite3` module." ] }, { "cell_type": "code", "execution_count": 53, "metadata": {}, "outputs": [], "source": [ "# Creates a folder named formula1_pipeline containing\n", "# the SQL code.\n", "pipe1.features.to_sql().save(\"formula1_pipeline\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ " " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 2.8 Discussion\n", "\n", "For a more convenient overview, we summarize our results into a table.\n", "\n", "Name | Accuracy | AUC | Cross entropy\n", "-------------------- | -------- | ------ | --------------\n", "getML: FastProp | 97.27% | 92.42% | 0.08486\n", "featuretools | 97.24% | 92.02% | 0.08684\n", "\n", "As we can see, getML's FastProp outperforms featuretools according to all three measures." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ " " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ " " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 3. Conclusion\n", "\n", "We have benchmarked getML against featuretools on dataset related to Formula 1 races. We have found that getML's FastProp outperforms featuretools." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ " " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## References\n", "\n", "Motl, Jan, and Oliver Schulte. \"The CTU prague relational learning repository.\" arXiv preprint arXiv:1511.03086 (2015)." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ " " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Next Steps\n", "\n", "This tutorial benchmarked getML against academic state-of-the-art algorithms from relational learning literature and getML's qualities with respect to categorical data.\n", "\n", "If you are interested in further real-world applications of getML, head back to the [notebook overview](welcome.md) and choose one of the remaining examples.\n", "\n", "Here is some additional material from our [documentation](https://docs.getml.com/latest/) if you want to learn more about getML:\n", "* [Feature learning with Multirel](https://docs.getml.com/latest/user_guide/feature_engineering/feature_engineering.html#multirel)\n", "* [Feature learning with Relboost](https://docs.getml.com/latest/user_guide/feature_engineering/feature_engineering.html#relboost)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Get in contact\n", "\n", "If you have any question schedule a [call with Alex](https://go.getml.com/meetings/alexander-uhlig/getml-demo), the co-founder of getML, or write us an [email](team@getml.com). Prefer a private demo of getML? Just contact us to make an appointment." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ " " ] } ], "metadata": { "jupytext": { "encoding": "# -*- coding: utf-8 -*-", "formats": "ipynb,py:percent,md" }, "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.9.5" }, "toc": { "base_numbering": 1, "nav_menu": {}, "number_sections": false, "sideBar": true, "skip_h1_title": false, "title_cell": "Table of Contents", "title_sidebar": "Contents", "toc_cell": false, "toc_position": {}, "toc_section_display": true, "toc_window_display": true } }, "nbformat": 4, "nbformat_minor": 4 }