{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Настройка pandas"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "# импортируем библиотеки numpy и pandas\n",
    "import numpy as np\n",
    "import pandas as pd\n",
    "\n",
    "# импортируем библиотеку datetime для работы с датами\n",
    "import datetime\n",
    "from datetime import datetime, date\n",
    "\n",
    "# Задаем некоторые опции библиотеки pandas, которые \n",
    "# настраивают вывод\n",
    "pd.set_option('display.notebook_repr_html', False)\n",
    "pd.set_option('display.max_columns', 8)\n",
    "pd.set_option('display.max_rows', 10)\n",
    "pd.set_option('display.width', 80)\n",
    "\n",
    "# импортируем библиотеку matplotlib для построения графиков\n",
    "import matplotlib.pyplot as plt\n",
    "%matplotlib inline"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Объект Series"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0    1\n",
       "1    2\n",
       "2    3\n",
       "3    4\n",
       "dtype: int64"
      ]
     },
     "execution_count": 2,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# создаем объект Series, состоящий\n",
    "# из четырех элементов\n",
    "s = pd.Series([1, 2, 3, 4])\n",
    "s"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "2"
      ]
     },
     "execution_count": 3,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# получаем значение для метки индекса 1\n",
    "s[1]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "1    2\n",
       "3    4\n",
       "dtype: int64"
      ]
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# возвращаем серию с элементами,\n",
    "# у которых метки 1 и 3\n",
    "s[[1, 3]]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "a    1\n",
       "b    2\n",
       "c    3\n",
       "d    4\n",
       "dtype: int64"
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# создаем серию, задав индекс в явном виде\n",
    "s = pd.Series([1, 2, 3, 4], \n",
    "               index = ['a', 'b', 'c', 'd'])\n",
    "s"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "a    1\n",
       "d    4\n",
       "dtype: int64"
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# ищем элементы серии, у которых\n",
    "# метки индекса 'a' и 'd'\n",
    "s[['a', 'd']]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "b    2\n",
       "c    3\n",
       "dtype: int64"
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# передаем список целочисленных значений в объект Series,\n",
    "# у которого метки индекса записаны в виде букв,\n",
    "# поиск буквенных меток будет осуществлен на основе\n",
    "# числового индекса, начинающегося с 0,\n",
    "# как если бы мы использовали обычный массив\n",
    "s[[1, 2]]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Index(['a', 'b', 'c', 'd'], dtype='object')"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# извлекаем только индекс объекта Series\n",
    "s.index"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "DatetimeIndex(['2016-04-01', '2016-04-02', '2016-04-03', '2016-04-04',\n",
       "               '2016-04-05', '2016-04-06'],\n",
       "              dtype='datetime64[ns]', freq='D')"
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# создаем объект Series, индекс которого - серия дат\n",
    "# между двумя определенными датами (включительно)\n",
    "dates = pd.date_range('2016-04-01', '2016-04-06')\n",
    "dates"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "2016-04-01    80\n",
       "2016-04-02    82\n",
       "2016-04-03    85\n",
       "2016-04-04    90\n",
       "2016-04-05    83\n",
       "2016-04-06    87\n",
       "Freq: D, dtype: int64"
      ]
     },
     "execution_count": 10,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# создаем объект Series, в котором значениям температуры\n",
    "# будут соответствовать даты в индексе\n",
    "temps1 = pd.Series([80, 82, 85, 90, 83, 87], \n",
    "                   index = dates)\n",
    "temps1"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "90"
      ]
     },
     "execution_count": 11,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# какая температура была 2016-04-04?\n",
    "temps1['2016-04-04']"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "2016-04-01    10\n",
       "2016-04-02     7\n",
       "2016-04-03    16\n",
       "2016-04-04     7\n",
       "2016-04-05     4\n",
       "2016-04-06    10\n",
       "Freq: D, dtype: int64"
      ]
     },
     "execution_count": 12,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# создаем вторую серию значений, используя\n",
    "# тот же самый индекс\n",
    "temps2 = pd.Series([70, 75, 69, 83, 79, 77], \n",
    "                   index = dates)\n",
    "# следующий программный код выравнивает\n",
    "# обе серии по меткам индекса и вычисляет\n",
    "# разницу температур в этих метках\n",
    "temp_diffs = temps1 - temps2\n",
    "temp_diffs"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "16"
      ]
     },
     "execution_count": 13,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# вычислим разницу температур для определенной числовой \n",
    "# метки индекса, как если бы серия была массивом\n",
    "temp_diffs[2]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "9.0"
      ]
     },
     "execution_count": 14,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# вычисляем среднее значение разности температур\n",
    "temp_diffs.mean()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "collapsed": true
   },
   "source": [
    "# Объект DataFrame"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "            Missoula  Philadelphia\n",
       "2016-04-01        80            70\n",
       "2016-04-02        82            75\n",
       "2016-04-03        85            69\n",
       "2016-04-04        90            83\n",
       "2016-04-05        83            79\n",
       "2016-04-06        87            77"
      ]
     },
     "execution_count": 15,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# создаем объект DataFrame с двумя сериями temp1 и temp2\n",
    "# и присваиваем им имена столбцов\n",
    "temps_df = pd.DataFrame(\n",
    "            {'Missoula': temps1, \n",
    "             'Philadelphia': temps2})\n",
    "temps_df"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "2016-04-01    80\n",
       "2016-04-02    82\n",
       "2016-04-03    85\n",
       "2016-04-04    90\n",
       "2016-04-05    83\n",
       "2016-04-06    87\n",
       "Freq: D, Name: Missoula, dtype: int64"
      ]
     },
     "execution_count": 16,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# получаем столбец Missoula\n",
    "temps_df['Missoula']"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "2016-04-01    70\n",
       "2016-04-02    75\n",
       "2016-04-03    69\n",
       "2016-04-04    83\n",
       "2016-04-05    79\n",
       "2016-04-06    77\n",
       "Freq: D, Name: Philadelphia, dtype: int64"
      ]
     },
     "execution_count": 17,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# аналогичным образом мы можем получить\n",
    "# столбец Philadelphia\n",
    "temps_df['Philadelphia']"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "            Philadelphia  Missoula\n",
       "2016-04-01            70        80\n",
       "2016-04-02            75        82\n",
       "2016-04-03            69        85\n",
       "2016-04-04            83        90\n",
       "2016-04-05            79        83\n",
       "2016-04-06            77        87"
      ]
     },
     "execution_count": 18,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# выводим оба столбца\n",
    "temps_df[['Philadelphia', 'Missoula']]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "2016-04-01    80\n",
       "2016-04-02    82\n",
       "2016-04-03    85\n",
       "2016-04-04    90\n",
       "2016-04-05    83\n",
       "2016-04-06    87\n",
       "Freq: D, Name: Missoula, dtype: int64"
      ]
     },
     "execution_count": 19,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# извлекаем столбец Missoula с помощью \n",
    "# \"вычисляемого\" свойства\n",
    "temps_df.Missoula"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "2016-04-01    10\n",
       "2016-04-02     7\n",
       "2016-04-03    16\n",
       "2016-04-04     7\n",
       "2016-04-05     4\n",
       "2016-04-06    10\n",
       "Freq: D, dtype: int64"
      ]
     },
     "execution_count": 20,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# вычисляем разницу температур двух городов\n",
    "temps_df.Missoula - temps_df.Philadelphia"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "            Missoula  Philadelphia  Difference\n",
       "2016-04-01        80            70          10\n",
       "2016-04-02        82            75           7\n",
       "2016-04-03        85            69          16\n",
       "2016-04-04        90            83           7\n",
       "2016-04-05        83            79           4\n",
       "2016-04-06        87            77          10"
      ]
     },
     "execution_count": 21,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# добавляем в датафрейм temp_df столбец Difference,\n",
    "# который содержит разности температур\n",
    "temps_df['Difference'] = temp_diffs\n",
    "temps_df"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Index(['Missoula', 'Philadelphia', 'Difference'], dtype='object')"
      ]
     },
     "execution_count": 22,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# получаем имена столбцов, которые\n",
    "# к тому же являются объектом Index\n",
    "temps_df.columns"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "2016-04-02     7\n",
       "2016-04-03    16\n",
       "2016-04-04     7\n",
       "Freq: D, Name: Difference, dtype: int64"
      ]
     },
     "execution_count": 23,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# отбираем значения разностей температур в столбце Difference, начиная \n",
    "# с позиции 1 (2016-04-02) и заканчивая позицией 4 (2016-04-05), \n",
    "# как если бы это был массив\n",
    "# обратите внимание, что конец диапазона не включается, то есть\n",
    "# диапазон не включает элемент с позицией 4 (2016-04-05)\n",
    "temps_df.Difference[1:4]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Missoula        82\n",
       "Philadelphia    75\n",
       "Difference       7\n",
       "Name: 2016-04-02 00:00:00, dtype: int64"
      ]
     },
     "execution_count": 24,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# получаем строку, которой соответствует\n",
    "# метка индекса 1\n",
    "temps_df.iloc[1]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Index(['Missoula', 'Philadelphia', 'Difference'], dtype='object')"
      ]
     },
     "execution_count": 25,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# имена столбцов стали индексом,\n",
    "# мы \"повернули\" их\n",
    "temps_df.iloc[1].index"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Missoula        83\n",
       "Philadelphia    79\n",
       "Difference       4\n",
       "Name: 2016-04-05 00:00:00, dtype: int64"
      ]
     },
     "execution_count": 26,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# извлекаем строку с помощью метки индекса,\n",
    "# воспользовавшись свойством .loc\n",
    "temps_df.loc['2016-04-05']"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "2016-04-02     7\n",
       "2016-04-04     7\n",
       "2016-04-06    10\n",
       "Freq: 2D, Name: Difference, dtype: int64"
      ]
     },
     "execution_count": 27,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# получаем значения столбца Difference в строках 1, 3 и 5,\n",
    "# используя целочисленные позиции с началом отсчета в 0\n",
    "temps_df.iloc[[1, 3, 5]].Difference"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "2016-04-01    False\n",
       "2016-04-02    False\n",
       "2016-04-03     True\n",
       "2016-04-04     True\n",
       "2016-04-05     True\n",
       "2016-04-06     True\n",
       "Freq: D, Name: Missoula, dtype: bool"
      ]
     },
     "execution_count": 28,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# какие значения в столбце Missoula > 82?\n",
    "temps_df.Missoula > 82"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 29,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "            Missoula  Philadelphia  Difference\n",
       "2016-04-03        85            69          16\n",
       "2016-04-04        90            83           7\n",
       "2016-04-05        83            79           4\n",
       "2016-04-06        87            77          10"
      ]
     },
     "execution_count": 29,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# возвращаем строки, в которых значения температуры \n",
    "# для столбца Missoula > 82\n",
    "temps_df[temps_df.Missoula > 82]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Загрузка данных из CSV-файла в объект DataFrame"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 30,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "          Date        Open        High         Low       Close   Volume\n",
       "0   12/19/2016  790.219971  797.659973  786.270020  794.200012  1225900\n",
       "1   12/20/2016  796.760010  798.650024  793.270020  796.419983   925100\n",
       "2   12/21/2016  795.840027  796.676025  787.099976  794.559998  1208700\n",
       "3   12/22/2016  792.359985  793.320007  788.580017  791.260010   969100\n",
       "4   12/23/2016  790.900024  792.739990  787.280029  789.909973   623400\n",
       "..         ...         ...         ...         ...         ...      ...\n",
       "56   3/13/2017  844.000000  848.684998  843.250000  845.539978  1149500\n",
       "57   3/14/2017  843.640015  847.239990  840.799988  845.619995   779900\n",
       "58   3/15/2017  847.590027  848.630005  840.770020  847.200012  1379600\n",
       "59   3/16/2017  849.030029  850.849976  846.130005  848.780029   970400\n",
       "60   3/17/2017  851.609985  853.400024  847.109985  852.119995  1712300\n",
       "\n",
       "[61 rows x 6 columns]"
      ]
     },
     "execution_count": 30,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# считываем содержимое файла в объект DataFrame\n",
    "df = pd.read_csv('C:/data/goog.csv')\n",
    "df"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 31,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0     12/19/2016\n",
       "1     12/20/2016\n",
       "2     12/21/2016\n",
       "3     12/22/2016\n",
       "4     12/23/2016\n",
       "         ...    \n",
       "56     3/13/2017\n",
       "57     3/14/2017\n",
       "58     3/15/2017\n",
       "59     3/16/2017\n",
       "60     3/17/2017\n",
       "Name: Date, Length: 61, dtype: object"
      ]
     },
     "execution_count": 31,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# выводим содержимое столбца с датами\n",
    "df.Date"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 32,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "'12/19/2016'"
      ]
     },
     "execution_count": 32,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# мы можем получить первое значение\n",
    "# в столбце с датами\n",
    "df.Date[0]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 33,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "str"
      ]
     },
     "execution_count": 33,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# оно является строкой\n",
    "type(df.Date[0])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 34,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "         Date        Open        High         Low       Close   Volume\n",
       "0  2016-12-19  790.219971  797.659973  786.270020  794.200012  1225900\n",
       "1  2016-12-20  796.760010  798.650024  793.270020  796.419983   925100\n",
       "2  2016-12-21  795.840027  796.676025  787.099976  794.559998  1208700\n",
       "3  2016-12-22  792.359985  793.320007  788.580017  791.260010   969100\n",
       "4  2016-12-23  790.900024  792.739990  787.280029  789.909973   623400\n",
       "..        ...         ...         ...         ...         ...      ...\n",
       "56 2017-03-13  844.000000  848.684998  843.250000  845.539978  1149500\n",
       "57 2017-03-14  843.640015  847.239990  840.799988  845.619995   779900\n",
       "58 2017-03-15  847.590027  848.630005  840.770020  847.200012  1379600\n",
       "59 2017-03-16  849.030029  850.849976  846.130005  848.780029   970400\n",
       "60 2017-03-17  851.609985  853.400024  847.109985  852.119995  1712300\n",
       "\n",
       "[61 rows x 6 columns]"
      ]
     },
     "execution_count": 34,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# считываем данные и указываем библиотеке pandas, \n",
    "# что в итоговом датафрейме значения столбца\n",
    "# с датами должны быть фактическими датами\n",
    "df = pd.read_csv('C:/data/goog.csv', parse_dates=['Date'])\n",
    "df"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 35,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "pandas._libs.tslib.Timestamp"
      ]
     },
     "execution_count": 35,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# проверяем, являются ли сейчас значения столбца\n",
    "# Date датами, то есть фактически им присвоен\n",
    "# тип Timestamp\n",
    "type(df.Date[0])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 36,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "RangeIndex(start=0, stop=61, step=1)"
      ]
     },
     "execution_count": 36,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# к сожалению, индекс использует числовые значения,\n",
    "# что затрудняет вывод данных по дате\n",
    "df.index"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 37,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "                  Open        High         Low       Close   Volume\n",
       "Date                                                               \n",
       "2016-12-19  790.219971  797.659973  786.270020  794.200012  1225900\n",
       "2016-12-20  796.760010  798.650024  793.270020  796.419983   925100\n",
       "2016-12-21  795.840027  796.676025  787.099976  794.559998  1208700\n",
       "2016-12-22  792.359985  793.320007  788.580017  791.260010   969100\n",
       "2016-12-23  790.900024  792.739990  787.280029  789.909973   623400\n",
       "...                ...         ...         ...         ...      ...\n",
       "2017-03-13  844.000000  848.684998  843.250000  845.539978  1149500\n",
       "2017-03-14  843.640015  847.239990  840.799988  845.619995   779900\n",
       "2017-03-15  847.590027  848.630005  840.770020  847.200012  1379600\n",
       "2017-03-16  849.030029  850.849976  846.130005  848.780029   970400\n",
       "2017-03-17  851.609985  853.400024  847.109985  852.119995  1712300\n",
       "\n",
       "[61 rows x 5 columns]"
      ]
     },
     "execution_count": 37,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# считываем данные снова, теперь задаем столбец с датами \n",
    "# в качестве индекса датафрейма\n",
    "df = pd.read_csv('C:/data/goog.csv', \n",
    "                 parse_dates=['Date'], \n",
    "                 index_col='Date')\n",
    "df"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 38,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "DatetimeIndex(['2016-12-19', '2016-12-20', '2016-12-21', '2016-12-22',\n",
       "               '2016-12-23', '2016-12-27', '2016-12-28', '2016-12-29',\n",
       "               '2016-12-30', '2017-01-03', '2017-01-04', '2017-01-05',\n",
       "               '2017-01-06', '2017-01-09', '2017-01-10', '2017-01-11',\n",
       "               '2017-01-12', '2017-01-13', '2017-01-17', '2017-01-18',\n",
       "               '2017-01-19', '2017-01-20', '2017-01-23', '2017-01-24',\n",
       "               '2017-01-25', '2017-01-26', '2017-01-27', '2017-01-30',\n",
       "               '2017-01-31', '2017-02-01', '2017-02-02', '2017-02-03',\n",
       "               '2017-02-06', '2017-02-07', '2017-02-08', '2017-02-09',\n",
       "               '2017-02-10', '2017-02-13', '2017-02-14', '2017-02-15',\n",
       "               '2017-02-16', '2017-02-17', '2017-02-21', '2017-02-22',\n",
       "               '2017-02-23', '2017-02-24', '2017-02-27', '2017-02-28',\n",
       "               '2017-03-01', '2017-03-02', '2017-03-03', '2017-03-06',\n",
       "               '2017-03-07', '2017-03-08', '2017-03-09', '2017-03-10',\n",
       "               '2017-03-13', '2017-03-14', '2017-03-15', '2017-03-16',\n",
       "               '2017-03-17'],\n",
       "              dtype='datetime64[ns]', name='Date', freq=None)"
      ]
     },
     "execution_count": 38,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# и теперь индекс - это DatetimeIndex\n",
    "df.index"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Визуализация"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 39,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n2p75xQC2ME4AAAAASUVORK5CYII=\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x24783966518>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# на основе значений столбца Close строим график\n",
    "df.Close.plot();"
   ]
  }
 ],
 "metadata": {
  "anaconda-cloud": {},
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.1"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 1
}
