{"cells":[{"attachments":{},"cell_type":"markdown","metadata":{"cell_id":"00000-9c96fc7c-eaba-433b-bf8d-7044f600854b","deepnote_cell_type":"markdown"},"source":["# Pandas - Introduction\n","\n","This notebook explans how to use the `pandas` library for analysis of tabular data."]},{"cell_type":"code","execution_count":1,"metadata":{"cell_id":"00001-5b6f28ed-c26f-468f-b0a4-9e0c93cbc187","deepnote_cell_type":"code","deepnote_to_be_reexecuted":false,"execution_millis":0,"execution_start":1611579348294,"source_hash":"dbbf1542"},"outputs":[],"source":["# Start using pandas (default import convention)\n","import pandas as pd\n","import numpy as np"]},{"cell_type":"code","execution_count":2,"metadata":{"cell_id":"00002-f8d6b212-25bf-4955-b5d6-a559c86af20b","deepnote_cell_type":"code","deepnote_to_be_reexecuted":false,"execution_millis":5,"execution_start":1611579350193,"scrolled":true,"source_hash":"a1d46cae"},"outputs":[{"name":"stdout","output_type":"stream","text":["\n","pandas - a powerful data analysis and manipulation library for Python\n","=====================================================================\n","\n","**pandas** is a Python package providing fast, flexible, and expressive data\n","structures designed to make working with \"relational\" or \"labeled\" data both\n","easy and intuitive. It aims to be the fundamental high-level building block for\n","doing practical, **real world** data analysis in Python. Additionally, it has\n","the broader goal of becoming **the most powerful and flexible open source data\n","analysis / manipulation tool available in any language**. It is already well on\n","its way toward this goal.\n","\n","Main Features\n","-------------\n","Here are just a few of the things that pandas does well:\n","\n"," - Easy handling of missing data in floating point as well as non-floating\n"," point data.\n"," - Size mutability: columns can be inserted and deleted from DataFrame and\n"," higher dimensional objects\n"," - Automatic and explicit data alignment: objects can be explicitly aligned\n"," to a set of labels, or the user can simply ignore the labels and let\n"," `Series`, `DataFrame`, etc. automatically align the data for you in\n"," computations.\n"," - Powerful, flexible group by functionality to perform split-apply-combine\n"," operations on data sets, for both aggregating and transforming data.\n"," - Make it easy to convert ragged, differently-indexed data in other Python\n"," and NumPy data structures into DataFrame objects.\n"," - Intelligent label-based slicing, fancy indexing, and subsetting of large\n"," data sets.\n"," - Intuitive merging and joining data sets.\n"," - Flexible reshaping and pivoting of data sets.\n"," - Hierarchical labeling of axes (possible to have multiple labels per tick).\n"," - Robust IO tools for loading data from flat files (CSV and delimited),\n"," Excel files, databases, and saving/loading data from the ultrafast HDF5\n"," format.\n"," - Time series-specific functionality: date range generation and frequency\n"," conversion, moving window statistics, date shifting and lagging.\n","\n"]}],"source":["# Let pandas speak for themselves\n","print(pd.__doc__)"]},{"cell_type":"markdown","metadata":{"cell_id":"00003-3ee27f5c-4aef-4dc3-8653-c90b1146e494","deepnote_cell_type":"markdown"},"source":["Visit the official website for a nicely written documentation: https://pandas.pydata.org"]},{"cell_type":"code","execution_count":3,"metadata":{"cell_id":"00004-d90c37d8-7234-413e-a89c-f8a34d58e39d","deepnote_cell_type":"code","deepnote_to_be_reexecuted":false,"execution_millis":0,"execution_start":1611579356214,"source_hash":"30ba3d9f"},"outputs":[{"name":"stdout","output_type":"stream","text":["2.2.2\n"]}],"source":["# Current version (should be 1.5+ in 2023)\n","print(pd.__version__)"]},{"cell_type":"markdown","metadata":{"cell_id":"00005-68938e1d-9143-4228-9d63-9e0a36b8d1d1","deepnote_cell_type":"markdown"},"source":["## Basic objects "]},{"cell_type":"markdown","metadata":{"cell_id":"00006-fdd69bd6-cb3e-4fca-8220-671dfa4b2b88","deepnote_cell_type":"markdown"},"source":["The **pandas** library has a vast API with many useful functions. However, most of this revolves\n","around two important classes:\n","\n","* Series\n","* DataFrame\n","\n","In this introduction, we will focus on them - what each of them does and how they relate to each other\n","and numpy objects."]},{"cell_type":"markdown","metadata":{"cell_id":"00007-b550553e-6541-4081-9dcd-a68fa7b896d1","deepnote_cell_type":"markdown"},"source":["### Series\n","\n","Series is a one-dimensional data structure, central to pandas. \n","\n","For a complete API, visit https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.Series.html"]},{"cell_type":"code","execution_count":4,"metadata":{"cell_id":"00008-576737c0-f7f4-48ce-996d-28c0b635e3aa","deepnote_cell_type":"code","deepnote_to_be_reexecuted":false,"execution_millis":0,"execution_start":1611579361045,"source_hash":"c76e8792"},"outputs":[{"data":{"text/plain":["0 1\n","1 2\n","2 3\n","dtype: int64"]},"execution_count":4,"metadata":{},"output_type":"execute_result"}],"source":["# My first series\n","series = pd.Series([1, 2, 3])\n","series"]},{"cell_type":"markdown","metadata":{"cell_id":"00009-b63b590b-e993-42c8-bb33-166b2702ba3e","deepnote_cell_type":"markdown"},"source":["This looks a bit like a Numpy array, does it not?\n","\n","Actually, in most cases the Series wraps a Numpy array..."]},{"cell_type":"code","execution_count":5,"metadata":{"cell_id":"00010-d06edb1a-2143-4c1b-a5b0-aaadfb315e7d","deepnote_cell_type":"code","deepnote_to_be_reexecuted":false,"execution_millis":0,"execution_start":1611567760034,"source_hash":"44e6fad0"},"outputs":[{"data":{"text/plain":["array([1, 2, 3])"]},"execution_count":5,"metadata":{},"output_type":"execute_result"}],"source":["series.values # The result is a Numpy array"]},{"cell_type":"markdown","metadata":{"cell_id":"00013-b8611001-c48a-4a1e-a482-b6c781cf77ff","deepnote_cell_type":"markdown"},"source":["But there is something more. Alongside the values, we see that each item (or \"row\") has a certain label. The collection of labels is called **index**."]},{"cell_type":"code","execution_count":6,"metadata":{"cell_id":"00014-54885ee0-c17a-4340-8039-2675e8b38c77","deepnote_cell_type":"code","deepnote_to_be_reexecuted":false,"execution_millis":1,"execution_start":1611567760829,"source_hash":"8f0869f4"},"outputs":[{"data":{"text/plain":["RangeIndex(start=0, stop=3, step=1)"]},"execution_count":6,"metadata":{},"output_type":"execute_result"}],"source":["series.index"]},{"cell_type":"markdown","metadata":{"cell_id":"00015-7b104328-754a-4e7f-bb62-14c4d2dd1917","deepnote_cell_type":"markdown"},"source":["This index (see below) can be used, as its name suggests, to index items of the series."]},{"cell_type":"code","execution_count":7,"metadata":{"cell_id":"00016-863ac09e-7c3f-4e03-959e-c66c510c596b","deepnote_cell_type":"code","deepnote_to_be_reexecuted":false,"execution_millis":1,"execution_start":1611567761660,"source_hash":"4a387647"},"outputs":[{"data":{"text/plain":["2"]},"execution_count":7,"metadata":{},"output_type":"execute_result"}],"source":["# Return an element from the series\n","series.loc[1]"]},{"cell_type":"code","execution_count":8,"metadata":{"cell_id":"00015-91f2ee46-a5f9-45a9-abb6-12bd4a463ac9","deepnote_cell_type":"code","deepnote_to_be_reexecuted":false,"execution_millis":4,"execution_start":1611567762195,"source_hash":"ec5f55d9","tags":[]},"outputs":[{"data":{"text/plain":["2"]},"execution_count":8,"metadata":{},"output_type":"execute_result"}],"source":["# Or\n","series[1]"]},{"cell_type":"code","execution_count":9,"metadata":{"cell_id":"00017-43b59fa1-d72d-46ba-86d6-0fed76ccd1f0","deepnote_cell_type":"code","deepnote_to_be_reexecuted":false,"execution_millis":1,"execution_start":1611567762576,"source_hash":"e117364f"},"outputs":[{"data":{"text/plain":["a 2\n","b 4\n","dtype: int64"]},"execution_count":9,"metadata":{},"output_type":"execute_result"}],"source":["# Construction from a dictionary\n","series_ab = pd.Series({\"a\": 2, \"b\": 4})\n","series_ab"]},{"cell_type":"markdown","metadata":{"cell_id":"00018-370c0ee0-646c-419e-b994-f9a6d344a42b","deepnote_cell_type":"markdown"},"source":["**Exercise**: Create a series with 5 elements."]},{"cell_type":"code","execution_count":10,"metadata":{"cell_id":"00019-b9b88043-d813-4c7f-bc2f-e82f2390f14a","deepnote_cell_type":"code","deepnote_to_be_reexecuted":false,"execution_millis":1,"execution_start":1611567763650,"source_hash":"a257d19f"},"outputs":[],"source":["result = ..."]},{"cell_type":"markdown","metadata":{"cell_id":"00020-6aa98d6a-363c-4907-8fb1-30c32e070e9f","deepnote_cell_type":"markdown"},"source":["### DataFrame"]},{"cell_type":"markdown","metadata":{"cell_id":"00021-06c635d1-efc4-4a34-9ab0-870db0778bf0","deepnote_cell_type":"markdown"},"source":["A **DataFrame** is pandas' answer to Excel sheets - it is a collection of named columns (or, in our case, a collection of **Series**).\n","Quite often, we directly read data frames from an external source, but it is possible to create them from:\n","* a dict of Series, numpy arrays or other array-like objects\n","* from an iterable of rows (where rows are Series, lists, dictionaries, ...)"]},{"cell_type":"code","execution_count":11,"metadata":{"cell_id":"00022-b08d7be1-128a-48c5-9b57-806f68113d63","deepnote_cell_type":"code","deepnote_to_be_reexecuted":false,"execution_millis":1,"execution_start":1611567767842,"source_hash":"3d0048f"},"outputs":[{"data":{"text/html":["
\n","\n","
\n"," \n","
\n","
\n","
0
\n","
1
\n","
\n"," \n"," \n","
\n","
0
\n","
a
\n","
1
\n","
\n","
\n","
1
\n","
b
\n","
3
\n","
\n","
\n","
2
\n","
c
\n","
5
\n","
\n"," \n","
\n","
"],"text/plain":[" 0 1\n","0 a 1\n","1 b 3\n","2 c 5"]},"execution_count":11,"metadata":{},"output_type":"execute_result"}],"source":["# List of lists (no column names)\n","table = [\n"," ['a', 1],\n"," ['b', 3],\n"," ['c', 5]\n","]\n","table_df = pd.DataFrame(table)\n","table_df"]},{"cell_type":"code","execution_count":12,"metadata":{"cell_id":"00023-460aa85e-6503-4335-8b70-b695c45b6121","deepnote_cell_type":"code","deepnote_to_be_reexecuted":false,"execution_millis":5,"execution_start":1611567768383,"source_hash":"433789ee"},"outputs":[{"data":{"text/html":["
\n","\n","
\n"," \n","
\n","
\n","
number
\n","
letter
\n","
\n"," \n"," \n","
\n","
0
\n","
1
\n","
a
\n","
\n","
\n","
1
\n","
2
\n","
b
\n","
\n","
\n","
2
\n","
3
\n","
c
\n","
\n","
\n","
3
\n","
4
\n","
d
\n","
\n"," \n","
\n","
"],"text/plain":[" number letter\n","0 1 a\n","1 2 b\n","2 3 c\n","3 4 d"]},"execution_count":12,"metadata":{},"output_type":"execute_result"}],"source":["# Dict of Series (with column names)\n","df = pd.DataFrame({\n"," 'number': pd.Series([1, 2, 3, 4], dtype=np.int8),\n"," 'letter': pd.Series(['a', 'b', 'c', 'd'])\n","})\n","df"]},{"cell_type":"code","execution_count":13,"metadata":{"cell_id":"00024-ce04e0d4-525f-4e35-8ecd-e5d1c808b5f8","deepnote_cell_type":"code","deepnote_to_be_reexecuted":false,"execution_millis":1,"execution_start":1611567769751,"scrolled":true,"source_hash":"31c05ea5"},"outputs":[{"data":{"text/html":["
\n","\n","
\n"," \n","
\n","
\n","
a
\n","
b
\n","
\n"," \n"," \n","
\n","
0
\n","
-0.623829
\n","
-1.850478
\n","
\n","
\n","
1
\n","
-0.541544
\n","
-0.816918
\n","
\n","
\n","
2
\n","
1.353791
\n","
0.470390
\n","
\n","
\n","
3
\n","
-0.411840
\n","
2.111382
\n","
\n","
\n","
4
\n","
1.180242
\n","
-0.081106
\n","
\n","
\n","
5
\n","
-0.773012
\n","
1.676229
\n","
\n","
\n","
6
\n","
0.667790
\n","
-0.968450
\n","
\n","
\n","
7
\n","
-1.076493
\n","
0.050577
\n","
\n","
\n","
8
\n","
0.920813
\n","
-1.891053
\n","
\n","
\n","
9
\n","
-0.132454
\n","
-0.447746
\n","
\n"," \n","
\n","
"],"text/plain":[" a b\n","0 -0.623829 -1.850478\n","1 -0.541544 -0.816918\n","2 1.353791 0.470390\n","3 -0.411840 2.111382\n","4 1.180242 -0.081106\n","5 -0.773012 1.676229\n","6 0.667790 -0.968450\n","7 -1.076493 0.050577\n","8 0.920813 -1.891053\n","9 -0.132454 -0.447746"]},"execution_count":13,"metadata":{},"output_type":"execute_result"}],"source":["# Numpy array (10x2), specify column names\n","data = np.random.normal(0, 1, (10, 2))\n","\n","df = pd.DataFrame(data, columns=['a', 'b'])\n","df"]},{"cell_type":"code","execution_count":14,"metadata":{"cell_id":"00025-47de99ba-8288-4905-8877-85452ec86841","deepnote_cell_type":"code","deepnote_to_be_reexecuted":false,"execution_millis":0,"execution_start":1611567773984,"source_hash":"ed5550ef"},"outputs":[{"data":{"text/plain":["RangeIndex(start=0, stop=10, step=1)"]},"execution_count":14,"metadata":{},"output_type":"execute_result"}],"source":["# A DataFrame also has an index.\n","df.index"]},{"cell_type":"code","execution_count":15,"metadata":{"cell_id":"00027-6c934155-da4c-4080-a0be-f51d4fd62f3f","deepnote_cell_type":"code","deepnote_to_be_reexecuted":false,"execution_millis":4,"execution_start":1611567783708,"source_hash":"342beafe"},"outputs":[{"data":{"text/plain":["True"]},"execution_count":15,"metadata":{},"output_type":"execute_result"}],"source":["# ...that is shared by all columns\n","df.index is df[\"a\"].index"]},{"cell_type":"code","execution_count":16,"metadata":{"cell_id":"00026-c0ad1aba-1e06-411d-9301-9a3fcebca0e1","deepnote_cell_type":"code","deepnote_to_be_reexecuted":false,"execution_millis":0,"execution_start":1611567783032,"source_hash":"90ddc3f8","tags":[]},"outputs":[{"data":{"text/plain":["Index(['a', 'b'], dtype='object')"]},"execution_count":16,"metadata":{},"output_type":"execute_result"}],"source":["# The columns also form an index.\n","df.columns"]},{"cell_type":"markdown","metadata":{"cell_id":"00047-2671c08d-d825-4fe1-ae69-a9c8beba058e","deepnote_cell_type":"markdown"},"source":["**Exercise:** Create `DataFrame` whose `x`-column is $0, \\frac{1}{4}\\pi, \\frac{1}{2}\\pi, .. 2\\pi $, `y` column is `cos(x)` and index are `fractions` `0, 1/4, 1/2 ... 2`"]},{"cell_type":"code","execution_count":18,"metadata":{"cell_id":"00048-1ec15e17-145f-44a3-96c5-131a08b8b0d4","deepnote_cell_type":"code","deepnote_to_be_reexecuted":false,"execution_millis":111,"execution_start":1611480561408,"source_hash":"2ccc186a"},"outputs":[{"ename":"TypeError","evalue":"'RangeIndex' object cannot be interpreted as an integer","output_type":"error","traceback":["\u001b[0;31m---------------------------------------------------------------------------\u001b[0m","\u001b[0;31mTypeError\u001b[0m Traceback (most recent call last)","Cell \u001b[0;32mIn[18], line 3\u001b[0m\n\u001b[1;32m 1\u001b[0m \u001b[38;5;28;01mimport\u001b[39;00m \u001b[38;5;21;01mfractions\u001b[39;00m\n\u001b[0;32m----> 3\u001b[0m index \u001b[38;5;241m=\u001b[39m [fractions\u001b[38;5;241m.\u001b[39mFraction(n, ___) \u001b[38;5;28;01mfor\u001b[39;00m n \u001b[38;5;129;01min\u001b[39;00m \u001b[38;5;28;43mrange\u001b[39;49m\u001b[43m(\u001b[49m\u001b[43m___\u001b[49m\u001b[43m)\u001b[49m]\n\u001b[1;32m 4\u001b[0m x \u001b[38;5;241m=\u001b[39m np\u001b[38;5;241m.\u001b[39m___([___ \u001b[38;5;28;01mfor\u001b[39;00m ___ \u001b[38;5;129;01min\u001b[39;00m ___])\n\u001b[1;32m 5\u001b[0m y \u001b[38;5;241m=\u001b[39m ___\n","\u001b[0;31mTypeError\u001b[0m: 'RangeIndex' object cannot be interpreted as an integer"]}],"source":["import fractions\n","\n","index = [fractions.Fraction(n, ___) for n in range(___)]\n","x = np.___([___ for ___ in ___])\n","y = ___\n","\n","df = pd.DataFrame(___, index = ___)\n","\n","# display\n","df"]},{"cell_type":"markdown","metadata":{"cell_id":"00028-aa94d7ea-8bba-4294-9b86-6a391209884f","deepnote_cell_type":"markdown"},"source":["## D(ata) types\n","\n","Pandas builds upon the numpy data types (mentioned earlier) and adds a couple of more."]},{"cell_type":"code","execution_count":19,"metadata":{"cell_id":"00029-8f0e7b0b-dc86-4248-be41-2ecdcd29719d","deepnote_cell_type":"code","deepnote_to_be_reexecuted":false,"execution_millis":20,"execution_start":1611567785414,"source_hash":"6af9f238"},"outputs":[{"name":"stderr","output_type":"stream","text":["/var/folders/dm/gbbql3p121z0tr22r2z98vy00000gn/T/ipykernel_78670/1417085050.py:10: FutureWarning: 'M' is deprecated and will be removed in a future version, please use 'ME' instead.\n"," \"datetime\": pd.date_range('2018-01-01', periods=5, freq='3M'),\n"]},{"data":{"text/html":["
\n","\n","
\n"," \n","
\n","
\n","
bool
\n","
int
\n","
int[nan]
\n","
float
\n","
complex
\n","
object
\n","
string?
\n","
string!
\n","
datetime
\n","
timedelta
\n","
category
\n","
period
\n","
\n"," \n"," \n","
\n","
0
\n","
True
\n","
0
\n","
<NA>
\n","
0.00
\n","
1.0+2.0j
\n","
None
\n","
a
\n","
a
\n","
2018-01-31
\n","
0 days 00:00:00
\n","
animal
\n","
2018-01
\n","
\n","
\n","
1
\n","
False
\n","
1
\n","
0
\n","
3.14
\n","
2.0+3.0j
\n","
1
\n","
b
\n","
b
\n","
2018-04-30
\n","
0 days 00:00:01
\n","
plant
\n","
2018-02
\n","
\n","
\n","
2
\n","
True
\n","
2
\n","
1
\n","
6.28
\n","
3.0+4.0j
\n","
2
\n","
c
\n","
c
\n","
2018-07-31
\n","
0 days 00:00:02
\n","
animal
\n","
2018-03
\n","
\n","
\n","
3
\n","
False
\n","
3
\n","
2
\n","
9.42
\n","
4.0+5.0j
\n","
[3, 4]
\n","
d
\n","
d
\n","
2018-10-31
\n","
0 days 00:00:03
\n","
animal
\n","
2018-04
\n","
\n","
\n","
4
\n","
True
\n","
4
\n","
3
\n","
12.56
\n","
5.0+6.0j
\n","
(5+6j)
\n","
e
\n","
e
\n","
2019-01-31
\n","
0 days 00:00:04
\n","
plant
\n","
2018-05
\n","
\n"," \n","
\n","
"],"text/plain":[" bool int int[nan] float complex object string? string! datetime \\\n","0 True 0 0.00 1.0+2.0j None a a 2018-01-31 \n","1 False 1 0 3.14 2.0+3.0j 1 b b 2018-04-30 \n","2 True 2 1 6.28 3.0+4.0j 2 c c 2018-07-31 \n","3 False 3 2 9.42 4.0+5.0j [3, 4] d d 2018-10-31 \n","4 True 4 3 12.56 5.0+6.0j (5+6j) e e 2019-01-31 \n","\n"," timedelta category period \n","0 0 days 00:00:00 animal 2018-01 \n","1 0 days 00:00:01 plant 2018-02 \n","2 0 days 00:00:02 animal 2018-03 \n","3 0 days 00:00:03 animal 2018-04 \n","4 0 days 00:00:04 plant 2018-05 "]},"execution_count":19,"metadata":{},"output_type":"execute_result"}],"source":["typed_df = pd.DataFrame({\n"," \"bool\": np.arange(5) % 2 == 0,\n"," \"int\": range(5),\n"," \"int[nan]\": pd.Series([np.nan, 0, 1, 2, 3], dtype=\"Int64\"),\n"," \"float\": np.arange(5) * 3.14,\n"," \"complex\": np.array([1 + 2j, 2 + 3j, 3 + 4j, 4 + 5j, 5 + 6j]),\n"," \"object\": [None, 1, \"2\", [3, 4], 5 + 6j],\n"," \"string?\": [\"a\", \"b\", \"c\", \"d\", \"e\"],\n"," \"string!\": pd.Series([\"a\", \"b\", \"c\", \"d\", \"e\"], dtype=\"string\"),\n"," \"datetime\": pd.date_range('2018-01-01', periods=5, freq='3M'),\n"," \"timedelta\": pd.timedelta_range(0, freq=\"1s\", periods=5),\n"," \"category\": pd.Series([\"animal\", \"plant\", \"animal\", \"animal\", \"plant\"], dtype=\"category\"),\n"," \"period\": pd.period_range('2018-01-01', periods=5, freq='M'),\n","})\n","typed_df"]},{"cell_type":"code","execution_count":20,"metadata":{"cell_id":"00030-80fb51df-1921-4c0f-b380-cb3812a3d059","deepnote_cell_type":"code","deepnote_to_be_reexecuted":false,"execution_millis":0,"execution_start":1611567785980,"source_hash":"4f0d2239"},"outputs":[{"data":{"text/plain":["bool bool\n","int int64\n","int[nan] Int64\n","float float64\n","complex complex128\n","object object\n","string? object\n","string! string[python]\n","datetime datetime64[ns]\n","timedelta timedelta64[ns]\n","category category\n","period period[M]\n","dtype: object"]},"execution_count":20,"metadata":{},"output_type":"execute_result"}],"source":["typed_df.dtypes"]},{"cell_type":"markdown","metadata":{"cell_id":"00031-9aa5fa0e-e065-4f81-858d-93a4ff13c158","deepnote_cell_type":"markdown"},"source":["We will see some of the types practically used in further analysis."]},{"cell_type":"markdown","metadata":{"cell_id":"00032-d28f532f-1cc0-45a3-9275-869490ca3cc4","deepnote_cell_type":"markdown"},"source":["## Indices & indexing\n","\n"]},{"cell_type":"code","execution_count":21,"metadata":{"cell_id":"00033-35f9e0dc-1e10-4354-9301-37cdf5dfc108","deepnote_cell_type":"code","deepnote_to_be_reexecuted":false,"execution_millis":1,"execution_start":1611567788444,"source_hash":"19f8a65a"},"outputs":[{"data":{"text/plain":["a 0\n","b 1\n","c 2\n","dtype: int64"]},"execution_count":21,"metadata":{},"output_type":"execute_result"}],"source":["abc_series = pd.Series(range(3), index=[\"a\", \"b\", \"c\"])\n","abc_series"]},{"cell_type":"code","execution_count":22,"metadata":{"cell_id":"00034-53dceb0f-f3ea-4376-a3fc-0b9132b15c2d","deepnote_cell_type":"code","deepnote_to_be_reexecuted":false,"execution_millis":0,"execution_start":1611567788966,"source_hash":"7cd8d5bf"},"outputs":[{"data":{"text/plain":["Index(['a', 'b', 'c'], dtype='object')"]},"execution_count":22,"metadata":{},"output_type":"execute_result"}],"source":["abc_series.index"]},{"cell_type":"code","execution_count":23,"metadata":{"cell_id":"00035-f24e5c70-36f0-4d63-a7a4-cae2c798bf94","deepnote_cell_type":"code","deepnote_to_be_reexecuted":false,"execution_millis":1,"execution_start":1611567789584,"source_hash":"2812f42b"},"outputs":[{"data":{"text/plain":["letter\n","c 0\n","d 1\n","e 2\n","dtype: int64"]},"execution_count":23,"metadata":{},"output_type":"execute_result"}],"source":["abc_series.index = [\"c\", \"d\", \"e\"] # Changes the labels in-place!\n","abc_series.index.name = \"letter\"\n","abc_series"]},{"cell_type":"code","execution_count":24,"metadata":{"cell_id":"00036-c789e02a-2403-487e-a08d-01df0da17840","deepnote_cell_type":"code","deepnote_to_be_reexecuted":false,"execution_millis":4,"execution_start":1611567790118,"source_hash":"90a443a4"},"outputs":[{"data":{"text/html":["
\n","\n","
\n"," \n","
\n","
\n","
alpha
\n","
beta
\n","
\n"," \n"," \n","
\n","
first
\n","
a
\n","
1
\n","
\n","
\n","
second
\n","
b
\n","
3
\n","
\n","
\n","
third
\n","
c
\n","
5
\n","
\n"," \n","
\n","
"],"text/plain":[" alpha beta\n","first a 1\n","second b 3\n","third c 5"]},"execution_count":24,"metadata":{},"output_type":"execute_result"}],"source":["table = [\n"," ['a', 1],\n"," ['b', 3],\n"," ['c', 5]\n","]\n","table_df = pd.DataFrame(\n"," table,\n"," index=[\"first\", \"second\", \"third\"],\n"," columns=[\"alpha\", \"beta\"]\n",")\n","table_df"]},{"cell_type":"code","execution_count":25,"metadata":{"cell_id":"00037-1bf7a004-e61f-4a7b-ab79-809ed090af1f","deepnote_cell_type":"code","deepnote_to_be_reexecuted":false,"execution_millis":0,"execution_start":1611567790746,"source_hash":"13d66294"},"outputs":[{"data":{"text/plain":["first a\n","second b\n","third c\n","Name: alpha, dtype: object"]},"execution_count":25,"metadata":{},"output_type":"execute_result"}],"source":["alpha = table_df[\"alpha\"] # Simple [] indexing in DataFrame returns Series\n","alpha"]},{"cell_type":"code","execution_count":26,"metadata":{"cell_id":"00038-c890f83c-1e8a-4952-abdf-c2799352d49b","deepnote_cell_type":"code","deepnote_to_be_reexecuted":false,"execution_millis":5,"execution_start":1611567791382,"source_hash":"ca4ed67d"},"outputs":[{"data":{"text/plain":["'b'"]},"execution_count":26,"metadata":{},"output_type":"execute_result"}],"source":["alpha[\"second\"] # Simple [] indexing in Series returns scalar values."]},{"cell_type":"markdown","metadata":{"cell_id":"00042-b5bea60b-507a-4dea-8a4f-9acbe6c598a0","deepnote_cell_type":"markdown"},"source":["A slice with a `[\"list\", \"of\", \"columns\"]` yields a `DataFrame` with those columns. \n","\n","For example:"]},{"cell_type":"code","execution_count":null,"metadata":{"cell_id":"00043-b297bd6b-85ff-4770-879c-9bdf09de6abf","deepnote_cell_type":"code","deepnote_to_be_reexecuted":false,"execution_millis":1,"execution_start":1611567794413,"source_hash":"b512d0f2"},"outputs":[],"source":["table_df[[\"beta\", \"alpha\"]]"]},{"cell_type":"markdown","metadata":{"cell_id":"00044-096ecd23-878e-4b06-bcb9-b60dfa8da461","deepnote_cell_type":"markdown"},"source":["`[[\"column_name\"]]` returs a `DataFrame` as well, not `Series`:"]},{"cell_type":"code","execution_count":28,"metadata":{"cell_id":"00045-a862e2cf-389b-4a9b-9444-cf2a2c7520a4","deepnote_cell_type":"code","deepnote_to_be_reexecuted":false,"execution_millis":0,"execution_start":1611567795450,"source_hash":"9f86bc6a"},"outputs":[{"data":{"text/html":["
\n","\n","
\n"," \n","
\n","
\n","
alpha
\n","
\n"," \n"," \n","
\n","
first
\n","
a
\n","
\n","
\n","
second
\n","
b
\n","
\n","
\n","
third
\n","
c
\n","
\n"," \n","
\n","
"],"text/plain":[" alpha\n","first a\n","second b\n","third c"]},"execution_count":28,"metadata":{},"output_type":"execute_result"}],"source":["table_df[[\"alpha\"]]"]},{"cell_type":"markdown","metadata":{"cell_id":"00046-94cc193e-ed78-4239-97bd-ad01ad286aaf","deepnote_cell_type":"markdown"},"source":["There are two ways how to properly index rows & cells in the DataFrame:\n","\n","- `loc` for label-based indexing\n","- `iloc` for order-based indexing (it does not use the **index** at all)\n","\n","Note the square brackets. The mentioned attributes actually are not methods\n","but special \"indexer\" objects. They accept one or two arguments specifying\n","the position along one or both axes."]},{"cell_type":"markdown","metadata":{"cell_id":"00049-67ec2b8c-3dc9-4fbd-849f-fa4aa6fc6050","deepnote_cell_type":"markdown"},"source":["#### loc\n"]},{"cell_type":"code","execution_count":29,"metadata":{"cell_id":"00050-aedef5e1-79bd-4581-88a5-462122c3b77e","deepnote_cell_type":"code","deepnote_to_be_reexecuted":false,"execution_millis":1,"execution_start":1611567804258,"source_hash":"eaeea355"},"outputs":[{"data":{"text/plain":["alpha a\n","beta 1\n","Name: first, dtype: object"]},"execution_count":29,"metadata":{},"output_type":"execute_result"}],"source":["first = table_df.loc[\"first\"]\n","first"]},{"cell_type":"code","execution_count":30,"metadata":{"cell_id":"00051-4d9528ae-b57e-401d-97a2-87f103e0c72f","deepnote_cell_type":"code","deepnote_to_be_reexecuted":false,"execution_millis":4,"execution_start":1611567805002,"source_hash":"f6fdb961"},"outputs":[{"data":{"text/plain":["1"]},"execution_count":30,"metadata":{},"output_type":"execute_result"}],"source":["table_df.loc[\"first\", \"beta\"]"]},{"cell_type":"code","execution_count":31,"metadata":{"cell_id":"00052-50078dce-3868-4300-8675-aab20929e97f","deepnote_cell_type":"code","deepnote_to_be_reexecuted":false,"execution_millis":4,"execution_start":1611567805683,"source_hash":"9f0543fa"},"outputs":[{"data":{"text/plain":["first 1\n","second 3\n","Name: beta, dtype: int64"]},"execution_count":31,"metadata":{},"output_type":"execute_result"}],"source":["table_df.loc[\"first\":\"second\", \"beta\"] # Use ranges (inclusive)"]},{"cell_type":"markdown","metadata":{"cell_id":"00053-9b0ffb86-5974-4cd5-b8f4-f4b4fe979771","deepnote_cell_type":"markdown"},"source":["#### iloc"]},{"cell_type":"code","execution_count":32,"metadata":{"cell_id":"00054-91fa79d6-941e-428f-9ceb-1a480634cd6b","deepnote_cell_type":"code","deepnote_to_be_reexecuted":false,"execution_millis":1,"execution_start":1611567807968,"source_hash":"589116e5"},"outputs":[{"data":{"text/plain":["alpha b\n","beta 3\n","Name: second, dtype: object"]},"execution_count":32,"metadata":{},"output_type":"execute_result"}],"source":["table_df.iloc[1]"]},{"cell_type":"code","execution_count":33,"metadata":{"cell_id":"00055-6ab2d6bf-c83e-42b2-95fa-0d5f085de251","deepnote_cell_type":"code","deepnote_to_be_reexecuted":false,"execution_millis":1,"execution_start":1611567808790,"source_hash":"22edf038"},"outputs":[{"data":{"text/html":["
\n","\n","
\n"," \n","
\n","
\n","
alpha
\n","
beta
\n","
\n"," \n"," \n","
\n","
first
\n","
a
\n","
1
\n","
\n","
\n","
third
\n","
c
\n","
5
\n","
\n"," \n","
\n","
"],"text/plain":[" alpha beta\n","first a 1\n","third c 5"]},"execution_count":33,"metadata":{},"output_type":"execute_result"}],"source":["table_df.iloc[0:4:2] # Select every second row"]},{"cell_type":"code","execution_count":34,"metadata":{"cell_id":"00056-310d81a9-5114-40c7-bc1c-794b7bca3b8b","deepnote_cell_type":"code","deepnote_to_be_reexecuted":false,"execution_millis":1,"execution_start":1611567810031,"source_hash":"9381f832"},"outputs":[{"data":{"text/plain":["1"]},"execution_count":34,"metadata":{},"output_type":"execute_result"}],"source":["table_df.at[\"first\", \"beta\"]"]},{"cell_type":"code","execution_count":35,"metadata":{"cell_id":"00057-a4f407fc-3a40-4853-b374-170c1626ab70","deepnote_cell_type":"code","deepnote_to_be_reexecuted":false,"execution_millis":1,"execution_start":1611567811230,"source_hash":"5ab74605"},"outputs":[{"data":{"text/plain":["pandas.core.indexing._AtIndexer"]},"execution_count":35,"metadata":{},"output_type":"execute_result"}],"source":["type(table_df.at)"]},{"cell_type":"markdown","metadata":{"cell_id":"00058-a1b50a76-2ede-4e10-b170-6493642d8d7f","deepnote_cell_type":"markdown"},"source":["## Modifying DataFrames\n","\n","Adding a new column is like adding a key/value pair to a dict.\n","Note that this operation, unlike most others, does modify the DataFrame."]},{"cell_type":"code","execution_count":36,"metadata":{"cell_id":"00059-380e843a-7de8-48f6-a0b9-5bdd5fba08a0","deepnote_cell_type":"code","deepnote_to_be_reexecuted":false,"execution_millis":1,"execution_start":1611567839334,"source_hash":"19406c5f"},"outputs":[{"data":{"text/html":["
\n","\n","
\n"," \n","
\n","
\n","
alpha
\n","
beta
\n","
now
\n","
\n"," \n"," \n","
\n","
first
\n","
a
\n","
1
\n","
2024-04-25 12:45:05.181057
\n","
\n","
\n","
second
\n","
b
\n","
3
\n","
2024-04-25 12:45:05.181057
\n","
\n","
\n","
third
\n","
c
\n","
5
\n","
2024-04-25 12:45:05.181057
\n","
\n"," \n","
\n","
"],"text/plain":[" alpha beta now\n","first a 1 2024-04-25 12:45:05.181057\n","second b 3 2024-04-25 12:45:05.181057\n","third c 5 2024-04-25 12:45:05.181057"]},"execution_count":36,"metadata":{},"output_type":"execute_result"}],"source":["from datetime import datetime\n","table_df[\"now\"] = datetime.now()\n","table_df"]},{"cell_type":"markdown","metadata":{"cell_id":"00060-24f384c8-eecd-41ce-b22e-df7c651d6e35","deepnote_cell_type":"markdown"},"source":["Non-destructive version that returns a new DataFrame, uses the `assign` method:"]},{"cell_type":"code","execution_count":37,"metadata":{"cell_id":"00061-30216bc8-5872-4928-af41-bb55fb8331e6","deepnote_cell_type":"code","deepnote_to_be_reexecuted":false,"execution_millis":4,"execution_start":1611567842415,"source_hash":"6960fea5"},"outputs":[{"data":{"text/html":["
\n","\n","
\n"," \n","
\n","
\n","
alpha
\n","
beta
\n","
now
\n","
delta
\n","
\n"," \n"," \n","
\n","
first
\n","
a
\n","
1
\n","
2024-04-25 12:45:05.181057
\n","
True
\n","
\n","
\n","
second
\n","
b
\n","
3
\n","
2024-04-25 12:45:05.181057
\n","
False
\n","
\n","
\n","
third
\n","
c
\n","
5
\n","
2024-04-25 12:45:05.181057
\n","
True
\n","
\n"," \n","
\n","
"],"text/plain":[" alpha beta now delta\n","first a 1 2024-04-25 12:45:05.181057 True\n","second b 3 2024-04-25 12:45:05.181057 False\n","third c 5 2024-04-25 12:45:05.181057 True"]},"execution_count":37,"metadata":{},"output_type":"execute_result"}],"source":["table_df.assign(delta = [True, False, True])"]},{"cell_type":"code","execution_count":38,"metadata":{"cell_id":"00062-0de7f7d1-8f77-4997-bc82-423b64c0dcc9","deepnote_cell_type":"code","deepnote_to_be_reexecuted":false,"execution_millis":2,"execution_start":1611567844125,"source_hash":"17c762c7"},"outputs":[{"data":{"text/html":["
\n","\n","
\n"," \n","
\n","
\n","
alpha
\n","
beta
\n","
now
\n","
\n"," \n"," \n","
\n","
first
\n","
a
\n","
1
\n","
2024-04-25 12:45:05.181057
\n","
\n","
\n","
second
\n","
b
\n","
3
\n","
2024-04-25 12:45:05.181057
\n","
\n","
\n","
third
\n","
c
\n","
5
\n","
2024-04-25 12:45:05.181057
\n","
\n"," \n","
\n","
"],"text/plain":[" alpha beta now\n","first a 1 2024-04-25 12:45:05.181057\n","second b 3 2024-04-25 12:45:05.181057\n","third c 5 2024-04-25 12:45:05.181057"]},"execution_count":38,"metadata":{},"output_type":"execute_result"}],"source":["# However, the original DataFrame is not changed\n","table_df"]},{"cell_type":"markdown","metadata":{"cell_id":"00063-aec93e64-9522-4eee-a75e-e8c652479d4b","deepnote_cell_type":"markdown"},"source":["Deleting a column is very easy too."]},{"cell_type":"code","execution_count":39,"metadata":{"cell_id":"00064-7ed9a380-a1d9-467b-b6a4-e927ee4a73a1","deepnote_cell_type":"code","deepnote_to_be_reexecuted":false,"execution_millis":1,"execution_start":1611567854337,"source_hash":"c9dffb9a"},"outputs":[{"data":{"text/html":["
\n","\n","
\n"," \n","
\n","
\n","
alpha
\n","
beta
\n","
\n"," \n"," \n","
\n","
first
\n","
a
\n","
1
\n","
\n","
\n","
second
\n","
b
\n","
3
\n","
\n","
\n","
third
\n","
c
\n","
5
\n","
\n"," \n","
\n","
"],"text/plain":[" alpha beta\n","first a 1\n","second b 3\n","third c 5"]},"execution_count":39,"metadata":{},"output_type":"execute_result"}],"source":["del table_df[\"now\"]\n","table_df"]},{"cell_type":"markdown","metadata":{"cell_id":"00065-6ab3e7f7-7ac8-4b93-bb9f-b7c2d3518b9e","deepnote_cell_type":"markdown"},"source":["The **drop** method works with both rows and columns (creating a new data frame), returning a new object."]},{"cell_type":"code","execution_count":40,"metadata":{"cell_id":"00066-960e696f-9ef1-41f4-ba03-e8652f58dd7a","deepnote_cell_type":"code","deepnote_to_be_reexecuted":false,"execution_millis":5,"execution_start":1611567856256,"source_hash":"ade330b4"},"outputs":[{"data":{"text/html":["
"],"text/plain":[" alpha beta\n","first a 1\n","third c 5"]},"execution_count":41,"metadata":{},"output_type":"execute_result"}],"source":["table_df.drop(\"second\", axis=0)"]},{"cell_type":"markdown","metadata":{"cell_id":"00068-86559d86-2c01-4fdb-a288-98f8313d4336","deepnote_cell_type":"markdown"},"source":["**Exercise:** Use a combination of `reset_index`, `drop` and `set_index` to transform `table_df` into `pd.DataFrame({'index': table_df.index}, index=table_df[\"alpha\"])`"]},{"cell_type":"code","execution_count":null,"metadata":{"cell_id":"00069-b97999ec-63f2-42e9-a862-e541115baf44","deepnote_cell_type":"code","deepnote_to_be_reexecuted":false,"execution_millis":1,"execution_start":1611480611376,"source_hash":"d5f2663e"},"outputs":[],"source":["results = table_df.___.___.___\n","\n","# display\n","result"]},{"cell_type":"markdown","metadata":{"cell_id":"00070-a7144d25-1150-4589-ab81-aee7173db134","deepnote_cell_type":"markdown"},"source":["**Let's get some real data!**"]},{"cell_type":"markdown","metadata":{"cell_id":"00071-521ee5f8-d794-4fd1-b772-186b84e3deac","deepnote_cell_type":"markdown"},"source":["## I/O in pandas\n","\n","Pandas can read (and write to) a huge variety of file formats. More details can be found in the official documentation: http://pandas.pydata.org/pandas-docs/stable/user_guide/io.html\n","\n","Most of the functions for reading data are named `pandas.read_XXX`, where XXX is the format used. We will look at three commonly used ones."]},{"cell_type":"code","execution_count":43,"metadata":{"cell_id":"00073-a1058079-31e9-43e2-b07c-f898af75de5f","deepnote_cell_type":"code","deepnote_to_be_reexecuted":false,"execution_millis":2,"execution_start":1611568168910,"source_hash":"dc3b3f60"},"outputs":[{"name":"stdout","output_type":"stream","text":["read_clipboard\n","read_csv\n","read_excel\n","read_feather\n","read_fwf\n","read_gbq\n","read_hdf\n","read_html\n","read_json\n","read_orc\n","read_parquet\n","read_pickle\n","read_sas\n","read_spss\n","read_sql\n","read_sql_query\n","read_sql_table\n","read_stata\n","read_table\n","read_xml\n"]}],"source":["# List functions for input in pandas.\n","\n","print(\"\\n\".join(method for method in dir(pd) if method.startswith(\"read_\")))"]},{"cell_type":"markdown","metadata":{"cell_id":"00074-36ecee81-4869-4699-ae4f-a6dfc68ace99","deepnote_cell_type":"markdown"},"source":["### Read CSV\n","\n","Nowadays, a lot of data comes in the textual Comma-separated values format (CSV).\n","Although not properly standardized, it is the de-facto standard for files that are not\n","huge and are meant to be read by human eyes too.\n","\n","Let's read the population of U.S. states that we will need later:"]},{"cell_type":"code","execution_count":45,"metadata":{"cell_id":"00075-9f192cd5-ad0f-4601-9e2e-0848f708b35f","deepnote_cell_type":"code","deepnote_to_be_reexecuted":false,"execution_millis":17,"execution_start":1611579778720,"source_hash":"6caee636"},"outputs":[{"data":{"text/html":["
\n","\n","
\n"," \n","
\n","
\n","
Territory
\n","
Population
\n","
Population 2010
\n","
Code
\n","
\n"," \n"," \n","
\n","
0
\n","
California
\n","
39029342.0
\n","
37253956
\n","
CA
\n","
\n","
\n","
1
\n","
Texas
\n","
30029572.0
\n","
25145561
\n","
TX
\n","
\n","
\n","
2
\n","
Florida
\n","
22244823.0
\n","
18801310
\n","
FL
\n","
\n","
\n","
3
\n","
New York
\n","
19677151.0
\n","
19378102
\n","
NY
\n","
\n","
\n","
4
\n","
Pennsylvania
\n","
12972008.0
\n","
12702379
\n","
PA
\n","
\n","
\n","
5
\n","
Illinois
\n","
12582032.0
\n","
12830632
\n","
IL
\n","
\n","
\n","
6
\n","
Ohio
\n","
11756058.0
\n","
11536504
\n","
OH
\n","
\n","
\n","
7
\n","
Georgia
\n","
10912876.0
\n","
9687653
\n","
GA
\n","
\n","
\n","
8
\n","
North Carolina
\n","
10698973.0
\n","
9535483
\n","
NC
\n","
\n"," \n","
\n","
"],"text/plain":[" Territory Population Population 2010 Code\n","0 California 39029342.0 37253956 CA\n","1 Texas 30029572.0 25145561 TX\n","2 Florida 22244823.0 18801310 FL\n","3 New York 19677151.0 19378102 NY\n","4 Pennsylvania 12972008.0 12702379 PA\n","5 Illinois 12582032.0 12830632 IL\n","6 Ohio 11756058.0 11536504 OH\n","7 Georgia 10912876.0 9687653 GA\n","8 North Carolina 10698973.0 9535483 NC"]},"execution_count":45,"metadata":{},"output_type":"execute_result"}],"source":["territories = pd.read_csv(\"data/us_state_population.csv\")\n","territories.head(9)"]},{"cell_type":"markdown","metadata":{"cell_id":"00076-b6058815-262c-43ce-b7a6-2a40ecade892","deepnote_cell_type":"markdown"},"source":["The automatic data type parsing converts columns to appropriate types:"]},{"cell_type":"code","execution_count":46,"metadata":{"cell_id":"00077-0c4b98ee-3ee5-418d-ac4c-d2530614af5c","deepnote_cell_type":"code","deepnote_to_be_reexecuted":false,"execution_millis":3,"execution_start":1611568175175,"source_hash":"ec8087cf"},"outputs":[{"data":{"text/plain":["Territory object\n","Population float64\n","Population 2010 int64\n","Code object\n","dtype: object"]},"execution_count":46,"metadata":{},"output_type":"execute_result"}],"source":["territories.dtypes"]},{"cell_type":"markdown","metadata":{"cell_id":"00078-cd5bd76c-c0c7-4029-8438-2d9ef7096ab9","deepnote_cell_type":"markdown"},"source":["Sometimes the CSV input does not work out of the box. Although pandas automatically understands and reads zipped files,\n","it usually does not automatically infer the file format and its variations - for details, see the `read_csv` documentation here: \n","https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.read_csv.html"]},{"cell_type":"code","execution_count":48,"metadata":{"cell_id":"00079-8a8d808f-3ae6-436d-8588-58368dc13d07","deepnote_cell_type":"code","deepnote_to_be_reexecuted":false,"execution_millis":1,"execution_start":1611568224402,"source_hash":"44c0777d"},"outputs":[{"data":{"text/html":["
"],"text/plain":[" Sepal length\\tSepal width\\tPetal length\\tPetal width\\tSpecies\n","0 5.1\\t3.5\\t1.4\\t0.2\\tI. setosa \n","1 4.9\\t3.0\\t1.4\\t0.2\\tI. setosa \n","2 4.7\\t3.2\\t1.3\\t0.2\\tI. setosa \n","3 4.6\\t3.1\\t1.5\\t0.2\\tI. setosa \n","4 5.0\\t3.6\\t1.4\\t0.2\\tI. setosa "]},"execution_count":48,"metadata":{},"output_type":"execute_result"}],"source":["pd.read_csv('data/iris.tsv.gz')"]},{"cell_type":"markdown","metadata":{"cell_id":"00080-bb60d975-5ead-4f4d-9220-bbd3e57fb292","deepnote_cell_type":"markdown"},"source":["...in this case, the CSV file does not use commas to separate values. Therefore, we need to specify an extra argument:"]},{"cell_type":"code","execution_count":49,"metadata":{"cell_id":"00081-ecbb62ad-cd8e-4759-a682-18168f4ef43d","deepnote_cell_type":"code","deepnote_to_be_reexecuted":false,"execution_millis":4,"execution_start":1611568226154,"source_hash":"e6cc840f"},"outputs":[{"data":{"text/html":["
\n","\n","
\n"," \n","
\n","
\n","
Sepal length
\n","
Sepal width
\n","
Petal length
\n","
Petal width
\n","
Species
\n","
\n"," \n"," \n","
\n","
0
\n","
5.1
\n","
3.5
\n","
1.4
\n","
0.2
\n","
I. setosa
\n","
\n","
\n","
1
\n","
4.9
\n","
3.0
\n","
1.4
\n","
0.2
\n","
I. setosa
\n","
\n","
\n","
2
\n","
4.7
\n","
3.2
\n","
1.3
\n","
0.2
\n","
I. setosa
\n","
\n","
\n","
3
\n","
4.6
\n","
3.1
\n","
1.5
\n","
0.2
\n","
I. setosa
\n","
\n","
\n","
4
\n","
5.0
\n","
3.6
\n","
1.4
\n","
0.2
\n","
I. setosa
\n","
\n"," \n","
\n","
"],"text/plain":[" Sepal length Sepal width Petal length Petal width Species\n","0 5.1 3.5 1.4 0.2 I. setosa\n","1 4.9 3.0 1.4 0.2 I. setosa\n","2 4.7 3.2 1.3 0.2 I. setosa\n","3 4.6 3.1 1.5 0.2 I. setosa\n","4 5.0 3.6 1.4 0.2 I. setosa"]},"execution_count":49,"metadata":{},"output_type":"execute_result"}],"source":["pd.read_csv(\"data/iris.tsv.gz\", sep='\\t')"]},{"cell_type":"markdown","metadata":{"cell_id":"00085-e8f867c0-6fe2-4ba4-b5a1-c6ea29baed08","deepnote_cell_type":"markdown"},"source":["See the difference?"]},{"cell_type":"markdown","metadata":{"cell_id":"00087-30bc5c76-4595-48c7-8256-c26fe5e87343","deepnote_cell_type":"markdown"},"source":["### Read Excel\n","\n","Let's read the list of U.S. incidents when lasers interfered with airplanes."]},{"cell_type":"code","execution_count":51,"metadata":{"cell_id":"00088-d81339af-9950-4692-87b1-1f1380c2e215","deepnote_cell_type":"code","deepnote_to_be_reexecuted":false,"execution_millis":1509,"execution_start":1611568236481,"source_hash":"f73cd15e"},"outputs":[{"data":{"text/html":["
\n","\n","
\n"," \n","
\n","
\n","
Incident Date
\n","
Incident Time
\n","
Flight ID
\n","
Aircraft
\n","
Altitude
\n","
Airport
\n","
Laser Color
\n","
Injury
\n","
City
\n","
State
\n","
\n"," \n"," \n","
\n","
0
\n","
2019-01-01
\n","
35
\n","
N3EG
\n","
C421
\n","
2500
\n","
SAT
\n","
Green
\n","
No
\n","
San Antonio
\n","
Texas
\n","
\n","
\n","
1
\n","
2019-01-01
\n","
43
\n","
RPA3469
\n","
E75S
\n","
4000
\n","
IAH
\n","
Green
\n","
No
\n","
Houston
\n","
Texas
\n","
\n","
\n","
2
\n","
2019-01-01
\n","
44
\n","
UAL1607
\n","
A319
\n","
4000
\n","
IAH
\n","
Green
\n","
No
\n","
Houston
\n","
Texas
\n","
\n","
\n","
3
\n","
2019-01-01
\n","
110
\n","
N205TM
\n","
BE20
\n","
2500
\n","
HDC
\n","
Green
\n","
No
\n","
Hammond
\n","
Louisiana
\n","
\n","
\n","
4
\n","
2019-01-01
\n","
115
\n","
JIA5233
\n","
CRJ9
\n","
2000
\n","
JAX
\n","
Green
\n","
No
\n","
Jacksonville
\n","
Florida
\n","
\n","
\n","
...
\n","
...
\n","
...
\n","
...
\n","
...
\n","
...
\n","
...
\n","
...
\n","
...
\n","
...
\n","
...
\n","
\n","
\n","
6131
\n","
2019-12-31
\n","
845
\n","
ASH5861
\n","
CRJ9
\n","
3000
\n","
JAN
\n","
Green
\n","
No
\n","
Jackson
\n","
Mississippi
\n","
\n","
\n","
6132
\n","
2019-12-31
\n","
929
\n","
N22P
\n","
CRUZ
\n","
2500
\n","
HNL
\n","
Green
\n","
No
\n","
Honolulu
\n","
Hawaii
\n","
\n","
\n","
6133
\n","
2019-12-31
\n","
2310
\n","
GTH530
\n","
GLF4
\n","
500
\n","
SJU
\n","
White
\n","
No
\n","
Carolina
\n","
Puerto Rico
\n","
\n","
\n","
6134
\n","
2019-12-31
\n","
2312
\n","
AMF6916
\n","
SW4
\n","
600
\n","
SJU
\n","
Green
\n","
No
\n","
Carolina
\n","
Puerto Rico
\n","
\n","
\n","
6135
\n","
2019-12-31
\n","
2327
\n","
N715TH
\n","
C172
\n","
3000
\n","
CHO
\n","
Green
\n","
No
\n","
Charlottesville
\n","
Virginia
\n","
\n"," \n","
\n","
6136 rows × 10 columns
\n","
"],"text/plain":[" Incident Date Incident Time Flight ID Aircraft Altitude Airport \\\n","0 2019-01-01 35 N3EG C421 2500 SAT \n","1 2019-01-01 43 RPA3469 E75S 4000 IAH \n","2 2019-01-01 44 UAL1607 A319 4000 IAH \n","3 2019-01-01 110 N205TM BE20 2500 HDC \n","4 2019-01-01 115 JIA5233 CRJ9 2000 JAX \n","... ... ... ... ... ... ... \n","6131 2019-12-31 845 ASH5861 CRJ9 3000 JAN \n","6132 2019-12-31 929 N22P CRUZ 2500 HNL \n","6133 2019-12-31 2310 GTH530 GLF4 500 SJU \n","6134 2019-12-31 2312 AMF6916 SW4 600 SJU \n","6135 2019-12-31 2327 N715TH C172 3000 CHO \n","\n"," Laser Color Injury City State \n","0 Green No San Antonio Texas \n","1 Green No Houston Texas \n","2 Green No Houston Texas \n","3 Green No Hammond Louisiana \n","4 Green No Jacksonville Florida \n","... ... ... ... ... \n","6131 Green No Jackson Mississippi \n","6132 Green No Honolulu Hawaii \n","6133 White No Carolina Puerto Rico \n","6134 Green No Carolina Puerto Rico \n","6135 Green No Charlottesville Virginia \n","\n","[6136 rows x 10 columns]"]},"execution_count":51,"metadata":{},"output_type":"execute_result"}],"source":["pd.read_excel(\"data/laser_incidents_2019.xlsx\")"]},{"cell_type":"markdown","metadata":{"cell_id":"00083-77ddcd20-cd38-4097-a860-c3937f532502","deepnote_cell_type":"markdown"},"source":["Note: This reads just the first sheet from the file. If you want to extract more sheets, you will need to use the `pandas.'ExcelFile` class. See the [relevant part](https://pandas.pydata.org/pandas-docs/stable/user_guide/io.html#reading-excel-files) of the documentation."]},{"cell_type":"markdown","metadata":{"cell_id":"00095-f0b29e54-ff51-488c-84af-4e69ffd6ecde","deepnote_cell_type":"markdown"},"source":["### Read HTML (Optional)\n","\n","Pandas is able to scrape data from tables embedded in web pages using the `read_html` function.\n","This might or might not bring you good results and probably you will have to tweak your\n","data frame manually. But it is a good starting point - much better than being forced to parse\n","the HTML ourselves!"]},{"cell_type":"code","execution_count":53,"metadata":{"cell_id":"00096-5eb09cb2-b8f9-4c84-b2c5-cb8d57a8fd20","deepnote_cell_type":"code","deepnote_to_be_reexecuted":false,"execution_millis":128,"execution_start":1611568290755,"source_hash":"5920828f"},"outputs":[{"data":{"text/plain":["(list, 9)"]},"execution_count":53,"metadata":{},"output_type":"execute_result"}],"source":["tables = pd.read_html(\"https://en.wikipedia.org/wiki/List_of_laser_types\")\n","type(tables), len(tables)"]},{"cell_type":"code","execution_count":54,"metadata":{"cell_id":"00086-b66016d7-5d0d-4a7f-975b-fd7d023d0967","deepnote_cell_type":"code","deepnote_to_be_reexecuted":false,"execution_millis":8,"execution_start":1611568296111,"source_hash":"6717b7e4"},"outputs":[{"data":{"text/html":["
\n","\n","
\n"," \n","
\n","
\n","
Laser gain medium and type
\n","
Operation wavelength(s)
\n","
Pump source
\n","
Applications and notes
\n","
\n"," \n"," \n","
\n","
0
\n","
Helium–neon laser
\n","
632.8 nm (543.5 nm, 593.9 nm, 611.8 nm, 1.1523...
\n","
Electrical discharge
\n","
Interferometry, holography, spectroscopy, barc...
\n","
\n","
\n","
1
\n","
Argon laser
\n","
454.6 nm, 488.0 nm, 514.5 nm (351 nm, 363.8, 4...
\n","
Electrical discharge
\n","
Retinal phototherapy (for diabetes), lithograp...
\n","
\n","
\n","
2
\n","
Krypton laser
\n","
416 nm, 530.9 nm, 568.2 nm, 647.1 nm, 676.4 nm...
\n","
Electrical discharge
\n","
Scientific research, mixed with argon to creat...
\n","
\n","
\n","
3
\n","
Xenon ion laser
\n","
Many lines throughout visible spectrum extendi...
\n","
Electrical discharge
\n","
Scientific research.
\n","
\n","
\n","
4
\n","
Nitrogen laser
\n","
337.1 nm
\n","
Electrical discharge
\n","
Pumping of dye lasers, measuring air pollution...
\n","
\n","
\n","
5
\n","
Carbon dioxide laser
\n","
10.6 μm, (9.4 μm)
\n","
Transverse (high-power) or longitudinal (low-p...
\n","
Material processing (laser cutting, laser beam...
\n","
\n","
\n","
6
\n","
Carbon monoxide laser
\n","
2.6 to 4 μm, 4.8 to 8.3 μm
\n","
Electrical discharge
\n","
Material processing (engraving, welding, etc.)...
\n","
\n","
\n","
7
\n","
Excimer laser
\n","
157 nm (F2), 193.3 nm (ArF), 248 nm (KrF), 308...
\n","
Excimer recombination via electrical discharge
\n","
Ultraviolet lithography for semiconductor manu...
\n","
\n"," \n","
\n","
"],"text/plain":[" Laser gain medium and type \\\n","0 Helium–neon laser \n","1 Argon laser \n","2 Krypton laser \n","3 Xenon ion laser \n","4 Nitrogen laser \n","5 Carbon dioxide laser \n","6 Carbon monoxide laser \n","7 Excimer laser \n","\n"," Operation wavelength(s) \\\n","0 632.8 nm (543.5 nm, 593.9 nm, 611.8 nm, 1.1523... \n","1 454.6 nm, 488.0 nm, 514.5 nm (351 nm, 363.8, 4... \n","2 416 nm, 530.9 nm, 568.2 nm, 647.1 nm, 676.4 nm... \n","3 Many lines throughout visible spectrum extendi... \n","4 337.1 nm \n","5 10.6 μm, (9.4 μm) \n","6 2.6 to 4 μm, 4.8 to 8.3 μm \n","7 157 nm (F2), 193.3 nm (ArF), 248 nm (KrF), 308... \n","\n"," Pump source \\\n","0 Electrical discharge \n","1 Electrical discharge \n","2 Electrical discharge \n","3 Electrical discharge \n","4 Electrical discharge \n","5 Transverse (high-power) or longitudinal (low-p... \n","6 Electrical discharge \n","7 Excimer recombination via electrical discharge \n","\n"," Applications and notes \n","0 Interferometry, holography, spectroscopy, barc... \n","1 Retinal phototherapy (for diabetes), lithograp... \n","2 Scientific research, mixed with argon to creat... \n","3 Scientific research. \n","4 Pumping of dye lasers, measuring air pollution... \n","5 Material processing (laser cutting, laser beam... \n","6 Material processing (engraving, welding, etc.)... \n","7 Ultraviolet lithography for semiconductor manu... "]},"execution_count":54,"metadata":{},"output_type":"execute_result"}],"source":["tables[1]"]},{"cell_type":"code","execution_count":55,"metadata":{"cell_id":"00087-6c3dba25-3a3b-4dd2-b50a-38f402dfd000","deepnote_cell_type":"code","deepnote_to_be_reexecuted":false,"execution_millis":14,"execution_start":1611568297875,"source_hash":"c007c36a"},"outputs":[{"data":{"text/html":["
\n","\n","
\n"," \n","
\n","
\n","
Laser gain medium and type
\n","
Operation wavelength(s)
\n","
Pump source
\n","
Applications and notes
\n","
\n"," \n"," \n","
\n","
0
\n","
Hydrogen fluoride laser
\n","
2.7 to 2.9 μm for hydrogen fluoride (<80% atmo...
\n","
Chemical reaction in a burning jet of ethylene...
\n","
Used in research for laser weaponry, operated ...
\n","
\n","
\n","
1
\n","
Deuterium fluoride laser
\n","
~3800 nm (3.6 to 4.2 μm) (~90% atm. transmitta...
\n","
chemical reaction
\n","
US military laser prototypes.
\n","
\n","
\n","
2
\n","
COIL (chemical oxygen–iodine laser)
\n","
1.315 μm (<70% atmospheric transmittance)
\n","
Chemical reaction in a jet of singlet delta ox...
\n","
Military lasers, scientific and materials rese...
\n","
\n","
\n","
3
\n","
Agil (All gas-phase iodine laser)
\n","
1.315 μm (<70% atmospheric transmittance)
\n","
Chemical reaction of chlorine atoms with gaseo...
\n","
Scientific, weaponry, aerospace.
\n","
\n"," \n","
\n","
"],"text/plain":[" Laser gain medium and type \\\n","0 Hydrogen fluoride laser \n","1 Deuterium fluoride laser \n","2 COIL (chemical oxygen–iodine laser) \n","3 Agil (All gas-phase iodine laser) \n","\n"," Operation wavelength(s) \\\n","0 2.7 to 2.9 μm for hydrogen fluoride (<80% atmo... \n","1 ~3800 nm (3.6 to 4.2 μm) (~90% atm. transmitta... \n","2 1.315 μm (<70% atmospheric transmittance) \n","3 1.315 μm (<70% atmospheric transmittance) \n","\n"," Pump source \\\n","0 Chemical reaction in a burning jet of ethylene... \n","1 chemical reaction \n","2 Chemical reaction in a jet of singlet delta ox... \n","3 Chemical reaction of chlorine atoms with gaseo... \n","\n"," Applications and notes \n","0 Used in research for laser weaponry, operated ... \n","1 US military laser prototypes. \n","2 Military lasers, scientific and materials rese... \n","3 Scientific, weaponry, aerospace. "]},"execution_count":55,"metadata":{},"output_type":"execute_result"}],"source":["tables[2]"]},{"cell_type":"markdown","metadata":{"cell_id":"00099-84a117bf-82b7-420c-8897-b6b7ccac564a","deepnote_cell_type":"markdown"},"source":["### Write CSV\n","\n","Pandas is able to write to many various formats but the usage is similar. "]},{"cell_type":"code","execution_count":56,"metadata":{"cell_id":"00100-43addc0e-d2c6-4fb4-8008-aafc629b4bd6","deepnote_cell_type":"code","deepnote_to_be_reexecuted":false,"execution_millis":7,"execution_start":1611568306930,"source_hash":"5d15ec0c"},"outputs":[],"source":["tables[1].to_csv(\"gas_lasers.csv\", index=False)"]},{"cell_type":"markdown","metadata":{"cell_id":"00108-01ae14f6-543b-47d2-8e7b-349ae95ed116","deepnote_cell_type":"markdown"},"source":["## Data analysis (very basics)\n","\n","Let's extend the data of laser incidents to a broader time range and read the data from a summary CSV file:"]},{"cell_type":"code","execution_count":58,"metadata":{"cell_id":"00211-63078b55-fe36-4053-af3d-2e62e30fe3d1","deepnote_cell_type":"code","deepnote_to_be_reexecuted":false,"execution_millis":109,"execution_start":1611579768500,"source_hash":"cd0f9759","tags":[]},"outputs":[],"source":["laser_incidents_raw = pd.read_csv(\"data/laser_incidents_2015-2020.csv\")"]},{"cell_type":"markdown","metadata":{"cell_id":"00106-2b91f7bb-016c-4e79-ba08-114067e1538e","deepnote_cell_type":"markdown"},"source":["Let's see what we have here..."]},{"cell_type":"code","execution_count":59,"metadata":{"cell_id":"00109-7585c80e-026a-42ee-a30c-818618f792fb","deepnote_cell_type":"code","deepnote_to_be_reexecuted":false,"execution_millis":89,"execution_start":1611570270491,"source_hash":"8bb9bcc1"},"outputs":[{"data":{"text/html":["
\n","\n","
\n"," \n","
\n","
\n","
Unnamed: 0
\n","
Incident Date
\n","
Incident Time
\n","
Flight ID
\n","
Aircraft
\n","
Altitude
\n","
Airport
\n","
Laser Color
\n","
Injury
\n","
City
\n","
State
\n","
timestamp
\n","
\n"," \n"," \n","
\n","
0
\n","
0
\n","
2020-01-01
\n","
148.0
\n","
N424RP
\n","
DA42/A
\n","
8500.0
\n","
SBA
\n","
green
\n","
False
\n","
Santa Barbara
\n","
California
\n","
2020-01-01 01:48:00
\n","
\n","
\n","
1
\n","
1
\n","
2020-01-01
\n","
155.0
\n","
AMF1829
\n","
B190
\n","
40000.0
\n","
SSF
\n","
green
\n","
False
\n","
San Antonio
\n","
Texas
\n","
2020-01-01 01:55:00
\n","
\n","
\n","
2
\n","
2
\n","
2020-01-01
\n","
214.0
\n","
NKS1881
\n","
A320
\n","
2500.0
\n","
TPA
\n","
green
\n","
False
\n","
Tampa
\n","
Florida
\n","
2020-01-01 02:14:00
\n","
\n","
\n","
3
\n","
3
\n","
2020-01-01
\n","
217.0
\n","
FDX3873
\n","
B763
\n","
3000.0
\n","
DFW
\n","
green
\n","
False
\n","
Fort Worth
\n","
Texas
\n","
2020-01-01 02:17:00
\n","
\n","
\n","
4
\n","
4
\n","
2020-01-01
\n","
218.0
\n","
SWA3635
\n","
B739
\n","
11000.0
\n","
MOD
\n","
green
\n","
False
\n","
Modesto
\n","
California
\n","
2020-01-01 02:18:00
\n","
\n"," \n","
\n","
"],"text/plain":[" Unnamed: 0 Incident Date Incident Time Flight ID Aircraft Altitude \\\n","0 0 2020-01-01 148.0 N424RP DA42/A 8500.0 \n","1 1 2020-01-01 155.0 AMF1829 B190 40000.0 \n","2 2 2020-01-01 214.0 NKS1881 A320 2500.0 \n","3 3 2020-01-01 217.0 FDX3873 B763 3000.0 \n","4 4 2020-01-01 218.0 SWA3635 B739 11000.0 \n","\n"," Airport Laser Color Injury City State timestamp \n","0 SBA green False Santa Barbara California 2020-01-01 01:48:00 \n","1 SSF green False San Antonio Texas 2020-01-01 01:55:00 \n","2 TPA green False Tampa Florida 2020-01-01 02:14:00 \n","3 DFW green False Fort Worth Texas 2020-01-01 02:17:00 \n","4 MOD green False Modesto California 2020-01-01 02:18:00 "]},"execution_count":59,"metadata":{},"output_type":"execute_result"}],"source":["laser_incidents_raw.head()"]},{"cell_type":"code","execution_count":60,"metadata":{"cell_id":"00110-5ecc71e7-2c54-4854-825e-06f53abc63bd","deepnote_cell_type":"code","deepnote_to_be_reexecuted":false,"execution_millis":29,"execution_start":1611570286251,"source_hash":"2e516b33"},"outputs":[{"data":{"text/html":["
\n","\n","
\n"," \n","
\n","
\n","
Unnamed: 0
\n","
Incident Date
\n","
Incident Time
\n","
Flight ID
\n","
Aircraft
\n","
Altitude
\n","
Airport
\n","
Laser Color
\n","
Injury
\n","
City
\n","
State
\n","
timestamp
\n","
\n"," \n"," \n","
\n","
36458
\n","
36458
\n","
2015-12-31
\n","
525.0
\n","
VRD917
\n","
A320 (AIRBUS - A-32
\n","
8000.0
\n","
LAS
\n","
green
\n","
False
\n","
Las Vegas
\n","
Nevada
\n","
2015-12-31 05:25:00
\n","
\n","
\n","
36459
\n","
36459
\n","
2015-12-31
\n","
623.0
\n","
DAL2371
\n","
B738 (BOEING - 737-
\n","
11000.0
\n","
LHM
\n","
green
\n","
False
\n","
Lincoln
\n","
California
\n","
2015-12-31 06:23:00
\n","
\n","
\n","
36460
\n","
36460
\n","
2015-12-31
\n","
1111.0
\n","
Unknown
\n","
Unknown
\n","
2000.0
\n","
FOK
\n","
green
\n","
False
\n","
Westhampton Beach
\n","
New York
\n","
2015-12-31 11:11:00
\n","
\n","
\n","
36461
\n","
36461
\n","
2015-12-31
\n","
1147.0
\n","
UAL197
\n","
B737
\n","
300.0
\n","
GUM
\n","
green
\n","
False
\n","
Guam
\n","
Guam
\n","
2015-12-31 11:47:00
\n","
\n","
\n","
36462
\n","
36462
\n","
2015-12-31
\n","
2314.0
\n","
EJA336
\n","
E55P/L
\n","
1000.0
\n","
APF
\n","
green
\n","
False
\n","
Naples
\n","
Florida
\n","
2015-12-31 23:14:00
\n","
\n"," \n","
\n","
"],"text/plain":[" Unnamed: 0 Incident Date Incident Time Flight ID Aircraft \\\n","36458 36458 2015-12-31 525.0 VRD917 A320 (AIRBUS - A-32 \n","36459 36459 2015-12-31 623.0 DAL2371 B738 (BOEING - 737- \n","36460 36460 2015-12-31 1111.0 Unknown Unknown \n","36461 36461 2015-12-31 1147.0 UAL197 B737 \n","36462 36462 2015-12-31 2314.0 EJA336 E55P/L \n","\n"," Altitude Airport Laser Color Injury City State \\\n","36458 8000.0 LAS green False Las Vegas Nevada \n","36459 11000.0 LHM green False Lincoln California \n","36460 2000.0 FOK green False Westhampton Beach New York \n","36461 300.0 GUM green False Guam Guam \n","36462 1000.0 APF green False Naples Florida \n","\n"," timestamp \n","36458 2015-12-31 05:25:00 \n","36459 2015-12-31 06:23:00 \n","36460 2015-12-31 11:11:00 \n","36461 2015-12-31 11:47:00 \n","36462 2015-12-31 23:14:00 "]},"execution_count":60,"metadata":{},"output_type":"execute_result"}],"source":["laser_incidents_raw.tail()"]},{"cell_type":"markdown","metadata":{"cell_id":"00111-a4b4c017-88ac-46b5-8108-540b9a009d64","deepnote_cell_type":"markdown"},"source":["For an unknown, potentially unevenly distributed dataset, looking at the beginning / end is typically not the best idea. We'd rather sample randomly:"]},{"cell_type":"code","execution_count":61,"metadata":{"cell_id":"00112-e1b12e12-d950-4faa-a3b8-f26c2c7700f0","deepnote_cell_type":"code","deepnote_to_be_reexecuted":false,"execution_millis":9,"execution_start":1611570332518,"source_hash":"f966e514"},"outputs":[{"data":{"text/html":["
\n","\n","
\n"," \n","
\n","
\n","
Unnamed: 0
\n","
Incident Date
\n","
Incident Time
\n","
Flight ID
\n","
Aircraft
\n","
Altitude
\n","
Airport
\n","
Laser Color
\n","
Injury
\n","
City
\n","
State
\n","
timestamp
\n","
\n"," \n"," \n","
\n","
13749
\n","
13749
\n","
2018-10-23
\n","
306.0
\n","
DAL356
\n","
B738
\n","
8000.0
\n","
MSP
\n","
green
\n","
False
\n","
Minneapolis
\n","
Minnesota
\n","
2018-10-23 03:06:00
\n","
\n","
\n","
14397
\n","
14397
\n","
2018-12-04
\n","
17.0
\n","
LBQ784
\n","
PC12/G
\n","
15000.0
\n","
JAX
\n","
green
\n","
False
\n","
Jacksonville
\n","
Florida
\n","
NaN
\n","
\n","
\n","
11645
\n","
11645
\n","
2018-06-01
\n","
601.0
\n","
AAL301
\n","
B738
\n","
6000.0
\n","
SLC
\n","
red
\n","
False
\n","
Salt Lake City
\n","
Utah
\n","
2018-06-01 06:01:00
\n","
\n","
\n","
5772
\n","
5772
\n","
2019-06-20
\n","
355.0
\n","
PFT574
\n","
C560
\n","
5000.0
\n","
LAS
\n","
blue
\n","
False
\n","
Las Vegas
\n","
Nevada
\n","
2019-06-20 03:55:00
\n","
\n","
\n","
22561
\n","
22561
\n","
2016-02-08
\n","
600.0
\n","
UAL249
\n","
Unknown
\n","
13000.0
\n","
T41
\n","
green
\n","
False
\n","
LA Porte
\n","
Texas
\n","
2016-02-08 06:00:00
\n","
\n","
\n","
18574
\n","
18574
\n","
2017-08-11
\n","
445.0
\n","
DAL2974
\n","
B712
\n","
4000.0
\n","
PDX
\n","
green
\n","
False
\n","
Portland
\n","
Oregon
\n","
2017-08-11 04:45:00
\n","
\n","
\n","
14960
\n","
14960
\n","
2018-12-31
\n","
623.0
\n","
SWA2042
\n","
B737
\n","
6000.0
\n","
HWD
\n","
green
\n","
False
\n","
Hayward
\n","
California
\n","
2018-12-31 06:23:00
\n","
\n","
\n","
24922
\n","
24922
\n","
2016-06-17
\n","
524.0
\n","
N522LG
\n","
COL4
\n","
7000.0
\n","
ELP
\n","
green
\n","
False
\n","
El Paso
\n","
Texas
\n","
2016-06-17 05:24:00
\n","
\n","
\n","
31425
\n","
31425
\n","
2015-06-10
\n","
213.0
\n","
RPA4266
\n","
E170
\n","
2500.0
\n","
IND
\n","
green
\n","
False
\n","
Indianapolis
\n","
Indiana
\n","
2015-06-10 02:13:00
\n","
\n","
\n","
668
\n","
668
\n","
2020-02-07
\n","
248.0
\n","
SWA1251
\n","
B737
\n","
10500.0
\n","
SAT
\n","
green and red
\n","
False
\n","
San Antonio
\n","
Texas
\n","
2020-02-07 02:48:00
\n","
\n"," \n","
\n","
"],"text/plain":[" Unnamed: 0 Incident Date Incident Time Flight ID Aircraft Altitude \\\n","13749 13749 2018-10-23 306.0 DAL356 B738 8000.0 \n","14397 14397 2018-12-04 17.0 LBQ784 PC12/G 15000.0 \n","11645 11645 2018-06-01 601.0 AAL301 B738 6000.0 \n","5772 5772 2019-06-20 355.0 PFT574 C560 5000.0 \n","22561 22561 2016-02-08 600.0 UAL249 Unknown 13000.0 \n","18574 18574 2017-08-11 445.0 DAL2974 B712 4000.0 \n","14960 14960 2018-12-31 623.0 SWA2042 B737 6000.0 \n","24922 24922 2016-06-17 524.0 N522LG COL4 7000.0 \n","31425 31425 2015-06-10 213.0 RPA4266 E170 2500.0 \n","668 668 2020-02-07 248.0 SWA1251 B737 10500.0 \n","\n"," Airport Laser Color Injury City State \\\n","13749 MSP green False Minneapolis Minnesota \n","14397 JAX green False Jacksonville Florida \n","11645 SLC red False Salt Lake City Utah \n","5772 LAS blue False Las Vegas Nevada \n","22561 T41 green False LA Porte Texas \n","18574 PDX green False Portland Oregon \n","14960 HWD green False Hayward California \n","24922 ELP green False El Paso Texas \n","31425 IND green False Indianapolis Indiana \n","668 SAT green and red False San Antonio Texas \n","\n"," timestamp \n","13749 2018-10-23 03:06:00 \n","14397 NaN \n","11645 2018-06-01 06:01:00 \n","5772 2019-06-20 03:55:00 \n","22561 2016-02-08 06:00:00 \n","18574 2017-08-11 04:45:00 \n","14960 2018-12-31 06:23:00 \n","24922 2016-06-17 05:24:00 \n","31425 2015-06-10 02:13:00 \n","668 2020-02-07 02:48:00 "]},"execution_count":61,"metadata":{},"output_type":"execute_result"}],"source":["# Show a few examples\n","laser_incidents_raw.sample(10)"]},{"cell_type":"code","execution_count":62,"metadata":{"cell_id":"00223-f8a014e3-05b5-4aad-a946-9f9318503bcb","deepnote_cell_type":"code","deepnote_to_be_reexecuted":false,"execution_millis":1,"execution_start":1611579998912,"scrolled":true,"source_hash":"c825f3d4","tags":[]},"outputs":[{"data":{"text/plain":["Unnamed: 0 int64\n","Incident Date object\n","Incident Time float64\n","Flight ID object\n","Aircraft object\n","Altitude float64\n","Airport object\n","Laser Color object\n","Injury object\n","City object\n","State object\n","timestamp object\n","dtype: object"]},"execution_count":62,"metadata":{},"output_type":"execute_result"}],"source":["laser_incidents_raw.dtypes"]},{"attachments":{},"cell_type":"markdown","metadata":{},"source":["The topic of data cleaning and pre-processing is very broad. We will limit ourselves to dropping unused columns and converting one to a proper type."]},{"cell_type":"code","execution_count":63,"metadata":{},"outputs":[{"data":{"text/html":["
\n","\n","
\n"," \n","
\n","
\n","
Flight ID
\n","
Aircraft
\n","
Altitude
\n","
Airport
\n","
Laser Color
\n","
Injury
\n","
City
\n","
State
\n","
timestamp
\n","
\n"," \n"," \n","
\n","
0
\n","
N424RP
\n","
DA42/A
\n","
8500.0
\n","
SBA
\n","
green
\n","
False
\n","
Santa Barbara
\n","
California
\n","
2020-01-01 01:48:00
\n","
\n","
\n","
1
\n","
AMF1829
\n","
B190
\n","
40000.0
\n","
SSF
\n","
green
\n","
False
\n","
San Antonio
\n","
Texas
\n","
2020-01-01 01:55:00
\n","
\n","
\n","
2
\n","
NKS1881
\n","
A320
\n","
2500.0
\n","
TPA
\n","
green
\n","
False
\n","
Tampa
\n","
Florida
\n","
2020-01-01 02:14:00
\n","
\n","
\n","
3
\n","
FDX3873
\n","
B763
\n","
3000.0
\n","
DFW
\n","
green
\n","
False
\n","
Fort Worth
\n","
Texas
\n","
2020-01-01 02:17:00
\n","
\n","
\n","
4
\n","
SWA3635
\n","
B739
\n","
11000.0
\n","
MOD
\n","
green
\n","
False
\n","
Modesto
\n","
California
\n","
2020-01-01 02:18:00
\n","
\n","
\n","
...
\n","
...
\n","
...
\n","
...
\n","
...
\n","
...
\n","
...
\n","
...
\n","
...
\n","
...
\n","
\n","
\n","
36458
\n","
VRD917
\n","
A320 (AIRBUS - A-32
\n","
8000.0
\n","
LAS
\n","
green
\n","
False
\n","
Las Vegas
\n","
Nevada
\n","
2015-12-31 05:25:00
\n","
\n","
\n","
36459
\n","
DAL2371
\n","
B738 (BOEING - 737-
\n","
11000.0
\n","
LHM
\n","
green
\n","
False
\n","
Lincoln
\n","
California
\n","
2015-12-31 06:23:00
\n","
\n","
\n","
36460
\n","
Unknown
\n","
Unknown
\n","
2000.0
\n","
FOK
\n","
green
\n","
False
\n","
Westhampton Beach
\n","
New York
\n","
2015-12-31 11:11:00
\n","
\n","
\n","
36461
\n","
UAL197
\n","
B737
\n","
300.0
\n","
GUM
\n","
green
\n","
False
\n","
Guam
\n","
Guam
\n","
2015-12-31 11:47:00
\n","
\n","
\n","
36462
\n","
EJA336
\n","
E55P/L
\n","
1000.0
\n","
APF
\n","
green
\n","
False
\n","
Naples
\n","
Florida
\n","
2015-12-31 23:14:00
\n","
\n"," \n","
\n","
36463 rows × 9 columns
\n","
"],"text/plain":[" Flight ID Aircraft Altitude Airport Laser Color Injury \\\n","0 N424RP DA42/A 8500.0 SBA green False \n","1 AMF1829 B190 40000.0 SSF green False \n","2 NKS1881 A320 2500.0 TPA green False \n","3 FDX3873 B763 3000.0 DFW green False \n","4 SWA3635 B739 11000.0 MOD green False \n","... ... ... ... ... ... ... \n","36458 VRD917 A320 (AIRBUS - A-32 8000.0 LAS green False \n","36459 DAL2371 B738 (BOEING - 737- 11000.0 LHM green False \n","36460 Unknown Unknown 2000.0 FOK green False \n","36461 UAL197 B737 300.0 GUM green False \n","36462 EJA336 E55P/L 1000.0 APF green False \n","\n"," City State timestamp \n","0 Santa Barbara California 2020-01-01 01:48:00 \n","1 San Antonio Texas 2020-01-01 01:55:00 \n","2 Tampa Florida 2020-01-01 02:14:00 \n","3 Fort Worth Texas 2020-01-01 02:17:00 \n","4 Modesto California 2020-01-01 02:18:00 \n","... ... ... ... \n","36458 Las Vegas Nevada 2015-12-31 05:25:00 \n","36459 Lincoln California 2015-12-31 06:23:00 \n","36460 Westhampton Beach New York 2015-12-31 11:11:00 \n","36461 Guam Guam 2015-12-31 11:47:00 \n","36462 Naples Florida 2015-12-31 23:14:00 \n","\n","[36463 rows x 9 columns]"]},"execution_count":63,"metadata":{},"output_type":"execute_result"}],"source":["# The first three are not needed\n","laser_incidents = laser_incidents_raw.drop(columns=laser_incidents_raw.columns[:3])\n","\n","# We convert the timestamp\n","laser_incidents = laser_incidents.assign(\n"," timestamp = pd.to_datetime(laser_incidents[\"timestamp\"])\n",")\n","laser_incidents"]},{"cell_type":"code","execution_count":64,"metadata":{},"outputs":[{"data":{"text/plain":["Flight ID object\n","Aircraft object\n","Altitude float64\n","Airport object\n","Laser Color object\n","Injury object\n","City object\n","State object\n","timestamp datetime64[ns]\n","dtype: object"]},"execution_count":64,"metadata":{},"output_type":"execute_result"}],"source":["laser_incidents.dtypes"]},{"cell_type":"markdown","metadata":{"cell_id":"00116-c11f30a8-213d-43d0-a266-05c178f5bdb1","deepnote_cell_type":"markdown"},"source":["#### Categorical dtype (Optional)"]},{"cell_type":"markdown","metadata":{"cell_id":"00118-40976ed8-11f5-4d81-9edf-4ecbb8a509c2","deepnote_cell_type":"markdown"},"source":["To analyze **Laser Color**, we can look at its typical values."]},{"cell_type":"code","execution_count":65,"metadata":{"cell_id":"00119-1185825a-60ae-4324-9791-75307c0c4d40","deepnote_cell_type":"code","deepnote_to_be_reexecuted":false,"execution_millis":1,"execution_start":1611580058236,"source_hash":"7a451c24"},"outputs":[{"data":{"text/plain":["count 36461\n","unique 73\n","top green\n","freq 32787\n","Name: Laser Color, dtype: object"]},"execution_count":65,"metadata":{},"output_type":"execute_result"}],"source":["laser_incidents[\"Laser Color\"].describe()"]},{"cell_type":"markdown","metadata":{"cell_id":"00120-530cf793-62f5-4dc9-85d3-9322a290acda","deepnote_cell_type":"markdown"},"source":["Not too many different values."]},{"cell_type":"code","execution_count":66,"metadata":{"cell_id":"00121-fc1d1882-0e50-4e84-81b5-b07428dcec93","deepnote_cell_type":"code","deepnote_to_be_reexecuted":false,"execution_millis":4,"execution_start":1611580061642,"source_hash":"bb7bc601"},"outputs":[{"data":{"text/plain":["array(['green', 'purple', 'blue', 'unknown', 'red', 'white',\n"," 'green and white', 'white and green', 'green and yellow',\n"," 'multiple', 'unknwn', 'green and purple', 'green and red',\n"," 'red and green', 'green and blue', 'blue and purple',\n"," 'red white and blue', 'blue and green', 'blue or purple',\n"," 'blue or green', 'yellow/orange', 'blue/purple', 'unkwn', 'orange',\n"," 'multi', 'yellow and white', 'blue and white', 'white or amber',\n"," 'red and white', 'yellow', 'amber', 'yellow and green',\n"," 'white and blue', 'red, blue, and green', 'purple-blue',\n"," 'red and blue', 'magenta', 'phx', 'green or blue', 'red or green',\n"," 'green or red', 'green, blue or purple', 'blue and red', 'unkn',\n"," 'blue-green', 'multi-colored', nan, 'blue-yellow',\n"," 'white or green', 'green and orange', 'white-green-red',\n"," 'multicolored', 'green-white', 'blue or white', 'green red blue',\n"," 'green or white', 'blue -green', 'green-red', 'green-blue',\n"," 'multi-color', 'green-yellow', 'red-white', 'blue-purple',\n"," 'white-yellow', 'green-purple', 'lavender', 'orange-red',\n"," 'blue-white', 'blue-red', 'yellow-white', 'red-green',\n"," 'white-green', 'white-blue', 'white-red'], dtype=object)"]},"execution_count":66,"metadata":{},"output_type":"execute_result"}],"source":["laser_incidents[\"Laser Color\"].unique()"]},{"cell_type":"code","execution_count":67,"metadata":{"cell_id":"00122-71fc39cc-49e9-4fdf-a691-f327233079ec","deepnote_cell_type":"code","deepnote_to_be_reexecuted":false,"execution_millis":0,"execution_start":1611580067236,"scrolled":true,"source_hash":"e58027f8"},"outputs":[{"data":{"text/plain":["Laser Color\n","green 0.899235\n","blue 0.046790\n","red 0.012260\n","white 0.010395\n","unkn 0.009051\n"," ... \n","red or green 0.000027\n","white or green 0.000027\n","blue-yellow 0.000027\n","multi-colored 0.000027\n","white-red 0.000027\n","Name: proportion, Length: 73, dtype: float64"]},"execution_count":67,"metadata":{},"output_type":"execute_result"}],"source":["laser_incidents[\"Laser Color\"].value_counts(normalize=True)"]},{"cell_type":"markdown","metadata":{"cell_id":"00123-029b8467-6cef-43db-b365-382cf1a7391a","deepnote_cell_type":"markdown"},"source":["This column is a very good candidate to turn into a pandas-special, **Categorical** data type. (See https://pandas.pydata.org/pandas-docs/stable/user_guide/categorical.html)"]},{"cell_type":"code","execution_count":68,"metadata":{"cell_id":"00124-fd191f1d-375f-4f3f-a0c8-da2cc5a619cd","deepnote_cell_type":"code","deepnote_to_be_reexecuted":false,"execution_millis":5,"execution_start":1611580076427,"source_hash":"e2654309"},"outputs":[{"data":{"text/plain":["2261216"]},"execution_count":68,"metadata":{},"output_type":"execute_result"}],"source":["laser_incidents[\"Laser Color\"].memory_usage(deep=True) # ~60 bytes per item"]},{"cell_type":"code","execution_count":69,"metadata":{"cell_id":"00125-49305ac3-2935-4f85-960e-34417275872a","deepnote_cell_type":"code","deepnote_to_be_reexecuted":false,"execution_millis":1,"execution_start":1611580080121,"source_hash":"ac02b36b"},"outputs":[{"data":{"text/plain":["16027 green\n","17144 green\n","18133 green\n","6309 green\n","26757 green\n","6907 green\n","36042 green\n","21744 green\n","34013 green\n","17587 green\n","Name: Laser Color, dtype: category\n","Categories (73, object): ['amber', 'blue', 'blue -green', 'blue and green', ..., 'yellow and green', 'yellow and white', 'yellow-white', 'yellow/orange']"]},"execution_count":69,"metadata":{},"output_type":"execute_result"}],"source":["color_category = laser_incidents[\"Laser Color\"].astype(\"category\")\n","color_category.sample(10)"]},{"cell_type":"code","execution_count":70,"metadata":{"cell_id":"00126-c2413840-6826-454a-8c34-383331e41144","deepnote_cell_type":"code","deepnote_to_be_reexecuted":false,"execution_millis":0,"execution_start":1611580083584,"scrolled":false,"source_hash":"31548793"},"outputs":[{"data":{"text/plain":["43668"]},"execution_count":70,"metadata":{},"output_type":"execute_result"}],"source":["color_category.memory_usage(deep=True) # ~1-2 bytes per item"]},{"cell_type":"markdown","metadata":{"cell_id":"00127-ed3d49a2-d39b-4558-81cb-b7260f4c9ca8","deepnote_cell_type":"markdown"},"source":["**Exercise:** Are there any other columns in the dataset that you would suggest for conversion to categorical?"]},{"cell_type":"markdown","metadata":{"cell_id":"00123-f82612c3-e4f2-43e3-ab76-e5523d66b1ef","deepnote_cell_type":"markdown","tags":[]},"source":["#### Integer vs. float"]},{"cell_type":"markdown","metadata":{"cell_id":"00128-322171db-56d4-43fe-bfbc-7d17ed3b7082","deepnote_cell_type":"markdown"},"source":["Pandas is generally quite good at guessing (inferring) number types. \n","You may wonder why `Altitude` is float and not int though. \n","This is a consequence of not having an integer nan in numpy. There's been many discussions about this."]},{"cell_type":"code","execution_count":71,"metadata":{"cell_id":"00129-af1ce659-ef22-4ba5-a25a-28421dfcf478","deepnote_cell_type":"code","deepnote_to_be_reexecuted":false,"execution_millis":0,"execution_start":1611580131568,"scrolled":true,"source_hash":"8bc46429"},"outputs":[{"data":{"text/plain":["0 8500.0\n","1 40000.0\n","2 2500.0\n","3 3000.0\n","4 11000.0\n"," ... \n","36458 8000.0\n","36459 11000.0\n","36460 2000.0\n","36461 300.0\n","36462 1000.0\n","Name: Altitude, Length: 36463, dtype: float64"]},"execution_count":71,"metadata":{},"output_type":"execute_result"}],"source":["laser_incidents[\"Altitude\"]"]},{"cell_type":"code","execution_count":72,"metadata":{"cell_id":"00130-75ec543c-44c3-4559-8383-2a2255de17f0","deepnote_cell_type":"code","deepnote_to_be_reexecuted":false,"execution_millis":194,"execution_start":1611580134594,"scrolled":true,"source_hash":"acd13dfc"},"outputs":[{"ename":"IntCastingNaNError","evalue":"Cannot convert non-finite values (NA or inf) to integer","output_type":"error","traceback":["\u001b[0;31m---------------------------------------------------------------------------\u001b[0m","\u001b[0;31mIntCastingNaNError\u001b[0m Traceback (most recent call last)","Cell \u001b[0;32mIn[72], line 1\u001b[0m\n\u001b[0;32m----> 1\u001b[0m \u001b[43mlaser_incidents\u001b[49m\u001b[43m[\u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mAltitude\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m]\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mastype\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;28;43mint\u001b[39;49m\u001b[43m)\u001b[49m\n","File \u001b[0;32m~/mambaforge/envs/python-fjfi/lib/python3.9/site-packages/pandas/core/generic.py:6643\u001b[0m, in \u001b[0;36mNDFrame.astype\u001b[0;34m(self, dtype, copy, errors)\u001b[0m\n\u001b[1;32m 6637\u001b[0m results \u001b[38;5;241m=\u001b[39m [\n\u001b[1;32m 6638\u001b[0m ser\u001b[38;5;241m.\u001b[39mastype(dtype, copy\u001b[38;5;241m=\u001b[39mcopy, errors\u001b[38;5;241m=\u001b[39merrors) \u001b[38;5;28;01mfor\u001b[39;00m _, ser \u001b[38;5;129;01min\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mitems()\n\u001b[1;32m 6639\u001b[0m ]\n\u001b[1;32m 6641\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[1;32m 6642\u001b[0m \u001b[38;5;66;03m# else, only a single dtype is given\u001b[39;00m\n\u001b[0;32m-> 6643\u001b[0m new_data \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_mgr\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mastype\u001b[49m\u001b[43m(\u001b[49m\u001b[43mdtype\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mdtype\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mcopy\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mcopy\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43merrors\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43merrors\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 6644\u001b[0m res \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_constructor_from_mgr(new_data, axes\u001b[38;5;241m=\u001b[39mnew_data\u001b[38;5;241m.\u001b[39maxes)\n\u001b[1;32m 6645\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m res\u001b[38;5;241m.\u001b[39m__finalize__(\u001b[38;5;28mself\u001b[39m, method\u001b[38;5;241m=\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mastype\u001b[39m\u001b[38;5;124m\"\u001b[39m)\n","File \u001b[0;32m~/mambaforge/envs/python-fjfi/lib/python3.9/site-packages/pandas/core/internals/managers.py:430\u001b[0m, in \u001b[0;36mBaseBlockManager.astype\u001b[0;34m(self, dtype, copy, errors)\u001b[0m\n\u001b[1;32m 427\u001b[0m \u001b[38;5;28;01melif\u001b[39;00m using_copy_on_write():\n\u001b[1;32m 428\u001b[0m copy \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;01mFalse\u001b[39;00m\n\u001b[0;32m--> 430\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mapply\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m 431\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mastype\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m,\u001b[49m\n\u001b[1;32m 432\u001b[0m \u001b[43m \u001b[49m\u001b[43mdtype\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mdtype\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 433\u001b[0m \u001b[43m \u001b[49m\u001b[43mcopy\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mcopy\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 434\u001b[0m \u001b[43m \u001b[49m\u001b[43merrors\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43merrors\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 435\u001b[0m \u001b[43m \u001b[49m\u001b[43musing_cow\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43musing_copy_on_write\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 436\u001b[0m \u001b[43m\u001b[49m\u001b[43m)\u001b[49m\n","File \u001b[0;32m~/mambaforge/envs/python-fjfi/lib/python3.9/site-packages/pandas/core/internals/managers.py:363\u001b[0m, in \u001b[0;36mBaseBlockManager.apply\u001b[0;34m(self, f, align_keys, **kwargs)\u001b[0m\n\u001b[1;32m 361\u001b[0m applied \u001b[38;5;241m=\u001b[39m b\u001b[38;5;241m.\u001b[39mapply(f, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs)\n\u001b[1;32m 362\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[0;32m--> 363\u001b[0m applied \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mgetattr\u001b[39;49m\u001b[43m(\u001b[49m\u001b[43mb\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mf\u001b[49m\u001b[43m)\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkwargs\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 364\u001b[0m result_blocks \u001b[38;5;241m=\u001b[39m extend_blocks(applied, result_blocks)\n\u001b[1;32m 366\u001b[0m out \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mtype\u001b[39m(\u001b[38;5;28mself\u001b[39m)\u001b[38;5;241m.\u001b[39mfrom_blocks(result_blocks, \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39maxes)\n","File \u001b[0;32m~/mambaforge/envs/python-fjfi/lib/python3.9/site-packages/pandas/core/internals/blocks.py:758\u001b[0m, in \u001b[0;36mBlock.astype\u001b[0;34m(self, dtype, copy, errors, using_cow, squeeze)\u001b[0m\n\u001b[1;32m 755\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mValueError\u001b[39;00m(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mCan not squeeze with more than one column.\u001b[39m\u001b[38;5;124m\"\u001b[39m)\n\u001b[1;32m 756\u001b[0m values \u001b[38;5;241m=\u001b[39m values[\u001b[38;5;241m0\u001b[39m, :] \u001b[38;5;66;03m# type: ignore[call-overload]\u001b[39;00m\n\u001b[0;32m--> 758\u001b[0m new_values \u001b[38;5;241m=\u001b[39m \u001b[43mastype_array_safe\u001b[49m\u001b[43m(\u001b[49m\u001b[43mvalues\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mdtype\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mcopy\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mcopy\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43merrors\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43merrors\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 760\u001b[0m new_values \u001b[38;5;241m=\u001b[39m maybe_coerce_values(new_values)\n\u001b[1;32m 762\u001b[0m refs \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;01mNone\u001b[39;00m\n","File \u001b[0;32m~/mambaforge/envs/python-fjfi/lib/python3.9/site-packages/pandas/core/dtypes/astype.py:237\u001b[0m, in \u001b[0;36mastype_array_safe\u001b[0;34m(values, dtype, copy, errors)\u001b[0m\n\u001b[1;32m 234\u001b[0m dtype \u001b[38;5;241m=\u001b[39m dtype\u001b[38;5;241m.\u001b[39mnumpy_dtype\n\u001b[1;32m 236\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[0;32m--> 237\u001b[0m new_values \u001b[38;5;241m=\u001b[39m \u001b[43mastype_array\u001b[49m\u001b[43m(\u001b[49m\u001b[43mvalues\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mdtype\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mcopy\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mcopy\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 238\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m (\u001b[38;5;167;01mValueError\u001b[39;00m, \u001b[38;5;167;01mTypeError\u001b[39;00m):\n\u001b[1;32m 239\u001b[0m \u001b[38;5;66;03m# e.g. _astype_nansafe can fail on object-dtype of strings\u001b[39;00m\n\u001b[1;32m 240\u001b[0m \u001b[38;5;66;03m# trying to convert to float\u001b[39;00m\n\u001b[1;32m 241\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m errors \u001b[38;5;241m==\u001b[39m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mignore\u001b[39m\u001b[38;5;124m\"\u001b[39m:\n","File \u001b[0;32m~/mambaforge/envs/python-fjfi/lib/python3.9/site-packages/pandas/core/dtypes/astype.py:182\u001b[0m, in \u001b[0;36mastype_array\u001b[0;34m(values, dtype, copy)\u001b[0m\n\u001b[1;32m 179\u001b[0m values \u001b[38;5;241m=\u001b[39m values\u001b[38;5;241m.\u001b[39mastype(dtype, copy\u001b[38;5;241m=\u001b[39mcopy)\n\u001b[1;32m 181\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[0;32m--> 182\u001b[0m values \u001b[38;5;241m=\u001b[39m \u001b[43m_astype_nansafe\u001b[49m\u001b[43m(\u001b[49m\u001b[43mvalues\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mdtype\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mcopy\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mcopy\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 184\u001b[0m \u001b[38;5;66;03m# in pandas we don't store numpy str dtypes, so convert to object\u001b[39;00m\n\u001b[1;32m 185\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28misinstance\u001b[39m(dtype, np\u001b[38;5;241m.\u001b[39mdtype) \u001b[38;5;129;01mand\u001b[39;00m \u001b[38;5;28missubclass\u001b[39m(values\u001b[38;5;241m.\u001b[39mdtype\u001b[38;5;241m.\u001b[39mtype, \u001b[38;5;28mstr\u001b[39m):\n","File \u001b[0;32m~/mambaforge/envs/python-fjfi/lib/python3.9/site-packages/pandas/core/dtypes/astype.py:101\u001b[0m, in \u001b[0;36m_astype_nansafe\u001b[0;34m(arr, dtype, copy, skipna)\u001b[0m\n\u001b[1;32m 96\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m lib\u001b[38;5;241m.\u001b[39mensure_string_array(\n\u001b[1;32m 97\u001b[0m arr, skipna\u001b[38;5;241m=\u001b[39mskipna, convert_na_value\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mFalse\u001b[39;00m\n\u001b[1;32m 98\u001b[0m )\u001b[38;5;241m.\u001b[39mreshape(shape)\n\u001b[1;32m 100\u001b[0m \u001b[38;5;28;01melif\u001b[39;00m np\u001b[38;5;241m.\u001b[39missubdtype(arr\u001b[38;5;241m.\u001b[39mdtype, np\u001b[38;5;241m.\u001b[39mfloating) \u001b[38;5;129;01mand\u001b[39;00m dtype\u001b[38;5;241m.\u001b[39mkind \u001b[38;5;129;01min\u001b[39;00m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124miu\u001b[39m\u001b[38;5;124m\"\u001b[39m:\n\u001b[0;32m--> 101\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43m_astype_float_to_int_nansafe\u001b[49m\u001b[43m(\u001b[49m\u001b[43marr\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mdtype\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mcopy\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 103\u001b[0m \u001b[38;5;28;01melif\u001b[39;00m arr\u001b[38;5;241m.\u001b[39mdtype \u001b[38;5;241m==\u001b[39m \u001b[38;5;28mobject\u001b[39m:\n\u001b[1;32m 104\u001b[0m \u001b[38;5;66;03m# if we have a datetime/timedelta array of objects\u001b[39;00m\n\u001b[1;32m 105\u001b[0m \u001b[38;5;66;03m# then coerce to datetime64[ns] and use DatetimeArray.astype\u001b[39;00m\n\u001b[1;32m 107\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m lib\u001b[38;5;241m.\u001b[39mis_np_dtype(dtype, \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mM\u001b[39m\u001b[38;5;124m\"\u001b[39m):\n","File \u001b[0;32m~/mambaforge/envs/python-fjfi/lib/python3.9/site-packages/pandas/core/dtypes/astype.py:145\u001b[0m, in \u001b[0;36m_astype_float_to_int_nansafe\u001b[0;34m(values, dtype, copy)\u001b[0m\n\u001b[1;32m 141\u001b[0m \u001b[38;5;250m\u001b[39m\u001b[38;5;124;03m\"\"\"\u001b[39;00m\n\u001b[1;32m 142\u001b[0m \u001b[38;5;124;03mastype with a check preventing converting NaN to an meaningless integer value.\u001b[39;00m\n\u001b[1;32m 143\u001b[0m \u001b[38;5;124;03m\"\"\"\u001b[39;00m\n\u001b[1;32m 144\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m np\u001b[38;5;241m.\u001b[39misfinite(values)\u001b[38;5;241m.\u001b[39mall():\n\u001b[0;32m--> 145\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m IntCastingNaNError(\n\u001b[1;32m 146\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mCannot convert non-finite values (NA or inf) to integer\u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 147\u001b[0m )\n\u001b[1;32m 148\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m dtype\u001b[38;5;241m.\u001b[39mkind \u001b[38;5;241m==\u001b[39m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mu\u001b[39m\u001b[38;5;124m\"\u001b[39m:\n\u001b[1;32m 149\u001b[0m \u001b[38;5;66;03m# GH#45151\u001b[39;00m\n\u001b[1;32m 150\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m (values \u001b[38;5;241m>\u001b[39m\u001b[38;5;241m=\u001b[39m \u001b[38;5;241m0\u001b[39m)\u001b[38;5;241m.\u001b[39mall():\n","\u001b[0;31mIntCastingNaNError\u001b[0m: Cannot convert non-finite values (NA or inf) to integer"]}],"source":["laser_incidents[\"Altitude\"].astype(int)"]},{"cell_type":"markdown","metadata":{"cell_id":"00126-2c8993ce-8946-4375-bb20-2ee0ab461bde","deepnote_cell_type":"markdown","tags":[]},"source":["Quite recently, Pandas introduced nullable types for [working with missing data](https://pandas.pydata.org/pandas-docs/stable/user_guide/missing_data.html#missing-data), \n","for example [nullable integer](https://pandas.pydata.org/pandas-docs/stable/user_guide/integer_na.html#integer-na)."]},{"cell_type":"code","execution_count":73,"metadata":{"cell_id":"00131-e63ba474-cb21-404b-96b2-09b7a189a4bb","deepnote_cell_type":"code","deepnote_to_be_reexecuted":false,"execution_millis":0,"execution_start":1611580390420,"scrolled":true,"source_hash":"4026b12"},"outputs":[{"data":{"text/plain":["0 8500\n","1 40000\n","2 2500\n","3 3000\n","4 11000\n"," ... \n","36458 8000\n","36459 11000\n","36460 2000\n","36461 300\n","36462 1000\n","Name: Altitude, Length: 36463, dtype: Int64"]},"execution_count":73,"metadata":{},"output_type":"execute_result"}],"source":["laser_incidents[\"Altitude\"].astype(\"Int64\")"]},{"cell_type":"markdown","metadata":{"cell_id":"00132-b2a25fe0-7a24-4da1-ad6a-a60fb3ce368f","deepnote_cell_type":"markdown"},"source":["### Filtering\n","\n","Indexing in pandas Series / DataFrames (`[]`) support also boolean (masked) arrays. These arrays can be obtained by applying boolean operations on them.\n","\n","You can also use standard **comparison operators** like `<`, `<=`, `==`, `>=`, `>`, `!=`. \n","\n","It is possible to perform **logical operations** with boolean series too. You need to use `|`, `&`, `^` operators though, not `and`, `or`, `not` keywords. \n","\n","As an example, find all California incidents:"]},{"cell_type":"code","execution_count":74,"metadata":{"cell_id":"00133-8752eece-4640-482d-b740-1865e8f9545f","deepnote_cell_type":"code","deepnote_to_be_reexecuted":false,"execution_millis":0,"execution_start":1611580444784,"source_hash":"6cd53a8d"},"outputs":[{"data":{"text/plain":["2330 False\n","8288 False\n","16691 False\n","35831 False\n","26067 False\n","21937 False\n","22719 False\n","6498 False\n","24045 True\n","11533 False\n","Name: State, dtype: bool"]},"execution_count":74,"metadata":{},"output_type":"execute_result"}],"source":["is_california = laser_incidents.State == \"California\"\n","is_california.sample(10)"]},{"cell_type":"markdown","metadata":{"cell_id":"00134-292a372c-6fa0-4fb7-beed-a676584f7161","deepnote_cell_type":"markdown"},"source":["Now we can directly apply the boolean mask. (Note: This is no magic. You can construct the mask yourself)"]},{"cell_type":"code","execution_count":75,"metadata":{"cell_id":"00135-06d17dd7-36b4-41f5-86a0-50e90566c04b","deepnote_cell_type":"code","deepnote_to_be_reexecuted":false,"execution_millis":0,"execution_start":1611581549688,"source_hash":"c49f68f2"},"outputs":[{"data":{"text/html":["
\n","\n","
\n"," \n","
\n","
\n","
Flight ID
\n","
Aircraft
\n","
Altitude
\n","
Airport
\n","
Laser Color
\n","
Injury
\n","
City
\n","
State
\n","
timestamp
\n","
\n"," \n"," \n","
\n","
10611
\n","
N377YG
\n","
EVSS
\n","
2000.0
\n","
SNA
\n","
green
\n","
False
\n","
Santa Ana
\n","
California
\n","
2018-03-19 04:53:00
\n","
\n","
\n","
29171
\n","
N254CA
\n","
GLF4
\n","
4000.0
\n","
SNA
\n","
green
\n","
False
\n","
Santa Ana
\n","
California
\n","
2015-01-05 02:36:00
\n","
\n","
\n","
29266
\n","
QXE472
\n","
DH8D (DE HAVILLAND
\n","
8000.0
\n","
STS
\n","
green
\n","
False
\n","
Santa Rosa
\n","
California
\n","
2015-01-12 05:39:00
\n","
\n","
\n","
31416
\n","
VVT5423
\n","
UH60
\n","
4000.0
\n","
SNA
\n","
green
\n","
False
\n","
Santa Ana
\n","
California
\n","
2015-06-09 03:36:00
\n","
\n","
\n","
4202
\n","
JBU471
\n","
A320
\n","
2000.0
\n","
SJC
\n","
green
\n","
False
\n","
San Jose
\n","
California
\n","
2019-03-09 04:46:00
\n","
\n","
\n","
544
\n","
SWR41
\n","
B77W
\n","
50000.0
\n","
LAX
\n","
green
\n","
False
\n","
Los Angeles
\n","
California
\n","
2020-01-30 03:31:00
\n","
\n","
\n","
22330
\n","
N2121V
\n","
PA28
\n","
4000.0
\n","
ONT
\n","
green
\n","
False
\n","
Ontario
\n","
California
\n","
2016-01-29 04:20:00
\n","
\n","
\n","
27317
\n","
N615PG
\n","
E135
\n","
6000.0
\n","
SBP
\n","
green
\n","
False
\n","
San Luis Obispo
\n","
California
\n","
2016-10-26 02:00:00
\n","
\n","
\n","
32297
\n","
SWA4201
\n","
B737
\n","
5000.0
\n","
SAN
\n","
green
\n","
False
\n","
San Diego
\n","
California
\n","
2015-07-25 04:44:00
\n","
\n","
\n","
28747
\n","
SKW5786
\n","
CRJ2
\n","
3800.0
\n","
BUR
\n","
green
\n","
False
\n","
Burbank
\n","
California
\n","
2016-12-17 01:52:00
\n","
\n"," \n","
\n","
"],"text/plain":[" Flight ID Aircraft Altitude Airport Laser Color Injury \\\n","10611 N377YG EVSS 2000.0 SNA green False \n","29171 N254CA GLF4 4000.0 SNA green False \n","29266 QXE472 DH8D (DE HAVILLAND 8000.0 STS green False \n","31416 VVT5423 UH60 4000.0 SNA green False \n","4202 JBU471 A320 2000.0 SJC green False \n","544 SWR41 B77W 50000.0 LAX green False \n","22330 N2121V PA28 4000.0 ONT green False \n","27317 N615PG E135 6000.0 SBP green False \n","32297 SWA4201 B737 5000.0 SAN green False \n","28747 SKW5786 CRJ2 3800.0 BUR green False \n","\n"," City State timestamp \n","10611 Santa Ana California 2018-03-19 04:53:00 \n","29171 Santa Ana California 2015-01-05 02:36:00 \n","29266 Santa Rosa California 2015-01-12 05:39:00 \n","31416 Santa Ana California 2015-06-09 03:36:00 \n","4202 San Jose California 2019-03-09 04:46:00 \n","544 Los Angeles California 2020-01-30 03:31:00 \n","22330 Ontario California 2016-01-29 04:20:00 \n","27317 San Luis Obispo California 2016-10-26 02:00:00 \n","32297 San Diego California 2015-07-25 04:44:00 \n","28747 Burbank California 2016-12-17 01:52:00 "]},"execution_count":75,"metadata":{},"output_type":"execute_result"}],"source":["laser_incidents[is_california].sample(10)"]},{"cell_type":"markdown","metadata":{"cell_id":"00136-34b33725-4010-4b87-9c80-9a83353feebb","deepnote_cell_type":"markdown"},"source":["Or maybe we should include the whole West coast?"]},{"cell_type":"code","execution_count":76,"metadata":{"cell_id":"00137-e0dd79ab-d7dc-4122-a338-f11a93e60cd1","deepnote_cell_type":"code","deepnote_to_be_reexecuted":false,"execution_millis":33,"execution_start":1611581559244,"source_hash":"59870149"},"outputs":[{"data":{"text/html":["
\n","\n","
\n"," \n","
\n","
\n","
Flight ID
\n","
Aircraft
\n","
Altitude
\n","
Airport
\n","
Laser Color
\n","
Injury
\n","
City
\n","
State
\n","
timestamp
\n","
\n"," \n"," \n","
\n","
8140
\n","
DAL8945
\n","
B752
\n","
2000.0
\n","
LAX
\n","
green
\n","
False
\n","
Los Angeles
\n","
California
\n","
2019-11-02 07:16:00
\n","
\n","
\n","
11670
\n","
JBU687
\n","
A321
\n","
10500.0
\n","
SMO
\n","
green
\n","
False
\n","
Santa Monica
\n","
California
\n","
2018-06-03 03:30:00
\n","
\n","
\n","
16188
\n","
N01J
\n","
R44
\n","
500.0
\n","
LGB
\n","
green
\n","
False
\n","
Long Beach
\n","
California
\n","
2017-03-10 01:50:00
\n","
\n","
\n","
31950
\n","
SHERFF2
\n","
HELO
\n","
12000.0
\n","
SEA
\n","
green
\n","
False
\n","
Seattle
\n","
Washington
\n","
2015-07-11 04:30:00
\n","
\n","
\n","
14821
\n","
SKW3258
\n","
CRJ7
\n","
6000.0
\n","
LGB
\n","
green
\n","
False
\n","
Long Beach
\n","
California
\n","
2018-12-23 05:48:00
\n","
\n","
\n","
24680
\n","
AAL95
\n","
B739
\n","
9000.0
\n","
SAN
\n","
green
\n","
False
\n","
San Diego
\n","
California
\n","
2016-05-31 03:09:00
\n","
\n","
\n","
4749
\n","
JCM615
\n","
H25B
\n","
23000.0
\n","
DAG
\n","
green
\n","
False
\n","
Daggett
\n","
California
\n","
2019-04-08 06:16:00
\n","
\n","
\n","
32642
\n","
UAL1247
\n","
B739/L
\n","
15000.0
\n","
OXR
\n","
green
\n","
False
\n","
Oxnard
\n","
California
\n","
2015-08-10 04:09:00
\n","
\n","
\n","
33940
\n","
REH1
\n","
EC35
\n","
1200.0
\n","
STS
\n","
green
\n","
True
\n","
Santa Rosa
\n","
California
\n","
2015-10-05 03:10:00
\n","
\n","
\n","
1127
\n","
N816KW
\n","
C172
\n","
2500.0
\n","
BFL
\n","
green
\n","
False
\n","
Bakersfield
\n","
California
\n","
2020-03-05 02:25:00
\n","
\n"," \n","
\n","
"],"text/plain":[" Flight ID Aircraft Altitude Airport Laser Color Injury City \\\n","8140 DAL8945 B752 2000.0 LAX green False Los Angeles \n","11670 JBU687 A321 10500.0 SMO green False Santa Monica \n","16188 N01J R44 500.0 LGB green False Long Beach \n","31950 SHERFF2 HELO 12000.0 SEA green False Seattle \n","14821 SKW3258 CRJ7 6000.0 LGB green False Long Beach \n","24680 AAL95 B739 9000.0 SAN green False San Diego \n","4749 JCM615 H25B 23000.0 DAG green False Daggett \n","32642 UAL1247 B739/L 15000.0 OXR green False Oxnard \n","33940 REH1 EC35 1200.0 STS green True Santa Rosa \n","1127 N816KW C172 2500.0 BFL green False Bakersfield \n","\n"," State timestamp \n","8140 California 2019-11-02 07:16:00 \n","11670 California 2018-06-03 03:30:00 \n","16188 California 2017-03-10 01:50:00 \n","31950 Washington 2015-07-11 04:30:00 \n","14821 California 2018-12-23 05:48:00 \n","24680 California 2016-05-31 03:09:00 \n","4749 California 2019-04-08 06:16:00 \n","32642 California 2015-08-10 04:09:00 \n","33940 California 2015-10-05 03:10:00 \n","1127 California 2020-03-05 02:25:00 "]},"execution_count":76,"metadata":{},"output_type":"execute_result"}],"source":["# isin takes an array of possible values\n","west_coast = laser_incidents[laser_incidents.State.isin([\"California\", \"Oregon\", \"Washington\"])]\n","west_coast.sample(10)"]},{"cell_type":"markdown","metadata":{"cell_id":"00135-a92f3da1-aafa-4184-835f-3bee4e7c5b7f","deepnote_cell_type":"markdown","tags":[]},"source":["Or low-altitude incidents?"]},{"cell_type":"code","execution_count":77,"metadata":{"cell_id":"00135-c3c9b74c-7eb6-4a86-9be4-75889555210d","deepnote_cell_type":"code","deepnote_to_be_reexecuted":false,"execution_millis":1,"execution_start":1611581572207,"source_hash":"d4d1b2e","tags":[]},"outputs":[{"data":{"text/html":["
\n","\n","
\n"," \n","
\n","
\n","
Flight ID
\n","
Aircraft
\n","
Altitude
\n","
Airport
\n","
Laser Color
\n","
Injury
\n","
City
\n","
State
\n","
timestamp
\n","
\n"," \n"," \n","
\n","
71
\n","
AAL633
\n","
A21N
\n","
0.0
\n","
ELP
\n","
unknown
\n","
False
\n","
El Paso
\n","
Texas
\n","
2020-01-04 04:02:00
\n","
\n","
\n","
267
\n","
17223
\n","
C172
\n","
200.0
\n","
SRQ
\n","
green
\n","
False
\n","
Sarasota
\n","
Florida
\n","
2020-01-14 01:12:00
\n","
\n","
\n","
400
\n","
N106NK
\n","
C172
\n","
0.0
\n","
ADS
\n","
red
\n","
False
\n","
Addison
\n","
Texas
\n","
2020-01-21 20:49:00
\n","
\n","
\n","
613
\n","
FDX57
\n","
DC10
\n","
100.0
\n","
BQN
\n","
green
\n","
False
\n","
Aguadilla
\n","
Puerto Rico
\n","
2020-02-03 01:50:00
\n","
\n","
\n","
1066
\n","
CR6562
\n","
HELI
\n","
200.0
\n","
PBI
\n","
green
\n","
False
\n","
West Palm Beach
\n","
Florida
\n","
2020-03-01 05:14:00
\n","
\n","
\n","
...
\n","
...
\n","
...
\n","
...
\n","
...
\n","
...
\n","
...
\n","
...
\n","
...
\n","
...
\n","
\n","
\n","
35801
\n","
N80298
\n","
C172
\n","
200.0
\n","
MIA
\n","
red
\n","
False
\n","
Miami
\n","
Florida
\n","
NaT
\n","
\n","
\n","
35892
\n","
N488SR
\n","
C525
\n","
160.0
\n","
DUA
\n","
unkn
\n","
False
\n","
Durant
\n","
Oklahoma
\n","
2015-12-11 01:35:00
\n","
\n","
\n","
36089
\n","
UPS1337
\n","
B763
\n","
170.0
\n","
LEX
\n","
green
\n","
False
\n","
Lexington
\n","
Kentucky
\n","
2015-12-16 03:51:00
\n","
\n","
\n","
36156
\n","
UPS1295
\n","
A306
\n","
170.0
\n","
LEX
\n","
green
\n","
False
\n","
Lexington
\n","
Kentucky
\n","
2015-12-18 04:54:00
\n","
\n","
\n","
36206
\n","
NKS631
\n","
A320
\n","
172.0
\n","
TDZ
\n","
green
\n","
False
\n","
Toledo
\n","
Ohio
\n","
2015-12-19 23:53:00
\n","
\n"," \n","
\n","
274 rows × 9 columns
\n","
"],"text/plain":[" Flight ID Aircraft Altitude Airport Laser Color Injury \\\n","71 AAL633 A21N 0.0 ELP unknown False \n","267 17223 C172 200.0 SRQ green False \n","400 N106NK C172 0.0 ADS red False \n","613 FDX57 DC10 100.0 BQN green False \n","1066 CR6562 HELI 200.0 PBI green False \n","... ... ... ... ... ... ... \n","35801 N80298 C172 200.0 MIA red False \n","35892 N488SR C525 160.0 DUA unkn False \n","36089 UPS1337 B763 170.0 LEX green False \n","36156 UPS1295 A306 170.0 LEX green False \n","36206 NKS631 A320 172.0 TDZ green False \n","\n"," City State timestamp \n","71 El Paso Texas 2020-01-04 04:02:00 \n","267 Sarasota Florida 2020-01-14 01:12:00 \n","400 Addison Texas 2020-01-21 20:49:00 \n","613 Aguadilla Puerto Rico 2020-02-03 01:50:00 \n","1066 West Palm Beach Florida 2020-03-01 05:14:00 \n","... ... ... ... \n","35801 Miami Florida NaT \n","35892 Durant Oklahoma 2015-12-11 01:35:00 \n","36089 Lexington Kentucky 2015-12-16 03:51:00 \n","36156 Lexington Kentucky 2015-12-18 04:54:00 \n","36206 Toledo Ohio 2015-12-19 23:53:00 \n","\n","[274 rows x 9 columns]"]},"execution_count":77,"metadata":{},"output_type":"execute_result"}],"source":["laser_incidents[laser_incidents.Altitude < 300]"]},{"cell_type":"markdown","metadata":{"cell_id":"00140-aa930bf4-8a66-4c8d-99b2-35dfcbc7fdba","deepnote_cell_type":"markdown"},"source":["### Visualization intermezzo\n","\n","Without much further ado, let's create our first plot."]},{"cell_type":"code","execution_count":78,"metadata":{"cell_id":"00141-bb2545a7-a777-4bfb-9062-79a61293ea08","deepnote_cell_type":"code","deepnote_to_be_reexecuted":false,"execution_millis":3,"execution_start":1611581593826,"source_hash":"bea6c559"},"outputs":[{"data":{"text/plain":["State\n","California 7268\n","Texas 3620\n","Florida 2702\n","Arizona 1910\n","Colorado 988\n","Washington 982\n","Kentucky 952\n","Illinois 946\n","New York 921\n","Puerto Rico 912\n","Oregon 895\n","Tennessee 888\n","Nevada 837\n","Pennsylvania 826\n","Indiana 812\n","Utah 789\n","Ohio 750\n","Georgia 714\n","North Carolina 605\n","Missouri 547\n","Name: count, dtype: int64"]},"execution_count":78,"metadata":{},"output_type":"execute_result"}],"source":["# Most frequent states\n","laser_incidents[\"State\"].value_counts()[:20]"]},{"cell_type":"code","execution_count":79,"metadata":{"cell_id":"00139-073b6cf5-5911-43d7-a088-0cc9f534e515","deepnote_cell_type":"code","deepnote_to_be_reexecuted":false,"execution_millis":239,"execution_start":1611581616421,"source_hash":"8c96c670","tags":[]},"outputs":[{"data":{"image/png":"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","text/plain":["
"],"text/plain":[" Flight ID Aircraft Altitude Airport Laser Color Injury \\\n","21173 ROU1628 B763 240000.0 PBI green False \n","12017 UPS797 A306 125000.0 ABQ green False \n","27807 LSFD1 EC 100000.0 SJC blue False \n","21049 ASQ5334 CRJ7 100000.0 RDU green False \n","27785 ASH6193 CRJ7 98400.0 IND green False \n","\n"," City State timestamp \n","21173 West Palm Beach Florida 2017-12-04 11:49:00 \n","12017 Albuquerque New Mexico 2018-06-30 03:15:00 \n","27807 San Jose California 2016-11-13 02:53:00 \n","21049 Raleigh North Carolina 2017-12-01 01:32:00 \n","27785 Indianapolis Indiana 2016-11-12 23:11:00 "]},"execution_count":80,"metadata":{},"output_type":"execute_result"}],"source":["# Display 5 incidents with the highest altitude\n","laser_incidents.sort_values(\"Altitude\", ascending=False).head(5)"]},{"cell_type":"code","execution_count":81,"metadata":{"cell_id":"00155-56db32fd-12d9-485b-9dc8-4393d81beb0d","deepnote_cell_type":"code","deepnote_to_be_reexecuted":false,"execution_millis":39,"execution_start":1611581645435,"source_hash":"a18fbdfc"},"outputs":[{"data":{"text/html":["
\n","\n","
\n"," \n","
\n","
\n","
Flight ID
\n","
Aircraft
\n","
Altitude
\n","
Airport
\n","
Laser Color
\n","
Injury
\n","
City
\n","
State
\n","
timestamp
\n","
\n"," \n"," \n","
\n","
21173
\n","
ROU1628
\n","
B763
\n","
240000.0
\n","
PBI
\n","
green
\n","
False
\n","
West Palm Beach
\n","
Florida
\n","
2017-12-04 11:49:00
\n","
\n","
\n","
12017
\n","
UPS797
\n","
A306
\n","
125000.0
\n","
ABQ
\n","
green
\n","
False
\n","
Albuquerque
\n","
New Mexico
\n","
2018-06-30 03:15:00
\n","
\n","
\n","
21049
\n","
ASQ5334
\n","
CRJ7
\n","
100000.0
\n","
RDU
\n","
green
\n","
False
\n","
Raleigh
\n","
North Carolina
\n","
2017-12-01 01:32:00
\n","
\n","
\n","
27807
\n","
LSFD1
\n","
EC
\n","
100000.0
\n","
SJC
\n","
blue
\n","
False
\n","
San Jose
\n","
California
\n","
2016-11-13 02:53:00
\n","
\n","
\n","
27785
\n","
ASH6193
\n","
CRJ7
\n","
98400.0
\n","
IND
\n","
green
\n","
False
\n","
Indianapolis
\n","
Indiana
\n","
2016-11-12 23:11:00
\n","
\n"," \n","
\n","
"],"text/plain":[" Flight ID Aircraft Altitude Airport Laser Color Injury \\\n","21173 ROU1628 B763 240000.0 PBI green False \n","12017 UPS797 A306 125000.0 ABQ green False \n","21049 ASQ5334 CRJ7 100000.0 RDU green False \n","27807 LSFD1 EC 100000.0 SJC blue False \n","27785 ASH6193 CRJ7 98400.0 IND green False \n","\n"," City State timestamp \n","21173 West Palm Beach Florida 2017-12-04 11:49:00 \n","12017 Albuquerque New Mexico 2018-06-30 03:15:00 \n","21049 Raleigh North Carolina 2017-12-01 01:32:00 \n","27807 San Jose California 2016-11-13 02:53:00 \n","27785 Indianapolis Indiana 2016-11-12 23:11:00 "]},"execution_count":81,"metadata":{},"output_type":"execute_result"}],"source":["# Alternative\n","laser_incidents.nlargest(5, \"Altitude\")"]},{"cell_type":"markdown","metadata":{"cell_id":"00156-3f27c790-049f-4d99-aa4e-032acaf43cdc","deepnote_cell_type":"markdown"},"source":["**Exercise:** Find the last 3 incidents with blue laser."]},{"cell_type":"markdown","metadata":{"cell_id":"00160-e3c9a342-9395-4fd6-9012-e55cf5c755bc","deepnote_cell_type":"markdown"},"source":["## Arithmetics and string manipulation"]},{"attachments":{},"cell_type":"markdown","metadata":{"cell_id":"00161-e326e9e8-fa3c-4788-be8b-c1ccc99b67ff","deepnote_cell_type":"markdown"},"source":["Standard **arithmetic operators** work on numerical columns too. And so do mathematical functions. Note all such operations are performed in a vector-like fashion."]},{"cell_type":"code","execution_count":82,"metadata":{"cell_id":"00162-d302c4f4-bdeb-46ad-ae72-e7c9c6bd8d6f","deepnote_cell_type":"code","deepnote_to_be_reexecuted":false,"execution_millis":6,"execution_start":1611581670970,"source_hash":"fcb3ad67"},"outputs":[{"data":{"text/plain":["21880 2438.4\n","7556 1828.8\n","5124 762.0\n","1619 2286.0\n","28230 1066.8\n","8119 1066.8\n","4171 609.6\n","20169 4267.2\n","5014 2743.2\n","22018 1219.2\n","Name: Altitude, dtype: float64"]},"execution_count":82,"metadata":{},"output_type":"execute_result"}],"source":["altitude_meters = laser_incidents[\"Altitude\"] * .3048\n","altitude_meters.sample(10)"]},{"cell_type":"markdown","metadata":{"cell_id":"00147-4d2eda07-3d5b-4005-8521-4a46fc230acc","deepnote_cell_type":"markdown","tags":[]},"source":["You may mix columns and scalars, the string arithmetics also works as expected."]},{"cell_type":"code","execution_count":83,"metadata":{"cell_id":"00147-afccd665-426e-4152-830c-44f42a32b72e","deepnote_cell_type":"code","deepnote_to_be_reexecuted":false,"execution_millis":0,"execution_start":1611581692952,"source_hash":"a5bbd6da","tags":[]},"outputs":[{"data":{"text/plain":["0 Santa Barbara, California\n","1 San Antonio, Texas\n","2 Tampa, Florida\n","3 Fort Worth , Texas\n","4 Modesto, California\n"," ... \n","36458 Las Vegas, Nevada\n","36459 Lincoln, California\n","36460 Westhampton Beach, New York\n","36461 Guam, Guam\n","36462 Naples, Florida\n","Length: 36463, dtype: object"]},"execution_count":83,"metadata":{},"output_type":"execute_result"}],"source":["laser_incidents[\"City\"] + \", \" + laser_incidents[\"State\"]"]},{"cell_type":"markdown","metadata":{"cell_id":"00167-e72d2c71-c04a-4885-bbb7-c3ea7e4fe9fb","deepnote_cell_type":"markdown"},"source":["### Summary statistics\n","\n","The `describe` method shows summary statistics for all the columns:"]},{"cell_type":"code","execution_count":84,"metadata":{"cell_id":"00150-99f5fb5e-394e-4090-9e1b-94a124803b69","deepnote_cell_type":"code","deepnote_to_be_reexecuted":false,"execution_millis":14,"execution_start":1611581705765,"source_hash":"eebca140","tags":[]},"outputs":[{"data":{"text/html":["
"],"text/plain":[" Flight ID Aircraft Altitude Airport Laser Color Injury City \\\n","count 36451 36411 36218.000000 36450 36461 36445 36460 \n","unique 24788 1731 NaN 2019 73 2 2254 \n","top UNKN B737 NaN LAX green False Phoenix \n","freq 49 3817 NaN 988 32787 36261 1157 \n","mean NaN NaN 7358.314264 NaN NaN NaN NaN \n","min NaN NaN 0.000000 NaN NaN NaN NaN \n","25% NaN NaN 2500.000000 NaN NaN NaN NaN \n","50% NaN NaN 5000.000000 NaN NaN NaN NaN \n","75% NaN NaN 9700.000000 NaN NaN NaN NaN \n","max NaN NaN 240000.000000 NaN NaN NaN NaN \n","std NaN NaN 7642.686712 NaN NaN NaN NaN \n","\n"," State timestamp \n","count 36457 33431 \n","unique 73 NaN \n","top California NaN \n","freq 7268 NaN \n","mean NaN 2017-08-31 03:32:36.253776384 \n","min NaN 2015-01-01 02:00:00 \n","25% NaN 2016-03-25 06:09:30 \n","50% NaN 2017-08-01 04:10:00 \n","75% NaN 2019-01-14 17:07:00 \n","max NaN 2020-08-01 10:49:00 \n","std NaN NaN "]},"execution_count":87,"metadata":{},"output_type":"execute_result"}],"source":["laser_incidents.describe(include=\"all\")"]},{"cell_type":"code","execution_count":88,"metadata":{"cell_id":"00168-1752bdfb-7095-4f88-a554-2ba6b76ce988","deepnote_cell_type":"code","deepnote_to_be_reexecuted":false,"execution_millis":1,"execution_start":1611581715842,"source_hash":"74ea3361"},"outputs":[{"data":{"text/plain":["7358.314263625822"]},"execution_count":88,"metadata":{},"output_type":"execute_result"}],"source":["laser_incidents[\"Altitude\"].mean()"]},{"cell_type":"code","execution_count":89,"metadata":{"cell_id":"00169-dad58f25-491a-465a-b6eb-b9a3a71e9659","deepnote_cell_type":"code","deepnote_to_be_reexecuted":false,"execution_millis":0,"execution_start":1611581717244,"source_hash":"e4b059b7"},"outputs":[{"data":{"text/plain":["7642.6867120945535"]},"execution_count":89,"metadata":{},"output_type":"execute_result"}],"source":["laser_incidents[\"Altitude\"].std()"]},{"cell_type":"code","execution_count":90,"metadata":{"cell_id":"00170-45be576d-7c75-47de-8006-a72f978805ee","deepnote_cell_type":"code","deepnote_to_be_reexecuted":false,"execution_millis":6,"execution_start":1611581718678,"source_hash":"bee76775"},"outputs":[{"data":{"text/plain":["240000.0"]},"execution_count":90,"metadata":{},"output_type":"execute_result"}],"source":["laser_incidents[\"Altitude\"].max()"]},{"cell_type":"markdown","metadata":{"cell_id":"00174-4d46bfa9-0dc5-46cb-b599-418e7e35c7d0","deepnote_cell_type":"markdown"},"source":["### Basic string operations (Optional)\n","\n","These are typically accessed using the `.str` \"accessor\" of the Series like this:\n"," \n","- series.str.lower\n","- series.str.split\n","- series.str.startswith\n","- series.str.contains\n","- ...\n","\n","See more in the [documentation](https://pandas.pydata.org/pandas-docs/stable/user_guide/text.html)."]},{"cell_type":"code","execution_count":96,"metadata":{"cell_id":"00155-3f479a59-7d72-470c-a13d-2cd0b02c3894","deepnote_cell_type":"code","deepnote_to_be_reexecuted":false,"execution_millis":4,"execution_start":1611581730292,"source_hash":"7b152063","tags":[]},"outputs":[{"data":{"text/plain":["array(['Panama City', 'Oklahoma City', 'Salt Lake City', 'Bullhead City',\n"," 'Garden City', 'Atlantic City', 'Panama City ', 'New York City',\n"," 'Jefferson City', 'Kansas City', 'Rapid City', 'Tremont City',\n"," 'Boulder City', 'Traverse City', 'Cross City', 'Brigham City',\n"," 'Carson City', 'Midland City', 'Johnson City', 'Ponca City',\n"," 'Panama City Beach', 'Sioux City', 'Bay City', 'Silver City',\n"," 'Pueblo City', 'Iowa City', 'Calvert City', 'Crescent City',\n"," 'Oak City', 'Falls City', 'Salt Lake City ', 'Royse City',\n"," 'Kansas City ', 'Bossier City', 'Baker City', 'Ellwood City',\n"," 'Dodge City', 'Garden City ', 'Union City', 'King City',\n"," 'Kansas City ', 'Mason City', 'Plant City ', 'Lanai City',\n"," 'Tell City', 'Yuba City', 'Kansas City ', 'Salt Lake City ',\n"," 'Kansas City ', 'Ocean City', 'Cedar City', 'City of Commerce',\n"," 'Lake City', 'Beach City', 'Alexander City', 'Siler City',\n"," 'Charles City', 'Malad City ', 'Rush City', 'Webster City',\n"," 'Plant City'], dtype=object)"]},"execution_count":96,"metadata":{},"output_type":"execute_result"}],"source":["laser_incidents[laser_incidents[\"City\"].str.contains(\"City\", na=False)][\"City\"].unique()"]},{"cell_type":"code","execution_count":97,"metadata":{"cell_id":"00156-1c7c826c-3fb7-4501-a16a-d680c1bc5c7c","deepnote_cell_type":"code","deepnote_to_be_reexecuted":false,"execution_millis":9,"execution_start":1611581740902,"source_hash":"1b2868f1","tags":[]},"outputs":[{"data":{"text/plain":["array(['Panama City', 'Oklahoma City', 'Salt Lake City', 'Bullhead City',\n"," 'Garden City', 'Atlantic City', 'New York City', 'Jefferson City',\n"," 'Kansas City', 'Rapid City', 'Tremont City', 'Boulder City',\n"," 'Traverse City', 'Cross City', 'Brigham City', 'Carson City',\n"," 'Midland City', 'Johnson City', 'Ponca City', 'Panama City Beach',\n"," 'Sioux City', 'Bay City', 'Silver City', 'Pueblo City',\n"," 'Iowa City', 'Calvert City', 'Crescent City', 'Oak City',\n"," 'Falls City', 'Royse City', 'Bossier City', 'Baker City',\n"," 'Ellwood City', 'Dodge City', 'Union City', 'King City',\n"," 'Mason City', 'Plant City', 'Lanai City', 'Tell City', 'Yuba City',\n"," 'Ocean City', 'Cedar City', 'City of Commerce', 'Lake City',\n"," 'Beach City', 'Alexander City', 'Siler City', 'Charles City',\n"," 'Malad City', 'Rush City', 'Webster City'], dtype=object)"]},"execution_count":97,"metadata":{},"output_type":"execute_result"}],"source":["laser_incidents[laser_incidents[\"City\"].str.contains(\"City\", na=False)][\"City\"].str.strip().unique()"]},{"cell_type":"markdown","metadata":{"cell_id":"00224-bb92354d-7d1e-46f8-b068-924bdd26114a","deepnote_cell_type":"markdown"},"source":["## Merging data\n","\n","It is a common situation where we have two or more datasets with different columns that we need to bring together.\n","This operation is called *merging* and the Pandas apparatus is to a great detail described in [the documentation](https://pandas.pydata.org/docs/user_guide/merging.html).\n","\n","In our case, we would like to attach the state populations to the dataset. \n"]},{"cell_type":"code","execution_count":98,"metadata":{"cell_id":"00225-9cb43465-3c64-409d-93ae-c0bc774235b9","deepnote_cell_type":"code","deepnote_to_be_reexecuted":false,"execution_millis":44,"execution_start":1611581774832,"source_hash":"98a1918d","tags":[]},"outputs":[{"data":{"text/html":["
\n","\n","
\n"," \n","
\n","
\n","
Territory
\n","
Population
\n","
Population 2010
\n","
Code
\n","
\n"," \n"," \n","
\n","
0
\n","
California
\n","
39029342.0
\n","
37253956
\n","
CA
\n","
\n","
\n","
1
\n","
Texas
\n","
30029572.0
\n","
25145561
\n","
TX
\n","
\n","
\n","
2
\n","
Florida
\n","
22244823.0
\n","
18801310
\n","
FL
\n","
\n","
\n","
3
\n","
New York
\n","
19677151.0
\n","
19378102
\n","
NY
\n","
\n","
\n","
4
\n","
Pennsylvania
\n","
12972008.0
\n","
12702379
\n","
PA
\n","
\n","
\n","
5
\n","
Illinois
\n","
12582032.0
\n","
12830632
\n","
IL
\n","
\n","
\n","
6
\n","
Ohio
\n","
11756058.0
\n","
11536504
\n","
OH
\n","
\n","
\n","
7
\n","
Georgia
\n","
10912876.0
\n","
9687653
\n","
GA
\n","
\n","
\n","
8
\n","
North Carolina
\n","
10698973.0
\n","
9535483
\n","
NC
\n","
\n","
\n","
9
\n","
Michigan
\n","
10034113.0
\n","
9883640
\n","
MI
\n","
\n","
\n","
10
\n","
New Jersey
\n","
9261699.0
\n","
8791894
\n","
NJ
\n","
\n","
\n","
11
\n","
Virginia
\n","
8683619.0
\n","
8001024
\n","
VA
\n","
\n","
\n","
12
\n","
Washington
\n","
7785786.0
\n","
6724540
\n","
WA
\n","
\n","
\n","
13
\n","
Arizona
\n","
7359197.0
\n","
6392017
\n","
AZ
\n","
\n","
\n","
14
\n","
Tennessee
\n","
7051339.0
\n","
6346105
\n","
TN
\n","
\n","
\n","
15
\n","
Massachusetts
\n","
6981974.0
\n","
6547629
\n","
MA
\n","
\n","
\n","
16
\n","
Indiana
\n","
6833037.0
\n","
6483802
\n","
IN
\n","
\n","
\n","
17
\n","
Missouri
\n","
6177957.0
\n","
5988927
\n","
MO
\n","
\n","
\n","
18
\n","
Maryland
\n","
6164660.0
\n","
5773552
\n","
MD
\n","
\n","
\n","
19
\n","
Wisconsin
\n","
5892539.0
\n","
5686986
\n","
WI
\n","
\n","
\n","
20
\n","
Colorado
\n","
5839926.0
\n","
5029196
\n","
CO
\n","
\n","
\n","
21
\n","
Minnesota
\n","
5717184.0
\n","
5303925
\n","
MN
\n","
\n","
\n","
22
\n","
South Carolina
\n","
5282634.0
\n","
4625364
\n","
SC
\n","
\n","
\n","
23
\n","
Alabama
\n","
5074296.0
\n","
4779736
\n","
AL
\n","
\n","
\n","
24
\n","
Louisiana
\n","
4590241.0
\n","
4533372
\n","
LA
\n","
\n","
\n","
25
\n","
Kentucky
\n","
4512310.0
\n","
4339367
\n","
KY
\n","
\n","
\n","
26
\n","
Oregon
\n","
4240137.0
\n","
3831074
\n","
OR
\n","
\n","
\n","
27
\n","
Oklahoma
\n","
4019800.0
\n","
3751351
\n","
OK
\n","
\n","
\n","
28
\n","
Connecticut
\n","
3626205.0
\n","
3574097
\n","
CT
\n","
\n","
\n","
29
\n","
Utah
\n","
3380800.0
\n","
2763885
\n","
UT
\n","
\n","
\n","
30
\n","
Puerto Rico
\n","
3221789.0
\n","
3725789
\n","
PR
\n","
\n","
\n","
31
\n","
Iowa
\n","
3200517.0
\n","
3046355
\n","
IA
\n","
\n","
\n","
32
\n","
Nevada
\n","
3177772.0
\n","
2700551
\n","
NV
\n","
\n","
\n","
33
\n","
Arkansas
\n","
3045637.0
\n","
2915918
\n","
AR
\n","
\n","
\n","
34
\n","
Mississippi
\n","
2940057.0
\n","
2967297
\n","
MS
\n","
\n","
\n","
35
\n","
Kansas
\n","
2937150.0
\n","
2853118
\n","
KS
\n","
\n","
\n","
36
\n","
New Mexico
\n","
2113344.0
\n","
2059179
\n","
NM
\n","
\n","
\n","
37
\n","
Nebraska
\n","
1967923.0
\n","
1826341
\n","
NE
\n","
\n","
\n","
38
\n","
Idaho
\n","
1939033.0
\n","
1567582
\n","
ID
\n","
\n","
\n","
39
\n","
West Virginia
\n","
1775156.0
\n","
1852994
\n","
WV
\n","
\n","
\n","
40
\n","
Hawaii
\n","
1440196.0
\n","
1360301
\n","
HI
\n","
\n","
\n","
41
\n","
New Hampshire
\n","
1395231.0
\n","
1316470
\n","
NH
\n","
\n","
\n","
42
\n","
Maine
\n","
1385340.0
\n","
1328361
\n","
ME
\n","
\n","
\n","
43
\n","
Montana
\n","
1122867.0
\n","
989415
\n","
MT
\n","
\n","
\n","
44
\n","
Rhode Island
\n","
1093734.0
\n","
1052567
\n","
RI
\n","
\n","
\n","
45
\n","
Delaware
\n","
1018396.0
\n","
897934
\n","
DE
\n","
\n","
\n","
46
\n","
South Dakota
\n","
909824.0
\n","
814180
\n","
SD
\n","
\n","
\n","
47
\n","
North Dakota
\n","
779261.0
\n","
672591
\n","
ND
\n","
\n","
\n","
48
\n","
Alaska
\n","
733583.0
\n","
710231
\n","
AK
\n","
\n","
\n","
49
\n","
District of Columbia
\n","
671803.0
\n","
601723
\n","
DC
\n","
\n","
\n","
50
\n","
Vermont
\n","
647064.0
\n","
625741
\n","
VT
\n","
\n","
\n","
51
\n","
Wyoming
\n","
581381.0
\n","
563626
\n","
WY
\n","
\n","
\n","
52
\n","
Guam
\n","
NaN
\n","
159358
\n","
GU
\n","
\n","
\n","
53
\n","
U.S. Virgin Islands
\n","
NaN
\n","
106405
\n","
VI
\n","
\n","
\n","
54
\n","
American Samoa
\n","
NaN
\n","
55519
\n","
AS
\n","
\n","
\n","
55
\n","
Northern Mariana Islands
\n","
NaN
\n","
53883
\n","
MP
\n","
\n"," \n","
\n","
"],"text/plain":[" Territory Population Population 2010 Code\n","0 California 39029342.0 37253956 CA\n","1 Texas 30029572.0 25145561 TX\n","2 Florida 22244823.0 18801310 FL\n","3 New York 19677151.0 19378102 NY\n","4 Pennsylvania 12972008.0 12702379 PA\n","5 Illinois 12582032.0 12830632 IL\n","6 Ohio 11756058.0 11536504 OH\n","7 Georgia 10912876.0 9687653 GA\n","8 North Carolina 10698973.0 9535483 NC\n","9 Michigan 10034113.0 9883640 MI\n","10 New Jersey 9261699.0 8791894 NJ\n","11 Virginia 8683619.0 8001024 VA\n","12 Washington 7785786.0 6724540 WA\n","13 Arizona 7359197.0 6392017 AZ\n","14 Tennessee 7051339.0 6346105 TN\n","15 Massachusetts 6981974.0 6547629 MA\n","16 Indiana 6833037.0 6483802 IN\n","17 Missouri 6177957.0 5988927 MO\n","18 Maryland 6164660.0 5773552 MD\n","19 Wisconsin 5892539.0 5686986 WI\n","20 Colorado 5839926.0 5029196 CO\n","21 Minnesota 5717184.0 5303925 MN\n","22 South Carolina 5282634.0 4625364 SC\n","23 Alabama 5074296.0 4779736 AL\n","24 Louisiana 4590241.0 4533372 LA\n","25 Kentucky 4512310.0 4339367 KY\n","26 Oregon 4240137.0 3831074 OR\n","27 Oklahoma 4019800.0 3751351 OK\n","28 Connecticut 3626205.0 3574097 CT\n","29 Utah 3380800.0 2763885 UT\n","30 Puerto Rico 3221789.0 3725789 PR\n","31 Iowa 3200517.0 3046355 IA\n","32 Nevada 3177772.0 2700551 NV\n","33 Arkansas 3045637.0 2915918 AR\n","34 Mississippi 2940057.0 2967297 MS\n","35 Kansas 2937150.0 2853118 KS\n","36 New Mexico 2113344.0 2059179 NM\n","37 Nebraska 1967923.0 1826341 NE\n","38 Idaho 1939033.0 1567582 ID\n","39 West Virginia 1775156.0 1852994 WV\n","40 Hawaii 1440196.0 1360301 HI\n","41 New Hampshire 1395231.0 1316470 NH\n","42 Maine 1385340.0 1328361 ME\n","43 Montana 1122867.0 989415 MT\n","44 Rhode Island 1093734.0 1052567 RI\n","45 Delaware 1018396.0 897934 DE\n","46 South Dakota 909824.0 814180 SD\n","47 North Dakota 779261.0 672591 ND\n","48 Alaska 733583.0 710231 AK\n","49 District of Columbia 671803.0 601723 DC\n","50 Vermont 647064.0 625741 VT\n","51 Wyoming 581381.0 563626 WY\n","52 Guam NaN 159358 GU\n","53 U.S. Virgin Islands NaN 106405 VI\n","54 American Samoa NaN 55519 AS\n","55 Northern Mariana Islands NaN 53883 MP"]},"execution_count":98,"metadata":{},"output_type":"execute_result"}],"source":["population = pd.read_csv(\"data/us_state_population.csv\")\n","population"]},{"cell_type":"markdown","metadata":{"cell_id":"00226-8147dc9b-914f-41f6-966b-b0cdcd7fdd03","deepnote_cell_type":"markdown","tags":[]},"source":["We will of course use the state name as the merge *key*. Before actually doing the merge, we can explore a bit whether all state names\n","from the laser incidents dataset are present in our population table."]},{"cell_type":"code","execution_count":99,"metadata":{"cell_id":"00227-6a0c8e33-2b0b-49a0-8f0f-32203eccfd66","deepnote_cell_type":"code","deepnote_to_be_reexecuted":false,"execution_millis":0,"execution_start":1611581780420,"source_hash":"5907dbcd","tags":[]},"outputs":[{"name":"stdout","output_type":"stream","text":["There are 82 rows with unknown states.\n","Unknown state values are: \n","[nan, 'Virgin Islands', 'Miami', 'North Hampshire', 'Marina Islands', 'Teas', 'Mexico', 'DC', 'VA', 'Northern Marina Islands', 'Mariana Islands', 'Oho', 'Northern Marianas Is', 'UNKN', 'Massachussets', 'FLorida', 'D.C.', 'MIchigan', 'Northern Mariana Is', 'Micronesia'].\n"]}],"source":["unknown_states = laser_incidents.loc[~laser_incidents[\"State\"].isin(population[\"Territory\"]), \"State\"]\n","print(f\"There are {unknown_states.count()} rows with unknown states.\")\n","print(f\"Unknown state values are: \\n{list(unknown_states.unique())}.\")"]},{"attachments":{},"cell_type":"markdown","metadata":{"cell_id":"00228-b71602fc-802c-4d49-9352-842e9ff9a591","deepnote_cell_type":"markdown"},"source":["We could certainly clean the data by correcting some of the typos. Since the number of the rows with unknown states is not large\n","(compared to the length of the whole dataset), we will deliberetly not fix the state names.\n","Instead, we will remove those rows from the merged dataset by using the *inner* type of merge.\n","All the merge types: *left*, *inner*, *outer* and *right* are well explained by the schema below:\n","\n","![merge types](pandas-joins.png)"]},{"cell_type":"markdown","metadata":{"cell_id":"00229-7ec9ba49-b9d3-489a-86bd-1e7965a512b0","deepnote_cell_type":"markdown","tags":[]},"source":["We can use the [`merge`](https://pandas.pydata.org/docs/reference/api/pandas.merge.html) function to add the `\"Population\"` values."]},{"cell_type":"code","execution_count":103,"metadata":{"cell_id":"00230-ff4a24b6-527b-45f1-b552-a955156b6482","deepnote_cell_type":"code","deepnote_to_be_reexecuted":false,"execution_millis":51,"execution_start":1611581804022,"scrolled":true,"source_hash":"a9c59a48"},"outputs":[],"source":["laser_incidents_w_population = pd.merge(\n"," laser_incidents, population, left_on=\"State\", right_on=\"Territory\", how=\"inner\"\n",")"]},{"cell_type":"code","execution_count":104,"metadata":{"cell_id":"00231-6479b93f-1c71-4938-99c7-3ec9c177fc67","deepnote_cell_type":"code","deepnote_to_be_reexecuted":false,"execution_millis":4,"execution_start":1611581807612,"source_hash":"13cf3d59"},"outputs":[{"data":{"text/html":["
\n","\n","
\n"," \n","
\n","
\n","
Flight ID
\n","
Aircraft
\n","
Altitude
\n","
Airport
\n","
Laser Color
\n","
Injury
\n","
City
\n","
State
\n","
timestamp
\n","
Territory
\n","
Population
\n","
Population 2010
\n","
Code
\n","
\n"," \n"," \n","
\n","
0
\n","
N424RP
\n","
DA42/A
\n","
8500.0
\n","
SBA
\n","
green
\n","
False
\n","
Santa Barbara
\n","
California
\n","
2020-01-01 01:48:00
\n","
California
\n","
39029342.0
\n","
37253956
\n","
CA
\n","
\n","
\n","
1
\n","
AMF1829
\n","
B190
\n","
40000.0
\n","
SSF
\n","
green
\n","
False
\n","
San Antonio
\n","
Texas
\n","
2020-01-01 01:55:00
\n","
Texas
\n","
30029572.0
\n","
25145561
\n","
TX
\n","
\n","
\n","
2
\n","
NKS1881
\n","
A320
\n","
2500.0
\n","
TPA
\n","
green
\n","
False
\n","
Tampa
\n","
Florida
\n","
2020-01-01 02:14:00
\n","
Florida
\n","
22244823.0
\n","
18801310
\n","
FL
\n","
\n","
\n","
3
\n","
FDX3873
\n","
B763
\n","
3000.0
\n","
DFW
\n","
green
\n","
False
\n","
Fort Worth
\n","
Texas
\n","
2020-01-01 02:17:00
\n","
Texas
\n","
30029572.0
\n","
25145561
\n","
TX
\n","
\n","
\n","
4
\n","
SWA3635
\n","
B739
\n","
11000.0
\n","
MOD
\n","
green
\n","
False
\n","
Modesto
\n","
California
\n","
2020-01-01 02:18:00
\n","
California
\n","
39029342.0
\n","
37253956
\n","
CA
\n","
\n","
\n","
...
\n","
...
\n","
...
\n","
...
\n","
...
\n","
...
\n","
...
\n","
...
\n","
...
\n","
...
\n","
...
\n","
...
\n","
...
\n","
...
\n","
\n","
\n","
36370
\n","
VRD917
\n","
A320 (AIRBUS - A-32
\n","
8000.0
\n","
LAS
\n","
green
\n","
False
\n","
Las Vegas
\n","
Nevada
\n","
2015-12-31 05:25:00
\n","
Nevada
\n","
3177772.0
\n","
2700551
\n","
NV
\n","
\n","
\n","
36371
\n","
DAL2371
\n","
B738 (BOEING - 737-
\n","
11000.0
\n","
LHM
\n","
green
\n","
False
\n","
Lincoln
\n","
California
\n","
2015-12-31 06:23:00
\n","
California
\n","
39029342.0
\n","
37253956
\n","
CA
\n","
\n","
\n","
36372
\n","
Unknown
\n","
Unknown
\n","
2000.0
\n","
FOK
\n","
green
\n","
False
\n","
Westhampton Beach
\n","
New York
\n","
2015-12-31 11:11:00
\n","
New York
\n","
19677151.0
\n","
19378102
\n","
NY
\n","
\n","
\n","
36373
\n","
UAL197
\n","
B737
\n","
300.0
\n","
GUM
\n","
green
\n","
False
\n","
Guam
\n","
Guam
\n","
2015-12-31 11:47:00
\n","
Guam
\n","
NaN
\n","
159358
\n","
GU
\n","
\n","
\n","
36374
\n","
EJA336
\n","
E55P/L
\n","
1000.0
\n","
APF
\n","
green
\n","
False
\n","
Naples
\n","
Florida
\n","
2015-12-31 23:14:00
\n","
Florida
\n","
22244823.0
\n","
18801310
\n","
FL
\n","
\n"," \n","
\n","
36375 rows × 13 columns
\n","
"],"text/plain":[" Flight ID Aircraft Altitude Airport Laser Color Injury \\\n","0 N424RP DA42/A 8500.0 SBA green False \n","1 AMF1829 B190 40000.0 SSF green False \n","2 NKS1881 A320 2500.0 TPA green False \n","3 FDX3873 B763 3000.0 DFW green False \n","4 SWA3635 B739 11000.0 MOD green False \n","... ... ... ... ... ... ... \n","36370 VRD917 A320 (AIRBUS - A-32 8000.0 LAS green False \n","36371 DAL2371 B738 (BOEING - 737- 11000.0 LHM green False \n","36372 Unknown Unknown 2000.0 FOK green False \n","36373 UAL197 B737 300.0 GUM green False \n","36374 EJA336 E55P/L 1000.0 APF green False \n","\n"," City State timestamp Territory \\\n","0 Santa Barbara California 2020-01-01 01:48:00 California \n","1 San Antonio Texas 2020-01-01 01:55:00 Texas \n","2 Tampa Florida 2020-01-01 02:14:00 Florida \n","3 Fort Worth Texas 2020-01-01 02:17:00 Texas \n","4 Modesto California 2020-01-01 02:18:00 California \n","... ... ... ... ... \n","36370 Las Vegas Nevada 2015-12-31 05:25:00 Nevada \n","36371 Lincoln California 2015-12-31 06:23:00 California \n","36372 Westhampton Beach New York 2015-12-31 11:11:00 New York \n","36373 Guam Guam 2015-12-31 11:47:00 Guam \n","36374 Naples Florida 2015-12-31 23:14:00 Florida \n","\n"," Population Population 2010 Code \n","0 39029342.0 37253956 CA \n","1 30029572.0 25145561 TX \n","2 22244823.0 18801310 FL \n","3 30029572.0 25145561 TX \n","4 39029342.0 37253956 CA \n","... ... ... ... \n","36370 3177772.0 2700551 NV \n","36371 39029342.0 37253956 CA \n","36372 19677151.0 19378102 NY \n","36373 NaN 159358 GU \n","36374 22244823.0 18801310 FL \n","\n","[36375 rows x 13 columns]"]},"execution_count":104,"metadata":{},"output_type":"execute_result"}],"source":["laser_incidents_w_population"]},{"cell_type":"code","execution_count":106,"metadata":{"cell_id":"00232-d6b25695-d24a-46de-948d-e21f0d7d044d","deepnote_cell_type":"code","deepnote_to_be_reexecuted":false,"execution_millis":129,"execution_start":1611581811551,"source_hash":"e8ac57e1"},"outputs":[{"data":{"text/html":["
\n","\n","
\n"," \n","
\n","
\n","
Flight ID
\n","
Aircraft
\n","
Altitude
\n","
Airport
\n","
Laser Color
\n","
Injury
\n","
City
\n","
State
\n","
timestamp
\n","
Territory
\n","
Population
\n","
Population 2010
\n","
Code
\n","
\n"," \n"," \n","
\n","
count
\n","
36363
\n","
36323
\n","
36137.000000
\n","
36365
\n","
36374
\n","
36359
\n","
36374
\n","
36375
\n","
33361
\n","
36375
\n","
3.634300e+04
\n","
3.637500e+04
\n","
36375
\n","
\n","
\n","
unique
\n","
24735
\n","
1726
\n","
NaN
\n","
2009
\n","
73
\n","
2
\n","
2239
\n","
54
\n","
NaN
\n","
54
\n","
NaN
\n","
NaN
\n","
54
\n","
\n","
\n","
top
\n","
UNKN
\n","
B737
\n","
NaN
\n","
LAX
\n","
green
\n","
False
\n","
Phoenix
\n","
California
\n","
NaN
\n","
California
\n","
NaN
\n","
NaN
\n","
CA
\n","
\n","
\n","
freq
\n","
49
\n","
3811
\n","
NaN
\n","
988
\n","
32715
\n","
36177
\n","
1156
\n","
7268
\n","
NaN
\n","
7268
\n","
NaN
\n","
NaN
\n","
7268
\n","
\n","
\n","
mean
\n","
NaN
\n","
NaN
\n","
7363.934333
\n","
NaN
\n","
NaN
\n","
NaN
\n","
NaN
\n","
NaN
\n","
2017-08-31 14:04:42.552681472
\n","
NaN
\n","
1.679960e+07
\n","
1.542564e+07
\n","
NaN
\n","
\n","
\n","
min
\n","
NaN
\n","
NaN
\n","
0.000000
\n","
NaN
\n","
NaN
\n","
NaN
\n","
NaN
\n","
NaN
\n","
2015-01-01 02:00:00
\n","
NaN
\n","
5.813810e+05
\n","
1.064050e+05
\n","
NaN
\n","
\n","
\n","
25%
\n","
NaN
\n","
NaN
\n","
2500.000000
\n","
NaN
\n","
NaN
\n","
NaN
\n","
NaN
\n","
NaN
\n","
2016-03-26 02:47:00
\n","
NaN
\n","
5.282634e+06
\n","
4.779736e+06
\n","
NaN
\n","
\n","
\n","
50%
\n","
NaN
\n","
NaN
\n","
5000.000000
\n","
NaN
\n","
NaN
\n","
NaN
\n","
NaN
\n","
NaN
\n","
2017-08-02 02:40:00
\n","
NaN
\n","
1.069897e+07
\n","
9.687653e+06
\n","
NaN
\n","
\n","
\n","
75%
\n","
NaN
\n","
NaN
\n","
9800.000000
\n","
NaN
\n","
NaN
\n","
NaN
\n","
NaN
\n","
NaN
\n","
2019-01-15 04:00:00
\n","
NaN
\n","
3.002957e+07
\n","
2.514556e+07
\n","
NaN
\n","
\n","
\n","
max
\n","
NaN
\n","
NaN
\n","
240000.000000
\n","
NaN
\n","
NaN
\n","
NaN
\n","
NaN
\n","
NaN
\n","
2020-08-01 10:49:00
\n","
NaN
\n","
3.902934e+07
\n","
3.725396e+07
\n","
NaN
\n","
\n","
\n","
std
\n","
NaN
\n","
NaN
\n","
7645.507063
\n","
NaN
\n","
NaN
\n","
NaN
\n","
NaN
\n","
NaN
\n","
NaN
\n","
NaN
\n","
1.378730e+07
\n","
1.287534e+07
\n","
NaN
\n","
\n"," \n","
\n","
"],"text/plain":[" Flight ID Aircraft Altitude Airport Laser Color Injury City \\\n","count 36363 36323 36137.000000 36365 36374 36359 36374 \n","unique 24735 1726 NaN 2009 73 2 2239 \n","top UNKN B737 NaN LAX green False Phoenix \n","freq 49 3811 NaN 988 32715 36177 1156 \n","mean NaN NaN 7363.934333 NaN NaN NaN NaN \n","min NaN NaN 0.000000 NaN NaN NaN NaN \n","25% NaN NaN 2500.000000 NaN NaN NaN NaN \n","50% NaN NaN 5000.000000 NaN NaN NaN NaN \n","75% NaN NaN 9800.000000 NaN NaN NaN NaN \n","max NaN NaN 240000.000000 NaN NaN NaN NaN \n","std NaN NaN 7645.507063 NaN NaN NaN NaN \n","\n"," State timestamp Territory Population \\\n","count 36375 33361 36375 3.634300e+04 \n","unique 54 NaN 54 NaN \n","top California NaN California NaN \n","freq 7268 NaN 7268 NaN \n","mean NaN 2017-08-31 14:04:42.552681472 NaN 1.679960e+07 \n","min NaN 2015-01-01 02:00:00 NaN 5.813810e+05 \n","25% NaN 2016-03-26 02:47:00 NaN 5.282634e+06 \n","50% NaN 2017-08-02 02:40:00 NaN 1.069897e+07 \n","75% NaN 2019-01-15 04:00:00 NaN 3.002957e+07 \n","max NaN 2020-08-01 10:49:00 NaN 3.902934e+07 \n","std NaN NaN NaN 1.378730e+07 \n","\n"," Population 2010 Code \n","count 3.637500e+04 36375 \n","unique NaN 54 \n","top NaN CA \n","freq NaN 7268 \n","mean 1.542564e+07 NaN \n","min 1.064050e+05 NaN \n","25% 4.779736e+06 NaN \n","50% 9.687653e+06 NaN \n","75% 2.514556e+07 NaN \n","max 3.725396e+07 NaN \n","std 1.287534e+07 NaN "]},"execution_count":106,"metadata":{},"output_type":"execute_result"}],"source":["laser_incidents_w_population.describe(include=\"all\")"]},{"cell_type":"markdown","metadata":{"cell_id":"00233-a55496fd-adeb-4df6-acc8-95de93fb56fc","deepnote_cell_type":"markdown"},"source":["## Grouping & aggregation\n","\n","A common pattern in data analysis is grouping (or binning) data based on some property and getting some aggredate statistics.\n","\n","*Example:* Group this workshop participants by nationality a get the cardinality (the size) of each group."]},{"cell_type":"markdown","metadata":{"cell_id":"00234-cd96e084-45a7-4d0c-92b7-3b36e019f3dc","deepnote_cell_type":"markdown","tags":[]},"source":["Possibly the simplest group and aggregation is the `value_counts` method, which groups by the respective column value\n","and yields the number (or normalized frequency) of each unique value in the data."]},{"cell_type":"code","execution_count":107,"metadata":{"cell_id":"00235-ff04b023-4ba1-4c9e-95d2-ace15161ee6c","deepnote_cell_type":"code","deepnote_to_be_reexecuted":false,"execution_millis":1,"execution_start":1611581834504,"source_hash":"17d3e2ac","tags":[]},"outputs":[{"data":{"text/plain":["State\n","California 7268\n","Texas 3620\n","Florida 2702\n","Arizona 1910\n","Colorado 988\n","Washington 982\n","Kentucky 952\n","Illinois 946\n","New York 921\n","Puerto Rico 912\n","Oregon 895\n","Tennessee 888\n","Nevada 837\n","Pennsylvania 826\n","Indiana 812\n","Utah 789\n","Ohio 750\n","Georgia 714\n","North Carolina 605\n","Missouri 547\n","Minnesota 531\n","New Jersey 519\n","Michigan 505\n","Hawaii 500\n","Alabama 473\n","Virginia 412\n","Oklahoma 412\n","New Mexico 401\n","Louisiana 351\n","Massachusetts 346\n","South Carolina 306\n","Maryland 255\n","Idaho 237\n","Arkansas 237\n","Wisconsin 207\n","Iowa 200\n","Connecticut 185\n","District of Columbia 183\n","Kansas 172\n","Mississippi 156\n","Montana 134\n","Nebraska 112\n","West Virginia 108\n","North Dakota 92\n","New Hampshire 86\n","Rhode Island 81\n","Alaska 67\n","Maine 66\n","South Dakota 52\n","Delaware 43\n","Guam 31\n","Vermont 28\n","Wyoming 22\n","U.S. Virgin Islands 1\n","Name: count, dtype: int64"]},"execution_count":107,"metadata":{},"output_type":"execute_result"}],"source":["laser_incidents_w_population[\"State\"].value_counts(normalize=False)"]},{"cell_type":"markdown","metadata":{"cell_id":"00236-162b4e43-c0a5-4e6e-81e7-c67d07c9727c","deepnote_cell_type":"markdown","tags":[]},"source":["This is just a primitive grouping and aggregation operation, we will look into more advanced patterns. \n","Let us say we would like to get some numbers (statistics) for individual states.\n","We can [`groupby`](https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.groupby.html) the dataset by the `\"State\"` column:"]},{"cell_type":"code","execution_count":108,"metadata":{"cell_id":"00237-40cb5372-c1dd-48e6-a1f7-78c8508ee65d","deepnote_cell_type":"code","deepnote_to_be_reexecuted":false,"execution_millis":0,"execution_start":1611581860156,"source_hash":"93ed3a20"},"outputs":[],"source":["grouped_by_state = laser_incidents_w_population.groupby(\"State\")"]},{"cell_type":"markdown","metadata":{"cell_id":"00238-34236922-5ddf-42fe-9e33-0739ace84d5d","deepnote_cell_type":"markdown"},"source":["What did we get? "]},{"cell_type":"code","execution_count":109,"metadata":{"cell_id":"00239-180ff963-2b88-45b6-9229-da93d83943ae","deepnote_cell_type":"code","deepnote_to_be_reexecuted":false,"execution_millis":1,"execution_start":1611581861359,"source_hash":"67295c6d"},"outputs":[{"data":{"text/plain":[""]},"execution_count":109,"metadata":{},"output_type":"execute_result"}],"source":["grouped_by_state"]},{"cell_type":"markdown","metadata":{"cell_id":"00240-02705e76-6766-43d1-bea8-92907f6ba93e","deepnote_cell_type":"markdown"},"source":["What is this `DataFrameGroupBy` object? [Its use case is](http://pandas.pydata.org/pandas-docs/stable/user_guide/groupby.html):\n","* Splitting the data into groups based on some criteria.\n","* Applying a function to each group independently.\n","* Combining the results into a data structure.\n"]},{"cell_type":"markdown","metadata":{"cell_id":"00241-6f20b354-c6fa-4f80-aab2-a5bf03b1bc58","deepnote_cell_type":"markdown"},"source":["Let's try a simple aggregate: the mean of altitude for each state:"]},{"cell_type":"code","execution_count":110,"metadata":{"cell_id":"00242-53cf6c41-e0fc-401e-86da-9feecba8c0d8","deepnote_cell_type":"code","deepnote_to_be_reexecuted":false,"execution_millis":0,"execution_start":1611581866153,"source_hash":"96a64c50"},"outputs":[{"data":{"text/plain":["State\n","Puerto Rico 3552.996703\n","Hawaii 4564.536585\n","Florida 4970.406773\n","Alaska 5209.848485\n","Wisconsin 5529.951220\n","New York 5530.208743\n","Guam 5800.000000\n","Maryland 6071.739130\n","District of Columbia 6087.144444\n","New Jersey 6204.306950\n","Illinois 6306.310566\n","Massachusetts 6473.763848\n","Texas 6487.493759\n","Delaware 6602.380952\n","Arizona 6678.333158\n","Nevada 6730.037485\n","California 6919.705613\n","Washington 7110.687629\n","Louisiana 7276.276353\n","Nebraska 7277.321429\n","Michigan 7330.459082\n","Oregon 7411.285231\n","South Dakota 7419.607843\n","North Dakota 7455.434783\n","Ohio 7482.409880\n","Pennsylvania 7518.614724\n","Connecticut 7519.562842\n","Vermont 7610.714286\n","Idaho 7636.756410\n","Oklahoma 7678.803440\n","Montana 7780.620155\n","Virginia 7903.889976\n","Rhode Island 8186.875000\n","Minnesota 8191.869811\n","South Carolina 8593.535948\n","Kansas 8661.994152\n","Indiana 8664.055693\n","Maine 8733.333333\n","Alabama 8821.210191\n","Mississippi 8828.685897\n","Tennessee 8987.354402\n","North Carolina 9251.180763\n","New Hampshire 9591.764706\n","Utah 9892.935197\n","Iowa 10174.619289\n","Missouri 10548.161468\n","New Mexico 10714.706030\n","U.S. Virgin Islands 11000.000000\n","Georgia 11130.663854\n","Arkansas 11203.483051\n","Colorado 11301.869388\n","Kentucky 11583.086225\n","West Virginia 12108.386792\n","Wyoming 18238.095238\n","Name: Altitude, dtype: float64"]},"execution_count":110,"metadata":{},"output_type":"execute_result"}],"source":["grouped_by_state[\"Altitude\"].mean().sort_values()"]},{"cell_type":"markdown","metadata":{"cell_id":"00243-7ed92fb7-0072-4778-a14b-d361a388eedb","deepnote_cell_type":"markdown"},"source":["What if we were to group by year? We don't have a year column but we can just extract the year from the date and use it for `groupby`."]},{"cell_type":"code","execution_count":111,"metadata":{"cell_id":"00244-fa3bee11-be57-4f94-9952-dfcdef83d3e5","deepnote_cell_type":"code","deepnote_to_be_reexecuted":false,"execution_millis":0,"execution_start":1611581884104,"source_hash":"fc8d42a7"},"outputs":[],"source":["grouped_by_year = laser_incidents_w_population.groupby(laser_incidents_w_population[\"timestamp\"].dt.year)"]},{"cell_type":"markdown","metadata":{"cell_id":"00245-151ab8cf-19db-4991-aa09-10228e1f2ece","deepnote_cell_type":"markdown","tags":[]},"source":["You may have noticed how we extracted the year using the [`.dt` accessor](https://pandas.pydata.org/docs/user_guide/basics.html#basics-dt-accessors).\n","We will use `.dt` even more below."]},{"cell_type":"markdown","metadata":{"cell_id":"00246-e25b5d25-0169-46dd-830a-0f370853727b","deepnote_cell_type":"markdown","tags":[]},"source":["Let's calculate the mean altitude of laser incidents per year. Are the lasers getting more powerful? 🤔"]},{"cell_type":"code","execution_count":112,"metadata":{"cell_id":"00247-a6f39663-ecf7-40c6-9dee-9f55a04d8976","deepnote_cell_type":"code","deepnote_to_be_reexecuted":false,"execution_millis":4,"execution_start":1611581890788,"source_hash":"63689ae0","tags":[]},"outputs":[{"data":{"text/plain":["timestamp\n","2015.0 6564.621830\n","2016.0 7063.288912\n","2017.0 7420.971064\n","2018.0 7602.049323\n","2019.0 8242.586268\n","2020.0 8618.242465\n","Name: Altitude, dtype: float64"]},"execution_count":112,"metadata":{},"output_type":"execute_result"}],"source":["mean_altitude_per_year = grouped_by_year[\"Altitude\"].mean().sort_index()\n","mean_altitude_per_year"]},{"cell_type":"markdown","metadata":{"cell_id":"00248-b0e4965f-87d6-417f-be95-e135dc69eb65","deepnote_cell_type":"markdown","tags":[]},"source":["We can also quickly plot the results, more on plotting in the next lessons."]},{"cell_type":"code","execution_count":113,"metadata":{"cell_id":"00249-3a86526f-bd32-406b-a34e-4dc9c21e3364","deepnote_cell_type":"code","deepnote_to_be_reexecuted":false,"execution_millis":153,"execution_start":1611581894917,"source_hash":"f6c49ffd","tags":[]},"outputs":[{"data":{"image/png":"iVBORw0KGgoAAAANSUhEUgAAAjEAAAHTCAYAAADWC0ngAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/bCgiHAAAACXBIWXMAAA9hAAAPYQGoP6dpAAAspklEQVR4nO3df3RU9Z3/8dckISEJyRB+ZIZIhLhGjCauihoDVnCRH5aYVmzpGjeKpYgHhEZhKRxUIivBHyuiZMsqciCKiLsqW1dtBBWzS/khBKPyQxDll0oIa4chhDRB8vn+4eF+O4RfgdtMPuH5OOee07n3PTPv+26qr37m3hmPMcYIAADAMhHhbgAAAOBsEGIAAICVCDEAAMBKhBgAAGAlQgwAALASIQYAAFiJEAMAAKwUFe4G/lYaGxv13XffKSEhQR6PJ9ztAACAM2CMUU1NjVJSUhQRceq1ljYbYr777julpqaGuw0AAHAW9uzZo+7du5+yps2GmISEBEk/DiExMTHM3QAAgDNx8OBBpaamOv8eP5U2G2KOfYSUmJhIiAEAwDJncikIF/YCAAArEWIAAICVCDEAAMBKhBgAAGAlQgwAALASIQYAAFiJEAMAAKxEiAEAAFYixAAAACsRYgAAgJUIMQAAwEqEGAAAYCVCDAAAsBIhBgAAWIkQAwAArBQV7gYAAMCJ9Zz8TrhbOCM7Hx8alvdlJQYAAFiJEAMAAKxEiAEAAFYixAAAACsRYgAAgJUIMQAAwEqEGAAAYCVCDAAAsBIhBgAAWIkQAwAArESIAQAAViLEAAAAKxFiAACAlQgxAADASlHhbgAA0Pb0nPxOuFs4rZ2PDw13CzhHrMQAAAArEWIAAICVCDEAAMBKhBgAAGAlQgwAALBSs0LMDz/8oIceekhpaWmKjY3VRRddpOnTp6uxsdGpMcaoqKhIKSkpio2NVf/+/bVp06aQ16mvr9e4cePUpUsXxcfHKy8vT998801ITSAQUEFBgbxer7xerwoKCnTgwIGzP1MAANCmNCvEPPHEE/r3f/93lZSUaMuWLXryySf11FNPac6cOU7Nk08+qVmzZqmkpETr1q2T3+/XwIEDVVNT49QUFhZq6dKlWrJkiVauXKlDhw4pNzdXR48edWry8/NVWVmpsrIylZWVqbKyUgUFBS6cMgAAaAua9T0xq1ev1s9+9jMNHfrjvfU9e/bUq6++qvXr10v6cRVm9uzZmjp1qoYNGyZJKi0tlc/n0+LFizV69GgFg0HNnz9fL7/8sm6++WZJ0qJFi5Samqr3339fgwcP1pYtW1RWVqY1a9YoOztbkjRv3jzl5ORo69at6tWrl2sDAAAAdmrWSswNN9ygDz74QNu2bZMkffrpp1q5cqV++tOfSpJ27NihqqoqDRo0yHlOTEyM+vXrp1WrVkmSKioqdOTIkZCalJQUZWZmOjWrV6+W1+t1AowkXX/99fJ6vU7N8err63Xw4MGQDQAAtF3NWon53e9+p2AwqEsvvVSRkZE6evSoZsyYoTvuuEOSVFVVJUny+Xwhz/P5fNq1a5dTEx0draSkpCY1x55fVVWl5OTkJu+fnJzs1Bxv5syZevTRR5tzOgAAwGLNWol57bXXtGjRIi1evFgbNmxQaWmp/vVf/1WlpaUhdR6PJ+SxMabJvuMdX3Oi+lO9zpQpUxQMBp1tz549Z3paAADAQs1aifnnf/5nTZ48Wf/4j/8oScrKytKuXbs0c+ZM3X333fL7/ZJ+XEnp1q2b87zq6mpndcbv96uhoUGBQCBkNaa6ulp9+vRxavbt29fk/ffv399kleeYmJgYxcTENOd0AACAxZq1EnP48GFFRIQ+JTIy0rnFOi0tTX6/X8uXL3eONzQ0qLy83AkovXv3Vrt27UJq9u7dq40bNzo1OTk5CgaD+vjjj52atWvXKhgMOjUAAOD81qyVmFtvvVUzZszQhRdeqMsvv1yffPKJZs2apV//+teSfvwIqLCwUMXFxUpPT1d6erqKi4sVFxen/Px8SZLX69XIkSM1YcIEde7cWZ06ddLEiROVlZXl3K2UkZGhIUOGaNSoUXr++eclSffee69yc3O5MwkAAEhqZoiZM2eOHn74YY0ZM0bV1dVKSUnR6NGj9cgjjzg1kyZNUl1dncaMGaNAIKDs7GwtW7ZMCQkJTs0zzzyjqKgoDR8+XHV1dRowYIAWLlyoyMhIp+aVV17R+PHjnbuY8vLyVFJScq7nCwAA2giPMcaEu4m/hYMHD8rr9SoYDCoxMTHc7QDAeaXn5HfC3cJp7Xx8aLhbOC0b5ii5O8vm/Pub304CAABWIsQAAAArEWIAAICVCDEAAMBKhBgAAGAlQgwAALASIQYAAFiJEAMAAKxEiAEAAFZq1s8OAEBbZsO3o9rwLbNAS2ElBgAAWIkQAwAArESIAQAAViLEAAAAKxFiAACAlQgxAADASoQYAABgJb4nBrCcDd9tIvH9JgDcx0oMAACwEiEGAABYiRADAACsRIgBAABWIsQAAAArEWIAAICVCDEAAMBKhBgAAGAlQgwAALASIQYAAFiJEAMAAKxEiAEAAFYixAAAACvxK9YIGxt+fZlfXgaA1ouVGAAAYCVCDAAAsBIhBgAAWIkQAwAArESIAQAAViLEAAAAKxFiAACAlQgxAADASoQYAABgJUIMAACwEiEGAABYiRADAACsRIgBAABWIsQAAAArEWIAAICVCDEAAMBKhBgAAGAlQgwAALASIQYAAFiJEAMAAKwUFe4GbNNz8jvhbuG0dj4+NNwtAADwN8dKDAAAsBIhBgAAWIkQAwAArESIAQAAViLEAAAAKxFiAACAlQgxAADASoQYAABgJUIMAACwEiEGAABYiRADAACsRIgBAABWIsQAAAArEWIAAICVCDEAAMBKhBgAAGAlQgwAALASIQYAAFip2SHm22+/1T/90z+pc+fOiouL05VXXqmKigrnuDFGRUVFSklJUWxsrPr3769NmzaFvEZ9fb3GjRunLl26KD4+Xnl5efrmm29CagKBgAoKCuT1euX1elVQUKADBw6c3VkCAIA2p1khJhAIqG/fvmrXrp3++Mc/avPmzXr66afVsWNHp+bJJ5/UrFmzVFJSonXr1snv92vgwIGqqalxagoLC7V06VItWbJEK1eu1KFDh5Sbm6ujR486Nfn5+aqsrFRZWZnKyspUWVmpgoKCcz9jAADQJkQ1p/iJJ55QamqqFixY4Ozr2bOn85+NMZo9e7amTp2qYcOGSZJKS0vl8/m0ePFijR49WsFgUPPnz9fLL7+sm2++WZK0aNEipaam6v3339fgwYO1ZcsWlZWVac2aNcrOzpYkzZs3Tzk5Odq6dat69ep1rucNAAAs16yVmLfeekvXXHONfvnLXyo5OVlXXXWV5s2b5xzfsWOHqqqqNGjQIGdfTEyM+vXrp1WrVkmSKioqdOTIkZCalJQUZWZmOjWrV6+W1+t1AowkXX/99fJ6vU7N8err63Xw4MGQDQAAtF3NCjFff/215s6dq/T0dL333nu67777NH78eL300kuSpKqqKkmSz+cLeZ7P53OOVVVVKTo6WklJSaesSU5ObvL+ycnJTs3xZs6c6Vw/4/V6lZqa2pxTAwAAlmlWiGlsbNTVV1+t4uJiXXXVVRo9erRGjRqluXPnhtR5PJ6Qx8aYJvuOd3zNiepP9TpTpkxRMBh0tj179pzpaQEAAAs1K8R069ZNl112Wci+jIwM7d69W5Lk9/slqclqSXV1tbM64/f71dDQoEAgcMqaffv2NXn//fv3N1nlOSYmJkaJiYkhGwAAaLuaFWL69u2rrVu3huzbtm2bevToIUlKS0uT3+/X8uXLneMNDQ0qLy9Xnz59JEm9e/dWu3btQmr27t2rjRs3OjU5OTkKBoP6+OOPnZq1a9cqGAw6NQAA4PzWrLuTHnjgAfXp00fFxcUaPny4Pv74Y73wwgt64YUXJP34EVBhYaGKi4uVnp6u9PR0FRcXKy4uTvn5+ZIkr9erkSNHasKECercubM6deqkiRMnKisry7lbKSMjQ0OGDNGoUaP0/PPPS5Luvfde5ebmcmcSAACQ1MwQc+2112rp0qWaMmWKpk+frrS0NM2ePVt33nmnUzNp0iTV1dVpzJgxCgQCys7O1rJly5SQkODUPPPMM4qKitLw4cNVV1enAQMGaOHChYqMjHRqXnnlFY0fP965iykvL08lJSXner4AAKCNaFaIkaTc3Fzl5uae9LjH41FRUZGKiopOWtO+fXvNmTNHc+bMOWlNp06dtGjRoua2BwAAzhP8dhIAALASIQYAAFiJEAMAAKxEiAEAAFYixAAAACsRYgAAgJUIMQAAwEqEGAAAYCVCDAAAsBIhBgAAWIkQAwAArESIAQAAViLEAAAAKxFiAACAlQgxAADASoQYAABgJUIMAACwEiEGAABYiRADAACsRIgBAABWIsQAAAArEWIAAICVCDEAAMBKhBgAAGAlQgwAALASIQYAAFiJEAMAAKxEiAEAAFYixAAAACsRYgAAgJUIMQAAwEqEGAAAYCVCDAAAsBIhBgAAWIkQAwAArESIAQAAViLEAAAAKxFiAACAlQgxAADASoQYAABgJUIMAACwEiEGAABYiRADAACsRIgBAABWIsQAAAArEWIAAICVCDEAAMBKhBgAAGAlQgwAALASIQYAAFiJEAMAAKxEiAEAAFYixAAAACsRYgAAgJUIMQAAwEqEGAAAYCVCDAAAsBIhBgAAWIkQAwAArESIAQAAViLEAAAAKxFiAACAlQgxAADASoQYAABgJUIMAACwEiEGAABYiRADAACsRIgBAABWIsQAAAArEWIAAICVCDEAAMBK5xRiZs6cKY/Ho8LCQmefMUZFRUVKSUlRbGys+vfvr02bNoU8r76+XuPGjVOXLl0UHx+vvLw8ffPNNyE1gUBABQUF8nq98nq9Kigo0IEDB86lXQAA0IacdYhZt26dXnjhBV1xxRUh+5988knNmjVLJSUlWrdunfx+vwYOHKiamhqnprCwUEuXLtWSJUu0cuVKHTp0SLm5uTp69KhTk5+fr8rKSpWVlamsrEyVlZUqKCg423YBAEAbc1Yh5tChQ7rzzjs1b948JSUlOfuNMZo9e7amTp2qYcOGKTMzU6WlpTp8+LAWL14sSQoGg5o/f76efvpp3Xzzzbrqqqu0aNEiff7553r//fclSVu2bFFZWZlefPFF5eTkKCcnR/PmzdPbb7+trVu3unDaAADAdmcVYsaOHauhQ4fq5ptvDtm/Y8cOVVVVadCgQc6+mJgY9evXT6tWrZIkVVRU6MiRIyE1KSkpyszMdGpWr14tr9er7Oxsp+b666+X1+t1ao5XX1+vgwcPhmwAAKDtimruE5YsWaINGzZo3bp1TY5VVVVJknw+X8h+n8+nXbt2OTXR0dEhKzjHao49v6qqSsnJyU1ePzk52ak53syZM/Xoo48293QAAIClmrUSs2fPHv32t7/VokWL1L59+5PWeTyekMfGmCb7jnd8zYnqT/U6U6ZMUTAYdLY9e/ac8v0AAIDdmhViKioqVF1drd69eysqKkpRUVEqLy/Xc889p6ioKGcF5vjVkurqaueY3+9XQ0ODAoHAKWv27dvX5P3379/fZJXnmJiYGCUmJoZsAACg7WpWiBkwYIA+//xzVVZWOts111yjO++8U5WVlbrooovk9/u1fPly5zkNDQ0qLy9Xnz59JEm9e/dWu3btQmr27t2rjRs3OjU5OTkKBoP6+OOPnZq1a9cqGAw6NQAA4PzWrGtiEhISlJmZGbIvPj5enTt3dvYXFhaquLhY6enpSk9PV3FxseLi4pSfny9J8nq9GjlypCZMmKDOnTurU6dOmjhxorKyspwLhTMyMjRkyBCNGjVKzz//vCTp3nvvVW5urnr16nXOJw0AAOzX7At7T2fSpEmqq6vTmDFjFAgElJ2drWXLlikhIcGpeeaZZxQVFaXhw4errq5OAwYM0MKFCxUZGenUvPLKKxo/frxzF1NeXp5KSkrcbhcAAFjqnEPMRx99FPLY4/GoqKhIRUVFJ31O+/btNWfOHM2ZM+ekNZ06ddKiRYvOtT0AANBG8dtJAADASoQYAABgJUIMAACwEiEGAABYiRADAACsRIgBAABWIsQAAAArEWIAAICVCDEAAMBKhBgAAGAlQgwAALASIQYAAFiJEAMAAKxEiAEAAFYixAAAACsRYgAAgJUIMQAAwEqEGAAAYCVCDAAAsBIhBgAAWIkQAwAArESIAQAAViLEAAAAKxFiAACAlQgxAADASoQYAABgJUIMAACwEiEGAABYiRADAACsRIgBAABWIsQAAAArEWIAAICVCDEAAMBKhBgAAGAlQgwAALASIQYAAFiJEAMAAKxEiAEAAFYixAAAACsRYgAAgJUIMQAAwEqEGAAAYCVCDAAAsBIhBgAAWIkQAwAArESIAQAAViLEAAAAKxFiAACAlQgxAADASoQYAABgJUIMAACwEiEGAABYiRADAACsRIgBAABWIsQAAAArEWIAAICVCDEAAMBKhBgAAGAlQgwAALASIQYAAFiJEAMAAKxEiAEAAFYixAAAACsRYgAAgJUIMQAAwEqEGAAAYCVCDAAAsBIhBgAAWIkQAwAArESIAQAAVmpWiJk5c6auvfZaJSQkKDk5WT//+c+1devWkBpjjIqKipSSkqLY2Fj1799fmzZtCqmpr6/XuHHj1KVLF8XHxysvL0/ffPNNSE0gEFBBQYG8Xq+8Xq8KCgp04MCBsztLAADQ5jQrxJSXl2vs2LFas2aNli9frh9++EGDBg1SbW2tU/Pkk09q1qxZKikp0bp16+T3+zVw4EDV1NQ4NYWFhVq6dKmWLFmilStX6tChQ8rNzdXRo0edmvz8fFVWVqqsrExlZWWqrKxUQUGBC6cMAADagqjmFJeVlYU8XrBggZKTk1VRUaEbb7xRxhjNnj1bU6dO1bBhwyRJpaWl8vl8Wrx4sUaPHq1gMKj58+fr5Zdf1s033yxJWrRokVJTU/X+++9r8ODB2rJli8rKyrRmzRplZ2dLkubNm6ecnBxt3bpVvXr1cuPcAQCAxc7pmphgMChJ6tSpkyRpx44dqqqq0qBBg5yamJgY9evXT6tWrZIkVVRU6MiRIyE1KSkpyszMdGpWr14tr9frBBhJuv766+X1ep2a49XX1+vgwYMhGwAAaLvOOsQYY/Tggw/qhhtuUGZmpiSpqqpKkuTz+UJqfT6fc6yqqkrR0dFKSko6ZU1ycnKT90xOTnZqjjdz5kzn+hmv16vU1NSzPTUAAGCBsw4x999/vz777DO9+uqrTY55PJ6Qx8aYJvuOd3zNiepP9TpTpkxRMBh0tj179pzJaQAAAEudVYgZN26c3nrrLa1YsULdu3d39vv9fklqslpSXV3trM74/X41NDQoEAicsmbfvn1N3nf//v1NVnmOiYmJUWJiYsgGAADarmaFGGOM7r//fr355pv68MMPlZaWFnI8LS1Nfr9fy5cvd/Y1NDSovLxcffr0kST17t1b7dq1C6nZu3evNm7c6NTk5OQoGAzq448/dmrWrl2rYDDo1AAAgPNbs+5OGjt2rBYvXqw//OEPSkhIcFZcvF6vYmNj5fF4VFhYqOLiYqWnpys9PV3FxcWKi4tTfn6+Uzty5EhNmDBBnTt3VqdOnTRx4kRlZWU5dytlZGRoyJAhGjVqlJ5//nlJ0r333qvc3FzuTAIAAJKaGWLmzp0rSerfv3/I/gULFmjEiBGSpEmTJqmurk5jxoxRIBBQdna2li1bpoSEBKf+mWeeUVRUlIYPH666ujoNGDBACxcuVGRkpFPzyiuvaPz48c5dTHl5eSopKTmbcwQAAG1Qs0KMMea0NR6PR0VFRSoqKjppTfv27TVnzhzNmTPnpDWdOnXSokWLmtMeAAA4j/DbSQAAwEqEGAAAYCVCDAAAsBIhBgAAWIkQAwAArESIAQAAViLEAAAAKxFiAACAlQgxAADASoQYAABgJUIMAACwEiEGAABYiRADAACsRIgBAABWIsQAAAArEWIAAICVCDEAAMBKhBgAAGAlQgwAALASIQYAAFiJEAMAAKxEiAEAAFYixAAAACsRYgAAgJUIMQAAwEqEGAAAYCVCDAAAsBIhBgAAWIkQAwAArESIAQAAViLEAAAAKxFiAACAlQgxAADASoQYAABgJUIMAACwEiEGAABYiRADAACsRIgBAABWIsQAAAArEWIAAICVCDEAAMBKhBgAAGAlQgwAALASIQYAAFiJEAMAAKxEiAEAAFYixAAAACsRYgAAgJUIMQAAwEqEGAAAYCVCDAAAsBIhBgAAWIkQAwAArESIAQAAViLEAAAAKxFiAACAlQgxAADASoQYAABgJUIMAACwEiEGAABYiRADAACsRIgBAABWIsQAAAArEWIAAICVCDEAAMBKhBgAAGAlQgwAALASIQYAAFiJEAMAAKxEiAEAAFYixAAAACu1+hDz+9//XmlpaWrfvr169+6t//3f/w13SwAAoBVo1SHmtddeU2FhoaZOnapPPvlEP/nJT3TLLbdo9+7d4W4NAACEWasOMbNmzdLIkSP1m9/8RhkZGZo9e7ZSU1M1d+7ccLcGAADCLCrcDZxMQ0ODKioqNHny5JD9gwYN0qpVq5rU19fXq76+3nkcDAYlSQcPHnS1r8b6w66+3t+C2+f8t8Is3WHDHCVm6RYb5igxS7fYMEfJ3Vkeey1jzOmLTSv17bffGknmT3/6U8j+GTNmmEsuuaRJ/bRp04wkNjY2NjY2tjaw7dmz57RZodWuxBzj8XhCHhtjmuyTpClTpujBBx90Hjc2NurPf/6zOnfufML61uLgwYNKTU3Vnj17lJiYGO52rMUc3cMs3cMs3cEc3WPDLI0xqqmpUUpKymlrW22I6dKliyIjI1VVVRWyv7q6Wj6fr0l9TEyMYmJiQvZ17Njxb9miqxITE1vtH5RNmKN7mKV7mKU7mKN7WvssvV7vGdW12gt7o6Oj1bt3by1fvjxk//Lly9WnT58wdQUAAFqLVrsSI0kPPvigCgoKdM011ygnJ0cvvPCCdu/erfvuuy/crQEAgDBr1SHmV7/6lb7//ntNnz5de/fuVWZmpt5991316NEj3K25JiYmRtOmTWvyURiahzm6h1m6h1m6gzm6p63N0mPMmdzDBAAA0Lq02mtiAAAAToUQAwAArESIAQAAViLEAAAAKxFiAACAlQgxAADASq36e2LaotraWi1evFirVq1SVVWVPB6PfD6f+vbtqzvuuEPx8fHhbtEKzNE9zNI9zNIdzNE9bX2WfE9MC9q8ebMGDhyow4cPq1+/fvL5fDLGqLq6WuXl5YqPj9eyZct02WWXhbvVVo05uodZuodZuoM5uud8mCUhpgXddNNN8vv9Ki0tVXR0dMixhoYGjRgxQnv37tWKFSvC1KEdmKN7mKV7mKU7mKN7zodZEmJaUFxcnNavX3/S1Ltx40Zdd911Onz4cAt3Zhfm6B5m6R5m6Q7m6J7zYZZc2NuCkpKS9OWXX570+Pbt25WUlNSCHdmJObqHWbqHWbqDObrnfJglF/a2oFGjRunuu+/WQw89pIEDB8rn88nj8aiqqkrLly9XcXGxCgsLw91mq8cc3cMs3cMs3cEc3XNezNKgRT3++OOmW7duxuPxmIiICBMREWE8Ho/p1q2beeKJJ8LdnjWYo3uYpXuYpTuYo3va+iy5JiZMduzYoaqqKkmS3+9XWlpamDuyE3N0D7N0D7N0B3N0T1udJSEGAABYiQt7W5E//OEPeumll8LdhvWYo3uYpXuYpTuYo3vawixZiWlFLr30Un355Zc6evRouFuxGnN0D7N0D7N0B3N0T1uYJSEGAABYiY+TAACAlfiemDALBALavn27unXrpu7du4e7HSsdOHBA//mf/6ndu3erR48e+uUvfymv1xvutqxQUVGh3r17h7uNNqO6ulqbNm1S7969lZiYqH379qm0tFSNjY0aOnSosrKywt2iNb7++mutXLlSe/fuVWRkpNLS0jRw4EAlJiaGuzXrfPnll01+ALJPnz5KT08Pd2vnLnx3d59/pkyZYmpra40xxjQ0NJhRo0Y59+xHRESY2267zdTV1YW5y9bv9ttvN2+88YYxxphNmzaZLl26mK5du5rs7Gzj8/mM3+83mzdvDnOXdvB4POaiiy4yM2bMMN98802427HaihUrTHx8vPMdHJ9++qnp3r27SU9PN7169TIxMTHmvffeC3ebrd6hQ4fML37xC+PxeJx/Nvr9fhMZGWk6dOhgSkpKwt2iNQ4cOGDy8vKMx+MxHTt2NJdccolJT083HTt2NBEREeZnP/uZCQaD4W7znBBiWlBERITZt2+fMcaYGTNmmK5du5o33njDfPvtt+a///u/zQUXXGCmT58e5i5bvy5dupht27YZY4y55ZZbTH5+vqmvrzfG/BgOR44caQYNGhTOFq3h8XjMqFGjjM/nM1FRUWbo0KFm6dKl5ocffgh3a9bp27evGTt2rKmpqTFPPfWU6d69uxk7dqxzfOLEiaZPnz5h7NAO9957r+nbt6+prKw0X3zxhbn99tvNpEmTTG1trZk/f76Ji4szr7zySrjbtEJBQYHJysoya9asaXJszZo15oorrjB33XVXGDpzDyGmBXk8HifEXHnllWb+/Pkhx1977TWTkZERjtasEhsba7Zv326MMaZbt25mw4YNIce3bt1qvF5vGDqzz7G/ySNHjpjXX3/d/PSnPzWRkZHG5/OZSZMmmS+++CLcLVojMTHR+bs8cuSIiYqKMp988olzfNu2bfxdnoEuXbqY9evXO4///Oc/m/bt2zur2CUlJebKK68MV3tW8Xq9Jwwwx6xevdr6v0ku7G1hHo9HkrRnzx5dd911Iceuu+467dq1KxxtWeWKK67Qhx9+KOnHb548fma7du1SbGxsOFqzVlRUlG6//Xa988472rVrl8aOHavXX39dl112mW688cZwt2eF6Oho/eUvf5EkNTQ0qLGx0XksSXV1dWrXrl242rPGDz/8EHLdS4cOHfTDDz+otrZWkjRo0CB98cUX4WrPOsf+ndPcY7YgxLSwefPm6bnnnlNMTIwCgUDIsWAwqJiYmDB1Zo+HH35YkydP1sKFCzV+/Hg98MADmj9/vlatWqUFCxZo5MiRKigoCHebVjjRP8QuuOACPfzww/rqq6+0bNkypaamhqEz+/Tt21eTJ0/Wn/70Jz3wwAO6+uqr9dhjj6m2tlaHDx/Wv/zLv+iaa64Jd5ut3rXXXqtnn33Wefzss8+qa9eu6tq1qyTp0KFD6tChQ7jas8qtt96qUaNGaf369U2OrV+/Xvfdd5/y8vLC0JmLwr0UdD7p0aOH6dmzp7PNnj075Pgzzzxjrr/++jB1Z5fXX3/ddO/e3bkw+tjWvn17U1hYyDUdZ+ivP+LEudm2bZu5+OKLjcfjMZdffrn59ttvTV5enomKijJRUVGma9eupqKiItxttnoVFRWmU6dOxu/3mwsvvNBER0ebV1991TleUlJi/XUcLSUQCJghQ4YYj8djkpKSTK9evcyll15qkpKSTEREhLnllltMIBAId5vnhC+7a0XWrFmjmJgYXXXVVeFuxQpHjx7Vhg0b9PXXX6uxsVHdunVT7969lZCQEO7WrFFeXq6+ffsqKopvW3DL999/r86dOzuPP/jgA9XV1SknJydkP05u7969evvtt1VfX69/+Id/0GWXXRbulqz2xRdfaPXq1SE/AJmTk6NLL700zJ2dO0IMAACwEtfEtCKBQMD6H+NqDZije5ile5ilO5hj8zU2Np50/+7du1u4G3cRYlqR3bt365577gl3G9Zjju5hlu5hlu5gjmfu4MGDGj58uOLj4+Xz+TRt2rSQH3vcv3+/0tLSwtjhueOD8BZ08ODBUx6vqalpoU7sxhzdwyzdwyzdwRzd8/DDD+vTTz/Vyy+/rAMHDuixxx5TRUWF3nzzTUVHR0uSbL+ihGtiWlBERMQp78s3xsjj8Vj9s+gtgTm6h1m6h1m6gzm6p0ePHiotLVX//v0l/XjR+dChQ+X1evXWW2/pwIEDSklJsXqWhJgW5PV6NXXqVGVnZ5/w+JdffqnRo0db/QfVEpije5ile5ilO5ije+Lj47Vx48aQj4xqamo0ePBgxcbG6sUXX9TFF19s9Sz5OKkFXX311ZKkfv36nfB4x44drV/aawnM0T3M0j3M0h3M0T2pqanasmVLSIhJSEjQsmXLNGjQIN12221h7M4dXNjbgvLz89W+ffuTHvf7/Zo2bVoLdmQn5ugeZukeZukO5uieQYMGacGCBU32d+jQQe+9994p52wLPk4CAKANCgQC+u6773T55Zef8PihQ4dUUVFx0lUvGxBiAACAlbgmpoXV1tZq8eLFWrVqlaqqquTxeOTz+dS3b1/dcccdio+PD3eLVmCO7mGW7mGW7mCO7mnrs2QlpgVt3rxZAwcO1OHDh9WvXz/5fD4ZY1RdXa3y8nLFx8dr2bJl/E7IaTBH9zBL9zBLdzBH95wPsyTEtKCbbrpJfr9fpaWlzhcNHdPQ0KARI0Zo7969WrFiRZg6tANzdA+zdA+zdAdzdM/5MEtCTAuKi4vT+vXrT5p6N27cqOuuu06HDx9u4c7swhzdwyzdwyzdwRzdcz7MklusW1BSUpK+/PLLkx7fvn27kpKSWrAjOzFH9zBL9zBLdzBH95wPs+TC3hY0atQo3X333XrooYc0cOBA+Xw+eTweVVVVafny5SouLlZhYWG422z1mKN7mKV7mKU7mKN7zotZGrSoxx9/3HTr1s14PB4TERFhIiIijMfjMd26dTNPPPFEuNuzBnN0D7N0D7N0B3N0T1ufJdfEhMmOHTtUVVUl6cdvoLT959DDhTm6h1m6h1m6gzm6p63OkhADAACsxIW9Layurk4rV67U5s2bmxz7y1/+opdeeikMXdmHObqHWbqHWbqDObqnzc8yvJ9mnV+2bt1qevTo4Xw22a9fP/Pdd985x6uqqkxEREQYO7QDc3QPs3QPs3QHc3TP+TBLVmJa0O9+9ztlZWWpurpaW7duVWJiovr27avdu3eHuzWrMEf3MEv3MEt3MEf3nBezDHeKOp8kJyebzz77LGTfmDFjzIUXXmi++uqrNpGKWwJzdA+zdA+zdAdzdM/5MEu+J6YF1dXVKSoqdOT/9m//poiICPXr10+LFy8OU2d2YY7uYZbuYZbuYI7uOR9mSYhpQZdeeqnWr1+vjIyMkP1z5syRMUZ5eXlh6swuzNE9zNI9zNIdzNE958MsuSamBd1222169dVXT3ispKREd9xxhwx3vJ8Wc3QPs3QPs3QHc3TP+TBLvicGAABYiZUYAABgJUIMAACwEiEGAABYiRADAACsRIgBcFY++ugjeTweHThwINytADhPEWIAnJH+/fursLDQedynTx/t3btXXq83bD0RpIDzG192B+CsREdHy+/3h7sNAOcxVmIAnNaIESNUXl6uZ599Vh6PRx6PRwsXLgxZBVm4cKE6duyot99+W7169VJcXJx+8YtfqLa2VqWlperZs6eSkpI0btw4HT161HnthoYGTZo0SRdccIHi4+OVnZ2tjz76yDm+a9cu3XrrrUpKSlJ8fLwuv/xyvfvuu9q5c6duuukmSVJSUpI8Ho9GjBghSSorK9MNN9ygjh07qnPnzsrNzdVXX33lvObOnTvl8Xj0H//xH/rJT36i2NhYXXvttdq2bZvWrVuna665Rh06dNCQIUO0f//+kDn8/Oc/16OPPqrk5GQlJiZq9OjRamho+NsNH8BJsRID4LSeffZZbdu2TZmZmZo+fbokadOmTU3qDh8+rOeee05LlixRTU2Nhg0bpmHDhqljx45699139fXXX+v222/XDTfcoF/96leSpHvuuUc7d+7UkiVLlJKSoqVLl2rIkCH6/PPPlZ6errFjx6qhoUH/8z//o/j4eG3evFkdOnRQamqq3njjDd1+++3OL/TGxsZKkmpra/Xggw8qKytLtbW1euSRR3TbbbepsrJSERH///+7TZs2TbNnz9aFF16oX//617rjjjuUmJioZ599VnFxcRo+fLgeeeQRzZ0713nOBx98oPbt22vFihXauXOn7rnnHnXp0kUzZsz4W/5XAOBEwvGrkwDs069fP/Pb3/7WebxixQojyQQCAWOMMQsWLDCSzPbt252a0aNHm7i4OFNTU+PsGzx4sBk9erQxxpjt27cbj8djvv3225D3GjBggJkyZYoxxpisrCxTVFR0wp6O7+FkqqurjSTz+eefG2OM2bFjh5FkXnzxRafm1VdfNZLMBx984OybOXOm6dWrl/P47rvvNp06dTK1tbXOvrlz55oOHTqYo0ePnrIHAO7j4yQAromLi9Pf/d3fOY99Pp969uypDh06hOyrrq6WJG3YsEHGGF1yySXq0KGDs5WXlzsf/4wfP16PPfaY+vbtq2nTpumzzz47bR9fffWV8vPzddFFFykxMVFpaWmSpN27d4fUXXHFFSF9SVJWVtYJez3m7//+7xUXF+c8zsnJ0aFDh7Rnz57T9gXAXXycBMA17dq1C3ns8XhOuK+xsVGS1NjYqMjISFVUVCgyMjKk7ljw+c1vfqPBgwfrnXfe0bJlyzRz5kw9/fTTGjdu3En7uPXWW5Wamqp58+YpJSVFjY2NyszMbHLtyl/35vF4TrjvWK+nc+z5AFoOKzEAzkh0dHTIBbluuOqqq3T06FFVV1fr4osvDtn++s6n1NRU3XfffXrzzTc1YcIEzZs3z+lJUkhf33//vbZs2aKHHnpIAwYMUEZGhgKBgGs9f/rpp6qrq3Mer1mzRh06dFD37t1dew8AZ4YQA+CM9OzZU2vXrtXOnTv1f//3f2e8QnEql1xyie68807dddddevPNN7Vjxw6tW7dOTzzxhN59911JUmFhod577z3t2LFDGzZs0IcffqiMjAxJUo8ePeTxePT2229r//79OnTokJKSktS5c2e98MIL2r59uz788EM9+OCD59zrMQ0NDRo5cqQ2b96sP/7xj5o2bZruv//+kAuGAbQM/lcH4IxMnDhRkZGRuuyyy9S1a9cm15ecrQULFuiuu+7ShAkT1KtXL+Xl5Wnt2rVKTU2V9OMqy9ixY5WRkaEhQ4aoV69e+v3vfy9JuuCCC/Too49q8uTJ8vl8TphYsmSJKioqlJmZqQceeEBPPfWUK71K0oABA5Senq4bb7xRw4cP16233qqioiLXXh/AmfMYY0y4mwAAG4wYMUIHDhzQf/3Xf4W7FQBiJQYAAFiKEAMAAKzEx0kAAMBKrMQAAAArEWIAAICVCDEAAMBKhBgAAGAlQgwAALASIQYAAFiJEAMAAKxEiAEAAFb6fzeRuNhDNC/hAAAAAElFTkSuQmCC","text/plain":["
"]},"metadata":{},"output_type":"display_data"}],"source":["mean_altitude_per_year.plot(kind=\"bar\");"]},{"cell_type":"markdown","metadata":{"cell_id":"00250-cc141cd5-94c6-4cc0-ad6c-55b447ffa775","deepnote_cell_type":"markdown","tags":[]},"source":["**Exercise:** Calculate the `sum` of injuries per year. Use the fact that `True + True = 2` ;)"]},{"cell_type":"markdown","metadata":{"cell_id":"00251-730c3364-9926-4709-ac1f-cf5c999862f4","deepnote_cell_type":"markdown","tags":[]},"source":["We can also create a new `Series` if the corresponding column does not exist in the dataframe and group it by another `Series`\n","(which in this case is a column from the dataframe). Important is that the grouped and the by series have the same index."]},{"cell_type":"code","execution_count":114,"metadata":{"cell_id":"00252-b9071b33-09a3-4608-9134-1c6740dced6e","deepnote_cell_type":"code","deepnote_to_be_reexecuted":false,"execution_millis":1,"execution_start":1611581920044,"source_hash":"27735942","tags":[]},"outputs":[{"data":{"text/plain":["State\n","Hawaii 347.174968\n","Puerto Rico 283.072541\n","District of Columbia 272.401284\n","Nevada 263.392087\n","Arizona 259.539186\n","Utah 233.376716\n","Oregon 211.078085\n","Kentucky 210.978412\n","New Mexico 189.746676\n","California 186.218871\n","Colorado 169.180226\n","Washington 126.127279\n","Tennessee 125.933528\n","Idaho 122.225872\n","Florida 121.466464\n","Texas 120.547839\n","Montana 119.337375\n","Indiana 118.834422\n","North Dakota 118.060573\n","Oklahoma 102.492661\n","Alabama 93.214901\n","Minnesota 92.877892\n","Alaska 91.332542\n","Missouri 88.540597\n","Arkansas 77.816234\n","Louisiana 76.466573\n","Illinois 75.186584\n","Rhode Island 74.058226\n","Georgia 65.427299\n","Ohio 63.796895\n","Pennsylvania 63.675570\n","Iowa 62.489904\n","New Hampshire 61.638539\n","West Virginia 60.839723\n","Kansas 58.560169\n","South Carolina 57.925648\n","South Dakota 57.153911\n","Nebraska 56.912796\n","North Carolina 56.547484\n","New Jersey 56.037235\n","Mississippi 53.060196\n","Connecticut 51.017524\n","Michigan 50.328315\n","Massachusetts 49.556186\n","Maine 47.641734\n","Virginia 47.445656\n","New York 46.805556\n","Vermont 43.272381\n","Delaware 42.223261\n","Maryland 41.364812\n","Wyoming 37.840934\n","Wisconsin 35.129169\n","U.S. Virgin Islands 0.000000\n","Guam 0.000000\n","Name: Population, dtype: float64"]},"execution_count":114,"metadata":{},"output_type":"execute_result"}],"source":["# how many incidents per million inhabitants are there for each state?\n","incidents_per_million = (1_000_000 / laser_incidents_w_population[\"Population\"]).groupby(laser_incidents_w_population[\"State\"]).sum()\n","incidents_per_million.sort_values(ascending=False)"]},{"cell_type":"code","execution_count":115,"metadata":{"cell_id":"00253-2cf35a58-2508-425c-aef7-063c528317ea","deepnote_cell_type":"code","deepnote_to_be_reexecuted":false,"execution_millis":1414,"execution_start":1611581937715,"source_hash":"707c2558","tags":[]},"outputs":[{"data":{"image/png":"iVBORw0KGgoAAAANSUhEUgAABMIAAAGiCAYAAAAFu2pdAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/bCgiHAAAACXBIWXMAAA9hAAAPYQGoP6dpAAEAAElEQVR4nOzdd1RU1/c28GeQ3puCKKLYEewlltiiqLHr19577yUao0Fj1MSCLWo0xm40GlvUqEQUxRJ7FzuCETRWFBEF9vsH79wfI6DMnZkY5fmsNWvBncvmDMzce+6+5+yjEREBERERERERERHRR87sfTeAiIiIiIiIiIjo38BEGBERERERERERZQtMhBERERERERERUbbARBgREREREREREWULTIQREREREREREVG2wEQYERERERERERFlC0yEERERERERERFRtsBEGBERERERERERZQvm77sBaqSkpODu3btwcHCARqN5380hIiIiIiIiIqL3SETw7NkzeHl5wcws83FfH2Qi7O7du/D29n7fzSAiIiIiIiIiov+Q6Oho5M2bN9PnP8hEmIODA4DUF+fo6PieW0NERERERERERO9TXFwcvL29lZxRZj7IRJh2OqSjoyMTYUREREREREREBADvLKHFYvlERERERERERJQtMBFGRERERERERETZgl6JsIULF6JkyZLKlMTKlSvjjz/+UJ7v2rUrNBqNzuOTTz7RiZGYmIhBgwbB3d0ddnZ2aNKkCe7cuWOcV0NERERERERERJQJvRJhefPmxbRp03DixAmcOHECtWvXRtOmTXHx4kVln/r16yMmJkZ57Ny5UyfG0KFDsXnzZqxbtw7h4eF4/vw5GjVqhOTkZOO8IiIiIiIiIiIiogxoREQMCeDq6orp06ejR48e6Nq1K548eYItW7ZkuO/Tp0+RM2dOrFq1Cm3atAEA3L17F97e3ti5cyfq1auXpd8ZFxcHJycnPH36lMXyiYiIiIiIiIiyuazmilTXCEtOTsa6desQHx+PypUrK9v379+PXLlyoUiRIujVqxfu37+vPHfy5Em8fv0agYGByjYvLy/4+/vj8OHDmf6uxMRExMXF6TyIiIiIiIiIiIj0oXci7Pz587C3t4eVlRX69u2LzZs3w8/PDwDQoEEDrFmzBqGhoZg5cyaOHz+O2rVrIzExEQAQGxsLS0tLuLi46MT0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p6cnAKQb2XX//n1llJinpydevXqFx48fZ7rPm6ysrODo6KjzICIiIiIiIiIi0odeiTARwcCBA7Fp0yaEhoaiQIECOs8XKFAAnp6eCAkJUba9evUKYWFhqFKlCgCgXLlysLCw0NknJiYGFy5cUPYhIiIiIiIiIiIyNr1WjRwwYADWrl2LrVu3wsHBQRn55eTkBBsbG2g0GgwdOhRTpkxB4cKFUbhwYUyZMgW2trZo3769sm+PHj0wYsQIuLm5wdXVFSNHjkRAQICyiiQREREREREREZGx6ZUIW7hwIQCgZs2aOtuXLVuGrl27AgBGjx6NhIQE9O/fH48fP0alSpWwZ88eODg4KPsHBwfD3NwcrVu3RkJCAj777DMsX74cOXLkMOzVEBERERERERERZUKvRJiIvHMfjUaDoKAgBAUFZbqPtbU15s2bh3nz5unz64k+OvnH7MjyvpHTGpqwJUREREREREQfP9WrRhIREREREREREX1ImAgjIiIiIiIiIqJsQa+pkUT038fplkREREREREQZ44gwIiIiIiIiIiLKFpgIIyIiIiIiIiKibIGJMCIiIiIiIiIiyhaYCCMiIiIiIiIiomyBiTAiIiIiIiIiIsoWmAgjIiIiIiIiIqJsgYkwIiIiIiIiIiLKFpgIIyIiIiIiIiKibIGJMCIiIiIiIiIiyhaYCCMiIiIiIiIiomzB/H03gIg+DPnH7MjyvpHTGpqwJURERERERETqcEQYERERERERERFlC0yEERERERERERFRtsBEGBERERERERERZQtMhBERERERERERUbbARBgREREREREREWULTIQREREREREREVG2oHci7MCBA2jcuDG8vLyg0WiwZcsWnee7du0KjUaj8/jkk0909klMTMSgQYPg7u4OOzs7NGnSBHfu3DHohRAREREREREREb2N3omw+Ph4lCpVCvPnz890n/r16yMmJkZ57Ny5U+f5oUOHYvPmzVi3bh3Cw8Px/PlzNGrUCMnJyfq/AiIiIiIiIiIioiww1/cHGjRogAYNGrx1HysrK3h6emb43NOnT7F06VKsWrUKderUAQCsXr0a3t7e+PPPP1GvXj19m0RERERERERERPROJqkRtn//fuTKlQtFihRBr169cP/+feW5kydP4vXr1wgMDFS2eXl5wd/fH4cPHzZFc4iIiIiIiIiIiPQfEfYuDRo0QKtWreDj44Nbt25h/PjxqF27Nk6ePAkrKyvExsbC0tISLi4uOj/n4eGB2NjYDGMmJiYiMTFR+T4uLs7YzSYiIiIiIiIioo+c0RNhbdq0Ub729/dH+fLl4ePjgx07dqBFixaZ/pyIQKPRZPjc1KlTMXHiRGM3lYiIiIiIiIiIshGTTI1MK3fu3PDx8cG1a9cAAJ6ennj16hUeP36ss9/9+/fh4eGRYYyxY8fi6dOnyiM6OtrUzSYiIiIiIiIioo+MyRNhDx8+RHR0NHLnzg0AKFeuHCwsLBASEqLsExMTgwsXLqBKlSoZxrCysoKjo6POg4iIiIiIiIiISB96T418/vw5rl+/rnx/69YtnDlzBq6urnB1dUVQUBBatmyJ3LlzIzIyEl9++SXc3d3RvHlzAICTkxN69OiBESNGwM3NDa6urhg5ciQCAgKUVSSJiIiIiIiIiIiMTe9E2IkTJ1CrVi3l++HDhwMAunTpgoULF+L8+fNYuXIlnjx5gty5c6NWrVpYv349HBwclJ8JDg6Gubk5WrdujYSEBHz22WdYvnw5cuTIYYSXRERERERERERElJ7eibCaNWtCRDJ9fvfu3e+MYW1tjXnz5mHevHn6/noiIiIiIiIiIiJVTF4jjIiIiIiIiIiI6L+AiTAiIiIiIiIiIsoWmAgjIiIiIiIiIqJsgYkwIiIiIiIiIiLKFpgIIyIiIiIiIiKibIGJMCIiIiIiIiIiyhaYCCMiIiIiIiIiomyBiTAiIiIiIiIiIsoWmAgjIiIiIiIiIqJswfx9N4CIsrf8Y3Zkab/IaQ2NHlPfuERERERERPRh44gwIiIiIiIiIiLKFjgijIgoi0wxeo2IiIiIiIj+PUyEERG9R6aaxsmkHRERERERUXpMhBERUZYwaUdERERERB86JsKIiOijwwUTiIiIiIgoIyyWT0RERERERERE2QITYURERERERERElC0wEUZERERERERERNkCE2FERERERERERJQtMBFGRERERERERETZAhNhRERERERERESULeidCDtw4AAaN24MLy8vaDQabNmyRed5EUFQUBC8vLxgY2ODmjVr4uLFizr7JCYmYtCgQXB3d4ednR2aNGmCO3fuGPRCiIiIiIiIiIiI3kbvRFh8fDxKlSqF+fPnZ/j8999/j1mzZmH+/Pk4fvw4PD09UbduXTx79kzZZ+jQodi8eTPWrVuH8PBwPH/+HI0aNUJycrL6V0JERERERERERPQW5vr+QIMGDdCgQYMMnxMRzJ49G+PGjUOLFi0AACtWrICHhwfWrl2LPn364OnTp1i6dClWrVqFOnXqAABWr14Nb29v/Pnnn6hXr54BL4eIiIiIiIiIiChjeifC3ubWrVuIjY1FYGCgss3Kygo1atTA4cOH0adPH5w8eRKvX7/W2cfLywv+/v44fPhwhomwxMREJCYmKt/HxcUZs9lERERZkn/MjizvGzmtoQlbQkREREREahi1WH5sbCwAwMPDQ2e7h4eH8lxsbCwsLS3h4uKS6T5vmjp1KpycnJSHt7e3MZtNRERERERERETZgElWjdRoNDrfi0i6bW962z5jx47F06dPlUd0dLTR2kpERERERERERNmDURNhnp6eAJBuZNf9+/eVUWKenp549eoVHj9+nOk+b7KysoKjo6POg4iIiIiIiIiISB9GTYQVKFAAnp6eCAkJUba9evUKYWFhqFKlCgCgXLlysLCw0NknJiYGFy5cUPYhIiIiIiIiIiIyNr2L5T9//hzXr19Xvr916xbOnDkDV1dX5MuXD0OHDsWUKVNQuHBhFC5cGFOmTIGtrS3at28PAHByckKPHj0wYsQIuLm5wdXVFSNHjkRAQICyiiQREREREREREZGx6Z0IO3HiBGrVqqV8P3z4cABAly5dsHz5cowePRoJCQno378/Hj9+jEqVKmHPnj1wcHBQfiY4OBjm5uZo3bo1EhIS8Nlnn2H58uXIkSOHEV4SERHRh8NUK1FyhUsiIiIiovT0ToTVrFkTIpLp8xqNBkFBQQgKCsp0H2tra8ybNw/z5s3T99cTERHRe8LkGhERERF96EyyaiQREREREREREdF/jd4jwoiIiIiMiSPNiIiIiOjfwhFhRERERERERESULTARRkRERERERERE2QITYURERERERERElC0wEUZERERERERERNkCE2FERERERERERJQtcNVIIiIi+uhwJUoiIiIiyggTYURERERZxAQbERER0YeNiTAiIiKi94jJNSIiIqJ/DxNhRERERB8hJtiIiIiI0mOxfCIiIiIiIiIiyhaYCCMiIiIiIiIiomyBiTAiIiIiIiIiIsoWmAgjIiIiIiIiIqJsgcXyiYiIiCjLslqEnwX4iYiI6L+IiTAiIiIieq9MtcIlk3ZERET0JibCiIiIiIiyyFRJOyIiIvp3MBFGRERERPSemWL0GpN2RERE6bFYPhERERERERERZQscEUZERERERFnG0WtERPQhM3oiLCgoCBMnTtTZ5uHhgdjYWACAiGDixIlYvHgxHj9+jEqVKuGHH35AiRIljN0UIiIiIiLKxj6kpJ0p4jLBSESUnkmmRpYoUQIxMTHK4/z588pz33//PWbNmoX58+fj+PHj8PT0RN26dfHs2TNTNIWIiIiIiIiIiAiAiaZGmpubw9PTM912EcHs2bMxbtw4tGjRAgCwYsUKeHh4YO3atejTp48pmkNERERERERGwpFmRPQhM0ki7Nq1a/Dy8oKVlRUqVaqEKVOmwNfXF7du3UJsbCwCAwOVfa2srFCjRg0cPnw400RYYmIiEhMTle/j4uJM0WwiIiIiIiJ6D5hcI6J/i9ETYZUqVcLKlStRpEgR3Lt3D5MnT0aVKlVw8eJFpU6Yh4eHzs94eHjg9u3bmcacOnVqurpjRERERERERG/D2mtE9Caj1whr0KABWrZsiYCAANSpUwc7dqQeJFasWKHso9FodH5GRNJtS2vs2LF4+vSp8oiOjjZ2s4mIiIiIiIiI6CNnkqmRadnZ2SEgIADXrl1Ds2bNAACxsbHInTu3ss/9+/fTjRJLy8rKClZWVqZuKhEREREREdF78SGNXuOoOPqQmWTVyLQSExNx+fJl5M6dGwUKFICnpydCQkKU51+9eoWwsDBUqVLF1E0hIiIiIiIiIqJszOgjwkaOHInGjRsjX758uH//PiZPnoy4uDh06dIFGo0GQ4cOxZQpU1C4cGEULlwYU6ZMga2tLdq3b2/sphARERERERHRByKrI804yowMYfRE2J07d9CuXTs8ePAAOXPmxCeffIKjR4/Cx8cHADB69GgkJCSgf//+ePz4MSpVqoQ9e/bAwcHB2E0hIiIiIiIiomyM0zjpTUZPhK1bt+6tz2s0GgQFBSEoKMjYv5qIiIiIiIiIyOQ4eu3DZfIaYURERERERERERP8FJl81koiIiIiIiIiI3o7TOP8dTIQREREREREREX2kOI1TF6dGEhERERERERFRtsBEGBERERERERERZQtMhBERERERERERUbbARBgREREREREREWULTIQREREREREREVG2wEQYERERERERERFlC0yEERERERERERFRtsBEGBERERERERERZQtMhBERERERERERUbbARBgREREREREREWULTIQREREREREREVG2wEQYERERERERERFlC0yEERERERERERFRtsBEGBERERERERERZQtMhBERERERERERUbbARBgREREREREREWULTIQREREREREREVG28F4TYQsWLECBAgVgbW2NcuXK4eDBg++zOURERERERERE9BF7b4mw9evXY+jQoRg3bhxOnz6NTz/9FA0aNEBUVNT7ahIREREREREREX3E3lsibNasWejRowd69uyJ4sWLY/bs2fD29sbChQvfV5OIiIiIiIiIiOgj9l4SYa9evcLJkycRGBiosz0wMBCHDx9+H00iIiIiIiIiIqKPnPn7+KUPHjxAcnIyPDw8dLZ7eHggNjY23f6JiYlITExUvn/69CkAIC4uLt2+KYkvstSGjH42M1mN+V+Iy7ayrR9SW/WJy7ayrR9SW/WJy7ayrR9SW/WJy7ayrWzr+4/LtrKtH1Jb9YnLtr7/tv4XadsvIm/dTyPv2sME7t69izx58uDw4cOoXLmysv3bb7/FqlWrEBERobN/UFAQJk6c+G83k4iIiIiIiIiIPiDR0dHImzdvps+/lxFh7u7uyJEjR7rRX/fv3083SgwAxo4di+HDhyvfp6Sk4NGjR3Bzc4NGo3nr74qLi4O3tzeio6Ph6OhonBdgorhsK9vKtrKtporLtrKtbCvbyrayraaKy7ayrWwr28q2sq2miqtPTBHBs2fP4OXl9db93ksizNLSEuXKlUNISAiaN2+ubA8JCUHTpk3T7W9lZQUrKyudbc7Oznr9TkdHR6P+g00Zl21lW9lWttVUcdlWtpVtZVvZVrbVVHHZVraVbWVb2Va21VRxsxrTycnpnfu8l0QYAAwfPhydOnVC+fLlUblyZSxevBhRUVHo27fv+2oSERERERERERF9xN5bIqxNmzZ4+PAhJk2ahJiYGPj7+2Pnzp3w8fF5X00iIiIiIiIiIqKP2HtLhAFA//790b9/f5P+DisrK3z99dfpplb+F+OyrWwr28q2miou28q2sq1sK9vKtpoqLtvKtrKtbCvbyraaKq4pYr6XVSOJiIiIiIiIiIj+bWbvuwFERERERERERET/BibCiIiIiIiIiIgoW2AijIiIiIiIiIiIsgUmwoiIiIiI/kNevnz5vptAH5Fb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","text/plain":["
"]},"metadata":{},"output_type":"display_data"}],"source":["incidents_per_million.sort_values(ascending=False).plot(kind=\"bar\", figsize=(15, 3));"]},{"attachments":{},"cell_type":"markdown","metadata":{"cell_id":"00254-d21271e7-9449-41fe-a96d-a57561b91e50","deepnote_cell_type":"markdown","tags":[]},"source":["## Time series operations (Optional)\n","\n","We will briefly look at some more specific operation for time series data (data with a natural time axis).\n","Typical operations for time series are resampling or rolling window transformations such as filtering.\n","Note that Pandas is not a general digital signal processing library - there are other (more capable) tools for this purpose.\n","\n","First, we set the index to `\"timestamp\"` to make our dataframe inherently time indexed. This will make doing further time operations easier."]},{"cell_type":"code","execution_count":116,"metadata":{"cell_id":"00255-c54372ae-004e-41f2-8334-35239a345c2d","deepnote_cell_type":"code","deepnote_to_be_reexecuted":false,"execution_millis":26,"execution_start":1611581958884,"source_hash":"255850a5","tags":[]},"outputs":[{"data":{"text/html":["
\n","\n","
\n"," \n","
\n","
\n","
Flight ID
\n","
Aircraft
\n","
Altitude
\n","
Airport
\n","
Laser Color
\n","
Injury
\n","
City
\n","
State
\n","
\n","
\n","
timestamp
\n","
\n","
\n","
\n","
\n","
\n","
\n","
\n","
\n","
\n"," \n"," \n","
\n","
2020-01-01 01:48:00
\n","
N424RP
\n","
DA42/A
\n","
8500.0
\n","
SBA
\n","
green
\n","
False
\n","
Santa Barbara
\n","
California
\n","
\n","
\n","
2020-01-01 01:55:00
\n","
AMF1829
\n","
B190
\n","
40000.0
\n","
SSF
\n","
green
\n","
False
\n","
San Antonio
\n","
Texas
\n","
\n","
\n","
2020-01-01 02:14:00
\n","
NKS1881
\n","
A320
\n","
2500.0
\n","
TPA
\n","
green
\n","
False
\n","
Tampa
\n","
Florida
\n","
\n","
\n","
2020-01-01 02:17:00
\n","
FDX3873
\n","
B763
\n","
3000.0
\n","
DFW
\n","
green
\n","
False
\n","
Fort Worth
\n","
Texas
\n","
\n","
\n","
2020-01-01 02:18:00
\n","
SWA3635
\n","
B739
\n","
11000.0
\n","
MOD
\n","
green
\n","
False
\n","
Modesto
\n","
California
\n","
\n","
\n","
...
\n","
...
\n","
...
\n","
...
\n","
...
\n","
...
\n","
...
\n","
...
\n","
...
\n","
\n","
\n","
2015-12-31 05:25:00
\n","
VRD917
\n","
A320 (AIRBUS - A-32
\n","
8000.0
\n","
LAS
\n","
green
\n","
False
\n","
Las Vegas
\n","
Nevada
\n","
\n","
\n","
2015-12-31 06:23:00
\n","
DAL2371
\n","
B738 (BOEING - 737-
\n","
11000.0
\n","
LHM
\n","
green
\n","
False
\n","
Lincoln
\n","
California
\n","
\n","
\n","
2015-12-31 11:11:00
\n","
Unknown
\n","
Unknown
\n","
2000.0
\n","
FOK
\n","
green
\n","
False
\n","
Westhampton Beach
\n","
New York
\n","
\n","
\n","
2015-12-31 11:47:00
\n","
UAL197
\n","
B737
\n","
300.0
\n","
GUM
\n","
green
\n","
False
\n","
Guam
\n","
Guam
\n","
\n","
\n","
2015-12-31 23:14:00
\n","
EJA336
\n","
E55P/L
\n","
1000.0
\n","
APF
\n","
green
\n","
False
\n","
Naples
\n","
Florida
\n","
\n"," \n","
\n","
36463 rows × 8 columns
\n","
"],"text/plain":[" Flight ID Aircraft Altitude Airport \\\n","timestamp \n","2020-01-01 01:48:00 N424RP DA42/A 8500.0 SBA \n","2020-01-01 01:55:00 AMF1829 B190 40000.0 SSF \n","2020-01-01 02:14:00 NKS1881 A320 2500.0 TPA \n","2020-01-01 02:17:00 FDX3873 B763 3000.0 DFW \n","2020-01-01 02:18:00 SWA3635 B739 11000.0 MOD \n","... ... ... ... ... \n","2015-12-31 05:25:00 VRD917 A320 (AIRBUS - A-32 8000.0 LAS \n","2015-12-31 06:23:00 DAL2371 B738 (BOEING - 737- 11000.0 LHM \n","2015-12-31 11:11:00 Unknown Unknown 2000.0 FOK \n","2015-12-31 11:47:00 UAL197 B737 300.0 GUM \n","2015-12-31 23:14:00 EJA336 E55P/L 1000.0 APF \n","\n"," Laser Color Injury City State \n","timestamp \n","2020-01-01 01:48:00 green False Santa Barbara California \n","2020-01-01 01:55:00 green False San Antonio Texas \n","2020-01-01 02:14:00 green False Tampa Florida \n","2020-01-01 02:17:00 green False Fort Worth Texas \n","2020-01-01 02:18:00 green False Modesto California \n","... ... ... ... ... \n","2015-12-31 05:25:00 green False Las Vegas Nevada \n","2015-12-31 06:23:00 green False Lincoln California \n","2015-12-31 11:11:00 green False Westhampton Beach New York \n","2015-12-31 11:47:00 green False Guam Guam \n","2015-12-31 23:14:00 green False Naples Florida \n","\n","[36463 rows x 8 columns]"]},"execution_count":116,"metadata":{},"output_type":"execute_result"}],"source":["incidents_w_time_index = laser_incidents.set_index(\"timestamp\")\n","incidents_w_time_index"]},{"cell_type":"markdown","metadata":{"cell_id":"00256-c91d8bbe-0421-40ea-ad11-0294041054c9","deepnote_cell_type":"markdown","tags":[]},"source":["First, turn the data into a time series of incidents per hour. This can be done by resampling to 1 hour and using \n","`count` (basically on any column or on any column that has any non-NA value) to count the number of incidents."]},{"cell_type":"code","execution_count":117,"metadata":{"cell_id":"00257-6b22d2e5-f4c0-4444-b231-4a84c8b33f77","deepnote_cell_type":"code","deepnote_to_be_reexecuted":false,"execution_millis":19,"execution_start":1611581973826,"source_hash":"a673441c","tags":[]},"outputs":[{"name":"stderr","output_type":"stream","text":["/var/folders/dm/gbbql3p121z0tr22r2z98vy00000gn/T/ipykernel_78670/3245646514.py:1: FutureWarning: 'H' is deprecated and will be removed in a future version, please use 'h' instead.\n"," incidents_hourly = incidents_w_time_index.notna().any(axis=\"columns\").resample(\"1H\").count().rename(\"incidents per hour\")\n"]},{"data":{"text/plain":["timestamp\n","2015-01-01 02:00:00 1\n","2015-01-01 03:00:00 2\n","2015-01-01 04:00:00 1\n","2015-01-01 05:00:00 3\n","2015-01-01 06:00:00 0\n"," ..\n","2020-08-01 06:00:00 0\n","2020-08-01 07:00:00 1\n","2020-08-01 08:00:00 1\n","2020-08-01 09:00:00 0\n","2020-08-01 10:00:00 3\n","Name: incidents per hour, Length: 48945, dtype: int64"]},"execution_count":117,"metadata":{},"output_type":"execute_result"}],"source":["incidents_hourly = incidents_w_time_index.notna().any(axis=\"columns\").resample(\"1H\").count().rename(\"incidents per hour\")\n","incidents_hourly"]},{"cell_type":"markdown","metadata":{"cell_id":"00258-2e038a7b-dfdf-4f1a-9db6-602b72bfed15","deepnote_cell_type":"markdown","tags":[]},"source":["Looking at those data gives us a bit too detailed information."]},{"cell_type":"code","execution_count":118,"metadata":{"cell_id":"00259-400f3d4a-95df-4434-9554-b6abc9b19084","deepnote_cell_type":"code","deepnote_to_be_reexecuted":false,"execution_millis":458,"execution_start":1611581983970,"source_hash":"9cc2db73","tags":[]},"outputs":[{"data":{"image/png":"iVBORw0KGgoAAAANSUhEUgAABMcAAAEmCAYAAABms/fXAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/bCgiHAAAACXBIWXMAAA9hAAAPYQGoP6dpAAB4GElEQVR4nO3dd3wUZf4H8M+m90CAEMBAQIVT8TzbqXi280Q89Sx4eno/ip0TK3oKViwnltPDio0kFGlKlSBSk9CTQAKhJIGQXjd1sylb5/dHyJJNtu/s7uzu5/168dKdnfI8M0+b7zw7kQmCIICIiIiIiIiIiMgPBXg6AURERERERERERJ7C4BgREREREREREfktBseIiIiIiIiIiMhvMThGRERERERERER+i8ExIiIiIiIiIiLyWwyOERERERERERGR32JwjIiIiIiIiIiI/BaDY0RERERERERE5LeCPJ0Asej1elRXVyM6OhoymczTySEiIiIiIiIiIg8RBAFtbW0YPnw4AgIszw3zmeBYdXU1EhMTPZ0MIiIiIiIiIiKSiIqKCpxzzjkW1/GZ4Fh0dDSA7kzHxMR4ODVEREREREREROQpCoUCiYmJhniRJT4THOv5KWVMTAyDY0REREREREREZNOrt/hCfiIiIiIiIiIi8lsMjhERERERERERkd9icIyIiIiIiIiIiPyW3cGxzMxM3HnnnRg+fDhkMhnWrVtn9P306dMhk8mM/l199dVW97t69WpceOGFCA0NxYUXXoi1a9famzQiIiIiIiIiIiK72B0ca29vxyWXXIIvv/zS7DqTJk1CTU2N4d+mTZss7nPfvn144IEHMGXKFBw+fBhTpkzB/fffjwMHDtibPCIiIiIiIiIiIpvJBEEQHN5YJsPatWtx9913G5ZNnz4dLS0t/WaUWfLAAw9AoVDg119/NSybNGkSBg4ciOXLl9u0D4VCgdjYWLS2tvKvVRIRERERERER+TF74kQueedYeno64uPjMXbsWDz++OOor6+3uP6+ffswceJEo2W33nor9u7da3YblUoFhUJh9I/IV+051YBpyVmoaOrwdFKIiIiIiIiIfIrowbHbbrsNP/74I3bs2IFPPvkE2dnZ+POf/wyVSmV2m9raWgwdOtRo2dChQ1FbW2t2m3nz5iE2NtbwLzExUbQ8EEnNP384gIwiOWatyvN0UoiIiIiIiIh8SpDYO3zggQcM/z9+/HhcccUVGDVqFNLS0nDvvfea3U4mkxl9FgSh37Le5syZg1mzZhk+KxQKBsjI59UpzAeZiYiIiIiIiMh+ogfH+ho2bBhGjRqFkydPml0nISGh3yyx+vr6frPJegsNDUVoaKho6SQiIiIiIiIiIv/jkneO9dbY2IiKigoMGzbM7DrXXHMNtm7darRsy5YtmDBhgquTR0REREREREREfszumWNKpRKnTp0yfC4pKUFeXh7i4uIQFxeHuXPnYvLkyRg2bBhKS0vx6quvYvDgwbjnnnsM20ydOhUjRozAvHnzAADPPfccrr/+enz44Ye46667sH79emzbtg27d+8WIYtERERERERERESm2R0cy8nJwU033WT43PPer2nTpmHBggXIz8/H4sWL0dLSgmHDhuGmm27CypUrER0dbdimvLwcAQFnJ61NmDABK1aswOuvv4433ngD5557LlauXImrrrrKmbwRERERERERERFZJBMEQfB0IsSgUCgQGxuL1tZWxMTEeDo5RKJKmp0GABgZF4HMl2+ysjYRERERERGRf7MnTuTyd44RkXgE+EQsm4iIiIiIiEgyGBwjIiIiIiIiIiK/xeAYERERERERERH5LQbHiIiIiIiIiIjIbzE4RkREREREREREfovBMSIiIiIiIiIi8lsMjpFXKGtsx7TkLOwrbnTrcVVaHWYsOYhlB8rdelwiIiIiIiIicg8Gx8grPLM8FxlFcjz4/X63HndVTiU2H6vFq2vz3XpccwTB0ykgIiIiIiIi8i0MjpFXqGnt8shxFZ0ajxyXiIiIiIiIiNyDwTEiIiIiIiIiIvJbDI4REREREREREZHfYnCMiIiIiIiIiIj8FoNjRERERERERETktxgcIyIiIiIiIiIiv8XgGJEXEQRPp4CIiIiIiIjItzA4RkREREREREREfovBMSIiIiIiIiIi8lsMjhERERERERERkd9icIyIiIiIiIiIiPwWg2NEREREREREROS3GBxzoZ0F9ZiekoU6RZenk+JTnl+Ri+8zTxstK2/swLTkLOwtbrBpHyfr2jA1OQuHyptNfn+0qhVTk7NwvFrhdHqlYGdhd1msbWVZJCIi8/6Tdhzvbjzu6WQQERERuRWDYy70cGo20gvleGv9MU8nxaesy6vGfzadMFr23MpcZBTJ8dD3B2za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eGLJQZyqV7ps/9YCY4B0f3b569FaXHewEp9tPwkAOGdgONbnVfdb78VVh40+f7i5wCg49uSSgyb3n1/VihlLDyEs2Lt/mOjdqbeirUtj+P8OtfXCTERERERE7uf6e0qf+LEMEZlR09Lp6SRIWu/YSLOZ2W21ii6L+6j28XPs08ExR/nIL02JyE6s+kRERORrJDqZhYg8xNEZbr7+l2wZHDOB98dERERERO7D8bfr8NwSuYt0g0e924EAB4Nc0s2dOBgcIyI6g4NHIiIiIiLyZaZmgNkUL/Px6BiDYybwp1VERERERO7j4/dcREQe1buN9fFfRzqMwTETBM4fISIiIiIiIiIbSSXoZG2yT4CZdDobB/H2SUY+HRzz8mtDREREROQXXD1u9/abNiKSPqm0M6aCdL2TJnNwrq5EYn8u49PBMUdJpVATERERERE5g/c2RP7FWvDLVPBMZtN2vh0e8+ngmG9fOiISHUePRERERETkw0zFSQRY/1mlj8fGfDs4xttcIiIiIiLpc/U9l6/f1BGR53lNO+M1CXUvnw6OOYqTR4j8E6s+ERGRb/Lv8b1fZ56I+jD1Qn6bflbpmuRIhk8Hx3z94hERERER+QKGb4iI3CPAzMwx6z+rtBxh8fZ2XCYIvvEcRaFQIDY2FonPr0JAaITRd4OjQtGgVHkoZUREREREREREnnHLhUOx9XgdAOC68wdj18kGm7a7YewQPHbdaAyJDsWk+btcmUSX0Ks6UDH/frS2tiImJsbiukFuSpNHMTBGRERERERERP6oJzAGwObAGABkFMmRUSTHoMgQVyRLUnz6Z5VEREREREREROS4xna1p5PgcgyOERERERERERGR3xI9ODZv3jxceeWViI6ORnx8PO6++24UFhZa3CY9PR0ymazfv4KCArGTR0REREREREREZCB6cCwjIwMzZ87E/v37sXXrVmi1WkycOBHt7e1Wty0sLERNTY3h3/nnny928oiIiIiIiIiIiAxEfyH/5s2bjT6npKQgPj4eBw8exPXXX29x2/j4eAwYMEDsJBEREREREREREZnk8neOtba2AgDi4uKsrnvppZdi2LBhuPnmm7Fz506L66pUKigUCqN/RERERERERERE9nBpcEwQBMyaNQt/+tOfMH78eLPrDRs2DN999x1Wr16NNWvWYNy4cbj55puRmZlpdpt58+YhNjbW8C8xMdEVWSAiIiIiIiIiIh8mEwRBcNXOZ86cibS0NOzevRvnnHOOXdveeeedkMlk2LBhg8nvVSoVVCqV4bNCoUBiYiISn1+FgNAIp9JNRERERERERETeS6/qQMX8+9Ha2oqYmBiL67ps5tgzzzyDDRs2YOfOnXYHxgDg6quvxsmTJ81+HxoaipiYGKN/RERERERERERE9hD9hfyCIOCZZ57B2rVrkZ6ejtGjRzu0n9zcXAwbNkzk1BEREREREREREZ0lenBs5syZWLZsGdavX4/o6GjU1tYCAGJjYxEeHg4AmDNnDqqqqrB48WIAwPz585GUlISLLroIarUaS5cuxerVq7F69Wqxk0dERERERERERGQgenBswYIFAIAbb7zRaHlKSgqmT58OAKipqUF5ebnhO7VajZdeeglVVVUIDw/HRRddhLS0NPz1r38VO3lEREREREREREQGLn0hvzspFIruv1rJF/ITEREREREREfk1SbyQn4iIiIiIiIiISOoYHCMiIiIiIiIiIr/F4BgREREREREREfktBseIiIiIiIiIiMhvMThGRERERERERER+i8ExIiIiIiIiIiLyWwyOERERERERERGR32JwjIiIiIiIiIiI/BaDY0RERERERERE5LcYHCMiIiIiIiIiIr/F4BgREREREREREfktBseIiIiIiIiIiMhvMThGRERERERERER+i8ExIiIiIiIiIiLyWwyOERERERERERGR32JwjIiIiIiIiIiI/BaDY0RERERERERE5LcYHCMiIiIiIiIiIr/F4BgREREREREREfktBseIiIiIiIiIiMhvMThGRERERERERER+i8ExIiIiIiIiIiLyWwyOERERERERERGR32JwjIiIiIiIiIiI/JbLgmNff/01Ro8ejbCwMFx++eXYtWuXxfUzMjJw+eWXIywsDGPGjME333zjqqQREREREREREREBcFFwbOXKlXj++efx2muvITc3F9dddx1uu+02lJeXm1y/pKQEf/3rX3HdddchNzcXr776Kp599lmsXr3aFckjIiIiIiIiIiICAMgEQRDE3ulVV12Fyy67DAsWLDAsu+CCC3D33Xdj3rx5/dZ/5ZVXsGHDBpw4ccKwbMaMGTh8+DD27dtn0zEVCgViY2OR+PwqBIRGOJ8JIiIiIiIiIiLySnpVByrm34/W1lbExMRY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EBBw9rnpW2+9hfnz52PkyJF45JFH8OCDDyImJgafffYZIiIicP/99+PNN9/EggULDNts374dYWFh2LlzJ0pLS/Hwww9j8ODB+M9//uPKS0BERETkFAbHiIiIiJwQGxuLkJAQREREGH5KWVBQ0G89jUaDBQsW4NxzzwUA3HfffViyZAnq6uoQFRWFCy+8EDfddBN27tyJBx54AMXFxVi+fDkqKysxfPhwAMBLL72EzZs3IyUlBe+//z7Ky8sxefJkXHzxxQCAMWPGGI4XFxcHAIiPj8eAAQMMyydPnmyUroULFyI+Ph7Hjx/H+PHjDctfeukl3HrrrQCA5557Dg8++CC2b9+Oa6+9FgDw6KOPIjU11WhfISEhSE5ORkREBC666CK88847+Pe//413333XKPBGREREJCUcpRARERG5QUREhCEwBgBDhw5FUlISoqKijJbV19cDAA4dOgRBEDB27FhERUUZ/mVkZBh+Bvnss8/ivffew7XXXou33noLR44csZqO4uJiPPTQQxgzZgxiYmIwevRoAEB5ebnRer///e+N0gXAEITrm9Yel1xyCSIiIgyfr7nmGiiVSlRUVFhNFxEREZGncOYYERERkRsEBwcbfZbJZCaX6fV6AIBer0dgYCAOHjyIwMBAo/V6AmqPPfYYbr31VqSlpWHLli2YN28ePvnkEzzzzDNm03HnnXciMTER33//PYYPHw69Xo/x48f3ezdY77TJZDKTy3rSak3P9kRERERSxJljRERERE4KCQkxepG+GC699FLodDrU19fjvPPOM/rX+y9hJiYmYsaMGVizZg1efPFFfP/994Y0ATBKV2NjI06cOIHXX38dN998My644AI0NzeLlubDhw+js7PT8Hn//v2IiorCOeecI9oxiIiIiMTG4BgRERGRk5KSknDgwAGUlpaioaHB5hlVlowdOxb//Oc/MXXqVKxZswYlJSXIzs7Ghx9+iE2bNgEAnn/+efz2228oKSnBoUOHsGPHDlxwwQUAgFGjRkEmk2Hjxo2Qy+VQKpUYOHAgBg0ahO+++w6nTp3Cjh07MGvWLKfT2kOtVuPRRx/F8ePH8euvv+Ktt97C008/zfeNERERkaRxpEJERETkpJdeegmBgYG48MILMWTIkH7v73JUSkoKpk6dihdffBHjxo3D3/72Nxw4cACJiYkAumeFzZw5ExdccAEmTZqEcePG4euvvwYAjBgxAm+//TZmz56NoUOHGoJUK1aswMGDBzF+/Hi88MIL+Pjjj0VJKwDcfPPNOP/883H99dfj/vvvx5133om5c+eKtn8iIiIiV5AJgiB4OhFERERE5N2mT5+OlpYWrFu3ztNJISIiIrILZ44REREREREREZHfYnCMiIiIiIiIiIj8Fn9WSUREREREREREfoszx4iIiIiIiIiIyG8xOEZERERERERERH6LwTEiIiIiIiIiIvJbDI4REREREREREZHfYnCMiIiIiIiIiIj8FoNjRERERERERETktxgcIyIiIiIiIiIiv8XgGBERERERERER+S0Gx4iIiIiIiIiIyG/9P0Pl0+KsBMgnAAAAAElFTkSuQmCC","text/plain":["