{ "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", "
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