{ "metadata": { "name": "", "signature": "sha256:ad9669b711b35b55304dd2e66a9a08e444f8d98651fabf0ca3a489354fcfdc06" }, "nbformat": 3, "nbformat_minor": 0, "worksheets": [ { "cells": [ { "cell_type": "heading", "level": 1, "metadata": {}, "source": [ "Examples of working with the data files" ] }, { "cell_type": "code", "collapsed": false, "input": [ "!ls data" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "Basic Timing Data Protocol Overview.pdf F1 Qualifying.txt\r\n", "F1 Practice.txt\t\t\t\t F1 Race.txt\r\n" ] } ], "prompt_number": 1 }, { "cell_type": "code", "collapsed": false, "input": [ "!head -n 3 data/F1\\ Practice.txt" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "\r", "\r\n", "\r", "\r\n", "\r", "\r\n" ] } ], "prompt_number": 2 }, { "cell_type": "code", "collapsed": false, "input": [ "from lxml import etree" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 3 }, { "cell_type": "code", "collapsed": false, "input": [ "pl=[]\n", "\n", "practice_f='data/F1 Practice.txt'\n", "\n", "for xml in open(practice_f, 'r'):\n", " pl.append(etree.fromstring(xml))\n", "\n", "pl[100].attrib" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 6, "text": [ "{'timestamp': '10:49:56.085', 'messagecount': '9716', 'identifier': '101'}" ] } ], "prompt_number": 6 }, { "cell_type": "code", "collapsed": false, "input": [ "pl[100][0].attrib" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 7, "text": [ "{'row': '12', 'value': 'J. BIANCHI', 'colour': 'WHITE', 'column': '3'}" ] } ], "prompt_number": 7 }, { "cell_type": "heading", "level": 2, "metadata": {}, "source": [ "Practice - DataTable for Screen Display" ] }, { "cell_type": "code", "collapsed": false, "input": [ "import pandas as pd\n", "\n", "#Hacky load and parse of each row in the datafile\n", "pl=[]\n", "for xml in open('data/F1 Practice.txt', 'r'):\n", " pl.append(etree.fromstring(xml))\n", "\n", "#Dataframe for current state timing screen\n", "df_practice_pos=pd.DataFrame(columns=[\n", " \"timestamp\", \"time\",\n", " \"classpos\", \"classpos_colour\",\n", " \"racingNumber\",\"racingNumber_colour\",\n", " \"name\",\"name_colour\",\n", "],index=range(50))\n", "\n", "#Column mappings\n", "practiceMap={\n", " '1':'classpos',\n", " '2':'racingNumber',\n", " '3':'name',\n", " '4':'laptime',\n", " '5':'gap',\n", " '6':'sector1',\n", " '7':'sector2',\n", " '8':'sector3',\n", " '9':'laps',\n", " '21':'sector1_best',\n", " '22':'sector2_best',\n", " '23':'sector3_best'\n", "}\n", "\n", "def parse_practice(p,df_practice_pos):\n", " if p.attrib['identifier']=='101' and 'sessionstate' not in p[0].attrib:\n", " if p[0].attrib['column'] not in ['10','21','22','23']:\n", " colname=practiceMap[p[0].attrib['column']]\n", " row=int(p[0].attrib['row'])-1\n", " df_practice_pos.ix[row]['timestamp']=p.attrib['timestamp']\n", " tt=p.attrib['timestamp'].replace('.',':').split(':')\n", " df_practice_pos.ix[row]['time'] = datetime.time(int(tt[0]),int(tt[1]),int(tt[2]),int(tt[3])*1000)\n", " df_practice_pos.ix[row][colname]=p[0].attrib['value']\n", " df_practice_pos.ix[row][colname+'_colour']=p[0].attrib['colour']\n", " return df_practice_pos\n", "\n", "for p in pl[:2850]:\n", " df_practice_pos=parse_practice(p,df_practice_pos)\n", "df_practice_pos" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stderr", "text": [ "/usr/local/lib/python3.4/dist-packages/pandas/io/excel.py:626: UserWarning: Installed openpyxl is not supported at this time. Use >=1.6.1 and <2.0.0.\n", " .format(openpyxl_compat.start_ver, openpyxl_compat.stop_ver))\n" ] }, { "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", "
timestamptimeclassposclasspos_colourracingNumberracingNumber_colournamename_colour
0 11:05:52.876 11:05:52.876000 1 CYAN 20 WHITE K. MAGNUSSEN WHITE
1 11:03:25.727 11:03:25.727000 2 CYAN 25 RED J. VERGNE WHITE
2 11:03:25.737 11:03:25.737000 3 CYAN 4 RED M. CHILTON WHITE
3 11:03:25.747 11:03:25.747000 4 CYAN 27 RED N. HULKENBERG WHITE
4 11:05:31.807 11:05:31.807000 5 CYAN 99 WHITE A. SUTIL WHITE
5 11:06:03.228 11:06:03.228000 6 CYAN 9 WHITE M. ERICSSON WHITE
6 11:03:25.779 11:03:25.779000 7 CYAN 17 RED J. BIANCHI WHITE
7 11:03:25.788 11:03:25.788000 8 CYAN 26 RED D. KVYAT WHITE
8 11:06:15.133 11:06:15.133000 9 CYAN 8 WHITE R. GROSJEAN WHITE
9 11:03:25.807 11:03:25.807000 10 CYAN 77 RED V. BOTTAS WHITE
10 11:03:25.816 11:03:25.816000 11 CYAN 21 RED E. GUTIERREZ WHITE
11 11:06:12.290 11:06:12.290000 12 CYAN 1 WHITE S. VETTEL WHITE
12 11:05:18.258 11:05:18.258000 13 CYAN 10 WHITE K. KOBAYASHI WHITE
13 11:03:25.855 11:03:25.855000 14 CYAN 7 RED K. RAIKKONEN WHITE
14 11:03:25.864 11:03:25.864000 15 CYAN 22 RED J. BUTTON WHITE
15 11:03:25.874 11:03:25.874000 16 CYAN 13 RED P. MALDONADO WHITE
16 11:03:25.881 11:03:25.881000 17 CYAN 11 RED S. PEREZ WHITE
17 11:03:25.906 11:03:25.906000 18 CYAN 6 RED N. ROSBERG WHITE
18 11:03:25.920 11:03:25.920000 19 CYAN 14 RED F. ALONSO WHITE
19 11:03:25.935 11:03:25.935000 20 CYAN 44 RED L. HAMILTON WHITE
20 11:03:25.945 11:03:25.945000 21 CYAN 3 RED D. RICCIARDO WHITE
21 11:00:06.703 11:00:06.703000 22 CYAN 19 RED F. MASSA WHITE
22 10:49:56.290 10:49:56.290000 CYAN WHITE WHITE
23 10:49:56.291 10:49:56.291000 CYAN WHITE WHITE
24 10:49:56.291 10:49:56.291000 CYAN WHITE WHITE
25 10:49:56.291 10:49:56.291000 CYAN WHITE WHITE
26 10:49:56.291 10:49:56.291000 CYAN WHITE WHITE
27 10:49:56.292 10:49:56.292000 CYAN WHITE WHITE
28 10:49:56.292 10:49:56.292000 CYAN WHITE WHITE
29 10:49:56.292 10:49:56.292000 CYAN WHITE WHITE
30 10:49:56.293 10:49:56.293000 CYAN WHITE WHITE
31 10:49:56.293 10:49:56.293000 CYAN WHITE WHITE
32 10:49:56.293 10:49:56.293000 CYAN WHITE WHITE
33 10:49:56.294 10:49:56.294000 CYAN WHITE WHITE
34 10:49:56.294 10:49:56.294000 CYAN WHITE WHITE
35 10:49:56.294 10:49:56.294000 CYAN WHITE WHITE
36 10:49:56.295 10:49:56.295000 CYAN WHITE WHITE
37 10:49:56.295 10:49:56.295000 CYAN WHITE WHITE
38 10:49:56.295 10:49:56.295000 CYAN WHITE WHITE
39 10:49:56.296 10:49:56.296000 CYAN WHITE WHITE
40 10:49:56.296 10:49:56.296000 CYAN WHITE WHITE
41 10:49:56.296 10:49:56.296000 CYAN WHITE WHITE
42 10:49:56.297 10:49:56.297000 CYAN WHITE WHITE
43 10:49:56.297 10:49:56.297000 CYAN WHITE WHITE
44 NaN NaN NaN NaN NaN NaN NaN NaN
45 NaN NaN NaN NaN NaN NaN NaN NaN
46 NaN NaN NaN NaN NaN NaN NaN NaN
47 NaN NaN NaN NaN NaN NaN NaN NaN
48 NaN NaN NaN NaN NaN NaN NaN NaN
49 NaN NaN NaN NaN NaN NaN NaN NaN
\n", "
" ], "metadata": {}, "output_type": "pyout", "prompt_number": 9, "text": [ " timestamp time classpos classpos_colour racingNumber \\\n", "0 11:05:52.876 11:05:52.876000 1 CYAN 20 \n", "1 11:03:25.727 11:03:25.727000 2 CYAN 25 \n", "2 11:03:25.737 11:03:25.737000 3 CYAN 4 \n", "3 11:03:25.747 11:03:25.747000 4 CYAN 27 \n", "4 11:05:31.807 11:05:31.807000 5 CYAN 99 \n", "5 11:06:03.228 11:06:03.228000 6 CYAN 9 \n", "6 11:03:25.779 11:03:25.779000 7 CYAN 17 \n", "7 11:03:25.788 11:03:25.788000 8 CYAN 26 \n", "8 11:06:15.133 11:06:15.133000 9 CYAN 8 \n", "9 11:03:25.807 11:03:25.807000 10 CYAN 77 \n", "10 11:03:25.816 11:03:25.816000 11 CYAN 21 \n", "11 11:06:12.290 11:06:12.290000 12 CYAN 1 \n", "12 11:05:18.258 11:05:18.258000 13 CYAN 10 \n", "13 11:03:25.855 11:03:25.855000 14 CYAN 7 \n", "14 11:03:25.864 11:03:25.864000 15 CYAN 22 \n", "15 11:03:25.874 11:03:25.874000 16 CYAN 13 \n", "16 11:03:25.881 11:03:25.881000 17 CYAN 11 \n", "17 11:03:25.906 11:03:25.906000 18 CYAN 6 \n", "18 11:03:25.920 11:03:25.920000 19 CYAN 14 \n", "19 11:03:25.935 11:03:25.935000 20 CYAN 44 \n", "20 11:03:25.945 11:03:25.945000 21 CYAN 3 \n", "21 11:00:06.703 11:00:06.703000 22 CYAN 19 \n", "22 10:49:56.290 10:49:56.290000 CYAN \n", "23 10:49:56.291 10:49:56.291000 CYAN \n", "24 10:49:56.291 10:49:56.291000 CYAN \n", "25 10:49:56.291 10:49:56.291000 CYAN \n", "26 10:49:56.291 10:49:56.291000 CYAN \n", "27 10:49:56.292 10:49:56.292000 CYAN \n", "28 10:49:56.292 10:49:56.292000 CYAN \n", "29 10:49:56.292 10:49:56.292000 CYAN \n", "30 10:49:56.293 10:49:56.293000 CYAN \n", "31 10:49:56.293 10:49:56.293000 CYAN \n", "32 10:49:56.293 10:49:56.293000 CYAN \n", "33 10:49:56.294 10:49:56.294000 CYAN \n", "34 10:49:56.294 10:49:56.294000 CYAN \n", "35 10:49:56.294 10:49:56.294000 CYAN \n", "36 10:49:56.295 10:49:56.295000 CYAN \n", "37 10:49:56.295 10:49:56.295000 CYAN \n", "38 10:49:56.295 10:49:56.295000 CYAN \n", "39 10:49:56.296 10:49:56.296000 CYAN \n", "40 10:49:56.296 10:49:56.296000 CYAN \n", "41 10:49:56.296 10:49:56.296000 CYAN \n", "42 10:49:56.297 10:49:56.297000 CYAN \n", "43 10:49:56.297 10:49:56.297000 CYAN \n", "44 NaN NaN NaN NaN NaN \n", "45 NaN NaN NaN NaN NaN \n", "46 NaN NaN NaN NaN NaN \n", "47 NaN NaN NaN NaN NaN \n", "48 NaN NaN NaN NaN NaN \n", "49 NaN NaN NaN NaN NaN \n", "\n", " racingNumber_colour name name_colour \n", "0 WHITE K. MAGNUSSEN WHITE \n", "1 RED J. VERGNE WHITE \n", "2 RED M. CHILTON WHITE \n", "3 RED N. HULKENBERG WHITE \n", "4 WHITE A. SUTIL WHITE \n", "5 WHITE M. ERICSSON WHITE \n", "6 RED J. BIANCHI WHITE \n", "7 RED D. KVYAT WHITE \n", "8 WHITE R. GROSJEAN WHITE \n", "9 RED V. BOTTAS WHITE \n", "10 RED E. GUTIERREZ WHITE \n", "11 WHITE S. VETTEL WHITE \n", "12 WHITE K. KOBAYASHI WHITE \n", "13 RED K. RAIKKONEN WHITE \n", "14 RED J. BUTTON WHITE \n", "15 RED P. MALDONADO WHITE \n", "16 RED S. PEREZ WHITE \n", "17 RED N. ROSBERG WHITE \n", "18 RED F. ALONSO WHITE \n", "19 RED L. HAMILTON WHITE \n", "20 RED D. RICCIARDO WHITE \n", "21 RED F. MASSA WHITE \n", "22 WHITE WHITE \n", "23 WHITE WHITE \n", "24 WHITE WHITE \n", "25 WHITE WHITE \n", "26 WHITE WHITE \n", "27 WHITE WHITE \n", "28 WHITE WHITE \n", "29 WHITE WHITE \n", "30 WHITE WHITE \n", "31 WHITE WHITE \n", "32 WHITE WHITE \n", "33 WHITE WHITE \n", "34 WHITE WHITE \n", "35 WHITE WHITE \n", "36 WHITE WHITE \n", "37 WHITE WHITE \n", "38 WHITE WHITE \n", "39 WHITE WHITE \n", "40 WHITE WHITE \n", "41 WHITE WHITE \n", "42 WHITE WHITE \n", "43 WHITE WHITE \n", "44 NaN NaN NaN \n", "45 NaN NaN NaN \n", "46 NaN NaN NaN \n", "47 NaN NaN NaN \n", "48 NaN NaN NaN \n", "49 NaN NaN NaN " ] } ], "prompt_number": 9 }, { "cell_type": "code", "collapsed": false, "input": [], "language": "python", "metadata": {}, "outputs": [] } ], "metadata": {} } ] }