{ "metadata": { "name": "", "signature": "sha256:465f0655ded305a2bfa4db442e3b3ee2fc8d976a991d4caa62c9f4c70d846538" }, "nbformat": 3, "nbformat_minor": 0, "worksheets": [ { "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "Exploring dates and times in Python with a business analytics focus\n", "===================================================================\n", "\n", "For many of us in the business analytics world, working with dates and times is bread and butter stuff. We can work all kinds of magic with Excel's \"serial\" datetimes and worksheet functions like DATEVALUE(), WEEKDAY(), MONTH(), DATE() and many more. We can wield VBA functions like [DateDiff](http://msdn.microsoft.com/en-us/library/b5xbyt6f%28v=vs.90%29.aspx) with the best of them. We all know that, according to MS, time started on 1/1/1900 (or 1904 if you're on a Mac) and we just live with the fact that we can't do reliable datetime work before those magic epochs. I even wrote and released a free and open source MS Access add-in called [Hillmaker](http://hillmaker.sourceforge.net/) many years ago that did statistical analysis of time interval data by day of week and time of day. That tool still finds lots of use in the healthcare world for analyzing occupancy of things like nursing units, emergency departments, recovery room, and many other places with entry and exit timestamp data.\n", "\n", "So, when I started working with R and Python, one of the first things I did was see how they handled dates and times. I learned about the [*UTC epoch* and the POSIX time standard](http://en.wikipedia.org/wiki/Unix_time). In R, I quickly learned to love the [`lubridate` package](http://cran.r-project.org/web/packages/lubridate/index.html). And then I started to learn about dates and times in Python and started to know what programmers mean when they say \"there be dragons in there\". So, while I'm far from an expert, I did put together this little intro to Python dates and times aimed at business analtytics types who are new to Python. It is by no means comprehensive, but does cover the basics of the base Python `datetime` and `timedelta` classes along with Numpy `datetime64` and `timedelta64` classes. Oh yeah, it also covers the pandas `Timestamp` and `timedelta` classes (confused yet?). I also show one particular dragon that bit me - conversion between Numpy datetimes and Pandas datetimes - even though Pandas uses Numpy under the hood. Anyhoo, here we go.\n", "\n", "You can find the `.ipynb` file in my [hselab-tutorials](https://github.com/misken/hselab-tutorials) github repo. Clone or download a zip." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Python's `datetime` and `timedelta` classes\n", "-------------------------------------------" ] }, { "cell_type": "code", "collapsed": false, "input": [ "import pandas as pd\n", "import numpy as np\n", "from pandas import Series, DataFrame\n", "from datetime import datetime\n", "from datetime import timedelta" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 1 }, { "cell_type": "code", "collapsed": false, "input": [ "import matplotlib.pyplot as plt\n", "%matplotlib inline" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 114 }, { "cell_type": "markdown", "metadata": {}, "source": [ "Python has a module called `datetime` as part of its base system. \n", "\n", "https://docs.python.org/2/library/datetime.html\n", "\n", "> The datetime module supplies classes for manipulating dates and times in both simple and complex ways. While date and time arithmetic is supported, the focus of the implementation is on efficient attribute extraction for output formatting and manipulation.\n", "\n", "Datetimes can be *naive* or *aware*\n", "\n", "* naive objects don't know about timezones and their interpretation is application (coder) dependent\n", "* aware objects do know about timezones and are unambiguous" ] }, { "cell_type": "code", "collapsed": false, "input": [ "dates = [datetime(2012, 5, 1, 8, 30), datetime(2012, 5, 1, 9, 25), datetime(2012, 5, 1, 15, 30)]" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 115 }, { "cell_type": "code", "collapsed": false, "input": [ "dates" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 116, "text": [ "[datetime.datetime(2012, 5, 1, 8, 30),\n", " datetime.datetime(2012, 5, 1, 9, 25),\n", " datetime.datetime(2012, 5, 1, 15, 30)]" ] } ], "prompt_number": 116 }, { "cell_type": "code", "collapsed": false, "input": [ "type(dates)" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 117, "text": [ "list" ] } ], "prompt_number": 117 }, { "cell_type": "code", "collapsed": false, "input": [ "type(dates[0])" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 118, "text": [ "datetime.datetime" ] } ], "prompt_number": 118 }, { "cell_type": "code", "collapsed": false, "input": [ "intime_dt = dates[0]\n", "outtime_dt = dates[1]\n", "type(intime_dt)" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 119, "text": [ "datetime.datetime" ] } ], "prompt_number": 119 }, { "cell_type": "code", "collapsed": false, "input": [ "# The commented out lines represent attributes that ARE available in pandas Timestamp objects\n", "# but not in Python datetime objects\n", "print ('Datetime: {}'.format(intime_dt))\n", "print ('Date: {}'.format(intime_dt.date()))\n", "print ('Month: {}'.format(intime_dt.month))\n", "print ('Day: {}'.format(intime_dt.day))\n", "#print ('DayOfWeek: {}'.format(intime_dt.dayofweek))\n", "print ('Weekday: {}'.format(intime_dt.weekday()))\n", "#print ('DayOfYear: {}'.format(intime_dt.dayofyear))\n", "#print ('WeekOfYear: {}'.format(intime_dt.weekofyear))\n", "#print ('Quarter: {}'.format(intime_dt.quarter))\n", "print ('Hour: {}'.format(intime_dt.hour))\n", "print ('Minute: {}'.format(intime_dt.minute))\n", "print ('Second: {}'.format(intime_dt.second))\n", "print ('Microsecond: {}'.format(intime_dt.microsecond))" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "Datetime: 2012-05-01 08:30:00\n", "Date: 2012-05-01\n", "Month: 5\n", "Day: 1\n", "Weekday: 1\n", "Hour: 8\n", "Minute: 30\n", "Second: 0\n", "Microsecond: 0\n" ] } ], "prompt_number": 120 }, { "cell_type": "code", "collapsed": false, "input": [ "los_td = outtime_dt - intime_dt\n", "print (los_td)\n", "type(los_td)" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "0:55:00\n" ] }, { "metadata": {}, "output_type": "pyout", "prompt_number": 121, "text": [ "datetime.timedelta" ] } ], "prompt_number": 121 }, { "cell_type": "code", "collapsed": false, "input": [ "atts = [att for att in dir(los_td) if '__' not in att]\n", "print(atts)" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "['days', 'max', 'microseconds', 'min', 'resolution', 'seconds', 'total_seconds']\n" ] } ], "prompt_number": 122 }, { "cell_type": "code", "collapsed": false, "input": [ "print ('Timedelta: {}'.format(los_td))\n", "print ('Seconds: {}'.format(los_td.seconds))\n", "print ('Total Seconds: {}'.format(los_td.total_seconds()))\n", "print ('Microseconds: {}'.format(los_td.microseconds))\n", "print ('Resolution: {}'.format(los_td.resolution))\n", "print ('Min: {}'.format(los_td.min))\n", "print ('Max: {}'.format(los_td.max))" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "Timedelta: 0:55:00\n", "Seconds: 3300\n", "Total Seconds: 3300.0\n", "Microseconds: 0\n", "Resolution: 0:00:00.000001\n", "Min: -999999999 days, 0:00:00\n", "Max: 999999999 days, 23:59:59.999999\n" ] } ], "prompt_number": 123 }, { "cell_type": "markdown", "metadata": {}, "source": [ "So, you can use the `total_seconds()` method to get a duration in seconds from a `timedelta` object. If duration is < 1 second, it returns fractional seconds. To convert to other time units, just do the simple math." ] }, { "cell_type": "code", "collapsed": false, "input": [ "timedelta(0,0,10)" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 124, "text": [ "datetime.timedelta(0, 0, 10)" ] } ], "prompt_number": 124 }, { "cell_type": "code", "collapsed": false, "input": [ "timedelta(0,0,17).total_seconds()" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 125, "text": [ "1.7e-05" ] } ], "prompt_number": 125 }, { "cell_type": "code", "collapsed": false, "input": [ "atts = [att for att in dir(intime_dt) if '__' not in att]" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 126 }, { "cell_type": "code", "collapsed": false, "input": [ "print (atts)" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "['astimezone', 'combine', 'ctime', 'date', 'day', 'dst', 'fromordinal', 'fromtimestamp', 'hour', 'isocalendar', 'isoformat', 'isoweekday', 'max', 'microsecond', 'min', 'minute', 'month', 'now', 'replace', 'resolution', 'second', 'strftime', 'strptime', 'time', 'timestamp', 'timetuple', 'timetz', 'today', 'toordinal', 'tzinfo', 'tzname', 'utcfromtimestamp', 'utcnow', 'utcoffset', 'utctimetuple', 'weekday', 'year']\n" ] } ], "prompt_number": 127 }, { "cell_type": "markdown", "metadata": {}, "source": [ "Numpy's newish `datetime64` and `timedelta64` classes\n", "-----------------------------------------------------\n", "\n", "The Numpy library (v 1.7.0) introduced a new datatype called datetime64. Numpy uses this name because there is already a datetime data type in Python datetime library. Like R, dates and times in Python are stored based on the notion of POSIX time - the number of seconds elapsed since Jan 1, 1970 00:00:00 GMT - called the UTC epoch. This doesn't mean that dates and times before that cannot be represented - we just use negative numbers. Representing and working with dates and times for computing is a pretty interesting topic, fraught with complexities like time zones, daylight savings time, and leap seconds. A few good places to start are:\n", "\n", "Numpy docs - http://docs.scipy.org/doc/numpy-dev/reference/arrays.datetime.html\n", "\n", "Pandas docs - http://pandas.pydata.org/pandas-docs/dev/timeseries.html\n", "\n", "See http://cr.yp.to/proto/utctai.html for gory details on UTC and ATI and leap seconds and the problems with the POSIX standard.\n", "\n", "http://stackoverflow.com/questions/13703720/converting-between-datetime-timestamp-and-datetime64\n", "\n", "Here's the actual numpy proposal for datetime64 and timedelta64, authored by Travis Oliphant.\n", "\n", "https://github.com/numpy/numpy/blob/master/doc/neps/datetime-proposal.rst\n", "\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Let's create a Numpy `datetime64` object." ] }, { "cell_type": "code", "collapsed": false, "input": [ "np.datetime64('2012-05-01 08:30:00')" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 128, "text": [ "numpy.datetime64('2012-05-01T08:30:00-0400')" ] } ], "prompt_number": 128 }, { "cell_type": "code", "collapsed": false, "input": [ "dates64 = [np.datetime64('2012-05-01 08:30:00'), np.datetime64('2012-05-01 09:25:00'), np.datetime64('2012-05-01 15:30:00')]" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 129 }, { "cell_type": "code", "collapsed": false, "input": [ "dates64" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 130, "text": [ "[numpy.datetime64('2012-05-01T08:30:00-0400'),\n", " numpy.datetime64('2012-05-01T09:25:00-0400'),\n", " numpy.datetime64('2012-05-01T15:30:00-0400')]" ] } ], "prompt_number": 130 }, { "cell_type": "markdown", "metadata": {}, "source": [ "As you can see from below, UTC is four hours later than EDT. In other words, the EDT timezone offset is UTC-4." ] }, { "cell_type": "code", "collapsed": false, "input": [ "dt_utcnow = datetime.utcnow()\n", "dt_utcnow" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 131, "text": [ "datetime.datetime(2014, 6, 25, 23, 36, 51, 924417)" ] } ], "prompt_number": 131 }, { "cell_type": "code", "collapsed": false, "input": [ "# Can create datetime64's from base Python datetimes\n", "dt64_utcnow = np.datetime64(dt_utcnow)\n", "dt64_utcnow" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 132, "text": [ "numpy.datetime64('2014-06-25T19:36:51.924417-0400')" ] } ], "prompt_number": 132 }, { "cell_type": "code", "collapsed": false, "input": [ "curdates64 = [np.datetime64('2014-06-01 08:30:00'), np.datetime64('2014-06-01 09:25:00'), np.datetime64('2014-06-01 15:30:00')]" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 133 }, { "cell_type": "code", "collapsed": false, "input": [ "curdates64" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 134, "text": [ "[numpy.datetime64('2014-06-01T08:30:00-0400'),\n", " numpy.datetime64('2014-06-01T09:25:00-0400'),\n", " numpy.datetime64('2014-06-01T15:30:00-0400')]" ] } ], "prompt_number": 134 }, { "cell_type": "code", "collapsed": false, "input": [ "intime_dt64 = dates64[0]\n", "outtime_dt64 = dates64[1]\n", "print(type(intime_dt64))\n", "print(intime_dt64)\n", "intime_dt64" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "\n", "2012-05-01T08:30:00-0400\n" ] }, { "metadata": {}, "output_type": "pyout", "prompt_number": 135, "text": [ "numpy.datetime64('2012-05-01T08:30:00-0400')" ] } ], "prompt_number": 135 }, { "cell_type": "code", "collapsed": false, "input": [ "# The commented out lines represent attributes that ARE available in pandas Timestamp objects\n", "# but not in numpy datetime64 objects\n", "print ('Datetime: {}'.format(str(intime_dt64)))\n", "#print ('Date: {}'.format(intime_dt64.date()))\n", "#print ('Month: {}'.format(intime_dt64.month))\n", "#print ('Day: {}'.format(intime_dt.day))\n", "#print ('DayOfWeek: {}'.format(intime_dt.dayofweek))\n", "#print ('Weekday: {}'.format(intime_dt.weekday()))\n", "#print ('DayOfYear: {}'.format(intime_dt.dayofyear))\n", "#print ('WeekOfYear: {}'.format(intime_dt.weekofyear))\n", "#print ('Quarter: {}'.format(intime_dt.quarter))\n", "#print ('Hour: {}'.format(intime_dt.hour))\n", "#print ('Minute: {}'.format(intime_dt.minute))\n", "#print ('Second: {}'.format(intime_dt.second))\n", "#print ('Microsecond: {}'.format(intime_dt.microsecond))" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "Datetime: 2012-05-01T08:30:00-0400\n" ] } ], "prompt_number": 136 }, { "cell_type": "markdown", "metadata": {}, "source": [ "You can subtract two `datetime64` objects and get a `timedelta64` object in return." ] }, { "cell_type": "code", "collapsed": false, "input": [ "los_dt64 = outtime_dt64 - intime_dt64\n", "los_dt64" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 137, "text": [ "numpy.timedelta64(3300,'s')" ] } ], "prompt_number": 137 }, { "cell_type": "code", "collapsed": false, "input": [ "# Coerce it to other units\n", "np.timedelta64(los_dt64,'m')" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 138, "text": [ "numpy.timedelta64(55,'m')" ] } ], "prompt_number": 138 }, { "cell_type": "markdown", "metadata": {}, "source": [ "Unfortunately, `timedelta64` objects have almost no useful attributes in terms of date time math. OTH, see the `datetime.timedelta` object (and Pandas) for a number of useful attributes." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Pandas and datetimes\n", "\n", "\n", "\n", "Pandas prides itself on its handling of time series data (speed, flexibility, power) and is built on time of numpy `datetime64` and `timedelta64` data types (instead of Python's base `datetime` and `timedelta` types. Pandas also wanted to be very [time-zone aware and time-zone capable](http://wesmckinney.com/blog/?cat=5). So, Pandas has its own data type for timestamps called, well, `Timetamp`. It's based on numpy's `datetime64` type but works like Python's `datetime` (I think). The following StackOverlfow post (the \"welcome to hell\" post) is quite popular and relevant.\n", "\n", "http://stackoverflow.com/questions/13703720/converting-between-datetime-timestamp-and-datetime64" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Pandas time series indexes can be timestamp or time period based." ] }, { "cell_type": "code", "collapsed": false, "input": [ "ts = Series(np.random.randint(1,100,3), index=dates)" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 139 }, { "cell_type": "code", "collapsed": false, "input": [ "ts" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 140, "text": [ "2012-05-01 08:30:00 86\n", "2012-05-01 09:25:00 82\n", "2012-05-01 15:30:00 34\n", "dtype: int32" ] } ], "prompt_number": 140 }, { "cell_type": "code", "collapsed": false, "input": [ "ts.index" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 141, "text": [ "\n", "[2012-05-01 08:30:00, ..., 2012-05-01 15:30:00]\n", "Length: 3, Freq: None, Timezone: None" ] } ], "prompt_number": 141 }, { "cell_type": "markdown", "metadata": {}, "source": [ "If we have demand data by month, a period based index might make more sense." ] }, { "cell_type": "code", "collapsed": false, "input": [ "from pandas import Period, PeriodIndex" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 142 }, { "cell_type": "code", "collapsed": false, "input": [ "periods = PeriodIndex([Period('2012-01'), Period('2012-02'),Period('2012-03')])" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 143 }, { "cell_type": "code", "collapsed": false, "input": [ "ts2 = Series(np.random.randint(1,100,3), index=periods)" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 144 }, { "cell_type": "code", "collapsed": false, "input": [ "ts2" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 145, "text": [ "2012-01 3\n", "2012-02 59\n", "2012-03 34\n", "Freq: M, dtype: int32" ] } ], "prompt_number": 145 }, { "cell_type": "code", "collapsed": false, "input": [ "ts2.index" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 146, "text": [ "\n", "freq: M\n", "[2012-01, ..., 2012-03]\n", "length: 3" ] } ], "prompt_number": 146 }, { "cell_type": "markdown", "metadata": {}, "source": [ "From the [pandas docs](http://pandas.pydata.org/pandas-docs/dev/timeseries.html):\n", "\n", "> Starting with 0.8, pandas allows you to capture both representations and convert between them. Under the hood, pandas represents timestamps using instances of Timestamp and sequences of timestamps using instances of DatetimeIndex. For regular time spans, pandas uses Period objects for scalar values and PeriodIndex for sequences of spans." ] }, { "cell_type": "code", "collapsed": false, "input": [ "from pandas import Timestamp" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 147 }, { "cell_type": "code", "collapsed": false, "input": [ "Timestamp('20120501 08:30:00')" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 148, "text": [ "Timestamp('2012-05-01 08:30:00', tz=None)" ] } ], "prompt_number": 148 }, { "cell_type": "code", "collapsed": false, "input": [ "timestamps = [Timestamp('20120501 08:30:00'), Timestamp('20120501 09:25:00'), Timestamp('20120501 15:30:00')]" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 149 }, { "cell_type": "code", "collapsed": false, "input": [ "intime_ts = timestamps[0]\n", "outtime_ts = timestamps[1]\n", "type(intime_ts)" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 150, "text": [ "pandas.tslib.Timestamp" ] } ], "prompt_number": 150 }, { "cell_type": "code", "collapsed": false, "input": [ "los_ptd = outtime_ts - intime_ts\n", "print (los_ptd)\n", "type(los_ptd)" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "0:55:00\n" ] }, { "metadata": {}, "output_type": "pyout", "prompt_number": 151, "text": [ "datetime.timedelta" ] } ], "prompt_number": 151 }, { "cell_type": "code", "collapsed": false, "input": [ "# The pandas Timestamp data type has a number of useful attributes (dayofweek, dayofyear, weekofyear)\n", "# that the base Python datetime type does not.\n", "print ('Datetime: {}'.format(intime_ts))\n", "print ('Date: {}'.format(intime_ts.date()))\n", "print ('Month: {}'.format(intime_ts.month))\n", "print ('Day: {}'.format(intime_ts.day))\n", "print ('DayOfWeek: {}'.format(intime_ts.dayofweek))\n", "print ('Weekday: {}'.format(intime_ts.weekday()))\n", "print ('DayOfYear: {}'.format(intime_ts.dayofyear))\n", "print ('WeekOfYear: {}'.format(intime_ts.weekofyear))\n", "print ('Quarter: {}'.format(intime_ts.quarter))\n", "print ('Hour: {}'.format(intime_ts.hour))\n", "print ('Minute: {}'.format(intime_ts.minute))\n", "print ('Second: {}'.format(intime_ts.second))\n", "print ('Microsecond: {}'.format(intime_ts.microsecond))" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "Datetime: 2012-05-01 08:30:00\n", "Date: 2012-05-01\n", "Month: 5\n", "Day: 1\n", "DayOfWeek: 1\n", "Weekday: 1\n", "DayOfYear: 122\n", "WeekOfYear: 18\n", "Quarter: 2\n", "Hour: 8\n", "Minute: 30\n", "Second: 0\n", "Microsecond: 0\n" ] } ], "prompt_number": 152 }, { "cell_type": "code", "collapsed": false, "input": [ "print ('Timedelta: {}'.format(los_ptd))\n", "print ('Days: {}'.format(los_ptd.days))\n", "print ('Seconds: {}'.format(los_ptd.seconds))\n", "print ('Total Seconds: {}'.format(los_ptd.total_seconds()))\n", "print ('Microseconds: {}'.format(los_ptd.microseconds))\n", "print ('Resolution: {}'.format(los_ptd.resolution))\n", "print ('Min: {}'.format(los_ptd.min))\n", "print ('Max: {}'.format(los_ptd.max))" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "Timedelta: 0:55:00\n", "Days: 0\n", "Seconds: 3300\n", "Total Seconds: 3300.0\n", "Microseconds: 0\n", "Resolution: 0:00:00.000001\n", "Min: -999999999 days, 0:00:00\n", "Max: 999999999 days, 23:59:59.999999\n" ] } ], "prompt_number": 153 }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Conversion from numpy.datetime64 to pd.Timestamp\n", "\n", "A big (potential) problem is trying to convert from numpy.datetime64 to pd.Timestamp. Seemingly strange things happened when I tried this using the `to_list` method of numpy.datetime64 objects. After much reading of the [\"Welcome to Hell\" SO post](http://stackoverflow.com/questions/13703720/converting-between-datetime-timestamp-and-datetime64) and some experimenting and a more careful reading of the numpy docs (\"ISO 8601 specifies to use the local time zone if none is explicitly given:\"), I think we have an answer." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "So, by default, numpy assumes a naively specified datetime is in **local time**." ] }, { "cell_type": "code", "collapsed": false, "input": [ "dt64 = np.datetime64('2014-06-01 08:30:00')\n", "dt64" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 154, "text": [ "numpy.datetime64('2014-06-01T08:30:00-0400')" ] } ], "prompt_number": 154 }, { "cell_type": "markdown", "metadata": {}, "source": [ "If we use it's .tolist() method or pass it in to pandas Timestamp() constructor, we get UTC!" ] }, { "cell_type": "code", "collapsed": false, "input": [ "dt64.tolist()" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 155, "text": [ "datetime.datetime(2014, 6, 1, 12, 30)" ] } ], "prompt_number": 155 }, { "cell_type": "code", "collapsed": false, "input": [ "ts = pd.Timestamp(dt64)\n", "ts" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 156, "text": [ "Timestamp('2014-06-01 12:30:00', tz=None)" ] } ], "prompt_number": 156 }, { "cell_type": "markdown", "metadata": {}, "source": [ "If you were doing a bunch of bulk data transformation work, you might easily miss this subtlety and end up with your date time stats all staggered off by a few hours. Some more fun conversions are shown below." ] }, { "cell_type": "code", "collapsed": false, "input": [ "dt = ts.to_datetime()\n", "dt" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 157, "text": [ "datetime.datetime(2014, 6, 1, 12, 30)" ] } ], "prompt_number": 157 }, { "cell_type": "markdown", "metadata": {}, "source": [ "... and if we try a \"roundtrip\" from numpy to Pandas to datetime and back, we actually end up where we started." ] }, { "cell_type": "code", "collapsed": false, "input": [ "np.datetime64(dt)" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 158, "text": [ "numpy.datetime64('2014-06-01T08:30:00.000000-0400')" ] } ], "prompt_number": 158 }, { "cell_type": "markdown", "metadata": {}, "source": [ "Appears this is quite a topic of [discussion in the numpy community](http://numpy-discussion.10968.n7.nabble.com/Time-Zones-and-datetime64-td33568.html) based on [this discussion thread](http://mail.scipy.org/pipermail/numpy-discussion/2013-April/066038.html). " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Pandas and time series\n", "----------------------\n", "\n", "Generally, a time series in pandas is a `Series` object with a `DateTimeIndex`. Pandas has convenience functions for creating time series indexes. The default frequency for date_range is a calendar day while the default for bdate_range is a business day" ] }, { "cell_type": "code", "collapsed": false, "input": [ "index = pd.date_range('2000-1-1', periods=1000, freq='M')" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 159 }, { "cell_type": "code", "collapsed": false, "input": [ "index" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 160, "text": [ "\n", "[2000-01-31, ..., 2083-04-30]\n", "Length: 1000, Freq: M, Timezone: None" ] } ], "prompt_number": 160 }, { "cell_type": "code", "collapsed": false, "input": [ "start = datetime(2014, 1, 1)\n", "end = datetime(2014, 6, 12)\n", "rng = pd.date_range(start, end)\n", "rng" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 161, "text": [ "\n", "[2014-01-01, ..., 2014-06-12]\n", "Length: 163, Freq: D, Timezone: None" ] } ], "prompt_number": 161 }, { "cell_type": "code", "collapsed": false, "input": [ "pd.date_range(start, end, freq='W')" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 162, "text": [ "\n", "[2014-01-05, ..., 2014-06-08]\n", "Length: 23, Freq: W-SUN, Timezone: None" ] } ], "prompt_number": 162 }, { "cell_type": "code", "collapsed": false, "input": [ "data = np.random.randint(1, 100, size=163)" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 163 }, { "cell_type": "code", "collapsed": false, "input": [ "df = DataFrame(data, index=rng)" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 164 }, { "cell_type": "code", "collapsed": false, "input": [ "df.head()" ], "language": "python", "metadata": {}, "outputs": [ { "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", "
0
2014-01-01 18
2014-01-02 9
2014-01-03 69
2014-01-04 44
2014-01-05 75
\n", "

5 rows \u00d7 1 columns

\n", "
" ], "metadata": {}, "output_type": "pyout", "prompt_number": 165, "text": [ " 0\n", "2014-01-01 18\n", "2014-01-02 9\n", "2014-01-03 69\n", "2014-01-04 44\n", "2014-01-05 75\n", "\n", "[5 rows x 1 columns]" ] } ], "prompt_number": 165 }, { "cell_type": "code", "collapsed": false, "input": [ "# Date index slicing is easy but, BE CAREFUL, the end point is included (unlike usual Python slicing behavior).\n", "df['2014-01-02':'2014-01-12']" ], "language": "python", "metadata": {}, "outputs": [ { "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", "
0
2014-01-02 9
2014-01-03 69
2014-01-04 44
2014-01-05 75
2014-01-06 96
2014-01-07 87
2014-01-08 2
2014-01-09 69
2014-01-10 76
2014-01-11 90
2014-01-12 31
\n", "

11 rows \u00d7 1 columns

\n", "
" ], "metadata": {}, "output_type": "pyout", "prompt_number": 166, "text": [ " 0\n", "2014-01-02 9\n", "2014-01-03 69\n", "2014-01-04 44\n", "2014-01-05 75\n", "2014-01-06 96\n", "2014-01-07 87\n", "2014-01-08 2\n", "2014-01-09 69\n", "2014-01-10 76\n", "2014-01-11 90\n", "2014-01-12 31\n", "\n", "[11 rows x 1 columns]" ] } ], "prompt_number": 166 }, { "cell_type": "code", "collapsed": false, "input": [ "df[datetime(2014,1,2):datetime(2014,1,12)]" ], "language": "python", "metadata": {}, "outputs": [ { "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", "
0
2014-01-02 9
2014-01-03 69
2014-01-04 44
2014-01-05 75
2014-01-06 96
2014-01-07 87
2014-01-08 2
2014-01-09 69
2014-01-10 76
2014-01-11 90
2014-01-12 31
\n", "

11 rows \u00d7 1 columns

\n", "
" ], "metadata": {}, "output_type": "pyout", "prompt_number": 167, "text": [ " 0\n", "2014-01-02 9\n", "2014-01-03 69\n", "2014-01-04 44\n", "2014-01-05 75\n", "2014-01-06 96\n", "2014-01-07 87\n", "2014-01-08 2\n", "2014-01-09 69\n", "2014-01-10 76\n", "2014-01-11 90\n", "2014-01-12 31\n", "\n", "[11 rows x 1 columns]" ] } ], "prompt_number": 167 }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Pandas `DateOffset` objects" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Usually *base frequencies* are specified with a string alias such as 'W' or 'M'. However, " ] }, { "cell_type": "code", "collapsed": false, "input": [ "rng2 = pd.date_range(start, end, freq='M')" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 168 }, { "cell_type": "code", "collapsed": false, "input": [ "len(rng2)" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 169, "text": [ "5" ] } ], "prompt_number": 169 }, { "cell_type": "code", "collapsed": false, "input": [ "data[:len(rng2)]" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 170, "text": [ "array([18, 9, 69, 44, 75])" ] } ], "prompt_number": 170 }, { "cell_type": "code", "collapsed": false, "input": [ "df2 = DataFrame(data[:len(rng2)], index=rng2)" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 171 }, { "cell_type": "code", "collapsed": false, "input": [ "df2" ], "language": "python", "metadata": {}, "outputs": [ { "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", "
0
2014-01-31 18
2014-02-28 9
2014-03-31 69
2014-04-30 44
2014-05-31 75
\n", "

5 rows \u00d7 1 columns

\n", "
" ], "metadata": {}, "output_type": "pyout", "prompt_number": 172, "text": [ " 0\n", "2014-01-31 18\n", "2014-02-28 9\n", "2014-03-31 69\n", "2014-04-30 44\n", "2014-05-31 75\n", "\n", "[5 rows x 1 columns]" ] } ], "prompt_number": 172 }, { "cell_type": "code", "collapsed": false, "input": [ "from pandas.tseries.offsets import Hour, Minute\n", "#We rarely use these but they are available" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 173 }, { "cell_type": "code", "collapsed": false, "input": [ "one_hour = Hour()\n", "four_hours = Hour(4)" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 174 }, { "cell_type": "code", "collapsed": false, "input": [ "one_hour + four_hours" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 175, "text": [ "<5 * Hours>" ] } ], "prompt_number": 175 }, { "cell_type": "code", "collapsed": false, "input": [ "one_hour + Minute(35)" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 176, "text": [ "<95 * Minutes>" ] } ], "prompt_number": 176 }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Week of month dates\n", "\n" ] }, { "cell_type": "code", "collapsed": false, "input": [ "rng = pd.date_range('9/1/2012','1/1/2014',freq='M')" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 177 }, { "cell_type": "code", "collapsed": false, "input": [ "rng" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 178, "text": [ "\n", "[2012-09-30, ..., 2013-12-31]\n", "Length: 16, Freq: M, Timezone: None" ] } ], "prompt_number": 178 }, { "cell_type": "code", "collapsed": false, "input": [ "list(rng)" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 179, "text": [ "[Timestamp('2012-09-30 00:00:00', tz=None),\n", " Timestamp('2012-10-31 00:00:00', tz=None),\n", " Timestamp('2012-11-30 00:00:00', tz=None),\n", " Timestamp('2012-12-31 00:00:00', tz=None),\n", " Timestamp('2013-01-31 00:00:00', tz=None),\n", " Timestamp('2013-02-28 00:00:00', tz=None),\n", " Timestamp('2013-03-31 00:00:00', tz=None),\n", " Timestamp('2013-04-30 00:00:00', tz=None),\n", " Timestamp('2013-05-31 00:00:00', tz=None),\n", " Timestamp('2013-06-30 00:00:00', tz=None),\n", " Timestamp('2013-07-31 00:00:00', tz=None),\n", " Timestamp('2013-08-31 00:00:00', tz=None),\n", " Timestamp('2013-09-30 00:00:00', tz=None),\n", " Timestamp('2013-10-31 00:00:00', tz=None),\n", " Timestamp('2013-11-30 00:00:00', tz=None),\n", " Timestamp('2013-12-31 00:00:00', tz=None)]" ] } ], "prompt_number": 179 }, { "cell_type": "code", "collapsed": false, "input": [ "rng = pd.date_range('9/1/2012','1/1/2014',freq='WOM-2TUE')" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 180 }, { "cell_type": "code", "collapsed": false, "input": [ "list(rng)" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 181, "text": [ "[Timestamp('2012-09-11 00:00:00', tz=None),\n", " Timestamp('2012-10-09 00:00:00', tz=None),\n", " Timestamp('2012-11-13 00:00:00', tz=None),\n", " Timestamp('2012-12-11 00:00:00', tz=None),\n", " Timestamp('2013-01-08 00:00:00', tz=None),\n", " Timestamp('2013-02-12 00:00:00', tz=None),\n", " Timestamp('2013-03-12 00:00:00', tz=None),\n", " Timestamp('2013-04-09 00:00:00', tz=None),\n", " Timestamp('2013-05-14 00:00:00', tz=None),\n", " Timestamp('2013-06-11 00:00:00', tz=None),\n", " Timestamp('2013-07-09 00:00:00', tz=None),\n", " Timestamp('2013-08-13 00:00:00', tz=None),\n", " Timestamp('2013-09-10 00:00:00', tz=None),\n", " Timestamp('2013-10-08 00:00:00', tz=None),\n", " Timestamp('2013-11-12 00:00:00', tz=None),\n", " Timestamp('2013-12-10 00:00:00', tz=None)]" ] } ], "prompt_number": 181 }, { "cell_type": "markdown", "metadata": {}, "source": [ "Shifting (Leading and Lagging) Data\n", "------------------------------------\n", "\n", "Move data back and forth through time. `Series` and `DateFrame` objects have a `shift` method for doing naive shifts forward and backward and leaving the index unchanged." ] }, { "cell_type": "code", "collapsed": false, "input": [ "ts = Series(np.random.randint(1,10,4),index = pd.date_range('1/2/2013',periods=4,freq='M'))\n", "ts" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 182, "text": [ "2013-01-31 3\n", "2013-02-28 9\n", "2013-03-31 1\n", "2013-04-30 1\n", "Freq: M, dtype: int32" ] } ], "prompt_number": 182 }, { "cell_type": "code", "collapsed": false, "input": [ "ts.shift(periods = 2)" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 183, "text": [ "2013-01-31 NaN\n", "2013-02-28 NaN\n", "2013-03-31 3\n", "2013-04-30 9\n", "Freq: M, dtype: float64" ] } ], "prompt_number": 183 }, { "cell_type": "code", "collapsed": false, "input": [ "# Common use is pct change\n", "ts/ts.shift(1) - 1.0" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 184, "text": [ "2013-01-31 NaN\n", "2013-02-28 2.000000\n", "2013-03-31 -0.888889\n", "2013-04-30 0.000000\n", "Freq: M, dtype: float64" ] } ], "prompt_number": 184 }, { "cell_type": "code", "collapsed": false, "input": [ "# Since naive shifts leave index unchanged, some data is lost. To shift both data and index, pass in the frequency\n", "ts.shift(1)" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 185, "text": [ "2013-01-31 NaN\n", "2013-02-28 3\n", "2013-03-31 9\n", "2013-04-30 1\n", "Freq: M, dtype: float64" ] } ], "prompt_number": 185 }, { "cell_type": "code", "collapsed": false, "input": [ "ts.shift(1, freq='M')" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 186, "text": [ "2013-02-28 3\n", "2013-03-31 9\n", "2013-04-30 1\n", "2013-05-31 1\n", "Freq: M, dtype: int32" ] } ], "prompt_number": 186 }, { "cell_type": "markdown", "metadata": {}, "source": [ "Periods and period arithmetic\n", "------------------------------\n", "\n", "Periods represent time spans like months or quarters or years." ] }, { "cell_type": "code", "collapsed": false, "input": [ "p = pd.Period('6/1/2014',freq='M')\n", "p" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 187, "text": [ "Period('2014-06', 'M')" ] } ], "prompt_number": 187 }, { "cell_type": "code", "collapsed": false, "input": [ "p+6" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 188, "text": [ "Period('2014-12', 'M')" ] } ], "prompt_number": 188 }, { "cell_type": "code", "collapsed": false, "input": [ "# Ranges of periods is done much like ranges of dates\n", "rng = pd.period_range('1/1/2010','6/1/2014',freq='Q')" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 189 }, { "cell_type": "code", "collapsed": false, "input": [ "rng" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 190, "text": [ "\n", "freq: Q-DEC\n", "[2010Q1, ..., 2014Q2]\n", "length: 18" ] } ], "prompt_number": 190 }, { "cell_type": "code", "collapsed": false, "input": [ "list(rng)" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 191, "text": [ "[Period('2010Q1', 'Q-DEC'),\n", " Period('2010Q2', 'Q-DEC'),\n", " Period('2010Q3', 'Q-DEC'),\n", " Period('2010Q4', 'Q-DEC'),\n", " Period('2011Q1', 'Q-DEC'),\n", " Period('2011Q2', 'Q-DEC'),\n", " Period('2011Q3', 'Q-DEC'),\n", " Period('2011Q4', 'Q-DEC'),\n", " Period('2012Q1', 'Q-DEC'),\n", " Period('2012Q2', 'Q-DEC'),\n", " Period('2012Q3', 'Q-DEC'),\n", " Period('2012Q4', 'Q-DEC'),\n", " Period('2013Q1', 'Q-DEC'),\n", " Period('2013Q2', 'Q-DEC'),\n", " Period('2013Q3', 'Q-DEC'),\n", " Period('2013Q4', 'Q-DEC'),\n", " Period('2014Q1', 'Q-DEC'),\n", " Period('2014Q2', 'Q-DEC')]" ] } ], "prompt_number": 191 }, { "cell_type": "code", "collapsed": false, "input": [ "p.asfreq('M','start')" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 192, "text": [ "Period('2014-06', 'M')" ] } ], "prompt_number": 192 }, { "cell_type": "code", "collapsed": false, "input": [ "p.asfreq('M','end')" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 193, "text": [ "Period('2014-06', 'M')" ] } ], "prompt_number": 193 }, { "cell_type": "markdown", "metadata": {}, "source": [ "Resampling and frequency conversion\n", "-----------------------------------\n", "\n", "*Resampling* - convert time series from one frequency to another.\n", "\n", "- *Downsampling* - higher frequency to lower frequency (e.g. daily to monthly)\n", "- *Upsampling* - lower frequency to higher frequency (e.g. annual to monthly)\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Downsampling\n", "\n", "Take a daily time series and convert to monthly.\n", "\n" ] }, { "cell_type": "code", "collapsed": false, "input": [ "rng = pd.date_range('9/1/2012',periods=100,freq='D')" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 194 }, { "cell_type": "code", "collapsed": false, "input": [ "ts = Series(np.random.randint(1,25,len(rng)),index=rng)" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 195 }, { "cell_type": "code", "collapsed": false, "input": [ "ts" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 196, "text": [ "2012-09-01 13\n", "2012-09-02 18\n", "2012-09-03 7\n", "2012-09-04 21\n", "2012-09-05 21\n", "2012-09-06 17\n", "2012-09-07 20\n", "2012-09-08 24\n", "2012-09-09 20\n", "2012-09-10 4\n", "2012-09-11 23\n", "2012-09-12 18\n", "2012-09-13 24\n", "2012-09-14 24\n", "2012-09-15 2\n", "...\n", "2012-11-25 3\n", "2012-11-26 6\n", "2012-11-27 2\n", "2012-11-28 2\n", "2012-11-29 10\n", "2012-11-30 18\n", "2012-12-01 19\n", "2012-12-02 24\n", "2012-12-03 15\n", "2012-12-04 3\n", "2012-12-05 13\n", "2012-12-06 14\n", "2012-12-07 13\n", "2012-12-08 2\n", "2012-12-09 21\n", "Freq: D, Length: 100" ] } ], "prompt_number": 196 }, { "cell_type": "code", "collapsed": false, "input": [ "ts.resample('M',how='mean',kind='period')" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 197, "text": [ "2012-09 12.666667\n", "2012-10 12.806452\n", "2012-11 10.633333\n", "2012-12 13.777778\n", "Freq: M, dtype: float64" ] } ], "prompt_number": 197 }, { "cell_type": "code", "collapsed": false, "input": [ "ts.resample('M',how='sum',kind='period')" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 198, "text": [ "2012-09 380\n", "2012-10 397\n", "2012-11 319\n", "2012-12 124\n", "Freq: M, dtype: int32" ] } ], "prompt_number": 198 }, { "cell_type": "code", "collapsed": false, "input": [ "ts.resample('M',how='sum')" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 199, "text": [ "2012-09-30 380\n", "2012-10-31 397\n", "2012-11-30 319\n", "2012-12-31 124\n", "Freq: M, dtype: int32" ] } ], "prompt_number": 199 }, { "cell_type": "markdown", "metadata": {}, "source": [ "Whenver you are downsampling, you need to think about two *bin boundary* issues:\n", "\n", "* is the interval closed on the left or the right?\n", "* is the bin label based on the left or right bin boundary?\n", "\n", "With resampling from days to months, the question of left or right closure isn't really an issue, but consider changing from 15 minute time bins to 30 minute time bins." ] }, { "cell_type": "code", "collapsed": false, "input": [ "rng15 = pd.date_range('9/1/2012',periods=96,freq='15T')" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 200 }, { "cell_type": "code", "collapsed": false, "input": [ "ts15 = Series(np.random.randint(1,25,len(rng15)),index=rng15)" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 201 }, { "cell_type": "code", "collapsed": false, "input": [ "ts15" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 202, "text": [ "2012-09-01 00:00:00 16\n", "2012-09-01 00:15:00 7\n", "2012-09-01 00:30:00 4\n", "2012-09-01 00:45:00 7\n", "2012-09-01 01:00:00 18\n", "2012-09-01 01:15:00 1\n", "2012-09-01 01:30:00 4\n", "2012-09-01 01:45:00 7\n", "2012-09-01 02:00:00 7\n", "2012-09-01 02:15:00 22\n", "2012-09-01 02:30:00 24\n", "2012-09-01 02:45:00 6\n", "2012-09-01 03:00:00 22\n", "2012-09-01 03:15:00 5\n", "2012-09-01 03:30:00 1\n", "...\n", "2012-09-01 20:15:00 11\n", "2012-09-01 20:30:00 2\n", "2012-09-01 20:45:00 7\n", "2012-09-01 21:00:00 20\n", "2012-09-01 21:15:00 1\n", "2012-09-01 21:30:00 13\n", "2012-09-01 21:45:00 9\n", "2012-09-01 22:00:00 5\n", "2012-09-01 22:15:00 21\n", "2012-09-01 22:30:00 17\n", "2012-09-01 22:45:00 20\n", "2012-09-01 23:00:00 21\n", "2012-09-01 23:15:00 18\n", "2012-09-01 23:30:00 19\n", "2012-09-01 23:45:00 21\n", "Freq: 15T, Length: 96" ] } ], "prompt_number": 202 }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now, if we resample to 30 minute bins and take the mean across each set of two 15 bins, we need to specify if the times on the half hour such as 22:30 in the original series should go in the bin from (22:15,22:30] or [22:30,22:45). The first is referred to as closed on the right and the second as closed on the left. The default is close on right. You can also control whether the left or right edge of the bin is used as the label (independent of which side \"closes\" the interval)." ] }, { "cell_type": "code", "collapsed": false, "input": [ "ts15.resample('30min',how='mean',closed='right',label='left')" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 203, "text": [ "2012-08-31 23:30:00 16.0\n", "2012-09-01 00:00:00 5.5\n", "2012-09-01 00:30:00 12.5\n", "2012-09-01 01:00:00 2.5\n", "2012-09-01 01:30:00 7.0\n", "2012-09-01 02:00:00 23.0\n", "2012-09-01 02:30:00 14.0\n", "2012-09-01 03:00:00 3.0\n", "2012-09-01 03:30:00 10.5\n", "2012-09-01 04:00:00 11.5\n", "2012-09-01 04:30:00 20.0\n", "2012-09-01 05:00:00 19.5\n", "2012-09-01 05:30:00 15.0\n", "2012-09-01 06:00:00 17.0\n", "2012-09-01 06:30:00 20.0\n", "2012-09-01 07:00:00 9.0\n", "2012-09-01 07:30:00 13.0\n", "2012-09-01 08:00:00 18.5\n", "2012-09-01 08:30:00 12.0\n", "2012-09-01 09:00:00 7.0\n", "2012-09-01 09:30:00 20.5\n", "2012-09-01 10:00:00 15.0\n", "2012-09-01 10:30:00 8.5\n", "2012-09-01 11:00:00 16.0\n", "2012-09-01 11:30:00 11.5\n", "2012-09-01 12:00:00 12.0\n", "2012-09-01 12:30:00 17.0\n", "2012-09-01 13:00:00 12.0\n", "2012-09-01 13:30:00 4.5\n", "2012-09-01 14:00:00 16.0\n", "2012-09-01 14:30:00 11.5\n", "2012-09-01 15:00:00 7.5\n", "2012-09-01 15:30:00 12.0\n", "2012-09-01 16:00:00 7.5\n", "2012-09-01 16:30:00 5.0\n", "2012-09-01 17:00:00 20.0\n", "2012-09-01 17:30:00 11.0\n", "2012-09-01 18:00:00 13.0\n", "2012-09-01 18:30:00 14.0\n", "2012-09-01 19:00:00 15.5\n", "2012-09-01 19:30:00 14.5\n", "2012-09-01 20:00:00 6.5\n", "2012-09-01 20:30:00 13.5\n", "2012-09-01 21:00:00 7.0\n", "2012-09-01 21:30:00 7.0\n", "2012-09-01 22:00:00 19.0\n", "2012-09-01 22:30:00 20.5\n", "2012-09-01 23:00:00 18.5\n", "2012-09-01 23:30:00 21.0\n", "Freq: 30T, dtype: float64" ] } ], "prompt_number": 203 }, { "cell_type": "markdown", "metadata": {}, "source": [ "Notice how in the example above, the first record is labelled with '2012-08-31' since it's the left boundary and we picked 'right' for closing intervals and 'left' for labelling. We might want to close and label on the left." ] }, { "cell_type": "code", "collapsed": false, "input": [ "ts30 = ts15.resample('30min',how='mean',closed='left',label='left')\n", "ts30" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 204, "text": [ "2012-09-01 00:00:00 11.5\n", "2012-09-01 00:30:00 5.5\n", "2012-09-01 01:00:00 9.5\n", "2012-09-01 01:30:00 5.5\n", "2012-09-01 02:00:00 14.5\n", "2012-09-01 02:30:00 15.0\n", "2012-09-01 03:00:00 13.5\n", "2012-09-01 03:30:00 2.0\n", "2012-09-01 04:00:00 13.0\n", "2012-09-01 04:30:00 17.5\n", "2012-09-01 05:00:00 22.0\n", "2012-09-01 05:30:00 17.5\n", "2012-09-01 06:00:00 13.5\n", "2012-09-01 06:30:00 16.5\n", "2012-09-01 07:00:00 20.0\n", "2012-09-01 07:30:00 4.0\n", "2012-09-01 08:00:00 20.0\n", "2012-09-01 08:30:00 20.0\n", "2012-09-01 09:00:00 3.0\n", "2012-09-01 09:30:00 13.0\n", "2012-09-01 10:00:00 18.0\n", "2012-09-01 10:30:00 14.5\n", "2012-09-01 11:00:00 11.5\n", "2012-09-01 11:30:00 14.0\n", "2012-09-01 12:00:00 12.0\n", "2012-09-01 12:30:00 14.0\n", "2012-09-01 13:00:00 11.0\n", "2012-09-01 13:30:00 12.5\n", "2012-09-01 14:00:00 9.5\n", "2012-09-01 14:30:00 16.5\n", "2012-09-01 15:00:00 7.0\n", "2012-09-01 15:30:00 3.5\n", "2012-09-01 16:00:00 12.5\n", "2012-09-01 16:30:00 8.5\n", "2012-09-01 17:00:00 14.5\n", "2012-09-01 17:30:00 18.5\n", "2012-09-01 18:00:00 13.0\n", "2012-09-01 18:30:00 9.5\n", "2012-09-01 19:00:00 13.5\n", "2012-09-01 19:30:00 12.0\n", "2012-09-01 20:00:00 15.5\n", "2012-09-01 20:30:00 4.5\n", "2012-09-01 21:00:00 10.5\n", "2012-09-01 21:30:00 11.0\n", "2012-09-01 22:00:00 13.0\n", "2012-09-01 22:30:00 18.5\n", "2012-09-01 23:00:00 19.5\n", "2012-09-01 23:30:00 20.0\n", "Freq: 30T, dtype: float64" ] } ], "prompt_number": 204 }, { "cell_type": "markdown", "metadata": {}, "source": [ "A common financial aggregation is to compute the first (open), last (close), max (high), min (low) values for each bucket. If you use 'ohlc' for the `how` argument, you get a `DataFrame` with these aggregations computed automatically." ] }, { "cell_type": "code", "collapsed": false, "input": [ "ts60 = ts15.resample('60min',how='ohlc',closed='left',label='left')\n", "ts60" ], "language": "python", "metadata": {}, "outputs": [ { "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", "
openhighlowclose
2012-09-01 00:00:00 16 16 4 7
2012-09-01 01:00:00 18 18 1 7
2012-09-01 02:00:00 7 24 6 6
2012-09-01 03:00:00 22 22 1 3
2012-09-01 04:00:00 18 20 8 20
2012-09-01 05:00:00 20 24 15 20
2012-09-01 06:00:00 10 17 10 16
2012-09-01 07:00:00 24 24 2 6
2012-09-01 08:00:00 20 23 17 23
2012-09-01 09:00:00 1 17 1 17
2012-09-01 10:00:00 24 24 11 11
2012-09-01 11:00:00 6 17 6 13
2012-09-01 12:00:00 10 18 10 18
2012-09-01 13:00:00 16 18 6 7
2012-09-01 14:00:00 2 18 2 18
2012-09-01 15:00:00 5 9 1 1
2012-09-01 16:00:00 23 23 2 4
2012-09-01 17:00:00 6 23 6 20
2012-09-01 18:00:00 2 24 2 17
2012-09-01 19:00:00 11 16 9 9
2012-09-01 20:00:00 20 20 2 7
2012-09-01 21:00:00 20 20 1 9
2012-09-01 22:00:00 5 21 5 20
2012-09-01 23:00:00 21 21 18 21
\n", "

24 rows \u00d7 4 columns

\n", "
" ], "metadata": {}, "output_type": "pyout", "prompt_number": 205, "text": [ " open high low close\n", "2012-09-01 00:00:00 16 16 4 7\n", "2012-09-01 01:00:00 18 18 1 7\n", "2012-09-01 02:00:00 7 24 6 6\n", "2012-09-01 03:00:00 22 22 1 3\n", "2012-09-01 04:00:00 18 20 8 20\n", "2012-09-01 05:00:00 20 24 15 20\n", "2012-09-01 06:00:00 10 17 10 16\n", "2012-09-01 07:00:00 24 24 2 6\n", "2012-09-01 08:00:00 20 23 17 23\n", "2012-09-01 09:00:00 1 17 1 17\n", "2012-09-01 10:00:00 24 24 11 11\n", "2012-09-01 11:00:00 6 17 6 13\n", "2012-09-01 12:00:00 10 18 10 18\n", "2012-09-01 13:00:00 16 18 6 7\n", "2012-09-01 14:00:00 2 18 2 18\n", "2012-09-01 15:00:00 5 9 1 1\n", "2012-09-01 16:00:00 23 23 2 4\n", "2012-09-01 17:00:00 6 23 6 20\n", "2012-09-01 18:00:00 2 24 2 17\n", "2012-09-01 19:00:00 11 16 9 9\n", "2012-09-01 20:00:00 20 20 2 7\n", "2012-09-01 21:00:00 20 20 1 9\n", "2012-09-01 22:00:00 5 21 5 20\n", "2012-09-01 23:00:00 21 21 18 21\n", "\n", "[24 rows x 4 columns]" ] } ], "prompt_number": 205 }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Upsampling\n", "\n", "Upsampling brings an entirely different set of challenges. If we increase the frequency of the samples, how do we fill in these new time series values? For example, consider the reverse of the last example. Then check out the `fill_method` options." ] }, { "cell_type": "code", "collapsed": false, "input": [ "ts30" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 206, "text": [ "2012-09-01 00:00:00 11.5\n", "2012-09-01 00:30:00 5.5\n", "2012-09-01 01:00:00 9.5\n", "2012-09-01 01:30:00 5.5\n", "2012-09-01 02:00:00 14.5\n", "2012-09-01 02:30:00 15.0\n", "2012-09-01 03:00:00 13.5\n", "2012-09-01 03:30:00 2.0\n", "2012-09-01 04:00:00 13.0\n", "2012-09-01 04:30:00 17.5\n", "2012-09-01 05:00:00 22.0\n", "2012-09-01 05:30:00 17.5\n", "2012-09-01 06:00:00 13.5\n", "2012-09-01 06:30:00 16.5\n", "2012-09-01 07:00:00 20.0\n", "2012-09-01 07:30:00 4.0\n", "2012-09-01 08:00:00 20.0\n", "2012-09-01 08:30:00 20.0\n", "2012-09-01 09:00:00 3.0\n", "2012-09-01 09:30:00 13.0\n", "2012-09-01 10:00:00 18.0\n", "2012-09-01 10:30:00 14.5\n", "2012-09-01 11:00:00 11.5\n", "2012-09-01 11:30:00 14.0\n", "2012-09-01 12:00:00 12.0\n", "2012-09-01 12:30:00 14.0\n", "2012-09-01 13:00:00 11.0\n", "2012-09-01 13:30:00 12.5\n", "2012-09-01 14:00:00 9.5\n", "2012-09-01 14:30:00 16.5\n", "2012-09-01 15:00:00 7.0\n", "2012-09-01 15:30:00 3.5\n", "2012-09-01 16:00:00 12.5\n", "2012-09-01 16:30:00 8.5\n", "2012-09-01 17:00:00 14.5\n", "2012-09-01 17:30:00 18.5\n", "2012-09-01 18:00:00 13.0\n", "2012-09-01 18:30:00 9.5\n", "2012-09-01 19:00:00 13.5\n", "2012-09-01 19:30:00 12.0\n", "2012-09-01 20:00:00 15.5\n", "2012-09-01 20:30:00 4.5\n", "2012-09-01 21:00:00 10.5\n", "2012-09-01 21:30:00 11.0\n", "2012-09-01 22:00:00 13.0\n", "2012-09-01 22:30:00 18.5\n", "2012-09-01 23:00:00 19.5\n", "2012-09-01 23:30:00 20.0\n", "Freq: 30T, dtype: float64" ] } ], "prompt_number": 206 }, { "cell_type": "code", "collapsed": false, "input": [ "ts30.resample('15min')" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 207, "text": [ "2012-09-01 00:00:00 11.5\n", "2012-09-01 00:15:00 NaN\n", "2012-09-01 00:30:00 5.5\n", "2012-09-01 00:45:00 NaN\n", "2012-09-01 01:00:00 9.5\n", "2012-09-01 01:15:00 NaN\n", "2012-09-01 01:30:00 5.5\n", "2012-09-01 01:45:00 NaN\n", "2012-09-01 02:00:00 14.5\n", "2012-09-01 02:15:00 NaN\n", "2012-09-01 02:30:00 15.0\n", "2012-09-01 02:45:00 NaN\n", "2012-09-01 03:00:00 13.5\n", "2012-09-01 03:15:00 NaN\n", "2012-09-01 03:30:00 2.0\n", "...\n", "2012-09-01 20:00:00 15.5\n", "2012-09-01 20:15:00 NaN\n", "2012-09-01 20:30:00 4.5\n", "2012-09-01 20:45:00 NaN\n", "2012-09-01 21:00:00 10.5\n", "2012-09-01 21:15:00 NaN\n", "2012-09-01 21:30:00 11.0\n", "2012-09-01 21:45:00 NaN\n", "2012-09-01 22:00:00 13.0\n", "2012-09-01 22:15:00 NaN\n", "2012-09-01 22:30:00 18.5\n", "2012-09-01 22:45:00 NaN\n", "2012-09-01 23:00:00 19.5\n", "2012-09-01 23:15:00 NaN\n", "2012-09-01 23:30:00 20.0\n", "Freq: 15T, Length: 95" ] } ], "prompt_number": 207 }, { "cell_type": "markdown", "metadata": {}, "source": [ "Time Series Plotting \n", "--------------------\n", "\n", "Pandas tries to make it a little easier to create nice looking time series plots using `matplotlib` than if you just used `matplotlib` yourself. Let's read in some stock price data from Yahoo! Finance that has already been saved to a csv file." ] }, { "cell_type": "code", "collapsed": false, "input": [ "close_px_all = pd.read_csv('stock_px.csv', parse_dates=True, index_col=0)" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 208 }, { "cell_type": "code", "collapsed": false, "input": [ "close_px_all.head()" ], "language": "python", "metadata": {}, "outputs": [ { "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", "
AAPLMSFTXOMSPX
2003-01-02 7.40 21.11 29.22 909.03
2003-01-03 7.45 21.14 29.24 908.59
2003-01-06 7.45 21.52 29.96 929.01
2003-01-07 7.43 21.93 28.95 922.93
2003-01-08 7.28 21.31 28.83 909.93
\n", "

5 rows \u00d7 4 columns

\n", "
" ], "metadata": {}, "output_type": "pyout", "prompt_number": 209, "text": [ " AAPL MSFT XOM SPX\n", "2003-01-02 7.40 21.11 29.22 909.03\n", "2003-01-03 7.45 21.14 29.24 908.59\n", "2003-01-06 7.45 21.52 29.96 929.01\n", "2003-01-07 7.43 21.93 28.95 922.93\n", "2003-01-08 7.28 21.31 28.83 909.93\n", "\n", "[5 rows x 4 columns]" ] } ], "prompt_number": 209 }, { "cell_type": "code", "collapsed": false, "input": [ "close_px = close_px_all[['AAPL','MSFT','XOM']]" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 210 }, { "cell_type": "code", "collapsed": false, "input": [ "close_px[1:10]" ], "language": "python", "metadata": {}, "outputs": [ { "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", "
AAPLMSFTXOM
2003-01-03 7.45 21.14 29.24
2003-01-06 7.45 21.52 29.96
2003-01-07 7.43 21.93 28.95
2003-01-08 7.28 21.31 28.83
2003-01-09 7.34 21.93 29.44
2003-01-10 7.36 21.97 29.03
2003-01-13 7.32 22.16 28.91
2003-01-14 7.30 22.39 29.17
2003-01-15 7.22 22.11 28.77
\n", "

9 rows \u00d7 3 columns

\n", "
" ], "metadata": {}, "output_type": "pyout", "prompt_number": 211, "text": [ " AAPL MSFT XOM\n", "2003-01-03 7.45 21.14 29.24\n", "2003-01-06 7.45 21.52 29.96\n", "2003-01-07 7.43 21.93 28.95\n", "2003-01-08 7.28 21.31 28.83\n", "2003-01-09 7.34 21.93 29.44\n", "2003-01-10 7.36 21.97 29.03\n", "2003-01-13 7.32 22.16 28.91\n", "2003-01-14 7.30 22.39 29.17\n", "2003-01-15 7.22 22.11 28.77\n", "\n", "[9 rows x 3 columns]" ] } ], "prompt_number": 211 }, { "cell_type": "code", "collapsed": false, "input": [ "close_px['AAPL'].plot()" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 212, "text": [ "" ] }, { "metadata": {}, "output_type": "display_data", "png": "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\n", "text": [ "" ] } ], "prompt_number": 212 }, { "cell_type": "code", "collapsed": false, "input": [ "close_px.plot()" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 213, "text": [ "" ] }, { "metadata": {}, "output_type": "display_data", "png": "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\njprqh69fcC7RP+k8wwy6kpPtLczXXhO3yf794maJirKX27xZqY0blRo82O5C+OEH2f7668rTW9l1\nZtTNCy8odeyYc4v85pslfeYZqa/582W/c2elLrrIXu755ytVshNmeMZcYUY3i44B11Rp9uyxz639\nzjuweLGsgNOwocxKaKypOWKETAr1228yAVWjRnDHHZCaKpNdeYWdO53DRRxJTJT5AtwlPR3WrpXt\no0dhypQySbrpJhmG/8EHUicX23qwateW+dMBfv1Vjj32mExjsGGD84pHRoy6pozk5hZd8LUa4ZO3\nmsb7vPiiUosX++beVqtSDRsq9eijSs2da29J1qtX1C/s+CkTP/6o1JEjRfMzM5W68kqlOnSQi/fs\nqdSsWfbj+flKjRljv/nUqe7d7777pHybNkrddptsW61lFG9n92651Nq1sm/IuukmSf/9b8k/e1ap\nN96QvPfeK/dtzw9Aqffft+/v3q3UH38o9a9/ybGtW4s/NyOj5OMFtzCf29oLNafxNXl58owOGFD5\n9z5wQKnx4+X+O3dK3o4dduP06adKHT4sHXugVLdukiYnl+Fm8fHFvwn69nX9xjBu9Oyz9rx33pH0\nm2/s51utSk2cqFROjj1vyxYpd/nlztds106p778XS1tGw370qFwqIUH216+XS65fL/kvveRcHpR6\n7rky3er8IC9PKtDxe/rmG6W++so5r1cv8Wfl5Sk1bpxSqan2a5w9q1RYmJRzzHcB2pi7h/bPecZv\nv8UrUOqaayr3voZvt7A/V0ISpSHkWGd79pSzUWvc7JZb5C1isGKFUrVrK3XwoFKjR8vb49NPixr2\npk2ltZ6VpeJBqWHD7Ne48UYp06mTpN99Zz/v7Fn79uLFRa87ZIjHf4oR6ZOe7pw/f758l2++6Zy/\nZ49Sp055fBuvYdZnv0DXqlX272P2bHkOHJ+XPn0kNMjx1xkodcEFSq1erdSrrzrnl/L3oo25e5j+\nwTEZU6eKAWjZ0isegFI5flzShx+2P/s7djiXSU1Vat8+L9TZnDlKzZxpj9UzfA4gwdexsbL98MPO\n5xUO7q5bV6msrILD8e++K/kNG9pb6oU/nTq5rlBXZb/8UqmVK51b9iVgtUrHr1JKzrG5juLj5bu8\n774y1FUFYtZnPz4+XqnsbDHWPXvav6+DB+3GujATJigVEaHU2LHO3+Enn8iL+9//Vmr48OJvunSp\n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\nYxLjX9GZnfbQPY9MAAAAAElFTkSuQmCC\n", "text": [ "" ] } ], "prompt_number": 213 }, { "cell_type": "code", "collapsed": false, "input": [ "# And here's what it looks like if we just plot one year. Notice the auto x-axis formatting.\n", "close_px.ix['2009'].plot()" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 214, "text": [ "" ] }, { "metadata": {}, "output_type": "display_data", "png": "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\n/QM2PgAAAABJRU5ErkJggg==\n", "text": [ "" ] } ], "prompt_number": 214 }, { "cell_type": "code", "collapsed": false, "input": [ "close_px.index" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 215, "text": [ "\n", "[2003-01-02, ..., 2011-10-14]\n", "Length: 2214, Freq: None, Timezone: None" ] } ], "prompt_number": 215 }, { "cell_type": "code", "collapsed": false, "input": [ "list(close_px.index)[1:25]" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 216, "text": [ "[Timestamp('2003-01-03 00:00:00', tz=None),\n", " Timestamp('2003-01-06 00:00:00', tz=None),\n", " Timestamp('2003-01-07 00:00:00', tz=None),\n", " Timestamp('2003-01-08 00:00:00', tz=None),\n", " Timestamp('2003-01-09 00:00:00', tz=None),\n", " Timestamp('2003-01-10 00:00:00', tz=None),\n", " Timestamp('2003-01-13 00:00:00', tz=None),\n", " Timestamp('2003-01-14 00:00:00', tz=None),\n", " Timestamp('2003-01-15 00:00:00', tz=None),\n", " Timestamp('2003-01-16 00:00:00', tz=None),\n", " Timestamp('2003-01-17 00:00:00', tz=None),\n", " Timestamp('2003-01-21 00:00:00', tz=None),\n", " Timestamp('2003-01-22 00:00:00', tz=None),\n", " Timestamp('2003-01-23 00:00:00', tz=None),\n", " Timestamp('2003-01-24 00:00:00', tz=None),\n", " Timestamp('2003-01-27 00:00:00', tz=None),\n", " Timestamp('2003-01-28 00:00:00', tz=None),\n", " Timestamp('2003-01-29 00:00:00', tz=None),\n", " Timestamp('2003-01-30 00:00:00', tz=None),\n", " Timestamp('2003-01-31 00:00:00', tz=None),\n", " Timestamp('2003-02-03 00:00:00', tz=None),\n", " Timestamp('2003-02-04 00:00:00', tz=None),\n", " Timestamp('2003-02-05 00:00:00', tz=None),\n", " Timestamp('2003-02-06 00:00:00', tz=None)]" ] } ], "prompt_number": 216 }, { "cell_type": "code", "collapsed": false, "input": [ "close_px['AAPL'].ix['01-2011':'03-2011'].plot()" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 217, "text": [ "" ] }, { "metadata": {}, "output_type": "display_data", "png": "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\n", "text": [ "" ] } ], "prompt_number": 217 }, { "cell_type": "markdown", "metadata": {}, "source": [ "Pandas does a particulary nice job with quarterly data." ] }, { "cell_type": "code", "collapsed": false, "input": [ "appl_q = close_px['AAPL'].resample('Q-DEC')" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 218 }, { "cell_type": "code", "collapsed": false, "input": [ "appl_q" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 219, "text": [ "2003-03-31 7.289180\n", "2003-06-30 8.299365\n", "2003-09-30 10.499844\n", "2003-12-31 10.893906\n", "2004-03-31 12.031613\n", "2004-06-30 14.335645\n", "2004-09-30 16.609219\n", "2004-12-31 27.792813\n", "2005-03-31 39.535574\n", "2005-06-30 37.876719\n", "2005-09-30 45.719219\n", "2005-12-31 63.500476\n", "2006-03-31 70.159194\n", "2006-06-30 64.030000\n", "2006-09-30 66.210635\n", "2006-12-31 82.832381\n", "2007-03-31 88.520164\n", "2007-06-30 108.308254\n", "2007-09-30 135.619683\n", "2007-12-31 178.586875\n", "2008-03-31 139.138689\n", "2008-06-30 173.566719\n", "2008-09-30 160.141250\n", "2008-12-31 94.936250\n", "2009-03-31 93.574098\n", "2009-06-30 129.413333\n", "2009-09-30 164.225156\n", "2009-12-31 197.276406\n", "2010-03-31 210.855082\n", "2010-06-30 254.738889\n", "2010-09-30 259.905156\n", "2010-12-31 311.494688\n", "2011-03-31 345.683226\n", "2011-06-30 337.612381\n", "2011-09-30 380.510312\n", "2011-12-31 389.424000\n", "Freq: Q-DEC, Name: AAPL, dtype: float64" ] } ], "prompt_number": 219 }, { "cell_type": "code", "collapsed": false, "input": [ "appl_q.ix['2009':].plot()" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 220, "text": [ "" ] }, { "metadata": {}, "output_type": "display_data", "png": "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\n+wecx9+53nsREREREREREREREREREREREREREREREREREck8/w+bM9XqHWevBgAAAABJRU5ErkJg\ngg==\n", "text": [ "" ] } ], "prompt_number": 220 }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Moving window functions\n", "\n", "Pandas makes it easy to do all kinds of *moving window* operations like moving average, cumulative sums, and even things like exponential moving averages (\"exponential smoothing\")." ] }, { "cell_type": "code", "collapsed": false, "input": [ "close_px.AAPL.plot()\n", "pd.rolling_mean(close_px.AAPL,250).plot()" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 221, "text": [ "" ] }, { "metadata": {}, "output_type": "display_data", "png": "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\n", "text": [ "" ] } ], "prompt_number": 221 }, { "cell_type": "code", "collapsed": false, "input": [ "pd.rolling_mean(close_px.AAPL,250)" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 222, "text": [ "2003-01-02 NaN\n", "2003-01-03 NaN\n", "2003-01-06 NaN\n", "2003-01-07 NaN\n", "2003-01-08 NaN\n", "2003-01-09 NaN\n", "2003-01-10 NaN\n", "2003-01-13 NaN\n", "2003-01-14 NaN\n", "2003-01-15 NaN\n", "2003-01-16 NaN\n", "2003-01-17 NaN\n", "2003-01-21 NaN\n", "2003-01-22 NaN\n", "2003-01-23 NaN\n", "...\n", "2011-09-26 342.82340\n", "2011-09-27 343.28544\n", "2011-09-28 343.74340\n", "2011-09-29 344.19112\n", "2011-09-30 344.56064\n", "2011-10-03 344.90228\n", "2011-10-04 345.23540\n", "2011-10-05 345.57212\n", "2011-10-06 345.90016\n", "2011-10-07 346.18520\n", "2011-10-10 346.53988\n", "2011-10-11 346.93180\n", "2011-10-12 347.28160\n", "2011-10-13 347.64332\n", "2011-10-14 348.09336\n", "Length: 2214" ] } ], "prompt_number": 222 }, { "cell_type": "markdown", "metadata": {}, "source": [ "This example shows one problem with a moving average - by default you usually can't compute it until you have data for the number of periods corresponding to the window size (250 in this case). Pandas lets you specify an alternate minumum number of data points to get around this problem." ] }, { "cell_type": "code", "collapsed": false, "input": [ "pd.rolling_mean(close_px.AAPL,250,min_periods=10)" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 223, "text": [ "2003-01-02 NaN\n", "2003-01-03 NaN\n", "2003-01-06 NaN\n", "2003-01-07 NaN\n", "2003-01-08 NaN\n", "2003-01-09 NaN\n", "2003-01-10 NaN\n", "2003-01-13 NaN\n", "2003-01-14 NaN\n", "2003-01-15 7.355000\n", "2003-01-16 7.350909\n", "2003-01-17 7.325833\n", "2003-01-21 7.301538\n", "2003-01-22 7.275714\n", "2003-01-23 7.263333\n", "...\n", "2011-09-26 342.82340\n", "2011-09-27 343.28544\n", "2011-09-28 343.74340\n", "2011-09-29 344.19112\n", "2011-09-30 344.56064\n", "2011-10-03 344.90228\n", "2011-10-04 345.23540\n", "2011-10-05 345.57212\n", "2011-10-06 345.90016\n", "2011-10-07 346.18520\n", "2011-10-10 346.53988\n", "2011-10-11 346.93180\n", "2011-10-12 347.28160\n", "2011-10-13 347.64332\n", "2011-10-14 348.09336\n", "Length: 2214" ] } ], "prompt_number": 223 }, { "cell_type": "code", "collapsed": false, "input": [ "close_px.AAPL.plot()\n", "pd.rolling_mean(close_px.AAPL,250,min_periods=10).plot()" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 224, "text": [ "" ] }, { "metadata": {}, "output_type": "display_data", "png": "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\nKIrF+H/tgn4N+X0H4AAAAABJRU5ErkJggg==\n", "text": [ "" ] } ], "prompt_number": 224 }, { "cell_type": "code", "collapsed": false, "input": [ "# Things like rolling standard deviation are also possible\n", "appl_std250 = pd.rolling_std(close_px.AAPL,250,min_periods=10)" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 225 }, { "cell_type": "code", "collapsed": false, "input": [ "appl_std250.plot()" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 226, "text": [ "" ] }, { "metadata": {}, "output_type": "display_data", "png": "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\n", "text": [ "" ] } ], "prompt_number": 226 }, { "cell_type": "markdown", "metadata": {}, "source": [ "Learn more about pandas timeseries\n", "-----------------------------------\n", "\n", "Another intro tutorial is [http://earthpy.org/pandas-basics.html](http://earthpy.org/pandas-basics.html)\n", "\n", "Wes Mckinney's 2012 PyCon talk on pandas and timeseries - [http://pyvideo.org/video/1198/time-series-data-analysis-with-pandas](http://pyvideo.org/video/1198/time-series-data-analysis-with-pandas)" ] } ], "metadata": {} } ] }