{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Overview of Pandas and Xarray groupby(), resample()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### let's load all the libraries we need."
]
},
{
"cell_type": "code",
"execution_count": 33,
"metadata": {},
"outputs": [],
"source": [
"import numpy as np\n",
"import pandas as pd\n",
"import xarray as xr\n",
"from matplotlib import pyplot as plt\n",
"%matplotlib inline\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Get some data : tornado reports"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## read the csv file - check out the options"
]
},
{
"cell_type": "code",
"execution_count": 34,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"
\n",
"\n",
"
\n",
" \n",
" \n",
" \n",
" om \n",
" yr \n",
" mo \n",
" dy \n",
" date \n",
" time \n",
" timezone \n",
" state \n",
" stateFIPS \n",
" StateNumber \n",
" ... \n",
" lenghtmiles \n",
" widthyards \n",
" ns \n",
" sn \n",
" sg \n",
" fips1 \n",
" fips2 \n",
" fips3 \n",
" fips4 \n",
" fc \n",
" \n",
" \n",
" \n",
" \n",
" 0 \n",
" 1 \n",
" 1950 \n",
" 1 \n",
" 3 \n",
" 1/3/50 \n",
" 11:00:00 \n",
" 3 \n",
" MO \n",
" 29 \n",
" 1 \n",
" ... \n",
" 9.5 \n",
" 150.0 \n",
" 2 \n",
" 0 \n",
" 1 \n",
" 0 \n",
" 0 \n",
" 0 \n",
" 0 \n",
" 0 \n",
" \n",
" \n",
" 1 \n",
" 1 \n",
" 1950 \n",
" 1 \n",
" 3 \n",
" 1/3/50 \n",
" 11:00:00 \n",
" 3 \n",
" MO \n",
" 29 \n",
" 1 \n",
" ... \n",
" 6.2 \n",
" 150.0 \n",
" 2 \n",
" 1 \n",
" 2 \n",
" 189 \n",
" 0 \n",
" 0 \n",
" 0 \n",
" 0 \n",
" \n",
" \n",
" 2 \n",
" 1 \n",
" 1950 \n",
" 1 \n",
" 3 \n",
" 1/3/50 \n",
" 11:10:00 \n",
" 3 \n",
" IL \n",
" 17 \n",
" 1 \n",
" ... \n",
" 3.3 \n",
" 100.0 \n",
" 2 \n",
" 1 \n",
" 2 \n",
" 119 \n",
" 0 \n",
" 0 \n",
" 0 \n",
" 0 \n",
" \n",
" \n",
" 3 \n",
" 2 \n",
" 1950 \n",
" 1 \n",
" 3 \n",
" 1/3/50 \n",
" 11:55:00 \n",
" 3 \n",
" IL \n",
" 17 \n",
" 2 \n",
" ... \n",
" 3.6 \n",
" 130.0 \n",
" 1 \n",
" 1 \n",
" 1 \n",
" 135 \n",
" 0 \n",
" 0 \n",
" 0 \n",
" 0 \n",
" \n",
" \n",
" 4 \n",
" 3 \n",
" 1950 \n",
" 1 \n",
" 3 \n",
" 1/3/50 \n",
" 16:00:00 \n",
" 3 \n",
" OH \n",
" 39 \n",
" 1 \n",
" ... \n",
" 0.1 \n",
" 10.0 \n",
" 1 \n",
" 1 \n",
" 1 \n",
" 161 \n",
" 0 \n",
" 0 \n",
" 0 \n",
" 0 \n",
" \n",
" \n",
"
\n",
"
5 rows × 29 columns
\n",
"
"
],
"text/plain": [
" om yr mo dy date time timezone state stateFIPS StateNumber \\\n",
"0 1 1950 1 3 1/3/50 11:00:00 3 MO 29 1 \n",
"1 1 1950 1 3 1/3/50 11:00:00 3 MO 29 1 \n",
"2 1 1950 1 3 1/3/50 11:10:00 3 IL 17 1 \n",
"3 2 1950 1 3 1/3/50 11:55:00 3 IL 17 2 \n",
"4 3 1950 1 3 1/3/50 16:00:00 3 OH 39 1 \n",
"\n",
" ... lenghtmiles widthyards ns sn sg fips1 fips2 fips3 fips4 fc \n",
"0 ... 9.5 150.0 2 0 1 0 0 0 0 0 \n",
"1 ... 6.2 150.0 2 1 2 189 0 0 0 0 \n",
"2 ... 3.3 100.0 2 1 2 119 0 0 0 0 \n",
"3 ... 3.6 130.0 1 1 1 135 0 0 0 0 \n",
"4 ... 0.1 10.0 1 1 1 161 0 0 0 0 \n",
"\n",
"[5 rows x 29 columns]"
]
},
"execution_count": 34,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"! cp /home/pangeo/Advanced-notebooks/1950-2016_all_tornadoes.csv .\n",
"d = pd.read_csv('1950-2016_all_tornadoes.csv', delimiter=',', header=0)\n",
"d.head()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"what object do I have now? always check the type"
]
},
{
"cell_type": "code",
"execution_count": 35,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"pandas.core.frame.DataFrame"
]
},
"execution_count": 35,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"type(d)"
]
},
{
"cell_type": "code",
"execution_count": 36,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"\u001b[0;31mSignature:\u001b[0m \u001b[0mpd\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mread_csv\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mfilepath_or_buffer\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0msep\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;34m','\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mdelimiter\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mNone\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mheader\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;34m'infer'\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mnames\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mNone\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mindex_col\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mNone\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0musecols\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mNone\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0msqueeze\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mFalse\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mprefix\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mNone\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mmangle_dupe_cols\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mTrue\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mdtype\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mNone\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mengine\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mNone\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mconverters\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mNone\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mtrue_values\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mNone\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mfalse_values\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mNone\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mskipinitialspace\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mFalse\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mskiprows\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mNone\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mnrows\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mNone\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mna_values\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mNone\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mkeep_default_na\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mTrue\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mna_filter\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mTrue\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mverbose\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mFalse\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mskip_blank_lines\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mTrue\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mparse_dates\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mFalse\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0minfer_datetime_format\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mFalse\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mkeep_date_col\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mFalse\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mdate_parser\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mNone\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mdayfirst\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mFalse\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0miterator\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mFalse\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mchunksize\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mNone\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mcompression\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;34m'infer'\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mthousands\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mNone\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mdecimal\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;34mb'.'\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mlineterminator\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mNone\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mquotechar\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;34m'\"'\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mquoting\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;36m0\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mescapechar\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mNone\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mcomment\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mNone\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mencoding\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mNone\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mdialect\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mNone\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mtupleize_cols\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mNone\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0merror_bad_lines\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mTrue\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mwarn_bad_lines\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mTrue\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mskipfooter\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;36m0\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mskip_footer\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;36m0\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mdoublequote\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mTrue\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mdelim_whitespace\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mFalse\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mas_recarray\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mNone\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mcompact_ints\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mNone\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0muse_unsigned\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mNone\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mlow_memory\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mTrue\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mbuffer_lines\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mNone\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mmemory_map\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mFalse\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mfloat_precision\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mNone\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;31mDocstring:\u001b[0m\n",
"Read CSV (comma-separated) file into DataFrame\n",
"\n",
"Also supports optionally iterating or breaking of the file\n",
"into chunks.\n",
"\n",
"Additional help can be found in the `online docs for IO Tools\n",
"`_.\n",
"\n",
"Parameters\n",
"----------\n",
"filepath_or_buffer : str, pathlib.Path, py._path.local.LocalPath or any object with a read() method (such as a file handle or StringIO)\n",
" The string could be a URL. Valid URL schemes include http, ftp, s3, and\n",
" file. For file URLs, a host is expected. For instance, a local file could\n",
" be file ://localhost/path/to/table.csv\n",
"sep : str, default ','\n",
" Delimiter to use. If sep is None, the C engine cannot automatically detect\n",
" the separator, but the Python parsing engine can, meaning the latter will\n",
" be used and automatically detect the separator by Python's builtin sniffer\n",
" tool, ``csv.Sniffer``. In addition, separators longer than 1 character and\n",
" different from ``'\\s+'`` will be interpreted as regular expressions and\n",
" will also force the use of the Python parsing engine. Note that regex\n",
" delimiters are prone to ignoring quoted data. Regex example: ``'\\r\\t'``\n",
"delimiter : str, default ``None``\n",
" Alternative argument name for sep.\n",
"delim_whitespace : boolean, default False\n",
" Specifies whether or not whitespace (e.g. ``' '`` or ``' '``) will be\n",
" used as the sep. Equivalent to setting ``sep='\\s+'``. If this option\n",
" is set to True, nothing should be passed in for the ``delimiter``\n",
" parameter.\n",
"\n",
" .. versionadded:: 0.18.1 support for the Python parser.\n",
"\n",
"header : int or list of ints, default 'infer'\n",
" Row number(s) to use as the column names, and the start of the\n",
" data. Default behavior is to infer the column names: if no names\n",
" are passed the behavior is identical to ``header=0`` and column\n",
" names are inferred from the first line of the file, if column\n",
" names are passed explicitly then the behavior is identical to\n",
" ``header=None``. Explicitly pass ``header=0`` to be able to\n",
" replace existing names. The header can be a list of integers that\n",
" specify row locations for a multi-index on the columns\n",
" e.g. [0,1,3]. Intervening rows that are not specified will be\n",
" skipped (e.g. 2 in this example is skipped). Note that this\n",
" parameter ignores commented lines and empty lines if\n",
" ``skip_blank_lines=True``, so header=0 denotes the first line of\n",
" data rather than the first line of the file.\n",
"names : array-like, default None\n",
" List of column names to use. If file contains no header row, then you\n",
" should explicitly pass header=None. Duplicates in this list will cause\n",
" a ``UserWarning`` to be issued.\n",
"index_col : int or sequence or False, default None\n",
" Column to use as the row labels of the DataFrame. If a sequence is given, a\n",
" MultiIndex is used. If you have a malformed file with delimiters at the end\n",
" of each line, you might consider index_col=False to force pandas to _not_\n",
" use the first column as the index (row names)\n",
"usecols : array-like or callable, default None\n",
" Return a subset of the columns. If array-like, all elements must either\n",
" be positional (i.e. integer indices into the document columns) or strings\n",
" that correspond to column names provided either by the user in `names` or\n",
" inferred from the document header row(s). For example, a valid array-like\n",
" `usecols` parameter would be [0, 1, 2] or ['foo', 'bar', 'baz'].\n",
"\n",
" If callable, the callable function will be evaluated against the column\n",
" names, returning names where the callable function evaluates to True. An\n",
" example of a valid callable argument would be ``lambda x: x.upper() in\n",
" ['AAA', 'BBB', 'DDD']``. Using this parameter results in much faster\n",
" parsing time and lower memory usage.\n",
"as_recarray : boolean, default False\n",
" .. deprecated:: 0.19.0\n",
" Please call `pd.read_csv(...).to_records()` instead.\n",
"\n",
" Return a NumPy recarray instead of a DataFrame after parsing the data.\n",
" If set to True, this option takes precedence over the `squeeze` parameter.\n",
" In addition, as row indices are not available in such a format, the\n",
" `index_col` parameter will be ignored.\n",
"squeeze : boolean, default False\n",
" If the parsed data only contains one column then return a Series\n",
"prefix : str, default None\n",
" Prefix to add to column numbers when no header, e.g. 'X' for X0, X1, ...\n",
"mangle_dupe_cols : boolean, default True\n",
" Duplicate columns will be specified as 'X.0'...'X.N', rather than\n",
" 'X'...'X'. Passing in False will cause data to be overwritten if there\n",
" are duplicate names in the columns.\n",
"dtype : Type name or dict of column -> type, default None\n",
" Data type for data or columns. E.g. {'a': np.float64, 'b': np.int32}\n",
" Use `str` or `object` to preserve and not interpret dtype.\n",
" If converters are specified, they will be applied INSTEAD\n",
" of dtype conversion.\n",
"engine : {'c', 'python'}, optional\n",
" Parser engine to use. The C engine is faster while the python engine is\n",
" currently more feature-complete.\n",
"converters : dict, default None\n",
" Dict of functions for converting values in certain columns. Keys can either\n",
" be integers or column labels\n",
"true_values : list, default None\n",
" Values to consider as True\n",
"false_values : list, default None\n",
" Values to consider as False\n",
"skipinitialspace : boolean, default False\n",
" Skip spaces after delimiter.\n",
"skiprows : list-like or integer or callable, default None\n",
" Line numbers to skip (0-indexed) or number of lines to skip (int)\n",
" at the start of the file.\n",
"\n",
" If callable, the callable function will be evaluated against the row\n",
" indices, returning True if the row should be skipped and False otherwise.\n",
" An example of a valid callable argument would be ``lambda x: x in [0, 2]``.\n",
"skipfooter : int, default 0\n",
" Number of lines at bottom of file to skip (Unsupported with engine='c')\n",
"skip_footer : int, default 0\n",
" .. deprecated:: 0.19.0\n",
" Use the `skipfooter` parameter instead, as they are identical\n",
"nrows : int, default None\n",
" Number of rows of file to read. Useful for reading pieces of large files\n",
"na_values : scalar, str, list-like, or dict, default None\n",
" Additional strings to recognize as NA/NaN. If dict passed, specific\n",
" per-column NA values. By default the following values are interpreted as\n",
" NaN: '', '#N/A', '#N/A N/A', '#NA', '-1.#IND', '-1.#QNAN', '-NaN', '-nan',\n",
" '1.#IND', '1.#QNAN', 'N/A', 'NA', 'NULL', 'NaN', 'n/a', 'nan',\n",
" 'null'.\n",
"keep_default_na : bool, default True\n",
" If na_values are specified and keep_default_na is False the default NaN\n",
" values are overridden, otherwise they're appended to.\n",
"na_filter : boolean, default True\n",
" Detect missing value markers (empty strings and the value of na_values). In\n",
" data without any NAs, passing na_filter=False can improve the performance\n",
" of reading a large file\n",
"verbose : boolean, default False\n",
" Indicate number of NA values placed in non-numeric columns\n",
"skip_blank_lines : boolean, default True\n",
" If True, skip over blank lines rather than interpreting as NaN values\n",
"parse_dates : boolean or list of ints or names or list of lists or dict, default False\n",
"\n",
" * boolean. If True -> try parsing the index.\n",
" * list of ints or names. e.g. If [1, 2, 3] -> try parsing columns 1, 2, 3\n",
" each as a separate date column.\n",
" * list of lists. e.g. If [[1, 3]] -> combine columns 1 and 3 and parse as\n",
" a single date column.\n",
" * dict, e.g. {'foo' : [1, 3]} -> parse columns 1, 3 as date and call result\n",
" 'foo'\n",
"\n",
" If a column or index contains an unparseable date, the entire column or\n",
" index will be returned unaltered as an object data type. For non-standard\n",
" datetime parsing, use ``pd.to_datetime`` after ``pd.read_csv``\n",
"\n",
" Note: A fast-path exists for iso8601-formatted dates.\n",
"infer_datetime_format : boolean, default False\n",
" If True and `parse_dates` is enabled, pandas will attempt to infer the\n",
" format of the datetime strings in the columns, and if it can be inferred,\n",
" switch to a faster method of parsing them. In some cases this can increase\n",
" the parsing speed by 5-10x.\n",
"keep_date_col : boolean, default False\n",
" If True and `parse_dates` specifies combining multiple columns then\n",
" keep the original columns.\n",
"date_parser : function, default None\n",
" Function to use for converting a sequence of string columns to an array of\n",
" datetime instances. The default uses ``dateutil.parser.parser`` to do the\n",
" conversion. Pandas will try to call `date_parser` in three different ways,\n",
" advancing to the next if an exception occurs: 1) Pass one or more arrays\n",
" (as defined by `parse_dates`) as arguments; 2) concatenate (row-wise) the\n",
" string values from the columns defined by `parse_dates` into a single array\n",
" and pass that; and 3) call `date_parser` once for each row using one or\n",
" more strings (corresponding to the columns defined by `parse_dates`) as\n",
" arguments.\n",
"dayfirst : boolean, default False\n",
" DD/MM format dates, international and European format\n",
"iterator : boolean, default False\n",
" Return TextFileReader object for iteration or getting chunks with\n",
" ``get_chunk()``.\n",
"chunksize : int, default None\n",
" Return TextFileReader object for iteration.\n",
" See the `IO Tools docs\n",
" `_\n",
" for more information on ``iterator`` and ``chunksize``.\n",
"compression : {'infer', 'gzip', 'bz2', 'zip', 'xz', None}, default 'infer'\n",
" For on-the-fly decompression of on-disk data. If 'infer' and\n",
" `filepath_or_buffer` is path-like, then detect compression from the\n",
" following extensions: '.gz', '.bz2', '.zip', or '.xz' (otherwise no\n",
" decompression). If using 'zip', the ZIP file must contain only one data\n",
" file to be read in. Set to None for no decompression.\n",
"\n",
" .. versionadded:: 0.18.1 support for 'zip' and 'xz' compression.\n",
"\n",
"thousands : str, default None\n",
" Thousands separator\n",
"decimal : str, default '.'\n",
" Character to recognize as decimal point (e.g. use ',' for European data).\n",
"float_precision : string, default None\n",
" Specifies which converter the C engine should use for floating-point\n",
" values. The options are `None` for the ordinary converter,\n",
" `high` for the high-precision converter, and `round_trip` for the\n",
" round-trip converter.\n",
"lineterminator : str (length 1), default None\n",
" Character to break file into lines. Only valid with C parser.\n",
"quotechar : str (length 1), optional\n",
" The character used to denote the start and end of a quoted item. Quoted\n",
" items can include the delimiter and it will be ignored.\n",
"quoting : int or csv.QUOTE_* instance, default 0\n",
" Control field quoting behavior per ``csv.QUOTE_*`` constants. Use one of\n",
" QUOTE_MINIMAL (0), QUOTE_ALL (1), QUOTE_NONNUMERIC (2) or QUOTE_NONE (3).\n",
"doublequote : boolean, default ``True``\n",
" When quotechar is specified and quoting is not ``QUOTE_NONE``, indicate\n",
" whether or not to interpret two consecutive quotechar elements INSIDE a\n",
" field as a single ``quotechar`` element.\n",
"escapechar : str (length 1), default None\n",
" One-character string used to escape delimiter when quoting is QUOTE_NONE.\n",
"comment : str, default None\n",
" Indicates remainder of line should not be parsed. If found at the beginning\n",
" of a line, the line will be ignored altogether. This parameter must be a\n",
" single character. Like empty lines (as long as ``skip_blank_lines=True``),\n",
" fully commented lines are ignored by the parameter `header` but not by\n",
" `skiprows`. For example, if comment='#', parsing '#empty\\na,b,c\\n1,2,3'\n",
" with `header=0` will result in 'a,b,c' being\n",
" treated as the header.\n",
"encoding : str, default None\n",
" Encoding to use for UTF when reading/writing (ex. 'utf-8'). `List of Python\n",
" standard encodings\n",
" `_\n",
"dialect : str or csv.Dialect instance, default None\n",
" If provided, this parameter will override values (default or not) for the\n",
" following parameters: `delimiter`, `doublequote`, `escapechar`,\n",
" `skipinitialspace`, `quotechar`, and `quoting`. If it is necessary to\n",
" override values, a ParserWarning will be issued. See csv.Dialect\n",
" documentation for more details.\n",
"tupleize_cols : boolean, default False\n",
" .. deprecated:: 0.21.0\n",
" This argument will be removed and will always convert to MultiIndex\n",
"\n",
" Leave a list of tuples on columns as is (default is to convert to\n",
" a MultiIndex on the columns)\n",
"error_bad_lines : boolean, default True\n",
" Lines with too many fields (e.g. a csv line with too many commas) will by\n",
" default cause an exception to be raised, and no DataFrame will be returned.\n",
" If False, then these \"bad lines\" will dropped from the DataFrame that is\n",
" returned.\n",
"warn_bad_lines : boolean, default True\n",
" If error_bad_lines is False, and warn_bad_lines is True, a warning for each\n",
" \"bad line\" will be output.\n",
"low_memory : boolean, default True\n",
" Internally process the file in chunks, resulting in lower memory use\n",
" while parsing, but possibly mixed type inference. To ensure no mixed\n",
" types either set False, or specify the type with the `dtype` parameter.\n",
" Note that the entire file is read into a single DataFrame regardless,\n",
" use the `chunksize` or `iterator` parameter to return the data in chunks.\n",
" (Only valid with C parser)\n",
"buffer_lines : int, default None\n",
" .. deprecated:: 0.19.0\n",
" This argument is not respected by the parser\n",
"compact_ints : boolean, default False\n",
" .. deprecated:: 0.19.0\n",
" Argument moved to ``pd.to_numeric``\n",
"\n",
" If compact_ints is True, then for any column that is of integer dtype,\n",
" the parser will attempt to cast it as the smallest integer dtype possible,\n",
" either signed or unsigned depending on the specification from the\n",
" `use_unsigned` parameter.\n",
"use_unsigned : boolean, default False\n",
" .. deprecated:: 0.19.0\n",
" Argument moved to ``pd.to_numeric``\n",
"\n",
" If integer columns are being compacted (i.e. `compact_ints=True`), specify\n",
" whether the column should be compacted to the smallest signed or unsigned\n",
" integer dtype.\n",
"memory_map : boolean, default False\n",
" If a filepath is provided for `filepath_or_buffer`, map the file object\n",
" directly onto memory and access the data directly from there. Using this\n",
" option can improve performance because there is no longer any I/O overhead.\n",
"\n",
"Returns\n",
"-------\n",
"result : DataFrame or TextParser\n",
"\u001b[0;31mFile:\u001b[0m ~/miniconda3/envs/pangeo/lib/python3.6/site-packages/pandas/io/parsers.py\n",
"\u001b[0;31mType:\u001b[0m function\n"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"pd.read_csv?"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### I can tell read_csv to parse some columns and create a time index"
]
},
{
"cell_type": "code",
"execution_count": 37,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" \n",
" yr_mo_dy_time \n",
" om \n",
" yr \n",
" mo \n",
" dy \n",
" date \n",
" time \n",
" timezone \n",
" state \n",
" stateFIPS \n",
" ... \n",
" lenghtmiles \n",
" widthyards \n",
" ns \n",
" sn \n",
" sg \n",
" fips1 \n",
" fips2 \n",
" fips3 \n",
" fips4 \n",
" fc \n",
" \n",
" \n",
" \n",
" \n",
" 0 \n",
" 1950-01-03 11:00:00 \n",
" 1 \n",
" 1950 \n",
" 1 \n",
" 3 \n",
" 1/3/50 \n",
" 11:00:00 \n",
" 3 \n",
" MO \n",
" 29 \n",
" ... \n",
" 9.5 \n",
" 150.0 \n",
" 2 \n",
" 0 \n",
" 1 \n",
" 0 \n",
" 0 \n",
" 0 \n",
" 0 \n",
" 0 \n",
" \n",
" \n",
" 1 \n",
" 1950-01-03 11:00:00 \n",
" 1 \n",
" 1950 \n",
" 1 \n",
" 3 \n",
" 1/3/50 \n",
" 11:00:00 \n",
" 3 \n",
" MO \n",
" 29 \n",
" ... \n",
" 6.2 \n",
" 150.0 \n",
" 2 \n",
" 1 \n",
" 2 \n",
" 189 \n",
" 0 \n",
" 0 \n",
" 0 \n",
" 0 \n",
" \n",
" \n",
" 2 \n",
" 1950-01-03 11:10:00 \n",
" 1 \n",
" 1950 \n",
" 1 \n",
" 3 \n",
" 1/3/50 \n",
" 11:10:00 \n",
" 3 \n",
" IL \n",
" 17 \n",
" ... \n",
" 3.3 \n",
" 100.0 \n",
" 2 \n",
" 1 \n",
" 2 \n",
" 119 \n",
" 0 \n",
" 0 \n",
" 0 \n",
" 0 \n",
" \n",
" \n",
" 3 \n",
" 1950-01-03 11:55:00 \n",
" 2 \n",
" 1950 \n",
" 1 \n",
" 3 \n",
" 1/3/50 \n",
" 11:55:00 \n",
" 3 \n",
" IL \n",
" 17 \n",
" ... \n",
" 3.6 \n",
" 130.0 \n",
" 1 \n",
" 1 \n",
" 1 \n",
" 135 \n",
" 0 \n",
" 0 \n",
" 0 \n",
" 0 \n",
" \n",
" \n",
" 4 \n",
" 1950-01-03 16:00:00 \n",
" 3 \n",
" 1950 \n",
" 1 \n",
" 3 \n",
" 1/3/50 \n",
" 16:00:00 \n",
" 3 \n",
" OH \n",
" 39 \n",
" ... \n",
" 0.1 \n",
" 10.0 \n",
" 1 \n",
" 1 \n",
" 1 \n",
" 161 \n",
" 0 \n",
" 0 \n",
" 0 \n",
" 0 \n",
" \n",
" \n",
"
\n",
"
5 rows × 30 columns
\n",
"
"
],
"text/plain": [
" yr_mo_dy_time om yr mo dy date time timezone state \\\n",
"0 1950-01-03 11:00:00 1 1950 1 3 1/3/50 11:00:00 3 MO \n",
"1 1950-01-03 11:00:00 1 1950 1 3 1/3/50 11:00:00 3 MO \n",
"2 1950-01-03 11:10:00 1 1950 1 3 1/3/50 11:10:00 3 IL \n",
"3 1950-01-03 11:55:00 2 1950 1 3 1/3/50 11:55:00 3 IL \n",
"4 1950-01-03 16:00:00 3 1950 1 3 1/3/50 16:00:00 3 OH \n",
"\n",
" stateFIPS ... lenghtmiles widthyards ns sn sg fips1 fips2 fips3 \\\n",
"0 29 ... 9.5 150.0 2 0 1 0 0 0 \n",
"1 29 ... 6.2 150.0 2 1 2 189 0 0 \n",
"2 17 ... 3.3 100.0 2 1 2 119 0 0 \n",
"3 17 ... 3.6 130.0 1 1 1 135 0 0 \n",
"4 39 ... 0.1 10.0 1 1 1 161 0 0 \n",
"\n",
" fips4 fc \n",
"0 0 0 \n",
"1 0 0 \n",
"2 0 0 \n",
"3 0 0 \n",
"4 0 0 \n",
"\n",
"[5 rows x 30 columns]"
]
},
"execution_count": 37,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"d = pd.read_csv('1950-2016_all_tornadoes.csv', \n",
" delimiter=',',\n",
" header=0,\n",
" error_bad_lines=False, \n",
" parse_dates=[[1,2,3,5]], \n",
" keep_date_col=True)\n",
"d.head()"
]
},
{
"cell_type": "code",
"execution_count": 38,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"Index(['yr_mo_dy_time', 'om', 'yr', 'mo', 'dy', 'date', 'time', 'timezone',\n",
" 'state', 'stateFIPS', 'StateNumber', 'EFscale', 'injuries',\n",
" 'fatalities', 'loss', 'croploss', 'startlat', 'startlon', 'endlat',\n",
" 'endlon', 'lenghtmiles', 'widthyards', 'ns', 'sn', 'sg', 'fips1',\n",
" 'fips2', 'fips3', 'fips4', 'fc'],\n",
" dtype='object')"
]
},
"execution_count": 38,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"d.keys()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"for simplicity I am \"dropping\" some columns I won't need (check what inplace=True does in the options)"
]
},
{
"cell_type": "code",
"execution_count": 39,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" \n",
" yr_mo_dy_time \n",
" om \n",
" yr \n",
" mo \n",
" dy \n",
" date \n",
" time \n",
" state \n",
" EFscale \n",
" injuries \n",
" fatalities \n",
" loss \n",
" startlat \n",
" startlon \n",
" endlat \n",
" endlon \n",
" lenghtmiles \n",
" widthyards \n",
" sg \n",
" \n",
" \n",
" \n",
" \n",
" 0 \n",
" 1950-01-03 11:00:00 \n",
" 1 \n",
" 1950 \n",
" 1 \n",
" 3 \n",
" 1/3/50 \n",
" 11:00:00 \n",
" MO \n",
" 3 \n",
" 3 \n",
" 0 \n",
" 6.0 \n",
" 38.77 \n",
" -90.22 \n",
" 38.83 \n",
" -90.03 \n",
" 9.5 \n",
" 150.0 \n",
" 1 \n",
" \n",
" \n",
" 1 \n",
" 1950-01-03 11:00:00 \n",
" 1 \n",
" 1950 \n",
" 1 \n",
" 3 \n",
" 1/3/50 \n",
" 11:00:00 \n",
" MO \n",
" 3 \n",
" 3 \n",
" 0 \n",
" 6.0 \n",
" 38.77 \n",
" -90.22 \n",
" 38.82 \n",
" -90.12 \n",
" 6.2 \n",
" 150.0 \n",
" 2 \n",
" \n",
" \n",
" 2 \n",
" 1950-01-03 11:10:00 \n",
" 1 \n",
" 1950 \n",
" 1 \n",
" 3 \n",
" 1/3/50 \n",
" 11:10:00 \n",
" IL \n",
" 3 \n",
" 0 \n",
" 0 \n",
" 5.0 \n",
" 38.82 \n",
" -90.12 \n",
" 38.83 \n",
" -90.03 \n",
" 3.3 \n",
" 100.0 \n",
" 2 \n",
" \n",
" \n",
" 3 \n",
" 1950-01-03 11:55:00 \n",
" 2 \n",
" 1950 \n",
" 1 \n",
" 3 \n",
" 1/3/50 \n",
" 11:55:00 \n",
" IL \n",
" 3 \n",
" 3 \n",
" 0 \n",
" 5.0 \n",
" 39.10 \n",
" -89.30 \n",
" 39.12 \n",
" -89.23 \n",
" 3.6 \n",
" 130.0 \n",
" 1 \n",
" \n",
" \n",
" 4 \n",
" 1950-01-03 16:00:00 \n",
" 3 \n",
" 1950 \n",
" 1 \n",
" 3 \n",
" 1/3/50 \n",
" 16:00:00 \n",
" OH \n",
" 1 \n",
" 1 \n",
" 0 \n",
" 4.0 \n",
" 40.88 \n",
" -84.58 \n",
" 0.00 \n",
" 0.00 \n",
" 0.1 \n",
" 10.0 \n",
" 1 \n",
" \n",
" \n",
"
\n",
"
"
],
"text/plain": [
" yr_mo_dy_time om yr mo dy date time state EFscale \\\n",
"0 1950-01-03 11:00:00 1 1950 1 3 1/3/50 11:00:00 MO 3 \n",
"1 1950-01-03 11:00:00 1 1950 1 3 1/3/50 11:00:00 MO 3 \n",
"2 1950-01-03 11:10:00 1 1950 1 3 1/3/50 11:10:00 IL 3 \n",
"3 1950-01-03 11:55:00 2 1950 1 3 1/3/50 11:55:00 IL 3 \n",
"4 1950-01-03 16:00:00 3 1950 1 3 1/3/50 16:00:00 OH 1 \n",
"\n",
" injuries fatalities loss startlat startlon endlat endlon \\\n",
"0 3 0 6.0 38.77 -90.22 38.83 -90.03 \n",
"1 3 0 6.0 38.77 -90.22 38.82 -90.12 \n",
"2 0 0 5.0 38.82 -90.12 38.83 -90.03 \n",
"3 3 0 5.0 39.10 -89.30 39.12 -89.23 \n",
"4 1 0 4.0 40.88 -84.58 0.00 0.00 \n",
"\n",
" lenghtmiles widthyards sg \n",
"0 9.5 150.0 1 \n",
"1 6.2 150.0 2 \n",
"2 3.3 100.0 2 \n",
"3 3.6 130.0 1 \n",
"4 0.1 10.0 1 "
]
},
"execution_count": 39,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"d.drop(columns=['timezone','stateFIPS', 'StateNumber','croploss','ns', 'sn','fips1', 'fips2', 'fips3', 'fips4','fc'], \n",
" inplace=True)\n",
"d.head()"
]
},
{
"cell_type": "code",
"execution_count": 40,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"(62208, 19)"
]
},
"execution_count": 40,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"d.shape"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Useful commands to always run to check on how the data were loaded"
]
},
{
"cell_type": "code",
"execution_count": 41,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"\n",
"RangeIndex: 62208 entries, 0 to 62207\n",
"Data columns (total 19 columns):\n",
"yr_mo_dy_time 62208 non-null datetime64[ns]\n",
"om 62208 non-null int64\n",
"yr 62208 non-null object\n",
"mo 62208 non-null object\n",
"dy 62208 non-null object\n",
"date 62208 non-null object\n",
"time 62208 non-null object\n",
"state 62208 non-null object\n",
"EFscale 62208 non-null int64\n",
"injuries 62208 non-null int64\n",
"fatalities 62208 non-null int64\n",
"loss 62208 non-null float64\n",
"startlat 62208 non-null float64\n",
"startlon 62208 non-null float64\n",
"endlat 62208 non-null float64\n",
"endlon 62208 non-null float64\n",
"lenghtmiles 62208 non-null float64\n",
"widthyards 62208 non-null float64\n",
"sg 62208 non-null int64\n",
"dtypes: datetime64[ns](1), float64(7), int64(5), object(6)\n",
"memory usage: 9.0+ MB\n"
]
}
],
"source": [
"d.info()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### some of the variables were loaded as objects although - except for a few - they are all numbers.\n",
"#### quick way to convert them is the following"
]
},
{
"cell_type": "code",
"execution_count": 44,
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"/home2/nhn2/miniconda3/envs/pangeo/lib/python3.6/site-packages/ipykernel_launcher.py:1: FutureWarning: convert_objects is deprecated. To re-infer data dtypes for object columns, use DataFrame.infer_objects()\n",
"For all other conversions use the data-type specific converters pd.to_datetime, pd.to_timedelta and pd.to_numeric.\n",
" \"\"\"Entry point for launching an IPython kernel.\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"\n",
"RangeIndex: 62208 entries, 0 to 62207\n",
"Data columns (total 19 columns):\n",
"yr_mo_dy_time 62208 non-null datetime64[ns]\n",
"om 62208 non-null int64\n",
"yr 62208 non-null int64\n",
"mo 62208 non-null int64\n",
"dy 62208 non-null int64\n",
"date 62208 non-null object\n",
"time 62208 non-null object\n",
"state 62208 non-null object\n",
"EFscale 62208 non-null int64\n",
"injuries 62208 non-null int64\n",
"fatalities 62208 non-null int64\n",
"loss 62208 non-null float64\n",
"startlat 62208 non-null float64\n",
"startlon 62208 non-null float64\n",
"endlat 62208 non-null float64\n",
"endlon 62208 non-null float64\n",
"lenghtmiles 62208 non-null float64\n",
"widthyards 62208 non-null float64\n",
"sg 62208 non-null int64\n",
"dtypes: datetime64[ns](1), float64(7), int64(8), object(3)\n",
"memory usage: 9.0+ MB\n"
]
}
],
"source": [
"d = d.convert_objects(convert_numeric=True)\n",
"d.info()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### .describe() gives an overview of the data\n",
"look at EFscale (tornado intensity), there are some negative intensity values, I will want to exclude those values"
]
},
{
"cell_type": "code",
"execution_count": 45,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" \n",
" om \n",
" yr \n",
" mo \n",
" dy \n",
" EFscale \n",
" injuries \n",
" fatalities \n",
" loss \n",
" startlat \n",
" startlon \n",
" endlat \n",
" endlon \n",
" lenghtmiles \n",
" widthyards \n",
" sg \n",
" \n",
" \n",
" \n",
" \n",
" count \n",
" 62208.000000 \n",
" 62208.000000 \n",
" 62208.000000 \n",
" 62208.000000 \n",
" 62208.000000 \n",
" 62208.000000 \n",
" 62208.000000 \n",
" 6.220800e+04 \n",
" 62208.000000 \n",
" 62208.000000 \n",
" 62208.000000 \n",
" 62208.000000 \n",
" 62208.000000 \n",
" 62208.000000 \n",
" 62208.000000 \n",
" \n",
" \n",
" mean \n",
" 50792.725244 \n",
" 1988.445377 \n",
" 5.958333 \n",
" 15.920203 \n",
" 0.810041 \n",
" 1.727045 \n",
" 0.110420 \n",
" 3.025265e+03 \n",
" 37.094252 \n",
" -92.739393 \n",
" 21.441005 \n",
" -53.056681 \n",
" 3.626159 \n",
" 103.031928 \n",
" 0.996367 \n",
" \n",
" \n",
" std \n",
" 148896.678355 \n",
" 18.030652 \n",
" 2.399363 \n",
" 8.753624 \n",
" 0.958461 \n",
" 21.132596 \n",
" 1.673987 \n",
" 1.436459e+05 \n",
" 5.351269 \n",
" 9.583915 \n",
" 18.835747 \n",
" 46.140667 \n",
" 8.843966 \n",
" 204.301575 \n",
" 0.460527 \n",
" \n",
" \n",
" min \n",
" 1.000000 \n",
" 1950.000000 \n",
" 1.000000 \n",
" 1.000000 \n",
" -9.000000 \n",
" 0.000000 \n",
" 0.000000 \n",
" 0.000000e+00 \n",
" 0.000000 \n",
" -163.530000 \n",
" 0.000000 \n",
" -163.530000 \n",
" 0.000000 \n",
" 0.000000 \n",
" -9.000000 \n",
" \n",
" \n",
" 25% \n",
" 250.000000 \n",
" 1974.000000 \n",
" 4.000000 \n",
" 8.000000 \n",
" 0.000000 \n",
" 0.000000 \n",
" 0.000000 \n",
" 0.000000e+00 \n",
" 33.250000 \n",
" -98.550000 \n",
" 0.000000 \n",
" -94.400000 \n",
" 0.100000 \n",
" 17.000000 \n",
" 1.000000 \n",
" \n",
" \n",
" 50% \n",
" 517.000000 \n",
" 1991.000000 \n",
" 6.000000 \n",
" 16.000000 \n",
" 1.000000 \n",
" 0.000000 \n",
" 0.000000 \n",
" 1.000000e-01 \n",
" 37.080000 \n",
" -93.850000 \n",
" 31.670000 \n",
" -82.520000 \n",
" 0.700000 \n",
" 40.000000 \n",
" 1.000000 \n",
" \n",
" \n",
" 75% \n",
" 870.000000 \n",
" 2004.000000 \n",
" 7.000000 \n",
" 24.000000 \n",
" 1.000000 \n",
" 0.000000 \n",
" 0.000000 \n",
" 4.000000e+00 \n",
" 40.950000 \n",
" -86.800000 \n",
" 38.302250 \n",
" 0.000000 \n",
" 3.000000 \n",
" 100.000000 \n",
" 1.000000 \n",
" \n",
" \n",
" max \n",
" 614471.000000 \n",
" 2016.000000 \n",
" 12.000000 \n",
" 31.000000 \n",
" 5.000000 \n",
" 1740.000000 \n",
" 158.000000 \n",
" 2.200000e+07 \n",
" 61.020000 \n",
" 0.000000 \n",
" 61.020000 \n",
" 0.000000 \n",
" 234.700000 \n",
" 4576.000000 \n",
" 2.000000 \n",
" \n",
" \n",
"
\n",
"
"
],
"text/plain": [
" om yr mo dy EFscale \\\n",
"count 62208.000000 62208.000000 62208.000000 62208.000000 62208.000000 \n",
"mean 50792.725244 1988.445377 5.958333 15.920203 0.810041 \n",
"std 148896.678355 18.030652 2.399363 8.753624 0.958461 \n",
"min 1.000000 1950.000000 1.000000 1.000000 -9.000000 \n",
"25% 250.000000 1974.000000 4.000000 8.000000 0.000000 \n",
"50% 517.000000 1991.000000 6.000000 16.000000 1.000000 \n",
"75% 870.000000 2004.000000 7.000000 24.000000 1.000000 \n",
"max 614471.000000 2016.000000 12.000000 31.000000 5.000000 \n",
"\n",
" injuries fatalities loss startlat startlon \\\n",
"count 62208.000000 62208.000000 6.220800e+04 62208.000000 62208.000000 \n",
"mean 1.727045 0.110420 3.025265e+03 37.094252 -92.739393 \n",
"std 21.132596 1.673987 1.436459e+05 5.351269 9.583915 \n",
"min 0.000000 0.000000 0.000000e+00 0.000000 -163.530000 \n",
"25% 0.000000 0.000000 0.000000e+00 33.250000 -98.550000 \n",
"50% 0.000000 0.000000 1.000000e-01 37.080000 -93.850000 \n",
"75% 0.000000 0.000000 4.000000e+00 40.950000 -86.800000 \n",
"max 1740.000000 158.000000 2.200000e+07 61.020000 0.000000 \n",
"\n",
" endlat endlon lenghtmiles widthyards sg \n",
"count 62208.000000 62208.000000 62208.000000 62208.000000 62208.000000 \n",
"mean 21.441005 -53.056681 3.626159 103.031928 0.996367 \n",
"std 18.835747 46.140667 8.843966 204.301575 0.460527 \n",
"min 0.000000 -163.530000 0.000000 0.000000 -9.000000 \n",
"25% 0.000000 -94.400000 0.100000 17.000000 1.000000 \n",
"50% 31.670000 -82.520000 0.700000 40.000000 1.000000 \n",
"75% 38.302250 0.000000 3.000000 100.000000 1.000000 \n",
"max 61.020000 0.000000 234.700000 4576.000000 2.000000 "
]
},
"execution_count": 45,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"d.describe()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### Accessing columns/rows can be simple or tricky depending on how complicated it is.\n",
"#### In general, columns can be accessed \"attribute style\" or through the key names\n",
"Attribute style , with the \"dot\" and the name = .EFscale"
]
},
{
"cell_type": "code",
"execution_count": 46,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"0 3\n",
"1 3\n",
"2 3\n",
"3 3\n",
"4 1\n",
"Name: EFscale, dtype: int64"
]
},
"execution_count": 46,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"d.EFscale.head()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"using the keys, which are essentialy the labels of the columns (depending on the method/function you are using, labels, columns, keys are often referred to the column name, always read the help)"
]
},
{
"cell_type": "code",
"execution_count": 47,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"Index(['yr_mo_dy_time', 'om', 'yr', 'mo', 'dy', 'date', 'time', 'state',\n",
" 'EFscale', 'injuries', 'fatalities', 'loss', 'startlat', 'startlon',\n",
" 'endlat', 'endlon', 'lenghtmiles', 'widthyards', 'sg'],\n",
" dtype='object')"
]
},
"execution_count": 47,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"d.keys()"
]
},
{
"cell_type": "code",
"execution_count": 48,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"0 3\n",
"1 3\n",
"2 3\n",
"3 3\n",
"4 1\n",
"Name: EFscale, dtype: int64"
]
},
"execution_count": 48,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"d['EFscale'].head()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"let's tell python to exclude those negative EFscale - note, I use the attribute style access of column EFscale"
]
},
{
"cell_type": "code",
"execution_count": 49,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" \n",
" om \n",
" yr \n",
" mo \n",
" dy \n",
" EFscale \n",
" injuries \n",
" fatalities \n",
" loss \n",
" startlat \n",
" startlon \n",
" endlat \n",
" endlon \n",
" lenghtmiles \n",
" widthyards \n",
" sg \n",
" \n",
" \n",
" \n",
" \n",
" count \n",
" 62178.000000 \n",
" 62178.000000 \n",
" 62178.000000 \n",
" 62178.000000 \n",
" 62178.000000 \n",
" 62178.000000 \n",
" 62178.000000 \n",
" 6.217800e+04 \n",
" 62178.000000 \n",
" 62178.000000 \n",
" 62178.000000 \n",
" 62178.000000 \n",
" 62178.000000 \n",
" 62178.000000 \n",
" 62178.000000 \n",
" \n",
" \n",
" mean \n",
" 50520.979076 \n",
" 1988.432082 \n",
" 5.958474 \n",
" 15.919602 \n",
" 0.814774 \n",
" 1.727878 \n",
" 0.110473 \n",
" 3.026725e+03 \n",
" 37.094487 \n",
" -92.736289 \n",
" 21.433684 \n",
" -53.034435 \n",
" 3.627471 \n",
" 103.054202 \n",
" 0.996365 \n",
" \n",
" \n",
" std \n",
" 148417.614555 \n",
" 18.024837 \n",
" 2.399709 \n",
" 8.753490 \n",
" 0.934149 \n",
" 21.137659 \n",
" 1.674389 \n",
" 1.436805e+05 \n",
" 5.352146 \n",
" 9.583638 \n",
" 18.837227 \n",
" 46.140357 \n",
" 8.845853 \n",
" 204.345808 \n",
" 0.460638 \n",
" \n",
" \n",
" min \n",
" 1.000000 \n",
" 1950.000000 \n",
" 1.000000 \n",
" 1.000000 \n",
" 0.000000 \n",
" 0.000000 \n",
" 0.000000 \n",
" 0.000000e+00 \n",
" 0.000000 \n",
" -163.530000 \n",
" 0.000000 \n",
" -163.530000 \n",
" 0.000000 \n",
" 0.000000 \n",
" -9.000000 \n",
" \n",
" \n",
" 25% \n",
" 250.000000 \n",
" 1974.000000 \n",
" 4.000000 \n",
" 8.000000 \n",
" 0.000000 \n",
" 0.000000 \n",
" 0.000000 \n",
" 0.000000e+00 \n",
" 33.250000 \n",
" -98.550000 \n",
" 0.000000 \n",
" -94.382950 \n",
" 0.100000 \n",
" 17.000000 \n",
" 1.000000 \n",
" \n",
" \n",
" 50% \n",
" 517.000000 \n",
" 1991.000000 \n",
" 6.000000 \n",
" 16.000000 \n",
" 1.000000 \n",
" 0.000000 \n",
" 0.000000 \n",
" 1.000000e-01 \n",
" 37.080000 \n",
" -93.840000 \n",
" 31.657300 \n",
" -82.500000 \n",
" 0.700000 \n",
" 40.000000 \n",
" 1.000000 \n",
" \n",
" \n",
" 75% \n",
" 869.000000 \n",
" 2004.000000 \n",
" 7.000000 \n",
" 24.000000 \n",
" 1.000000 \n",
" 0.000000 \n",
" 0.000000 \n",
" 4.000000e+00 \n",
" 40.950000 \n",
" -86.800000 \n",
" 38.300300 \n",
" 0.000000 \n",
" 3.010000 \n",
" 100.000000 \n",
" 1.000000 \n",
" \n",
" \n",
" max \n",
" 614471.000000 \n",
" 2016.000000 \n",
" 12.000000 \n",
" 31.000000 \n",
" 5.000000 \n",
" 1740.000000 \n",
" 158.000000 \n",
" 2.200000e+07 \n",
" 61.020000 \n",
" 0.000000 \n",
" 61.020000 \n",
" 0.000000 \n",
" 234.700000 \n",
" 4576.000000 \n",
" 2.000000 \n",
" \n",
" \n",
"
\n",
"
"
],
"text/plain": [
" om yr mo dy EFscale \\\n",
"count 62178.000000 62178.000000 62178.000000 62178.000000 62178.000000 \n",
"mean 50520.979076 1988.432082 5.958474 15.919602 0.814774 \n",
"std 148417.614555 18.024837 2.399709 8.753490 0.934149 \n",
"min 1.000000 1950.000000 1.000000 1.000000 0.000000 \n",
"25% 250.000000 1974.000000 4.000000 8.000000 0.000000 \n",
"50% 517.000000 1991.000000 6.000000 16.000000 1.000000 \n",
"75% 869.000000 2004.000000 7.000000 24.000000 1.000000 \n",
"max 614471.000000 2016.000000 12.000000 31.000000 5.000000 \n",
"\n",
" injuries fatalities loss startlat startlon \\\n",
"count 62178.000000 62178.000000 6.217800e+04 62178.000000 62178.000000 \n",
"mean 1.727878 0.110473 3.026725e+03 37.094487 -92.736289 \n",
"std 21.137659 1.674389 1.436805e+05 5.352146 9.583638 \n",
"min 0.000000 0.000000 0.000000e+00 0.000000 -163.530000 \n",
"25% 0.000000 0.000000 0.000000e+00 33.250000 -98.550000 \n",
"50% 0.000000 0.000000 1.000000e-01 37.080000 -93.840000 \n",
"75% 0.000000 0.000000 4.000000e+00 40.950000 -86.800000 \n",
"max 1740.000000 158.000000 2.200000e+07 61.020000 0.000000 \n",
"\n",
" endlat endlon lenghtmiles widthyards sg \n",
"count 62178.000000 62178.000000 62178.000000 62178.000000 62178.000000 \n",
"mean 21.433684 -53.034435 3.627471 103.054202 0.996365 \n",
"std 18.837227 46.140357 8.845853 204.345808 0.460638 \n",
"min 0.000000 -163.530000 0.000000 0.000000 -9.000000 \n",
"25% 0.000000 -94.382950 0.100000 17.000000 1.000000 \n",
"50% 31.657300 -82.500000 0.700000 40.000000 1.000000 \n",
"75% 38.300300 0.000000 3.010000 100.000000 1.000000 \n",
"max 61.020000 0.000000 234.700000 4576.000000 2.000000 "
]
},
"execution_count": 49,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"d = d[d.EFscale>-1]\n",
"\n",
"d.describe()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"the column sg identifies full track tornadoes, for my analysis I want only those, so once again I will exclude the other values\n",
"\n",
"note I use the keys access to get my column sg"
]
},
{
"cell_type": "code",
"execution_count": 50,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"0 True\n",
"1 False\n",
"2 False\n",
"3 True\n",
"4 True\n",
"5 True\n",
"6 True\n",
"7 True\n",
"8 True\n",
"9 True\n",
"10 True\n",
"11 True\n",
"12 True\n",
"13 True\n",
"14 True\n",
"15 True\n",
"16 True\n",
"17 True\n",
"18 True\n",
"19 True\n",
"20 True\n",
"21 True\n",
"22 True\n",
"23 True\n",
"24 False\n",
"25 True\n",
"26 True\n",
"27 True\n",
"28 True\n",
"29 True\n",
" ... \n",
"62178 True\n",
"62179 True\n",
"62180 True\n",
"62181 True\n",
"62182 True\n",
"62183 True\n",
"62184 True\n",
"62185 True\n",
"62186 True\n",
"62187 True\n",
"62188 True\n",
"62189 True\n",
"62190 True\n",
"62191 True\n",
"62192 True\n",
"62193 True\n",
"62194 True\n",
"62195 True\n",
"62196 True\n",
"62197 True\n",
"62198 True\n",
"62199 True\n",
"62200 True\n",
"62201 True\n",
"62202 True\n",
"62203 True\n",
"62204 True\n",
"62205 True\n",
"62206 True\n",
"62207 True\n",
"Name: sg, Length: 62178, dtype: bool"
]
},
"execution_count": 50,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"d['sg']==1"
]
},
{
"cell_type": "code",
"execution_count": 51,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"count 61062.000000\n",
"mean 37.159091\n",
"std 5.123198\n",
"min 18.130000\n",
"25% 33.245400\n",
"50% 37.100000\n",
"75% 40.970000\n",
"max 61.020000\n",
"Name: startlat, dtype: float64"
]
},
"execution_count": 51,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"d = d[ d['sg']==1]\n",
"d.startlat.describe()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### let's rename the column with the parsed dates"
]
},
{
"cell_type": "code",
"execution_count": 52,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" \n",
" date_time \n",
" om \n",
" yr \n",
" mo \n",
" dy \n",
" date \n",
" time \n",
" state \n",
" EFscale \n",
" injuries \n",
" fatalities \n",
" loss \n",
" startlat \n",
" startlon \n",
" endlat \n",
" endlon \n",
" lenghtmiles \n",
" widthyards \n",
" sg \n",
" \n",
" \n",
" \n",
" \n",
" 0 \n",
" 1950-01-03 11:00:00 \n",
" 1 \n",
" 1950 \n",
" 1 \n",
" 3 \n",
" 1/3/50 \n",
" 11:00:00 \n",
" MO \n",
" 3 \n",
" 3 \n",
" 0 \n",
" 6.0 \n",
" 38.77 \n",
" -90.22 \n",
" 38.83 \n",
" -90.03 \n",
" 9.5 \n",
" 150.0 \n",
" 1 \n",
" \n",
" \n",
" 3 \n",
" 1950-01-03 11:55:00 \n",
" 2 \n",
" 1950 \n",
" 1 \n",
" 3 \n",
" 1/3/50 \n",
" 11:55:00 \n",
" IL \n",
" 3 \n",
" 3 \n",
" 0 \n",
" 5.0 \n",
" 39.10 \n",
" -89.30 \n",
" 39.12 \n",
" -89.23 \n",
" 3.6 \n",
" 130.0 \n",
" 1 \n",
" \n",
" \n",
" 4 \n",
" 1950-01-03 16:00:00 \n",
" 3 \n",
" 1950 \n",
" 1 \n",
" 3 \n",
" 1/3/50 \n",
" 16:00:00 \n",
" OH \n",
" 1 \n",
" 1 \n",
" 0 \n",
" 4.0 \n",
" 40.88 \n",
" -84.58 \n",
" 0.00 \n",
" 0.00 \n",
" 0.1 \n",
" 10.0 \n",
" 1 \n",
" \n",
" \n",
" 5 \n",
" 1950-01-13 05:25:00 \n",
" 4 \n",
" 1950 \n",
" 1 \n",
" 13 \n",
" 1/13/50 \n",
" 5:25:00 \n",
" AR \n",
" 3 \n",
" 1 \n",
" 1 \n",
" 3.0 \n",
" 34.40 \n",
" -94.37 \n",
" 0.00 \n",
" 0.00 \n",
" 0.6 \n",
" 17.0 \n",
" 1 \n",
" \n",
" \n",
" 6 \n",
" 1950-01-25 19:30:00 \n",
" 5 \n",
" 1950 \n",
" 1 \n",
" 25 \n",
" 1/25/50 \n",
" 19:30:00 \n",
" MO \n",
" 2 \n",
" 5 \n",
" 0 \n",
" 5.0 \n",
" 37.60 \n",
" -90.68 \n",
" 37.63 \n",
" -90.65 \n",
" 2.3 \n",
" 300.0 \n",
" 1 \n",
" \n",
" \n",
"
\n",
"
"
],
"text/plain": [
" date_time om yr mo dy date time state EFscale \\\n",
"0 1950-01-03 11:00:00 1 1950 1 3 1/3/50 11:00:00 MO 3 \n",
"3 1950-01-03 11:55:00 2 1950 1 3 1/3/50 11:55:00 IL 3 \n",
"4 1950-01-03 16:00:00 3 1950 1 3 1/3/50 16:00:00 OH 1 \n",
"5 1950-01-13 05:25:00 4 1950 1 13 1/13/50 5:25:00 AR 3 \n",
"6 1950-01-25 19:30:00 5 1950 1 25 1/25/50 19:30:00 MO 2 \n",
"\n",
" injuries fatalities loss startlat startlon endlat endlon \\\n",
"0 3 0 6.0 38.77 -90.22 38.83 -90.03 \n",
"3 3 0 5.0 39.10 -89.30 39.12 -89.23 \n",
"4 1 0 4.0 40.88 -84.58 0.00 0.00 \n",
"5 1 1 3.0 34.40 -94.37 0.00 0.00 \n",
"6 5 0 5.0 37.60 -90.68 37.63 -90.65 \n",
"\n",
" lenghtmiles widthyards sg \n",
"0 9.5 150.0 1 \n",
"3 3.6 130.0 1 \n",
"4 0.1 10.0 1 \n",
"5 0.6 17.0 1 \n",
"6 2.3 300.0 1 "
]
},
"execution_count": 52,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"d = d.rename(index=str, columns={\"yr_mo_dy_time\": \"date_time\"})\n",
"d.head()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### let's set the date_time column as an index\n",
"\n",
"note - when you transform a column in an index, that column is lost from the dataframe"
]
},
{
"cell_type": "code",
"execution_count": 53,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" \n",
" om \n",
" yr \n",
" mo \n",
" dy \n",
" date \n",
" time \n",
" state \n",
" EFscale \n",
" injuries \n",
" fatalities \n",
" loss \n",
" startlat \n",
" startlon \n",
" endlat \n",
" endlon \n",
" lenghtmiles \n",
" widthyards \n",
" sg \n",
" \n",
" \n",
" date_time \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" 1950-01-03 11:00:00 \n",
" 1 \n",
" 1950 \n",
" 1 \n",
" 3 \n",
" 1/3/50 \n",
" 11:00:00 \n",
" MO \n",
" 3 \n",
" 3 \n",
" 0 \n",
" 6.0 \n",
" 38.77 \n",
" -90.22 \n",
" 38.83 \n",
" -90.03 \n",
" 9.5 \n",
" 150.0 \n",
" 1 \n",
" \n",
" \n",
" 1950-01-03 11:55:00 \n",
" 2 \n",
" 1950 \n",
" 1 \n",
" 3 \n",
" 1/3/50 \n",
" 11:55:00 \n",
" IL \n",
" 3 \n",
" 3 \n",
" 0 \n",
" 5.0 \n",
" 39.10 \n",
" -89.30 \n",
" 39.12 \n",
" -89.23 \n",
" 3.6 \n",
" 130.0 \n",
" 1 \n",
" \n",
" \n",
" 1950-01-03 16:00:00 \n",
" 3 \n",
" 1950 \n",
" 1 \n",
" 3 \n",
" 1/3/50 \n",
" 16:00:00 \n",
" OH \n",
" 1 \n",
" 1 \n",
" 0 \n",
" 4.0 \n",
" 40.88 \n",
" -84.58 \n",
" 0.00 \n",
" 0.00 \n",
" 0.1 \n",
" 10.0 \n",
" 1 \n",
" \n",
" \n",
" 1950-01-13 05:25:00 \n",
" 4 \n",
" 1950 \n",
" 1 \n",
" 13 \n",
" 1/13/50 \n",
" 5:25:00 \n",
" AR \n",
" 3 \n",
" 1 \n",
" 1 \n",
" 3.0 \n",
" 34.40 \n",
" -94.37 \n",
" 0.00 \n",
" 0.00 \n",
" 0.6 \n",
" 17.0 \n",
" 1 \n",
" \n",
" \n",
" 1950-01-25 19:30:00 \n",
" 5 \n",
" 1950 \n",
" 1 \n",
" 25 \n",
" 1/25/50 \n",
" 19:30:00 \n",
" MO \n",
" 2 \n",
" 5 \n",
" 0 \n",
" 5.0 \n",
" 37.60 \n",
" -90.68 \n",
" 37.63 \n",
" -90.65 \n",
" 2.3 \n",
" 300.0 \n",
" 1 \n",
" \n",
" \n",
"
\n",
"
"
],
"text/plain": [
" om yr mo dy date time state EFscale \\\n",
"date_time \n",
"1950-01-03 11:00:00 1 1950 1 3 1/3/50 11:00:00 MO 3 \n",
"1950-01-03 11:55:00 2 1950 1 3 1/3/50 11:55:00 IL 3 \n",
"1950-01-03 16:00:00 3 1950 1 3 1/3/50 16:00:00 OH 1 \n",
"1950-01-13 05:25:00 4 1950 1 13 1/13/50 5:25:00 AR 3 \n",
"1950-01-25 19:30:00 5 1950 1 25 1/25/50 19:30:00 MO 2 \n",
"\n",
" injuries fatalities loss startlat startlon endlat \\\n",
"date_time \n",
"1950-01-03 11:00:00 3 0 6.0 38.77 -90.22 38.83 \n",
"1950-01-03 11:55:00 3 0 5.0 39.10 -89.30 39.12 \n",
"1950-01-03 16:00:00 1 0 4.0 40.88 -84.58 0.00 \n",
"1950-01-13 05:25:00 1 1 3.0 34.40 -94.37 0.00 \n",
"1950-01-25 19:30:00 5 0 5.0 37.60 -90.68 37.63 \n",
"\n",
" endlon lenghtmiles widthyards sg \n",
"date_time \n",
"1950-01-03 11:00:00 -90.03 9.5 150.0 1 \n",
"1950-01-03 11:55:00 -89.23 3.6 130.0 1 \n",
"1950-01-03 16:00:00 0.00 0.1 10.0 1 \n",
"1950-01-13 05:25:00 0.00 0.6 17.0 1 \n",
"1950-01-25 19:30:00 -90.65 2.3 300.0 1 "
]
},
"execution_count": 53,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"d.set_index(keys='date_time', inplace=True)\n",
"d.head()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Q. does index need to be unique?\n",
"\n",
"short answer, no. They are \"tolerated\" but I think they have some limits. \n",
"\n",
"let's first \"reset_index\" because I don't want to loose my date_time column"
]
},
{
"cell_type": "code",
"execution_count": 57,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" \n",
" EFscale \n",
" date_time \n",
" om \n",
" yr \n",
" mo \n",
" dy \n",
" date \n",
" time \n",
" state \n",
" injuries \n",
" fatalities \n",
" loss \n",
" startlat \n",
" startlon \n",
" endlat \n",
" endlon \n",
" lenghtmiles \n",
" widthyards \n",
" sg \n",
" \n",
" \n",
" \n",
" \n",
" 0 \n",
" 3 \n",
" 1950-01-03 11:00:00 \n",
" 1 \n",
" 1950 \n",
" 1 \n",
" 3 \n",
" 1/3/50 \n",
" 11:00:00 \n",
" MO \n",
" 3 \n",
" 0 \n",
" 6.0 \n",
" 38.77 \n",
" -90.22 \n",
" 38.83 \n",
" -90.03 \n",
" 9.5 \n",
" 150.0 \n",
" 1 \n",
" \n",
" \n",
" 1 \n",
" 3 \n",
" 1950-01-03 11:55:00 \n",
" 2 \n",
" 1950 \n",
" 1 \n",
" 3 \n",
" 1/3/50 \n",
" 11:55:00 \n",
" IL \n",
" 3 \n",
" 0 \n",
" 5.0 \n",
" 39.10 \n",
" -89.30 \n",
" 39.12 \n",
" -89.23 \n",
" 3.6 \n",
" 130.0 \n",
" 1 \n",
" \n",
" \n",
" 2 \n",
" 1 \n",
" 1950-01-03 16:00:00 \n",
" 3 \n",
" 1950 \n",
" 1 \n",
" 3 \n",
" 1/3/50 \n",
" 16:00:00 \n",
" OH \n",
" 1 \n",
" 0 \n",
" 4.0 \n",
" 40.88 \n",
" -84.58 \n",
" 0.00 \n",
" 0.00 \n",
" 0.1 \n",
" 10.0 \n",
" 1 \n",
" \n",
" \n",
" 3 \n",
" 3 \n",
" 1950-01-13 05:25:00 \n",
" 4 \n",
" 1950 \n",
" 1 \n",
" 13 \n",
" 1/13/50 \n",
" 5:25:00 \n",
" AR \n",
" 1 \n",
" 1 \n",
" 3.0 \n",
" 34.40 \n",
" -94.37 \n",
" 0.00 \n",
" 0.00 \n",
" 0.6 \n",
" 17.0 \n",
" 1 \n",
" \n",
" \n",
" 4 \n",
" 2 \n",
" 1950-01-25 19:30:00 \n",
" 5 \n",
" 1950 \n",
" 1 \n",
" 25 \n",
" 1/25/50 \n",
" 19:30:00 \n",
" MO \n",
" 5 \n",
" 0 \n",
" 5.0 \n",
" 37.60 \n",
" -90.68 \n",
" 37.63 \n",
" -90.65 \n",
" 2.3 \n",
" 300.0 \n",
" 1 \n",
" \n",
" \n",
"
\n",
"
"
],
"text/plain": [
" EFscale date_time om yr mo dy date time state \\\n",
"0 3 1950-01-03 11:00:00 1 1950 1 3 1/3/50 11:00:00 MO \n",
"1 3 1950-01-03 11:55:00 2 1950 1 3 1/3/50 11:55:00 IL \n",
"2 1 1950-01-03 16:00:00 3 1950 1 3 1/3/50 16:00:00 OH \n",
"3 3 1950-01-13 05:25:00 4 1950 1 13 1/13/50 5:25:00 AR \n",
"4 2 1950-01-25 19:30:00 5 1950 1 25 1/25/50 19:30:00 MO \n",
"\n",
" injuries fatalities loss startlat startlon endlat endlon \\\n",
"0 3 0 6.0 38.77 -90.22 38.83 -90.03 \n",
"1 3 0 5.0 39.10 -89.30 39.12 -89.23 \n",
"2 1 0 4.0 40.88 -84.58 0.00 0.00 \n",
"3 1 1 3.0 34.40 -94.37 0.00 0.00 \n",
"4 5 0 5.0 37.60 -90.68 37.63 -90.65 \n",
"\n",
" lenghtmiles widthyards sg \n",
"0 9.5 150.0 1 \n",
"1 3.6 130.0 1 \n",
"2 0.1 10.0 1 \n",
"3 0.6 17.0 1 \n",
"4 2.3 300.0 1 "
]
},
"execution_count": 57,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"d.reset_index(inplace=True)\n",
"d.head()"
]
},
{
"cell_type": "code",
"execution_count": 58,
"metadata": {},
"outputs": [],
"source": [
"d.set_index(keys='EFscale', inplace=True)"
]
},
{
"cell_type": "code",
"execution_count": 59,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" \n",
" date_time \n",
" om \n",
" yr \n",
" mo \n",
" dy \n",
" date \n",
" time \n",
" state \n",
" injuries \n",
" fatalities \n",
" loss \n",
" startlat \n",
" startlon \n",
" endlat \n",
" endlon \n",
" lenghtmiles \n",
" widthyards \n",
" sg \n",
" \n",
" \n",
" EFscale \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" 3 \n",
" 1950-01-03 11:00:00 \n",
" 1 \n",
" 1950 \n",
" 1 \n",
" 3 \n",
" 1/3/50 \n",
" 11:00:00 \n",
" MO \n",
" 3 \n",
" 0 \n",
" 6.0 \n",
" 38.77 \n",
" -90.22 \n",
" 38.83 \n",
" -90.03 \n",
" 9.5 \n",
" 150.0 \n",
" 1 \n",
" \n",
" \n",
" 3 \n",
" 1950-01-03 11:55:00 \n",
" 2 \n",
" 1950 \n",
" 1 \n",
" 3 \n",
" 1/3/50 \n",
" 11:55:00 \n",
" IL \n",
" 3 \n",
" 0 \n",
" 5.0 \n",
" 39.10 \n",
" -89.30 \n",
" 39.12 \n",
" -89.23 \n",
" 3.6 \n",
" 130.0 \n",
" 1 \n",
" \n",
" \n",
" 1 \n",
" 1950-01-03 16:00:00 \n",
" 3 \n",
" 1950 \n",
" 1 \n",
" 3 \n",
" 1/3/50 \n",
" 16:00:00 \n",
" OH \n",
" 1 \n",
" 0 \n",
" 4.0 \n",
" 40.88 \n",
" -84.58 \n",
" 0.00 \n",
" 0.00 \n",
" 0.1 \n",
" 10.0 \n",
" 1 \n",
" \n",
" \n",
" 3 \n",
" 1950-01-13 05:25:00 \n",
" 4 \n",
" 1950 \n",
" 1 \n",
" 13 \n",
" 1/13/50 \n",
" 5:25:00 \n",
" AR \n",
" 1 \n",
" 1 \n",
" 3.0 \n",
" 34.40 \n",
" -94.37 \n",
" 0.00 \n",
" 0.00 \n",
" 0.6 \n",
" 17.0 \n",
" 1 \n",
" \n",
" \n",
" 2 \n",
" 1950-01-25 19:30:00 \n",
" 5 \n",
" 1950 \n",
" 1 \n",
" 25 \n",
" 1/25/50 \n",
" 19:30:00 \n",
" MO \n",
" 5 \n",
" 0 \n",
" 5.0 \n",
" 37.60 \n",
" -90.68 \n",
" 37.63 \n",
" -90.65 \n",
" 2.3 \n",
" 300.0 \n",
" 1 \n",
" \n",
" \n",
"
\n",
"
"
],
"text/plain": [
" date_time om yr mo dy date time state \\\n",
"EFscale \n",
"3 1950-01-03 11:00:00 1 1950 1 3 1/3/50 11:00:00 MO \n",
"3 1950-01-03 11:55:00 2 1950 1 3 1/3/50 11:55:00 IL \n",
"1 1950-01-03 16:00:00 3 1950 1 3 1/3/50 16:00:00 OH \n",
"3 1950-01-13 05:25:00 4 1950 1 13 1/13/50 5:25:00 AR \n",
"2 1950-01-25 19:30:00 5 1950 1 25 1/25/50 19:30:00 MO \n",
"\n",
" injuries fatalities loss startlat startlon endlat endlon \\\n",
"EFscale \n",
"3 3 0 6.0 38.77 -90.22 38.83 -90.03 \n",
"3 3 0 5.0 39.10 -89.30 39.12 -89.23 \n",
"1 1 0 4.0 40.88 -84.58 0.00 0.00 \n",
"3 1 1 3.0 34.40 -94.37 0.00 0.00 \n",
"2 5 0 5.0 37.60 -90.68 37.63 -90.65 \n",
"\n",
" lenghtmiles widthyards sg \n",
"EFscale \n",
"3 9.5 150.0 1 \n",
"3 3.6 130.0 1 \n",
"1 0.1 10.0 1 \n",
"3 0.6 17.0 1 \n",
"2 2.3 300.0 1 "
]
},
"execution_count": 59,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"d.head()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"more info here \n",
"https://stackoverflow.com/questions/16626058/what-is-the-performance-impact-of-non-unique-indexes-in-pandas"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"let's go back to the dataframe with date_time as index"
]
},
{
"cell_type": "code",
"execution_count": 60,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" \n",
" EFscale \n",
" om \n",
" yr \n",
" mo \n",
" dy \n",
" date \n",
" time \n",
" state \n",
" injuries \n",
" fatalities \n",
" loss \n",
" startlat \n",
" startlon \n",
" endlat \n",
" endlon \n",
" lenghtmiles \n",
" widthyards \n",
" sg \n",
" \n",
" \n",
" date_time \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" 1950-01-03 11:00:00 \n",
" 3 \n",
" 1 \n",
" 1950 \n",
" 1 \n",
" 3 \n",
" 1/3/50 \n",
" 11:00:00 \n",
" MO \n",
" 3 \n",
" 0 \n",
" 6.0 \n",
" 38.77 \n",
" -90.22 \n",
" 38.83 \n",
" -90.03 \n",
" 9.5 \n",
" 150.0 \n",
" 1 \n",
" \n",
" \n",
" 1950-01-03 11:55:00 \n",
" 3 \n",
" 2 \n",
" 1950 \n",
" 1 \n",
" 3 \n",
" 1/3/50 \n",
" 11:55:00 \n",
" IL \n",
" 3 \n",
" 0 \n",
" 5.0 \n",
" 39.10 \n",
" -89.30 \n",
" 39.12 \n",
" -89.23 \n",
" 3.6 \n",
" 130.0 \n",
" 1 \n",
" \n",
" \n",
" 1950-01-03 16:00:00 \n",
" 1 \n",
" 3 \n",
" 1950 \n",
" 1 \n",
" 3 \n",
" 1/3/50 \n",
" 16:00:00 \n",
" OH \n",
" 1 \n",
" 0 \n",
" 4.0 \n",
" 40.88 \n",
" -84.58 \n",
" 0.00 \n",
" 0.00 \n",
" 0.1 \n",
" 10.0 \n",
" 1 \n",
" \n",
" \n",
" 1950-01-13 05:25:00 \n",
" 3 \n",
" 4 \n",
" 1950 \n",
" 1 \n",
" 13 \n",
" 1/13/50 \n",
" 5:25:00 \n",
" AR \n",
" 1 \n",
" 1 \n",
" 3.0 \n",
" 34.40 \n",
" -94.37 \n",
" 0.00 \n",
" 0.00 \n",
" 0.6 \n",
" 17.0 \n",
" 1 \n",
" \n",
" \n",
" 1950-01-25 19:30:00 \n",
" 2 \n",
" 5 \n",
" 1950 \n",
" 1 \n",
" 25 \n",
" 1/25/50 \n",
" 19:30:00 \n",
" MO \n",
" 5 \n",
" 0 \n",
" 5.0 \n",
" 37.60 \n",
" -90.68 \n",
" 37.63 \n",
" -90.65 \n",
" 2.3 \n",
" 300.0 \n",
" 1 \n",
" \n",
" \n",
"
\n",
"
"
],
"text/plain": [
" EFscale om yr mo dy date time state \\\n",
"date_time \n",
"1950-01-03 11:00:00 3 1 1950 1 3 1/3/50 11:00:00 MO \n",
"1950-01-03 11:55:00 3 2 1950 1 3 1/3/50 11:55:00 IL \n",
"1950-01-03 16:00:00 1 3 1950 1 3 1/3/50 16:00:00 OH \n",
"1950-01-13 05:25:00 3 4 1950 1 13 1/13/50 5:25:00 AR \n",
"1950-01-25 19:30:00 2 5 1950 1 25 1/25/50 19:30:00 MO \n",
"\n",
" injuries fatalities loss startlat startlon endlat \\\n",
"date_time \n",
"1950-01-03 11:00:00 3 0 6.0 38.77 -90.22 38.83 \n",
"1950-01-03 11:55:00 3 0 5.0 39.10 -89.30 39.12 \n",
"1950-01-03 16:00:00 1 0 4.0 40.88 -84.58 0.00 \n",
"1950-01-13 05:25:00 1 1 3.0 34.40 -94.37 0.00 \n",
"1950-01-25 19:30:00 5 0 5.0 37.60 -90.68 37.63 \n",
"\n",
" endlon lenghtmiles widthyards sg \n",
"date_time \n",
"1950-01-03 11:00:00 -90.03 9.5 150.0 1 \n",
"1950-01-03 11:55:00 -89.23 3.6 130.0 1 \n",
"1950-01-03 16:00:00 0.00 0.1 10.0 1 \n",
"1950-01-13 05:25:00 0.00 0.6 17.0 1 \n",
"1950-01-25 19:30:00 -90.65 2.3 300.0 1 "
]
},
"execution_count": 60,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"d.reset_index(inplace=True)\n",
"d.set_index(keys='date_time', inplace=True)\n",
"d.head()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### this allows us to access the data based on the date value"
]
},
{
"cell_type": "code",
"execution_count": 61,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" \n",
" EFscale \n",
" om \n",
" yr \n",
" mo \n",
" dy \n",
" date \n",
" time \n",
" state \n",
" injuries \n",
" fatalities \n",
" loss \n",
" startlat \n",
" startlon \n",
" endlat \n",
" endlon \n",
" lenghtmiles \n",
" widthyards \n",
" sg \n",
" \n",
" \n",
" date_time \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" 1960-01-12 14:20:00 \n",
" 1 \n",
" 1 \n",
" 1960 \n",
" 1 \n",
" 12 \n",
" 1/12/60 \n",
" 14:20:00 \n",
" MO \n",
" 0 \n",
" 0 \n",
" 4.0 \n",
" 40.27 \n",
" -94.90 \n",
" 40.28 \n",
" -94.88 \n",
" 0.1 \n",
" 17.0 \n",
" 1 \n",
" \n",
" \n",
" 1960-01-14 01:30:00 \n",
" 0 \n",
" 2 \n",
" 1960 \n",
" 1 \n",
" 14 \n",
" 1/14/60 \n",
" 1:30:00 \n",
" TX \n",
" 0 \n",
" 0 \n",
" 3.0 \n",
" 32.77 \n",
" -100.88 \n",
" 0.00 \n",
" 0.00 \n",
" 2.0 \n",
" 33.0 \n",
" 1 \n",
" \n",
" \n",
" 1960-01-14 06:00:00 \n",
" 2 \n",
" 3 \n",
" 1960 \n",
" 1 \n",
" 14 \n",
" 1/14/60 \n",
" 6:00:00 \n",
" OK \n",
" 0 \n",
" 0 \n",
" 3.0 \n",
" 34.70 \n",
" -96.80 \n",
" 0.00 \n",
" 0.00 \n",
" 0.1 \n",
" 10.0 \n",
" 1 \n",
" \n",
" \n",
" 1960-01-14 06:35:00 \n",
" 1 \n",
" 4 \n",
" 1960 \n",
" 1 \n",
" 14 \n",
" 1/14/60 \n",
" 6:35:00 \n",
" TX \n",
" 3 \n",
" 0 \n",
" 5.0 \n",
" 33.72 \n",
" -96.68 \n",
" 0.00 \n",
" 0.00 \n",
" 0.2 \n",
" 17.0 \n",
" 1 \n",
" \n",
" \n",
" 1960-01-14 07:45:00 \n",
" 2 \n",
" 5 \n",
" 1960 \n",
" 1 \n",
" 14 \n",
" 1/14/60 \n",
" 7:45:00 \n",
" TX \n",
" 1 \n",
" 0 \n",
" 3.0 \n",
" 33.13 \n",
" -95.82 \n",
" 0.00 \n",
" 0.00 \n",
" 0.3 \n",
" 33.0 \n",
" 1 \n",
" \n",
" \n",
" 1960-01-14 11:20:00 \n",
" 0 \n",
" 6 \n",
" 1960 \n",
" 1 \n",
" 14 \n",
" 1/14/60 \n",
" 11:20:00 \n",
" LA \n",
" 0 \n",
" 0 \n",
" 4.0 \n",
" 32.47 \n",
" -93.75 \n",
" 32.52 \n",
" -93.70 \n",
" 4.5 \n",
" 20.0 \n",
" 1 \n",
" \n",
" \n",
" 1960-01-14 12:15:00 \n",
" 1 \n",
" 7 \n",
" 1960 \n",
" 1 \n",
" 14 \n",
" 1/14/60 \n",
" 12:15:00 \n",
" AR \n",
" 0 \n",
" 0 \n",
" 3.0 \n",
" 35.18 \n",
" -92.45 \n",
" 35.23 \n",
" -92.37 \n",
" 6.1 \n",
" 17.0 \n",
" 1 \n",
" \n",
" \n",
" 1960-01-28 09:40:00 \n",
" 1 \n",
" 8 \n",
" 1960 \n",
" 1 \n",
" 28 \n",
" 1/28/60 \n",
" 9:40:00 \n",
" TX \n",
" 0 \n",
" 0 \n",
" 3.0 \n",
" 29.83 \n",
" -93.83 \n",
" 0.00 \n",
" 0.00 \n",
" 2.0 \n",
" 33.0 \n",
" 1 \n",
" \n",
" \n",
" 1960-01-29 06:00:00 \n",
" 1 \n",
" 9 \n",
" 1960 \n",
" 1 \n",
" 29 \n",
" 1/29/60 \n",
" 6:00:00 \n",
" AL \n",
" 0 \n",
" 0 \n",
" 3.0 \n",
" 30.63 \n",
" -88.10 \n",
" 0.00 \n",
" 0.00 \n",
" 0.1 \n",
" 10.0 \n",
" 1 \n",
" \n",
" \n",
"
\n",
"
"
],
"text/plain": [
" EFscale om yr mo dy date time state \\\n",
"date_time \n",
"1960-01-12 14:20:00 1 1 1960 1 12 1/12/60 14:20:00 MO \n",
"1960-01-14 01:30:00 0 2 1960 1 14 1/14/60 1:30:00 TX \n",
"1960-01-14 06:00:00 2 3 1960 1 14 1/14/60 6:00:00 OK \n",
"1960-01-14 06:35:00 1 4 1960 1 14 1/14/60 6:35:00 TX \n",
"1960-01-14 07:45:00 2 5 1960 1 14 1/14/60 7:45:00 TX \n",
"1960-01-14 11:20:00 0 6 1960 1 14 1/14/60 11:20:00 LA \n",
"1960-01-14 12:15:00 1 7 1960 1 14 1/14/60 12:15:00 AR \n",
"1960-01-28 09:40:00 1 8 1960 1 28 1/28/60 9:40:00 TX \n",
"1960-01-29 06:00:00 1 9 1960 1 29 1/29/60 6:00:00 AL \n",
"\n",
" injuries fatalities loss startlat startlon endlat \\\n",
"date_time \n",
"1960-01-12 14:20:00 0 0 4.0 40.27 -94.90 40.28 \n",
"1960-01-14 01:30:00 0 0 3.0 32.77 -100.88 0.00 \n",
"1960-01-14 06:00:00 0 0 3.0 34.70 -96.80 0.00 \n",
"1960-01-14 06:35:00 3 0 5.0 33.72 -96.68 0.00 \n",
"1960-01-14 07:45:00 1 0 3.0 33.13 -95.82 0.00 \n",
"1960-01-14 11:20:00 0 0 4.0 32.47 -93.75 32.52 \n",
"1960-01-14 12:15:00 0 0 3.0 35.18 -92.45 35.23 \n",
"1960-01-28 09:40:00 0 0 3.0 29.83 -93.83 0.00 \n",
"1960-01-29 06:00:00 0 0 3.0 30.63 -88.10 0.00 \n",
"\n",
" endlon lenghtmiles widthyards sg \n",
"date_time \n",
"1960-01-12 14:20:00 -94.88 0.1 17.0 1 \n",
"1960-01-14 01:30:00 0.00 2.0 33.0 1 \n",
"1960-01-14 06:00:00 0.00 0.1 10.0 1 \n",
"1960-01-14 06:35:00 0.00 0.2 17.0 1 \n",
"1960-01-14 07:45:00 0.00 0.3 33.0 1 \n",
"1960-01-14 11:20:00 -93.70 4.5 20.0 1 \n",
"1960-01-14 12:15:00 -92.37 6.1 17.0 1 \n",
"1960-01-28 09:40:00 0.00 2.0 33.0 1 \n",
"1960-01-29 06:00:00 0.00 0.1 10.0 1 "
]
},
"execution_count": 61,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"d['1960-01-01':'1960-02-01']"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## let's look at groupby"
]
},
{
"cell_type": "code",
"execution_count": 62,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"\u001b[0;31mSignature:\u001b[0m \u001b[0md\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mgroupby\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mby\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mNone\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0maxis\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;36m0\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mlevel\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mNone\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mas_index\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mTrue\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0msort\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mTrue\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mgroup_keys\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mTrue\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0msqueeze\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mFalse\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;31mDocstring:\u001b[0m\n",
"Group series using mapper (dict or key function, apply given function\n",
"to group, return result as series) or by a series of columns.\n",
"\n",
"Parameters\n",
"----------\n",
"by : mapping, function, str, or iterable\n",
" Used to determine the groups for the groupby.\n",
" If ``by`` is a function, it's called on each value of the object's\n",
" index. If a dict or Series is passed, the Series or dict VALUES\n",
" will be used to determine the groups (the Series' values are first\n",
" aligned; see ``.align()`` method). If an ndarray is passed, the\n",
" values are used as-is determine the groups. A str or list of strs\n",
" may be passed to group by the columns in ``self``\n",
"axis : int, default 0\n",
"level : int, level name, or sequence of such, default None\n",
" If the axis is a MultiIndex (hierarchical), group by a particular\n",
" level or levels\n",
"as_index : boolean, default True\n",
" For aggregated output, return object with group labels as the\n",
" index. Only relevant for DataFrame input. as_index=False is\n",
" effectively \"SQL-style\" grouped output\n",
"sort : boolean, default True\n",
" Sort group keys. Get better performance by turning this off.\n",
" Note this does not influence the order of observations within each\n",
" group. groupby preserves the order of rows within each group.\n",
"group_keys : boolean, default True\n",
" When calling apply, add group keys to index to identify pieces\n",
"squeeze : boolean, default False\n",
" reduce the dimensionality of the return type if possible,\n",
" otherwise return a consistent type\n",
"\n",
"Examples\n",
"--------\n",
"DataFrame results\n",
"\n",
">>> data.groupby(func, axis=0).mean()\n",
">>> data.groupby(['col1', 'col2'])['col3'].mean()\n",
"\n",
"DataFrame with hierarchical index\n",
"\n",
">>> data.groupby(['col1', 'col2']).mean()\n",
"\n",
"Returns\n",
"-------\n",
"GroupBy object\n",
"\u001b[0;31mFile:\u001b[0m ~/miniconda3/envs/pangeo/lib/python3.6/site-packages/pandas/core/generic.py\n",
"\u001b[0;31mType:\u001b[0m method\n"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"d.groupby?"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## simple examples\n",
"### groupby one of the column\n",
"\n",
"what object does groupby create?"
]
},
{
"cell_type": "code",
"execution_count": 63,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
""
]
},
"execution_count": 63,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"d.groupby(by='EFscale')"
]
},
{
"cell_type": "code",
"execution_count": 64,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
""
]
},
"execution_count": 64,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"tempdgroupby = d.groupby(by='EFscale')\n",
"tempdgroupby"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"check all methods and attributes of this object by using tab after the \"dot\""
]
},
{
"cell_type": "code",
"execution_count": 65,
"metadata": {},
"outputs": [
{
"ename": "SyntaxError",
"evalue": "invalid syntax (, line 1)",
"output_type": "error",
"traceback": [
"\u001b[0;36m File \u001b[0;32m\"\"\u001b[0;36m, line \u001b[0;32m1\u001b[0m\n\u001b[0;31m tempdgroupby.\u001b[0m\n\u001b[0m ^\u001b[0m\n\u001b[0;31mSyntaxError\u001b[0m\u001b[0;31m:\u001b[0m invalid syntax\n"
]
}
],
"source": [
"tempdgroupby."
]
},
{
"cell_type": "code",
"execution_count": 66,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"EFscale\n",
"0 28464\n",
"1 20532\n",
"2 9001\n",
"3 2439\n",
"4 567\n",
"5 59\n",
"Name: yr, dtype: int64\n",
"EFscale\n",
"0 28464\n",
"1 20532\n",
"2 9001\n",
"3 2439\n",
"4 567\n",
"5 59\n",
"Name: yr, dtype: int64\n"
]
}
],
"source": [
"print(tempdgroupby.yr.count())\n",
"print(tempdgroupby['yr'].count()) # they are the same thing, just accessed differently"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### Let's use count. Note how all the columns reports the same value; we are counting the number of elements for each EFscale, so that makes sense"
]
},
{
"cell_type": "code",
"execution_count": 67,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" \n",
" om \n",
" yr \n",
" mo \n",
" dy \n",
" date \n",
" time \n",
" state \n",
" injuries \n",
" fatalities \n",
" loss \n",
" startlat \n",
" startlon \n",
" endlat \n",
" endlon \n",
" lenghtmiles \n",
" widthyards \n",
" sg \n",
" \n",
" \n",
" EFscale \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" 0 \n",
" 28464 \n",
" 28464 \n",
" 28464 \n",
" 28464 \n",
" 28464 \n",
" 28464 \n",
" 28464 \n",
" 28464 \n",
" 28464 \n",
" 28464 \n",
" 28464 \n",
" 28464 \n",
" 28464 \n",
" 28464 \n",
" 28464 \n",
" 28464 \n",
" 28464 \n",
" \n",
" \n",
" 1 \n",
" 20532 \n",
" 20532 \n",
" 20532 \n",
" 20532 \n",
" 20532 \n",
" 20532 \n",
" 20532 \n",
" 20532 \n",
" 20532 \n",
" 20532 \n",
" 20532 \n",
" 20532 \n",
" 20532 \n",
" 20532 \n",
" 20532 \n",
" 20532 \n",
" 20532 \n",
" \n",
" \n",
" 2 \n",
" 9001 \n",
" 9001 \n",
" 9001 \n",
" 9001 \n",
" 9001 \n",
" 9001 \n",
" 9001 \n",
" 9001 \n",
" 9001 \n",
" 9001 \n",
" 9001 \n",
" 9001 \n",
" 9001 \n",
" 9001 \n",
" 9001 \n",
" 9001 \n",
" 9001 \n",
" \n",
" \n",
" 3 \n",
" 2439 \n",
" 2439 \n",
" 2439 \n",
" 2439 \n",
" 2439 \n",
" 2439 \n",
" 2439 \n",
" 2439 \n",
" 2439 \n",
" 2439 \n",
" 2439 \n",
" 2439 \n",
" 2439 \n",
" 2439 \n",
" 2439 \n",
" 2439 \n",
" 2439 \n",
" \n",
" \n",
" 4 \n",
" 567 \n",
" 567 \n",
" 567 \n",
" 567 \n",
" 567 \n",
" 567 \n",
" 567 \n",
" 567 \n",
" 567 \n",
" 567 \n",
" 567 \n",
" 567 \n",
" 567 \n",
" 567 \n",
" 567 \n",
" 567 \n",
" 567 \n",
" \n",
" \n",
" 5 \n",
" 59 \n",
" 59 \n",
" 59 \n",
" 59 \n",
" 59 \n",
" 59 \n",
" 59 \n",
" 59 \n",
" 59 \n",
" 59 \n",
" 59 \n",
" 59 \n",
" 59 \n",
" 59 \n",
" 59 \n",
" 59 \n",
" 59 \n",
" \n",
" \n",
"
\n",
"
"
],
"text/plain": [
" om yr mo dy date time state injuries \\\n",
"EFscale \n",
"0 28464 28464 28464 28464 28464 28464 28464 28464 \n",
"1 20532 20532 20532 20532 20532 20532 20532 20532 \n",
"2 9001 9001 9001 9001 9001 9001 9001 9001 \n",
"3 2439 2439 2439 2439 2439 2439 2439 2439 \n",
"4 567 567 567 567 567 567 567 567 \n",
"5 59 59 59 59 59 59 59 59 \n",
"\n",
" fatalities loss startlat startlon endlat endlon lenghtmiles \\\n",
"EFscale \n",
"0 28464 28464 28464 28464 28464 28464 28464 \n",
"1 20532 20532 20532 20532 20532 20532 20532 \n",
"2 9001 9001 9001 9001 9001 9001 9001 \n",
"3 2439 2439 2439 2439 2439 2439 2439 \n",
"4 567 567 567 567 567 567 567 \n",
"5 59 59 59 59 59 59 59 \n",
"\n",
" widthyards sg \n",
"EFscale \n",
"0 28464 28464 \n",
"1 20532 20532 \n",
"2 9001 9001 \n",
"3 2439 2439 \n",
"4 567 567 \n",
"5 59 59 "
]
},
"execution_count": 67,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"d.groupby(by='EFscale').count()"
]
},
{
"cell_type": "code",
"execution_count": 68,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"array([3, 1, 2, 4, 0, 5])"
]
},
"execution_count": 68,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"d['EFscale'].unique()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### Let's use mean, in this case each column does the average of its own values, so they are different. Makes sense."
]
},
{
"cell_type": "code",
"execution_count": 69,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" \n",
" om \n",
" yr \n",
" mo \n",
" dy \n",
" injuries \n",
" fatalities \n",
" loss \n",
" startlat \n",
" startlon \n",
" endlat \n",
" endlon \n",
" lenghtmiles \n",
" widthyards \n",
" sg \n",
" \n",
" \n",
" EFscale \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" 0 \n",
" 59448.680965 \n",
" 1994.092187 \n",
" 6.047499 \n",
" 16.011769 \n",
" 0.028879 \n",
" 0.000843 \n",
" 448.752269 \n",
" 37.312933 \n",
" -94.532201 \n",
" 21.350686 \n",
" -53.638093 \n",
" 1.030091 \n",
" 42.109584 \n",
" 1.0 \n",
" \n",
" \n",
" 1 \n",
" 49230.933421 \n",
" 1985.964446 \n",
" 5.973992 \n",
" 15.873125 \n",
" 0.340298 \n",
" 0.011202 \n",
" 2579.591146 \n",
" 37.017521 \n",
" -91.576594 \n",
" 18.828093 \n",
" -46.031988 \n",
" 3.203892 \n",
" 97.540814 \n",
" 1.0 \n",
" \n",
" \n",
" 2 \n",
" 28488.726808 \n",
" 1978.967004 \n",
" 5.841351 \n",
" 15.838462 \n",
" 1.753139 \n",
" 0.065770 \n",
" 4854.223861 \n",
" 36.992391 \n",
" -91.488466 \n",
" 22.560039 \n",
" -55.188844 \n",
" 6.965334 \n",
" 177.721142 \n",
" 1.0 \n",
" \n",
" \n",
" 3 \n",
" 30467.735137 \n",
" 1979.856089 \n",
" 5.629766 \n",
" 15.783928 \n",
" 9.490365 \n",
" 0.530545 \n",
" 29044.896049 \n",
" 36.960977 \n",
" -91.870951 \n",
" 30.826602 \n",
" -75.818012 \n",
" 14.906080 \n",
" 365.687987 \n",
" 1.0 \n",
" \n",
" \n",
" 4 \n",
" 30497.179894 \n",
" 1978.964727 \n",
" 5.158730 \n",
" 15.243386 \n",
" 60.911817 \n",
" 4.158730 \n",
" 1781.613437 \n",
" 37.994367 \n",
" -91.686433 \n",
" 36.121472 \n",
" -86.281490 \n",
" 27.523580 \n",
" 588.860670 \n",
" 1.0 \n",
" \n",
" \n",
" 5 \n",
" 39081.152542 \n",
" 1978.067797 \n",
" 5.033898 \n",
" 14.220339 \n",
" 219.593220 \n",
" 22.830508 \n",
" 135.765763 \n",
" 37.800341 \n",
" -92.675564 \n",
" 37.391363 \n",
" -90.524105 \n",
" 39.007797 \n",
" 839.067797 \n",
" 1.0 \n",
" \n",
" \n",
"
\n",
"
"
],
"text/plain": [
" om yr mo dy injuries \\\n",
"EFscale \n",
"0 59448.680965 1994.092187 6.047499 16.011769 0.028879 \n",
"1 49230.933421 1985.964446 5.973992 15.873125 0.340298 \n",
"2 28488.726808 1978.967004 5.841351 15.838462 1.753139 \n",
"3 30467.735137 1979.856089 5.629766 15.783928 9.490365 \n",
"4 30497.179894 1978.964727 5.158730 15.243386 60.911817 \n",
"5 39081.152542 1978.067797 5.033898 14.220339 219.593220 \n",
"\n",
" fatalities loss startlat startlon endlat endlon \\\n",
"EFscale \n",
"0 0.000843 448.752269 37.312933 -94.532201 21.350686 -53.638093 \n",
"1 0.011202 2579.591146 37.017521 -91.576594 18.828093 -46.031988 \n",
"2 0.065770 4854.223861 36.992391 -91.488466 22.560039 -55.188844 \n",
"3 0.530545 29044.896049 36.960977 -91.870951 30.826602 -75.818012 \n",
"4 4.158730 1781.613437 37.994367 -91.686433 36.121472 -86.281490 \n",
"5 22.830508 135.765763 37.800341 -92.675564 37.391363 -90.524105 \n",
"\n",
" lenghtmiles widthyards sg \n",
"EFscale \n",
"0 1.030091 42.109584 1.0 \n",
"1 3.203892 97.540814 1.0 \n",
"2 6.965334 177.721142 1.0 \n",
"3 14.906080 365.687987 1.0 \n",
"4 27.523580 588.860670 1.0 \n",
"5 39.007797 839.067797 1.0 "
]
},
"execution_count": 69,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"d.groupby('EFscale').mean()"
]
},
{
"cell_type": "code",
"execution_count": 70,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"EFscale\n",
"0 3\n",
"1 16\n",
"2 9\n",
"3 25\n",
"4 94\n",
"5 158\n",
"Name: fatalities, dtype: int64"
]
},
"execution_count": 70,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"d.groupby('EFscale')['fatalities'].max()"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"d[d['fatalities']==158]"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### Because our index is a DatetimeIndex (and there are ways to transform it into that type if it doesn't happen magically when you load the file) we can use some attributes that are always available for this class "
]
},
{
"cell_type": "code",
"execution_count": 71,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"pandas.core.indexes.datetimes.DatetimeIndex"
]
},
"execution_count": 71,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"type(d.index)"
]
},
{
"cell_type": "code",
"execution_count": 72,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"DatetimeIndex(['1950-01-03 11:00:00', '1950-01-03 11:55:00',\n",
" '1950-01-03 16:00:00', '1950-01-13 05:25:00',\n",
" '1950-01-25 19:30:00', '1950-01-25 21:00:00',\n",
" '1950-01-26 18:00:00', '1950-02-11 13:10:00',\n",
" '1950-02-11 13:50:00', '1950-02-11 21:00:00',\n",
" ...\n",
" '2016-12-25 10:51:00', '2016-12-25 10:54:00',\n",
" '2016-12-25 10:58:00', '2016-12-25 11:45:00',\n",
" '2016-12-25 11:50:00', '2016-12-25 12:16:00',\n",
" '2016-12-25 12:24:00', '2016-12-25 13:53:00',\n",
" '2016-12-26 15:08:00', '2016-12-29 02:50:00'],\n",
" dtype='datetime64[ns]', name='date_time', length=61062, freq=None)"
]
},
"execution_count": 72,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"d.index"
]
},
{
"cell_type": "code",
"execution_count": 73,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"Int64Index([1, 1, 1, 4, 2, 2, 3, 5, 5, 5,\n",
" ...\n",
" 6, 6, 6, 6, 6, 6, 6, 6, 0, 3],\n",
" dtype='int64', name='date_time', length=61062)"
]
},
"execution_count": 73,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"d.index.weekday"
]
},
{
"cell_type": "code",
"execution_count": 74,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"Int64Index([11, 11, 16, 5, 19, 21, 18, 13, 13, 21,\n",
" ...\n",
" 10, 10, 10, 11, 11, 12, 12, 13, 15, 2],\n",
" dtype='int64', name='date_time', length=61062)"
]
},
"execution_count": 74,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"d.index.hour"
]
},
{
"cell_type": "code",
"execution_count": 75,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"Int64Index([ 3, 3, 3, 13, 25, 25, 26, 11, 11, 11,\n",
" ...\n",
" 25, 25, 25, 25, 25, 25, 25, 25, 26, 29],\n",
" dtype='int64', name='date_time', length=61062)"
]
},
"execution_count": 75,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"d.index.day"
]
},
{
"cell_type": "code",
"execution_count": 76,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"Int64Index([ 1, 1, 1, 1, 1, 1, 1, 2, 2, 2,\n",
" ...\n",
" 12, 12, 12, 12, 12, 12, 12, 12, 12, 12],\n",
" dtype='int64', name='date_time', length=61062)"
]
},
"execution_count": 76,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"d.index.month"
]
},
{
"cell_type": "code",
"execution_count": 77,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"Int64Index([1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950,\n",
" ...\n",
" 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016],\n",
" dtype='int64', name='date_time', length=61062)"
]
},
"execution_count": 77,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"d.index.year"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### let's see what is the number of tornado per each weekday"
]
},
{
"cell_type": "code",
"execution_count": 78,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
""
]
},
"execution_count": 78,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"fig, ax = plt.subplots()\n",
"d.groupby(d.index.weekday)['EFscale'].count().plot(kind='bar', \n",
" ax=ax, \n",
" ylim=6000)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"what I did here? I \n",
"\n",
"generated a groupby object -> d.groupby(d.index.weekday)\n",
"\n",
"extracted a column from it -> d.groupby(d.index.weekday)['EFscale']\n",
"\n",
"applied a method to it -> d.groupby(d.index.weekday)['EFscale'].count()\n",
"\n",
"and then applied a function-> d.groupby(d.index.weekday)['EFscale'].count().plot(kind='bar', ax=ax, ylim=6000)\n",
"\n",
"I could have split the line in various steps. I could have also plotted the results with matplotlib syntax.\n",
"Overall, the function .plot() is more limited in options than the full matplotlib library.\n",
"some over the top customization below..."
]
},
{
"cell_type": "code",
"execution_count": 79,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
""
]
},
"execution_count": 79,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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LF68eG67du1qH3zwwQ4AP/7xj9fNmTNn/sKFC+fl5+eX33rrrZ0ALrvssh4XXHDBmjlz5szv0qXLd0tKN/Y5n3rqqbaLFy/OnDVr1vz58+fPmzlzZvZLL72U89RTT7Xt0qVL9cKFC+ctWrRo7imnnLLZ1TrnnnvuXn/84x9XfvbZZ/P69+9f/utf/3pPgDPPPHOvSy655JuFCxfOmzp16oIePXpUP/74421feOGFDtOmTVuwcOHCedddd93qrX3dpk+fnvPoo48u+fDDDz/b9Gszffr0zEmTJuVNnTp1wYIFC+bFYjH/17/+1RGgvLw8dtBBB5UsXLhw3kEHHVTyj3/8ozPAJZdc0mPkyJHFCxcunDd37tx5+++/f0Vj+/nggw+yV61albZo0aK5n3322bzLL798bUM1rlixIuPjjz9e+O9//3vRVVdd1bOsrMz+9re/dWrXrl3tnDlz5n/66afzH3jggc4LFixIb+j7W+eYY44p/vDDD3MB3nvvvZz27dvXLFmyJO2NN97IGTFiREllZaVdccUVPZ599tnP586dO/+cc8759pe//GVXgAsuuKDnhAkTls+dO3f+zTffvPLSSy/tUX/fl1xySbc1a9akPfHEE0tramoa3c/555/f6y9/+cvymTNnLqj/+j333LPmnXfe+WzevHnzH3vssS+uvvrqHgAXXnjhmvvvv78jBKO+06ZNyznttNM2bO37Wl+TxgTd/R7gHgAz+yPBaNbXZraHu68KTz3WLVS2kmDErE434KuwfdQm7VOaU6w0jbuzcm1tONm+mpVrg/UXundK4YQDshiydxpd83RVX5TSwtGyft3SOPWQYE22Ocurmb2smg8XVvLW3EpSY9A7nFs2sGc6Xdprbpm0jHOPzFmxped/ef+6gRvKPH3T9nbZVvWbH7Zb2BI1vPPOO7mnnXZaYWpqKt27d6858MADS959993sdu3axffbb7/Svn37VtVt27Vr18qDDz64HGDIkCFlS5cuzQCYNm1a1u9+97uuxcXFKaWlpSmHH374BgjCy0svvfQ5wMUXX7z2hhtu6Lalz/nWW2/lvv32220LCgoKAMrKymILFizIHD16dPFvfvOb7pdeemnXk046acOYMWNK6vdh7dq1KcXFxSljx44tAbjwwgvXnnrqqXuvW7cu9vXXX6efffbZ6wGys7Md8MmTJ7f9yU9+8m1ubm4cYPfdd9/K4jgwcuTIovrb1f/avPzyy7lz5szJHjRoUD+AioqK2G677VYDkJaW5mecccYGgKFDh5a+9tprbQHef//93EmTJi0BSE1NpWPHjrV33HFHXkP7Of3009evWLEi45xzzul+wgknbBg3blyDl42PHz++MCUlhYEDB1Z27969cubMmZmvvfZa2wULFmQ/99xzHQCKi4tT5s2bl5menu6bfn/r9OjRo6asrCy2bt262FdffZV+6qmnrn311Vdz33333ZxTTjll/axZszIWLVqUdeSRR/aBYISzc+fO1Rs2bIjNmDEj59RTT92nbl9VVVXfHSz/9Kc/7bH//vuXPvroo8sAGtvPpt/Pn/70p2vfeOONdnX7O//883vOmzcvKxaLsWzZsgyAsWPHllx11VU9v/zyy9RHHnmkw9ixY9fVP4XcFE29anI3d//GzHoApwAHAXsB5wB/Ct8/G27+HPAzM5tIMFl/QxjWXgH+aGZ1Q7vHANc2q1ppVNydL1bXfLfA6pqi4F/XffZI5bRDshm8Vxqd2zZtuQbZ+YLRsmDErLrWWbyqhjnLqpm9vGqjuWUDw+Ux+nbV/D3ZcY4flvVl/TliAGkpxI8flvVlS32OLZ2Gz87O3ujS5PT09O82TklJ8fLy8hjARRddtNekSZMWH3TQQeW33nprx7feeiu3bruGlupo7HO6O1ddddWqX/3qV99u+tz06dPnPfnkk+1+85vfdH3ttdeK/vznP6/a1r65e4P/TKWmpnptbZC1ysrKNtpg069F/cfubqeeeura2267bbPvS2pqqsdisbqPqampafSAsaX9zJkzZ97TTz/ddsKECbs99thjeU888cTSTbfZtE9mhrvbLbfcsnz8+PEbhbfnn38+d9M+1Td06NDS2267rdM+++xTccQRR5TceeednaZNm5YzYcKElZ9//nn6vvvuW77paFVhYWEsNze3ZsGCBfMa2ufgwYNLZ82alf3111+n7L777rXubg3t59tvv01p7J/dG2+8cffddtut+sknn1wSj8fJysoaWvfcaaedtvbuu+/Oe/LJJ/Puvffezb4+W9PUy+CeNLN5wL+By8MrHf8EHG1mi4Cjw8cALwJfAIuBu4DLAMJJ+jcAn4Rvv6+buC/bpqbWmbO8ioemlPKr+9dz09PFvD67gt3bp3DWqGz+fG57fj2uLUcPylQISyB1o2WnHpLN73/Unv/5STt+fFg23Tqm8P7CSv75YglX3bOOvz5XxORPK1i1TnPLpGWNGpBZeNoh2cvaZVsVBCNhpx2SvWx7rpps165dbWlp6Xd/cw4//PDiSZMm5dXU1PDVV1+lfvzxxzkjR44sbc4+y8rKYj169KiurKy0iRMn5tW177///iV33XVXHsBdd93VcWuf87jjjit66KGHOm3YsCEGsGTJkrQvv/wydenSpWm5ubnxyy67rPCqq676eubMmdn1P3/Hjh1r27ZtW/vyyy/nANxzzz0dDzrooJK8vLx4ly5dqh566KH2AOXl5VZcXBwbM2ZM0UMPPdSpbi7b119/nQLQvXv3yo8//rgNwCOPPLLZPLTGjBkzpuj555/v8OWXX6bW7e+zzz7bbCSzvkMOOaT45ptv7gzBPK7CwsJYY/tZtWpVam1tLeeee+76P/zhD1/Onj07u6F9PvXUUx1qa2uZO3duxooVKzIGDRpUcfTRR2+4/fbbO1dWVhoEo1BFRUVbzRwjR44svu2223YfOXJkycEHH1z2/vvv56anp8c7duxYu99++1UUFhamvvbaa20AKisrberUqZl5eXnxbt26Vd17770dIBjh+uCDD767dcuYMWOKfvGLX6w+9thje69bty7W2H46depUm5OTU/vKK6/kANx///3f/Uxt2LAhZY899qhOSUlhwoQJHeuCM8All1zy7R133LE7wLBhwyq21sdNNfXU5MgG2tYCoxtod+DyRvZzL3BvM2vcZTV0T8PBe6Uzd3mwzMTsZdWUVzkZqTCgZzpD9k5jYI80sjO0zEQy6dQ2hVEDUhg1IBgtW/RV3ZWYVTz+XhmPvwed2ta7ElOjZdICRg3ILNye4LWpLl261A4dOrSkd+/e/Y888sgNt99++8r3338/p1+/fv3NzK+//vqVPXr0qJk1a1aT93nNNdd8NXz48H5du3at6tevX1lJSUkKwIQJE5afccYZe0+YMGH3E0888btlC84666z1DX3OHj16FM2dOzfzgAMO6AvBqNMjjzyyZMGCBRnXXnttt1gsRmpqqk+YMGHZpjXcd999Sy699NKeV1xxRaxHjx6Vjz766FKAhx9+eMmFF17Y84YbbtgzLS3Nn3jiic9/+MMfFk2fPj178ODB/dLS0vyoo47a8M9//vPLa6655uvT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\n",
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"import calendar\n",
"fig, ax = plt.subplots()\n",
"tempd = d.groupby(d.index.weekday)['EFscale'].count()\n",
"ax.plot(tempd, 'o-', color='cornflowerblue', label='tornadoes occurrences per weekeday')\n",
"ax.set_xticks(np.arange(0,7))\n",
"ax.set_xticklabels(list(calendar.day_name), rotation=90)\n",
"ax.set_ylim(bottom=6000)\n",
"ax.grid(axis='x')\n",
"ax.legend(bbox_to_anchor=[1,1])"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### what about the hour of the day"
]
},
{
"cell_type": "code",
"execution_count": 80,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
""
]
},
"execution_count": 80,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"fig, ax = plt.subplots()\n",
"d.groupby(d.index.hour)['EFscale'].count().plot(kind='bar', ax=ax)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### what is the average intensity per hour of the day"
]
},
{
"cell_type": "code",
"execution_count": 81,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
""
]
},
"execution_count": 81,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"fig, ax = plt.subplots()\n",
"\n",
"groupbyhour = d.groupby(d.index.hour)\n",
"getEFscaleoutofthegroup = groupbyhour['EFscale']\n",
"calculatethemean = getEFscaleoutofthegroup.mean()\n",
"#plot\n",
"calculatethemean.plot(kind='bar', ax=ax)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### how about other functions besides .mean() .count()"
]
},
{
"cell_type": "code",
"execution_count": 82,
"metadata": {},
"outputs": [],
"source": [
"tempgroupby = d.groupby('EFscale')\n"
]
},
{
"cell_type": "code",
"execution_count": 85,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
""
]
},
"execution_count": 85,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"tempgroupby.get_group(4).fatalities.plot()\n",
"tempgroupby.get_group(5).fatalities.plot()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### quantile of length of path"
]
},
{
"cell_type": "code",
"execution_count": 86,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
""
]
},
"execution_count": 86,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"fig, ax = plt.subplots()\n",
"# d.groupby(d.index.hour)['widthyards'].max().plot(kind='line', ax=ax)\n",
"# d.groupby(d.index.hour)['widthyards'].min().plot(kind='line', ax=ax)\n",
"\n",
"d.groupby(d.index.hour)['lenghtmiles'].quantile(0.25).plot(kind='line', ax=ax, label='25%')\n",
"d.groupby(d.index.hour)['lenghtmiles'].quantile(0.5).plot(kind='line', ax=ax, label='50%')\n",
"d.groupby(d.index.hour)['lenghtmiles'].quantile(0.75).plot(kind='line', ax=ax, label='75%')\n",
"plt.legend()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"let's look at the length of tornado path as a function of EFscale"
]
},
{
"cell_type": "code",
"execution_count": 87,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
""
]
},
"execution_count": 87,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAXQAAAEKCAYAAAACS67iAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMi4yLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvhp/UCwAAIABJREFUeJzt3Xl8lOW5//HPlT0kIQGSkIQAESEJiqwRKNQN3CpWqQKKuJwWS5dTD2649FjLqZ6jp7Yip1aQV9tzRD2tsqk1v1NQARExLGETWQJEQkISskAgCVln7t8f8yRkAyaQyWzX+/XiNTPPPJO5Bsg3d+7neu5HjDEopZTyfgHuLkAppVTX0EBXSikfoYGulFI+QgNdKaV8hAa6Ukr5CA10pZTyERroSinlIzTQlVLKR2igK6WUjwjqzjeLjY01KSkp3fmWSinl9bKzs8uMMXEX2q9bAz0lJYVt27Z151sqpZTXE5E8Z/bTKRellPIRGuhKKeUjNNCVUspHaKArpZSP0EBXSikfoYGulFIukpmbyc3Lb2b4W8O5efnNZOZmuvT9urVtUSml/EVmbibzN82n1lYLQFF1EfM3zQdgyqApLnlPHaErpZQLLNy+sDnMm9Taalm4faHL3lMDXSmlXKC4urhT27uCTrkopVQXOlxxmDd3vYnBdPh8QkSCy95bA10ppbrAoZOHeHP3m6w+spqwoDCuS76OrKIs6mx1zfuEBYYxd/Rcl9Wgga6UUpegZZCHB4Xzo2E/4qErH6JXWC8yczNZuH0hxdXFJEQkMHf0XJcdEAUNdKWUuigHTx7kzd1vsubIGsKDwpl91WwevOJBeoX1at5nyqApLg3wtjTQlVKqEw6ePMjiXYtZk7eGHkE9ePiqh3nwigeJCYtxd2kXDnQRSQPea7FpEPA8sNTangIcAWYYY052fYlKKeV+OSdzWLxrMZ/kfUJEcAQ/vurHHhPkTS4Y6MaYA8BIABEJBI4Bq4BngM+MMS+LyDPW46ddWKtSSnW7AycO8ObuN5uDfM7wOTx4xYNEh0a7u7R2OjvlMhk4bIzJE5E7geut7W8B69FAV0r5iAMnDrB412I+PfopEcER/GT4T3jgigc8MsibdDbQ7wX+at3va4wpAjDGFIlIfEcvEJE5wByAAQMGXGydSinVLVoGeWRwpFcEeROnA11EQoA7gGc78wbGmCXAEoCMjIyOO+2VUsrN9p/Yz+Jdi/ns6GdEBkfy0xE/5f6h93tFkDfpzAj9e8B2Y8xx6/FxEUm0RueJQEnXl6eUUq61r3wfi3ctZm3+WqKCo/jZiJ8xa+gsrwryJp0J9JmcnW4B+Ah4CHjZuv2wC+tSSimX2le+j0W7FrEufx1RwVH8fMTPmXXFLHqG9HR3aRfNqUAXkR7ATcBPWmx+GXhfRGYDR4HpXV+eUkp1rb3le1m0axHr89cTFRLFz0f+nFlDvTvImzgV6MaYM0CfNtvKcXS9KKWUx/um/BsW71zM+gJHkP/zyH9m1tBZRIVEubu0LqNniiqlfFrLIO8Z0pNfjPwF9w29z6eCvIkGulLKJ31T9g2Ldi3i84LP6RnSk0dGPcJ96fcRGRLp7tJcRgNdKeVT9pTtYdGuRWwo2EB0aLRfBHkTDXSllE/4uvRrFu1axBfHviA6NJp/GfUvzEyf6RdB3kQDXSnl1XaX7mbRrkVsPLaRmNAY5o6ey8z0mUQER7i7tG6nga6U8kq7SnexaNcivjz2pd8HeRMNdKWUV2kb5I+OfpSZ6TPpEdzD3aW5nQa6Usor7CzZyeJdi/my8Et6hfbisTGPcW/avRrkLWigK6U82s6SnSzatYhNhZvoFdqLx8c8zj1p92iQd0ADXSnlkXaW7OSNnW/wVdFX9A7rzRNjnmBG2gwN8vPQQFdKeZQdJTt4Y+cbZBVl0TusN09mPMn01Oka5E7QQFdKeYTtx7fzxq432Fy0WYP8ImmgK6XcKvt4Not2LWJz0Wb6hPXhyYwnmZE2g/CgcHeX5nU00JVS3SYzN5OF2xdSXF1M77DexITEcPj0YfqE9WFexjymp03XIL8EGuhKqW6RmZvJ/E3zqbXVAlBeW055bTm3X3Y7z094XoO8CwS4uwCllH9YuH1hc5i3lF2SrWHeRTTQlVLdoqi6qMPtxdXF3VyJ79JAV0q5XEFlAQHniJuEiIRursZ3ORXoIhIjIstFZL+I7BOR74hIbxH5REQOWre9XF2sUsr7VNVX8cjaRwgJDCE0MLTVc2GBYcwdPddNlfkeZ0foC4F/GGPSgRHAPuAZ4DNjzBDgM+uxUko1s9ltPP3F0xw5dYTXJ7/Ov034NxIjEhGExIhE5k+Yz5RBU9xdps+4YJeLiPQErgX+CcAYUw/Ui8idwPXWbm8B64GnXVGkUso7LchewIaCDfxq/K8YlzgOQAPchZwZoQ8CSoH/FpEdIvInEYkA+hpjigCs2/iOXiwic0Rkm4hsKy0t7bLClVKebdXBVby19y1mps9kRtoMd5fjF5wJ9CBgNLDIGDMKqKYT0yvGmCXGmAxjTEZcXNxFlqmU8ibZx7P5TdZvmJA0gaeufsrd5fgNZwK9ACgwxmy2Hi/HEfDHRSQRwLotcU2JSilvUlBZwGPrHiM5MplXrnuFoAA9f7G7XDDQjTHFQL6IpFmbJgN7gY+Ah6xtDwEfuqRCpZTXaOposRkbr09+nZ4hPd1dkl9x9kfnI8C7IhIC5AI/xPHD4H0RmQ0cBaa7pkSllDew2W08teEpjpw6wuKbFjOw50B3l+R3nAp0Y8xOIKODpyZ3bTlKKW+1IHsBXxz7olVHi+peeqaoUuqSaUeLZ9BAV0pdkm3F27SjxUNooCulLlp+ZT6PrdeOFk+hga6UuihV9VU88tkj2I1dO1o8hP44VUp1WlNHS97pPO1o8SA6QldKdVpTR8uz457VjhYPooGulOqUlQdX8tbet7gv/T7taPEwGuhKKadtK97GC1kvMCFpAvOunufuclQbGuhKKadoR4vn00BXSl2QdrR4B/0Rq5Q6L+1o8R46QldKnder2a9qR4uX0EBXSp3TyoMrWbp3qXa0eAkNdKVUh7SjxftooCul2tGOFu+kga6UakU7WryX/thVSjXTjhbvpiN0pVQz7Wjxbk6N0EXkCFAJ2IBGY0yGiPQG3gNSgCPADGPMSdeUqZRyNe1o8X6dGaHfYIwZaYxpurboM8BnxpghwGfWY6WUF9KOFt9wKVMudwJvWfffAqZeejlKqe6mHS2+w9lAN8AaEckWkTnWtr7GmCIA6za+oxeKyBwR2SYi20pLSy+9YqVUl9GOFt/i7I/iicaYQhGJBz4Rkf3OvoExZgmwBCAjI8NcRI1KKRfQjhbf49QI3RhTaN2WAKuAscBxEUkEsG5LXFWkUqrraUeL77lgoItIhIhENd0Hbgb2AB8BD1m7PQR86KoilVJdSztafJMzUy59gVUi0rT//xpj/iEiW4H3RWQ2cBSY7roylVJdRTtafNcFA90YkwuM6GB7OTDZFUUppVxDO1p8m54pqpSf0I4W36c/npXyAy07Wt686U3taPFROkJXyg+07GgZmzjW3eUoF9FAV8rHaUeL/9BAV8qHbS3eqh0tfkQDXSkflV+Zz+PrH9eOFj+iga6UD9KOFv+kP7KV8jE2u415G+ZpR4sf0hG6Uj7m99m/Z+OxjdrR4oc00JXyISsPruTtvW9rR4uf0kBXykdoR4vSQFfKB2hHiwINdKW8XmV9ZXNHyx8n/1E7WvyY/hhXyou1XaNlQM8B7i5JuZGO0JXyYtrRolrSQFfKS63IWcHbe99m1tBZ2tGiAA10pbzS1uKtvJj1IhOTJvJkxpPuLkd5CA10pbxMc0dLVDK/ve632tGimjkd6CISKCI7RORj6/FlIrJZRA6KyHsiEuK6MpVSoB0t6vw6M0KfC+xr8fg/gQXGmCHASWB2VxamlGqtZUfLgusXaEeLasepQBeRZGAK8CfrsQCTgOXWLm8BU11RoFLKQTta1IU4O0J/DXgKsFuP+wAVxphG63EB0K+jF4rIHBHZJiLbSktLL6lYpfyVdrQoZ1ww0EXkdqDEGJPdcnMHu5qOXm+MWWKMyTDGZMTFxV1kmUr5L+1oUc5y5vD4ROAOEbkNCAN64hixx4hIkDVKTwYKXVemUv4p/7Sjo6V/z/7a0aIu6IIjdGPMs8aYZGNMCnAvsNYYMwtYB0yzdnsI+NBlVSrlhyrrK/nF2l9gMLw+Sa86pC7sUvrQnwYeF5FDOObU/9w1JSmlmjpajp4+yqvXvaodLcopnfr9zRizHlhv3c8F9FC7Ui7Q1NHyq/G/0o4W5TQ9U1QpD6MdLepiaaAr5UG0o0VdCg10pTxE/ul8Hlv/mHa0qIumga6UB2jqaAG0o0VdNB0CKOVmjfZG5m2Yx9HTR/WqQ+qSaKAr5SaZuZks3L6QouoiAKZePlU7WtQl0SkXpdwgMzeT+ZvmN4c5wD+O/IPM3Ew3VqW8nQa6Um6wcPtCam21rbbV2mpZuH2hmypSvkADXaluVt1Q3Wpk3lJxdXE3V6N8iQa6Ut0otyKX+zLvO+fzCREJ3ViN8jUa6Ep1kzVH1jAzcyYVdRU8POxhwgLDWj0fFhjG3NFz3VSd8gXa5aKUizXYG3gt+zWW7l3K8Ljh/P6635MQkcDgXoNZuH0hxdXFJEQkMHf0XKYMmuLucpUX00BXyoXKasp4Yv0TbC/Zzr1p9/LU1U8RHBgMwJRBUzTAVZfSQFfKRbKPZ/Pk509SVV/FS9e8xO2Dbnd3ScrHaaAr1cWMMby9921ezX6VfpH9ePOmN0ntleruspQf0EBXqgtVN1Tz602/ZvWR1UzqP4kXv/siUSFR7i5L+QkNdKW6SG5FLo+tf4wjp4/w6OhH+dGwHyHS0fXUlXINDXSlusCaI2v41Ze/IiwojCU3LWFc4jh3l6Q8wAc7jvHK6gMUVtSQFBPOvFvSmDqqn8ve74KBLiJhwAYg1Np/uTHm1yJyGfA3oDewHXjAGFPvskqV8kDnaklU6oMdx3h25dfUNNgAOFZRw7MrvwZwWag7c2JRHTDJGDMCGAncKiLjgf8EFhhjhgAngdkuqVApD1V6ppSHVz/M0r1LuTftXv7nlv/RMFfNXll9oDnMm9Q02Hhl9QGXvecFA904VFkPg60/BpgELLe2vwVMdUmFSnmg7OPZzPh4BnvL9/LSNS/xr+P/tbm/XCmAwoqaTm3vCk6d+i8igSKyEygBPgEOAxXGmEZrlwKgw98hRGSOiGwTkW2lpaVdUbNSbmOMYek3S5m9ejY9gnrw7pR3tb9ctVJd18ii9Yc51/HwpJhwl723UwdFjTE2YKSIxACrgKEd7XaO1y4BlgBkZGR0uI9S3kBbEtX51NTbeDvrCG9+nkt5dT3pCVF8W1ZNXaO9eZ/w4EDm3ZLmsho61eVijKkQkfXAeCBGRIKsUXoyUOiC+pTyCNqSqM6ltsHGO1l5LP78MGVV9VwzJJZHb0xlzMBeHtnlEgc0WGEeDtyI44DoOmAajk6Xh4APXValUm60+shqnv/yeW1JVK3UNtj465ajvLH+MKWVdUy4vA+L7k/l6pTezftMHdXPpQHeljMj9ETgLREJxDHn/r4x5mMR2Qv8TUReBHYAf3ZhnUp1uwZ7AwuyF/D23re1JVE1q2u08d7WfP647hDHT9cx7rLevD5zFOMG9XF3aRcOdGPMbmBUB9tzAb2irfJJpWdKefLzJ9lesp2Z6TOZlzFPu1j8XH2jnfe3OYK86FQtY1N6s+CekUy4PNbdpTXTM0WVaqNplcTqhmpdJVFR32hneXYBf1x3iGMVNYwZ2ItXpo1g4uA+HnccRQNdKYuukqhaarDZWbm9gD+sPUTByRpG9o/hP+66imuHxHpckDfRQFcKbUlUZzXa7KzacYw/rD3E0RNnGJ4czQtTh3F9apzHBnkTDXTl97QlUYEjyD/aVch/fXaQI+VnuDKpJ39+KINJ6fFe8/9BA135NW1JVDa74e9WkOeWVTM0sSdLHhjDTVf09Zogb6KBrvyStiQqu93w8ddFLPw0h8Ol1aQnRLH4/tHcfEUCAQHeFeRNNNCV39GWRP9mtxv+b08xCz/LIed4Fal9I/njfaP53jDvDfImGujKr2hLov+y2w1r9hbz2qcH2V9cyeVxEfxh5iimXJXo9UHeRANd+QVtSfRfxhjW7D3Oa58eZF/RaQbFRrDw3pHcPjyJQB8J8iYa6MrnVTdU8/yXz7Mmb422JPoRYwyf7Svhtc9y2HPsNCl9evDqjBHcMSKJoECnVg73OhroyqflVuTy6PpHyTudx2NjHuOHV/7Q6zoXVOcYY1h/oJQFn+awu+AUA3r34JVpw/nBqH4+G+RNNNCVz9KWRP9ijGHDwTIWfJLDzvwKknuF89u7h/OD0f0I9vEgb6KBrnyOtiT6F2MMGw85gnz70Qr6xYTz0l1XcffoZEKC/CPIm2igK5+iLYn+ZdNhR5BvPXKSxOgwXpw6jOkZyYQGBbq7NLfQQFc+Q1sS/UdWbjkLPslh87cn6NszlN/ceSX3XN3fb4O8iQa68nrGGJbuXcqC7AXakujjth45wYJPcth0uJy4qFB+/f0rmDl2AGHB/h3kTTTQlVfTlkT/kJ13ktc+zeGLg2XERobw3JSh3D9+oAZ5GxroymtpS6Lv23H0JAs+PciGnFL6RITwr7c5gjw8RIO8I85cJLo/sBRIAOzAEmPMQhHpDbwHpABHgBnGmJOuK1Wps7Ql0bftLqhgwSc5rDtQSq8ewTzzvXQe/M5AeoToGPR8nPnbaQSeMMZsF5EoIFtEPgH+CfjMGPOyiDwDPAM87bpSldKWRF+359gpXvs0h0/3lRDTI5h5t6Tx0IQUIkM1yJ3hzEWii4Ai636liOwD+gF3Atdbu70FrEcDXbmQtiT6rr2Fp3nt0xzW7D1Oz7AgnrgplX+amEJUmP77dkanfuyJSAowCtgM9LXCHmNMkYjEn+M1c4A5AAMGDLiUWpUf05ZE3/DBjmO8svoAhRU1JMWEM2v8AHbnn+If3xQTFRbEozcO4UffvYyeGuQXRYwxzu0oEgl8Dvy7MWaliFQYY2JaPH/SGNPrfF8jIyPDbNu27ZIKVv6lZUticlQyr17/qrYkeqkPdhzj2ZVfU9Nga7U9NFD4yXWXM/u7g4juoUHeERHJNsZkXGg/p0boIhIMrADeNcastDYfF5FEa3SeCJRcfLlKtdeyJXHygMm8MPEFbUn0Yq+s3t8uzAF6R4by+M1pbqjI9zjT5SLAn4F9xphXWzz1EfAQ8LJ1+6FLKlR+SVsSfceZ+kY+2lnIsYraDp8vPtXxdtV5zozQJwIPAF+LyE5r2y9xBPn7IjIbOApMd02Jyh9k5maycPtCiquLiQ6Nprq+mqjQKG1J9GKHSqp4d3Mey7MLqKxtJChAaLS3n+JNigl3Q3W+yZkul43AuYZGk7u2HOWPMnMzmb9pPrU2x0itoq4CQZgzfI6GuZdpsNn5ZO9x3snKY9PhcoIDhe8NS+T+8QM5dvIMv1y1p9W0S3hwIPNu0emWrqLNncrtXtv+WnOYNzEY3vrmLWYNneWmqlRnFJ2q4a9b8vnblqOUVNbRLyacebekMSOjP3FRoY6dLuuNiLTqcpl3SxpTR/Vzb/E+RANduc3R00dZnrOc4uriDp8/13blGex2w6bD5byTlccn+45jN4brUuP4j3EDuSE9vsPrdU4d1U8D3IU00FW3arA1sDZ/LctylrG5aDOBEkhYYFi7ETqgZ4B6qFNnGliWnc//bj5Kblk1vXoE8/A1lzFr7EAG9Onh7vL8mga66hb5lfksz1nOB4c+4ETtCZIiknhk1CP8YPAP2FK8pdUcOkBYYBhzR891Y8Wqrd0FFbz9VR5/311IbYOd0QNiWHDPCL43LFFXPfQQGujKZRrsDazPX8+yA8v4qugrAiWQa5OvZXrqdCYkTSAwwBECUwZNAWjuckmISGDu6LnN25X71NTb+PvuQt7JymN3wSnCgwP5wahk7h8/gCuTot1dnmrD6TNFu4KeKeofCioLWHlwJasOraKspoyEiATuGnIXdw2+i74Rfd1dnnJCbmkV724+yvLsAk7VNDA4PpIHxg/kB6P76Wn5btClZ4oqdSEN9gY25G9gWc4yNhVuQkS4tt+1TE+bzsSkic2jceW5Gm12Pt1XwjtZeWw8VEZQgHDLsAQeGD+QcVaHivJsGujqkhRWFbLi4ApWHVxFaU0p8T3i+emIn3LXkLv0oKaXOH66lr9tyeevW45SfLqWpOgwnrgplXvG9ic+Kszd5alO0EBXndZob2RDwQaW5yxn47GNAFyTfA2/GvIrrkm+hqAA/W/l6YwxfJXraDlc881xGu2Ga1Pj+M2dVzIpPZ6gwAB3l6gugn7nKacVVxez4uAKVh5cScmZEuLD45kzfA53D7mbxMhEd5ennHCqpoGV2wt4JyuPw6XVxPQI5ocTU5g1biApsRHuLk9dIg10dV42u42NxzayLGcZXxz7AmMME/pN4Jfjfsl1ydfpaNxL7Dl2iney8vhwZyE1DTZG9o/hd9NHcPtwbTn0JfrdqDpUXF3MqoOrWHFwBcfPHCc2PJbZw2Zzd+rd9IvUM/28QW2DjczdRbydlcfO/ArCggO4c0Q/7h8/kKuSteXQF2mgq2Y2u40vC79kWc4yNhRswG7sTEiawDNjn+G6/tcRHKDtat4gr7yadzcf5f1t+VScaWBQXATP334Fd49JJjpc/w19mQa6ouRMSfNovKi6iN5hvfnhlT/k7tS76R/V393lKSc02uys3V/CO5uPsiGnlMAA4ZYr+3L/uIF85/I+2nLoJzTQ/ZTd2NlUuIllB5bxecHn2IyN8YnjeSLjCSb1n6QXX/YSJZW1vGe1HBaeqqVvz1AeuzGVe8f2p29PbTn0Nxrofqaspqx5NH6s6hi9w3rz4JUPMm3INAb01It4ewNjDJu/PcHbWXms3lNMo93w3cGxPP/9K7lxqLYc+jMNdD9gN3ayCrNYlrOM9fnraTSNjE0Yy6OjH2XSgEmEBIa4u0TlhNO1Dazafox3svI4WFJFz7AgHpqQwqxxAxgUF+nu8pQH0ED3YWU1ZXxw6ANW5KygoKqAmNAY7r/ifu4ecjcp0SnuLk85aW/had7OyuPDncc4U29jeHI0v502nO8PTyI8RFsO1VnOXCT6L8DtQIkxZpi1rTfwHpACHAFmGGNOuq5M5Sy7sbOleAvLDixjbf5aGu2NZPTN4JFRj3DjwBt1NO4lahts/N+eIt7JOkp23klCgwK4Y0QS948fyIj+Me4uT3koZ0bo/wO8Dixtse0Z4DNjzMsi8oz1+OmuL085q7ymnA8Pf8iKnBUcrTxKdGg0M9NnMi11GoOiB7m7PNWBD3Yca3c5ttEDevHuljyWbSvgRHU9l8VG8NyUoUwbk0xMD/1hrM7PqeVzRSQF+LjFCP0AcL0xpkhEEoH1xpgLXulVl8/tWsYYthZvZVnOMj49+imN9kZGx49metp0bhp4E6GBoe4uUZ3DBzuO8ezKr1tdMDlAwG4gMEC4cWg8D4xPYcLlfQjo4FJuyr+4evncvsaYIgAr1OPPU8gcYA7AgAHaRdEVTtae5KPDH7E8ZzlHTh8hKiSKe9PuZVrqNC6Pudzd5SknvLJ6f6swB0eYR4UFseaxa0mMDndTZapL7X4fPvsNnCqA6GSY/DwMn+Gyt3P5QVFjzBJgCThG6K5+P1+QmZvZ7uo9t112G9uOb3OMxvM+pcHewKj4Ufx4+I+5eeDNhAVpz7Gnq6m38VVuGWv3l3Csov01VAGqahs1zH3F7vfh7/8CDTWOx6fyHY/BZaF+sYF+XEQSW0y5lHRlUf4sMzez1fU1i6qLeO7L5/jdtt9RVlNGVHAU01OnMy11GkN6DXFztepCCk6eYd3+EtbuL2HT4XLqGu30CAkkLCiA2kZ7u/2TYjTMvZoxjuAu2gWZT5wN8yYNNY4Ru4cF+kfAQ8DL1u2HXVaRn1u4fWGriyWDY/3xU3WneGHiC9yScgvhQfpN76kabHay806y7kAJ6/aXkHO8CoCBfXowc+wAJqXHM25Qb/7v6+J2c+jhwYHMu+WCh6KUpzAGKvKgcCcU7XSEeOFOqDlx/tedKnBZSc60Lf4VuB6IFZEC4Nc4gvx9EZkNHAWmu6xCP2Cz29h3Yh9ZRVkUVRd1uE+jvZGpg6d2c2XKGeVVdaw/UMraAyVsyCmlsraRoABh7GW9mZHRnxvS4xkUG9FqPZWpoxwrVrbtcmnarjyM3Q4nv3UEd6EV3kW7oLbC8XxAEMQPhfTbIHEkJI2C9x+C0x2Ed3Syy8q8YKAbY2ae46nJXVyL3zDG8O3pb9lctJnNRZvZUryFyvpKAIICgmi0N7Z7jV7OzXMYY/im8DRrramUXQUVGAOxkaHcemUCk9Lj+e6QWKIucDHlqaP6aYB7IrsdThxuPfIu2g11pxzPB4ZA/BVwxZ2QNNIR4PFXQHCb41g3/rr1HDpAcLjjwKiL6Jmi3aTkTAmbizaTVZRFVlEWJWcchx2SIpK4aeBNjEsYx9jEsWwu2txqDh0gLDCMuaPnuqt0BVTVNbLxYBnr9pew7kAJJZV1iMDw5BgenZzKpPR4rkzqqS2G3sZug7KDVmhbo+/i3VDvmCojMBQShsFVd1sj75EQNxSCnDgnoGme3Je6XPzV6frTbC3e2jwKzz2VC0BMaAxjE8YyLnEc30n8DslRya1+FZ8yaApAuy6Xpu2q++SWVrHWCvAt356gwWaICg3i2tQ4bkiP5/q0OGIjtdffa9gaoezA2bnuop1Q/DU0nHE8HxTuCO8RM62R9wiIS4dLWXl0+AyXBnhbTp1Y1FV8+cSiOlsdO0t2No/Cvyn/BruxEx4Uzuj40YxPHM+4xHGk9U4jQHQ1PE9U12hjy7cnHCG+v4Qj5Y5v9MHxkUxKj+eGtHgyUnoRrKsZej5bA5TsOzvyLtoFxXug0Zr+CI6AhKvOTpkkjoDYVAj0zDGuq08s8ns2u439J/bzVdFXbC7azI6SHdTZ6giUQK6KvYofX/VjxieOZ3jccF0/xYMVn6pl/QHHXPieA1TBAAAOTElEQVTGQ2WcqbcREhTAhMv78KPvXsYNafH0793D3WWq82msh5K9rQ9YHv8GbHWO50OiIHE4ZPzIEdxJI6HPYAjwvYXNNNCdZIwh73QeWUVZzQcyT9efBmBwzGCmp05nfOJ4xvQdQ2SILmXqqWx2w878iube8L1Fjn/DpOgwfjCqH5PS45lweayuYuipGmqh5JsWnSY74fhesDc4ng+NdoT3uDnWyHsk9B4EAf7xW5UG+nmUniltPoi5uWgzx88cByAxIpHJAyYzLnEc4xLHERse6+ZK1fmcOtPA5wdLWbe/hM9zSjlRXU+AwJiBvXjq1jQmpceT1jdKL9PmaRpqHNMkRdZ8d+EuKN0HTV1gYTGO0fZ3fn72gGWvy8CP/x010FuorK9kW/G25gA/fOowANGh0YxNGMv4xPGMTxxP/6j++s3vwYwx5Byvap4Lzz56Epvd0KtHMNenOQ5mXpcap6sXusO51japr3YcoGx5wLL0ABjrxKsefRyhPeSms/PeMQP8Orw74tcHRett9ews2dkc4HvK92A3dsICwxjTd0zzCDy9d7oeyPRwNfU2Nh0us87QLOVYhePg1xWJPR0HNNPjGdk/hkBtK3SftmubAEggRMZD1XEw1lIIEfFnu0yaDlhGJ/t1eOtB0Q7Y7Db2n9xPVmFW84HMWlstgRLIsNhhPHzVw4xPHM+IuBF6INML5J84wzrrgOZXLdZJmTg4ll9MGswNafEkROuiZW5TXe5oEyw9AGU5sO0v0NhmUTJjg5qTcO1TZ0M8KtGvw/tS+HSgG2M4WnnUEeDFjn7wlgcyp6VOY1ziODL6ZuiBTC/QvE6KdUDzYInj5I+UPj24b9wAbkhzrJMSGqQHNLuNMXD62NnQbr7dD2fKz+4XFN4+zJs01sENz3ZPvT7O5wK9rKbMcSDTCvHi6mLAcer8pAGTmvvB9UCmZ+no6j1TR/XrcJ2U4EDHOin3XN2fSenxeoHk7mBrdKxlUnrAGnXnOG7LDp49qxIcByrj0iF9CsSmQVyao787uj8sHO5YibAtF65t4m88fg69o7XBW5412XQgs2kEfqjiEND6QOa4xHEMiBqgBzI9VEdX7wkKEJJiwsg/WYMxEBcVyg1pcUxKj2fi4Auvk6IuUkONI6SbR9vWlEn54bOtgQBRSRCXaoV26tnwjog793RJR3PoweHw/f/q1rMpvZFPzKF3tDb4/E3zOVxxGBFxnJFZ9g02YyMsMIzRfUfz/cu/z/jE8Xog00PVNdo4UV1PWWU9ZVV1lFXV8cLHe9tdvafRbig6VavrpLhKzcmzo+yW0yUVRwFrkCcBjjbAuDRIvdUabadB7BAI69n593TD2ib+xqNH6Dcvv/mcy8kGSiBXxl7Z3EqoBzLdp7qu0QrnsyFd3uJ+8/bKOk7Xtl9J8lwE+PZlXcPmohkDlcWtp0hKrT/VLa5JExjqCOnY1LNTJHFp0Pvy9isIKrfwiRF60/x3R7649wuiQqK6sRr/YYzhVE1DuzAuq6qnvLqOUmt0XV5dR1llfbvRdZPo8GD6RIYQGxnK0ISexA4OoU9kKLGRocRGOu7HRYZyz5KvKDrV/oCZXr3HSXYbnDzS5qCkdVt3+ux+odGO6ZEhN7eeLokZ6JOnwfsjjw70hIiEDkfoiRGJPh3m5zpAeCkabXZOnDk71dEUxmVVdZS2GVGXV9XTaG//m1uAQO8IRxjHRYWS0qeHI5yjQukTEUJslCOg+0SG0CcilJAg56a8nr413T+v3tPZCwg31kH5obOj7KaRd/mhs+uWAET2dYyyh884G9px6Y7tehzJp3l0oM8dPdfv1gZve4DwWEUNz678GqBdqNc22M49vVFVT3mLbSfP1NPR7FpIYACxkY4w7tszjCuTerYaRce2uB/TI8QlJ+b45dV7zncB4dRb2xyUtKZLTh45e/INAr0GOgJ78KTWHSXhMe74RMoDePQcOly4y8Wb2e2GukY7tQ02ahtt1DbYuefNryiprGu3b0RIINcMibNG1/WUVdZRWdfxfHRkaFBzGPdpE8ptR9RRoUHa/dMdbA2O09sbahzrb//39xxnR7YlAS1CGwgIdqwM2LKTJC7NsS1Yp6T8RbfMoYvIrcBCIBD4kzHm5Uv5eh2J31PA0j25xJtSSuQM+SEFMKir38XBZjeOcG2wUdsUtA2OoG13v/Hs/bpz7F/TYKOuwW7t2+brNNqp7+Cq7wB3BGzkqaD3SZIyCk0sv22cwUf13+VwaRWxkaEM6xdNnwjHtEesNb0RG3U2sMOCvXA+tLPTD12psd4Rsk1h2+p+TYsgbrGtoc22+pav6+DrdHBZwQ4ZO0z+9dmOkl4pHrtGt/I8F/0/RUQCgT8CNwEFwFYR+cgYs7eritv60ZsMy36OcKkHgQRKic5+jszKWqLHzqKmOUAdAVl3ntCtbbBTZwVrTUOb7da+DbaL/20lLDiAsOBAwoICz94PdtzvHRHSbntocIC1zbE93Nq+5aPFPGf/Ez2kHoBkKePl4D/ROziE+Y//W1f91XqW800/XDH13GF7zhBtsa3lqLjd1+hk2LYUFO4YIQf3sG7DISTC0c4XldDiuR6t9wuxtq3+ZeszKZtE94drHr/4v0vl1y56ykVEvgPMN8bcYj1+FsAY89K5XtPZKZfi+YNJoLTd9gYTyLfm/BdNDhBBBESEAAHB8TjA2iYCAbTZRwSh9T4iQgBt9hHr60PzPl01aWEvO0SAaR8wdgkiIHZwF72Lhyk/dHGhei5BLQI2uG3wtgnZkB7neL5H69eGtNgWFH7p62vrSTaqE7pjyqUf0PI83gJgXAeFzAHmAAwYMKBTbxBvSukoKYOwEXvZcAIChEARAgOEAOs2MMAK4k69k+cIKN3f8XbT6Pg13Bed4zMDMOk5x+XC2oZuuyC29gkK846LGehJNsoFLiXQO8rMdsN9Y8wSYAk4RuideYMSietwhH5c4kj44d8686W8x4Jh51jvoj/MWNr99XSH833ma+d1fz3dpZsvIKx836UMZQqA/i0eJwOFl1ZOa/mj51FjWp/9WWNCyB/tw9/kk59v370QHO7Y7qv88TMr5QKXEuhbgSEicpmIhAD3Ah91TVkOV9/xE/aMeZFi4rAboZg49ox5kavv+ElXvo1nGT7DMY8a3R8Qx62vz6v642dWygUuqQ9dRG4DXsPRtvgXY8y/n29/T7tikVJKeYNu6UM3xvw/4P9dytdQSinVNbygHUAppZQzNNCVUspHaKArpZSP0EBXSikf0a2rLYpIKZB3kS+PBcq6sBxvoJ/ZP+hn9n2X+nkHGmPiLrRTtwb6pRCRbc607fgS/cz+QT+z7+uuz6tTLkop5SM00JVSykd4U6AvcXcBbqCf2T/oZ/Z93fJ5vWYOXSml1Pl50whdKaXUeXhFoIvIrSJyQEQOicgz7q7H1UTkLyJSIiJ73F1LdxCR/iKyTkT2icg3IjLX3TW5moiEicgWEdllfWYfvb5geyISKCI7RORjd9fSHUTkiIh8LSI7RcSlqxN6/JSLde3SHFpcuxSY2ZXXLvU0InItUAUsNcYMc3c9riYiiUCiMWa7iEQB2cBUH/83FiDCGFMlIsHARmCuMSbLzaW5nIg8DmQAPY0xt7u7HlcTkSNAhjHG5X333jBCHwscMsbkGmPqgb8Bd7q5JpcyxmwATri7ju5ijCkyxmy37lcC+3Bc4tBnGYcq62Gw9cezR1ddQESSgSnAn9xdiy/yhkDv6NqlPv3N7s9EJAUYBWx2byWuZ0097ARKgE+MMT7/mXFcP+EpwO7uQrqRAdaISLZ1jWWX8YZAd+rapcr7iUgksAJ41Bhz2t31uJoxxmaMGYnj8o1jRcSnp9dE5HagxBiT7e5autlEY8xo4HvAP1tTqi7hDYHu8muXKvez5pFXAO8aY1a6u57uZIypANYDt7q5FFebCNxhzSn/DZgkIu+4tyTXM8YUWrclwCoc08gu4Q2B7vJrlyr3sg4Q/hnYZ4x51d31dAcRiRORGOt+OHAjsN+9VbmWMeZZY0yyMSYFx/fxWmPM/W4uy6VEJMI60I+IRAA3Ay7rXvP4QDfGNAK/AFbjOFj2vjHmG/dW5Voi8lfgKyBNRApEZLa7a3KxicADOEZsO60/t7m7KBdLBNaJyG4cg5ZPjDF+0cbnZ/oCG0VkF7AFyDTG/MNVb+bxbYtKKaWc4/EjdKWUUs7RQFdKKR+hga6UUj5CA10ppXyEBrpSSvkIDXTl1UTE1qLVcWfTapwist5aobNp+7Quer8Uf1kFU3mfIHcXoNQlqrFOn+/ILGOMS5crVcqT6Ahd+Q3rrL1Maw3yPSJyj7X9ahHZZG3fIiJR1kj8CxHZbv2Z0MHXCxSRV0Rkq4jsFpGfdP+nUuosHaErbxdurVjY5CVjzHvW/XdFpMa6Pxm4Hig0xkwBEJFoazmJ94B7jDFbRaQnUINjBcSbjDG1IjIE+CuONbxbmg2cMsZcLSKhwJcissYY860rPqhSF6KBrryd01MuIvI18DsR+U/gY2PMFyJyFVBkjNkK0LTKo7XuxusiMhKwAakdfP2bgeEt5uejgSGABrpyCw105TeMMTkiMga4DXhJRNYAH9DxcsyPAceBETimJms72EeAR4wxq11UslKdonPoym+ISBJwxhjzDvA7YDSOFQ6TRORqa58oEQnCMdouMsbYcSwcFtjBl1wN/Mxa+hcRSbVG9kq5hY7QlbdrO4f+D2PMuS4kfhXwiojYgQbgZ8aYeuvg6B+sZWxrcCxl+wawQkSmA+uA6g6+3p+AFGC7tQRwKTC1Kz6UUhdDV1tUSikfoVMuSinlIzTQlVLKR2igK6WUj9BAV0opH6GBrpRSPkIDXSmlfIQGulJK+QgNdKWU8hH/HxAa01P8KswYAAAAAElFTkSuQmCC\n",
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"d.groupby(['EFscale'])['lenghtmiles'].quantile(0.5).plot(kind='line',marker='o')\n",
"d.groupby(['EFscale'])['lenghtmiles'].quantile(0.1).plot(kind='line',marker='o')\n",
"d.groupby(['EFscale'])['lenghtmiles'].quantile(0.9).plot(kind='line',marker='o')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### sometimes the groupby functionalities are available within other functions, usually under the \"by=\" parameter"
]
},
{
"cell_type": "code",
"execution_count": 88,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
""
]
},
"execution_count": 88,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"fig, ax = plt.subplots()\n",
"d.boxplot(by=['EFscale'], column='lenghtmiles', ax=ax, )"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### What if we want to groupby by more than one column?\n",
"Note how nicely the print to screen let's you highlight the row as your hover over."
]
},
{
"cell_type": "code",
"execution_count": 89,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" \n",
" \n",
" om \n",
" yr \n",
" mo \n",
" dy \n",
" date \n",
" time \n",
" state \n",
" injuries \n",
" fatalities \n",
" loss \n",
" startlat \n",
" startlon \n",
" endlat \n",
" endlon \n",
" lenghtmiles \n",
" widthyards \n",
" sg \n",
" \n",
" \n",
" EFscale \n",
" date_time \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" 0 \n",
" 0 \n",
" 255 \n",
" 255 \n",
" 255 \n",
" 255 \n",
" 255 \n",
" 255 \n",
" 255 \n",
" 255 \n",
" 255 \n",
" 255 \n",
" 255 \n",
" 255 \n",
" 255 \n",
" 255 \n",
" 255 \n",
" 255 \n",
" 255 \n",
" \n",
" \n",
" 1 \n",
" 206 \n",
" 206 \n",
" 206 \n",
" 206 \n",
" 206 \n",
" 206 \n",
" 206 \n",
" 206 \n",
" 206 \n",
" 206 \n",
" 206 \n",
" 206 \n",
" 206 \n",
" 206 \n",
" 206 \n",
" 206 \n",
" 206 \n",
" \n",
" \n",
" 2 \n",
" 189 \n",
" 189 \n",
" 189 \n",
" 189 \n",
" 189 \n",
" 189 \n",
" 189 \n",
" 189 \n",
" 189 \n",
" 189 \n",
" 189 \n",
" 189 \n",
" 189 \n",
" 189 \n",
" 189 \n",
" 189 \n",
" 189 \n",
" \n",
" \n",
" 3 \n",
" 179 \n",
" 179 \n",
" 179 \n",
" 179 \n",
" 179 \n",
" 179 \n",
" 179 \n",
" 179 \n",
" 179 \n",
" 179 \n",
" 179 \n",
" 179 \n",
" 179 \n",
" 179 \n",
" 179 \n",
" 179 \n",
" 179 \n",
" \n",
" \n",
" 4 \n",
" 193 \n",
" 193 \n",
" 193 \n",
" 193 \n",
" 193 \n",
" 193 \n",
" 193 \n",
" 193 \n",
" 193 \n",
" 193 \n",
" 193 \n",
" 193 \n",
" 193 \n",
" 193 \n",
" 193 \n",
" 193 \n",
" 193 \n",
" \n",
" \n",
" 5 \n",
" 182 \n",
" 182 \n",
" 182 \n",
" 182 \n",
" 182 \n",
" 182 \n",
" 182 \n",
" 182 \n",
" 182 \n",
" 182 \n",
" 182 \n",
" 182 \n",
" 182 \n",
" 182 \n",
" 182 \n",
" 182 \n",
" 182 \n",
" \n",
" \n",
" 6 \n",
" 230 \n",
" 230 \n",
" 230 \n",
" 230 \n",
" 230 \n",
" 230 \n",
" 230 \n",
" 230 \n",
" 230 \n",
" 230 \n",
" 230 \n",
" 230 \n",
" 230 \n",
" 230 \n",
" 230 \n",
" 230 \n",
" 230 \n",
" \n",
" \n",
" 7 \n",
" 275 \n",
" 275 \n",
" 275 \n",
" 275 \n",
" 275 \n",
" 275 \n",
" 275 \n",
" 275 \n",
" 275 \n",
" 275 \n",
" 275 \n",
" 275 \n",
" 275 \n",
" 275 \n",
" 275 \n",
" 275 \n",
" 275 \n",
" \n",
" \n",
" 8 \n",
" 332 \n",
" 332 \n",
" 332 \n",
" 332 \n",
" 332 \n",
" 332 \n",
" 332 \n",
" 332 \n",
" 332 \n",
" 332 \n",
" 332 \n",
" 332 \n",
" 332 \n",
" 332 \n",
" 332 \n",
" 332 \n",
" 332 \n",
" \n",
" \n",
" 9 \n",
" 421 \n",
" 421 \n",
" 421 \n",
" 421 \n",
" 421 \n",
" 421 \n",
" 421 \n",
" 421 \n",
" 421 \n",
" 421 \n",
" 421 \n",
" 421 \n",
" 421 \n",
" 421 \n",
" 421 \n",
" 421 \n",
" 421 \n",
" \n",
" \n",
" 10 \n",
" 521 \n",
" 521 \n",
" 521 \n",
" 521 \n",
" 521 \n",
" 521 \n",
" 521 \n",
" 521 \n",
" 521 \n",
" 521 \n",
" 521 \n",
" 521 \n",
" 521 \n",
" 521 \n",
" 521 \n",
" 521 \n",
" 521 \n",
" \n",
" \n",
" 11 \n",
" 776 \n",
" 776 \n",
" 776 \n",
" 776 \n",
" 776 \n",
" 776 \n",
" 776 \n",
" 776 \n",
" 776 \n",
" 776 \n",
" 776 \n",
" 776 \n",
" 776 \n",
" 776 \n",
" 776 \n",
" 776 \n",
" 776 \n",
" \n",
" \n",
" 12 \n",
" 1191 \n",
" 1191 \n",
" 1191 \n",
" 1191 \n",
" 1191 \n",
" 1191 \n",
" 1191 \n",
" 1191 \n",
" 1191 \n",
" 1191 \n",
" 1191 \n",
" 1191 \n",
" 1191 \n",
" 1191 \n",
" 1191 \n",
" 1191 \n",
" 1191 \n",
" \n",
" \n",
" 13 \n",
" 1640 \n",
" 1640 \n",
" 1640 \n",
" 1640 \n",
" 1640 \n",
" 1640 \n",
" 1640 \n",
" 1640 \n",
" 1640 \n",
" 1640 \n",
" 1640 \n",
" 1640 \n",
" 1640 \n",
" 1640 \n",
" 1640 \n",
" 1640 \n",
" 1640 \n",
" \n",
" \n",
" 14 \n",
" 2279 \n",
" 2279 \n",
" 2279 \n",
" 2279 \n",
" 2279 \n",
" 2279 \n",
" 2279 \n",
" 2279 \n",
" 2279 \n",
" 2279 \n",
" 2279 \n",
" 2279 \n",
" 2279 \n",
" 2279 \n",
" 2279 \n",
" 2279 \n",
" 2279 \n",
" \n",
" \n",
"
\n",
"
"
],
"text/plain": [
" om yr mo dy date time state injuries \\\n",
"EFscale date_time \n",
"0 0 255 255 255 255 255 255 255 255 \n",
" 1 206 206 206 206 206 206 206 206 \n",
" 2 189 189 189 189 189 189 189 189 \n",
" 3 179 179 179 179 179 179 179 179 \n",
" 4 193 193 193 193 193 193 193 193 \n",
" 5 182 182 182 182 182 182 182 182 \n",
" 6 230 230 230 230 230 230 230 230 \n",
" 7 275 275 275 275 275 275 275 275 \n",
" 8 332 332 332 332 332 332 332 332 \n",
" 9 421 421 421 421 421 421 421 421 \n",
" 10 521 521 521 521 521 521 521 521 \n",
" 11 776 776 776 776 776 776 776 776 \n",
" 12 1191 1191 1191 1191 1191 1191 1191 1191 \n",
" 13 1640 1640 1640 1640 1640 1640 1640 1640 \n",
" 14 2279 2279 2279 2279 2279 2279 2279 2279 \n",
"\n",
" fatalities loss startlat startlon endlat endlon \\\n",
"EFscale date_time \n",
"0 0 255 255 255 255 255 255 \n",
" 1 206 206 206 206 206 206 \n",
" 2 189 189 189 189 189 189 \n",
" 3 179 179 179 179 179 179 \n",
" 4 193 193 193 193 193 193 \n",
" 5 182 182 182 182 182 182 \n",
" 6 230 230 230 230 230 230 \n",
" 7 275 275 275 275 275 275 \n",
" 8 332 332 332 332 332 332 \n",
" 9 421 421 421 421 421 421 \n",
" 10 521 521 521 521 521 521 \n",
" 11 776 776 776 776 776 776 \n",
" 12 1191 1191 1191 1191 1191 1191 \n",
" 13 1640 1640 1640 1640 1640 1640 \n",
" 14 2279 2279 2279 2279 2279 2279 \n",
"\n",
" lenghtmiles widthyards sg \n",
"EFscale date_time \n",
"0 0 255 255 255 \n",
" 1 206 206 206 \n",
" 2 189 189 189 \n",
" 3 179 179 179 \n",
" 4 193 193 193 \n",
" 5 182 182 182 \n",
" 6 230 230 230 \n",
" 7 275 275 275 \n",
" 8 332 332 332 \n",
" 9 421 421 421 \n",
" 10 521 521 521 \n",
" 11 776 776 776 \n",
" 12 1191 1191 1191 \n",
" 13 1640 1640 1640 \n",
" 14 2279 2279 2279 "
]
},
"execution_count": 89,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"d.groupby(by=['EFscale',d.index.hour]).count().head(15)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### order does matter in the grouping"
]
},
{
"cell_type": "code",
"execution_count": 90,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" \n",
" \n",
" om \n",
" yr \n",
" mo \n",
" dy \n",
" date \n",
" time \n",
" state \n",
" injuries \n",
" fatalities \n",
" loss \n",
" startlat \n",
" startlon \n",
" endlat \n",
" endlon \n",
" lenghtmiles \n",
" widthyards \n",
" sg \n",
" \n",
" \n",
" date_time \n",
" EFscale \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" 0 \n",
" 0 \n",
" 255 \n",
" 255 \n",
" 255 \n",
" 255 \n",
" 255 \n",
" 255 \n",
" 255 \n",
" 255 \n",
" 255 \n",
" 255 \n",
" 255 \n",
" 255 \n",
" 255 \n",
" 255 \n",
" 255 \n",
" 255 \n",
" 255 \n",
" \n",
" \n",
" 1 \n",
" 365 \n",
" 365 \n",
" 365 \n",
" 365 \n",
" 365 \n",
" 365 \n",
" 365 \n",
" 365 \n",
" 365 \n",
" 365 \n",
" 365 \n",
" 365 \n",
" 365 \n",
" 365 \n",
" 365 \n",
" 365 \n",
" 365 \n",
" \n",
" \n",
" 2 \n",
" 203 \n",
" 203 \n",
" 203 \n",
" 203 \n",
" 203 \n",
" 203 \n",
" 203 \n",
" 203 \n",
" 203 \n",
" 203 \n",
" 203 \n",
" 203 \n",
" 203 \n",
" 203 \n",
" 203 \n",
" 203 \n",
" 203 \n",
" \n",
" \n",
" 3 \n",
" 38 \n",
" 38 \n",
" 38 \n",
" 38 \n",
" 38 \n",
" 38 \n",
" 38 \n",
" 38 \n",
" 38 \n",
" 38 \n",
" 38 \n",
" 38 \n",
" 38 \n",
" 38 \n",
" 38 \n",
" 38 \n",
" 38 \n",
" \n",
" \n",
" 4 \n",
" 7 \n",
" 7 \n",
" 7 \n",
" 7 \n",
" 7 \n",
" 7 \n",
" 7 \n",
" 7 \n",
" 7 \n",
" 7 \n",
" 7 \n",
" 7 \n",
" 7 \n",
" 7 \n",
" 7 \n",
" 7 \n",
" 7 \n",
" \n",
" \n",
" 1 \n",
" 0 \n",
" 206 \n",
" 206 \n",
" 206 \n",
" 206 \n",
" 206 \n",
" 206 \n",
" 206 \n",
" 206 \n",
" 206 \n",
" 206 \n",
" 206 \n",
" 206 \n",
" 206 \n",
" 206 \n",
" 206 \n",
" 206 \n",
" 206 \n",
" \n",
" \n",
" 1 \n",
" 355 \n",
" 355 \n",
" 355 \n",
" 355 \n",
" 355 \n",
" 355 \n",
" 355 \n",
" 355 \n",
" 355 \n",
" 355 \n",
" 355 \n",
" 355 \n",
" 355 \n",
" 355 \n",
" 355 \n",
" 355 \n",
" 355 \n",
" \n",
" \n",
" 2 \n",
" 163 \n",
" 163 \n",
" 163 \n",
" 163 \n",
" 163 \n",
" 163 \n",
" 163 \n",
" 163 \n",
" 163 \n",
" 163 \n",
" 163 \n",
" 163 \n",
" 163 \n",
" 163 \n",
" 163 \n",
" 163 \n",
" 163 \n",
" \n",
" \n",
" 3 \n",
" 34 \n",
" 34 \n",
" 34 \n",
" 34 \n",
" 34 \n",
" 34 \n",
" 34 \n",
" 34 \n",
" 34 \n",
" 34 \n",
" 34 \n",
" 34 \n",
" 34 \n",
" 34 \n",
" 34 \n",
" 34 \n",
" 34 \n",
" \n",
" \n",
" 4 \n",
" 8 \n",
" 8 \n",
" 8 \n",
" 8 \n",
" 8 \n",
" 8 \n",
" 8 \n",
" 8 \n",
" 8 \n",
" 8 \n",
" 8 \n",
" 8 \n",
" 8 \n",
" 8 \n",
" 8 \n",
" 8 \n",
" 8 \n",
" \n",
" \n",
" 2 \n",
" 0 \n",
" 189 \n",
" 189 \n",
" 189 \n",
" 189 \n",
" 189 \n",
" 189 \n",
" 189 \n",
" 189 \n",
" 189 \n",
" 189 \n",
" 189 \n",
" 189 \n",
" 189 \n",
" 189 \n",
" 189 \n",
" 189 \n",
" 189 \n",
" \n",
" \n",
" 1 \n",
" 287 \n",
" 287 \n",
" 287 \n",
" 287 \n",
" 287 \n",
" 287 \n",
" 287 \n",
" 287 \n",
" 287 \n",
" 287 \n",
" 287 \n",
" 287 \n",
" 287 \n",
" 287 \n",
" 287 \n",
" 287 \n",
" 287 \n",
" \n",
" \n",
" 2 \n",
" 163 \n",
" 163 \n",
" 163 \n",
" 163 \n",
" 163 \n",
" 163 \n",
" 163 \n",
" 163 \n",
" 163 \n",
" 163 \n",
" 163 \n",
" 163 \n",
" 163 \n",
" 163 \n",
" 163 \n",
" 163 \n",
" 163 \n",
" \n",
" \n",
" 3 \n",
" 42 \n",
" 42 \n",
" 42 \n",
" 42 \n",
" 42 \n",
" 42 \n",
" 42 \n",
" 42 \n",
" 42 \n",
" 42 \n",
" 42 \n",
" 42 \n",
" 42 \n",
" 42 \n",
" 42 \n",
" 42 \n",
" 42 \n",
" \n",
" \n",
" 4 \n",
" 2 \n",
" 2 \n",
" 2 \n",
" 2 \n",
" 2 \n",
" 2 \n",
" 2 \n",
" 2 \n",
" 2 \n",
" 2 \n",
" 2 \n",
" 2 \n",
" 2 \n",
" 2 \n",
" 2 \n",
" 2 \n",
" 2 \n",
" \n",
" \n",
"
\n",
"
"
],
"text/plain": [
" om yr mo dy date time state injuries \\\n",
"date_time EFscale \n",
"0 0 255 255 255 255 255 255 255 255 \n",
" 1 365 365 365 365 365 365 365 365 \n",
" 2 203 203 203 203 203 203 203 203 \n",
" 3 38 38 38 38 38 38 38 38 \n",
" 4 7 7 7 7 7 7 7 7 \n",
"1 0 206 206 206 206 206 206 206 206 \n",
" 1 355 355 355 355 355 355 355 355 \n",
" 2 163 163 163 163 163 163 163 163 \n",
" 3 34 34 34 34 34 34 34 34 \n",
" 4 8 8 8 8 8 8 8 8 \n",
"2 0 189 189 189 189 189 189 189 189 \n",
" 1 287 287 287 287 287 287 287 287 \n",
" 2 163 163 163 163 163 163 163 163 \n",
" 3 42 42 42 42 42 42 42 42 \n",
" 4 2 2 2 2 2 2 2 2 \n",
"\n",
" fatalities loss startlat startlon endlat endlon \\\n",
"date_time EFscale \n",
"0 0 255 255 255 255 255 255 \n",
" 1 365 365 365 365 365 365 \n",
" 2 203 203 203 203 203 203 \n",
" 3 38 38 38 38 38 38 \n",
" 4 7 7 7 7 7 7 \n",
"1 0 206 206 206 206 206 206 \n",
" 1 355 355 355 355 355 355 \n",
" 2 163 163 163 163 163 163 \n",
" 3 34 34 34 34 34 34 \n",
" 4 8 8 8 8 8 8 \n",
"2 0 189 189 189 189 189 189 \n",
" 1 287 287 287 287 287 287 \n",
" 2 163 163 163 163 163 163 \n",
" 3 42 42 42 42 42 42 \n",
" 4 2 2 2 2 2 2 \n",
"\n",
" lenghtmiles widthyards sg \n",
"date_time EFscale \n",
"0 0 255 255 255 \n",
" 1 365 365 365 \n",
" 2 203 203 203 \n",
" 3 38 38 38 \n",
" 4 7 7 7 \n",
"1 0 206 206 206 \n",
" 1 355 355 355 \n",
" 2 163 163 163 \n",
" 3 34 34 34 \n",
" 4 8 8 8 \n",
"2 0 189 189 189 \n",
" 1 287 287 287 \n",
" 2 163 163 163 \n",
" 3 42 42 42 \n",
" 4 2 2 2 "
]
},
"execution_count": 90,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"d.groupby(by=[d.index.hour,'EFscale']).count().head(15)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"let's extract one column of this dataframe - since I am using .count() all columns are identical, i'll pick om."
]
},
{
"cell_type": "code",
"execution_count": 91,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"date_time EFscale\n",
"0 0 255\n",
" 1 365\n",
" 2 203\n",
" 3 38\n",
" 4 7\n",
"1 0 206\n",
" 1 355\n",
" 2 163\n",
" 3 34\n",
" 4 8\n",
"Name: om, dtype: int64"
]
},
"execution_count": 91,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"dd1 = d.groupby(by=[d.index.hour,'EFscale'])['om'].count()#\n",
"dd1.head(10)"
]
},
{
"cell_type": "code",
"execution_count": 92,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"date_time EFscale\n",
"23 1 568\n",
" 2 223\n",
" 3 61\n",
" 4 13\n",
" 5 1\n",
"Name: om, dtype: int64"
]
},
"execution_count": 92,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"dd1.tail()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### .unstack() for multiple dimensions indexes\n",
"\n",
"### unstack Pivots a level of the (necessarily hierarchical) index labels, read the help online"
]
},
{
"cell_type": "code",
"execution_count": 93,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" EFscale \n",
" 0 \n",
" 1 \n",
" 2 \n",
" 3 \n",
" 4 \n",
" 5 \n",
" \n",
" \n",
" date_time \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" 0 \n",
" 255.0 \n",
" 365.0 \n",
" 203.0 \n",
" 38.0 \n",
" 7.0 \n",
" NaN \n",
" \n",
" \n",
" 1 \n",
" 206.0 \n",
" 355.0 \n",
" 163.0 \n",
" 34.0 \n",
" 8.0 \n",
" NaN \n",
" \n",
" \n",
" 2 \n",
" 189.0 \n",
" 287.0 \n",
" 163.0 \n",
" 42.0 \n",
" 2.0 \n",
" NaN \n",
" \n",
" \n",
" 3 \n",
" 179.0 \n",
" 248.0 \n",
" 156.0 \n",
" 35.0 \n",
" 4.0 \n",
" NaN \n",
" \n",
" \n",
" 4 \n",
" 193.0 \n",
" 272.0 \n",
" 126.0 \n",
" 30.0 \n",
" 3.0 \n",
" NaN \n",
" \n",
" \n",
" 5 \n",
" 182.0 \n",
" 290.0 \n",
" 137.0 \n",
" 24.0 \n",
" 4.0 \n",
" NaN \n",
" \n",
" \n",
" 6 \n",
" 230.0 \n",
" 268.0 \n",
" 138.0 \n",
" 29.0 \n",
" 4.0 \n",
" NaN \n",
" \n",
" \n",
" 7 \n",
" 275.0 \n",
" 292.0 \n",
" 128.0 \n",
" 21.0 \n",
" 2.0 \n",
" NaN \n",
" \n",
" \n",
" 8 \n",
" 332.0 \n",
" 288.0 \n",
" 107.0 \n",
" 31.0 \n",
" 1.0 \n",
" NaN \n",
" \n",
" \n",
" 9 \n",
" 421.0 \n",
" 352.0 \n",
" 148.0 \n",
" 27.0 \n",
" 3.0 \n",
" NaN \n",
" \n",
" \n",
" 10 \n",
" 521.0 \n",
" 402.0 \n",
" 121.0 \n",
" 38.0 \n",
" 5.0 \n",
" NaN \n",
" \n",
" \n",
" 11 \n",
" 776.0 \n",
" 531.0 \n",
" 204.0 \n",
" 58.0 \n",
" 9.0 \n",
" NaN \n",
" \n",
" \n",
" 12 \n",
" 1191.0 \n",
" 764.0 \n",
" 313.0 \n",
" 54.0 \n",
" 15.0 \n",
" NaN \n",
" \n",
" \n",
" 13 \n",
" 1640.0 \n",
" 1126.0 \n",
" 416.0 \n",
" 110.0 \n",
" 18.0 \n",
" 5.0 \n",
" \n",
" \n",
" 14 \n",
" 2279.0 \n",
" 1540.0 \n",
" 575.0 \n",
" 158.0 \n",
" 45.0 \n",
" 9.0 \n",
" \n",
" \n",
"
\n",
"
"
],
"text/plain": [
"EFscale 0 1 2 3 4 5\n",
"date_time \n",
"0 255.0 365.0 203.0 38.0 7.0 NaN\n",
"1 206.0 355.0 163.0 34.0 8.0 NaN\n",
"2 189.0 287.0 163.0 42.0 2.0 NaN\n",
"3 179.0 248.0 156.0 35.0 4.0 NaN\n",
"4 193.0 272.0 126.0 30.0 3.0 NaN\n",
"5 182.0 290.0 137.0 24.0 4.0 NaN\n",
"6 230.0 268.0 138.0 29.0 4.0 NaN\n",
"7 275.0 292.0 128.0 21.0 2.0 NaN\n",
"8 332.0 288.0 107.0 31.0 1.0 NaN\n",
"9 421.0 352.0 148.0 27.0 3.0 NaN\n",
"10 521.0 402.0 121.0 38.0 5.0 NaN\n",
"11 776.0 531.0 204.0 58.0 9.0 NaN\n",
"12 1191.0 764.0 313.0 54.0 15.0 NaN\n",
"13 1640.0 1126.0 416.0 110.0 18.0 5.0\n",
"14 2279.0 1540.0 575.0 158.0 45.0 9.0"
]
},
"execution_count": 93,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"dd2 = dd1.unstack()\n",
"dd2.head(15)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"now I can do some nice plotting"
]
},
{
"cell_type": "code",
"execution_count": 94,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
""
]
},
"execution_count": 94,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"dd2.plot(kind='bar',stacked=True)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### let's normalize between 0 and 1"
]
},
{
"cell_type": "code",
"execution_count": 95,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" EFscale \n",
" 0 \n",
" 1 \n",
" 2 \n",
" 3 \n",
" 4 \n",
" 5 \n",
" \n",
" \n",
" date_time \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" 0 \n",
" 0.293779 \n",
" 0.420507 \n",
" 0.233871 \n",
" 0.043779 \n",
" 0.008065 \n",
" NaN \n",
" \n",
" \n",
" 1 \n",
" 0.268930 \n",
" 0.463446 \n",
" 0.212794 \n",
" 0.044386 \n",
" 0.010444 \n",
" NaN \n",
" \n",
" \n",
" 2 \n",
" 0.276720 \n",
" 0.420205 \n",
" 0.238653 \n",
" 0.061493 \n",
" 0.002928 \n",
" NaN \n",
" \n",
" \n",
" 3 \n",
" 0.287781 \n",
" 0.398714 \n",
" 0.250804 \n",
" 0.056270 \n",
" 0.006431 \n",
" NaN \n",
" \n",
" \n",
" 4 \n",
" 0.309295 \n",
" 0.435897 \n",
" 0.201923 \n",
" 0.048077 \n",
" 0.004808 \n",
" NaN \n",
" \n",
" \n",
"
\n",
"
"
],
"text/plain": [
"EFscale 0 1 2 3 4 5\n",
"date_time \n",
"0 0.293779 0.420507 0.233871 0.043779 0.008065 NaN\n",
"1 0.268930 0.463446 0.212794 0.044386 0.010444 NaN\n",
"2 0.276720 0.420205 0.238653 0.061493 0.002928 NaN\n",
"3 0.287781 0.398714 0.250804 0.056270 0.006431 NaN\n",
"4 0.309295 0.435897 0.201923 0.048077 0.004808 NaN"
]
},
"execution_count": 95,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"dd3 = dd2.mul(1./d.groupby(by=[d.index.hour])['om'].count(), axis=0)\n",
"dd3.head()"
]
},
{
"cell_type": "code",
"execution_count": 96,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
""
]
},
"execution_count": 96,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAXcAAAENCAYAAAD0eSVZAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMi4yLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvhp/UCwAAHa1JREFUeJzt3XmYVOW17/HvahoUBUUFFGiwRVExTEI3Jo4dlEHNRQ1GQY0aB548R9Fo4hVucjR64hDP9USPMSREPUSigppc5SKCEOSag1OjjIJGhFZaHNAIogJCs+4fe4NFUVMX1V21N7/P8+ynaw9r71XVVWu/9daut8zdERGReCkrdgIiIlJ4Ku4iIjGk4i4iEkMq7iIiMaTiLiISQyruIiIxpOIuIhJDKu4iIjGk4i4iEkPlxTpw+/btvbKysliHFxGJpNdee+0Td++QbbuiFffKykrmz59frMOLiESSmb2by3bqlhERiSEVdxGRGFJxFxGJIRV3EZEYUnEXEYmhrMXdzB4ys4/NbGma9WZm/2lmK8xssZn1L3yaIiLSGLm03CcCwzKsPx3oEU6jgfG7n5aIiOyOrMXd3V8A/plhk7OAhz3wMtDOzDoVKkEREWm8QnyJqQuwOmG+Plz2QfKGZjaaoHVPt27ddlp3/4/npD3AVb8flHZdurh8YhSXX9zyo3umXdfzzeUFP57iFFfMuFLKMZNCFHdLsSzlr267+wRgAkBVVVXRfpl70NyrMqxNX4wUV1hRuX9ReTxFEhWiuNcDXRPmK4A1jd1J4V9AevFINEXlJNvcSufkHI2GQCGK+1TgajObDBwHrHf3XbpkRKRpReWkEJWTSdRlLe5m9hhQA7Q3s3rgZqAlgLv/HpgOnAGsAL4CftRUyYqISG6yFnd3H5VlvQOZTsUiItLMijbkr0hUnDcu/ctkSTPmIdIYKu6yQ3MXMRVNkaaj4i6RE5WTQlTylHhScS9hUSkOylOk9Ki4x5CKWLTl+/9r7jjZVSk9liVT3Av9xCylJ2Up/cNFZM9QMsVdRKIlKu8wotC4aooc98jiHucniYgURhR6BTLRLzGJiMSQiruISAypuIuIxJCKu4hIDKm4i4jEkIq7iEgMqbiLiMSQiruISAypuIuIxJCKu4hIDKm4i4jEkIq7iEgMqbiLiMSQiruISAypuIuIxJCKu4hIDKm4i4jE0B75S0wSbUtWvVfsFERKnlruIiIxpOIuIhJD6pYRySLfbiB1H0kxqbiLlBidFKQQVNxlj6GiKXsSFXeRPZxOevGUU3E3s2HAvUAL4AF3vzNpfTfgT0C7cJux7j69wLlKiVJxKA36P0iirMXdzFoA9wODgXqg1symuvuyhM1+ATzu7uPN7BhgOlDZBPlKjKgYiTSdXFruA4EV7r4SwMwmA2cBicXdgf3C2/sDawqZpIiUnuY+Oasx0Di5XOfeBVidMF8fLkv0S+AiM6snaLWPSbUjMxttZvPNbP7atWvzSFdERHKRS8vdUizzpPlRwER3v9vMvgNMMrNe7r5tpyD3CcAEgKqqquR9iMgeQC3w5pFLy70e6JowX8Gu3S6XA48DuPtLwN5A+0IkKCIijZdLy70W6GFmhwHvAyOBC5K2eQ84FZhoZj0Jirv6XSJGLSqR+Mha3N19q5ldDcwkuMzxIXd/w8xuBea7+1Tgp8Afzew6gi6bS91d3S4iUnR7aqMlp+vcw2vWpyctuynh9jLghMKmJiIi+dKokCIiMaThB0REiqwpuo5U3EVEUsin4JZS/766ZUREYkjFXUQkhlTcRURiSH3uzUADLIlIc1NxL2Eq0iKSr8gXdxVAEZFdqc9dRCSGVNxFRGJIxV1EJIZKps9dfeciIoWjlruISAypuIuIxJCKu4hIDJVMn3tzUv++iMSdWu4iIjG0R7bc86UWv4hEhVruIiIxpOIuIhJDKu4iIjGk4i4iEkMq7iIiMaTiLiISQyruIiIxpOIuIhJDKu4iIjGk4i4iEkMq7iIiMaTiLiISQyruIiIxpOIuIhJDORV3MxtmZm+Z2QozG5tmm/PMbJmZvWFmjxY2TRERaYys47mbWQvgfmAwUA/UmtlUd1+WsE0PYBxwgrt/ZmYdmyphERHJLpeW+0BghbuvdPevgcnAWUnbXAnc7+6fAbj7x4VNU0REGiOX4t4FWJ0wXx8uS3QkcKSZzTOzl81sWKodmdloM5tvZvPXrl2bX8YiIpJVLsXdUizzpPlyoAdQA4wCHjCzdrsEuU9w9yp3r+rQoUNjcxURkRzlUtzrga4J8xXAmhTbPO3uW9x9FfAWQbEXEZEiyKW41wI9zOwwM2sFjASmJm3zFPBdADNrT9BNs7KQiYqISO6yFnd33wpcDcwElgOPu/sbZnarmQ0PN5sJfGpmy4DngRvc/dOmSlpERDLLeikkgLtPB6YnLbsp4bYD14eTiIgUmb6hKiISQyruIiIxpOIuIhJDKu4iIjGk4i4iEkM5XS3TXLa0akd9/xvZtH93dvpi7PLl6YOGPp56eT4xjY5z9l6/korXf03L9FEiIs2upIp7ff8badu9isp9yzFLKO6de6YPWrMp9fJ8YhoZ5+58+uWB1HMjh6WPEhFpdiXVLbNp/+4clFzYS5iZcdC+5eE7DRGR0lFSxR0sMoV9uyDfaOUsIvFXYsVdREQKoeSLe4uuVfTr12/HdOeddwJQU1PDUUcdRb/BI+k3eCRPTptdkOPV1dXRq1evguxLRKRYSuoD1VRa770XCxcuTLnukUceoapzi2bOSESk9JV8y70xvvxqI2f+8Br6nnY+vXr1YsqUKQDU1tZy/PHH07dvXwYOHMiGL76kbvUaTjrnMvoPvYD+Qy/gxdpFu+yvoaGBG264gerqavr06cMfJj3Z3HdJRCQvJd9y37hpM/369dsxP27cOM4//3wALrzwQlqH9+BvU37P3Jdeo/MhHXhm0n9C52NZv349X3/9Neeffz5Tpkyhurqazz//nNbr3qJj+wOY9dh49t57L95e+R6jrhrH/Gcf2enYDz74IPvvvz+1tbVs3ryZEwYey5BTvsNh3ZJ/ZVDirHLTo2nX1TVfGk0m7vdvT1Xyxb0x3TK9jz6Cn/3bb7jxtnv53sjLOemkk1iyZAmdOnWiuroagP322w++KOfLrzZy9c9/zcJl/6BFWRn/WPneLvt/7rnnWLx4MU8+GbTY13+2nrdXvafiLiIlr+SLe2McefihvPbsI0yf89+MGzeOIUOGcPbZZ6e8vPI3f3yEgzscxKJZk9m2bRt7d//OLtu4O/fddx9Dhw4NFqxZ0NR3QSRvzd0Cz/d4eqfQPGJV3Nd8uJYD2+3HRSPOpE3XXkycOJGxY8eyZs0aamtrqa6uZsOGDbTeupX1n39BRaeDKSsr409P/F8aGhp22d/QoUMZP348gwYNomXLlvzjnXfp0qkj++7Tugj3TnaXil+06XFpnJIv7sl97sOGDdtxOWSyJW++zQ2/uocyK6PlPvsxfvx4WrVqxZQpUxgzZgwbN26kdevWzJ50N/9yyXmMGP0znpg2i++eUJ2yYF9xxRXU1dXRv39/3J0O+7XmqYfubrL7KiJSKCVf3BtWz4fOx+6yfO7cucGNhK6SoTXHM7Tm+GAmIaa6upqXX375m+A1C+jRvRuLZ38zENgd48YAUFlZydKlSwEoKyvj9ttv5/bbb9/lWCIipazki7tIMr09F8kuVte5i4hIQMVdRCSGVNxFRGJIxV1EJIZU3EVEYigSV8tUjn0mj6g1adfUXdM5a/SMGTO49tpraWho4IorrmDs2LF55CAixbanXl0VieLe3BoaGrjqqquYNWsWFRUVVFdXM3z4cI5pV+zM4mVPfdGJNAd1y6Tw6quvcsQRR9C9e3datWrFyJEjefrpp4udlohIztRyT+H999+na9euO+YrKip45ZVXiphRaVMLXKT0qOWegrvvsixqP9wtIns2FfcUKioqWL169Y75+vp6OnfO/iGsiEipUHFPobq6mrfffptVq1bx9ddfM3nyZIYPH17stEREcpZTn7uZDQPuBVoAD7h7yjF3zexc4Amg2t3nFyrJujvPTL8y3UiNKUaSzBoTKi8v57e//S1Dhw6loaGByy67jG9961saFVJkD5Lus6S65k0jb1mLu5m1AO4HBgP1QK2ZTXX3ZUnbtQWuAWLxyeMZZ5zBGWecUew0RETykku3zEBghbuvdPevgcnAWSm2+zfgLmBTAfMTEZE85FLcuwCrE+brw2U7mNmxQFd3n5ZpR2Y22szmm9n8tWvXNjpZERHJTS7FPdU1gDuuFTSzMuA3wE+z7cjdJ7h7lbtXdejQIfcsRUSkUXIp7vVA14T5CnYeuKUt0AuYa2Z1wLeBqWZWVagkRUSkcXIp7rVADzM7zMxaASOBqdtXuvt6d2/v7pXuXgm8DAwv5NUyIiLSOFmvlnH3rWZ2NTCT4FLIh9z9DTO7FZjv7lMz70GiQsMIiOyeUnoN5XSdu7tPB6YnLbspzbY1u59Wkl/uX9j9jZ6bdZPLLruMadOm0bFjR5YuXVrY44uINDF9QzWNSy+9lBkzZhQ7DRGRvKi4p3HyySdz4IEHFjsNEZG8qLiLiMSQiruISAypuIuIxJCKu4hIDEXjZ/Z+uT79uiYY8hdg1KhRzJ07l08++YSKigpuueUWLj+9f9a4UlBK19qKSHFEo7gXwWOPPbbrQo3nLiIRoW4ZEZEYUnEXEYkhdcuIiBRZU3xOppa7iEgMqbiLiMSQumWagS5NFJHmFoni3vtPvQu6vyWDH866zerVq7n44ov58MMPKSsrY/To0Vz7g5MLmoeISFOJRHEvhvLycu6++2769+/Phg0bGDBgAIP7VnDMkd2LnZqISFYlU9wrNz3KH70DW7YdVuxUAOjUqROdOnUCoG3btvTs2ZP3P/xYxV1EIkEfqOagrq6OBQsWcNyxvYqdiohITkqm5V6qvvjiC0aMGME999xD3b69Yduu23zkTs8mOLY+iBWRfKnlnsGWLVsYMWIEF154Id///veLnY6ISM72yJb74gz9+n3Cv+7O5ZdfTs+ePbn++uubJzERkQKJRHFfcsmStOsW169LubxPRbtGxySaN28ekyZNonfv3vTr1w+AK6//X5w0aEjWWBGRYotEcS+GE088EXffaVkuJwURkVKgPncRkRhScRcRiSEVdxGRGFJxFxGJIRV3EZEYUnEXEYmhSFwKufzo9F/ub5kuJtMOZ7+U9ZibNm3i5JNPZvPmzWzdupVzzz2XEVdelzVORKQURKK4F8Nee+3FnDlzaNOmDVu2bOHEE0+kx4AT6dO/utipiYhkpW6ZNMyMNm3aAMEYM1u2bAGzImclIpIbFfcMGhoa6NevHx07dmTw4MH0Obaq2CmJiOQkp+JuZsPM7C0zW2FmY1Osv97MlpnZYjP7m5kdWvhUm1+LFi1YuHAh9fX1vPrqq7z95rJipyQikpOsxd3MWgD3A6cDxwCjzOyYpM0WAFXu3gd4Erir0IkWU7t27aipqeHFuX8rdioiIjnJpeU+EFjh7ivd/WtgMnBW4gbu/ry7fxXOvgxUFDbN5rd27VrWrQsGCtu4cSOzZ8+m8ogeRc5KRCQ3uVwt0wVYnTBfDxyXYfvLgWdTrTCz0cBogG7duuWYIvR8M/2FjU015O8HH3zAJZdcQkNDA9u2beO8887jlNOGZU9WRKQE5FLcU10i4imWYWYXAVXAKanWu/sEYAJAVVVVyn2Uij59+rBgwYKdlmnIXxGJilyKez3QNWG+AliTvJGZnQb8HDjF3TcXJj0REclHLn3utUAPMzvMzFoBI4GpiRuY2bHAH4Dh7v5x4dMUEZHGyFrc3X0rcDUwk+Bb/Y+7+xtmdquZDQ83+3egDfCEmS00s6lpdiciIs0gp+EH3H06MD1p2U0Jt08rcF4iIrIb9A1VEZEYUnEXEYmhSIwKef+P5zQ65u8Z1p30i/457aOhoYGqqiq6dOnCtGnTGp2DiEixqOWewb333kvPnunHkhcRKVUq7mnU19fzzDPPcMUVVxQ7FRGRRlNxT+MnP/kJd911F2VleohEJHpUuVKYNm0aHTt2ZMCAAcVORUQkLyruKcybN4+pU6dSWVnJyJEjmTNnDhdddFGx0xIRyZmKewp33HEH9fX11NXVMXnyZAYNGsSf//znYqclIpKzSFwKedXvB6Vd11RD/oqIRFkkinsx1dTUUFNTU+w0REQaRd0yIiIxpOIuIhJDKu4iIjGk4i4iEkMq7iIiMaTiLiISQ5G4FPLu87/X6JhZGdYNvju3LyRVVlbStm1bWrRoQXl5OQ89NbvReYiIFEMkinsxPf/887Rv3x7Ql59EJDrULSMiEkMq7hmYGUOGDGHAgAFMmDCh2OmIiORM3TIZzJs3j86dO/Pxxx8zePBgWh7YhQHfPqHYaYmIZKWWewadO3cGoGPHjpxzzjksXfh6kTMSEcmNinsaX375JRs2bNhx+7nnnuOIo/R7qiISDZHolvnplGlp1zXVkL8fffQR55xzDgBbt27lggsu4ITvnpY1TkSkFESiuBdD9+7dWbRo0U7LdCmkiESFumVERGJIxV1EJIZKqrg7jrsXO41GcXecaOUsIvFXUsX93XVb2PrV55Ep8O7O1q8+5911W4qdiojITkrqA9X7XvmMMcCh7T7BsB3Ll29onTbmo882plyeT0xj4xzn3XVbuO+Vz7jyjLRhIiLNrqSK++ebt3HbC5/usrzuzjPTxpw+9pmUy/OJ2Z04EZFSklO3jJkNM7O3zGyFmY1NsX4vM5sSrn/FzCoLnaiIiOQua3E3sxbA/cDpwDHAKDM7Jmmzy4HP3P0I4DfArwudqIiI5C6XlvtAYIW7r3T3r4HJwFlJ25wF/Cm8/SRwqpkZIiJSFJbtyhQzOxcY5u5XhPM/BI5z96sTtlkablMfzr8TbvNJ0r5GA6PD2aOAt9Ictj3wSZp1mShOcU0dF4UcFRfvuEPdvUPWPbh7xgn4AfBAwvwPgfuStnkDqEiYfwc4KNu+MxxzvuIUV4pxUchRcXtuXOKUS7dMPdA1Yb4CWJNuGzMrB/YH/pnDvkVEpAnkUtxrgR5mdpiZtQJGAlOTtpkKXBLePheY4+HpR0REml/W69zdfauZXQ3MBFoAD7n7G2Z2K8Fbh6nAg8AkM1tB0GIfuZt55fubdopTXFPHRSFHxe25cTtk/UBVRESip6TGlhERkcJQcRcRiSEVdxGRGCqJgcPM7GiCb7l2AZzgUsup7r68qIklMbOBgLt7bTgEwzDgTXef3oh9POzuFzdZks0o4eqpNe4+28wuAI4HlgMT3F1jIYsUSdE/UDWzG4FRBMMa1IeLKwiKxmR3v7MJjnk0wYnkFXf/ImH5MHefkSbmZoLxdcqBWcBxwFzgNGCmu9+WIib5klEDvgvMAXD34Y3I+USCoSCWuvtzabY5Dlju7p+bWWtgLNAfWAbc7u7rM+z/GuD/uPvqRuT0CMHjsQ+wDmgD/BU4leC5dUmG2MOBcwi+H7EVeBt4LFOOItIIu/stqN2dgH8ALVMsbwW8nec+f5Rh3TUEwx48BdQBZyWsez1D3BKCS0H3AT4H9guXtwYWp4l5HfgzUAOcEv79ILx9Spb78GrC7SuBhcDNwDxgbJqYN4Dy8PYE4B7gxDDur1mOt57gHdPfgX8BOuTwOC8O/5YDHwEtwnlL95gk/A9mAb8AXgR+B9xGcBKqKfZzspQmoGMzHy/vb5aX2kTwZco7gTeBT8NpebisXZ77fDbDuv2AO4BJwAVJ636XIe4QYDzBAI0HAb8M683jQKe8738J/APeJBgrIXn5ocBbee7zvQzrlgBtwtuVwHzg2nB+QYa4Baluh/ML08SUAdeFhaxfuGxljvch8Xi124stsC+wJE3M8oTbr+eSY+LxwnyHEHxvYS0wg+DLaW3TxCwlOAkfAGwADgyX752YS5r/wfYTwT7A3PB2t0z/g3Cb2L5ggQOTpoMIGiAHbH9s08QNS3p8HgQWA48CB2eIuxNoH96uAlYCK4B3ydD4IGi0/AI4vJGPcxXwPEGDp2v4ulgfPr+PzRDXBriVoPGyPnxuvgxcmuV4M4EbgUOS/i83ArMyxPVPMw0APsgQ95fwMT2b4IudfwH2SvV6TIqbAYwheKe9OMyvW7js6Xye0+6lUdyHhU+oZwlamxPCO7si8UmbIm5xmmkJsDlD3LIUT5wZwH+QoQACrwD7hLfLEpbvn+kfF25TATwB/JYMJ56kmEXhi/ogksaZIE0BDI/xo/D2fwFV4e0jgdosx0s+GbQEhgOPAWvTxFwXFoR3CVrjfwP+GP4Pbs5wrCUJT/oDgNcS1i3NkmdsX7DANmBV0rQl/Ju2UZCYB/AA8CuCxtF1wFOZ/g8Jt58HqhOeL2nHNgnz+d/Ae8Cr4XE65/CcfpWga3MUsBo4N1x+KvBShringUvD19H1wL8CPQhGor09Q1zaxmGWdQ0EXafPp5g2ZohbmDT/c4J32gdlea4kNuTey7TPxkx5BRV6ImgxfhsYQTB8wbcJW3YZYj4C+oVP4sSpkuADvnRxcwhb0QnLyoGHgYYMcXulWd4e6J3j/Twz05Mxads6gsK5Kvx7SLi8Tbp/OMGJZiLBwG2vhIVhJfD/gL5ZjpfpXUvrDOs6b39hA+3C/9/ALMe6lqDgTSBogW8/IXUAXsgSG9sXLPAzgpNC74Rlq3J4rryeId9MDZY3+aYb7+WkdSnfHaY43kkE3Wofho/l6Dwfk0zPv0VJ87Xh3zKCCxrSxT0H/E8S3r0ABxOcaGdniFsK9EizbnWGuOUkNPzCZZcQvON4N5f7B/wq1/9D1udFvoHFngjeep6YZt2jGeIqSGj1Ja07odj3K4f7vQ9wWJZt2gJ9CVqlad+WJ8Uc2cz341vhieDoRsbF+gXLN+/y/iP8P2btxiO4EOF64KcEJ3NLWJfps48x4eM5iKDb6B7gZOAWYFKGuF1OagSfRw0D/itD3EsE3X4/IHi3d3a4/BQyv1N4cftrHfgfBBcwbF+X6YR+AMEPB70JfEYwNMrycFmmbq5zgaPSrDs7Q9xdwGkplg8jw+eHBF1ObVIsPwJ4MpfXRcr95huoSVMxpqQX7D+TXrAHZIiL1As2LGIvAx/msO3NSdP2z2cOAR7OElsDTCH4zGUJMJ3gNxfKM8RMzvN/15egW+1Z4GjgXoKrrN4Ajs8Q14egS2cd8N+EDRGCd3rXZDnm0QRXtLVJWp62yzch7tQCxp3eFMfLuM98AzVpKrWJDFdJRTGO4EqsXqWcYynHkf+VcfnGjWnOuKyPTb6BmjSV2kSOH1ZHMS4KOZZaHPlfGReJuGxTSXxDVSRXZrY43SqCvvfIxkUhxyjFEVyU8QWAu9eZWQ3wpJkdGsZGPS4jFXeJmoOBoQQfkCUygg/eohwXhRyjFPehmfVz94UA7v6FmX0PeAjoHYO4jFTcJWqmEbyFXZi8wszmRjwuCjlGKe5igqEtdnD3rcDFZvaHGMRlVPSxZUREpPA05K+ISAypuIuIxJCKu4hIDKm4S+SZ2S/N7GcZ1p8d/rhKPvveKdbMbjWz0/LZl0hzUnGXPcHZQF7FPTnW3W9y99kFyUqkCam4SySZ2c/N7C0zmw0cFS670sxqzWyRmf3FzPYxs+MJhi7+dzNbaGaHh9MMM3vNzP4e/jJXqmOkip1oZueG6+vM7HYze8nM5ptZfzObaWbvmNmPE/ZzQ5jXYjO7pckfHBFU3CWCzGwAwc8wHgt8H6gOV/3V3avdvS/BYGKXu/uLBOOw3+Du/dz9HYKhhse4+wCCYXZ/l+o4aWKTrXb37xD8gtVEvhmy+tYw1yEEY48PJBiieoCZnby7j4FINvoSk0TRSQS/9/oV7PRbtb3M7FcE48q3IRiBcCdm1obgR7yfMNvxze69diOX7cfePj7IBmCDmW0ys3YEQ9wOIRh1kTCvHsALu3FMkaxU3CWqUn37biLB8L2LzOxSguFsk5UB69y9X4Hy2Bz+3ZZwe/t8OcFX5O9w97y/aSiSD3XLSBS9AJxjZq3NrC3B2OcQ/LjFB2bWErgwYfsN4Trc/XNglZn9AMACfTMca0dsnmYCl4XvGDCzLmbWcTf2J5ITFXeJHHd/neAHJhYS/Kbp38NV/0rw84KzCH7MY7vJwA1mtsDMDico/Jeb2SKCH4o4K8PhkmMbm+tzBD9U/ZKZLQGeZPdOFiI50dgyIiIxpJa7iEgM6QNVEYLr5gl+uDnRE+5+WzHyEdld6pYREYkhdcuIiMSQiruISAypuIuIxJCKu4hIDP1/K4BCGxS0fCwAAAAASUVORK5CYII=\n",
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"dd3.plot(kind='bar', stacked=True)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### and once again the same analysis but for month of the year"
]
},
{
"cell_type": "code",
"execution_count": 97,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
""
]
},
"execution_count": 97,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"fig, ax = plt.subplots()\n",
"d.groupby(d.index.month)['EFscale'].count().plot(kind='line', ax=ax, marker='o')"
]
},
{
"cell_type": "code",
"execution_count": 98,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
""
]
},
"execution_count": 98,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"fig, ax = plt.subplots(figsize=(18,3))\n",
"d.groupby(d.index.year)['EFscale'].count().plot(kind='line', ax=ax, marker='o')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### once again, you can also create an object and use matplotlib syntax to plot it."
]
},
{
"cell_type": "code",
"execution_count": 100,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"[]"
]
},
"execution_count": 100,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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lGZk9tJtlW4mAZyD55fvClGNpClSdxcREREREWkojT9lgYSU+u5LTam7i4iIiIiINAS1eGhlYqMj/Jar776IiIiIiIgEgxIPrciG9FzyCoqxk2bJVN99ERERERERCRYlHlqJ/UcK+I/5q+jZMYqHp49U330RERERERFpFBrjoRXILyrl5vnJ5BWU8NZtP2B4747MnNQ/1NUSERERERGRVkCJhxbOOcesN9exISOXuTMTGd67Y6irJCIiIiIiIq2Iulq0cE8vS2Xx+kzuSzqNqSN6hro6IiIiIiIi0soo8dCCvbc+k798vJ0Z4+K59dyBoa6OiIiIiIiItEJKPLRQG9JzueefaxnfrzOPzxiNnTyVhYiIiIiIiEgjUOKhBSqfwaJrTFuenzmetm3CQ10lERERERERaaU0uGQLc/IMFt3atw11lURERERERKQVU+KhBak4g8Xz147XDBYiIiIiIiIScko8NAEL12Qwe+k29ubkExcbxaykYVw6Nr7W5ymfweL+C09j2sheQaipiIiIiIiISO3UeYwHM+trZp+a2RYz22Rmd3rlvzezDDNb6y0XVzjmQTNLNbNtZpbUEB+guVu4JoMHF2wgIycfB2Tk5PPggg0sXJNRq/NoBgsRERERERFpiurT4qEEuMc5962ZdQBWm9lH3ra/OOeeqLizmY0ArgRGAnHAx2Y21DlXWo86NHuzl24lv7jyjyC/uJSH393E4B7t6dslmk5REX6PrdhSwgH9ukTx2GWawUJERERERESajjonHpxzmUCmt55nZluA6voHTAdec84VArvMLBWYAKysax2as0PHinh7TQYZOQX+tx8v5kfPfAlAp6gIErpEk9Almr7e655Dx3lxxS4KS8pOHLP/SCFLNu6rUzcNERERERERkWBokDEezKw/MBb4BpgM/JeZXQck42sVcRhfUuLrCoelEyBRYWa/AH4BkJCQ0BBVbBLKyhxf7TjIa6u+48NN+ykqLSMi3CgudVX27dGhLQ9PH8WeQ8f5zlu2ZB7hw837/O4PUFBSxuyl25R4EBERERERkSaj3okHM2sPvAXc5Zw7YmbPAo8Aznv9M3AT4K/9v987aOfcXGAuQGJiov+77CYo0CCRmbn5vJmczuvJe0g/nE9sdATXTErgZ2f2ZWtmHg8u2FCpu0VURDi/vng4F46qOkBkaZlj/5ECJv/h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\n",
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"tempd = d.groupby(d.index.year)['EFscale'].count()\n",
"\n",
"fig, ax = plt.subplots(figsize=(18,3))\n",
"ax.plot(tempd,'o-')"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"tempd.head()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# What else can i do on these groups?"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"groupbyobject = d.groupby('EFscale')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Iterate on groups\n",
"\n",
"python knows how to handle the group within a for loop, and understands what to iterate within.\n",
"I have my \"groupbyobject\" and the first quantity is name (the name of the group, based on the category of your grouping rule) and then the actual group of values."
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"for name, group in groupbyobject: \n",
" # print the name of the group\n",
" print(name)\n",
" # print the data of that group\n",
" print(group.head(3))\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"for name, group in groupbyobject: \n",
" # let's plot the values\n",
" group.plot.hexbin('startlon', 'startlat', cmap='viridis')\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Use your own function with .apply()"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"def get_stats(group):\n",
" return {'min': group.min(), 'max': group.max(), 'count': group.count(), 'mean': group.mean()}"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"d['lenghtmiles'].groupby(d['EFscale']).apply(get_stats).unstack()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# .resample()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### what if I want the time series on a different time resolution, 1 month? 1 hour?"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"d.resample?"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"fig, ax = plt.subplots(figsize=(20,3))\n",
"d.resample('1m')['om'].count().plot()\n",
"d.resample('1M')['om'].count().plot()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"check the options for .resample. MS is for month start, and it automatically use the first day of the month. "
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"d.resample('1MS')['om'].count().head()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"M is for month, and it uses the end. "
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"d.resample('1M')['om'].count().head()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"the two series seem to be different only in the index"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"np.sum(d.resample('1MS')['om'].count().reset_index()-d.resample('1M')['om'].count().reset_index())['om']"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"np.sum(d.resample('1MS')['om'].mean().reset_index()-d.resample('1M')['om'].mean().reset_index())['om']"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"However, it's always important to check \"by hand\" what you are actually doing, to make sure it is exactly what you want.\n",
"\n",
"Q is for quaterly (three months), but Q uses the end of the month, QS the start of the month. And then you can indicate the starting month (for example for a DJF MAM JJA SON quaterly resampling you want QS-DEC)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"fig, ax = plt.subplots(figsize=(20,3))\n",
"d.resample('1QS')['om'].count().plot()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"please note the different index and in this case, the values don't change because a day of difference doesn't change things"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"d.resample('1QS')['EFscale'].mean().head()"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"d.resample('1Q')['EFscale'].mean().head()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Starting from december adds an extra year/month preceeding your database (my database start in Jan 1950). But only for the indexing. it does not fill it with values or the average, so you want to discard that"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"d.resample('1QS-DEC')['om'].count().head()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"let's check - actually note that in this case the interval is inclusive of the last value :) "
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"d['1950-03-01':'1950-05-31'].om"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"d['1950-03-01':'1950-05-31']['om'].count()\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"d['1949-12-01':'1950-02-28']['om'].count()"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"d.resample('1Q-DEC')['om'].count().head()"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"d['1949-12-31':'1950-03-31']['om'].count()"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"d['1950-03-31':'1950-06-30']['om'].count()\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"so to avoid misunderstanding, always check!"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### let's get daily values\n",
"my first tornado is on january 3rd, so the time index will start on that dayte"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"ddaily = d.resample('1D').count()\n",
"print(ddaily.om.head())\n",
"print(ddaily.om[0:45].count())"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"ddaily.head(15)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# .rolling() \n",
"## allows you to do a rolling mean. however you specify the window of your moving operation. Therefore your data needs to be already on some type of gridded time frame (or maybe not! it depends on your data of course).\n",
"\n",
"in my case I want a 3day rolling sum, therefore I first transform my data in daily valyes, and then I apply .rolling with 3 as a window."
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"ddaily.rolling(3).om.sum().head(5)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### what about an odd time window -> pd.Grouper (which is what resample does under the hood)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"ddaily.groupby(pd.Grouper(freq='45D'))['om'].sum()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Useful list of commands\n",
"# https://www.dataquest.io/blog/pandas-cheat-sheet/"
]
}
],
"metadata": {
"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.5"
}
},
"nbformat": 4,
"nbformat_minor": 2
}