{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Python for Signal Processing\n", "Danilo Greco, PhD - danilo.greco@uniparthenope.it - University of Naples Parthenope" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Lecture 4\n", "This lecture will provide an overview on Pandas data management library:\n", "\n", "1. installation, \n", "2. documentation, \n", "3. main functions and applications,\n", "4. practical examples." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### What is Pandas?\n", "[Pandas](https://pandas.pydata.org/) is a fundamental library for data analysis and manipulation tool in Python.\n", "\n", "It provides some impressive features:\n", "\n", "* a fast and efficient DataFrame object for data manipulation with integrated indexing\n", "* tools for reading and writing data between in-memory data structures and different formats: CSV, Microsoft Excel, etc.\n", "* powerful indexing, reshaping and slicing\n", "* dataset merge and aggregation functions\n", "* time series support\n", "* basic data analytic functions\n", "\n", "and much more.\n", "\n", "Pandas is based on the DataFrame object which encapsulates one or more Series, that are 1D ndarray with axis labels (including time series)." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Install\n", "It can be installed by executing the following command:\n", "\n", ">pip install pandas \n", "\n", "or \n", "\n", ">python -m pip install pandas\n", "\n", "#### NOTE: when installing with python version 3.x, replace pip or python with pip3 or python3 in the commands above.\n", "\n", "# Documentation\n", "The official pandas documentation is available on this [website](https://pandas.pydata.org/docs/) and provides an extensive guide for both users and developers, including setup and absolute beginners [tutorials](https://pandas.pydata.org/docs/getting_started/index.html#getting-started).\n", "\n", "There is also an interesting book explaining how to use pandas for data analysis:\n", ">Wes McKinney, Python for Data Analysis: Data Wrangling with Pandas, NumPy, and IPython, O'Reilly Media\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Main functions and applications\n", "The first thing to do is inform the python interpreter that we are using the package. The following command tells python to import the library and use an alias for quicker references within our code. \n", "\n", "It's useful to import numpy as well even if it is not strictly necessary." ] }, { "cell_type": "code", "execution_count": 318, "metadata": {}, "outputs": [], "source": [ "import numpy as np\n", "import pandas as pd" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We can create a Series by passing a list of values as for numpy:" ] }, { "cell_type": "code", "execution_count": 319, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "0 1.0\n", "1 3.0\n", "2 5.0\n", "3 NaN\n", "4 6.0\n", "5 8.0\n", "dtype: float64" ] }, "execution_count": 319, "metadata": {}, "output_type": "execute_result" } ], "source": [ "s = pd.Series([1, 3, 5, np.nan, 6, 8])\n", "s" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We used np.nan as a numpy constant to assign *Not a Number* as a value in our data. Missing data are generally assigned to NaN when loading a Series or a DataFrame.\n", "\n", "Next, we want to create a random dataset indexed on dates:" ] }, { "cell_type": "code", "execution_count": 320, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
SensorASensorBSensorC
2020-01-01-0.1110360.938855-0.239526
2020-01-02-1.219236-0.727935-1.405468
2020-01-031.4162880.2974260.582218
2020-01-04-0.9522130.2370280.078740
2020-01-05-0.4613831.6141690.146575
2020-01-060.7326110.4034590.280104
2020-01-071.2870540.5077700.327374
2020-01-08-0.0649641.143019-0.630793
2020-01-090.378133-1.610900-0.576368
2020-01-101.1474920.1688670.777388
\n", "
" ], "text/plain": [ " SensorA SensorB SensorC\n", "2020-01-01 -0.111036 0.938855 -0.239526\n", "2020-01-02 -1.219236 -0.727935 -1.405468\n", "2020-01-03 1.416288 0.297426 0.582218\n", "2020-01-04 -0.952213 0.237028 0.078740\n", "2020-01-05 -0.461383 1.614169 0.146575\n", "2020-01-06 0.732611 0.403459 0.280104\n", "2020-01-07 1.287054 0.507770 0.327374\n", "2020-01-08 -0.064964 1.143019 -0.630793\n", "2020-01-09 0.378133 -1.610900 -0.576368\n", "2020-01-10 1.147492 0.168867 0.777388" ] }, "execution_count": 320, "metadata": {}, "output_type": "execute_result" } ], "source": [ "count = 10\n", "dates = pd.date_range('20200101', periods=count)\n", "columns = [\"SensorA\", \"SensorB\", \"SensorC\"]\n", "\n", "df = pd.DataFrame(np.random.randn(count, len(columns)), index=dates, columns=columns)\n", "df" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Inspecting the dataset when it contains lots of data can be a cumbersome process therefore we can have a look at the data by using the following methods that display the first or last 5 rows respectively:" ] }, { "cell_type": "code", "execution_count": 321, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
SensorASensorBSensorC
2020-01-01-0.1110360.938855-0.239526
2020-01-02-1.219236-0.727935-1.405468
\n", "
" ], "text/plain": [ " SensorA SensorB SensorC\n", "2020-01-01 -0.111036 0.938855 -0.239526\n", "2020-01-02 -1.219236 -0.727935 -1.405468" ] }, "execution_count": 321, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df.head(2)" ] }, { "cell_type": "code", "execution_count": 322, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
SensorASensorBSensorC
2020-01-060.7326110.4034590.280104
2020-01-071.2870540.5077700.327374
2020-01-08-0.0649641.143019-0.630793
2020-01-090.378133-1.610900-0.576368
2020-01-101.1474920.1688670.777388
\n", "
" ], "text/plain": [ " SensorA SensorB SensorC\n", "2020-01-06 0.732611 0.403459 0.280104\n", "2020-01-07 1.287054 0.507770 0.327374\n", "2020-01-08 -0.064964 1.143019 -0.630793\n", "2020-01-09 0.378133 -1.610900 -0.576368\n", "2020-01-10 1.147492 0.168867 0.777388" ] }, "execution_count": 322, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df.tail(5)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Dataset index and header columns can be viewed with" ] }, { "cell_type": "code", "execution_count": 323, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "DatetimeIndex(['2020-01-01', '2020-01-02', '2020-01-03', '2020-01-04',\n", " '2020-01-05', '2020-01-06', '2020-01-07', '2020-01-08',\n", " '2020-01-09', '2020-01-10'],\n", " dtype='datetime64[ns]', freq='D')" ] }, "execution_count": 323, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df.index" ] }, { "cell_type": "code", "execution_count": 324, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "Index(['SensorA', 'SensorB', 'SensorC'], dtype='object')" ] }, "execution_count": 324, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df.columns" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Columns may have different data types and use the default index, as shown down here:" ] }, { "cell_type": "code", "execution_count": 325, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ " ColumnA ColumnB ColumnC\n", "0 5 Sunny 1.3\n", "1 5 Cloudy 1.3\n", "2 7 Rainy 1.3\n", "3 4 Windy 1.3\n" ] }, { "data": { "text/plain": [ "ColumnA int32\n", "ColumnB category\n", "ColumnC float64\n", "dtype: object" ] }, "execution_count": 325, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df2 = pd.DataFrame({\n", " 'ColumnA': np.random.randint(10,size=4),\n", " 'ColumnB': pd.Categorical(['Sunny','Cloudy','Rainy','Windy']),\n", " 'ColumnC': 1.3\n", " })\n", "\n", "print(df2)\n", "df2.dtypes" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "If a DataFrame contains homogeneus data types, it can be converted to a plain numpy ndarray" ] }, { "cell_type": "code", "execution_count": 326, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "['T',\n", " '_AXIS_LEN',\n", " '_AXIS_NAMES',\n", " '_AXIS_NUMBERS',\n", " '_AXIS_ORDERS',\n", " '_AXIS_TO_AXIS_NUMBER',\n", " '_HANDLED_TYPES',\n", " '__abs__',\n", " '__add__',\n", " '__and__',\n", " '__annotations__',\n", " '__array__',\n", " '__array_priority__',\n", " '__array_ufunc__',\n", " '__array_wrap__',\n", " '__bool__',\n", " '__class__',\n", " '__contains__',\n", " '__copy__',\n", " '__deepcopy__',\n", " '__delattr__',\n", " '__delitem__',\n", " '__dict__',\n", " '__dir__',\n", " '__divmod__',\n", " '__doc__',\n", " '__eq__',\n", " '__finalize__',\n", " '__floordiv__',\n", " '__format__',\n", " '__ge__',\n", " '__getattr__',\n", " '__getattribute__',\n", " '__getitem__',\n", " '__getstate__',\n", " '__gt__',\n", " '__hash__',\n", " '__iadd__',\n", " '__iand__',\n", " '__ifloordiv__',\n", " '__imod__',\n", " '__imul__',\n", " '__init__',\n", " '__init_subclass__',\n", " '__invert__',\n", " '__ior__',\n", " '__ipow__',\n", " '__isub__',\n", " '__iter__',\n", " '__itruediv__',\n", " '__ixor__',\n", " '__le__',\n", " '__len__',\n", " '__lt__',\n", " '__matmul__',\n", " '__mod__',\n", " '__module__',\n", " '__mul__',\n", " '__ne__',\n", " '__neg__',\n", " '__new__',\n", " '__nonzero__',\n", " '__or__',\n", " '__pos__',\n", " '__pow__',\n", " '__radd__',\n", " '__rand__',\n", " '__rdivmod__',\n", " '__reduce__',\n", " '__reduce_ex__',\n", " '__repr__',\n", " '__rfloordiv__',\n", " '__rmatmul__',\n", " '__rmod__',\n", " '__rmul__',\n", " '__ror__',\n", " '__round__',\n", " '__rpow__',\n", " '__rsub__',\n", " '__rtruediv__',\n", " '__rxor__',\n", " '__setattr__',\n", " '__setitem__',\n", " '__setstate__',\n", " '__sizeof__',\n", " '__str__',\n", " '__sub__',\n", " '__subclasshook__',\n", " '__truediv__',\n", " '__weakref__',\n", " '__xor__',\n", " '_accessors',\n", " '_accum_func',\n", " '_add_numeric_operations',\n", " '_agg_by_level',\n", " '_agg_examples_doc',\n", " '_agg_summary_and_see_also_doc',\n", " '_align_frame',\n", " '_align_series',\n", " '_append',\n", " '_arith_method',\n", " '_as_manager',\n", " '_box_col_values',\n", " '_can_fast_transpose',\n", " '_check_inplace_and_allows_duplicate_labels',\n", " '_check_inplace_setting',\n", " '_check_is_chained_assignment_possible',\n", " '_check_label_or_level_ambiguity',\n", " '_check_setitem_copy',\n", " '_clear_item_cache',\n", " '_clip_with_one_bound',\n", " '_clip_with_scalar',\n", " '_cmp_method',\n", " '_combine_frame',\n", " '_consolidate',\n", " '_consolidate_inplace',\n", " '_construct_axes_dict',\n", " '_construct_axes_from_arguments',\n", " '_construct_result',\n", " '_constructor',\n", " '_constructor_sliced',\n", " '_convert',\n", " '_count_level',\n", " '_data',\n", " '_dir_additions',\n", " '_dir_deletions',\n", " '_dispatch_frame_op',\n", " '_drop_axis',\n", " '_drop_labels_or_levels',\n", " '_ensure_valid_index',\n", " '_find_valid_index',\n", " '_from_arrays',\n", " '_from_mgr',\n", " '_get_agg_axis',\n", " '_get_axis',\n", " '_get_axis_name',\n", " '_get_axis_number',\n", " '_get_axis_resolvers',\n", " '_get_block_manager_axis',\n", " '_get_bool_data',\n", " '_get_cleaned_column_resolvers',\n", " '_get_column_array',\n", " '_get_index_resolvers',\n", " '_get_item_cache',\n", " '_get_label_or_level_values',\n", " '_get_numeric_data',\n", " '_get_value',\n", " '_getitem_bool_array',\n", " '_getitem_multilevel',\n", " '_gotitem',\n", " '_hidden_attrs',\n", " '_indexed_same',\n", " '_info_axis',\n", " '_info_axis_name',\n", " '_info_axis_number',\n", " '_info_repr',\n", " '_init_mgr',\n", " '_inplace_method',\n", " '_internal_names',\n", " '_internal_names_set',\n", " '_is_copy',\n", " '_is_homogeneous_type',\n", " '_is_label_or_level_reference',\n", " '_is_label_reference',\n", " '_is_level_reference',\n", " '_is_mixed_type',\n", " '_is_view',\n", " '_iset_item',\n", " '_iset_item_mgr',\n", " '_iset_not_inplace',\n", " '_iter_column_arrays',\n", " '_ixs',\n", " '_join_compat',\n", " '_logical_func',\n", " '_logical_method',\n", " '_maybe_cache_changed',\n", " '_maybe_update_cacher',\n", " '_metadata',\n", " '_min_count_stat_function',\n", " '_needs_reindex_multi',\n", " '_protect_consolidate',\n", " '_reduce',\n", " '_reduce_axis1',\n", " '_reindex_axes',\n", " '_reindex_columns',\n", " '_reindex_index',\n", " '_reindex_multi',\n", " '_reindex_with_indexers',\n", " '_rename',\n", " '_replace_columnwise',\n", " '_repr_data_resource_',\n", " '_repr_fits_horizontal_',\n", " '_repr_fits_vertical_',\n", " '_repr_html_',\n", " '_repr_latex_',\n", " '_reset_cache',\n", " '_reset_cacher',\n", " '_sanitize_column',\n", " '_series',\n", " '_set_axis',\n", " '_set_axis_name',\n", " '_set_axis_nocheck',\n", " '_set_is_copy',\n", " '_set_item',\n", " '_set_item_frame_value',\n", " '_set_item_mgr',\n", " '_set_value',\n", " '_setitem_array',\n", " '_setitem_frame',\n", " '_setitem_slice',\n", " '_slice',\n", " '_stat_axis',\n", " '_stat_axis_name',\n", " '_stat_axis_number',\n", " '_stat_function',\n", " '_stat_function_ddof',\n", " '_take_with_is_copy',\n", " '_to_dict_of_blocks',\n", " '_typ',\n", " '_update_inplace',\n", " '_validate_dtype',\n", " '_values',\n", " '_where',\n", " 'abs',\n", " 'add',\n", " 'add_prefix',\n", " 'add_suffix',\n", " 'agg',\n", " 'aggregate',\n", " 'align',\n", " 'all',\n", " 'any',\n", " 'append',\n", " 'apply',\n", " 'applymap',\n", " 'asfreq',\n", " 'asof',\n", " 'assign',\n", " 'astype',\n", " 'at',\n", " 'at_time',\n", " 'attrs',\n", " 'axes',\n", " 'backfill',\n", " 'between_time',\n", " 'bfill',\n", " 'bool',\n", " 'boxplot',\n", " 'clip',\n", " 'columns',\n", " 'combine',\n", " 'combine_first',\n", " 'compare',\n", " 'convert_dtypes',\n", " 'copy',\n", " 'corr',\n", " 'corrwith',\n", " 'count',\n", " 'cov',\n", " 'cummax',\n", " 'cummin',\n", " 'cumprod',\n", " 'cumsum',\n", " 'describe',\n", " 'diff',\n", " 'div',\n", " 'divide',\n", " 'dot',\n", " 'drop',\n", " 'drop_duplicates',\n", " 'droplevel',\n", " 'dropna',\n", " 'dtypes',\n", " 'duplicated',\n", " 'empty',\n", " 'eq',\n", " 'equals',\n", " 'eval',\n", " 'ewm',\n", " 'expanding',\n", " 'explode',\n", " 'ffill',\n", " 'fillna',\n", " 'filter',\n", " 'first',\n", " 'first_valid_index',\n", " 'flags',\n", " 'floordiv',\n", " 'from_dict',\n", " 'from_records',\n", " 'ge',\n", " 'get',\n", " 'groupby',\n", " 'gt',\n", " 'head',\n", " 'hist',\n", " 'iat',\n", " 'idxmax',\n", " 'idxmin',\n", " 'iloc',\n", " 'index',\n", " 'infer_objects',\n", " 'info',\n", " 'insert',\n", " 'interpolate',\n", " 'isin',\n", " 'isna',\n", " 'isnull',\n", " 'items',\n", " 'iteritems',\n", " 'iterrows',\n", " 'itertuples',\n", " 'join',\n", " 'keys',\n", " 'kurt',\n", " 'kurtosis',\n", " 'last',\n", " 'last_valid_index',\n", " 'le',\n", " 'loc',\n", " 'lookup',\n", " 'lt',\n", " 'mad',\n", " 'mask',\n", " 'max',\n", " 'mean',\n", " 'median',\n", " 'melt',\n", " 'memory_usage',\n", " 'merge',\n", " 'min',\n", " 'mod',\n", " 'mode',\n", " 'mul',\n", " 'multiply',\n", " 'ndim',\n", " 'ne',\n", " 'nlargest',\n", " 'notna',\n", " 'notnull',\n", " 'nsmallest',\n", " 'nunique',\n", " 'pad',\n", " 'pct_change',\n", " 'pipe',\n", " 'pivot',\n", " 'pivot_table',\n", " 'plot',\n", " 'pop',\n", " 'pow',\n", " 'prod',\n", " 'product',\n", " 'quantile',\n", " 'query',\n", " 'radd',\n", " 'rank',\n", " 'rdiv',\n", " 'reindex',\n", " 'reindex_like',\n", " 'rename',\n", " 'rename_axis',\n", " 'reorder_levels',\n", " 'replace',\n", " 'resample',\n", " 'reset_index',\n", " 'rfloordiv',\n", " 'rmod',\n", " 'rmul',\n", " 'rolling',\n", " 'round',\n", " 'rpow',\n", " 'rsub',\n", " 'rtruediv',\n", " 'sample',\n", " 'select_dtypes',\n", " 'sem',\n", " 'set_axis',\n", " 'set_flags',\n", " 'set_index',\n", " 'shape',\n", " 'shift',\n", " 'size',\n", " 'skew',\n", " 'slice_shift',\n", " 'sort_index',\n", " 'sort_values',\n", " 'sparse',\n", " 'squeeze',\n", " 'stack',\n", " 'std',\n", " 'style',\n", " 'sub',\n", " 'subtract',\n", " 'sum',\n", " 'swapaxes',\n", " 'swaplevel',\n", " 'tail',\n", " 'take',\n", " 'to_clipboard',\n", " 'to_csv',\n", " 'to_dict',\n", " 'to_excel',\n", " 'to_feather',\n", " 'to_gbq',\n", " 'to_hdf',\n", " 'to_html',\n", " 'to_json',\n", " 'to_latex',\n", " 'to_markdown',\n", " 'to_numpy',\n", " 'to_parquet',\n", " 'to_period',\n", " 'to_pickle',\n", " 'to_records',\n", " 'to_sql',\n", " 'to_stata',\n", " 'to_string',\n", " 'to_timestamp',\n", " 'to_xarray',\n", " 'to_xml',\n", " 'transform',\n", " 'transpose',\n", " 'truediv',\n", " 'truncate',\n", " 'tshift',\n", " 'tz_convert',\n", " 'tz_localize',\n", " 'unstack',\n", " 'update',\n", " 'value_counts',\n", " 'values',\n", " 'var',\n", " 'where',\n", " 'xs']" ] }, "execution_count": 326, "metadata": {}, "output_type": "execute_result" } ], "source": [ "dir(pd.DataFrame)" ] }, { "cell_type": "code", "execution_count": 327, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([[-0.11103589, 0.93885463, -0.23952558],\n", " [-1.21923645, -0.72793451, -1.40546812],\n", " [ 1.41628812, 0.29742617, 0.58221825],\n", " [-0.95221329, 0.23702819, 0.07874023],\n", " [-0.46138256, 1.61416912, 0.14657472],\n", " [ 0.73261097, 0.4034592 , 0.28010365],\n", " [ 1.2870541 , 0.50776983, 0.32737421],\n", " [-0.06496448, 1.14301852, -0.63079325],\n", " [ 0.37813318, -1.61090044, -0.57636789],\n", " [ 1.14749157, 0.16886671, 0.77738771]])" ] }, "execution_count": 327, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df.values" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "To get a quick statistical summary of our dataset, the following method can be invoked:" ] }, { "cell_type": "code", "execution_count": 328, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
SensorASensorBSensorC
count10.00000010.00000010.000000
mean0.2152750.297176-0.065976
std0.9320260.9206890.656244
min-1.219236-1.610900-1.405468
25%-0.3737960.185907-0.492157
50%0.1565840.3504430.112657
75%1.0437710.8310830.315557
max1.4162881.6141690.777388
\n", "
" ], "text/plain": [ " SensorA SensorB SensorC\n", "count 10.000000 10.000000 10.000000\n", "mean 0.215275 0.297176 -0.065976\n", "std 0.932026 0.920689 0.656244\n", "min -1.219236 -1.610900 -1.405468\n", "25% -0.373796 0.185907 -0.492157\n", "50% 0.156584 0.350443 0.112657\n", "75% 1.043771 0.831083 0.315557\n", "max 1.416288 1.614169 0.777388" ] }, "execution_count": 328, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df.describe()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Data can be easily sorted in ascending or descending order with:" ] }, { "cell_type": "code", "execution_count": 329, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
SensorASensorBSensorC
2020-01-090.378133-1.610900-0.576368
2020-01-02-1.219236-0.727935-1.405468
2020-01-101.1474920.1688670.777388
2020-01-04-0.9522130.2370280.078740
2020-01-031.4162880.2974260.582218
2020-01-060.7326110.4034590.280104
2020-01-071.2870540.5077700.327374
2020-01-01-0.1110360.938855-0.239526
2020-01-08-0.0649641.143019-0.630793
2020-01-05-0.4613831.6141690.146575
\n", "
" ], "text/plain": [ " SensorA SensorB SensorC\n", "2020-01-09 0.378133 -1.610900 -0.576368\n", "2020-01-02 -1.219236 -0.727935 -1.405468\n", "2020-01-10 1.147492 0.168867 0.777388\n", "2020-01-04 -0.952213 0.237028 0.078740\n", "2020-01-03 1.416288 0.297426 0.582218\n", "2020-01-06 0.732611 0.403459 0.280104\n", "2020-01-07 1.287054 0.507770 0.327374\n", "2020-01-01 -0.111036 0.938855 -0.239526\n", "2020-01-08 -0.064964 1.143019 -0.630793\n", "2020-01-05 -0.461383 1.614169 0.146575" ] }, "execution_count": 329, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df.sort_values(by='SensorB',ascending=True)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Selection in a DataFrame can be done in the standard python slicing ways but they're not optimized for pandas which relies on four access methods: \n", ">loc, iloc, at, iat. \n", "\n", "Here are some examples:" ] }, { "cell_type": "code", "execution_count": 330, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "2020-01-03 00:00:00\n" ] }, { "data": { "text/plain": [ "SensorA 1.416288\n", "SensorB 0.297426\n", "SensorC 0.582218\n", "Name: 2020-01-03 00:00:00, dtype: float64" ] }, "execution_count": 330, "metadata": {}, "output_type": "execute_result" } ], "source": [ "print(dates[2])\n", "df.loc[dates[2]] # selection by label" ] }, { "cell_type": "code", "execution_count": 331, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
SensorASensorC
2020-01-060.7326110.280104
2020-01-071.2870540.327374
2020-01-08-0.064964-0.630793
2020-01-090.378133-0.576368
2020-01-101.1474920.777388
\n", "
" ], "text/plain": [ " SensorA SensorC\n", "2020-01-06 0.732611 0.280104\n", "2020-01-07 1.287054 0.327374\n", "2020-01-08 -0.064964 -0.630793\n", "2020-01-09 0.378133 -0.576368\n", "2020-01-10 1.147492 0.777388" ] }, "execution_count": 331, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df.loc[:,[\"SensorA\",\"SensorC\"]].tail() # selection by label on multiple columns" ] }, { "cell_type": "code", "execution_count": 332, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "0.5822182512962807" ] }, "execution_count": 332, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df.loc['2020-01-03'].at['SensorC'] # access the value of given row and column" ] }, { "cell_type": "code", "execution_count": 333, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "2020-01-03 00:00:00\n" ] }, { "data": { "text/plain": [ "0.5822182512962807" ] }, "execution_count": 333, "metadata": {}, "output_type": "execute_result" } ], "source": [ "print(dates[2])\n", "df.at[pd.Timestamp('2020-01-03'),'SensorC']" ] }, { "cell_type": "code", "execution_count": 334, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "0.5822182512962807" ] }, "execution_count": 334, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df.at[dates[2],'SensorC'] # access the value of given row and column" ] }, { "cell_type": "code", "execution_count": 335, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "SensorA 1.416288\n", "SensorB 0.297426\n", "SensorC 0.582218\n", "Name: 2020-01-03 00:00:00, dtype: float64" ] }, "execution_count": 335, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df.iloc[2] # selection by position" ] }, { "cell_type": "code", "execution_count": 336, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
SensorASensorC
2020-01-08-0.064964-0.630793
2020-01-090.378133-0.576368
2020-01-101.1474920.777388
\n", "
" ], "text/plain": [ " SensorA SensorC\n", "2020-01-08 -0.064964 -0.630793\n", "2020-01-09 0.378133 -0.576368\n", "2020-01-10 1.147492 0.777388" ] }, "execution_count": 336, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df.iloc[-3:,[0,2]]" ] }, { "cell_type": "code", "execution_count": 337, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "0.29742617283525397" ] }, "execution_count": 337, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df.iat[2,1]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "All previous commands can also be used to assign values at slices or individual elements, such as:" ] }, { "cell_type": "code", "execution_count": 338, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
SensorASensorBSensorC
2020-01-01-0.1110360.938855-0.239526
2020-01-02-1.219236-0.727935-1.405468
2020-01-031.4162880.0000000.582218
2020-01-04-0.9522130.2370280.078740
2020-01-05-0.4613831.6141690.146575
\n", "
" ], "text/plain": [ " SensorA SensorB SensorC\n", "2020-01-01 -0.111036 0.938855 -0.239526\n", "2020-01-02 -1.219236 -0.727935 -1.405468\n", "2020-01-03 1.416288 0.000000 0.582218\n", "2020-01-04 -0.952213 0.237028 0.078740\n", "2020-01-05 -0.461383 1.614169 0.146575" ] }, "execution_count": 338, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df.iat[2,1] = 0.0\n", "df.head()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Filtering is also possible with boolean conditions and the result can be used to create a new DataFrame with:" ] }, { "cell_type": "code", "execution_count": 339, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
SensorASensorBSensorC
2020-01-031.4162880.0000000.582218
2020-01-060.7326110.4034590.280104
2020-01-071.2870540.5077700.327374
2020-01-090.378133-1.610900-0.576368
2020-01-101.1474920.1688670.777388
\n", "
" ], "text/plain": [ " SensorA SensorB SensorC\n", "2020-01-03 1.416288 0.000000 0.582218\n", "2020-01-06 0.732611 0.403459 0.280104\n", "2020-01-07 1.287054 0.507770 0.327374\n", "2020-01-09 0.378133 -1.610900 -0.576368\n", "2020-01-10 1.147492 0.168867 0.777388" ] }, "execution_count": 339, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df3 = df[df['SensorA'] > 0].copy()\n", "df3" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Alternatively, filtering can be applied with the query method, even combining multiple conditions:" ] }, { "cell_type": "code", "execution_count": 340, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
SensorASensorBSensorC
2020-01-060.7326110.4034590.280104
2020-01-071.2870540.5077700.327374
2020-01-101.1474920.1688670.777388
\n", "
" ], "text/plain": [ " SensorA SensorB SensorC\n", "2020-01-06 0.732611 0.403459 0.280104\n", "2020-01-07 1.287054 0.507770 0.327374\n", "2020-01-10 1.147492 0.168867 0.777388" ] }, "execution_count": 340, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df.query('SensorA > 0 & SensorB > 0')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Dealing with missing data\n", "Missing data are always getting trouble to data analysts but Pandas allows to deal with them easily. \n", "\n", "But first, we need to go through CSV data import, which is one of the most frequently used formats and it natively supported in Pandas. \n", "\n", "Many other formats are readable but they won't be addressed in this lecture.\n", "\n", "In order to read data from a CSV file, we can use the pd.read_csv library function, with some specific parameters to correctly import the index. \n", "\n", "If we do not specify the proper parameters, the simplest import produces an undesired result where the index column is automatically assigned to automatical integer values:" ] }, { "cell_type": "code", "execution_count": 341, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
Unnamed: 0SensorASensorBSensorC
02020-01-030.470622-1.1720691.661895
12020-01-041.797044NaN0.164888
22020-01-092.2292250.751242NaN
32020-01-100.8391911.247696NaN
42020-01-130.424159-0.6116640.179591
52020-01-161.222883-0.9927861.642943
62020-01-200.1164150.3540190.277395
\n", "
" ], "text/plain": [ " Unnamed: 0 SensorA SensorB SensorC\n", "0 2020-01-03 0.470622 -1.172069 1.661895\n", "1 2020-01-04 1.797044 NaN 0.164888\n", "2 2020-01-09 2.229225 0.751242 NaN\n", "3 2020-01-10 0.839191 1.247696 NaN\n", "4 2020-01-13 0.424159 -0.611664 0.179591\n", "5 2020-01-16 1.222883 -0.992786 1.642943\n", "6 2020-01-20 0.116415 0.354019 0.277395" ] }, "execution_count": 341, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df_missing = pd.read_csv('missing.csv')\n", "df_missing" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The Unnamed: 0 column is likely to be the original index of the dataset, hence we can set the index with:" ] }, { "cell_type": "code", "execution_count": 342, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
SensorASensorBSensorC
Unnamed: 0
2020-01-030.470622-1.1720691.661895
2020-01-041.797044NaN0.164888
2020-01-092.2292250.751242NaN
2020-01-100.8391911.247696NaN
2020-01-130.424159-0.6116640.179591
2020-01-161.222883-0.9927861.642943
2020-01-200.1164150.3540190.277395
\n", "
" ], "text/plain": [ " SensorA SensorB SensorC\n", "Unnamed: 0 \n", "2020-01-03 0.470622 -1.172069 1.661895\n", "2020-01-04 1.797044 NaN 0.164888\n", "2020-01-09 2.229225 0.751242 NaN\n", "2020-01-10 0.839191 1.247696 NaN\n", "2020-01-13 0.424159 -0.611664 0.179591\n", "2020-01-16 1.222883 -0.992786 1.642943\n", "2020-01-20 0.116415 0.354019 0.277395" ] }, "execution_count": 342, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df_missing.set_index('Unnamed: 0')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### WARNING: some transformations are not persisted unless you assign the result to a variable\n", "If we now display the df_missing dataset we find out that the index is not set as expected. " ] }, { "cell_type": "code", "execution_count": 343, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
Unnamed: 0SensorASensorBSensorC
02020-01-030.470622-1.1720691.661895
12020-01-041.797044NaN0.164888
22020-01-092.2292250.751242NaN
32020-01-100.8391911.247696NaN
42020-01-130.424159-0.6116640.179591
52020-01-161.222883-0.9927861.642943
62020-01-200.1164150.3540190.277395
\n", "
" ], "text/plain": [ " Unnamed: 0 SensorA SensorB SensorC\n", "0 2020-01-03 0.470622 -1.172069 1.661895\n", "1 2020-01-04 1.797044 NaN 0.164888\n", "2 2020-01-09 2.229225 0.751242 NaN\n", "3 2020-01-10 0.839191 1.247696 NaN\n", "4 2020-01-13 0.424159 -0.611664 0.179591\n", "5 2020-01-16 1.222883 -0.992786 1.642943\n", "6 2020-01-20 0.116415 0.354019 0.277395" ] }, "execution_count": 343, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df_missing" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "To make sure our changes are persisted we can either assign a variable or use the inplace = True parameter in the set_index call. This parameter is generally available for many data transformation functions in Pandas." ] }, { "cell_type": "code", "execution_count": 344, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
SensorASensorBSensorC
Unnamed: 0
2020-01-030.470622-1.1720691.661895
2020-01-041.797044NaN0.164888
2020-01-092.2292250.751242NaN
2020-01-100.8391911.247696NaN
2020-01-130.424159-0.6116640.179591
2020-01-161.222883-0.9927861.642943
2020-01-200.1164150.3540190.277395
\n", "
" ], "text/plain": [ " SensorA SensorB SensorC\n", "Unnamed: 0 \n", "2020-01-03 0.470622 -1.172069 1.661895\n", "2020-01-04 1.797044 NaN 0.164888\n", "2020-01-09 2.229225 0.751242 NaN\n", "2020-01-10 0.839191 1.247696 NaN\n", "2020-01-13 0.424159 -0.611664 0.179591\n", "2020-01-16 1.222883 -0.992786 1.642943\n", "2020-01-20 0.116415 0.354019 0.277395" ] }, "execution_count": 344, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df_new = df_missing.set_index('Unnamed: 0')\n", "df_new" ] }, { "cell_type": "code", "execution_count": 345, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
SensorASensorBSensorC
Unnamed: 0
2020-01-030.470622-1.1720691.661895
2020-01-041.797044NaN0.164888
2020-01-092.2292250.751242NaN
2020-01-100.8391911.247696NaN
2020-01-130.424159-0.6116640.179591
2020-01-161.222883-0.9927861.642943
2020-01-200.1164150.3540190.277395
\n", "
" ], "text/plain": [ " SensorA SensorB SensorC\n", "Unnamed: 0 \n", "2020-01-03 0.470622 -1.172069 1.661895\n", "2020-01-04 1.797044 NaN 0.164888\n", "2020-01-09 2.229225 0.751242 NaN\n", "2020-01-10 0.839191 1.247696 NaN\n", "2020-01-13 0.424159 -0.611664 0.179591\n", "2020-01-16 1.222883 -0.992786 1.642943\n", "2020-01-20 0.116415 0.354019 0.277395" ] }, "execution_count": 345, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df_missing.set_index('Unnamed: 0',inplace=True)\n", "df_missing" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We can specify the index column at read time in order to save time:" ] }, { "cell_type": "code", "execution_count": 346, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
SensorASensorBSensorC
2020-01-030.470622-1.1720691.661895
2020-01-041.797044NaN0.164888
2020-01-092.2292250.751242NaN
2020-01-100.8391911.247696NaN
2020-01-130.424159-0.6116640.179591
2020-01-161.222883-0.9927861.642943
2020-01-200.1164150.3540190.277395
\n", "
" ], "text/plain": [ " SensorA SensorB SensorC\n", "2020-01-03 0.470622 -1.172069 1.661895\n", "2020-01-04 1.797044 NaN 0.164888\n", "2020-01-09 2.229225 0.751242 NaN\n", "2020-01-10 0.839191 1.247696 NaN\n", "2020-01-13 0.424159 -0.611664 0.179591\n", "2020-01-16 1.222883 -0.992786 1.642943\n", "2020-01-20 0.116415 0.354019 0.277395" ] }, "execution_count": 346, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df_missing = pd.read_csv('missing.csv',index_col=0)\n", "df_missing" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Going back to missing data, they are identified by NaN values in our dataset. \n", "\n", "Should we want to remove all data rows containing missing values, the dropna function is used:" ] }, { "cell_type": "code", "execution_count": 347, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
SensorASensorBSensorC
2020-01-030.470622-1.1720691.661895
2020-01-130.424159-0.6116640.179591
2020-01-161.222883-0.9927861.642943
2020-01-200.1164150.3540190.277395
\n", "
" ], "text/plain": [ " SensorA SensorB SensorC\n", "2020-01-03 0.470622 -1.172069 1.661895\n", "2020-01-13 0.424159 -0.611664 0.179591\n", "2020-01-16 1.222883 -0.992786 1.642943\n", "2020-01-20 0.116415 0.354019 0.277395" ] }, "execution_count": 347, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df_missing.dropna(how='any')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Conversely, to maintain those rows and columns and replace missing values with some other valid ones, we use:" ] }, { "cell_type": "code", "execution_count": 348, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
SensorASensorBSensorC
2020-01-030.470622-1.1720691.661895
2020-01-041.7970440.0000000.164888
2020-01-092.2292250.7512420.000000
2020-01-100.8391911.2476960.000000
2020-01-130.424159-0.6116640.179591
2020-01-161.222883-0.9927861.642943
2020-01-200.1164150.3540190.277395
\n", "
" ], "text/plain": [ " SensorA SensorB SensorC\n", "2020-01-03 0.470622 -1.172069 1.661895\n", "2020-01-04 1.797044 0.000000 0.164888\n", "2020-01-09 2.229225 0.751242 0.000000\n", "2020-01-10 0.839191 1.247696 0.000000\n", "2020-01-13 0.424159 -0.611664 0.179591\n", "2020-01-16 1.222883 -0.992786 1.642943\n", "2020-01-20 0.116415 0.354019 0.277395" ] }, "execution_count": 348, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df_missing.fillna(0.0)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "These are only basic examples because many optional parameters are available for those functions that give us more flexibility on how to deal with missing values. Finally, if we want to have a boolean map of missing values the pd.isna function is returns True where NaN values are located." ] }, { "cell_type": "code", "execution_count": 349, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
SensorASensorBSensorC
2020-01-03FalseFalseFalse
2020-01-04FalseTrueFalse
2020-01-09FalseFalseTrue
2020-01-10FalseFalseTrue
2020-01-13FalseFalseFalse
2020-01-16FalseFalseFalse
2020-01-20FalseFalseFalse
\n", "
" ], "text/plain": [ " SensorA SensorB SensorC\n", "2020-01-03 False False False\n", "2020-01-04 False True False\n", "2020-01-09 False False True\n", "2020-01-10 False False True\n", "2020-01-13 False False False\n", "2020-01-16 False False False\n", "2020-01-20 False False False" ] }, "execution_count": 349, "metadata": {}, "output_type": "execute_result" } ], "source": [ "pd.isna(df_missing)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "It is also possible to apply functions to the dataset, such as:" ] }, { "cell_type": "code", "execution_count": 350, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
SensorASensorBSensorC
2020-01-030.470622-1.1720691.661895
2020-01-042.267666NaN1.826783
2020-01-094.496891-0.420826NaN
2020-01-105.3360820.826869NaN
2020-01-135.7602410.2152062.006374
2020-01-166.983124-0.7775813.649317
2020-01-207.099539-0.4235613.926712
\n", "
" ], "text/plain": [ " SensorA SensorB SensorC\n", "2020-01-03 0.470622 -1.172069 1.661895\n", "2020-01-04 2.267666 NaN 1.826783\n", "2020-01-09 4.496891 -0.420826 NaN\n", "2020-01-10 5.336082 0.826869 NaN\n", "2020-01-13 5.760241 0.215206 2.006374\n", "2020-01-16 6.983124 -0.777581 3.649317\n", "2020-01-20 7.099539 -0.423561 3.926712" ] }, "execution_count": 350, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df_missing.apply(np.cumsum) # incrementally sum over columns" ] }, { "cell_type": "code", "execution_count": 351, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "SensorA 2.112809\n", "SensorB 2.419764\n", "SensorC 1.497007\n", "dtype: float64" ] }, "execution_count": 351, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df_missing.apply(lambda x: x.max() - x.min()) # uses lambda functions over the columns" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Other aggregations can be done with groupby:" ] }, { "cell_type": "code", "execution_count": 352, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
Data1Data2
Class
A-2.1326860.262920
B-0.4544621.782832
A1.645823-0.284874
A-0.1049820.175540
B0.833925-0.179474
A0.926685-0.105481
B1.712343-0.342803
A0.2531010.528295
B0.6015370.434794
B-0.0595160.172697
\n", "
" ], "text/plain": [ " Data1 Data2\n", "Class \n", "A -2.132686 0.262920\n", "B -0.454462 1.782832\n", "A 1.645823 -0.284874\n", "A -0.104982 0.175540\n", "B 0.833925 -0.179474\n", "A 0.926685 -0.105481\n", "B 1.712343 -0.342803\n", "A 0.253101 0.528295\n", "B 0.601537 0.434794\n", "B -0.059516 0.172697" ] }, "execution_count": 352, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df = pd.DataFrame({'Class': ['A','B','A','A','B','A','B','A','B','B'],\n", " 'Data1': np.random.randn(10),\n", " 'Data2': np.random.randn(10)})\n", "\n", "df.set_index('Class',inplace=True) # optional \n", "df" ] }, { "cell_type": "code", "execution_count": 353, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
Data1Data2
Class
A0.5879410.576401
B2.6338271.868046
\n", "
" ], "text/plain": [ " Data1 Data2\n", "Class \n", "A 0.587941 0.576401\n", "B 2.633827 1.868046" ] }, "execution_count": 353, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df.groupby('Class').sum()" ] }, { "cell_type": "code", "execution_count": 354, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
Data1Data2
Class
A0.1175880.115280
B0.5267650.373609
\n", "
" ], "text/plain": [ " Data1 Data2\n", "Class \n", "A 0.117588 0.115280\n", "B 0.526765 0.373609" ] }, "execution_count": 354, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df.groupby('Class').mean()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Pivot Tables\n", "\n", "Creation of pivot tables from data is natively supported in Pandas and this provides a quick and powerful way to aggregate data. \n", "\n", "In the examples below, we have a list of row entries representing acquisitions from field sensors and we produce two pivot tables averaging the values (other aggregation functions may be specified) according to the desired rows and columns:" ] }, { "cell_type": "code", "execution_count": 355, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
RoomPositionTemperatureHumidity
0LivingRoomFloor16.8144800.891609
1BedRoomFloor32.5023420.514669
2BathRoomFloor32.6823620.349457
3LivingRoomCeiling22.2088080.768508
4BedRoomCeiling16.1314730.172980
5BathRoomCeiling23.0546880.020702
6LivingRoomFloor17.5662950.884646
7BedRoomFloor19.4206970.497103
8BathRoomFloor28.7484010.588229
9LivingRoomCeiling20.4627980.526227
10BedRoomCeiling29.1658410.139532
11BathRoomCeiling16.9325230.625002
\n", "
" ], "text/plain": [ " Room Position Temperature Humidity\n", "0 LivingRoom Floor 16.814480 0.891609\n", "1 BedRoom Floor 32.502342 0.514669\n", "2 BathRoom Floor 32.682362 0.349457\n", "3 LivingRoom Ceiling 22.208808 0.768508\n", "4 BedRoom Ceiling 16.131473 0.172980\n", "5 BathRoom Ceiling 23.054688 0.020702\n", "6 LivingRoom Floor 17.566295 0.884646\n", "7 BedRoom Floor 19.420697 0.497103\n", "8 BathRoom Floor 28.748401 0.588229\n", "9 LivingRoom Ceiling 20.462798 0.526227\n", "10 BedRoom Ceiling 29.165841 0.139532\n", "11 BathRoom Ceiling 16.932523 0.625002" ] }, "execution_count": 355, "metadata": {}, "output_type": "execute_result" } ], "source": [ "dfp = pd.DataFrame({\n", " 'Room':['LivingRoom', 'BedRoom', 'BathRoom']*4, #repeat this definition for 4 times \n", " 'Position': ['Floor','Floor','Floor','Ceiling','Ceiling','Ceiling']*2, #repeat this definition for 2 times \n", " 'Temperature': np.random.uniform(low=15.0, high=35.0, size=(12,)),\n", " 'Humidity': np.random.random(12) #np.random.random is a function provided by the NumPy library that generates random numbers. \n", " #It returns random floats between 0.0 and 1.0.\n", " })\n", "\n", "dfp" ] }, { "cell_type": "code", "execution_count": 356, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
HumidityTemperature
PositionCeilingFloorCeilingFloor
Room
BathRoom0.3228520.46884319.99360630.715382
BedRoom0.1562560.50588622.64865725.961519
LivingRoom0.6473680.88812721.33580317.190387
\n", "
" ], "text/plain": [ " Humidity Temperature \n", "Position Ceiling Floor Ceiling Floor\n", "Room \n", "BathRoom 0.322852 0.468843 19.993606 30.715382\n", "BedRoom 0.156256 0.505886 22.648657 25.961519\n", "LivingRoom 0.647368 0.888127 21.335803 17.190387" ] }, "execution_count": 356, "metadata": {}, "output_type": "execute_result" } ], "source": [ "pd.pivot_table(dfp, values=['Temperature','Humidity'], index=['Room'], columns=['Position'])" ] }, { "cell_type": "code", "execution_count": 357, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
HumidityTemperature
PositionRoom
CeilingBathRoom0.32285219.993606
BedRoom0.15625622.648657
LivingRoom0.64736821.335803
FloorBathRoom0.46884330.715382
BedRoom0.50588625.961519
LivingRoom0.88812717.190387
\n", "
" ], "text/plain": [ " Humidity Temperature\n", "Position Room \n", "Ceiling BathRoom 0.322852 19.993606\n", " BedRoom 0.156256 22.648657\n", " LivingRoom 0.647368 21.335803\n", "Floor BathRoom 0.468843 30.715382\n", " BedRoom 0.505886 25.961519\n", " LivingRoom 0.888127 17.190387" ] }, "execution_count": 357, "metadata": {}, "output_type": "execute_result" } ], "source": [ "pd.pivot_table(dfp, values=['Temperature','Humidity'], index=['Position','Room'])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Plotting data\n", "Pandas includes some interesting features to graphically represent DataFrames:" ] }, { "cell_type": "code", "execution_count": 358, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 358, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "dfp['Temperature'].plot()" ] }, { "cell_type": "code", "execution_count": 359, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 359, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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p/j4eC1evFiXL1+++jcqqU+fPrI+9/SAQCDQrN/n99fY2KiUlBTt2LGjWV/+9A/dWXx8vIYNGxbS9te//jX4dVvPmc9flO1wOFpsu9rrw+f30RHf/OY39cwzz2jv3r3au3evhg4dqjvvvNO28REZhI9eZsKECTp27FizFyA7nD59WmfOnFFqaqokae/everTp49GjBihpKQk3XDDDfrf//1f/cM//ENY47777rv60pe+FPzfWWNjo44fP65Ro0YF+1x33XW6cuVKyHaDBg1SdXW1amtrgwGjtfsMNJkwYYIqKysVHR0dcqEd0NMNGjRIlZWVsiwr+J+Htpwz4Ro9erQ2b94c0rZv375Wt2npHJekAQMGaObMmVq/fr327t2rf/zHf7SzVEQIF5z2Mt/73vf06quvyuPx6PDhwzpy5Ig2bdqk559/vsNjx8bGau7cuXrvvff07rvv6sknn9RXv/rV4J/YeTweFRQUaNWqVfrggw906NAhrV+/XitWrGh13GHDhsnr9WrPnj06cuSIFixYoMrKypA+Q4cO1f79+1VWVqazZ8+qsbFRkydPlsvl0rPPPqsTJ05o48aNKiwsvOb3cc899ygzM1MzZ87U9u3bVVZWpj179uj5558PXmwL9ERZWVn6+OOPtXz5cp08eVI//vGPtXXrVtv389hjj+nkyZPKzc3VsWPH2nRuDh06VKWlpSopKdHZs2fl9/uD6+bPn68NGzboyJEjmjt3ru31wn6Ej17m3nvv1dtvvy2v16vbbrtNU6ZM0YoVK5Sent7hsYcNGxa8gj0nJ0djx44N+VPa+fPn6z//8z9VWFiocePGadq0aSosLFRGRkar477wwguaMGGC7r33XmVlZSk5ObnZzZKWLFmiqKgojR49WoMGDdLp06fVv39/vfbaa9qyZUvwz3M9Hs81vw+Hw6EtW7borrvu0re+9S2NGDFCX/va11RWVha8/gXoiUaNGqU1a9boxz/+scaPH68//vGPWrJkie37GTJkiN5880395je/0fjx4/Uf//Efys/Pb3Wbhx56SPfdd5+mT5+uQYMGhfy5/T333KOUlBTde++9wZlXdG0Oy84339BreTwebd68OSJTtADQmrq6OqWmpuqVV15p8Xo2dD1c8wEA6JYaGxtVWVmpl19+Wf369dPf//3fd3ZJaCPCBwCgWzp9+rQyMjI0ePBgFRYWKjqaX2ndBW+7AAAAo7jgFAAAGEX4AAAARhE+AACAUYQPAABgFOEDAAAYRfgAAABGET4AAIBRhA8AAGAU4QMAABj1fwGT9TbSaaOf/gAAAABJRU5ErkJggg==", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "dfp.boxplot()" ] }, { "cell_type": "code", "execution_count": 360, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([,\n", " ],\n", " dtype=object)" ] }, "execution_count": 360, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAA08AAAE4CAYAAACDhshKAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8qNh9FAAAACXBIWXMAAA9hAAAPYQGoP6dpAABL5UlEQVR4nO3dd3xUVf7/8fckk0wmFUJJgRAwgKEjRRB0CSIIKCKIi7IiuLYVRLAj6hIUQYosPnRBXHaxgSCuBQER1NAWcAEXpIjCbhCkg0AgjYSc3x/8Ml+GtBkyIeW+no9HHjDnnjnnc++ZO2c+c8vYjDFGAAAAAIBi+ZV3AAAAAABQGZA8AQAAAIAHSJ4AAAAAwAMkTwAAAADgAZInAAAAAPAAyRMAAAAAeIDkCQAAAAA8QPIEAAAAAB4geQIAAAAAD5A8AYAH3nnnHdlsNre/WrVqKSkpSYsXLy7v8Fzq16+voUOHev28jIwMJScna+XKlT6PqapKSkpSUlJSifVsNpseffTRMo1l7969bq9NPz8/Va9eXd26ddPy5cvLtG8AsBKSJwDwwpw5c7R+/XqtW7dOb7/9tvz9/dWnTx998cUX5R1aqWRkZGjcuHEkT5XciBEjtH79eq1Zs0ZTp07V7t271bt3b61evbq8QwOAKsFe3gEAQGXSvHlztWvXzvW4Z8+eql69uj788EP16dOnHCOrXDIyMhQcHFzeYVQ59erVU8eOHSVJnTt3VqNGjdSlSxf9/e9/1+9+97tyjg4AKj+OPAFAKQQFBSkwMFABAQFu5b/99puGDRumOnXqKDAwUFdddZWef/55ZWdnS5KysrJ0zTXXqGHDhjp9+rTreYcPH1Z0dLSSkpJ0/vx5SdLQoUMVGhqqHTt2qFu3bgoJCVGtWrX06KOPKiMjo8QY9+3bp3vuuUe1a9eWw+FQkyZN9NprrykvL0/ShVO+atWqJUkaN26c69Svkk7/27Fjh3r06KHg4GDVqlVLw4cP15IlS2Sz2dyOYCUlJal58+ZavXq1OnXqpODgYP3xj3/0KDZJWrlyZYE28+O22Wx65513XGXebCtjjGbMmKHWrVvL6XSqevXqGjBggP73v/8VqDd58mTFx8crKChIbdq00Zdfflnidr/UrFmz1LhxYzkcDjVt2lTz5893Wxe73a6JEycWeN7q1atls9m0cOFCr/vMT/SPHDniVr59+3b17dtX1atXV1BQkFq3bq133323wPM9GZ/8cZgyZYomTZqk+vXry+l0KikpST///LNycnI0evRoxcbGKiIiQv369dPRo0e9XhcAqBAMUEXNmTPHSDIbN24sdPktt9xi4uPjr2xQxpjU1FQjycyZM6fEumPHjjWX7qbx8fFmyJAhrscHDhwwY8eONf/5z398Gyjc5L+eNmzYYHJycsy5c+fM/v37zWOPPWb8/PzMsmXLXHUzMzNNy5YtTUhIiJk6dapZvny5efHFF43dbje9e/d21fv5559NWFiY6d+/vzHGmPPnz5sbb7zR1K5d2xw8eNBVb8iQISYwMNDUq1fPvPLKK2b58uUmOTnZ2O12c+utt7rFeenr4+jRo6ZOnTqmVq1a5q233jLLli0zjz76qJFkHnnkEWOMMVlZWWbZsmVGkrn//vvN+vXrzfr1682ePXuK3B4HDx40NWrUMPXq1TPvvPOOWbp0qRk8eLCpX7++kWRSUlJcdbt06WIiIyNNXFyceeONN0xKSopZtWqVR7EZY0xKSkqBNo0pfF/yZls9+OCDJiAgwDz55JNm2bJlZt68eSYxMdFERUWZw4cPu+rl74f333+/+fLLL83bb79t6tSpY6Kjo02XLl2K3Eb5JJm4uDjTtGlT8+GHH5pFixaZnj17Gklm4cKFrnr9+vUz9erVM7m5uW7Pv/POO01sbKzJyckpso/8bTFlyhS38u3btxtJZsSIEa6yXbt2mbCwMJOQkGDee+89s2TJEnP33XcbSWbSpEmuep6OT37f8fHxpk+fPmbx4sXmgw8+MFFRUaZx48Zm8ODB5o9//KP58ssvzVtvvWVCQ0NNnz59StxuVYkkj/4ufY1byZIlS8zYsWPLOwygRCRPqLIqavKUlZVl1q9fb44ePVpi3cKSp++//97tQ+3GjRs9TsZw+fJfT5f+ORwOM2PGDLe6b731lpFkPvroI7fySZMmGUlm+fLlrrIFCxYYSWb69Onmz3/+s/Hz83NbbsyFhECSef31193KX3nlFSPJrF271lV2afI0evRoI8l89913bs995JFHjM1mMz/99JMxxphjx44ZSR5/eHn66aeNzWYzO3bscCu/+eabC02eJJlvvvnGra6nsXmbPHmyrdavX28kmddee82t3v79+43T6TTPPPOMMcaYkydPmqCgINOvXz+3ev/617+MJI+TJ6fT6ZaQ5ebmmsTERNOwYUNXWf56fvrpp66yAwcOGLvdbsaNG1dsH/nbYtKkSSYnJ8dkZWWZLVu2mOuuu87ExMSY1NRUV9277rrLOBwOs2/fPrc2evXqZYKDg82pU6eMMZ6PT37frVq1MufPn3fVmz59upFkbrvtNrfnjxo1ykgyp0+fLnadqpL8LyTy/3r37m2cTmeBcittk0sNHz68wHwHVESctgdcYQ6HQx07dnSdJuWta665RgkJCT6OCp567733tHHjRm3cuFFffvmlhgwZouHDh+vNN9901fn2228VEhKiAQMGuD03/zS4b775xlX2+9//Xo888oiefvppjR8/XmPGjFH37t0L7fsPf/iD2+NBgwZJklJSUoqM99tvv1XTpk117bXXFojFGKNvv/225JUuxKpVq9S8eXM1bdrUrfzuu+8utH716tV14403XpHYpJK31eLFi2Wz2XTPPfcoNzfX9RcdHa1WrVq5ThFcv369srKyCrTXqVMnxcfHexxPt27dFBUV5Xrs7++vgQMHas+ePfr1118lXTi9sVWrVvrrX//qqvfWW2/JZrPpoYce8qifZ599VgEBAa5T8bZv364vvvhC9evXd9X59ttv1a1bN8XFxbk9d+jQocrIyND69etd9bwZn969e8vP7/8+VjRp0kSSdMstt7jVyy/ft2+fR+tUFXTs2NHtr1atWvLz8ytQHh4eXt6h+ownpxRfCRUlDlQdJE+ACr92Ip/NZlNycrLrcXJysmw2m3744QfdeeedioiIUGRkpJ544gnl5ubqp59+Us+ePRUWFqb69etr8uTJHvW1ZMkStW7dWg6HQw0aNNDUqVMLjfXiW1GvXLlS7du3lyTdd999rmtVkpOT9f7778tms7k+CF3spZdeUkBAgA4ePOj5RoKkCx/82rVrp3bt2qlnz56aNWuWevTooWeeeUanTp2SJJ04cULR0dGy2Wxuz61du7bsdrtOnDjhVv7HP/5ROTk5stvteuyxxwrt1263q0aNGm5l0dHRrv6KcuLECcXExBQoj42NLfG5xTlx4oRbMpCvsDJJhcZQVrF5sq2OHDkiY4yioqIUEBDg9rdhwwYdP37crX7+8wtr0xPFPf/i9Xzsscf0zTff6KefflJOTo7+9re/acCAAR73NXLkSG3cuFFr167V1KlTlZOTo759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/e9//9MLL7ygb7/9VkePHnU7Iv/jjz+qZcuWxW6by3HHHXe4PfZ2XYDikDyhysu/RuVSERERpUqeCjuPPzg42C0Byi9PS0srsp2TJ08qLy+v1NdUFCYqKkoDBw7UrFmzNHr0aO3YsUNr1qzRrFmzStWuld13332u/0dERKhBgwaaNm2a6xQV6cJpZikpKXr++ec1ZcoUHTt2THXq1NFTTz3lOn1q27ZteuyxxzRkyBC331OaOnWq1q9fr4EDB+o///mPqlWrJkkKCAjQ4sWL9dhjj2n8+PFyOp168MEHNWXKlGLjrVWrltatW6fnnntOzz33nNLS0nTVVVdp8uTJeuKJJ9zq/v3vf9fTTz+t2267TdnZ2RoyZEih1xlIF657WbVqlUaNGqU//elPCg4OVr9+/fTSSy9pyJAhrrh9Fdv777+vESNG6Nlnn9X58+fVp08fffjhh4Xu255uq1mzZqljx46aNWuWZsyYoby8PMXGxhZIXF966SVXwvP+++8rMTFRb731VpHXJRbmtttuU7NmzfTCCy9o3759SkhI0Ny5cwucJiVJderU0fXXX68ffvjBdaOL0rj22mt155136t1339Vzzz2nq6++WuvWrdOYMWM0fPhwZWZmqkmTJpozZ47ba9Gb8UHpHDlyRKdOnXJdD3apS09RLe31Zd5eF1iYq666yu1xYafYnT17VjfccIOCgoI0fvx4NW7cWMHBwdq/f7/69+9f4HRCX7k0Fm/XBSgOyROgoq+puNwL1r1RvXp12Wy2Ul9TUZSRI0fq/fff1+eff65ly5apWrVqBb5xRMmGDh1a4o/GXiwyMlIzZ87UzJkzC13eokWLQu8C5XA4ClzgffFziruznnThhiSXqlevnubOnVtizN26ddP3339fYr18zZo104oVK9zKHnroIYWGhioxMdFVVty3up7GFh0dXeiPxJoirl30ZFtJF5LhixPiwthsNo0ePVqjR492K7/06HNRLo7x4qMHRTl69Kg2bNigESNGyOl0etRH/fr1i72O86OPPnJ73Lx5cy1atKjEdj0Zn6L6TkpKKrTc233JCmrWrKkaNWpo2bJlhS4PCwvzaX/51wVenEAVdV3gmjVr5HA4CrRxaVlh1zV+++23OnjwoFauXKkuXbq4yvNvruOJy5mfL43F23UBikPyBOjCEZqgoCD98MMPbuWff/55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a9fOLF261IwYMcL1YaGoiebYsWOuDyf5HyY2btxoJJnmzZubJUuWmNGjRxubzWa6dOniiqVVq1bGz8/PjBs3znz++ecmISHB2Gw2Vyz5/YSGhrrtxxEREaZGjRpm3rx55o033jA2m8307NnTF5seFRxzGnMac1rlw5xW+eY0yydPl37L5ufnZz744IMin9O7d28THBzsetylSxcTFBRUoJ4kc/3117seHzlyxO2Flv+CvfTPbre7XkiDBw82NpvNHDlyxNVOcnKykWS2bdtmjDHGz8/PdO/e3a3vkJAQ07x5c7d+hgwZ4lo+YsQII8lMnTrVVXbzzTebwMDAErdZZVbSeA8dOtQEBga6vTGdOXPGSDITJkwwxlzY3hfvtJmZmcbf37/ARFPY2Pbt29dVp6Rx82TsExISjL+/v+tN0xhjAgMDTXh4uOtxdna2a0KrKjydaPK/kXvjjTdcy0NDQ0379u1djwubaIrbbzt06GAcDodbn507dy50orn0Lzg42PUNf6dOnQq81gYOHGgkmZycHFe/w4YNcy1PT083fn5+pnfv3m79TJ482VXn5ptvNpJMSkqKq6xJkyamRo0axW1SVBHMacxpzGmVD3Na5ZvTLH/NU2RkpL7++mt9/fXX+sc//qEGDRpo8ODB+te//iVJevLJJxUeHi5/f3/ZbDYtXbpUmZmZHrXdvn171/9r164tSdq3b59bnRdeeEHLly/X2LFjFRAQoAkTJighIUGStGPHDkVERLieK0n33XefJCklJUW//vqr8vLydMstt7i12bhxY/36669uZV27dnX9v379+pKk3r17u8piY2OVk5Pj0XpVZsWN96ZNm3Tu3DnXWNtsNoWFhUmSfvjhB+3bt095eXlu2y0oKMhtfC7tZ+HChWrZsqVq1Kih+fPnS5JH41bS2F/cj91udz12Op2qV6+e63FgYKD8/f114MCBy95mlVWTJk1Uq1YtzZgxQ5K0evVqnT17Vk899VSxzytuv923b5/b9pWkLl26FNrOvHnztGzZMj322GPy9/fXBx98oODgYElSamqq6tWrJz+//3sL7t+/vyRp48aNWr16tSRp0KBBruXBwcGKiorS7t273fq59dZbXf+PjY2VJLdrEWrVqqWMjIxi1xlVB3PaBcxpzGlVDXPaBRVhTrOXXKVqCwwMVLdu3VyP//CHP8jhcOjZZ5/V0KFDNW3aNN10000aPHiwYmJi9Oqrr+rbb7/1qG2Hw1GgLC8vz+1x8+bN1b17d3Xv3l3Vq1fX448/rt69e6tZs2YyxhTZts1mc/3/4herJBlj3JZLF94QL62f/6LPLyuuv6qiuPHOy8tTSEiIPv/88wLPa9So0WX3M2DAAFWvXl3du3fXmjVrXHWKGzdPx97f37/A8osnnnyXvu6sYsCAAXrrrbeUkZGhl19+WQ6HQ7///e+LfU5x+21h41LUWHXq1Enx8fG6+eablZGRoYEDB+r48eOui38v3Ufz2/Hz83P1V9hr5FKX7seXstlslti3cQFz2v+VWeF1z5xmLcxpFWNOs/yRp0vlD1RWVpY+//xz2e12rVixQvfee6+6d+9e4NuvwMBAnw3iyJEjFR4erj/84Q+SLkxCp0+f1tGjR1115syZI+lCFl63bl35+fnpiy++cGtn9+7dqlu3rk9iquouHu+2bdsqIyNDV199tbp16+b2V69ePde3Kl9++aXr+VlZWW7jU5SxY8dq7dq1+v777z0at5LGHp5JTk6WMUYTJ07UmjVrSr3t4uPjtX//freyiz88FGXmzJkyxujee++VJDVo0EC//PKL2weA/DuStW3b1hXnBx984FqekZGho0ePqnHjxqVaB1gLc5q1MKdVbcxpFYPlk6fc3Fz98MMP+uGHH7R48WJdc801kqR77rlHLVq0UG5urh577DF9++23uuOOOwocXmzUqJGys7O1YMEC/fTTT0pLSytVPCNGjNDWrVu1adMmTZs2TTabTW3atNGnn36qadOmafz48UpISFDz5s0lSbfddptWrFihkSNH6ssvv1THjh2Vnp6u1157rVRxVFXFjfe0adNkt9vVokULvfnmm1q9erVef/11tW7dWhs3bpQk9ejRQ8uWLdOzzz6rpUuX6pprrtH58+dL7HfUqFEKDg7W0KFDJZU8bp6MvZVlZWVpwYIFbn/r168vUK927dqKj4/X1KlTlZ2drbFjx5aq38mTJysrK0sdOnTQV199pccff9zV76Xful3Mbrerb9++WrRokY4fP67XX39d586dU+vWrbV06VKNGTNGH330kbp06SK73a7atWurdevWeuuttzR+/HgtWrRILVu2lDFGb7zxRqnWAVUbc5q1MKdVDcxplcyVubSqYirsIsiQkBDz1FNPueq0b9/e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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "dfp.boxplot(by=['Room'],figsize=(10,3))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The numerical values for the plots displayed above can be calculated through the following methods:" ] }, { "cell_type": "code", "execution_count": 361, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "Room\n", "BathRoom 25.354494\n", "BedRoom 24.305088\n", "LivingRoom 19.263095\n", "Name: Temperature, dtype: float64" ] }, "execution_count": 361, "metadata": {}, "output_type": "execute_result" } ], "source": [ "dfp.groupby('Room')['Temperature'].mean()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The previous call returns a Pandas Series as shown by" ] }, { "cell_type": "code", "execution_count": 362, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "pandas.core.series.Series" ] }, "execution_count": 362, "metadata": {}, "output_type": "execute_result" } ], "source": [ "dfp.groupby('Room')['Temperature'].mean().__class__" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "whereas the alternative option returns a Pandas DataFrame:" ] }, { "cell_type": "code", "execution_count": 363, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
Temperature
Room
BathRoom25.354494
BedRoom24.305088
LivingRoom19.263095
\n", "
" ], "text/plain": [ " Temperature\n", "Room \n", "BathRoom 25.354494\n", "BedRoom 24.305088\n", "LivingRoom 19.263095" ] }, "execution_count": 363, "metadata": {}, "output_type": "execute_result" } ], "source": [ "dfp.groupby('Room').agg({'Temperature':'mean'})" ] }, { "cell_type": "code", "execution_count": 364, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "pandas.core.frame.DataFrame" ] }, "execution_count": 364, "metadata": {}, "output_type": "execute_result" } ], "source": [ "dfp.groupby('Room').agg({'Temperature':'mean'}).__class__" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Another example plot displays Temperature data with two levels of aggregation:" ] }, { "cell_type": "code", "execution_count": 365, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 365, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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afny5bJYLDpz5owkacqUKSpbtqzbl9uqVSvNmjXL7f26ity8/Eoqp3LTu3dvvfXWW5dlWYVxOfPt0vc2/s/AgQN18803Ox4nJCRo6NChjsexsbEaP368W5c5d+5cNWvWTFlZWW7t1x3Iy5JVEvmUm61bt6p69epKSUkp8WXlxdVccvUz8XJ+flyJCjoGLIljmPT0dNWoUUMbN250a78XIy+90+U8Jr5cdccVXfCPGTNGN954o2JjYyX93wd+9l9AQIBq166tV155Ra6ObWixWPTdd9+5HNPAgQMdy/f391eNGjX04IMP6vTp0y735SnGGP3nP//R1VdfrdDQUJUtW1YtW7bU+PHjlZqaWqg+oqOjlZiYqEaNGuX6fJ8+fbR79253hi1JeuGFF/TMM894/OCX3HS/7AOGS/+ef/75yx7Liy++qNGjRyspKemyLzs3JZlvBbl0WREREWrTpo3+97//uXU5JW3v3r269957Vb16ddlsNtWsWVN33XWXNmzYUOg+JkyYoClTpuT5/Pr16zVo0CA3RPt/brjhBlksFk2fPt2t/boDeVk8CQkJue7zMjIyLmscjRs3VuvWrfX2229f1uVeLK9cyusLnieeeEJLliwpdP8ldUxy8WsYEBCgWrVqafjw4UpPT3f7skrK33//rbFjx6pp06YKDg5WxYoV1b59e02ePFl2u71QfbRr106JiYmKiIjI9XlXX6/CsNlseuKJJ/T000+7td+LkZeeMWXKlFz3jR9//PFlj+Vy1R1XbMGflpamTz75RP/6179yPLd48WIlJiZqz549GjVqlEaPHq1PP/30ssV23XXXKTExUQcPHtTHH3+s//3vf3rooYcu2/KLq3///ho6dKh69eqlZcuWafPmzXrhhRc0e/ZsLVy4sFB9lClTRlFRUfL398/1+aCgIEVGRrozbEnS9ddfr7Nnz+qHH35we9+FRW6WrF27dikxMdHx98wzz1y2ZWcf3DRp0kSxsbGaNm3aZVt2Xrwl37KX9dNPP6l169a67bbbtG3bthJZlrtt2LBBLVq00O7du/Xhhx/qt99+07fffqu4uDgNGzas0P1ERETkezamUqVKCg4OdkPEzu699169++67bu+3OMhL97j//vud9neJiYl5fq6WhOx93r333qtJkyYpMzPzsi07W365lJfQ0FBVqFCh0O1L6phE+r/XcO/evRo7dqzef/99jRw5skSW5W5///23unfvrtdee02DBg3SmjVr9PPPP2vw4MF69913tX379kL1ExAQoKioKFksllyfd/X1Kqx+/fpp1apV2rFjh9v7Ji89Kzw8PMe+sV+/fpdt+X///beky1d3XLEF//fffy9/f3+1bds2x3MVKlRQVFSUYmJi1K9fP7Vr106bNm1yPL9+/Xp17dpVFStWVEREhDp27Oj0fPY3dbfccossFovjcbbPP/9csbGxioiI0J133qlz5845PW+z2RQVFaXq1aurW7du6tOnj1OhnJWVpZdeeslxJik+Pl4LFixw6mPr1q269tprFRQUpAoVKmjQoEFKTk52PJ996eirr76qypUrq2zZsho1apQyMjL05JNPqnz58qpevbrLB1Fffvmlpk2bphkzZujZZ59Vq1atFBsbq169emnp0qXq1KmTo+3kyZNVv359BQYGKi4uThMnTnQ8V9C3nHldzpXftj137pz69eunkJAQValSRW+//XaOS2bLlCmjnj17asaMGS6ttzuRmyWTm9kiIyMVFRXl+AsNDc2z7aRJk1SrVi0FBASoXr16+vzzz52eP3z4sHr16qXQ0FCFh4frjjvu0B9//OF4PjsvP/30U1111VWy2WyOM5E33XSTR/MsW3HyTcr/fSxJP//8s5o1a6bAwEC1bNlSv/zyS65xZC8rLi5Oo0ePlt1u17JlyxzPF5Q3BeVe9j7lyy+/1D/+8Q8FBQWpVatW2r17t9avX6+WLVsqNDRU1113nf78889Cbz9jjAYOHKg6depo1apVuv7661WrVi3Fx8drxIgRmj17tqPt0aNH1adPH5UrV04VKlRQr169nC7lvPSS/ktdegl29hmJW265RcHBwapTp47mzJnjNM+cOXNUp04dBQUFqVOnTpo6darTpbHShVz8+eeftX///kKvd0kjL4uXl9mCg4Od9ndRUVF5ti1ofyYVvE+0WCz64IMP1KtXL4WEhOiVV16RJHXv3l0nT57UihUrXF6H4sovl/Jy8SW9P/zwgwIDA53eM5L0yCOPqGPHjpJK7phE+r/XsEaNGrrtttvUtWtXp8/d9PR0PfLII4qMjFRgYKCuueYarV+/3qmPFStWqHXr1rLZbKpSpYqeeeYZpys9EhIS9PDDD2vo0KEqV66cKleurP/85z9KSUnRvffeq7CwMNWqVUvff/99obehJI0fP14rV67UkiVLNHjwYMXHx+uqq65S37599dNPP6lOnTqSLuxHx44dq6uuukpBQUFq2rSpvv76a0c/l17Sf6lLL8HO3pe++eabqlKliipUqKDBgwc7XVGQmJio66+/XkFBQapZs6amT5+eYx9boUIFtWvXrkQ+q8lLz+WldGFfdem+MSgoKNe27jy2HTNmjKpWraq6detKunx1xxVb8K9cuVItW7YssN2GDRu0adMmXX311Y5p586d0z333KNVq1Zp3bp1qlOnjnr27Ol4w2Qn9OTJk5WYmOiU4Pv27dN3332nuXPnau7cuVqxYoVee+21PJe/f/9+LViwQFar1TFtwoQJGjdunN588039+uuv6t69u2666Sbt2bNHkpSamqrrrrtO5cqV0/r16/XVV19p8eLFGjJkiFPfS5cu1bFjx7Ry5Uq99dZbGjlypG644QaVK1dOP/30kx544AE98MADOnLkSCG26AXTpk1TvXr11KtXrxzPZV8WKUkfffSRnnvuOY0ePVo7duzQq6++qhdeeEFTp04t9LIuVdC2ffzxx/Xjjz9qzpw5WrRokVatWpXjIFGSWrdurVWrVhU5juIiN0smN1317bff6tFHH9WwYcO0bds2/fvf/9a9997rONg3xujmm2/WqVOntGLFCi1atEj79u1Tnz59nPrZu3evvvzyS33zzTdOX2C1bt1aP//8s8cvgStOvhX0Pk5JSdENN9ygevXqaePGjRo5cqSeeOKJfJdjt9v10UcfSZIjtwqTNwXlXrYRI0bo+eef16ZNm+Tv76+77rpLTz31lCZMmKBVq1Zp3759evHFFwu38SRt3rxZ27dv17Bhw+Tnl/MjNftgKzU1VZ06dVJoaKhWrlyp1atXOwq57G/6i2LUqFG644479Ouvv6pnz57q16+fTp06JelCMdm7d2/dfPPN2rx5s/7973/rueeey9FHTEyMIiMjPbrfuxR5Wby8dFVh9mcF7RMvXpdevXpp69at+uc//ynpwhnapk2beiTHCptLeenSpYvKli2rb775xjEtMzNTX375Zb5nBN11THKxLVu26Mcff3T63H3qqaf0zTffaOrUqdq0aZNq166t7t27O/YDR48eVc+ePdWqVStt2bJFkyZN0ieffOL4Mibb1KlTVbFiRf388896+OGH9eCDD+r22293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6quvSpKefPJJvf7665o5c6Z27dqlZ555Rps3b9ajjz4q6cJlNoGBgbrnnnu0bds2LVu2TA8//LD69+/vuKykpNxxxx3q06eP7rrrLo0ZM0YbNmzQoUOHNHfuXHXp0sUxuM/IkSM1ZswYTZgwQbt379bWrVs1efJkvfXWWyUSV1hYmO655x49+eSTWrZsmbZv365//vOf8vPzy/Gt3KpVq9StW7cSiaMwyE3v8OSTT2rKlCn64IMPtGfPHr311luaNWuWY3CvLl26qEmTJurXr582bdqkn3/+WQMGDFDHjh0LNRCPp/MsW3HyraD3cd++feXn56f77rtPv/32m+bPn68333yzUHENGzZMH374oY4ePVqovCko90qKxWLR5MmTtXv3bnXo0EHz58/X/v379euvv2r06NGOAUz79eunihUrqlevXlq1apUOHDigFStW6NFHH9Xvv/9eIrH9+9//1s6dO/X0009r9+7d+vLLLx2DVl2831u3bp3jaiBvQV5eXoXZnxW0T8zPwYMHdfToUXXp0qWkVyWH/HJp165d2rx5s9NfXlfEZW+b0aNHq3fv3sW6HNuVY5JL9e3bVxaLRRMnTlRISIgefPBBPfnkk1qwYIF+++033X///UpNTdV9990nSXrooYd05MgRPfzww9q5c6dmz56tESNG6PHHH8/zMmZ3GTp0qNq3b6/OnTvr/fff15YtW7R//359+eWXuvrqq7Vnzx6FhYXpiSee0GOPPaapU6dq3759+uWXX/T+++8XayDn/MTFxalLly4aNGiQfv75Z/3yyy8aNGiQgoKCLtsxIXnpubx0VUkf216W48GSGhygNGjTpo354IMPHI+zB8vI/itTpoypXr26uf/++50G3dq0aZNp2bKlsdlspk6dOuarr77KMZjSnDlzTO3atY2/v7+JiYkxxuQcBMIYY95++23H88bkHLQp27Rp00xAQIA5fPiwyczMNKNGjTLVqlUzVqvVNG3a1DFIU7Zff/3VdOrUyQQGBpry5cub+++/35w7dy7f5Vw6QJQxOQeJ6tixo7nnnntyxHexzMxMM2nSJNOqVSsTHBxswsPDTYsWLcyECRNMamqq0zrFx8ebgIAAU65cOdOhQwcza9YsY0zRBu0raNsmJSWZvn37muDgYBMVFWXeeust07p1a/PMM8842vz+++/GarWaI0eO5LuOJY3cdF6OO3Lz0hy61KU5ZYwxEydONFdddZWxWq2mbt265rPPPnN6/tChQ+amm24yISEhJiwszNx+++2OAVqMyX27GmNMWlqaCQ8Pd2mQmZJU1HwzJv/3sTHGrF271jRt2tQEBASY+Ph488033+Q6ONqlgxRlZWWZevXqmQcffNAYU3DeFJR7uS0nt5y4NA+y2xw4cCDfbbhr1y4zYMAAU7VqVRMQEGBiYmLMXXfd5TSYX2JiohkwYICpWLGisdls5qqrrjL333+/OXv2rDGmaIP2XToAZ0REhJk8ebLj8ezZs03t2rWNzWYzCQkJjsHp0tLSHG0GDRpk/v3vf+e7fp5AXp52TCtKXua237zYpflU0P7MmIL3ibnlpDHGvPrqq6Z79+55xlLSCsqli/8OHDiQ5767VatWRpJZunSp0/SSOibJ6zUcPXq0qVSpkjl37pxJS0szDz/8sGO/0r59e8dAi9mWL19uWrVqZQICAkxUVJR5+umnjd1uz3c5l+aHMTlf35iYGDNixIgc8V3s/PnzZsyYMaZx48aO90n79u3NlClTHDFkZWWZCRMmmHr16hmr1WoqVapkunfvblasWGGMKdqgfZceRzz66KOmY8eOjsfHjh0zPXr0MDabzcTExJjp06ebyMhIpzxZs2aNKVu2rNOxqzuRl57Jy9yO9y526XYqqWNbYy5f3XFFF/zz5s0z9evX99ho7KVRTEyM08FkaZacnGwiIiKcRkd+4okncoxC7AnkputKU26+9957pmvXrp4Ow4F8y9vkyZNN7dq1zd9//+3pUNzilVdeMdWrV3c8PnHihClfvrzZv3+/B6PKHXmZt9KUl+fPnzfR0dFm9erVHouhNORSbsck3iw1NdUEBgbmKDJLqyNHjhhJZvHixY5pvXv3zjE6uzuRl+5X2vLyctUdV+ygfZLUs2dP7dmzR0ePHi2x3wn5kp07dyosLEwDBgzwdChF8ssvv2jnzp1q3bq1zp49q5deekmSHJfcSlJkZGShLk8saeSma0pbblqtVr377rueDsOBfMvbggUL9Oqrr+YYOKi0mDhxolq1aqUKFSroxx9/1BtvvOF0b+ADBw5o4sSJJTZ+SnGQl3krTXl56NAhPffcczlGub6cvDGXCnNM4s1WrFiha6+9Vp06dfJ0KEWydOlSJScnq3HjxkpMTNRTTz2l2NhYdejQQZKUnp6upk2b6rHHHiuxGMhL9ytteXm56g6LMS4MVwuUYr/88ov+9a9/adeuXQoICFCLFi301ltvOd3eAwB8yWOPPaaZM2fq1KlTqlGjhvr376/hw4fL3/+K/r4f8DiOSTzrhx9+0LBhw7R//36FhYWpXbt2jjscXcnIS99EwQ8AAAAAgA/yrmEQAQAAAACAW1DwAwAAAADggyj4AQAAAADwQRT8AAAAAAD4IAp+AABKWEJCgiwWiywWizZv3uzpcEqF5cuXy2Kx6MyZM/m2i42N1fjx49267IEDBzper++++86tfQMAcDlR8AMAcBncf//9SkxMVKNGjSRJBw8edBSVFotFERERatOmjf73v/95ONLCu/iLDJvNprp16+rVV19VZmZmsftu166dEhMTFRERIUmaMmWKypYtm6Pd+vXrNWjQoGIv72ITJkxQYmKiW/sEAMATKPgBALgMgoODFRUVJX9/f6fpixcvVmJion766Se1bt1at912m7Zt2+ahKF2X/UXGrl279Mgjj+j555/Xm2++Wex+AwICFBUVJYvFkm+7SpUqKTg4uNjLu1hERISioqLc2icAAJ5AwQ8AgAdVqFBBUVFRiouL0+jRo2W327Vs2TLH81u3btW1116roKAgVahQQYMGDVJycrLj+aysLL300kuqXr26bDab4uPjtWDBAsfz2VcSfPnll/rHP/6hoKAgtWrVSrt379b69evVsmVLhYaG6rrrrtOff/7pcvzZX2TExsZqyJAh6ty5s+My+NOnT2vAgAEqV66cgoOD1aNHD+3Zs8cx76FDh3TjjTeqXLlyCgkJUcOGDTV//nxJzpf0L1++XPfee6/Onj3ruKJg5MiRknJe0n/48GH16tVLoaGhCg8P1x133KE//vjD8fzIkSMVHx+vzz//XLGxsYqIiNCdd96pc+fOubzuAAB4Owp+AAC8gN1u10cffSRJslqtkqTU1FRdd911KleunNavX6+vvvpKixcv1pAhQxzzTZgwQePGjdObb76pX3/9Vd27d9dNN93kVFhL0ogRI/T8889r06ZN8vf311133aWnnnpKEyZM0KpVq7Rv3z69+OKLxV6PoKAg2e12SRd+C79hwwbNmTNHa9eulTFGPXv2dDw/ePBgpaena+XKldq6datef/11hYaG5uizXbt2Gj9+vMLDw5WYmKjExEQ98cQTOdoZY3TzzTfr1KlTWrFihRYtWqR9+/apT58+Tu327dun7777TnPnztXcuXO1YsUKvfbaa8VedwAAvI1/wU0AAEBJadeunfz8/JSWlqasrCzFxsbqjjvukCRNmzZNaWlp+uyzzxQSEiJJeu+993TjjTfq9ddfV+XKlfXmm2/q6aef1p133ilJev3117Vs2TKNHz9e77//vmM5TzzxhLp37y5JevTRR3XXXXdpyZIlat++vSTpvvvu05QpU4q8HllZWVq4cKF++OEHDR06VHv27NGcOXP0448/ql27do71iY6O1nfffafbb79dhw8f1m233abGjRtLkq666qpc+w4ICFBERIQsFku+l9ovXrxYv/76qw4cOKDo6GhJ0ueff66GDRtq/fr1atWqlSPWKVOmKCwsTJLUv39/LVmyRKNHjy7y+gMA4I04ww8AgAfNnDlTv/zyi+bMmaPatWvr448/Vvny5SVJO3bsUNOmTR3FviS1b99eWVlZ2rVrl5KSknTs2DFH0X5xmx07djhNa9KkieP/lStXliRHoZ097cSJEy7HP3HiRIWGhiowMFA33XST7r77bo0YMUI7duyQv7+/rr76akfbChUqqF69eo7YHnnkEb3yyitq3769RowYoV9//dXl5V9sx44dio6OdhT7ktSgQQOVLVvWaXvExsY6in1JqlKlSpHWHQAAb0fBDwCAB0VHR6tOnTq6/vrr9fHHH6tPnz6O4tMYk+egdRdPv7RNbvNl/0zg4vaXTsvKynI5/n79+mnz5s3at2+f0tLS9Mknnyg4OFjGmFzbXxzbv/71L+3fv1/9+/fX1q1b1bJlS7377rsux5Bb3/lNv3i9paKvOwAA3o6CHwAAL9GxY0c1atTIcWl5gwYNtHnzZqWkpDja/Pjjj/Lz81PdunUVHh6uqlWravXq1U79rFmzRvXr178sMUdERKh27dqKjo5WmTJlHNMbNGigjIwM/fTTT45pJ0+e1O7du51ii46O1gMPPKBZs2Zp2LBhjnEMLhUQEFDg7f4aNGigw4cP68iRI45pv/32m86ePXvZtgcAAN6Egh8AAC8ybNgwffjhhzp69Kj69eunwMBA3XPPPdq2bZuWLVumhx9+WP3793dclv/kk0/q9ddf18yZM7Vr1y4988wz2rx5sx599FGPrkedOnXUq1cv3X///Vq9erW2bNmiu+++W9WqVVOvXr0kSUOHDtUPP/ygAwcOaNOmTVq6dGmehXlsbKySk5O1ZMkS/fXXX0pNTc3RpkuXLmrSpIn69eunTZs26eeff9aAAQPUsWNHtWzZskTXFwAAb0TBDwCAF7nhhhsUGxur0aNHKzg4WD/88INOnTqlVq1aqXfv3urcubPee+89R/tHHnlEw4YN07Bhw9S4cWMtWLBAc+bMUZ06dYoVR/Zt8Q4ePFjkPiZPnqwWLVrohhtuUNu2bWWM0fz58x2X1GdmZmrw4MGqX7++rrvuOtWrV08TJ07Mta927drpgQceUJ8+fVSpUiWNHTs2RxuLxaLvvvtO5cqVU4cOHdSlSxddddVVmjlzZpHXAQCA0sxi8vqRHQAAcIuEhATFx8c73S/e202ZMkWjR4/Wb7/9luM371cKi8Wib7/9VjfffLOnQwEAoEg4ww8AwGWQPZr91q1bPR1KoSxYsECvvvrqFVnsP/DAAwoNDfV0GAAAFBtn+AEAKGFHjx5VWlqaJKlGjRoKCAjwcETIz4kTJ5SUlCTpwi37Lr4tIgAApQkFPwAAAAAAPohL+gEAAAAA8EEU/AAAAAAA+CAKfgAAAAAAfBAFPwAAAAAAPoiCHwAAAAAAH0TBDwAAAACAD6LgBwAAAADAB1HwAwAAAADggyj4AQAAAADwQf8PBjyR3AA+EDcAAAAASUVORK5CYII=", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "dfp.boxplot(column=['Temperature'], by=['Room','Position'],figsize=(12,4))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Many other options are available for the plot method by selecting the proper kind among a set of possible values: bar, hist, kde, box, etc." ] }, { "cell_type": "code", "execution_count": 366, "metadata": { "scrolled": true }, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 366, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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wCniAwAAOEV8AAAAp4gPAADgFPEBAACcIj4AAIBTxAcAAHCK+AAAAE4RHwAAwCniAwAAOEV8AAAAp4gPAADgVNTjo7CwUB6PJ2Lz+/3RvhsAABCnEhrjRr///e/r5ZdfDu+3bNmyMe4GAADEoUaJj4SEBK52AACAejXKYz52796ttLQ0BQIBjRkzRnv27GmMuwEAAHEo6lc++vXrpwULFqhHjx766KOP9NBDD2nAgAHauXOnOnbsWOf8UCikUCgU3q+uro72SAAAoAmJ+pWP3NxcXXfdderZs6euuuoqlZaWSpLmz59f7/nFxcVKSUkJb+np6dEeCQAANCGN/lTbb33rW+rZs6d2795d73pBQYEOHToU3iorKxt7JAAAEEON8oDTU4VCIe3atUtXXnllveter1der7exxwAAAE1E1K983HPPPVq3bp0qKir02muv6frrr1d1dbXGjRsX7bsCAABxKOpXPj744APdeOONOnDggDp37qzLL79c5eXlysjIiPZdAQCAOBT1+Fi8eHG0bxIAADQjvLcLAABwivgAAABOER8AAMAp4gMAADhFfAAAAKeIDwAA4BTxAQAAnCI+AACAU8QHAABwivgAAABOER8AAMAp4gMAADhFfAAAAKeIDwAA4BTxAQAAnCI+AACAU8QHAABwivgAAABOER8AAMAp4gMAADhFfAAAAKeIDwAA4BTxAQAAnCI+AACAU8QHAABwivgAAABOER8AAMAp4gMAADhFfAAAAKeIDwAA4BTxAQAAnCI+AACAU8QHAABwivgAAABOER8AAMAp4gMAADhFfAAAAKeIDwAA4BTxAQAAnCI+AACAU8QHAABwivgAAABOER8AAMCpRouPv/zlLwoEAmrTpo169+6tV155pbHuCgAAxJFGiY8lS5YoLy9P06dP19atW3XllVcqNzdX77//fmPcHQAAiCONEh+zZs3Srbfeqttuu00XXXSRZs+erfT0dJWUlDTG3QEAgDgS9fg4evSotmzZopycnIjjOTk52rhxY7TvDgAAxJmEaN/ggQMHdOzYMfl8vojjPp9PwWCwzvmhUEihUCi8f+jQIUlSdXX1N7q/46HPzmHaur7p/TZEtGeUoj9nPMwo8fcdLfEwo8Tfd7TEw4wSf9/REqsZT55jZl9/gxZlH374oUmyjRs3Rhx/6KGH7MILL6xz/owZM0wSGxsbGxsbWzPYKisrv7YVon7lo1OnTmrZsmWdqxxVVVV1roZIUkFBgfLz88P7x48f1yeffKKOHTvK4/FEZabq6mqlp6ersrJSycnJUbnNaIuHGaX4mJMZoyce5mTG6ImHOZkxeqI9p5mppqZGaWlpX3tu1OOjdevW6t27t8rKyjRy5Mjw8bKyMg0fPrzO+V6vV16vN+JY+/btoz2WJCk5OblJ/0OQ4mNGKT7mZMboiYc5mTF64mFOZoyeaM6ZkpLyjc6LenxIUn5+vm6++Wb16dNH/fv312OPPab3339fd9xxR2PcHQAAiCONEh+jR4/Wxx9/rAcffFD79+9XZmamXnrpJWVkZDTG3QEAgDjSKPEhSRMnTtTEiRMb6+YbxOv1asaMGXV+vdOUxMOMUnzMyYzREw9zMmP0xMOczBg9sZzTY/ZNnhMDAAAQHbyxHAAAcIr4AAAAThEfAADAKeIDiBEebgXgf1WjPdsllj744AOVlJRo48aNCgaD8ng88vl8GjBggO644w6lp6fHekRAXq9Xb7zxhi666KJYjwI0Wfv371dJSYk2bNig/fv3q2XLlgoEAhoxYoTGjx+vli1bxnpEnIVm92yXDRs2KDc3V+np6crJyZHP55OZqaqqSmVlZaqsrNSKFSt0xRVXxHrUM6qsrNSMGTP05JNPxnSOI0eOaMuWLerQoYMuvvjiiLXPP/9czz77rG655ZYYTXfCrl27VF5erv79++t73/ue3nrrLc2ZM0ehUEhjx47V0KFDYzrfqW8fcKo5c+Zo7Nix6tixoyRp1qxZLsf6WgcPHtT8+fO1e/dupaamaty4cTEP961bt6p9+/YKBAKSpKefflolJSV6//33lZGRocmTJ2vMmDExnVGSpkyZohtuuEFXXnllrEc5oz/96U/avHmzrrnmGt1www166qmnVFxcrOPHj2vUqFF68MEHlZAQu59RN2/erKuuukqBQECJiYl67bXX9LOf/UxHjx7VqlWrdNFFF2nVqlVKSkqK2Yw4S+f+VnJNS58+fSwvL++063l5edanTx+HE52dbdu2WYsWLWI6w9tvv20ZGRnm8XisRYsWNnjwYNu3b194PRgMxnzGFStWWOvWra1Dhw7Wpk0bW7FihXXu3Nmuuuoq++EPf2gJCQn297//PaYzejweu/TSSy0rKyti83g81rdvX8vKyrIhQ4bEdEYzs9TUVDtw4ICZme3Zs8f8fr/5/X7Lzs62rl27WkpKiu3atSumM1522WW2Zs0aMzN7/PHHLTEx0e666y4rKSmxvLw8a9eunT3xxBMxndHMwp8z3bt3t5kzZ9r+/ftjPVIdDz74oCUlJdl1111nfr/fZs6caR07drSHHnrIioqKrHPnzvbb3/42pjNeccUVVlhYGN5/6qmnrF+/fmZm9sknn9ill15qd911V6zGi3D48GF77LHHbPz48Xb11Vdbbm6ujR8/3h5//HE7fPhwrMf7WsFg0B544AFn99fs4qNNmzb21ltvnXZ9165d1qZNG4cT1e+FF1444/bHP/4x5t/YR4wYYddee63997//td27d9uwYcMsEAjYe++9Z2ZNIz769+9v06dPNzOzRYsW2be//W2bNm1aeH3atGmWnZ0dq/HMzKyoqMgCgUCdCEpISLCdO3fGaKq6PB6PffTRR2ZmNmbMGMvKyrLa2lozM/v888/t2muvteuvvz6WI1rbtm3D//4uu+wy++tf/xqx/swzz9jFF18ci9EieDwee/nll+3uu++2Tp06WatWrewnP/mJvfjii3bs2LFYj2dmZt/5znfsueeeM7MTP+y0bNnSnn766fD6888/bxdccEGsxjMzs8TERHv33XfD+8eOHbNWrVpZMBg0M7PVq1dbWlparMYL27lzp6WlpVn79u1t+PDh9otf/MImTJhgw4cPt/bt29t5553XpD7X6+P6B95mFx+BQMCefPLJ064/+eSTFggEHE5Uv5M/GXk8ntNusf7G3qVLF9u+fXvEsYkTJ9r5559v7777bpOIj+TkZNu9e7eZnfjClJCQYFu2bAmv79ixw3w+X6zGC3v99detR48e9qtf/cqOHj1qZk07PuqLpfLycuvatWssRgvr2LGjbd682cxO/Pvctm1bxPo777xjiYmJsRgtwqn/L48ePWpLliyxH/3oR9ayZUtLS0uzadOmhf/dxkpiYmI45MzMWrVqZf/+97/D+3v37rW2bdvGYrSwjIwM27BhQ3h/37595vF47LPPPjMzs4qKiibxw2RWVpaNGTPGQqFQnbVQKGQ33nijZWVlxWCyr7zxxhtn3JYsWUJ8nIs///nP1rp1a5s0aZItW7bMXn31VSsvL7dly5bZpEmTzOv1WklJSazHtLS0NFu6dOlp17du3Rrzb+xJSUn25ptv1jk+efJk69q1q61fvz7mM54aH2Zm7dq1i/hJae/evU3ii5OZWU1Njd1yyy3Wq1cv2759u7Vq1arJxUdVVZWZnfj3eeo3IrMTX+i9Xm8sRgsbO3as3XrrrWZm9tOf/tTuv//+iPWioiLr2bNnLEaLcGp8nOq9996zGTNmWEZGRsw/dwKBgK1YscLMzP7zn/9YixYt7Nlnnw2vl5aWWrdu3WI1npmZ3X333ZaZmWkrVqywNWvW2JAhQyK+ia9cudK++93vxnDCExITE8/4ubxjx46YR/GZfuA9eZz4OEeLFy+2fv36WUJCQvh/bkJCgvXr18+WLFkS6/HMzGzYsGH2m9/85rTr27ZtM4/H43Ciuvr27WsLFiyod23SpEnWvn37mH8B7dWrV/gLqNmJT/IvvvgivP/KK680iStdp1q0aJH5fD5r0aJFk4uPnj172mWXXWbt2rWz559/PmJ93bp1dt5558VouhM+/PBD69atmw0aNMjy8/MtMTHRBg4caBMmTLBBgwZZ69atrbS0NKYzmp0+Pk46fvy4rV692uFEdU2fPt06d+5st912mwUCASsoKLDzzz/fSkpK7NFHH7X09HT75S9/GdMZa2pq7IYbbgh/LR8wYIDt2bMnvL5q1aqIYIqVtLQ0W7Zs2WnXly5dGvNfD3Xq1MmeeOIJ27t3b71baWmp06/nzfKptqNHj9bo0aP1xRdf6MCBA5KkTp06qVWrVjGe7Cu//vWvVVtbe9r1Cy64QP/4xz8cTlTXyJEjtWjRIt1888111ubOnavjx4/r0UcfjcFkX7nzzjt17Nix8H5mZmbE+ooVK2L+bJf/b8yYMRo4cKC2bNnSpN7pecaMGRH7bdu2jdh/8cUXY/7sjbS0NG3dulUzZ87Uiy++KDPT66+/rsrKSl1xxRX65z//qT59+sR0RknKyMg441NAPR6PsrOzHU5U1wMPPKDExESVl5fr9ttv17333qtevXpp6tSp+uyzzzRs2DD97ne/i+mM7dq105IlS/T555/ryy+/VLt27SLWc3JyYjRZpAkTJmjcuHG6//77lZ2dLZ/PJ4/Ho2AwqLKyMhUVFSkvLy+mM/bu3Vv79u077decTz/91OlrDzW7p9oCAODaH/7wB82ZMyf82lLSiRcS9Pv9ysvL09SpU2M639KlS1VbW6uxY8fWu37w4EEtX75c48aNczIP8QEAQJRUVFQoGAxKkvx+f/g1aRCJl1cHACBKAoGA+vfvr/79+4fDo7KyUj//+c9jPNmZuZ6RKx8AADSiN954Qz/4wQ8iHp/W1LiesVk+4BQAAFeWL19+xvU9e/Y4muT0mtqMXPkAAOActGjRQh6P54zPFvF4PDG98tHUZuQxHwAAnIPU1FQ999xzOn78eL3bv/71r1iP2ORmJD4AADgHvXv3PuM376+74uBCU5uRx3wAAHAO4uFFI5vajDzmAwAAOMWvXQAAgFPEBwAAcIr4AAAAThEfAADAKeIDAAA4RXwAAACniA8AAOAU8QEAAJz6P+56pQUQ6aGdAAAAAElFTkSuQmCC", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "dfp['Temperature'].plot(kind='bar')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### A complete data exploration task\n", "The following cells demonstrate a possible use of Pandas to perform data exploration and visualization using its internals.\n", "\n", "For this purpose, we'll be using a dataset about diamonds characteristics to show the basic steps of data exploration:" ] }, { "cell_type": "code", "execution_count": 367, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
caratcutcolorclaritydepthtablepricexyz
539350.72IdealDSI160.857.027575.755.763.50
539360.72GoodDSI163.155.027575.695.753.61
539370.70Very GoodDSI162.860.027575.665.683.56
539380.86PremiumHSI261.058.027576.156.123.74
539390.75IdealDSI262.255.027575.835.873.64
\n", "
" ], "text/plain": [ " carat cut color clarity depth table price x y z\n", "53935 0.72 Ideal D SI1 60.8 57.0 2757 5.75 5.76 3.50\n", "53936 0.72 Good D SI1 63.1 55.0 2757 5.69 5.75 3.61\n", "53937 0.70 Very Good D SI1 62.8 60.0 2757 5.66 5.68 3.56\n", "53938 0.86 Premium H SI2 61.0 58.0 2757 6.15 6.12 3.74\n", "53939 0.75 Ideal D SI2 62.2 55.0 2757 5.83 5.87 3.64" ] }, "execution_count": 367, "metadata": {}, "output_type": "execute_result" } ], "source": [ "import pandas as pd\n", "import numpy as np\n", "\n", "filename = 'diamonds.csv'\n", "dmds = pd.read_csv(filename)\n", "data = dmds.copy()\n", "data.tail()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The info command displays the column names with their relevant data types and memory occupation for the loaded dataset." ] }, { "cell_type": "code", "execution_count": 368, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\n", "RangeIndex: 53940 entries, 0 to 53939\n", "Data columns (total 10 columns):\n", " # Column Non-Null Count Dtype \n", "--- ------ -------------- ----- \n", " 0 carat 53940 non-null float64\n", " 1 cut 53940 non-null object \n", " 2 color 53940 non-null object \n", " 3 clarity 53940 non-null object \n", " 4 depth 53940 non-null float64\n", " 5 table 53940 non-null float64\n", " 6 price 53940 non-null int64 \n", " 7 x 53940 non-null float64\n", " 8 y 53940 non-null float64\n", " 9 z 53940 non-null float64\n", "dtypes: float64(6), int64(1), object(3)\n", "memory usage: 4.1+ MB\n" ] } ], "source": [ "data.info()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The describe method displays statistical information about the dataset for all numerical columns. As shown in the table below the categorical variables are disregarded by the function:" ] }, { "cell_type": "code", "execution_count": 369, "metadata": { "scrolled": true }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
caratdepthtablepricexyz
count53940.00000053940.00000053940.00000053940.00000053940.00000053940.00000053940.000000
mean0.79794061.74940557.4571843932.7997225.7311575.7345263.538734
std0.4740111.4326212.2344913989.4397381.1217611.1421350.705699
min0.20000043.00000043.000000326.0000000.0000000.0000000.000000
25%0.40000061.00000056.000000950.0000004.7100004.7200002.910000
50%0.70000061.80000057.0000002401.0000005.7000005.7100003.530000
75%1.04000062.50000059.0000005324.2500006.5400006.5400004.040000
max5.01000079.00000095.00000018823.00000010.74000058.90000031.800000
\n", "
" ], "text/plain": [ " carat depth table price x \\\n", "count 53940.000000 53940.000000 53940.000000 53940.000000 53940.000000 \n", "mean 0.797940 61.749405 57.457184 3932.799722 5.731157 \n", "std 0.474011 1.432621 2.234491 3989.439738 1.121761 \n", "min 0.200000 43.000000 43.000000 326.000000 0.000000 \n", "25% 0.400000 61.000000 56.000000 950.000000 4.710000 \n", "50% 0.700000 61.800000 57.000000 2401.000000 5.700000 \n", "75% 1.040000 62.500000 59.000000 5324.250000 6.540000 \n", "max 5.010000 79.000000 95.000000 18823.000000 10.740000 \n", "\n", " y z \n", "count 53940.000000 53940.000000 \n", "mean 5.734526 3.538734 \n", "std 1.142135 0.705699 \n", "min 0.000000 0.000000 \n", "25% 4.720000 2.910000 \n", "50% 5.710000 3.530000 \n", "75% 6.540000 4.040000 \n", "max 58.900000 31.800000 " ] }, "execution_count": 369, "metadata": {}, "output_type": "execute_result" } ], "source": [ "data.describe()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Specific percentile values can be displayed by adding the list of desired percentiles in the percentiles parameter of the describe method:" ] }, { "cell_type": "code", "execution_count": 370, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
caratdepthtablepricexyz
count53940.00000053940.00000053940.00000053940.00000053940.00000053940.00000053940.000000
mean0.79794061.74940557.4571843932.7997225.7311575.7345263.538734
std0.4740111.4326212.2344913989.4397381.1217611.1421350.705699
min0.20000043.00000043.000000326.0000000.0000000.0000000.000000
10%0.31000060.00000055.000000646.0000004.3600004.3600002.690000
30%0.42000061.20000056.0000001087.0000004.8200004.8300002.980000
50%0.70000061.80000057.0000002401.0000005.7000005.7100003.530000
70%1.01000062.40000058.0000004662.0000006.4200006.4200003.980000
90%1.51000063.30000060.0000009821.0000007.3100007.3000004.520000
max5.01000079.00000095.00000018823.00000010.74000058.90000031.800000
\n", "
" ], "text/plain": [ " carat depth table price x \\\n", "count 53940.000000 53940.000000 53940.000000 53940.000000 53940.000000 \n", "mean 0.797940 61.749405 57.457184 3932.799722 5.731157 \n", "std 0.474011 1.432621 2.234491 3989.439738 1.121761 \n", "min 0.200000 43.000000 43.000000 326.000000 0.000000 \n", "10% 0.310000 60.000000 55.000000 646.000000 4.360000 \n", "30% 0.420000 61.200000 56.000000 1087.000000 4.820000 \n", "50% 0.700000 61.800000 57.000000 2401.000000 5.700000 \n", "70% 1.010000 62.400000 58.000000 4662.000000 6.420000 \n", "90% 1.510000 63.300000 60.000000 9821.000000 7.310000 \n", "max 5.010000 79.000000 95.000000 18823.000000 10.740000 \n", "\n", " y z \n", "count 53940.000000 53940.000000 \n", "mean 5.734526 3.538734 \n", "std 1.142135 0.705699 \n", "min 0.000000 0.000000 \n", "10% 4.360000 2.690000 \n", "30% 4.830000 2.980000 \n", "50% 5.710000 3.530000 \n", "70% 6.420000 3.980000 \n", "90% 7.300000 4.520000 \n", "max 58.900000 31.800000 " ] }, "execution_count": 370, "metadata": {}, "output_type": "execute_result" } ], "source": [ "percs = [.1, .3, .7, .9]\n", "data.describe(percentiles=percs)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "In order to display additional information about categorical variables an additional parameter should be specified to obtain record count, the number of unique values of each variable, the most frequent value and its occurrence count. " ] }, { "cell_type": "code", "execution_count": 371, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "C:\\Users\\GRCDNL71D14D969B\\AppData\\Local\\Temp\\ipykernel_13892\\307950999.py:1: DeprecationWarning: `np.object` is a deprecated alias for the builtin `object`. To silence this warning, use `object` by itself. Doing this will not modify any behavior and is safe. \n", "Deprecated in NumPy 1.20; for more details and guidance: https://numpy.org/devdocs/release/1.20.0-notes.html#deprecations\n", " data.describe(include=np.object)\n" ] }, { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
cutcolorclarity
count539405394053940
unique578
topIdealGSI1
freq215511129213065
\n", "
" ], "text/plain": [ " cut color clarity\n", "count 53940 53940 53940\n", "unique 5 7 8\n", "top Ideal G SI1\n", "freq 21551 11292 13065" ] }, "execution_count": 371, "metadata": {}, "output_type": "execute_result" } ], "source": [ "data.describe(include=np.object)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "In order to display the unique values for categorical features, the following command can be used:" ] }, { "cell_type": "code", "execution_count": 372, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array(['Ideal', 'Premium', 'Good', 'Very Good', 'Fair'], dtype=object)" ] }, "execution_count": 372, "metadata": {}, "output_type": "execute_result" } ], "source": [ "data['cut'].unique()" ] }, { "cell_type": "code", "execution_count": 373, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array(['E', 'I', 'J', 'H', 'F', 'G', 'D'], dtype=object)" ] }, "execution_count": 373, "metadata": {}, "output_type": "execute_result" } ], "source": [ "data['color'].unique()" ] }, { "cell_type": "code", "execution_count": 374, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array(['SI2', 'SI1', 'VS1', 'VS2', 'VVS2', 'VVS1', 'I1', 'IF'],\n", " dtype=object)" ] }, "execution_count": 374, "metadata": {}, "output_type": "execute_result" } ], "source": [ "data['clarity'].unique()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "One important transformation that might be useful for data manipulation is mapping all categorical variables into numerical equivalents. To do this, we first create the proper dictionaries:" ] }, { "cell_type": "code", "execution_count": 375, "metadata": {}, "outputs": [], "source": [ "cut_map = {v: c for c, v in enumerate(data['cut'].unique())}\n", "color_map = {v: c for c, v in enumerate(data['color'].unique())}\n", "clarity_map = {v: c for c, v in enumerate(data['clarity'].unique())}" ] }, { "cell_type": "code", "execution_count": 376, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "({'Ideal': 0, 'Premium': 1, 'Good': 2, 'Very Good': 3, 'Fair': 4},\n", " {'E': 0, 'I': 1, 'J': 2, 'H': 3, 'F': 4, 'G': 5, 'D': 6},\n", " {'SI2': 0,\n", " 'SI1': 1,\n", " 'VS1': 2,\n", " 'VS2': 3,\n", " 'VVS2': 4,\n", " 'VVS1': 5,\n", " 'I1': 6,\n", " 'IF': 7})" ] }, "execution_count": 376, "metadata": {}, "output_type": "execute_result" } ], "source": [ "cut_map, color_map, clarity_map" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Then we map the dataframe columns using the dictionaries to replace the textual values with the numerical ones:" ] }, { "cell_type": "code", "execution_count": 377, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
caratcutcolorclaritydepthtablepricexyz
539350.7206160.857.027575.755.763.50
539360.7226163.155.027575.695.753.61
539370.7036162.860.027575.665.683.56
539380.8613061.058.027576.156.123.74
539390.7506062.255.027575.835.873.64
\n", "
" ], "text/plain": [ " carat cut color clarity depth table price x y z\n", "53935 0.72 0 6 1 60.8 57.0 2757 5.75 5.76 3.50\n", "53936 0.72 2 6 1 63.1 55.0 2757 5.69 5.75 3.61\n", "53937 0.70 3 6 1 62.8 60.0 2757 5.66 5.68 3.56\n", "53938 0.86 1 3 0 61.0 58.0 2757 6.15 6.12 3.74\n", "53939 0.75 0 6 0 62.2 55.0 2757 5.83 5.87 3.64" ] }, "execution_count": 377, "metadata": {}, "output_type": "execute_result" } ], "source": [ "data['cut'] = data['cut'].map(cut_map)\n", "data['color'] = data['color'].map(color_map)\n", "data['clarity'] = data['clarity'].map(clarity_map)\n", "data.tail()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "It is often necessary to clean the dataset from NaN values before applying any machine learning algorithm, therefore we first need to check and eventually count these values across the columns:" ] }, { "cell_type": "code", "execution_count": 378, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "carat 0\n", "cut 0\n", "color 0\n", "clarity 0\n", "depth 0\n", "table 0\n", "price 0\n", "x 0\n", "y 0\n", "z 0\n", "dtype: int64" ] }, "execution_count": 378, "metadata": {}, "output_type": "execute_result" } ], "source": [ "data.isna().sum()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "A summary of the number of occurrencies of each symbol in a colum in descending order is easily obtained by:" ] }, { "cell_type": "code", "execution_count": 379, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "Ideal 21551\n", "Premium 13791\n", "Very Good 12082\n", "Good 4906\n", "Fair 1610\n", "Name: cut, dtype: int64" ] }, "execution_count": 379, "metadata": {}, "output_type": "execute_result" } ], "source": [ "count = dmds['cut'].value_counts()\n", "count" ] }, { "cell_type": "code", "execution_count": 380, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 380, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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PqpcLpcWLlwY7GkAAIBKrkyiKi0tTS6XSy6XSxEREWratKlGjx6tI0eOlMXDlWjfvn3q3bt3uT8uAACoWsLLase9evVSZmamioqK9MUXX2jIkCE6cuSIpk+fHjCuqKhIERERZTUNxcXFldm+AQAATimzl//cbrfi4uKUmJioe++9VwMGDNDChQs1fvx4tWnTRjNnzlTTpk3ldrtljFFBQYEeeugh1a1bVzExMeratau+/fZbZ3+/vV/Dhg0VFRWlRx99VCdOnNBf//pXxcXFqW7dunruuecC5vHbl/+ysrLkcrn066+/Ots3bNggl8ulvLw8SdKsWbNUq1YtLVq0SC1atFDNmjV111136ciRI5o9e7YaN26s2rVra/jw4Tpx4kRZ/fgAAECIKbMzVaeLjIxUUVGRJOnHH3/UvHnzNH/+fFWrVk2S1KdPH8XGxmrx4sXyer36+9//rm7dumnbtm2KjY2VJO3YsUMff/yxlixZoh07duiuu+5Sbm6umjdvrpUrVyo7O1uDBg1St27ddP3111/yXI8ePapXXnlF7777rg4dOqR+/fqpX79+qlWrlhYvXqydO3fqzjvv1A033KD+/fuX/ocDAABCXrlE1ddff6133nlH3bp1kyQVFhZqzpw5uvzyyyVJy5cv18aNG3XgwAG53W5J0gsvvKCFCxfqH//4hx566CFJUnFxsWbOnKno6Gi1atVKXbp00Q8//KDFixcrLCxMLVq00PPPP6+srKxSRVVRUZGmT5+uZs2aSZLuuusuzZkzR7/88ouioqKcx16xYkWJUeX3++X3+53rPp/vkucEAAAqtjJ7+W/RokWKiopSjRo1lJqaqk6dOunVV1+VJDVq1MgJKknKycnR4cOHddlllykqKsq55ObmaseOHc64xo0bKzo62rler149tWrVSmFhYQG3HThwoFRzr1mzphNUp/bZuHFjRUVFXdTjTJ48WV6v17kkJiaWal4AAKDiKrMzVV26dNH06dMVERGhhISEgDejezyegLHFxcWKj49XVlbWGfupVauW8+/T39B+6tOFp99WXFx81jmdii9jjHPbqZckf6u0j3PK2LFjNXLkSOe6z+cjrAAAqKTKLKo8Ho+SkpIuaGzbtm21f/9+hYeHq3HjxmU1Jefs2L59+1S7dm1JJ9+oXlbcbrfzciYAAKjcKsSXf3bv3l2pqanq27evli5dqry8PGVnZ+uZZ57RN998Y+1xkpKSlJiYqPHjx2vbtm366KOPNHXqVGv7BwAAVVeFiCqXy6XFixerU6dOGjRokJo3b64//vGPysvLU7169aw9TkREhObOnautW7eqdevWev755zVx4kRr+wcAAFWXy/z2DUYoUz6f7+Qb1tPnKcxdM9jTAYALkpfRJ9hTAILq1O/vgoICxcTEnHNchThTBQAAEOqIKgAAAAuIKgAAAAuIKgAAAAuIKgAAAAuIKgAAAAuIKgAAAAuIKgAAAAuIKgAAAAuIKgAAAAuIKgAAAAuIKgAAAAvCgz2BqmjThJ4l/kFGAAAQejhTBQAAYAFRBQAAYAFRBQAAYAFRBQAAYAFRBQAAYAFRBQAAYAFRBQAAYAFRBQAAYAFRBQAAYAFRBQAAYAFRBQAAYAFRBQAAYAFRBQAAYAFRBQAAYAFRBQAAYAFRBQAAYAFRBQAAYAFRBQAAYAFRBQAAYAFRBQAAYAFRBQAAYAFRBQAAYAFRBQAAYAFRBQAAYAFRBQAAYAFRBQAAYAFRBQAAYAFRBQAAYAFRBQAAYAFRBQAAYAFRBQAAYAFRBQAAYAFRBQAAYAFRBQAAYAFRBQAAYAFRBQAAYEF4sCdQFSWPW6owd81gTwNABZOX0SfYUwBQCpypAgAAsICoAgAAsICoAgAAsICoAgAAsICoAgAAsICoAgAAsICoAgAAsICoAgAAsICoAgAAsICoAgAAsICoAgAAsICoAgAAsICoKoXOnTsrPT092NMAAAAVwAVH1W233abu3bufddvq1avlcrm0bt06axO7EIWFhZoyZYratm0rj8cjr9er1q1b65lnntHevXvLdS4AAKBqu+CoGjx4sJYvX66ffvrpjG0zZ85UmzZt1LZt24ueQGFh4UXfR5L8fr969OihSZMmKS0tTZ9//rlycnL017/+Vfn5+Xr11Vcvab8AAACX4oKj6tZbb1XdunU1a9asgNuPHj2q9957T4MHD5YkZWdnq1OnToqMjFRiYqJGjBihI0eOOOMbN26siRMnKi0tTV6vVw8++KC6du2qYcOGBew3Pz9fbrdby5cvP+t8XnzxRa1atUrLly/XiBEj1K5dOyUlJalnz56aPn26Jk2a5Iz1+/0aMWKE6tatqxo1auiGG27Q2rVrA/a3cuVKXXvttXK73YqPj9dTTz2l48ePO9uPHDmigQMHKioqSvHx8Zo6deqF/ugAAEAVcMFRFR4eroEDB2rWrFkyxji3v//++yosLNSAAQO0ceNG9ezZU/369dN3332n9957T6tWrTojmKZMmaLk5GTl5OToL3/5i4YMGaJ33nlHfr/fGfP2228rISFBXbp0Oet85s6dqx49eujqq68+63aXy+X8+8knn9T8+fM1e/ZsrVu3zomv//73v5KkPXv26JZbbtE111yjb7/9VtOnT9eMGTM0ceJEZx9jxozRihUrtGDBAn3yySfKyspSTk5OiT8zv98vn88XcAEAAJXTRb1RfdCgQcrLy1NWVpZz28yZM9WvXz/Vrl1bU6ZM0b333qv09HT97ne/U4cOHfTKK6/orbfe0rFjx5z7dO3aVaNHj1ZSUpKSkpJ05513yuVy6Z///KczJjMzU2lpaQFx9Fvbtm1TixYtAm77/e9/r6ioKEVFRalDhw6STp5hmj59uqZMmaLevXurVatWevPNNxUZGakZM2ZIkqZNm6bExES99tpruuKKK9S3b19NmDBBU6dOVXFxsQ4fPqwZM2bohRdeUI8ePZSSkqLZs2frxIkTJf68Jk+eLK/X61wSExMv5scNAABCyEVF1RVXXKEOHTpo5syZkqQdO3boiy++0KBBgyRJOTk5mjVrlhM2UVFR6tmzp4qLi5Wbm+vsp3379gH7dbvd+tOf/uTsd8OGDfr222+VlpZW4nxOD65p06Zpw4YNGjRokI4ePerMsaioSB07dnTGRURE6Nprr9WWLVskSVu2bFFqamrA/jp27KjDhw/r559/1o4dO1RYWKjU1FRne2xs7BlRd7qxY8eqoKDAuezevbvE8QAAIHSFX+wdBg8erGHDhun1119XZmamGjVqpG7dukmSiouL9fDDD2vEiBFn3K9hw4bOvz0ezxnbhwwZojZt2ujnn3/WzJkz1a1bNzVq1Oic8/jd736nrVu3BtwWHx8v6WTwnHLqpcrTA8wY49z223+f7X6/fbnzYrjdbrnd7ku6LwAACC0X/T1Vd999t6pVq6Z33nlHs2fP1gMPPOAESdu2bfX99987L+v99lK9evUS95uSkqL27dvrzTff1DvvvOOc/TqXe+65R8uWLdP69etLHHfqsVetWuXcVlRUpG+++UYtW7aUJLVq1UrZ2dkB8ZSdna3o6GjVr19fSUlJioiI0Jo1a5ztBw8e1LZt20p8bAAAUHVcdFRFRUWpf//++r//+z/t3bs34CW6P//5z1q9erUee+wxbdiwQdu3b9eHH36o4cOHX9C+hwwZooyMDJ04cUK///3vSxz7xBNPKDU1VV27dtXLL7+sdevWKTc3V0uXLtXHH3+satWqSTp5VuzRRx/VmDFjtGTJEm3evFkPPvigjh496nxicejQodq9e7eGDx+urVu36p///KfGjRunkSNHKiwsTFFRURo8eLDGjBmjzz77TJs2bVJaWprCwvjuVAAAcNJFv/wnnXwJcMaMGbr55psDXta76qqrtHLlSj399NO68cYbZYxRs2bN1L9//wva7z333KP09HTde++9qlGjRolja9Sooc8++0wvvfSSMjMzNXbsWBUXF6tJkybq3bu3nnjiCWdsRkaGiouLdd999+nQoUNq3769li5dqtq1a0uS6tevr8WLF2vMmDFq3bq1YmNjNXjwYD3zzDPOPqZMmaLDhw/r9ttvV3R0tEaNGqWCgoKL+bEBAIBKzGUu9Q1DZWD37t1q3Lix1q5de0lfJFrR+Xy+k58CTJ+nMHfNYE8HQAWTl9En2FMAcBanfn8XFBQoJibmnOMu6UyVbUVFRdq3b5+eeuopXX/99ZUyqAAAQOVWId4U9OWXX6pRo0bKycnRG2+8EezpAAAAXLQKcaaqc+fOl/y1BQAAABVBhThTBQAAEOqIKgAAAAuIKgAAAAuIKgAAAAuIKgAAAAuIKgAAAAuIKgAAAAuIKgAAAAuIKgAAAAsqxDeqVzWbJvQs8Q8yAgCA0MOZKgAAAAuIKgAAAAuIKgAAAAuIKgAAAAuIKgAAAAuIKgAAAAuIKgAAAAuIKgAAAAuIKgAAAAuIKgAAAAuIKgAAAAuIKgAAAAuIKgAAAAuIKgAAAAuIKgAAAAuIKgAAAAuIKgAAAAuIKgAAAAuIKgAAAAuIKgAAAAuIKgAAAAuIKgAAAAuIKgAAAAuIKgAAAAuIKgAAAAuIKgAAAAuIKgAAAAuIKgAAAAuIKgAAAAuIKgAAAAuIKgAAAAuIKgAAAAuIKgAAAAuIKgAAAAuIKgAAAAuIKgAAAAvCgz2Bqih53FKFuWsGexo4j7yMPsGeAgAghHCmCgAAwAKiCgAAwAKiCgAAwAKiCgAAwAKiCgAAwAKiCgAAwAKiCgAAwAKiCgAAwAKiCgAAwAKiCgAAwAKiCgAAwAKiCgAAwAKiqhRcLpcWLlwY7GkAAIAKIOSjav/+/Xr88ceVlJSkGjVqqF69errhhhv0xhtv6OjRo8GeHgAAqCLCgz2B0ti5c6c6duyoWrVqadKkSUpJSdHx48e1bds2zZw5UwkJCbr99tuDPU0AAFAFhPSZqqFDhyo8PFzffPON7r77brVs2VIpKSm688479dFHH+m2226TJO3atUt33HGHoqKiFBMTo7vvvlu//PJLwL6mT5+uZs2aqXr16mrRooXmzJkTsH379u3q1KmTatSooVatWmnZsmXldpwAAKDiC9kzVfn5+frkk080adIkeTyes45xuVwyxqhv377yeDxauXKljh8/rqFDh6p///7KysqSJC1YsECPP/64XnrpJXXv3l2LFi3SAw88oAYNGqhLly4qLi5Wv379VKdOHa1Zs0Y+n0/p6ennnaPf75ff73eu+3w+G4cOAAAqoJCNqh9//FHGGLVo0SLg9jp16ujYsWOSpMcee0zdu3fXd999p9zcXCUmJkqS5syZoyuvvFJr167VNddcoxdeeEFpaWkaOnSoJGnkyJFas2aNXnjhBXXp0kWffvqptmzZory8PDVo0ECSNGnSJPXu3bvEOU6ePFkTJkywfegAAKACCumX/6STZ6N+6+uvv9aGDRt05ZVXyu/3a8uWLUpMTHSCSpJatWqlWrVqacuWLZKkLVu2qGPHjgH76dixY8D2hg0bOkElSampqeed29ixY1VQUOBcdu/efcnHCQAAKraQPVOVlJQkl8ulrVu3BtzetGlTSVJkZKQkyRhzRnid7fbTx/x2uzHmjPufbZ+nc7vdcrvd5x0HAABCX8ieqbrsssvUo0cPvfbaazpy5Mg5x7Vq1Uq7du0KOEu0efNmFRQUqGXLlpKkli1batWqVQH3y87Odraf2sfevXud7atXr7Z5OAAAIMSF7JkqSZo2bZo6duyo9u3ba/z48brqqqsUFhamtWvXauvWrWrXrp26d++uq666SgMGDNBLL73kvFH9pptuUvv27SVJY8aM0d133622bduqW7du+te//qUPPvhAn376qSSpe/fuatGihQYOHKipU6fK5/Pp6aefDuahAwCACiZkz1RJUrNmzbR+/Xp1795dY8eOVevWrdW+fXu9+uqrGj16tJ599lnnW89r166tTp06qXv37mratKnee+89Zz99+/bVyy+/rClTpujKK6/U3//+d2VmZqpz586SpLCwMC1YsEB+v1/XXnuthgwZoueeey5IRw0AACoilznbG4ZQJnw+n7xerxLT5ynMXTPY08F55GX0CfYUAAAVwKnf3wUFBYqJiTnnuJA+UwUAAFBREFUAAAAWEFUAAAAWEFUAAAAWEFUAAAAWEFUAAAAWEFUAAAAWEFUAAAAWEFUAAAAWEFUAAAAWEFUAAAAWEFUAAAAWhAd7AlXRpgk9S/yDjAAAIPRwpgoAAMACogoAAMACogoAAMACogoAAMACogoAAMACogoAAMACogoAAMACogoAAMACogoAAMACogoAAMACogoAAMACogoAAMACogoAAMACogoAAMACogoAAMACogoAAMACogoAAMACogoAAMACogoAAMACogoAAMACogoAAMACogoAAMACogoAAMACogoAAMACogoAAMACogoAAMACogoAAMACogoAAMACogoAAMACogoAAMACogoAAMACogoAAMACogoAAMACogoAAMACogoAAMACogoAAMCC8GBPoCpKHrdUYe6awZ6G8jL6BHsKAABUGpypAgAAsICoAgAAsICoAgAAsICoAgAAsICoAgAAsICoAgAAsICoAgAAsICoAgAAsICoAgAAsICoAgAAsICoAgAAsICoAgAAsICoOo9Zs2apVq1awZ4GAACo4KpMVKWlpcnlcp1x+fHHH0u8X//+/bVt27ZymiUAAAhV4cGeQHnq1auXMjMzA267/PLLS7xPZGSkIiMjz7m9qKhIERERVuYHAABCV5U5UyVJbrdbcXFxAZeXX35ZKSkp8ng8SkxM1NChQ3X48GHnPqe//Dd+/Hi1adNGM2fOVNOmTeV2u2WMCcLRAACAiqRKnak6m7CwML3yyitq3LixcnNzNXToUD355JOaNm3aOe/z448/at68eZo/f76qVat2znF+v19+v9+57vP5rM4dAABUHFUqqhYtWqSoqCjneu/evfX+++8715s0aaJnn31Wjz76aIlRVVhYqDlz5pz3pcPJkydrwoQJpZ84AACo8KpUVHXp0kXTp093rns8Hq1YsUKTJk3S5s2b5fP5dPz4cR07dkxHjhyRx+M5634aNWp03qCSpLFjx2rkyJHOdZ/Pp8TExNIfCAAAqHCq1HuqPB6PkpKSnEthYaFuueUWJScna/78+crJydHrr78u6eQb0Evaz4Vwu92KiYkJuAAAgMqpSp2pOt0333yj48ePa+rUqQoLO9mX8+bNC/KsAABAKKpSZ6pO16xZMx0/flyvvvqqdu7cqTlz5uiNN94I9rQAAEAIqtJR1aZNG/3tb3/T888/r+TkZL399tuaPHlysKcFAABCkMvwJUvlxufzyev1KjF9nsLcNYM9HeVl9An2FAAAqPBO/f4uKCgo8f3RVfpMFQAAgC1EFQAAgAVEFQAAgAVEFQAAgAVEFQAAgAVEFQAAgAVEFQAAgAVEFQAAgAVEFQAAgAVEFQAAgAVEFQAAgAVEFQAAgAXhwZ5AVbRpQs8S/yAjAAAIPZypAgAAsICoAgAAsICoAgAAsICoAgAAsICoAgAAsICoAgAAsICoAgAAsICoAgAAsICoAgAAsICoAgAAsICoAgAAsICoAgAAsICoAgAAsICoAgAAsICoAgAAsICoAgAAsCA82BOoSowxkiSfzxfkmQAAgAt16vf2qd/j50JUlaP8/HxJUmJiYpBnAgAALtahQ4fk9XrPuZ2oKkexsbGSpF27dpW4KKg4fD6fEhMTtXv3bsXExAR7OrhArFvoYc1CU1VZN2OMDh06pISEhBLHEVXlKCzs5FvYvF5vpf7PVxnFxMSwZiGIdQs9rFloqgrrdiEnQ3ijOgAAgAVEFQAAgAVEVTlyu90aN26c3G53sKeCC8SahSbWLfSwZqGJdQvkMuf7fCAAAADOizNVAAAAFhBVAAAAFhBVAAAAFhBVAAAAFhBV5WTatGlq0qSJatSooXbt2umLL74I9pSqjPHjx8vlcgVc4uLinO3GGI0fP14JCQmKjIxU586d9f333wfsw+/3a/jw4apTp448Ho9uv/12/fzzzwFjDh48qPvuu09er1der1f33Xeffv311/I4xJD3+eef67bbblNCQoJcLpcWLlwYsL0812jXrl267bbb5PF4VKdOHY0YMUKFhYVlcdgh73zrlpaWdsZz7/rrrw8Yw7qVr8mTJ+uaa65RdHS06tatq759++qHH34IGMPzrRQMyty7775rIiIizJtvvmk2b95sHn/8cePxeMxPP/0U7KlVCePGjTNXXnml2bdvn3M5cOCAsz0jI8NER0eb+fPnm40bN5r+/fub+Ph44/P5nDGPPPKIqV+/vlm2bJlZt26d6dKli2ndurU5fvy4M6ZXr14mOTnZZGdnm+zsbJOcnGxuvfXWcj3WULV48WLz9NNPm/nz5xtJZsGCBQHby2uNjh8/bpKTk02XLl3MunXrzLJly0xCQoIZNmxYmf8MQtH51u3+++83vXr1Cnju5efnB4xh3cpXz549TWZmptm0aZPZsGGD6dOnj2nYsKE5fPiwM4bn26UjqsrBtddeax555JGA26644grz1FNPBWlGVcu4ceNM69atz7qtuLjYxMXFmYyMDOe2Y8eOGa/Xa9544w1jjDG//vqriYiIMO+++64zZs+ePSYsLMwsWbLEGGPM5s2bjSSzZs0aZ8zq1auNJLN169YyOKrK6/RfzuW5RosXLzZhYWFmz549zpi5c+cat9ttCgoKyuR4K4tzRdUdd9xxzvuwbsF34MABI8msXLnSGMPzrbR4+a+MFRYWKicnRzfffHPA7TfffLOys7ODNKuqZ/v27UpISFCTJk30xz/+UTt37pQk5ebmav/+/QHr43a7ddNNNznrk5OTo6KiooAxCQkJSk5OdsasXr1aXq9X1113nTPm+uuvl9frZZ1LqTzXaPXq1UpOTg74o6k9e/aU3+9XTk5OmR5nZZWVlaW6deuqefPmevDBB3XgwAFnG+sWfAUFBZKk2NhYSTzfSouoKmP/+c9/dOLECdWrVy/g9nr16mn//v1BmlXVct111+mtt97S0qVL9eabb2r//v3q0KGD8vPznTUoaX3279+v6tWrq3bt2iWOqVu37hmPXbduXda5lMpzjfbv33/G49SuXVvVq1dnHS9B79699fbbb2v58uWaOnWq1q5dq65du8rv90ti3YLNGKORI0fqhhtuUHJysiSeb6UVHuwJVBUulyvgujHmjNtQNnr37u38OyUlRampqWrWrJlmz57tvGn2Utbn9DFnG88621Nea8Q62tO/f3/n38nJyWrfvr0aNWqkjz76SP369Tvn/Vi38jFs2DB99913WrVq1RnbeL5dGs5UlbE6deqoWrVqZ1T3gQMHzih0lA+Px6OUlBRt377d+RRgSesTFxenwsJCHTx4sMQxv/zyyxmP9e9//5t1LqXyXKO4uLgzHufgwYMqKipiHS2Ij49Xo0aNtH37dkmsWzANHz5cH374oVasWKEGDRo4t/N8Kx2iqoxVr15d7dq107JlywJuX7ZsmTp06BCkWVVtfr9fW7ZsUXx8vJo0aaK4uLiA9SksLNTKlSud9WnXrp0iIiICxuzbt0+bNm1yxqSmpqqgoEBff/21M+arr75SQUEB61xK5blGqamp2rRpk/bt2+eM+eSTT+R2u9WuXbsyPc6qID8/X7t371Z8fLwk1i0YjDEaNmyYPvjgAy1fvlxNmjQJ2M7zrZTK/a3xVdCpr1SYMWOG2bx5s0lPTzcej8fk5eUFe2pVwqhRo0xWVpbZuXOnWbNmjbn11ltNdHS08/PPyMgwXq/XfPDBB2bjxo3mnnvuOevHhxs0aGA+/fRTs27dOtO1a9ezfnz4qquuMqtXrzarV682KSkpfKXCBTp06JBZv369Wb9+vZFk/va3v5n169c7XztSXmt06iPe3bp1M+vWrTOffvqpadCgQUh/xLsslbRuhw4dMqNGjTLZ2dkmNzfXrFixwqSmppr69euzbkH06KOPGq/Xa7KysgK+6uLo0aPOGJ5vl46oKievv/66adSokalevbpp27at8/FVlL1T37ESERFhEhISTL9+/cz333/vbC8uLjbjxo0zcXFxxu12m06dOpmNGzcG7ON///ufGTZsmImNjTWRkZHm1ltvNbt27QoYk5+fbwYMGGCio6NNdHS0GTBggDl48GB5HGLIW7FihZF0xuX+++83xpTvGv3000+mT58+JjIy0sTGxpphw4aZY8eOleXhh6yS1u3o0aPm5ptvNpdffrmJiIgwDRs2NPfff/8Za8K6la+zrZckk5mZ6Yzh+XbpXMYYU95nxwAAACob3lMFAABgAVEFAABgAVEFAABgAVEFAABgAVEFAABgAVEFAABgAVEFAABgAVEFAABgAVEFAABgAVEFAABgAVEFAABgAVEFAABgwf8DE3lIyWXvlTMAAAAASUVORK5CYII=", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "count.sort_values(ascending=True).plot(kind='barh')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "A group by clause can be used to display more detailed information about a given column, preserving the natural ordering of the aggregation column, such as:" ] }, { "cell_type": "code", "execution_count": 381, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 381, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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i5SSkqIvvvhCERER6t27t86ePeusmThxotatW6fU1FRt27ZN586d04ABA1RZWemsGT58uDIzM5WWlqa0tDRlZmYqKSnJHZsDAABqKV+3vKmvr8soziUOh0MvvPCCZsyYoSFDhkiSVq5cqfDwcL355pt6+OGHVVRUpGXLlumNN95QQkKCJGnVqlWKiorSpk2b1KdPHx04cEBpaWnauXOnOnToIElaunSp4uPjdejQIcXGxrpjswAAQC3jlhGdI0eOKDIyUjExMbr33nv11VdfSZKys7OVl5enxMREZ21AQIC6d++u7du3S5IyMjJUXl7uUhMZGam4uDhnzY4dO2S3250hR5I6duwou93urLmc0tJSFRcXuzwAAIC5bnjQ6dChg15//XV98MEHWrp0qfLy8tSpUyd98803ysvLkySFh4e7vCY8PNy5Li8vT/7+/mrQoMEVa8LCwqr97LCwMGfN5cydO9c5p8dutysqKuq6thUAANRsNzzo9OvXT7/5zW/Utm1bJSQkaMOGDZK+PUR1ic1mc3mNw+Gotuz7vl9zufofe5/p06erqKjI+cjJyflJ2wQAAGont8zR+a6goCC1bdtWR44c0aBBgyR9OyLTpEkTZ01+fr5zlCciIkJlZWUqKChwGdXJz89Xp06dnDWnTp2q9rNOnz5dbbTouwICAhQQEHAjNgu1VLMnN1jdwg1xfF5/q1sAgFrB7dfRKS0t1YEDB9SkSRPFxMQoIiJC6enpzvVlZWXaunWrM8S0b99efn5+LjW5ubnKyspy1sTHx6uoqEiff/65s+azzz5TUVGRswYAAOCGj+hMmTJFd999t5o2bar8/HzNmjVLxcXFGjlypGw2myZOnKg5c+aoZcuWatmypebMmaN69epp+PDhkiS73a7Ro0dr8uTJatiwoUJDQzVlyhTnoTBJat26tfr27asxY8bo1VdflSSNHTtWAwYM4IwrAADgdMODztdff6377rtP//vf/9S4cWN17NhRO3fuVHR0tCRp6tSpunDhgsaNG6eCggJ16NBBGzduVHBwsPM9Fi9eLF9fXw0dOlQXLlxQr169tGLFCvn4+DhrVq9ereTkZOfZWQMHDlRKSsqN3hwAAFCL3fCgk5qaesX1NptNM2fO1MyZM3+wpm7dunrxxRf14osv/mBNaGioVq1ada1tAgAAL8C9rgAAgLEIOgAAwFgEHQAAYCyCDgAAMBZBBwAAGIugAwAAjEXQAQAAxiLoAAAAYxF0AACAsQg6AADAWAQdAABgLIIOAAAwFkEHAAAYi6ADAACMRdABAADGIugAAABjEXQAAICxCDoAAMBYBB0AAGAsgg4AADAWQQcAABiLoAMAAIxF0AEAAMYi6AAAAGMRdAAAgLEIOgAAwFgEHQAAYCyCDgAAMBZBBwAAGIugAwAAjEXQAQAAxiLoAAAAYxF0AACAsQg6AADAWAQdAABgLIIOAAAwFkEHAAAYi6ADAACMRdABAADGIugAAABjEXQAAICxCDoAAMBYBB0AAGAsgg4AADAWQQcAABiLoAMAAIxF0AEAAMYi6AAAAGMRdAAAgLF8rW7AGzR7coPVLVy34/P6W90CAABXjREdAABgLIIOAAAwFkEHAAAYi6ADAACMRdABAADGIugAAABjEXQAAICxCDoAAMBYBB0AAGAsgg4AADAWQQcAABiLoAMAAIxF0AEAAMYi6AAAAGMRdAAAgLEIOgAAwFgEHQAAYCyCDgAAMBZBBwAAGIugAwAAjEXQAQAAxqr1Qecvf/mLYmJiVLduXbVv316ffPKJ1S0BAIAaolYHnbffflsTJ07UjBkztGfPHnXt2lX9+vXTiRMnrG4NAADUALU66CxatEijR4/WQw89pNatW+uFF15QVFSUXn75ZatbAwAANYCv1Q1cq7KyMmVkZOjJJ590WZ6YmKjt27df9jWlpaUqLS11Pi8qKpIkFRcXu69RSVWl5936/p7g7s/IU0zYF5IZ+4N9UXOwL2oWE/aHu/fFpfd3OBw/Wltrg87//vc/VVZWKjw83GV5eHi48vLyLvuauXPn6o9//GO15VFRUW7p0ST2F6zuAN/F/qg52Bc1B/ui5vDUvjh79qzsdvsVa2pt0LnEZrO5PHc4HNWWXTJ9+nRNmjTJ+byqqkpnzpxRw4YNf/A1tUFxcbGioqKUk5OjkJAQq9vxauyLmoN9UXOwL2oOU/aFw+HQ2bNnFRkZ+aO1tTboNGrUSD4+PtVGb/Lz86uN8lwSEBCggIAAl2X169d3V4seFxISUqv/wzUJ+6LmYF/UHOyLmsOEffFjIzmX1NrJyP7+/mrfvr3S09Ndlqenp6tTp04WdQUAAGqSWjuiI0mTJk1SUlKSfvnLXyo+Pl6vvfaaTpw4oUceecTq1gAAQA1Qq4POsGHD9M033+jZZ59Vbm6u4uLi9P777ys6Otrq1jwqICBAzzzzTLXDcvA89kXNwb6oOdgXNYc37gub46ecmwUAAFAL1do5OgAAAD+GoAMAAIxF0AEAAMYi6AAAAGMRdAAAgLFq9enlAADA1XdvdfRjFi1a5MZOagaCTi1UUVGhunXrKjMzU3FxcVa345Xee++9n1w7cOBAN3YCAK727Nnj8jwjI0OVlZWKjY2VJB0+fFg+Pj5q3769Fe15HEGnFvL19VV0dLQqKyutbsVrDRo0yOW5zWbTdy9J9d2bxLKf3Iu/Xmsuh8Ohd955R5s3b1Z+fr6qqqpc1q9du9aizsy2efNm578XLVqk4OBgrVy5Ug0aNJAkFRQU6IEHHlDXrl2tatGjuGBgLbV8+XL9/e9/16pVqxQaGmp1O15t06ZNmjZtmubMmaP4+HjZbDZt375dTz31lObMmaPevXtb3aLRevbs+ZPqbDabPvroIzd3g+9KTk7Wa6+9pp49eyo8PNzlDwDp299jcK+bbrpJGzdu1K233uqyPCsrS4mJiTp58qRFnXkOQaeWuv3223X06FGVl5crOjpaQUFBLut3795tUWfeJy4uTq+88oq6dOnisvyTTz7R2LFjdeDAAYs6A6wVGhqqVatW6a677rK6Fa8VHBysf/zjH/r1r3/tsvyjjz7SPffco7Nnz1rUmedw6KqW+v6hE1jn2LFjstvt1Zbb7XYdP37c8w0BNYTdbtctt9xidRtebfDgwXrggQe0cOFCdezYUZK0c+dOPfHEExoyZIjF3XkGIzrAderWrZv8/Py0atUqNWnSRJKUl5enpKQklZWVaevWrRZ36F2++OIL/f3vf9eJEydUVlbmso45IZ61cuVKpaWl6W9/+5sCAwOtbscrnT9/XlOmTNHf/vY3lZeXS/p2nufo0aM1f/78akcDTETQAa7T0aNHNXjwYB06dEhNmzaVJJ04cUKtWrXS+vXr1aJFC4s79B6pqakaMWKEEhMTlZ6ersTERB05ckR5eXkaPHgwc0I87Pz58xoyZIg+/fRTNWvWTH5+fi7rOcTuOSUlJTp27JgcDodatGjhFQHnEg5d1SKhoaE6fPiwGjVqpAYNGlSb2PddZ86c8WBn3q1Fixbat2+f0tPTdfDgQTkcDrVp00YJCQlX3Ee48ebMmaPFixdr/PjxCg4O1pIlSxQTE6OHH37YOdoGzxk1apQyMjJ0//33X3YyMjwnKChIoaGhstlsXhVyJEZ0apWVK1fq3nvvVUBAgFauXHnF2pEjR3qoK6DmCAoK0v79+9WsWTM1atRImzdvVtu2bXXgwAH9+te/Vm5urtUtepWgoCB98MEH1Sbqw3Oqqqo0a9YsLVy4UOfOnZP07QTlyZMna8aMGapTx/wbJDCiU4t8N7wQZGqWrVu3asGCBTpw4IBsNptat26tJ554wmuuU1FThIaGOs8iuemmm5SVlaW2bduqsLBQ58+ft7g77xMVFaWQkBCr2/BqM2bM0LJlyzRv3jx17txZDodDn376qWbOnKmLFy9q9uzZVrfoduZHOS9w4cIFFRcXuzzgOatWrVJCQoLq1aun5ORkPfbYYwoMDFSvXr305ptvWt2eV+natavS09MlSUOHDtXvfvc7jRkzRvfdd5969eplcXfeZ+HChZo6dSpnH1po5cqV+utf/6pHH31Uv/jFL9SuXTuNGzdOS5cu1YoVK6xuzyM4dFVLlZSUaNq0aVqzZo2++eabauu5Gq/ntG7dWmPHjtXjjz/usnzRokVaunQp19HxoDNnzujixYuKjIxUVVWVFixYoG3btqlFixb6wx/+4LwyLDyjQYMGOn/+vCoqKlSvXr1qk5GZS+h+devW1b59+9SqVSuX5YcOHdJtt92mCxcuWNSZ5xB0aqnx48dr8+bNevbZZzVixAi99NJL+u9//6tXX31V8+bN029/+1urW/QaAQEB2r9/f7Wzq44ePaq4uDhdvHjRos4AazGX0HodOnRQhw4d9Oc//9ll+YQJE/TFF19o586dFnXmOczRqaX++c9/6vXXX1ePHj304IMPqmvXrmrRooWio6O1evVqgo4HRUVF6cMPP6wWdD788ENFRUVZ1JX3OnbsmJYvX65jx45pyZIlCgsLU1pamqKioqpdBh/uRZCx3vPPP6/+/ftr06ZNLreoycnJ0fvvv291ex5B0Kmlzpw5o5iYGElSSEiIcwi4S5cuevTRR61szetMnjxZycnJyszMVKdOnWSz2bRt2zatWLFCS5Yssbo9r7J161b169dPnTt31scff6zZs2crLCxM+/bt01//+le98847VrfoVU6cOHHF9ZeuOwX36d69uw4fPqyXXnrJefmLIUOGaNy4cYqMjLS6PY8g6NRSt9xyi44fP67o6Gi1adNGa9as0Z133ql//vOfql+/vtXteZVHH31UERERWrhwodasWSPp23k7b7/9tu655x6Lu/MuTz75pGbNmqVJkyYpODjYubxnz56ETgs0a9bsitfOYS6hZ0RGRnrF2VU/hDk6tcxXX32lZs2aacmSJfLx8VFycrI2b96s/v37q7KyUhUVFVq0aJF+97vfWd0q4HE/+9nP9OWXXyomJkbBwcHau3ev84+Cn//858yX8rC9e/e6PC8vL9eePXu0aNEizZ4922vutWS1wsJCLVu2zHn5izZt2ujBBx+87D36TETQqWV8fHyUm5ursLAwSdKwYcP05z//WaWlpdq1a5eaN2+udu3aWdyld8rIyHD5RXL77bdb3ZLXufnmm7VmzRp16tTJJeisW7dOU6ZM0bFjx6xuEZI2bNig+fPna8uWLVa3Yrxdu3apT58+CgwM1J133imHw6Fdu3bpwoUL2rhxo+644w6rW3Q7gk4tU6dOHeXl5TmDznd/mcMa+fn5uvfee7VlyxbVr19fDodDRUVF6tmzp1JTU9W4cWOrW/QaU6dO1Y4dO/T3v/9drVq10u7du3Xq1CmNGDFCI0aM0DPPPGN1i5B05MgR3XbbbSopKbG6FeNdOlFl6dKl8vX9drZKRUWFHnroIX311Vf6+OOPLe7Q/bhgIHCdJkyYoOLiYu3fv19nzpxRQUGBsrKyVFxcrOTkZKvb8yqzZ89W06ZNddNNN+ncuXNq06aNunXrpk6dOumpp56yuj2v8/0LmRYVFengwYP6wx/+oJYtW1rdnlfYtWuXpk2b5gw50rd3L586dap27dplYWeew2TkWsZms1Wb3MeN8qyVlpamTZs2qXXr1s5lbdq00UsvvaTExEQLO/M+fn5+Wr16tZ599lnt2bNHVVVVuv322/lStUj9+vWr/X5yOByKiopSamqqRV15l5CQEJ04cUI///nPXZbn5OS4TNg3GUGnlnE4HBo1apQCAgIkSRcvXtQjjzxS7W60a9eutaI9r1RVVVXtiq/St1+6VVVVFnSE5s2bq3nz5la34fU2b97s8rxOnTpq3LixWrRo4TLCAPcZNmyYRo8erQULFrhc/uKJJ57QfffdZ3V7HsEcnVrmgQce+El1y5cvd3MnuOSee+5RYWGh3nrrLed1Kf773//qt7/9rRo0aKB169ZZ3KHZJk2a9JNrFy1a5MZOgJqnrKxMTzzxhF555RVVVFRI+vaPsEcffVTz5s1z/tFsMoIOcJ1ycnJ0zz33KCsrS1FRUbLZbPrPf/6jX/ziF/rHP/6hm2++2eoWjdazZ0+X5xkZGaqsrFRsbKwk6fDhw/Lx8VH79u310UcfWdGiV3nvvffUr18/+fn56b333rti7cCBAz3UFc6fP69jx47J4XCoRYsWqlevntUteQxBB7hBNm3apAMHDsjhcKhNmzZKSEiwuiWvs2jRIm3ZskUrV6503sCzoKBADzzwgLp27arJkydb3KH5vntmaJ06P3y+i81m44KB8AiCDnCNLly4oA8//FADBgyQJE2fPl2lpaXO9b6+vnr22WdVt25dq1r0OjfddJM2btxY7Z5WWVlZSkxM1MmTJy3qDPCs3NxcpaSkOK+I3KVLF50/f9653sfHR+vXr9dNN91kVYsew+nlwDV6/fXX9eqrrzqfp6SkaPv27dqzZ4/27NmjN954Qy+//LKFHXqf4uJinTp1qtry/Px8nT171oKOAGv85S9/UWFhofP53r171bVrV91zzz2655575OPjo8WLF1vXoAcxogNco27duunxxx/X4MGDJVW/eOOqVav00ksvaceOHVa26VVGjBihrVu3auHCherYsaMkaefOnXriiSfUrVs3rVy50uIOvc/nn3+uLVu2KD8/v9pZiEwOd5/bbrtN8+fPV+/evSVV//30wQcfaNKkSdq/f7+VbXoE5/cB1+jw4cNq1aqV83ndunVd5iTceeedGj9+vBWtea1XXnlFU6ZM0f3336/y8nI5HA75+flp9OjRmj9/vtXteZ05c+boqaeeUmxsrMLDw12uqcP1v9zr+PHjLpdY6N27t8tlSGJjY5WdnW1Fax7HiA5wjQIDA5WZmek8u+f7Dh48qNtuu40bSVqgpKTE5QyT719nCp4RHh6u5557TqNGjbK6Fa/zs5/9TJ988skP3nNvz5496tq1q86dO+fhzjyPER3gGt18883Kysr6waCzb98+Ti33kJ96F2wupOlZderUUefOna1uwyvFxsZq+/btPxh0PvnkE5cRaZMxGRm4RnfddZeefvrpy47YXLhwQX/84x/Vv39/CzrzPna7/Sc94FmPP/64XnrpJavb8Er33nuvnn76ae3bt6/aur179+qPf/wjV0YGcGWnTp3SbbfdJn9/fz322GNq1aqVbDabDh48qJSUFFVUVGjPnj0KDw+3ulXAElVVVerfv78OHz6sNm3aVLtVCiNs7lNeXq6EhARt375dvXv3VmxsrPP3U3p6uuLj4/Xhhx9e9vY1piHoANchOztbjz76qNLT03XpfyWbzabevXvrL3/5i/MMB8AbjR8/XsuWLVPPnj2rTUaWuFWNu5WVlWnRokVKTU3V4cOHJUktW7bUfffdp8cff9wrbv8gEXSAG+LMmTM6evSoJKlFixYKDQ21uCPAesHBwUpNTeUQLizFZGTgBggNDdWdd95pdRtAjRIaGspd5GE5JiMDANxi5syZeuaZZ1xuPQB4GoeuAABucfvttzuvZ9SsWbNqE193795tUWfwJhy6AgC4xaBBg6xuAWBEBwAAU23ZskU9evSwug1LMUcHAOA2hYWF+utf/6rp06frzJkzkr49ZPXf//7X4s68Q9++fdW8eXPNmjVLOTk5VrdjCYIOAMAt9u3bp1atWum5557TggULVFhYKElat26dpk+fbm1zXuLkyZP63e9+p7Vr1yomJkZ9+vTRmjVrVFZWZnVrHkPQAQC4xaRJkzRq1CgdOXJEdevWdS7v16+fPv74Yws78x6hoaFKTk7W7t27tWvXLsXGxmr8+PFq0qSJkpOTtXfvXqtbdDvm6AAA3MJut2v37t1q3ry5goODtXfvXt1yyy36z3/+o9jY2MveJw7udfLkSb322muaN2+efH19dfHiRcXHx+uVV17RrbfeanV7bsGIDgDALerWravi4uJqyw8dOqTGjRtb0JF3Ki8v1zvvvKO77rpL0dHR+uCDD5SSkqJTp04pOztbUVFR+n//7/9Z3abbMKIDAHCLsWPH6vTp01qzZo1CQ0O1b98++fj4aNCgQerWrZteeOEFq1s03oQJE/TWW29Jku6//3499NBDiouLc6k5ceKEmjVrpqqqKitadDuCDgDALYqLi3XXXXdp//79Onv2rCIjI5WXl6f4+Hi9//77CgoKsrpF4/Xq1UsPPfSQfvOb38jf3/+yNRUVFfr000/VvXt3D3fnGVwwEADgFiEhIdq2bZs++ugj7d69W1VVVbrjjjuUkJBgdWteoby8XE2bNlWHDh1+MORIkq+vr7EhR2JEBwDgBhUVFapbt64yMzOrHSqB59SvX1+7d+/WLbfcYnUrlmEyMgDghvP19VV0dLQqKyutbsWrDR48WOvXr7e6DUtx6AoA4BZPPfWUpk+frlWrVik0NNTqdrxSixYt9Kc//Unbt29X+/btq82LSk5Otqgzz+HQFQDALW6//XYdPXpU5eXlio6OrvYly93L3S8mJuYH19lsNn311Vce7MYajOgAANxi0KBBstls4u9p62RnZ1vdguUIOgCAG+r8+fN64okntH79epWXl6tXr1568cUX1ahRI6tb81plZWXKzs5W8+bN5evrXV/9TEYGANxQzzzzjFasWKH+/fvrvvvu06ZNm/Too49a3ZZXOn/+vEaPHq169erp1ltv1YkTJyR9Ozdn3rx5FnfnGQQdAMANtXbtWi1btkyvvfaalixZog0bNmj9+vWcgWWB6dOna+/evdqyZYvLjVUTEhL09ttvW9iZ5xB0AAA3VE5Ojrp27ep8fuedd8rX11cnT560sCvvtH79eqWkpKhLly6y2WzO5W3atNGxY8cs7MxzCDoAgBuqsrKy2pV4fX19VVFRYVFH3uv06dMKCwurtrykpMQl+JjMu2YkAQDczuFwaNSoUQoICHAuu3jxoh555BGXU8zXrl1rRXte5Ve/+pU2bNigCRMmSJIz3CxdulTx8fFWtuYxBB0AwA01cuTIasvuv/9+CzrB3Llz1bdvX/373/9WRUWFlixZov3792vHjh3aunWr1e15BBcMBADAMJmZmbrtttskSV9++aUWLFigjIwM541Vp02bprZt21rbpIcQdAAAMEydOnV0++2366GHHtLw4cNlt9utbskyTEYGAMAwn376qe644w49+eSTatKkiZKSkrR582ar27IEIzoAABjqwoULWrNmjZYvX65PPvlEzZo104MPPqiRI0fq5ptvtro9jyDoAADgBY4dO6bly5fr9ddfV25urnr37q3333/f6rbcjqADAICXOHfunFavXq3f//73Kiws9IqrVXN6OQAAhtu6dav+9re/6d1335WPj4+GDh2q0aNHW92WRzCiAwCAgXJycrRixQqtWLFC2dnZ6tSpk0aPHq2hQ4e6XLjRdIzoAABgmN69e2vz5s1q3LixRowYoQcffFCxsbFWt2UJgg4AAIYJDAzUu+++qwEDBsjHx8fqdizFoSsAAGAsLhgIAACMRdABAADGIugAAABjEXQAAICxCDoAAMBYBB0AXmfFihWqX7++1W0A8ACCDgAAMBZBB0CtVFVVpeeee04tWrRQQECAmjZtqtmzZ2vLli2y2WwqLCx01mZmZspms+n48ePasmWLHnjgARUVFclms8lms2nmzJmWbQcA9+LKyABqpenTp2vp0qVavHixunTpotzcXB08ePBHX9epUye98MILevrpp3Xo0CFJ0s9+9jN3twvAIgQdALXO2bNntWTJEqWkpGjkyJGSpObNm6tLly7asmXLFV/r7+8vu90um82miIgID3QLwEocugJQ6xw4cEClpaXq1auX1a0AqOEIOgBqncDAwB9cV6fOt7/Wvnsbv/Lycrf3BKBmIugAqHVatmypwMBAffjhh9XWNW7cWJKUm5vrXJaZmelS4+/vr8rKSrf2CKBmYI4OgFqnbt26mjZtmqZOnSp/f3917txZp0+f1v79+zVixAhFRUVp5syZmjVrlo4cOaKFCxe6vL5Zs2Y6d+6cPvzwQ7Vr10716tVTvXr1LNoaAO7EiA6AWukPf/iDJk+erKefflqtW7fWsGHDlJ+fLz8/P7311ls6ePCg2rVrp+eee06zZs1yeW2nTp30yCOPaNiwYWrcuLGef/55i7YCgLvZHN89kA0AAGAQRnQAAICxCDoAAMBYBB0AAGAsgg4AADAWQQcAABiLoAMAAIxF0AEAAMYi6AAAAGMRdAAAgLEIOgAAwFgEHQAAYKz/D3U3YcH4uI/QAAAAAElFTkSuQmCC", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "count = dmds.groupby(by='cut',as_index=False).size()\n", "count.plot(kind='bar',x='cut',y='size')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now we can filter out all diamonds that do not match our quality requirements by combining multiple conditions on the various columns: we select clarity **IF**, color **D** and cut **Ideal**." ] }, { "cell_type": "code", "execution_count": 382, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
caratcutcolorclaritydepthtablepricexyz
256221.04IdealDIF61.857.0144946.496.524.02
257181.04IdealDIF61.857.0146266.526.494.02
261981.02IdealDIF63.057.0155756.396.354.01
263111.06IdealDIF61.257.0158136.576.614.03
269651.07IdealDIF60.954.0170426.666.734.08
272261.03IdealDIF62.056.0175906.556.444.03
\n", "
" ], "text/plain": [ " carat cut color clarity depth table price x y z\n", "25622 1.04 Ideal D IF 61.8 57.0 14494 6.49 6.52 4.02\n", "25718 1.04 Ideal D IF 61.8 57.0 14626 6.52 6.49 4.02\n", "26198 1.02 Ideal D IF 63.0 57.0 15575 6.39 6.35 4.01\n", "26311 1.06 Ideal D IF 61.2 57.0 15813 6.57 6.61 4.03\n", "26965 1.07 Ideal D IF 60.9 54.0 17042 6.66 6.73 4.08\n", "27226 1.03 Ideal D IF 62.0 56.0 17590 6.55 6.44 4.03" ] }, "execution_count": 382, "metadata": {}, "output_type": "execute_result" } ], "source": [ "topq = dmds[(data['carat'] > 1.0) & (data['clarity'] == 7) & (data['color'] == 6) & (data['cut'] == 0)]\n", "topq" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Hence the percentage of top quality diamonds can be calculated by means of:" ] }, { "cell_type": "code", "execution_count": 383, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "The top quality diamonds percentage is 0.011 at the average price of 15856.67$.\n" ] } ], "source": [ "print('The top quality diamonds percentage is {:.3f} at the average price of {:.2f}$.'.format(topq.size/dmds.size*100,topq['price'].mean()))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now let's visualize the diamonds with a pivot table to create a hierarchical view by clarity, color and cut:" ] }, { "cell_type": "code", "execution_count": 384, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
caratprice
claritycolorcut
I1DFair7.5129532
Good8.3227926
Ideal12.4845850
Premium13.8645825
Very Good4.7513114
...............
VVS2JFair1.012998
Good12.1856825
Ideal47.01222584
Premium42.57218394
Very Good31.96172853
\n", "

276 rows × 2 columns

\n", "
" ], "text/plain": [ " carat price\n", "clarity color cut \n", "I1 D Fair 7.51 29532\n", " Good 8.32 27926\n", " Ideal 12.48 45850\n", " Premium 13.86 45825\n", " Very Good 4.75 13114\n", "... ... ...\n", "VVS2 J Fair 1.01 2998\n", " Good 12.18 56825\n", " Ideal 47.01 222584\n", " Premium 42.57 218394\n", " Very Good 31.96 172853\n", "\n", "[276 rows x 2 columns]" ] }, "execution_count": 384, "metadata": {}, "output_type": "execute_result" } ], "source": [ "thepivot = dmds.pivot_table(values=['carat','price'],index=['clarity','color','cut'],aggfunc=np.sum)\n", "thepivot" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The pivot table is organized as a multi-index dataframe, whose data can be accessed through the .loc as shown in the cell below that reports the total carats and price of all top quality diamonds:" ] }, { "cell_type": "code", "execution_count": 385, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "carat 17.24\n", "price 183881.00\n", "Name: (IF, D, Ideal), dtype: float64" ] }, "execution_count": 385, "metadata": {}, "output_type": "execute_result" } ], "source": [ "thepivot.loc['IF','D','Ideal']" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "As already shown in the present example, pandas provides its own data plotting features, but it is still possible to extend the plots variety by means of additional packages, such as **seaborn** that will be discussed in further detail in lecture #4.\n", "\n", "The following figure displays violin plots for some important features of our dataset." ] }, { "cell_type": "code", "execution_count": 386, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 386, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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e/fuLd+2LEsBugScQiwRERERkTD3ySefAGC1tSCu4nb2Cb6A67PPPjtirhoRkUA4vCcWQGZmZogqkUihEEtEREREJIxt27aN7777DjgUUlXEbmNjx9kcOHCAjz/+OBjliUiEsm2bTZs2HbFv48aNIapGIoVCLBERERGRMFVYWMhdd92F2+3GbmFD4yreYIJ9oi/oeumll3xDEEVEAiAjI+MPwwdXrlwZomokUijEEhEREREJQ7Zt88gjj5Ceno4dZ2MNscCoxvuOs7HaWXi9Xu699172798f+GJFJOIcK7Bas2aNJneXgFKIJSIiIiISht5//31++uknMMEaZkFMNd9ogD3Qxk622b9/P/fff7++VIqI3x0dYsXg6z26efPm0BQkEUEhloiIiIhImPn000954YUXALD6WNCkhidwlgZfTli1ahV33XUXLpfL/4WKSEQqKipiwYIFR+zrVPr8/fffB78giRgKsUREREREwsjbb7/N008/DYB1vIXdufLJ3CuUDN5hXnDAwoULmTx5MkVFRX6sVEQi1ffff09RURGNDtvXt/T566+/VmguAaMQS0REREQkDNi2zYsvvshLL70EgHWihd3XrtY8WBVqCd4RXnDCihUruPXWW8nPz/dPwSISsT7//HMA+h+2rzOQAuTl5fmGQosEgEIsEREREZEQ83g8PP300/zf//0fAFZvC7tnHQOsMs3Be4oXO8pm3bp13HjjjWRlZfnhxCISiTZt2sSmTZtwAH0O228CA0u3P/vss+AXJhFBIZaIiIiISAjl5+czefJkZs6cCYDV38LuWsshhBVpDNZpFnaMzZYtW7jqqqvYuHGjf68hIhHhnXfeAaAHkHDUsQH4Qoa1a9eyZs2aIFcmkUAhloiIiIhIiOzcuZNrrrmGX375BRy+OaxqPQdWVVLAOt0qX7Xw+uuvZ+7cuYG5log0SJs3b+aHH37AAE4+xvEkjPIhhq+++moQK5NIoRBLRERERCQEVqxYwcSJE0lLS8OOs/Ge5oW2Ab5oAlijLOyWNiUlJdx33328/vrr2HaAgjMRaVBee+01AHoCLSsY73wK4ABWrlzJ8uXLg1abRAaFWCIiIiIiQTZ79mxuvfVW8vLysBvbWKdbHLHMVyBFgTXCwupiAfD666/zwAMP4Ha7g1SAiNRH69evZ8GCBRjAqErapWIwqHT7lVde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6yMXtm2zcOFCMjMzO75QEekVdu/ezeeff97stujoaKZPn47H4+ngqqS7ak1O5O6gmkRERERE5AS53W7mzp3Lbbfdhp1r4/R1MN6mQZa9NtjJYtasWQqwRKRdpaSkaKwr6RQKsUREREREuoHx48dzzjnn8K9//Qt7VfOjgsTHx/O9732vYwsTERHpIAqxRERERES6iVtuuYXS0lJKS0uP2OZ2u7n22muJiYnp+MJEREQ6gMbEEhERERERERGRTtGanEizE4qIiIiIiIiISJenEEtERERERERERLo8hVgiIiIiIiIiItLlKcQSEREREREREZEuTyGWiIiIiIiIiIh0eQqxRERERERERESky1OIJSIiIiIiIiIiXZ5CLBERERERERER6fIUYomIiIiIiIiISJenEEtERERERERERLo8hVgiIiIiIiIiItLlKcQSEREREREREZEuTyGWiIiIiIiIiIh0eQqxRERERERERESky1OIJSIiIiIiIiIiXZ5CLBERERERERER6fIUYomIiIiIiIiISJfn7ugLGmMAKC8v7+hLi4iIiIiIiIhIF9KYDzXmRUfT4SFWRUUFAGlpaR19aRERERERERER6YIqKiqIi4s76j6WOZ6oqw05jsPu3buJiYnBsqyOvLT0EOXl5aSlpbFr1y5iY2M7uxwR6aV0LxKRzqb7kIh0BboXyckyxlBRUUFKSgq2ffRRrzq8JZZt26Smpnb0ZaUHio2N1U1SRDqd7kUi0tl0HxKRrkD3IjkZx2qB1UgDu4uIiIiIiIiISJenEEtERERERERERLo8hVjS7Xi9Xh588EG8Xm9nlyIivZjuRSLS2XQfEpGuQPci6UgdPrC7iIiIiIiIiIhIa6klloiIiIiIiIiIdHkKsUREREREREREpMtTiCUiIiIiIiIiIl2eQiwREREREREREenyFGKJiIiIiHRT3/ve97jkkks6uwwR6SF27NiBZVmsW7fupM+VkZHBM888c9LnETmUQizpNdryhiwi0pJXX32V+Pj4zi5DREREpFOtXr2am266KfTasiz++te/dl5B0iMoxJJuz+fzdXYJIiIiIt2SMQa/39/ZZYhID1JfXw9AUlISkZGRnVyN9DQKsaRTOI7DE088wdChQ/F6vQwaNIhHH30UgHvuuYdhw4YRGRnJ4MGDeeCBB5oEVQ899BDjx4/nlVdeYfDgwXi9XowxvPfee5x++unEx8fTp08fvvWtb7F9+/bQcZmZmQCccsopWJbF2Wef3aHvWUS6j5buUcuWLcOyLEpLS0P7rlu3Dsuy2LFjB8uWLePaa6+lrKwMy7KwLIuHHnqo096HiHQPR/tctGHDBs455xwiIiLo06cPN910E5WVlS2eq66ujttuu43k5GTCw8M5/fTTWb16dWh7433s/fffZ+LEiXi9XpYvX97u71FEupaj3XcOFQgEuP7668nMzCQiIoLhw4fz7LPPNtmnsVvz/PnzSUlJYdiwYUDT7oQZGRkAXHrppViWRUZGBjt27MC2bT777LMm53vuuedIT0/HGNP2b1y6PXdnFyC907333suvf/1rnn76aU4//XQKCwvJyckBICYmhldffZWUlBQ2bNjAjTfeSExMDHfffXfo+G3btvHmm2/y9ttv43K5AKiqquKOO+5g7NixVFVVMW/ePC699FLWrVuHbdt8+umnTJ48mSVLljB69GjCwsI65b2LSNd3tHvU0UybNo1nnnmGefPmsXnzZgCio6Pbu1wR6eZauudUV1dzwQUXMGXKFFavXk1xcTE33HADt9xyC6+++mqz57r77rt5++23+d3vfkd6ejoLFizgG9/4Btu2bSMxMbHJfj/72c8YPHiwukCL9ELH+1nHcRxSU1N588036du3LytWrOCmm25iwIABXHHFFaH9PvzwQ2JjY1m8eHGz4dPq1atJTk5m4cKFXHDBBbhcLpKSkpgxYwYLFy5k4sSJoX0XLlzI9773PSzLap83L92bEelg5eXlxuv1ml//+tfHtf+CBQvMhAkTQq8ffPBB4/F4THFx8VGPKy4uNoDZsGGDMcaYvLw8A5i1a9eecO0i0vMd7R61dOlSA5gDBw6E1q1du9YAJi8vzxhjzMKFC01cXFzHFCsi3d7R7jkvv/yySUhIMJWVlaF1//jHP4xt26aoqMgYY8w111xjLr74YmOMMZWVlcbj8Zg//vGPof3r6+tNSkqKWbBggTHm4H3sr3/9azu+KxHpyo523zme70w333yzmTVrVuj1NddcY/r162fq6uqa7Jeenm6efvrp0GvAvPPOO032eeONN0xCQoKpra01xhizbt06Y1lW6HOVyOHUnVA6XHZ2NnV1dZx77rnNbn/rrbc4/fTT6d+/P9HR0TzwwAPk5+c32Sc9PZ2kpKQm67Zv386VV17J4MGDiY2NDXUfPPxYEZGjOdY9SkSkLR3tnpOdnc24ceOIiooKrZs+fTqO44Raex5q+/bt+Hw+pk+fHlrn8XiYPHky2dnZTfY9tNWDiPQurf2s8+KLLzJx4kSSkpKIjo7m17/+9RHfscaOHXtCPV0uueQS3G4377zzDgCvvPIKX//610PdD0UOpxBLOlxERESL21auXMl3vvMdZs6cyaJFi1i7di333XdfaHDARod+mGt00UUXsX//fn7961+zatUqVq1aBXDEsSIiR3O0e5RtB//ZNIc0k9fkEiJyMo52zzHGtNidprn1jfemw7c1d57mPkuJSO9wtPvO4d58801uv/12rrvuOj744APWrVvHtddee1zfz45HWFgYc+bMYeHChdTX1/N///d/XHfddSd0LukdFGJJh8vKyiIiIoIPP/zwiG2ffPIJ6enp3HfffUycOJGsrCx27tx5zHPu37+f7Oxs7r//fs4991xGjhzJgQMHmuzT+MtAIBBomzciIj3S0e5RjS1ACwsLQ+vWrVvXZJ+wsDDdZ0TkuB3tnjNq1CjWrVtHVVVVaN0nn3yCbduhgZMPNXToUMLCwvj4449D63w+H5999hkjR45snzcgIt3O0e47h1u+fDnTpk3j5ptv5pRTTmHo0KFNJs9qDY/H0+xnpBtuuIElS5bw/PPP4/P5uOyyy07o/NI7aGB36XDh4eHcc8893H333YSFhTF9+nT27t3Lxo0bGTp0KPn5+bz++utMmjSJf/zjH6GmpUeTkJBAnz59ePnllxkwYAD5+fn8+Mc/brJPcnIyERERvPfee6SmphIeHk5cXFx7vU0R6aaOdo+6+uqrSUtL46GHHuKnP/0pW7du5amnnmpyfEZGBpWVlXz44YeMGzeOyMhITS8tIi062j3nu9/9Lg8++CDXXHMNDz30EHv37uXWW29lzpw59OvX74hzRUVF8cMf/pC77rqLxMREBg0axIIFC6iurub666/vhHcnIl3R0e47h3cxHDp0KL///e95//33yczM5A9/+AOrV68ODd3SGhkZGXz44YdMnz4dr9dLQkICACNHjmTKlCncc889XHfdda1qKSa9j1piSad44IEHuPPOO5k3bx4jR45k9uzZFBcXc/HFF3P77bdzyy23MH78eFasWMEDDzxwzPPZts3rr7/OmjVrGDNmDLfffjtPPvlkk33cbje/+MUveOmll0hJSeHiiy9ur7cnIt1cS/coj8fDn/70J3Jychg3bhxPPPEEP/3pT5scO23aNH7wgx8we/ZskpKSWLBgQSe9CxHpLlq650RGRvL+++9TUlLCpEmTuPzyyzn33HP55S9/2eK5Hn/8cWbNmsWcOXM49dRT2bZtG++//37oy6KICLR83zncD37wAy677DJmz57Naaedxv79+7n55ptP6JpPPfUUixcvJi0tjVNOOaXJtuuvv576+np1JZRjsoxpZv5LEREREREREZEO8Oijj/L666+zYcOGzi5Fuji1xBIRERERERGRDldZWcnq1at57rnnuO222zq7HOkGFGKJiIiIiIiISIe75ZZbOP300znrrLPUlVCOi7oTioiIiIiIiIhIl6eWWCIiIiIiIiIi0uUpxBIRERERERERkS5PIZaIiIiIiIiIiHR5CrFERERERERERKTLU4glIiIiIiIiIiJdnkIsERERERERERHp8hRiiYiIiIiIiIhIl6cQS0REREREREREurz/Hwb4EbjIKFPUAAAAAElFTkSuQmCC", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "import seaborn as sns\n", "import matplotlib.pyplot as plt\n", "\n", "fig, ax = plt.subplots(figsize=(15,6))\n", "sns.violinplot(data=data.loc[:,['carat','cut','color','clarity']], ax=ax)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Finally, it is possible to calculate the correlation matrix, a symmetric matrix that shows the correlation among pairs of data features: values close to 1.0 highlight strong positive correlation between the selected features meaning that both features move in the same direction, whereas negative values imply variations in opposite directions." ] }, { "cell_type": "code", "execution_count": 387, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
caratcutcolorclarity
carat1.0000000.114426-0.065386-0.281218
cut0.1144261.000000-0.029128-0.118670
color-0.065386-0.0291281.0000000.032589
clarity-0.281218-0.1186700.0325891.000000
\n", "
" ], "text/plain": [ " carat cut color clarity\n", "carat 1.000000 0.114426 -0.065386 -0.281218\n", "cut 0.114426 1.000000 -0.029128 -0.118670\n", "color -0.065386 -0.029128 1.000000 0.032589\n", "clarity -0.281218 -0.118670 0.032589 1.000000" ] }, "execution_count": 387, "metadata": {}, "output_type": "execute_result" } ], "source": [ "data.loc[:,['carat','cut','color','clarity']].corr()" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "Python 3 (ipykernel)", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.9.16" } }, "nbformat": 4, "nbformat_minor": 2 }