diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..76b9408
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,48 @@
+
+# Created by https://www.toptal.com/developers/gitignore/api/jupyternotebooks,macos
+# Edit at https://www.toptal.com/developers/gitignore?templates=jupyternotebooks,macos
+
+### JupyterNotebooks ###
+# gitignore template for Jupyter Notebooks
+# website: http://jupyter.org/
+
+.ipynb_checkpoints
+*/.ipynb_checkpoints/*
+
+# IPython
+profile_default/
+ipython_config.py
+
+# Remove previous ipynb_checkpoints
+# git rm -r .ipynb_checkpoints/
+
+### macOS ###
+# General
+.DS_Store
+.AppleDouble
+.LSOverride
+
+# Icon must end with two \r
+Icon
+
+
+# Thumbnails
+._*
+
+# Files that might appear in the root of a volume
+.DocumentRevisions-V100
+.fseventsd
+.Spotlight-V100
+.TemporaryItems
+.Trashes
+.VolumeIcon.icns
+.com.apple.timemachine.donotpresent
+
+# Directories potentially created on remote AFP share
+.AppleDB
+.AppleDesktop
+Network Trash Folder
+Temporary Items
+.apdisk
+
+# End of https://www.toptal.com/developers/gitignore/api/jupyternotebooks,macos
\ No newline at end of file
diff --git a/your-project/AirQualityDataset.ipynb b/your-project/AirQualityDataset.ipynb
new file mode 100644
index 0000000..e375af8
--- /dev/null
+++ b/your-project/AirQualityDataset.ipynb
@@ -0,0 +1,260 @@
+{
+ "cells": [
+ {
+ "cell_type": "code",
+ "execution_count": 3,
+ "id": "streaming-stereo",
+ "metadata": {
+ "ExecuteTime": {
+ "end_time": "2021-03-30T15:53:34.467216Z",
+ "start_time": "2021-03-30T15:53:34.316194Z"
+ }
+ },
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "
\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " Station | \n",
+ " Air Quality | \n",
+ " Longitude | \n",
+ " Latitude | \n",
+ " O3 Hour | \n",
+ " O3 Quality | \n",
+ " O3 Value | \n",
+ " NO2 Hour | \n",
+ " NO2 Quality | \n",
+ " NO2 Value | \n",
+ " PM10 Hour | \n",
+ " PM10 Quality | \n",
+ " PM10 Value | \n",
+ " Generated | \n",
+ " Date Time | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " | 0 | \n",
+ " Barcelona - Sants | \n",
+ " Good | \n",
+ " 2.1331 | \n",
+ " 41.3788 | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " 0h | \n",
+ " Good | \n",
+ " 84.0 | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " 01/11/2018 0:00 | \n",
+ " 1541027104 | \n",
+ "
\n",
+ " \n",
+ " | 1 | \n",
+ " Barcelona - Eixample | \n",
+ " Moderate | \n",
+ " 2.1538 | \n",
+ " 41.3853 | \n",
+ " 0h | \n",
+ " Good | \n",
+ " 1.0 | \n",
+ " 0h | \n",
+ " Moderate | \n",
+ " 113.0 | \n",
+ " 0h | \n",
+ " Good | \n",
+ " 36.0 | \n",
+ " 01/11/2018 0:00 | \n",
+ " 1541027104 | \n",
+ "
\n",
+ " \n",
+ " | 2 | \n",
+ " Barcelona - Gràcia | \n",
+ " Good | \n",
+ " 2.1534 | \n",
+ " 41.3987 | \n",
+ " 0h | \n",
+ " Good | \n",
+ " 10.0 | \n",
+ " 0h | \n",
+ " Good | \n",
+ " 73.0 | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " 01/11/2018 0:00 | \n",
+ " 1541027104 | \n",
+ "
\n",
+ " \n",
+ " | 3 | \n",
+ " Barcelona - Ciutadella | \n",
+ " Good | \n",
+ " 2.1874 | \n",
+ " 41.3864 | \n",
+ " 0h | \n",
+ " Good | \n",
+ " 2.0 | \n",
+ " 0h | \n",
+ " Good | \n",
+ " 86.0 | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " 01/11/2018 0:00 | \n",
+ " 1541027104 | \n",
+ "
\n",
+ " \n",
+ " | 4 | \n",
+ " Barcelona - Vall Hebron | \n",
+ " Good | \n",
+ " 2.1480 | \n",
+ " 41.4261 | \n",
+ " 0h | \n",
+ " Good | \n",
+ " 7.0 | \n",
+ " 0h | \n",
+ " Good | \n",
+ " 69.0 | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " 01/11/2018 0:00 | \n",
+ " 1541027104 | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " Station Air Quality Longitude Latitude O3 Hour \\\n",
+ "0 Barcelona - Sants Good 2.1331 41.3788 NaN \n",
+ "1 Barcelona - Eixample Moderate 2.1538 41.3853 0h \n",
+ "2 Barcelona - Gràcia Good 2.1534 41.3987 0h \n",
+ "3 Barcelona - Ciutadella Good 2.1874 41.3864 0h \n",
+ "4 Barcelona - Vall Hebron Good 2.1480 41.4261 0h \n",
+ "\n",
+ " O3 Quality O3 Value NO2 Hour NO2 Quality NO2 Value PM10 Hour PM10 Quality \\\n",
+ "0 NaN NaN 0h Good 84.0 NaN NaN \n",
+ "1 Good 1.0 0h Moderate 113.0 0h Good \n",
+ "2 Good 10.0 0h Good 73.0 NaN NaN \n",
+ "3 Good 2.0 0h Good 86.0 NaN NaN \n",
+ "4 Good 7.0 0h Good 69.0 NaN NaN \n",
+ "\n",
+ " PM10 Value Generated Date Time \n",
+ "0 NaN 01/11/2018 0:00 1541027104 \n",
+ "1 36.0 01/11/2018 0:00 1541027104 \n",
+ "2 NaN 01/11/2018 0:00 1541027104 \n",
+ "3 NaN 01/11/2018 0:00 1541027104 \n",
+ "4 NaN 01/11/2018 0:00 1541027104 "
+ ]
+ },
+ "execution_count": 3,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "import pandas as pd\n",
+ "\n",
+ "data = pd.read_csv('../datasets/2.-Urban-Environment/air-quality-nov-2017.csv')\n",
+ "\n",
+ "data.head()"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "published-restaurant",
+ "metadata": {},
+ "outputs": [],
+ "source": []
+ }
+ ],
+ "metadata": {
+ "kernelspec": {
+ "display_name": "Python 3",
+ "language": "python",
+ "name": "python3"
+ },
+ "language_info": {
+ "codemirror_mode": {
+ "name": "ipython",
+ "version": 3
+ },
+ "file_extension": ".py",
+ "mimetype": "text/x-python",
+ "name": "python",
+ "nbconvert_exporter": "python",
+ "pygments_lexer": "ipython3",
+ "version": "3.8.2"
+ },
+ "latex_envs": {
+ "LaTeX_envs_menu_present": true,
+ "autoclose": false,
+ "autocomplete": true,
+ "bibliofile": "biblio.bib",
+ "cite_by": "apalike",
+ "current_citInitial": 1,
+ "eqLabelWithNumbers": true,
+ "eqNumInitial": 1,
+ "hotkeys": {
+ "equation": "Ctrl-E",
+ "itemize": "Ctrl-I"
+ },
+ "labels_anchors": false,
+ "latex_user_defs": false,
+ "report_style_numbering": false,
+ "user_envs_cfg": false
+ },
+ "varInspector": {
+ "cols": {
+ "lenName": 16,
+ "lenType": 16,
+ "lenVar": 40
+ },
+ "kernels_config": {
+ "python": {
+ "delete_cmd_postfix": "",
+ "delete_cmd_prefix": "del ",
+ "library": "var_list.py",
+ "varRefreshCmd": "print(var_dic_list())"
+ },
+ "r": {
+ "delete_cmd_postfix": ") ",
+ "delete_cmd_prefix": "rm(",
+ "library": "var_list.r",
+ "varRefreshCmd": "cat(var_dic_list()) "
+ }
+ },
+ "types_to_exclude": [
+ "module",
+ "function",
+ "builtin_function_or_method",
+ "instance",
+ "_Feature"
+ ],
+ "window_display": false
+ }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 5
+}
diff --git a/your-project/NO2_analysis.ipynb b/your-project/NO2_analysis.ipynb
new file mode 100644
index 0000000..1cfdd3d
--- /dev/null
+++ b/your-project/NO2_analysis.ipynb
@@ -0,0 +1,1567 @@
+{
+ "cells": [
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "# NO2 Pollution Barcelona"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "Air Quality info: https://www.airnow.gov/sites/default/files/2018-06/no2.pdf"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 1,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " Station | \n",
+ " Air Quality | \n",
+ " Longitude | \n",
+ " Latitude | \n",
+ " O3 Hour | \n",
+ " O3 Quality | \n",
+ " O3 Value | \n",
+ " NO2 Hour | \n",
+ " NO2 Quality | \n",
+ " NO2 Value | \n",
+ " PM10 Hour | \n",
+ " PM10 Quality | \n",
+ " PM10 Value | \n",
+ " Generated | \n",
+ " Date Time | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " | 0 | \n",
+ " Barcelona - Sants | \n",
+ " Good | \n",
+ " 2.1331 | \n",
+ " 41.3788 | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " 0h | \n",
+ " Good | \n",
+ " 84.0 | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " 01/11/2018 0:00 | \n",
+ " 1541027104 | \n",
+ "
\n",
+ " \n",
+ " | 1 | \n",
+ " Barcelona - Eixample | \n",
+ " Moderate | \n",
+ " 2.1538 | \n",
+ " 41.3853 | \n",
+ " 0h | \n",
+ " Good | \n",
+ " 1.0 | \n",
+ " 0h | \n",
+ " Moderate | \n",
+ " 113.0 | \n",
+ " 0h | \n",
+ " Good | \n",
+ " 36.0 | \n",
+ " 01/11/2018 0:00 | \n",
+ " 1541027104 | \n",
+ "
\n",
+ " \n",
+ " | 2 | \n",
+ " Barcelona - Gràcia | \n",
+ " Good | \n",
+ " 2.1534 | \n",
+ " 41.3987 | \n",
+ " 0h | \n",
+ " Good | \n",
+ " 10.0 | \n",
+ " 0h | \n",
+ " Good | \n",
+ " 73.0 | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " 01/11/2018 0:00 | \n",
+ " 1541027104 | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " Station Air Quality Longitude Latitude O3 Hour O3 Quality \\\n",
+ "0 Barcelona - Sants Good 2.1331 41.3788 NaN NaN \n",
+ "1 Barcelona - Eixample Moderate 2.1538 41.3853 0h Good \n",
+ "2 Barcelona - Gràcia Good 2.1534 41.3987 0h Good \n",
+ "\n",
+ " O3 Value NO2 Hour NO2 Quality NO2 Value PM10 Hour PM10 Quality \\\n",
+ "0 NaN 0h Good 84.0 NaN NaN \n",
+ "1 1.0 0h Moderate 113.0 0h Good \n",
+ "2 10.0 0h Good 73.0 NaN NaN \n",
+ "\n",
+ " PM10 Value Generated Date Time \n",
+ "0 NaN 01/11/2018 0:00 1541027104 \n",
+ "1 36.0 01/11/2018 0:00 1541027104 \n",
+ "2 NaN 01/11/2018 0:00 1541027104 "
+ ]
+ },
+ "execution_count": 1,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "# Importing packages and data\n",
+ "\n",
+ "import pandas as pd\n",
+ "import re\n",
+ "\n",
+ "df = pd.read_csv('../datasets/2.-Urban-Environment/air-quality-nov-2017.csv')\n",
+ "\n",
+ "df.head(3)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 2,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "#creating no2 df and renaming columns\n",
+ "\n",
+ "df_no2 = df[['Station', 'Air Quality', 'Longitude', 'Latitude', 'NO2 Hour', 'NO2 Quality', 'NO2 Value', 'Generated', 'Date Time']].copy()\n",
+ "df_no2.columns = ['station', 'air_quality', 'longitude', 'latitude', 'no2_hour', 'no2_quality', 'no2_value', 'generated', 'date_time']"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "**Min, Max, Mean, Median NO2 Value by station:**"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 3,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " min | \n",
+ " max | \n",
+ " mean | \n",
+ "
\n",
+ " \n",
+ " | station | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " | Barcelona - Ciutadella | \n",
+ " 5.0 | \n",
+ " 88.0 | \n",
+ " 39.855920 | \n",
+ "
\n",
+ " \n",
+ " | Barcelona - Eixample | \n",
+ " 17.0 | \n",
+ " 113.0 | \n",
+ " 56.240683 | \n",
+ "
\n",
+ " \n",
+ " | Barcelona - Gràcia | \n",
+ " 6.0 | \n",
+ " 117.0 | \n",
+ " 44.574534 | \n",
+ "
\n",
+ " \n",
+ " | Barcelona - Observ Fabra | \n",
+ " 1.0 | \n",
+ " 71.0 | \n",
+ " 11.449213 | \n",
+ "
\n",
+ " \n",
+ " | Barcelona - Palau Reial | \n",
+ " 1.0 | \n",
+ " 99.0 | \n",
+ " 27.974322 | \n",
+ "
\n",
+ " \n",
+ " | Barcelona - Poblenou | \n",
+ " 5.0 | \n",
+ " 105.0 | \n",
+ " 41.161103 | \n",
+ "
\n",
+ " \n",
+ " | Barcelona - Sants | \n",
+ " 7.0 | \n",
+ " 89.0 | \n",
+ " 36.359165 | \n",
+ "
\n",
+ " \n",
+ " | Barcelona - Vall Hebron | \n",
+ " 6.0 | \n",
+ " 91.0 | \n",
+ " 30.812940 | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " min max mean\n",
+ "station \n",
+ "Barcelona - Ciutadella 5.0 88.0 39.855920\n",
+ "Barcelona - Eixample 17.0 113.0 56.240683\n",
+ "Barcelona - Gràcia 6.0 117.0 44.574534\n",
+ "Barcelona - Observ Fabra 1.0 71.0 11.449213\n",
+ "Barcelona - Palau Reial 1.0 99.0 27.974322\n",
+ "Barcelona - Poblenou 5.0 105.0 41.161103\n",
+ "Barcelona - Sants 7.0 89.0 36.359165\n",
+ "Barcelona - Vall Hebron 6.0 91.0 30.812940"
+ ]
+ },
+ "execution_count": 3,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "df_no2.groupby('station').no2_value.agg(['min', 'max', 'mean'])"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "**The overall highest values:**"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 4,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "df_no2_short = df_no2[['station', 'no2_hour', 'no2_quality', 'no2_value']].copy()"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 5,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " NO2 Time | \n",
+ " NO2 Quality | \n",
+ " NO2 Value | \n",
+ "
\n",
+ " \n",
+ " | station | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " | Barcelona - Gràcia | \n",
+ " 10h | \n",
+ " Moderate | \n",
+ " 117.0 | \n",
+ "
\n",
+ " \n",
+ " | Barcelona - Gràcia | \n",
+ " 9h | \n",
+ " Moderate | \n",
+ " 116.0 | \n",
+ "
\n",
+ " \n",
+ " | Barcelona - Gràcia | \n",
+ " 9h | \n",
+ " Moderate | \n",
+ " 115.0 | \n",
+ "
\n",
+ " \n",
+ " | Barcelona - Eixample | \n",
+ " 0h | \n",
+ " Moderate | \n",
+ " 113.0 | \n",
+ "
\n",
+ " \n",
+ " | Barcelona - Eixample | \n",
+ " 9h | \n",
+ " Moderate | \n",
+ " 112.0 | \n",
+ "
\n",
+ " \n",
+ " | Barcelona - Eixample | \n",
+ " 11h | \n",
+ " Moderate | \n",
+ " 109.0 | \n",
+ "
\n",
+ " \n",
+ " | Barcelona - Eixample | \n",
+ " 10h | \n",
+ " Moderate | \n",
+ " 108.0 | \n",
+ "
\n",
+ " \n",
+ " | Barcelona - Gràcia | \n",
+ " 11h | \n",
+ " Moderate | \n",
+ " 107.0 | \n",
+ "
\n",
+ " \n",
+ " | Barcelona - Eixample | \n",
+ " 10h | \n",
+ " Moderate | \n",
+ " 105.0 | \n",
+ "
\n",
+ " \n",
+ " | Barcelona - Poblenou | \n",
+ " 20h | \n",
+ " Moderate | \n",
+ " 105.0 | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " NO2 Time NO2 Quality NO2 Value\n",
+ "station \n",
+ "Barcelona - Gràcia 10h Moderate 117.0\n",
+ "Barcelona - Gràcia 9h Moderate 116.0\n",
+ "Barcelona - Gràcia 9h Moderate 115.0\n",
+ "Barcelona - Eixample 0h Moderate 113.0\n",
+ "Barcelona - Eixample 9h Moderate 112.0\n",
+ "Barcelona - Eixample 11h Moderate 109.0\n",
+ "Barcelona - Eixample 10h Moderate 108.0\n",
+ "Barcelona - Gràcia 11h Moderate 107.0\n",
+ "Barcelona - Eixample 10h Moderate 105.0\n",
+ "Barcelona - Poblenou 20h Moderate 105.0"
+ ]
+ },
+ "execution_count": 5,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "df_no2_short.set_index('station', inplace=True)\n",
+ "largest = df_no2_short.nlargest(columns='no2_value', n = 10)\n",
+ "largest.columns = ['NO2 Time', 'NO2 Quality', 'NO2 Value']\n",
+ "largest"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "**Hourly NO2 data**"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 8,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " station | \n",
+ " air_quality | \n",
+ " longitude | \n",
+ " latitude | \n",
+ " no2_hour | \n",
+ " no2_quality | \n",
+ " no2_value | \n",
+ " generated | \n",
+ " date_time | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " | 0 | \n",
+ " Barcelona - Sants | \n",
+ " Good | \n",
+ " 2.1331 | \n",
+ " 41.3788 | \n",
+ " 0h | \n",
+ " Good | \n",
+ " 84.0 | \n",
+ " 01/11/2018 0:00 | \n",
+ " 1541027104 | \n",
+ "
\n",
+ " \n",
+ " | 1 | \n",
+ " Barcelona - Eixample | \n",
+ " Moderate | \n",
+ " 2.1538 | \n",
+ " 41.3853 | \n",
+ " 0h | \n",
+ " Moderate | \n",
+ " 113.0 | \n",
+ " 01/11/2018 0:00 | \n",
+ " 1541027104 | \n",
+ "
\n",
+ " \n",
+ " | 2 | \n",
+ " Barcelona - Gràcia | \n",
+ " Good | \n",
+ " 2.1534 | \n",
+ " 41.3987 | \n",
+ " 0h | \n",
+ " Good | \n",
+ " 73.0 | \n",
+ " 01/11/2018 0:00 | \n",
+ " 1541027104 | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " station air_quality longitude latitude no2_hour no2_quality \\\n",
+ "0 Barcelona - Sants Good 2.1331 41.3788 0h Good \n",
+ "1 Barcelona - Eixample Moderate 2.1538 41.3853 0h Moderate \n",
+ "2 Barcelona - Gràcia Good 2.1534 41.3987 0h Good \n",
+ "\n",
+ " no2_value generated date_time \n",
+ "0 84.0 01/11/2018 0:00 1541027104 \n",
+ "1 113.0 01/11/2018 0:00 1541027104 \n",
+ "2 73.0 01/11/2018 0:00 1541027104 "
+ ]
+ },
+ "execution_count": 8,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "# Dropping missing values\n",
+ "\n",
+ "nantodrop = df_no2[df_no2['no2_value'].isna() == True].index.tolist()\n",
+ "df_no2 = df_no2.drop(nantodrop)\n",
+ "df_no2.reset_index(drop=True,inplace=True)\n",
+ "\n",
+ "df_no2.head(3)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 9,
+ "metadata": {
+ "scrolled": true
+ },
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " station | \n",
+ " air_quality | \n",
+ " longitude | \n",
+ " latitude | \n",
+ " no2_quality | \n",
+ " no2_value | \n",
+ " generated | \n",
+ " date_time | \n",
+ " Time | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " | 0 | \n",
+ " Barcelona - Sants | \n",
+ " Good | \n",
+ " 2.1331 | \n",
+ " 41.3788 | \n",
+ " Good | \n",
+ " 84.0 | \n",
+ " 01/11/2018 0:00 | \n",
+ " 1541027104 | \n",
+ " 0 | \n",
+ "
\n",
+ " \n",
+ " | 1 | \n",
+ " Barcelona - Eixample | \n",
+ " Moderate | \n",
+ " 2.1538 | \n",
+ " 41.3853 | \n",
+ " Moderate | \n",
+ " 113.0 | \n",
+ " 01/11/2018 0:00 | \n",
+ " 1541027104 | \n",
+ " 0 | \n",
+ "
\n",
+ " \n",
+ " | 2 | \n",
+ " Barcelona - Gràcia | \n",
+ " Good | \n",
+ " 2.1534 | \n",
+ " 41.3987 | \n",
+ " Good | \n",
+ " 73.0 | \n",
+ " 01/11/2018 0:00 | \n",
+ " 1541027104 | \n",
+ " 0 | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " station air_quality longitude latitude no2_quality \\\n",
+ "0 Barcelona - Sants Good 2.1331 41.3788 Good \n",
+ "1 Barcelona - Eixample Moderate 2.1538 41.3853 Moderate \n",
+ "2 Barcelona - Gràcia Good 2.1534 41.3987 Good \n",
+ "\n",
+ " no2_value generated date_time Time \n",
+ "0 84.0 01/11/2018 0:00 1541027104 0 \n",
+ "1 113.0 01/11/2018 0:00 1541027104 0 \n",
+ "2 73.0 01/11/2018 0:00 1541027104 0 "
+ ]
+ },
+ "execution_count": 9,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "#Removing \"h\" from Hour column elements in a new column\n",
+ "\n",
+ "df_no2['time'] = list(map(lambda x: int(re.findall(r\"\\d+\",x)[0]),df_no2['no2_hour']))\n",
+ "df_no2.rename(columns={'time':'Time'},inplace=True)\n",
+ "df_no2.drop(columns=['no2_hour'],inplace=True)\n",
+ "df_no2.head(3)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 10,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " min | \n",
+ " max | \n",
+ " mean | \n",
+ "
\n",
+ " \n",
+ " | Time | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " | 0 | \n",
+ " 2.0 | \n",
+ " 113.0 | \n",
+ " 42.854890 | \n",
+ "
\n",
+ " \n",
+ " | 1 | \n",
+ " 2.0 | \n",
+ " 96.0 | \n",
+ " 35.714286 | \n",
+ "
\n",
+ " \n",
+ " | 2 | \n",
+ " 2.0 | \n",
+ " 86.0 | \n",
+ " 30.235808 | \n",
+ "
\n",
+ " \n",
+ " | 3 | \n",
+ " 1.0 | \n",
+ " 77.0 | \n",
+ " 26.772926 | \n",
+ "
\n",
+ " \n",
+ " | 4 | \n",
+ " 1.0 | \n",
+ " 65.0 | \n",
+ " 24.644444 | \n",
+ "
\n",
+ " \n",
+ " | 5 | \n",
+ " 1.0 | \n",
+ " 67.0 | \n",
+ " 23.298701 | \n",
+ "
\n",
+ " \n",
+ " | 6 | \n",
+ " 1.0 | \n",
+ " 64.0 | \n",
+ " 24.314894 | \n",
+ "
\n",
+ " \n",
+ " | 7 | \n",
+ " 1.0 | \n",
+ " 80.0 | \n",
+ " 30.372294 | \n",
+ "
\n",
+ " \n",
+ " | 8 | \n",
+ " 1.0 | \n",
+ " 103.0 | \n",
+ " 40.004237 | \n",
+ "
\n",
+ " \n",
+ " | 9 | \n",
+ " 1.0 | \n",
+ " 116.0 | \n",
+ " 46.268908 | \n",
+ "
\n",
+ " \n",
+ " | 10 | \n",
+ " 1.0 | \n",
+ " 117.0 | \n",
+ " 43.719665 | \n",
+ "
\n",
+ " \n",
+ " | 11 | \n",
+ " 1.0 | \n",
+ " 109.0 | \n",
+ " 38.466667 | \n",
+ "
\n",
+ " \n",
+ " | 12 | \n",
+ " 2.0 | \n",
+ " 80.0 | \n",
+ " 30.612335 | \n",
+ "
\n",
+ " \n",
+ " | 13 | \n",
+ " 1.0 | \n",
+ " 83.0 | \n",
+ " 27.261411 | \n",
+ "
\n",
+ " \n",
+ " | 14 | \n",
+ " 2.0 | \n",
+ " 71.0 | \n",
+ " 28.053398 | \n",
+ "
\n",
+ " \n",
+ " | 15 | \n",
+ " 2.0 | \n",
+ " 88.0 | \n",
+ " 28.342723 | \n",
+ "
\n",
+ " \n",
+ " | 16 | \n",
+ " 3.0 | \n",
+ " 84.0 | \n",
+ " 28.910714 | \n",
+ "
\n",
+ " \n",
+ " | 17 | \n",
+ " 3.0 | \n",
+ " 80.0 | \n",
+ " 32.728111 | \n",
+ "
\n",
+ " \n",
+ " | 18 | \n",
+ " 6.0 | \n",
+ " 89.0 | \n",
+ " 42.253219 | \n",
+ "
\n",
+ " \n",
+ " | 19 | \n",
+ " 6.0 | \n",
+ " 101.0 | \n",
+ " 49.320000 | \n",
+ "
\n",
+ " \n",
+ " | 20 | \n",
+ " 4.0 | \n",
+ " 105.0 | \n",
+ " 50.504505 | \n",
+ "
\n",
+ " \n",
+ " | 21 | \n",
+ " 4.0 | \n",
+ " 97.0 | \n",
+ " 48.506726 | \n",
+ "
\n",
+ " \n",
+ " | 22 | \n",
+ " 3.0 | \n",
+ " 97.0 | \n",
+ " 44.532967 | \n",
+ "
\n",
+ " \n",
+ " | 23 | \n",
+ " 3.0 | \n",
+ " 88.0 | \n",
+ " 39.039735 | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " min max mean\n",
+ "Time \n",
+ "0 2.0 113.0 42.854890\n",
+ "1 2.0 96.0 35.714286\n",
+ "2 2.0 86.0 30.235808\n",
+ "3 1.0 77.0 26.772926\n",
+ "4 1.0 65.0 24.644444\n",
+ "5 1.0 67.0 23.298701\n",
+ "6 1.0 64.0 24.314894\n",
+ "7 1.0 80.0 30.372294\n",
+ "8 1.0 103.0 40.004237\n",
+ "9 1.0 116.0 46.268908\n",
+ "10 1.0 117.0 43.719665\n",
+ "11 1.0 109.0 38.466667\n",
+ "12 2.0 80.0 30.612335\n",
+ "13 1.0 83.0 27.261411\n",
+ "14 2.0 71.0 28.053398\n",
+ "15 2.0 88.0 28.342723\n",
+ "16 3.0 84.0 28.910714\n",
+ "17 3.0 80.0 32.728111\n",
+ "18 6.0 89.0 42.253219\n",
+ "19 6.0 101.0 49.320000\n",
+ "20 4.0 105.0 50.504505\n",
+ "21 4.0 97.0 48.506726\n",
+ "22 3.0 97.0 44.532967\n",
+ "23 3.0 88.0 39.039735"
+ ]
+ },
+ "execution_count": 10,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "#Getting Hourly Data\n",
+ "\n",
+ "hourly = df_no2.groupby('Time').no2_value.agg(['min', 'max', 'mean'])\n",
+ "hourly"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 12,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " min | \n",
+ " max | \n",
+ " mean | \n",
+ "
\n",
+ " \n",
+ " | Time | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " | 0 | \n",
+ " 2.0 | \n",
+ " 113.0 | \n",
+ " 42.854890 | \n",
+ "
\n",
+ " \n",
+ " | 1 | \n",
+ " 2.0 | \n",
+ " 96.0 | \n",
+ " 35.714286 | \n",
+ "
\n",
+ " \n",
+ " | 2 | \n",
+ " 2.0 | \n",
+ " 86.0 | \n",
+ " 30.235808 | \n",
+ "
\n",
+ " \n",
+ " | 3 | \n",
+ " 1.0 | \n",
+ " 77.0 | \n",
+ " 26.772926 | \n",
+ "
\n",
+ " \n",
+ " | 4 | \n",
+ " 1.0 | \n",
+ " 65.0 | \n",
+ " 24.644444 | \n",
+ "
\n",
+ " \n",
+ " | 5 | \n",
+ " 1.0 | \n",
+ " 67.0 | \n",
+ " 23.298701 | \n",
+ "
\n",
+ " \n",
+ " | 6 | \n",
+ " 1.0 | \n",
+ " 64.0 | \n",
+ " 24.314894 | \n",
+ "
\n",
+ " \n",
+ " | 7 | \n",
+ " 1.0 | \n",
+ " 80.0 | \n",
+ " 30.372294 | \n",
+ "
\n",
+ " \n",
+ " | 8 | \n",
+ " 1.0 | \n",
+ " 103.0 | \n",
+ " 40.004237 | \n",
+ "
\n",
+ " \n",
+ " | 9 | \n",
+ " 1.0 | \n",
+ " 116.0 | \n",
+ " 46.268908 | \n",
+ "
\n",
+ " \n",
+ " | 10 | \n",
+ " 1.0 | \n",
+ " 117.0 | \n",
+ " 43.719665 | \n",
+ "
\n",
+ " \n",
+ " | 11 | \n",
+ " 1.0 | \n",
+ " 109.0 | \n",
+ " 38.466667 | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " min max mean\n",
+ "Time \n",
+ "0 2.0 113.0 42.854890\n",
+ "1 2.0 96.0 35.714286\n",
+ "2 2.0 86.0 30.235808\n",
+ "3 1.0 77.0 26.772926\n",
+ "4 1.0 65.0 24.644444\n",
+ "5 1.0 67.0 23.298701\n",
+ "6 1.0 64.0 24.314894\n",
+ "7 1.0 80.0 30.372294\n",
+ "8 1.0 103.0 40.004237\n",
+ "9 1.0 116.0 46.268908\n",
+ "10 1.0 117.0 43.719665\n",
+ "11 1.0 109.0 38.466667"
+ ]
+ },
+ "execution_count": 12,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "# Splitting Dataframe\n",
+ "\n",
+ "hourly_df1 = hourly.iloc[:12,:]\n",
+ "hourly_df2 = hourly.iloc[12:,:]\n",
+ "hourly_df1"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 10,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | Time | \n",
+ " 0 | \n",
+ " 1 | \n",
+ " 2 | \n",
+ " 3 | \n",
+ " 4 | \n",
+ " 5 | \n",
+ " 6 | \n",
+ " 7 | \n",
+ " 8 | \n",
+ " 9 | \n",
+ " ... | \n",
+ " 14 | \n",
+ " 15 | \n",
+ " 16 | \n",
+ " 17 | \n",
+ " 18 | \n",
+ " 19 | \n",
+ " 20 | \n",
+ " 21 | \n",
+ " 22 | \n",
+ " 23 | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " | min | \n",
+ " 2.00000 | \n",
+ " 2.000000 | \n",
+ " 2.000000 | \n",
+ " 1.000000 | \n",
+ " 1.000000 | \n",
+ " 1.000000 | \n",
+ " 1.000000 | \n",
+ " 1.000000 | \n",
+ " 1.000000 | \n",
+ " 1.000000 | \n",
+ " ... | \n",
+ " 2.000000 | \n",
+ " 2.000000 | \n",
+ " 3.000000 | \n",
+ " 3.000000 | \n",
+ " 6.000000 | \n",
+ " 6.00 | \n",
+ " 4.000000 | \n",
+ " 4.000000 | \n",
+ " 3.000000 | \n",
+ " 3.000000 | \n",
+ "
\n",
+ " \n",
+ " | max | \n",
+ " 113.00000 | \n",
+ " 96.000000 | \n",
+ " 86.000000 | \n",
+ " 77.000000 | \n",
+ " 65.000000 | \n",
+ " 67.000000 | \n",
+ " 64.000000 | \n",
+ " 80.000000 | \n",
+ " 103.000000 | \n",
+ " 116.000000 | \n",
+ " ... | \n",
+ " 71.000000 | \n",
+ " 88.000000 | \n",
+ " 84.000000 | \n",
+ " 80.000000 | \n",
+ " 89.000000 | \n",
+ " 101.00 | \n",
+ " 105.000000 | \n",
+ " 97.000000 | \n",
+ " 97.000000 | \n",
+ " 88.000000 | \n",
+ "
\n",
+ " \n",
+ " | mean | \n",
+ " 42.85489 | \n",
+ " 35.714286 | \n",
+ " 30.235808 | \n",
+ " 26.772926 | \n",
+ " 24.644444 | \n",
+ " 23.298701 | \n",
+ " 24.314894 | \n",
+ " 30.372294 | \n",
+ " 40.004237 | \n",
+ " 46.268908 | \n",
+ " ... | \n",
+ " 28.053398 | \n",
+ " 28.342723 | \n",
+ " 28.910714 | \n",
+ " 32.728111 | \n",
+ " 42.253219 | \n",
+ " 49.32 | \n",
+ " 50.504505 | \n",
+ " 48.506726 | \n",
+ " 44.532967 | \n",
+ " 39.039735 | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
3 rows × 24 columns
\n",
+ "
"
+ ],
+ "text/plain": [
+ "Time 0 1 2 3 4 5 \\\n",
+ "min 2.00000 2.000000 2.000000 1.000000 1.000000 1.000000 \n",
+ "max 113.00000 96.000000 86.000000 77.000000 65.000000 67.000000 \n",
+ "mean 42.85489 35.714286 30.235808 26.772926 24.644444 23.298701 \n",
+ "\n",
+ "Time 6 7 8 9 ... 14 15 \\\n",
+ "min 1.000000 1.000000 1.000000 1.000000 ... 2.000000 2.000000 \n",
+ "max 64.000000 80.000000 103.000000 116.000000 ... 71.000000 88.000000 \n",
+ "mean 24.314894 30.372294 40.004237 46.268908 ... 28.053398 28.342723 \n",
+ "\n",
+ "Time 16 17 18 19 20 21 \\\n",
+ "min 3.000000 3.000000 6.000000 6.00 4.000000 4.000000 \n",
+ "max 84.000000 80.000000 89.000000 101.00 105.000000 97.000000 \n",
+ "mean 28.910714 32.728111 42.253219 49.32 50.504505 48.506726 \n",
+ "\n",
+ "Time 22 23 \n",
+ "min 3.000000 3.000000 \n",
+ "max 97.000000 88.000000 \n",
+ "mean 44.532967 39.039735 \n",
+ "\n",
+ "[3 rows x 24 columns]"
+ ]
+ },
+ "execution_count": 10,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "hourly.T"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "**Data by Weekday:**"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 36,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "df_mon = df_no2[df_no2['generated'].str.contains('05/11/2018|12/11/2018|19/11/2018|26/11/2018')]\n",
+ "df_tue = df_no2[df_no2['generated'].str.contains('06/11/2018|13/11/2018|20/11/2018|27/11/2018')]\n",
+ "df_wed = df_no2[df_no2['generated'].str.contains('07/11/2018|14/11/2018|21/11/2018|28/11/2018')]\n",
+ "df_thu = df_no2[df_no2['generated'].str.contains('01/11/2018|08/11/2018|15/11/2018|22/11/2018|29/11/2018')]\n",
+ "df_fr = df_no2[df_no2['generated'].str.contains('02/11/2018|09/11/2018|16/11/2018|23/11/2018|30/11/2018')]\n",
+ "df_sa = df_no2[df_no2['generated'].str.contains('03/11/2018|10/11/2018|17/11/2018|24/11/2018')]\n",
+ "df_sun = df_no2[df_no2['generated'].str.contains('04/11/2018|11/11/2018|18/11/2018|25/11/2018')]"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 37,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " min | \n",
+ " max | \n",
+ " mean | \n",
+ " median | \n",
+ "
\n",
+ " \n",
+ " | station | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " | Barcelona - Ciutadella | \n",
+ " 5.0 | \n",
+ " 72.0 | \n",
+ " 34.765957 | \n",
+ " 35.0 | \n",
+ "
\n",
+ " \n",
+ " | Barcelona - Eixample | \n",
+ " 18.0 | \n",
+ " 99.0 | \n",
+ " 44.011494 | \n",
+ " 42.0 | \n",
+ "
\n",
+ " \n",
+ " | Barcelona - Gràcia | \n",
+ " 6.0 | \n",
+ " 83.0 | \n",
+ " 30.602273 | \n",
+ " 26.5 | \n",
+ "
\n",
+ " \n",
+ " | Barcelona - Observ Fabra | \n",
+ " 1.0 | \n",
+ " 24.0 | \n",
+ " 7.852632 | \n",
+ " 7.0 | \n",
+ "
\n",
+ " \n",
+ " | Barcelona - Palau Reial | \n",
+ " 2.0 | \n",
+ " 80.0 | \n",
+ " 16.808511 | \n",
+ " 12.5 | \n",
+ "
\n",
+ " \n",
+ " | Barcelona - Poblenou | \n",
+ " 6.0 | \n",
+ " 86.0 | \n",
+ " 30.648936 | \n",
+ " 26.5 | \n",
+ "
\n",
+ " \n",
+ " | Barcelona - Sants | \n",
+ " 9.0 | \n",
+ " 83.0 | \n",
+ " 24.929412 | \n",
+ " 22.0 | \n",
+ "
\n",
+ " \n",
+ " | Barcelona - Vall Hebron | \n",
+ " 7.0 | \n",
+ " 82.0 | \n",
+ " 17.670213 | \n",
+ " 13.5 | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " min max mean median\n",
+ "station \n",
+ "Barcelona - Ciutadella 5.0 72.0 34.765957 35.0\n",
+ "Barcelona - Eixample 18.0 99.0 44.011494 42.0\n",
+ "Barcelona - Gràcia 6.0 83.0 30.602273 26.5\n",
+ "Barcelona - Observ Fabra 1.0 24.0 7.852632 7.0\n",
+ "Barcelona - Palau Reial 2.0 80.0 16.808511 12.5\n",
+ "Barcelona - Poblenou 6.0 86.0 30.648936 26.5\n",
+ "Barcelona - Sants 9.0 83.0 24.929412 22.0\n",
+ "Barcelona - Vall Hebron 7.0 82.0 17.670213 13.5"
+ ]
+ },
+ "execution_count": 37,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "df_sun.groupby('station').no2_value.agg(['min', 'max', 'mean', 'median'])"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 32,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "mon_mean = df_mon['no2_value'].mean()\n",
+ "tue_mean = df_tue['no2_value'].mean()\n",
+ "wed_mean = df_wed['no2_value'].mean()\n",
+ "thu_mean = df_thu['no2_value'].mean()\n",
+ "fr_mean = df_fr['no2_value'].mean()\n",
+ "sa_mean = df_sa['no2_value'].mean()\n",
+ "sun_mean = df_sun['no2_value'].mean()"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 109,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "weekdays_list = [['Monday', mon_mean], ['Tuesday', tue_mean], ['Wednesday', wed_mean], ['Thursday', thu_mean], ['Friday', fr_mean], ['Saturday', sa_mean], ['Sunday', sun_mean]] \n",
+ "weekdays = pd.DataFrame(weekdays_list, columns = ['Weekday', 'NO2 Value Mean'])"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 110,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "weekdays.set_index('Weekday', inplace=True)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 111,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " NO2 Value Mean | \n",
+ "
\n",
+ " \n",
+ " | Weekday | \n",
+ " | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " | Monday | \n",
+ " 29.031335 | \n",
+ "
\n",
+ " \n",
+ " | Tuesday | \n",
+ " 31.291951 | \n",
+ "
\n",
+ " \n",
+ " | Wednesday | \n",
+ " 38.773427 | \n",
+ "
\n",
+ " \n",
+ " | Thursday | \n",
+ " 45.619699 | \n",
+ "
\n",
+ " \n",
+ " | Friday | \n",
+ " 44.128767 | \n",
+ "
\n",
+ " \n",
+ " | Saturday | \n",
+ " 29.661664 | \n",
+ "
\n",
+ " \n",
+ " | Sunday | \n",
+ " 25.686731 | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " NO2 Value Mean\n",
+ "Weekday \n",
+ "Monday 29.031335\n",
+ "Tuesday 31.291951\n",
+ "Wednesday 38.773427\n",
+ "Thursday 45.619699\n",
+ "Friday 44.128767\n",
+ "Saturday 29.661664\n",
+ "Sunday 25.686731"
+ ]
+ },
+ "execution_count": 111,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "weekdays"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 95,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "#Separate into one dataframe per week\n",
+ "week_1 = df_no2[df_no2['generated'].str.contains('01/11/2018|02/11/2018|03/11/2018|04/11/2018|05/11/2018|06/11/2018|07/11/2018')]\n",
+ "week_2 = df_no2[df_no2['generated'].str.contains('08/11/2018|09/11/2018|10/11/2018|11/11/2018|12/11/2018|13/11/2018|14/11/2018')]\n",
+ "week_3 = df_no2[df_no2['generated'].str.contains('15/11/2018|16/11/2018|17/11/2018|18/11/2018|19/11/2018|20/11/2018|21/11/2018')]\n",
+ "week_4 = df_no2[df_no2['generated'].str.contains('22/11/2018|23/11/2018|24/11/2018|25/11/2018|26/11/2018|27/11/2018|28/11/2018')]\n",
+ "week_5 = df_no2[df_no2['generated'].str.contains('29/11/2018|30/11/2018')]"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 96,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "w1_mean = week_1['no2_value'].mean()\n",
+ "w2_mean = week_2['no2_value'].mean()\n",
+ "w3_mean = week_3['no2_value'].mean()\n",
+ "w4_mean = week_4['no2_value'].mean()\n",
+ "w5_mean = week_5['no2_value'].mean()"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 100,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " NO2 Value | \n",
+ "
\n",
+ " \n",
+ " | Weeks | \n",
+ " | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " | Week 1 | \n",
+ " 34.013503 | \n",
+ "
\n",
+ " \n",
+ " | Week 2 | \n",
+ " 35.436096 | \n",
+ "
\n",
+ " \n",
+ " | Week 3 | \n",
+ " 32.219124 | \n",
+ "
\n",
+ " \n",
+ " | Week 4 | \n",
+ " 36.809077 | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " NO2 Value\n",
+ "Weeks \n",
+ "Week 1 34.013503\n",
+ "Week 2 35.436096\n",
+ "Week 3 32.219124\n",
+ "Week 4 36.809077"
+ ]
+ },
+ "execution_count": 100,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "# creating DataFrame for weeks\n",
+ "weeks = [['Week 1', w1_mean], ['Week 2', w2_mean], ['Week 3', w3_mean], ['Week 4', w4_mean]]\n",
+ "\n",
+ "weeksdf = pd.DataFrame(weeks,columns=['Weeks','NO2 Value']).set_index('Weeks')\n",
+ "weeksdf"
+ ]
+ }
+ ],
+ "metadata": {
+ "kernelspec": {
+ "display_name": "Python 3",
+ "language": "python",
+ "name": "python3"
+ },
+ "language_info": {
+ "codemirror_mode": {
+ "name": "ipython",
+ "version": 3
+ },
+ "file_extension": ".py",
+ "mimetype": "text/x-python",
+ "name": "python",
+ "nbconvert_exporter": "python",
+ "pygments_lexer": "ipython3",
+ "version": "3.8.5"
+ }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 4
+}
diff --git a/your-project/O3_analysis.ipynb b/your-project/O3_analysis.ipynb
new file mode 100644
index 0000000..1b975c3
--- /dev/null
+++ b/your-project/O3_analysis.ipynb
@@ -0,0 +1,2387 @@
+{
+ "cells": [
+ {
+ "cell_type": "code",
+ "execution_count": 1,
+ "metadata": {
+ "ExecuteTime": {
+ "end_time": "2021-03-30T15:53:34.467216Z",
+ "start_time": "2021-03-30T15:53:34.316194Z"
+ }
+ },
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " Station | \n",
+ " Air Quality | \n",
+ " Longitude | \n",
+ " Latitude | \n",
+ " O3 Hour | \n",
+ " O3 Quality | \n",
+ " O3 Value | \n",
+ " NO2 Hour | \n",
+ " NO2 Quality | \n",
+ " NO2 Value | \n",
+ " PM10 Hour | \n",
+ " PM10 Quality | \n",
+ " PM10 Value | \n",
+ " Generated | \n",
+ " Date Time | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " | 0 | \n",
+ " Barcelona - Sants | \n",
+ " Good | \n",
+ " 2.1331 | \n",
+ " 41.3788 | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " 0h | \n",
+ " Good | \n",
+ " 84.0 | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " 1/11/2018 0:00 | \n",
+ " 1541027104 | \n",
+ "
\n",
+ " \n",
+ " | 1 | \n",
+ " Barcelona - Eixample | \n",
+ " Moderate | \n",
+ " 2.1538 | \n",
+ " 41.3853 | \n",
+ " 0h | \n",
+ " Good | \n",
+ " 1.0 | \n",
+ " 0h | \n",
+ " Moderate | \n",
+ " 113.0 | \n",
+ " 0h | \n",
+ " Good | \n",
+ " 36.0 | \n",
+ " 1/11/2018 0:00 | \n",
+ " 1541027104 | \n",
+ "
\n",
+ " \n",
+ " | 2 | \n",
+ " Barcelona - Gràcia | \n",
+ " Good | \n",
+ " 2.1534 | \n",
+ " 41.3987 | \n",
+ " 0h | \n",
+ " Good | \n",
+ " 10.0 | \n",
+ " 0h | \n",
+ " Good | \n",
+ " 73.0 | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " 1/11/2018 0:00 | \n",
+ " 1541027104 | \n",
+ "
\n",
+ " \n",
+ " | 3 | \n",
+ " Barcelona - Ciutadella | \n",
+ " Good | \n",
+ " 2.1874 | \n",
+ " 41.3864 | \n",
+ " 0h | \n",
+ " Good | \n",
+ " 2.0 | \n",
+ " 0h | \n",
+ " Good | \n",
+ " 86.0 | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " 1/11/2018 0:00 | \n",
+ " 1541027104 | \n",
+ "
\n",
+ " \n",
+ " | 4 | \n",
+ " Barcelona - Vall Hebron | \n",
+ " Good | \n",
+ " 2.1480 | \n",
+ " 41.4261 | \n",
+ " 0h | \n",
+ " Good | \n",
+ " 7.0 | \n",
+ " 0h | \n",
+ " Good | \n",
+ " 69.0 | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " 1/11/2018 0:00 | \n",
+ " 1541027104 | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " Station Air Quality Longitude Latitude O3 Hour \\\n",
+ "0 Barcelona - Sants Good 2.1331 41.3788 NaN \n",
+ "1 Barcelona - Eixample Moderate 2.1538 41.3853 0h \n",
+ "2 Barcelona - Gràcia Good 2.1534 41.3987 0h \n",
+ "3 Barcelona - Ciutadella Good 2.1874 41.3864 0h \n",
+ "4 Barcelona - Vall Hebron Good 2.1480 41.4261 0h \n",
+ "\n",
+ " O3 Quality O3 Value NO2 Hour NO2 Quality NO2 Value PM10 Hour PM10 Quality \\\n",
+ "0 NaN NaN 0h Good 84.0 NaN NaN \n",
+ "1 Good 1.0 0h Moderate 113.0 0h Good \n",
+ "2 Good 10.0 0h Good 73.0 NaN NaN \n",
+ "3 Good 2.0 0h Good 86.0 NaN NaN \n",
+ "4 Good 7.0 0h Good 69.0 NaN NaN \n",
+ "\n",
+ " PM10 Value Generated Date Time \n",
+ "0 NaN 1/11/2018 0:00 1541027104 \n",
+ "1 36.0 1/11/2018 0:00 1541027104 \n",
+ "2 NaN 1/11/2018 0:00 1541027104 \n",
+ "3 NaN 1/11/2018 0:00 1541027104 \n",
+ "4 NaN 1/11/2018 0:00 1541027104 "
+ ]
+ },
+ "execution_count": 1,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "import pandas as pd\n",
+ "\n",
+ "data = pd.read_csv('../datasets/2.-Urban-Environment/air-quality-nov-2017.csv')\n",
+ "\n",
+ "data.head()"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 4,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " Station | \n",
+ " Air Quality | \n",
+ " Longitude | \n",
+ " Latitude | \n",
+ " O3 Hour | \n",
+ " O3 Quality | \n",
+ " O3 Value | \n",
+ " NO2 Hour | \n",
+ " NO2 Quality | \n",
+ " NO2 Value | \n",
+ " PM10 Hour | \n",
+ " PM10 Quality | \n",
+ " PM10 Value | \n",
+ " Generated | \n",
+ " Date Time | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " | 5739 | \n",
+ " Barcelona - Ciutadella | \n",
+ " Good | \n",
+ " 2.1874 | \n",
+ " 41.3864 | \n",
+ " 22h | \n",
+ " Good | \n",
+ " 10.0 | \n",
+ " 22h | \n",
+ " Good | \n",
+ " 57.0 | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " 30/11/2018 23:00 | \n",
+ " 1543615502 | \n",
+ "
\n",
+ " \n",
+ " | 5740 | \n",
+ " Barcelona - Vall Hebron | \n",
+ " Good | \n",
+ " 2.1480 | \n",
+ " 41.4261 | \n",
+ " 22h | \n",
+ " Good | \n",
+ " 32.0 | \n",
+ " 22h | \n",
+ " Good | \n",
+ " 31.0 | \n",
+ " 22h | \n",
+ " Good | \n",
+ " 21.0 | \n",
+ " 30/11/2018 23:00 | \n",
+ " 1543615502 | \n",
+ "
\n",
+ " \n",
+ " | 5741 | \n",
+ " Barcelona - Palau Reial | \n",
+ " Good | \n",
+ " 2.1151 | \n",
+ " 41.3875 | \n",
+ " 22h | \n",
+ " Good | \n",
+ " 40.0 | \n",
+ " 22h | \n",
+ " Good | \n",
+ " 20.0 | \n",
+ " 22h | \n",
+ " Good | \n",
+ " 15.0 | \n",
+ " 30/11/2018 23:00 | \n",
+ " 1543615502 | \n",
+ "
\n",
+ " \n",
+ " | 5742 | \n",
+ " Barcelona - Poblenou | \n",
+ " Good | \n",
+ " 2.2045 | \n",
+ " 41.4039 | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " 22h | \n",
+ " Good | \n",
+ " 70.0 | \n",
+ " 22h | \n",
+ " Good | \n",
+ " 25.0 | \n",
+ " 30/11/2018 23:00 | \n",
+ " 1543615502 | \n",
+ "
\n",
+ " \n",
+ " | 5743 | \n",
+ " Barcelona - Observ Fabra | \n",
+ " Good | \n",
+ " 2.1239 | \n",
+ " 41.4183 | \n",
+ " 22h | \n",
+ " Good | \n",
+ " 64.0 | \n",
+ " 22h | \n",
+ " Good | \n",
+ " 21.0 | \n",
+ " 22h | \n",
+ " Good | \n",
+ " 12.0 | \n",
+ " 30/11/2018 23:00 | \n",
+ " 1543615502 | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " Station Air Quality Longitude Latitude O3 Hour \\\n",
+ "5739 Barcelona - Ciutadella Good 2.1874 41.3864 22h \n",
+ "5740 Barcelona - Vall Hebron Good 2.1480 41.4261 22h \n",
+ "5741 Barcelona - Palau Reial Good 2.1151 41.3875 22h \n",
+ "5742 Barcelona - Poblenou Good 2.2045 41.4039 NaN \n",
+ "5743 Barcelona - Observ Fabra Good 2.1239 41.4183 22h \n",
+ "\n",
+ " O3 Quality O3 Value NO2 Hour NO2 Quality NO2 Value PM10 Hour \\\n",
+ "5739 Good 10.0 22h Good 57.0 NaN \n",
+ "5740 Good 32.0 22h Good 31.0 22h \n",
+ "5741 Good 40.0 22h Good 20.0 22h \n",
+ "5742 NaN NaN 22h Good 70.0 22h \n",
+ "5743 Good 64.0 22h Good 21.0 22h \n",
+ "\n",
+ " PM10 Quality PM10 Value Generated Date Time \n",
+ "5739 NaN NaN 30/11/2018 23:00 1543615502 \n",
+ "5740 Good 21.0 30/11/2018 23:00 1543615502 \n",
+ "5741 Good 15.0 30/11/2018 23:00 1543615502 \n",
+ "5742 Good 25.0 30/11/2018 23:00 1543615502 \n",
+ "5743 Good 12.0 30/11/2018 23:00 1543615502 "
+ ]
+ },
+ "execution_count": 4,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "data.tail()"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 9,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "Index(['Station', 'Air Quality', 'Longitude', 'Latitude', 'O3 Hour',\n",
+ " 'O3 Quality', 'O3 Value', 'NO2 Hour', 'NO2 Quality', 'NO2 Value',\n",
+ " 'PM10 Hour', 'PM10 Quality', 'PM10 Value', 'Generated', 'Date Time'],\n",
+ " dtype='object')"
+ ]
+ },
+ "execution_count": 9,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "data.columns"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 12,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "my_data=data[[\"Station\", \"O3 Hour\",\"O3 Quality\", \"O3 Value\"]]"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 13,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " Station | \n",
+ " O3 Hour | \n",
+ " O3 Quality | \n",
+ " O3 Value | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " | 0 | \n",
+ " Barcelona - Sants | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " NaN | \n",
+ "
\n",
+ " \n",
+ " | 1 | \n",
+ " Barcelona - Eixample | \n",
+ " 0h | \n",
+ " Good | \n",
+ " 1.0 | \n",
+ "
\n",
+ " \n",
+ " | 2 | \n",
+ " Barcelona - Gràcia | \n",
+ " 0h | \n",
+ " Good | \n",
+ " 10.0 | \n",
+ "
\n",
+ " \n",
+ " | 3 | \n",
+ " Barcelona - Ciutadella | \n",
+ " 0h | \n",
+ " Good | \n",
+ " 2.0 | \n",
+ "
\n",
+ " \n",
+ " | 4 | \n",
+ " Barcelona - Vall Hebron | \n",
+ " 0h | \n",
+ " Good | \n",
+ " 7.0 | \n",
+ "
\n",
+ " \n",
+ " | ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ "
\n",
+ " \n",
+ " | 5739 | \n",
+ " Barcelona - Ciutadella | \n",
+ " 22h | \n",
+ " Good | \n",
+ " 10.0 | \n",
+ "
\n",
+ " \n",
+ " | 5740 | \n",
+ " Barcelona - Vall Hebron | \n",
+ " 22h | \n",
+ " Good | \n",
+ " 32.0 | \n",
+ "
\n",
+ " \n",
+ " | 5741 | \n",
+ " Barcelona - Palau Reial | \n",
+ " 22h | \n",
+ " Good | \n",
+ " 40.0 | \n",
+ "
\n",
+ " \n",
+ " | 5742 | \n",
+ " Barcelona - Poblenou | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " NaN | \n",
+ "
\n",
+ " \n",
+ " | 5743 | \n",
+ " Barcelona - Observ Fabra | \n",
+ " 22h | \n",
+ " Good | \n",
+ " 64.0 | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
5744 rows × 4 columns
\n",
+ "
"
+ ],
+ "text/plain": [
+ " Station O3 Hour O3 Quality O3 Value\n",
+ "0 Barcelona - Sants NaN NaN NaN\n",
+ "1 Barcelona - Eixample 0h Good 1.0\n",
+ "2 Barcelona - Gràcia 0h Good 10.0\n",
+ "3 Barcelona - Ciutadella 0h Good 2.0\n",
+ "4 Barcelona - Vall Hebron 0h Good 7.0\n",
+ "... ... ... ... ...\n",
+ "5739 Barcelona - Ciutadella 22h Good 10.0\n",
+ "5740 Barcelona - Vall Hebron 22h Good 32.0\n",
+ "5741 Barcelona - Palau Reial 22h Good 40.0\n",
+ "5742 Barcelona - Poblenou NaN NaN NaN\n",
+ "5743 Barcelona - Observ Fabra 22h Good 64.0\n",
+ "\n",
+ "[5744 rows x 4 columns]"
+ ]
+ },
+ "execution_count": 13,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "my_data"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 15,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "34.082906608144356"
+ ]
+ },
+ "execution_count": 15,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "data[\"O3 Value\"].mean()"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 16,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "1.0"
+ ]
+ },
+ "execution_count": 16,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "data[\"O3 Value\"].min()"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 17,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "100.0"
+ ]
+ },
+ "execution_count": 17,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "data[\"O3 Value\"].max()"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 44,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "my_data = data[['Station', 'O3 Hour', 'O3 Quality', 'O3 Value']].copy()\n",
+ "my_data.columns = ['station', 'o3_hour', 'o3_quality', 'o3_value']"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 19,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "o3_df = data[['Station', 'Air Quality', 'Longitude', 'Latitude', 'O3 Hour', 'O3 Quality', 'O3 Value', 'Generated', 'Date Time']].copy()\n",
+ "o3_df.columns = ['station', 'air_quality', 'longitude', 'latitude', 'o3_hour', 'o3_quality', 'o3_value', 'generated', 'date_time']"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 20,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " min | \n",
+ " max | \n",
+ " mean | \n",
+ " median | \n",
+ "
\n",
+ " \n",
+ " | station | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " | Barcelona - Ciutadella | \n",
+ " 1.0 | \n",
+ " 85.0 | \n",
+ " 25.128388 | \n",
+ " 22.0 | \n",
+ "
\n",
+ " \n",
+ " | Barcelona - Eixample | \n",
+ " 1.0 | \n",
+ " 61.0 | \n",
+ " 17.038760 | \n",
+ " 14.0 | \n",
+ "
\n",
+ " \n",
+ " | Barcelona - Gràcia | \n",
+ " 1.0 | \n",
+ " 69.0 | \n",
+ " 26.675466 | \n",
+ " 26.0 | \n",
+ "
\n",
+ " \n",
+ " | Barcelona - Observ Fabra | \n",
+ " 16.0 | \n",
+ " 100.0 | \n",
+ " 65.359084 | \n",
+ " 66.0 | \n",
+ "
\n",
+ " \n",
+ " | Barcelona - Palau Reial | \n",
+ " 1.0 | \n",
+ " 64.0 | \n",
+ " 32.021398 | \n",
+ " 35.0 | \n",
+ "
\n",
+ " \n",
+ " | Barcelona - Poblenou | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " NaN | \n",
+ "
\n",
+ " \n",
+ " | Barcelona - Sants | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " NaN | \n",
+ "
\n",
+ " \n",
+ " | Barcelona - Vall Hebron | \n",
+ " 1.0 | \n",
+ " 82.0 | \n",
+ " 36.367089 | \n",
+ " 40.0 | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " min max mean median\n",
+ "station \n",
+ "Barcelona - Ciutadella 1.0 85.0 25.128388 22.0\n",
+ "Barcelona - Eixample 1.0 61.0 17.038760 14.0\n",
+ "Barcelona - Gràcia 1.0 69.0 26.675466 26.0\n",
+ "Barcelona - Observ Fabra 16.0 100.0 65.359084 66.0\n",
+ "Barcelona - Palau Reial 1.0 64.0 32.021398 35.0\n",
+ "Barcelona - Poblenou NaN NaN NaN NaN\n",
+ "Barcelona - Sants NaN NaN NaN NaN\n",
+ "Barcelona - Vall Hebron 1.0 82.0 36.367089 40.0"
+ ]
+ },
+ "execution_count": 20,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "o3_df.groupby('station').o3_value.agg(['min', 'max', 'mean', 'median'])"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 32,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "count 4101.000000\n",
+ "mean 34.082907\n",
+ "std 22.960687\n",
+ "min 1.000000\n",
+ "25% 14.000000\n",
+ "50% 34.000000\n",
+ "75% 52.000000\n",
+ "max 100.000000\n",
+ "Name: o3_value, dtype: float64"
+ ]
+ },
+ "execution_count": 32,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "o3_df[\"o3_value\"].describe()"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 33,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "2.0 258\n",
+ "1.0 125\n",
+ "3.0 124\n",
+ "41.0 77\n",
+ "47.0 77\n",
+ " ... \n",
+ "88.0 1\n",
+ "89.0 1\n",
+ "100.0 1\n",
+ "92.0 1\n",
+ "99.0 1\n",
+ "Name: o3_value, Length: 94, dtype: int64"
+ ]
+ },
+ "execution_count": 33,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "o3_df[\"o3_value\"].value_counts()"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 45,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " | \n",
+ " o3_hour | \n",
+ " o3_quality | \n",
+ "
\n",
+ " \n",
+ " | station | \n",
+ " o3_value | \n",
+ " | \n",
+ " | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " | Barcelona - Ciutadella | \n",
+ " 1.0 | \n",
+ " 9 | \n",
+ " 9 | \n",
+ "
\n",
+ " \n",
+ " | 2.0 | \n",
+ " 95 | \n",
+ " 95 | \n",
+ "
\n",
+ " \n",
+ " | 3.0 | \n",
+ " 33 | \n",
+ " 33 | \n",
+ "
\n",
+ " \n",
+ " | 4.0 | \n",
+ " 14 | \n",
+ " 14 | \n",
+ "
\n",
+ " \n",
+ " | 5.0 | \n",
+ " 15 | \n",
+ " 15 | \n",
+ "
\n",
+ " \n",
+ " | ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ "
\n",
+ " \n",
+ " | Barcelona - Vall Hebron | \n",
+ " 76.0 | \n",
+ " 1 | \n",
+ " 1 | \n",
+ "
\n",
+ " \n",
+ " | 78.0 | \n",
+ " 1 | \n",
+ " 1 | \n",
+ "
\n",
+ " \n",
+ " | 79.0 | \n",
+ " 1 | \n",
+ " 1 | \n",
+ "
\n",
+ " \n",
+ " | 81.0 | \n",
+ " 1 | \n",
+ " 1 | \n",
+ "
\n",
+ " \n",
+ " | 82.0 | \n",
+ " 1 | \n",
+ " 1 | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
408 rows × 2 columns
\n",
+ "
"
+ ],
+ "text/plain": [
+ " o3_hour o3_quality\n",
+ "station o3_value \n",
+ "Barcelona - Ciutadella 1.0 9 9\n",
+ " 2.0 95 95\n",
+ " 3.0 33 33\n",
+ " 4.0 14 14\n",
+ " 5.0 15 15\n",
+ "... ... ...\n",
+ "Barcelona - Vall Hebron 76.0 1 1\n",
+ " 78.0 1 1\n",
+ " 79.0 1 1\n",
+ " 81.0 1 1\n",
+ " 82.0 1 1\n",
+ "\n",
+ "[408 rows x 2 columns]"
+ ]
+ },
+ "execution_count": 45,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "my_data.groupby([\"station\",\"o3_value\"]).count()"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 47,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " station | \n",
+ " air_quality | \n",
+ " longitude | \n",
+ " latitude | \n",
+ " o3_hour | \n",
+ " o3_quality | \n",
+ " o3_value | \n",
+ " generated | \n",
+ " date_time | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " | 0 | \n",
+ " Barcelona - Eixample | \n",
+ " Moderate | \n",
+ " 2.1538 | \n",
+ " 41.3853 | \n",
+ " 0h | \n",
+ " Good | \n",
+ " 1.0 | \n",
+ " 1/11/2018 0:00 | \n",
+ " 1541027104 | \n",
+ "
\n",
+ " \n",
+ " | 1 | \n",
+ " Barcelona - Gràcia | \n",
+ " Good | \n",
+ " 2.1534 | \n",
+ " 41.3987 | \n",
+ " 0h | \n",
+ " Good | \n",
+ " 10.0 | \n",
+ " 1/11/2018 0:00 | \n",
+ " 1541027104 | \n",
+ "
\n",
+ " \n",
+ " | 2 | \n",
+ " Barcelona - Ciutadella | \n",
+ " Good | \n",
+ " 2.1874 | \n",
+ " 41.3864 | \n",
+ " 0h | \n",
+ " Good | \n",
+ " 2.0 | \n",
+ " 1/11/2018 0:00 | \n",
+ " 1541027104 | \n",
+ "
\n",
+ " \n",
+ " | 3 | \n",
+ " Barcelona - Vall Hebron | \n",
+ " Good | \n",
+ " 2.1480 | \n",
+ " 41.4261 | \n",
+ " 0h | \n",
+ " Good | \n",
+ " 7.0 | \n",
+ " 1/11/2018 0:00 | \n",
+ " 1541027104 | \n",
+ "
\n",
+ " \n",
+ " | 4 | \n",
+ " Barcelona - Palau Reial | \n",
+ " Good | \n",
+ " 2.1151 | \n",
+ " 41.3875 | \n",
+ " 23h | \n",
+ " Good | \n",
+ " 11.0 | \n",
+ " 1/11/2018 0:00 | \n",
+ " 1541027104 | \n",
+ "
\n",
+ " \n",
+ " | ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ "
\n",
+ " \n",
+ " | 4096 | \n",
+ " Barcelona - Gràcia | \n",
+ " Good | \n",
+ " 2.1534 | \n",
+ " 41.3987 | \n",
+ " 22h | \n",
+ " Good | \n",
+ " 8.0 | \n",
+ " 30/11/2018 23:00 | \n",
+ " 1543615502 | \n",
+ "
\n",
+ " \n",
+ " | 4097 | \n",
+ " Barcelona - Ciutadella | \n",
+ " Good | \n",
+ " 2.1874 | \n",
+ " 41.3864 | \n",
+ " 22h | \n",
+ " Good | \n",
+ " 10.0 | \n",
+ " 30/11/2018 23:00 | \n",
+ " 1543615502 | \n",
+ "
\n",
+ " \n",
+ " | 4098 | \n",
+ " Barcelona - Vall Hebron | \n",
+ " Good | \n",
+ " 2.1480 | \n",
+ " 41.4261 | \n",
+ " 22h | \n",
+ " Good | \n",
+ " 32.0 | \n",
+ " 30/11/2018 23:00 | \n",
+ " 1543615502 | \n",
+ "
\n",
+ " \n",
+ " | 4099 | \n",
+ " Barcelona - Palau Reial | \n",
+ " Good | \n",
+ " 2.1151 | \n",
+ " 41.3875 | \n",
+ " 22h | \n",
+ " Good | \n",
+ " 40.0 | \n",
+ " 30/11/2018 23:00 | \n",
+ " 1543615502 | \n",
+ "
\n",
+ " \n",
+ " | 4100 | \n",
+ " Barcelona - Observ Fabra | \n",
+ " Good | \n",
+ " 2.1239 | \n",
+ " 41.4183 | \n",
+ " 22h | \n",
+ " Good | \n",
+ " 64.0 | \n",
+ " 30/11/2018 23:00 | \n",
+ " 1543615502 | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
4101 rows × 9 columns
\n",
+ "
"
+ ],
+ "text/plain": [
+ " station air_quality longitude latitude o3_hour \\\n",
+ "0 Barcelona - Eixample Moderate 2.1538 41.3853 0h \n",
+ "1 Barcelona - Gràcia Good 2.1534 41.3987 0h \n",
+ "2 Barcelona - Ciutadella Good 2.1874 41.3864 0h \n",
+ "3 Barcelona - Vall Hebron Good 2.1480 41.4261 0h \n",
+ "4 Barcelona - Palau Reial Good 2.1151 41.3875 23h \n",
+ "... ... ... ... ... ... \n",
+ "4096 Barcelona - Gràcia Good 2.1534 41.3987 22h \n",
+ "4097 Barcelona - Ciutadella Good 2.1874 41.3864 22h \n",
+ "4098 Barcelona - Vall Hebron Good 2.1480 41.4261 22h \n",
+ "4099 Barcelona - Palau Reial Good 2.1151 41.3875 22h \n",
+ "4100 Barcelona - Observ Fabra Good 2.1239 41.4183 22h \n",
+ "\n",
+ " o3_quality o3_value generated date_time \n",
+ "0 Good 1.0 1/11/2018 0:00 1541027104 \n",
+ "1 Good 10.0 1/11/2018 0:00 1541027104 \n",
+ "2 Good 2.0 1/11/2018 0:00 1541027104 \n",
+ "3 Good 7.0 1/11/2018 0:00 1541027104 \n",
+ "4 Good 11.0 1/11/2018 0:00 1541027104 \n",
+ "... ... ... ... ... \n",
+ "4096 Good 8.0 30/11/2018 23:00 1543615502 \n",
+ "4097 Good 10.0 30/11/2018 23:00 1543615502 \n",
+ "4098 Good 32.0 30/11/2018 23:00 1543615502 \n",
+ "4099 Good 40.0 30/11/2018 23:00 1543615502 \n",
+ "4100 Good 64.0 30/11/2018 23:00 1543615502 \n",
+ "\n",
+ "[4101 rows x 9 columns]"
+ ]
+ },
+ "execution_count": 47,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "nulls_o3 = o3_df[o3_df['o3_value'].isna() == True].index.tolist()\n",
+ "o3_clean = o3_df.drop(nulls_o3)\n",
+ "o3_clean.reset_index(drop=True,inplace=True)\n",
+ "o3_clean"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 62,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " min | \n",
+ " max | \n",
+ " mean | \n",
+ " median | \n",
+ "
\n",
+ " \n",
+ " | station | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " | Barcelona - Ciutadella | \n",
+ " 1.0 | \n",
+ " 85.0 | \n",
+ " 25.13 | \n",
+ " 22.0 | \n",
+ "
\n",
+ " \n",
+ " | Barcelona - Eixample | \n",
+ " 1.0 | \n",
+ " 61.0 | \n",
+ " 17.04 | \n",
+ " 14.0 | \n",
+ "
\n",
+ " \n",
+ " | Barcelona - Gràcia | \n",
+ " 1.0 | \n",
+ " 69.0 | \n",
+ " 26.68 | \n",
+ " 26.0 | \n",
+ "
\n",
+ " \n",
+ " | Barcelona - Observ Fabra | \n",
+ " 16.0 | \n",
+ " 100.0 | \n",
+ " 65.36 | \n",
+ " 66.0 | \n",
+ "
\n",
+ " \n",
+ " | Barcelona - Palau Reial | \n",
+ " 1.0 | \n",
+ " 64.0 | \n",
+ " 32.02 | \n",
+ " 35.0 | \n",
+ "
\n",
+ " \n",
+ " | Barcelona - Vall Hebron | \n",
+ " 1.0 | \n",
+ " 82.0 | \n",
+ " 36.37 | \n",
+ " 40.0 | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " min max mean median\n",
+ "station \n",
+ "Barcelona - Ciutadella 1.0 85.0 25.13 22.0\n",
+ "Barcelona - Eixample 1.0 61.0 17.04 14.0\n",
+ "Barcelona - Gràcia 1.0 69.0 26.68 26.0\n",
+ "Barcelona - Observ Fabra 16.0 100.0 65.36 66.0\n",
+ "Barcelona - Palau Reial 1.0 64.0 32.02 35.0\n",
+ "Barcelona - Vall Hebron 1.0 82.0 36.37 40.0"
+ ]
+ },
+ "execution_count": 62,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "o3_clean.groupby('station').o3_value.agg(['min', 'max', 'mean', 'median']).round(2)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 61,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " min | \n",
+ " max | \n",
+ " mean | \n",
+ " median | \n",
+ "
\n",
+ " \n",
+ " | o3_hour | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " | 0h | \n",
+ " 1.0 | \n",
+ " 89.0 | \n",
+ " 27.66 | \n",
+ " 23.0 | \n",
+ "
\n",
+ " \n",
+ " | 10h | \n",
+ " 1.0 | \n",
+ " 83.0 | \n",
+ " 28.50 | \n",
+ " 24.0 | \n",
+ "
\n",
+ " \n",
+ " | 11h | \n",
+ " 1.0 | \n",
+ " 84.0 | \n",
+ " 32.30 | \n",
+ " 31.0 | \n",
+ "
\n",
+ " \n",
+ " | 12h | \n",
+ " 1.0 | \n",
+ " 81.0 | \n",
+ " 39.97 | \n",
+ " 41.0 | \n",
+ "
\n",
+ " \n",
+ " | 13h | \n",
+ " 2.0 | \n",
+ " 81.0 | \n",
+ " 45.00 | \n",
+ " 46.0 | \n",
+ "
\n",
+ " \n",
+ " | 14h | \n",
+ " 2.0 | \n",
+ " 83.0 | \n",
+ " 44.59 | \n",
+ " 46.0 | \n",
+ "
\n",
+ " \n",
+ " | 15h | \n",
+ " 2.0 | \n",
+ " 85.0 | \n",
+ " 44.29 | \n",
+ " 46.0 | \n",
+ "
\n",
+ " \n",
+ " | 16h | \n",
+ " 2.0 | \n",
+ " 81.0 | \n",
+ " 44.45 | \n",
+ " 46.0 | \n",
+ "
\n",
+ " \n",
+ " | 17h | \n",
+ " 1.0 | \n",
+ " 80.0 | \n",
+ " 42.01 | \n",
+ " 42.0 | \n",
+ "
\n",
+ " \n",
+ " | 18h | \n",
+ " 1.0 | \n",
+ " 85.0 | \n",
+ " 34.02 | \n",
+ " 34.5 | \n",
+ "
\n",
+ " \n",
+ " | 19h | \n",
+ " 1.0 | \n",
+ " 90.0 | \n",
+ " 28.47 | \n",
+ " 24.0 | \n",
+ "
\n",
+ " \n",
+ " | 1h | \n",
+ " 1.0 | \n",
+ " 83.0 | \n",
+ " 30.49 | \n",
+ " 30.0 | \n",
+ "
\n",
+ " \n",
+ " | 20h | \n",
+ " 1.0 | \n",
+ " 99.0 | \n",
+ " 27.12 | \n",
+ " 21.0 | \n",
+ "
\n",
+ " \n",
+ " | 21h | \n",
+ " 1.0 | \n",
+ " 100.0 | \n",
+ " 27.95 | \n",
+ " 22.0 | \n",
+ "
\n",
+ " \n",
+ " | 22h | \n",
+ " 1.0 | \n",
+ " 91.0 | \n",
+ " 30.17 | \n",
+ " 25.0 | \n",
+ "
\n",
+ " \n",
+ " | 23h | \n",
+ " 1.0 | \n",
+ " 92.0 | \n",
+ " 33.36 | \n",
+ " 31.0 | \n",
+ "
\n",
+ " \n",
+ " | 2h | \n",
+ " 1.0 | \n",
+ " 84.0 | \n",
+ " 33.43 | \n",
+ " 34.0 | \n",
+ "
\n",
+ " \n",
+ " | 3h | \n",
+ " 1.0 | \n",
+ " 85.0 | \n",
+ " 35.27 | \n",
+ " 35.0 | \n",
+ "
\n",
+ " \n",
+ " | 4h | \n",
+ " 1.0 | \n",
+ " 86.0 | \n",
+ " 36.64 | \n",
+ " 38.5 | \n",
+ "
\n",
+ " \n",
+ " | 5h | \n",
+ " 1.0 | \n",
+ " 88.0 | \n",
+ " 36.97 | \n",
+ " 37.5 | \n",
+ "
\n",
+ " \n",
+ " | 6h | \n",
+ " 1.0 | \n",
+ " 90.0 | \n",
+ " 35.95 | \n",
+ " 34.0 | \n",
+ "
\n",
+ " \n",
+ " | 7h | \n",
+ " 1.0 | \n",
+ " 86.0 | \n",
+ " 31.59 | \n",
+ " 32.0 | \n",
+ "
\n",
+ " \n",
+ " | 8h | \n",
+ " 1.0 | \n",
+ " 87.0 | \n",
+ " 27.24 | \n",
+ " 20.0 | \n",
+ "
\n",
+ " \n",
+ " | 9h | \n",
+ " 1.0 | \n",
+ " 84.0 | \n",
+ " 24.96 | \n",
+ " 17.0 | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " min max mean median\n",
+ "o3_hour \n",
+ "0h 1.0 89.0 27.66 23.0\n",
+ "10h 1.0 83.0 28.50 24.0\n",
+ "11h 1.0 84.0 32.30 31.0\n",
+ "12h 1.0 81.0 39.97 41.0\n",
+ "13h 2.0 81.0 45.00 46.0\n",
+ "14h 2.0 83.0 44.59 46.0\n",
+ "15h 2.0 85.0 44.29 46.0\n",
+ "16h 2.0 81.0 44.45 46.0\n",
+ "17h 1.0 80.0 42.01 42.0\n",
+ "18h 1.0 85.0 34.02 34.5\n",
+ "19h 1.0 90.0 28.47 24.0\n",
+ "1h 1.0 83.0 30.49 30.0\n",
+ "20h 1.0 99.0 27.12 21.0\n",
+ "21h 1.0 100.0 27.95 22.0\n",
+ "22h 1.0 91.0 30.17 25.0\n",
+ "23h 1.0 92.0 33.36 31.0\n",
+ "2h 1.0 84.0 33.43 34.0\n",
+ "3h 1.0 85.0 35.27 35.0\n",
+ "4h 1.0 86.0 36.64 38.5\n",
+ "5h 1.0 88.0 36.97 37.5\n",
+ "6h 1.0 90.0 35.95 34.0\n",
+ "7h 1.0 86.0 31.59 32.0\n",
+ "8h 1.0 87.0 27.24 20.0\n",
+ "9h 1.0 84.0 24.96 17.0"
+ ]
+ },
+ "execution_count": 61,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "o3_clean.groupby('o3_hour')['o3_value'].agg(['min','max','mean','median']).round(2)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 57,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " | \n",
+ " min | \n",
+ " max | \n",
+ " mean | \n",
+ " median | \n",
+ "
\n",
+ " \n",
+ " | station | \n",
+ " o3_hour | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " | Barcelona - Ciutadella | \n",
+ " 0h | \n",
+ " 1.0 | \n",
+ " 71.0 | \n",
+ " 16.55 | \n",
+ " 9.5 | \n",
+ "
\n",
+ " \n",
+ " | 10h | \n",
+ " 2.0 | \n",
+ " 47.0 | \n",
+ " 14.80 | \n",
+ " 12.5 | \n",
+ "
\n",
+ " \n",
+ " | 11h | \n",
+ " 3.0 | \n",
+ " 53.0 | \n",
+ " 23.93 | \n",
+ " 25.0 | \n",
+ "
\n",
+ " \n",
+ " | 12h | \n",
+ " 2.0 | \n",
+ " 57.0 | \n",
+ " 32.83 | \n",
+ " 33.5 | \n",
+ "
\n",
+ " \n",
+ " | 13h | \n",
+ " 7.0 | \n",
+ " 65.0 | \n",
+ " 37.92 | \n",
+ " 42.0 | \n",
+ "
\n",
+ " \n",
+ " | ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ "
\n",
+ " \n",
+ " | Barcelona - Vall Hebron | \n",
+ " 5h | \n",
+ " 4.0 | \n",
+ " 70.0 | \n",
+ " 41.20 | \n",
+ " 47.5 | \n",
+ "
\n",
+ " \n",
+ " | 6h | \n",
+ " 5.0 | \n",
+ " 66.0 | \n",
+ " 37.97 | \n",
+ " 41.0 | \n",
+ "
\n",
+ " \n",
+ " | 7h | \n",
+ " 1.0 | \n",
+ " 65.0 | \n",
+ " 30.28 | \n",
+ " 32.0 | \n",
+ "
\n",
+ " \n",
+ " | 8h | \n",
+ " 2.0 | \n",
+ " 61.0 | \n",
+ " 27.13 | \n",
+ " 29.5 | \n",
+ "
\n",
+ " \n",
+ " | 9h | \n",
+ " 3.0 | \n",
+ " 54.0 | \n",
+ " 28.31 | \n",
+ " 34.0 | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
144 rows × 4 columns
\n",
+ "
"
+ ],
+ "text/plain": [
+ " min max mean median\n",
+ "station o3_hour \n",
+ "Barcelona - Ciutadella 0h 1.0 71.0 16.55 9.5\n",
+ " 10h 2.0 47.0 14.80 12.5\n",
+ " 11h 3.0 53.0 23.93 25.0\n",
+ " 12h 2.0 57.0 32.83 33.5\n",
+ " 13h 7.0 65.0 37.92 42.0\n",
+ "... ... ... ... ...\n",
+ "Barcelona - Vall Hebron 5h 4.0 70.0 41.20 47.5\n",
+ " 6h 5.0 66.0 37.97 41.0\n",
+ " 7h 1.0 65.0 30.28 32.0\n",
+ " 8h 2.0 61.0 27.13 29.5\n",
+ " 9h 3.0 54.0 28.31 34.0\n",
+ "\n",
+ "[144 rows x 4 columns]"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "display(o3_clean.groupby(['station','o3_hour'])['o3_value'].agg(['min','max','mean','median']).round(2))"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 64,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "monday = o3_clean[o3_clean['generated'].str.contains('05/11/2018|12/11/2018|19/11/2018|26/11/2018')]\n",
+ "tuesday = o3_clean[o3_clean['generated'].str.contains('06/11/2018|13/11/2018|20/11/2018|27/11/2018')]\n",
+ "wednesday = o3_clean[o3_clean['generated'].str.contains('07/11/2018|14/11/2018|21/11/2018|28/11/2018')]\n",
+ "thursday = o3_clean[o3_clean['generated'].str.contains('01/11/2018|08/11/2018|15/11/2018|22/11/2018|29/11/2018')]\n",
+ "friday = o3_clean[o3_clean['generated'].str.contains('02/11/2018|09/11/2018|16/11/2018|23/11/2018|30/11/2018')]\n",
+ "saturday = o3_clean[o3_clean['generated'].str.contains('03/11/2018|10/11/2018|17/11/2018|24/11/2018')]\n",
+ "sunday = o3_clean[o3_clean['generated'].str.contains('04/11/2018|11/11/2018|18/11/2018|25/11/2018')]"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 80,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "mon_mean = monday['o3_value'].mean()\n",
+ "tue_mean = tuesday['o3_value'].mean()\n",
+ "wed_mean = wednesday['o3_value'].mean()\n",
+ "thu_mean = thursday['o3_value'].mean()\n",
+ "fri_mean = friday['o3_value'].mean()\n",
+ "sat_mean = saturday['o3_value'].mean()\n",
+ "sun_mean = sunday['o3_value'].mean()"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 81,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " O3 Mean | \n",
+ "
\n",
+ " \n",
+ " | Weekdays | \n",
+ " | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " | Monday | \n",
+ " 36.84 | \n",
+ "
\n",
+ " \n",
+ " | Tuesday | \n",
+ " 35.02 | \n",
+ "
\n",
+ " \n",
+ " | Wednesday | \n",
+ " 32.72 | \n",
+ "
\n",
+ " \n",
+ " | Thursday | \n",
+ " 28.68 | \n",
+ "
\n",
+ " \n",
+ " | Friday | \n",
+ " 22.39 | \n",
+ "
\n",
+ " \n",
+ " | Saturday | \n",
+ " 40.27 | \n",
+ "
\n",
+ " \n",
+ " | Sunday | \n",
+ " 44.10 | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " O3 Mean\n",
+ "Weekdays \n",
+ "Monday 36.84\n",
+ "Tuesday 35.02\n",
+ "Wednesday 32.72\n",
+ "Thursday 28.68\n",
+ "Friday 22.39\n",
+ "Saturday 40.27\n",
+ "Sunday 44.10"
+ ]
+ },
+ "execution_count": 81,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "weekdays = [['Monday', mon_mean], ['Tuesday', tue_mean], ['Wednesday', wed_mean], ['Thursday', thu_mean], ['Friday', fri_mean], ['Saturday', sat_mean], ['Sunday', sun_mean]]\n",
+ "\n",
+ "weekdf = pd.DataFrame(weekdays,columns=['Weekdays','O3 Mean']).set_index('Weekdays').round(2)\n",
+ "weekdf"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 83,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "week_1 = o3_clean[o3_clean['generated'].str.contains('01/11/2018|02/11/2018|03/11/2018|04/11/2018|05/11/2018|06/11/2018|07/11/2018')]\n",
+ "week_2 = o3_clean[o3_clean['generated'].str.contains('08/11/2018|09/11/2018|10/11/2018|11/11/2018|12/11/2018|13/11/2018|14/11/2018')]\n",
+ "week_3 = o3_clean[o3_clean['generated'].str.contains('15/11/2018|16/11/2018|17/11/2018|18/11/2018|19/11/2018|20/11/2018|21/11/2018')]\n",
+ "week_4 = o3_clean[o3_clean['generated'].str.contains('22/11/2018|23/11/2018|24/11/2018|25/11/2018|26/11/2018|27/11/2018|28/11/2018')]"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 85,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "w1_mean = week_1['o3_value'].mean()\n",
+ "w2_mean = week_2['o3_value'].mean()\n",
+ "w3_mean = week_3['o3_value'].mean()\n",
+ "w4_mean = week_4['o3_value'].mean()"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 86,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " O3 Mean | \n",
+ "
\n",
+ " \n",
+ " | Weeks | \n",
+ " | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " | Week 1 | \n",
+ " NaN | \n",
+ "
\n",
+ " \n",
+ " | Week 2 | \n",
+ " 40.074605 | \n",
+ "
\n",
+ " \n",
+ " | Week 3 | \n",
+ " 38.747604 | \n",
+ "
\n",
+ " \n",
+ " | Week 4 | \n",
+ " 30.050568 | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " O3 Mean\n",
+ "Weeks \n",
+ "Week 1 NaN\n",
+ "Week 2 40.074605\n",
+ "Week 3 38.747604\n",
+ "Week 4 30.050568"
+ ]
+ },
+ "execution_count": 86,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "weeks = [['Week 1', w1_mean], ['Week 2', w2_mean], ['Week 3', w3_mean], ['Week 4', w4_mean]]\n",
+ "\n",
+ "weeksdf = pd.DataFrame(weeks,columns=['Weeks','O3 Mean']).set_index('Weeks')\n",
+ "weeksdf"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 71,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " station | \n",
+ " o3_hour | \n",
+ " o3_quality | \n",
+ " o3_value | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " | 5543 | \n",
+ " Barcelona - Observ Fabra | \n",
+ " 21h | \n",
+ " Good | \n",
+ " 100.0 | \n",
+ "
\n",
+ " \n",
+ " | 5535 | \n",
+ " Barcelona - Observ Fabra | \n",
+ " 20h | \n",
+ " Good | \n",
+ " 99.0 | \n",
+ "
\n",
+ " \n",
+ " | 959 | \n",
+ " Barcelona - Observ Fabra | \n",
+ " 23h | \n",
+ " Good | \n",
+ " 92.0 | \n",
+ "
\n",
+ " \n",
+ " | 5551 | \n",
+ " Barcelona - Observ Fabra | \n",
+ " 22h | \n",
+ " Good | \n",
+ " 91.0 | \n",
+ "
\n",
+ " \n",
+ " | 5559 | \n",
+ " Barcelona - Observ Fabra | \n",
+ " 23h | \n",
+ " Good | \n",
+ " 91.0 | \n",
+ "
\n",
+ " \n",
+ " | 2159 | \n",
+ " Barcelona - Observ Fabra | \n",
+ " 6h | \n",
+ " Good | \n",
+ " 90.0 | \n",
+ "
\n",
+ " \n",
+ " | 3823 | \n",
+ " Barcelona - Observ Fabra | \n",
+ " 22h | \n",
+ " Good | \n",
+ " 90.0 | \n",
+ "
\n",
+ " \n",
+ " | 5527 | \n",
+ " Barcelona - Observ Fabra | \n",
+ " 19h | \n",
+ " Good | \n",
+ " 90.0 | \n",
+ "
\n",
+ " \n",
+ " | 5567 | \n",
+ " Barcelona - Observ Fabra | \n",
+ " 0h | \n",
+ " Good | \n",
+ " 89.0 | \n",
+ "
\n",
+ " \n",
+ " | 5607 | \n",
+ " Barcelona - Observ Fabra | \n",
+ " 5h | \n",
+ " Good | \n",
+ " 88.0 | \n",
+ "
\n",
+ " \n",
+ " | 15 | \n",
+ " Barcelona - Observ Fabra | \n",
+ " 0h | \n",
+ " Good | \n",
+ " 87.0 | \n",
+ "
\n",
+ " \n",
+ " | 847 | \n",
+ " Barcelona - Observ Fabra | \n",
+ " 8h | \n",
+ " Good | \n",
+ " 87.0 | \n",
+ "
\n",
+ " \n",
+ " | 2151 | \n",
+ " Barcelona - Observ Fabra | \n",
+ " 5h | \n",
+ " Good | \n",
+ " 87.0 | \n",
+ "
\n",
+ " \n",
+ " | 2175 | \n",
+ " Barcelona - Observ Fabra | \n",
+ " 8h | \n",
+ " Good | \n",
+ " 87.0 | \n",
+ "
\n",
+ " \n",
+ " | 2351 | \n",
+ " Barcelona - Observ Fabra | \n",
+ " 6h | \n",
+ " Good | \n",
+ " 87.0 | \n",
+ "
\n",
+ " \n",
+ " | 4271 | \n",
+ " Barcelona - Observ Fabra | \n",
+ " 6h | \n",
+ " Good | \n",
+ " 87.0 | \n",
+ "
\n",
+ " \n",
+ " | 751 | \n",
+ " Barcelona - Observ Fabra | \n",
+ " 20h | \n",
+ " Good | \n",
+ " 86.0 | \n",
+ "
\n",
+ " \n",
+ " | 2335 | \n",
+ " Barcelona - Observ Fabra | \n",
+ " 4h | \n",
+ " Good | \n",
+ " 86.0 | \n",
+ "
\n",
+ " \n",
+ " | 2343 | \n",
+ " Barcelona - Observ Fabra | \n",
+ " 5h | \n",
+ " Good | \n",
+ " 86.0 | \n",
+ "
\n",
+ " \n",
+ " | 2359 | \n",
+ " Barcelona - Observ Fabra | \n",
+ " 7h | \n",
+ " Good | \n",
+ " 86.0 | \n",
+ "
\n",
+ " \n",
+ " | 2367 | \n",
+ " Barcelona - Observ Fabra | \n",
+ " 8h | \n",
+ " Good | \n",
+ " 86.0 | \n",
+ "
\n",
+ " \n",
+ " | 4263 | \n",
+ " Barcelona - Observ Fabra | \n",
+ " 5h | \n",
+ " Good | \n",
+ " 86.0 | \n",
+ "
\n",
+ " \n",
+ " | 915 | \n",
+ " Barcelona - Ciutadella | \n",
+ " 18h | \n",
+ " Good | \n",
+ " 85.0 | \n",
+ "
\n",
+ " \n",
+ " | 1583 | \n",
+ " Barcelona - Observ Fabra | \n",
+ " 5h | \n",
+ " Good | \n",
+ " 85.0 | \n",
+ "
\n",
+ " \n",
+ " | 2327 | \n",
+ " Barcelona - Observ Fabra | \n",
+ " 3h | \n",
+ " Good | \n",
+ " 85.0 | \n",
+ "
\n",
+ " \n",
+ " | 2615 | \n",
+ " Barcelona - Observ Fabra | \n",
+ " 15h | \n",
+ " Good | \n",
+ " 85.0 | \n",
+ "
\n",
+ " \n",
+ " | 2735 | \n",
+ " Barcelona - Observ Fabra | \n",
+ " 6h | \n",
+ " Good | \n",
+ " 85.0 | \n",
+ "
\n",
+ " \n",
+ " | 679 | \n",
+ " Barcelona - Observ Fabra | \n",
+ " 11h | \n",
+ " Good | \n",
+ " 84.0 | \n",
+ "
\n",
+ " \n",
+ " | 2231 | \n",
+ " Barcelona - Observ Fabra | \n",
+ " 15h | \n",
+ " Good | \n",
+ " 84.0 | \n",
+ "
\n",
+ " \n",
+ " | 2319 | \n",
+ " Barcelona - Observ Fabra | \n",
+ " 2h | \n",
+ " Good | \n",
+ " 84.0 | \n",
+ "
\n",
+ " \n",
+ " | 2375 | \n",
+ " Barcelona - Observ Fabra | \n",
+ " 9h | \n",
+ " Good | \n",
+ " 84.0 | \n",
+ "
\n",
+ " \n",
+ " | 5599 | \n",
+ " Barcelona - Observ Fabra | \n",
+ " 4h | \n",
+ " Good | \n",
+ " 84.0 | \n",
+ "
\n",
+ " \n",
+ " | 5639 | \n",
+ " Barcelona - Observ Fabra | \n",
+ " 9h | \n",
+ " Good | \n",
+ " 84.0 | \n",
+ "
\n",
+ " \n",
+ " | 31 | \n",
+ " Barcelona - Observ Fabra | \n",
+ " 2h | \n",
+ " Good | \n",
+ " 83.0 | \n",
+ "
\n",
+ " \n",
+ " | 39 | \n",
+ " Barcelona - Observ Fabra | \n",
+ " 3h | \n",
+ " Good | \n",
+ " 83.0 | \n",
+ "
\n",
+ " \n",
+ " | 671 | \n",
+ " Barcelona - Observ Fabra | \n",
+ " 10h | \n",
+ " Good | \n",
+ " 83.0 | \n",
+ "
\n",
+ " \n",
+ " | 919 | \n",
+ " Barcelona - Observ Fabra | \n",
+ " 18h | \n",
+ " Good | \n",
+ " 83.0 | \n",
+ "
\n",
+ " \n",
+ " | 2223 | \n",
+ " Barcelona - Observ Fabra | \n",
+ " 14h | \n",
+ " Good | \n",
+ " 83.0 | \n",
+ "
\n",
+ " \n",
+ " | 4255 | \n",
+ " Barcelona - Observ Fabra | \n",
+ " 4h | \n",
+ " Good | \n",
+ " 83.0 | \n",
+ "
\n",
+ " \n",
+ " | 5031 | \n",
+ " Barcelona - Observ Fabra | \n",
+ " 5h | \n",
+ " Good | \n",
+ " 83.0 | \n",
+ "
\n",
+ " \n",
+ " | 5455 | \n",
+ " Barcelona - Observ Fabra | \n",
+ " 10h | \n",
+ " Good | \n",
+ " 83.0 | \n",
+ "
\n",
+ " \n",
+ " | 5575 | \n",
+ " Barcelona - Observ Fabra | \n",
+ " 1h | \n",
+ " Good | \n",
+ " 83.0 | \n",
+ "
\n",
+ " \n",
+ " | 615 | \n",
+ " Barcelona - Observ Fabra | \n",
+ " 3h | \n",
+ " Good | \n",
+ " 82.0 | \n",
+ "
\n",
+ " \n",
+ " | 623 | \n",
+ " Barcelona - Observ Fabra | \n",
+ " 4h | \n",
+ " Good | \n",
+ " 82.0 | \n",
+ "
\n",
+ " \n",
+ " | 916 | \n",
+ " Barcelona - Vall Hebron | \n",
+ " 18h | \n",
+ " Good | \n",
+ " 82.0 | \n",
+ "
\n",
+ " \n",
+ " | 2167 | \n",
+ " Barcelona - Observ Fabra | \n",
+ " 7h | \n",
+ " Good | \n",
+ " 82.0 | \n",
+ "
\n",
+ " \n",
+ " | 4247 | \n",
+ " Barcelona - Observ Fabra | \n",
+ " 3h | \n",
+ " Good | \n",
+ " 82.0 | \n",
+ "
\n",
+ " \n",
+ " | 5583 | \n",
+ " Barcelona - Observ Fabra | \n",
+ " 2h | \n",
+ " Good | \n",
+ " 82.0 | \n",
+ "
\n",
+ " \n",
+ " | 5647 | \n",
+ " Barcelona - Observ Fabra | \n",
+ " 10h | \n",
+ " Good | \n",
+ " 82.0 | \n",
+ "
\n",
+ " \n",
+ " | 47 | \n",
+ " Barcelona - Observ Fabra | \n",
+ " 4h | \n",
+ " Good | \n",
+ " 81.0 | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " station o3_hour o3_quality o3_value\n",
+ "5543 Barcelona - Observ Fabra 21h Good 100.0\n",
+ "5535 Barcelona - Observ Fabra 20h Good 99.0\n",
+ "959 Barcelona - Observ Fabra 23h Good 92.0\n",
+ "5551 Barcelona - Observ Fabra 22h Good 91.0\n",
+ "5559 Barcelona - Observ Fabra 23h Good 91.0\n",
+ "2159 Barcelona - Observ Fabra 6h Good 90.0\n",
+ "3823 Barcelona - Observ Fabra 22h Good 90.0\n",
+ "5527 Barcelona - Observ Fabra 19h Good 90.0\n",
+ "5567 Barcelona - Observ Fabra 0h Good 89.0\n",
+ "5607 Barcelona - Observ Fabra 5h Good 88.0\n",
+ "15 Barcelona - Observ Fabra 0h Good 87.0\n",
+ "847 Barcelona - Observ Fabra 8h Good 87.0\n",
+ "2151 Barcelona - Observ Fabra 5h Good 87.0\n",
+ "2175 Barcelona - Observ Fabra 8h Good 87.0\n",
+ "2351 Barcelona - Observ Fabra 6h Good 87.0\n",
+ "4271 Barcelona - Observ Fabra 6h Good 87.0\n",
+ "751 Barcelona - Observ Fabra 20h Good 86.0\n",
+ "2335 Barcelona - Observ Fabra 4h Good 86.0\n",
+ "2343 Barcelona - Observ Fabra 5h Good 86.0\n",
+ "2359 Barcelona - Observ Fabra 7h Good 86.0\n",
+ "2367 Barcelona - Observ Fabra 8h Good 86.0\n",
+ "4263 Barcelona - Observ Fabra 5h Good 86.0\n",
+ "915 Barcelona - Ciutadella 18h Good 85.0\n",
+ "1583 Barcelona - Observ Fabra 5h Good 85.0\n",
+ "2327 Barcelona - Observ Fabra 3h Good 85.0\n",
+ "2615 Barcelona - Observ Fabra 15h Good 85.0\n",
+ "2735 Barcelona - Observ Fabra 6h Good 85.0\n",
+ "679 Barcelona - Observ Fabra 11h Good 84.0\n",
+ "2231 Barcelona - Observ Fabra 15h Good 84.0\n",
+ "2319 Barcelona - Observ Fabra 2h Good 84.0\n",
+ "2375 Barcelona - Observ Fabra 9h Good 84.0\n",
+ "5599 Barcelona - Observ Fabra 4h Good 84.0\n",
+ "5639 Barcelona - Observ Fabra 9h Good 84.0\n",
+ "31 Barcelona - Observ Fabra 2h Good 83.0\n",
+ "39 Barcelona - Observ Fabra 3h Good 83.0\n",
+ "671 Barcelona - Observ Fabra 10h Good 83.0\n",
+ "919 Barcelona - Observ Fabra 18h Good 83.0\n",
+ "2223 Barcelona - Observ Fabra 14h Good 83.0\n",
+ "4255 Barcelona - Observ Fabra 4h Good 83.0\n",
+ "5031 Barcelona - Observ Fabra 5h Good 83.0\n",
+ "5455 Barcelona - Observ Fabra 10h Good 83.0\n",
+ "5575 Barcelona - Observ Fabra 1h Good 83.0\n",
+ "615 Barcelona - Observ Fabra 3h Good 82.0\n",
+ "623 Barcelona - Observ Fabra 4h Good 82.0\n",
+ "916 Barcelona - Vall Hebron 18h Good 82.0\n",
+ "2167 Barcelona - Observ Fabra 7h Good 82.0\n",
+ "4247 Barcelona - Observ Fabra 3h Good 82.0\n",
+ "5583 Barcelona - Observ Fabra 2h Good 82.0\n",
+ "5647 Barcelona - Observ Fabra 10h Good 82.0\n",
+ "47 Barcelona - Observ Fabra 4h Good 81.0"
+ ]
+ },
+ "execution_count": 71,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "max_values = my_data.nlargest(columns='o3_value', n = 50)\n",
+ "\n",
+ "max_values"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": []
+ }
+ ],
+ "metadata": {
+ "kernelspec": {
+ "display_name": "Python 3",
+ "language": "python",
+ "name": "python3"
+ },
+ "language_info": {
+ "codemirror_mode": {
+ "name": "ipython",
+ "version": 3
+ },
+ "file_extension": ".py",
+ "mimetype": "text/x-python",
+ "name": "python",
+ "nbconvert_exporter": "python",
+ "pygments_lexer": "ipython3",
+ "version": "3.8.5"
+ },
+ "latex_envs": {
+ "LaTeX_envs_menu_present": true,
+ "autoclose": false,
+ "autocomplete": true,
+ "bibliofile": "biblio.bib",
+ "cite_by": "apalike",
+ "current_citInitial": 1,
+ "eqLabelWithNumbers": true,
+ "eqNumInitial": 1,
+ "hotkeys": {
+ "equation": "Ctrl-E",
+ "itemize": "Ctrl-I"
+ },
+ "labels_anchors": false,
+ "latex_user_defs": false,
+ "report_style_numbering": false,
+ "user_envs_cfg": false
+ },
+ "varInspector": {
+ "cols": {
+ "lenName": 16,
+ "lenType": 16,
+ "lenVar": 40
+ },
+ "kernels_config": {
+ "python": {
+ "delete_cmd_postfix": "",
+ "delete_cmd_prefix": "del ",
+ "library": "var_list.py",
+ "varRefreshCmd": "print(var_dic_list())"
+ },
+ "r": {
+ "delete_cmd_postfix": ") ",
+ "delete_cmd_prefix": "rm(",
+ "library": "var_list.r",
+ "varRefreshCmd": "cat(var_dic_list()) "
+ }
+ },
+ "types_to_exclude": [
+ "module",
+ "function",
+ "builtin_function_or_method",
+ "instance",
+ "_Feature"
+ ],
+ "window_display": false
+ }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 5
+}
diff --git a/your-project/PM10_analysis.ipynb b/your-project/PM10_analysis.ipynb
new file mode 100644
index 0000000..c2ff2c8
--- /dev/null
+++ b/your-project/PM10_analysis.ipynb
@@ -0,0 +1,2525 @@
+{
+ "cells": [
+ {
+ "cell_type": "code",
+ "execution_count": 294,
+ "id": "facial-portfolio",
+ "metadata": {
+ "ExecuteTime": {
+ "end_time": "2021-04-01T16:30:48.272071Z",
+ "start_time": "2021-04-01T16:30:48.062154Z"
+ },
+ "scrolled": true
+ },
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " Station | \n",
+ " Air Quality | \n",
+ " Longitude | \n",
+ " Latitude | \n",
+ " O3 Hour | \n",
+ " O3 Quality | \n",
+ " O3 Value | \n",
+ " NO2 Hour | \n",
+ " NO2 Quality | \n",
+ " NO2 Value | \n",
+ " PM10 Hour | \n",
+ " PM10 Quality | \n",
+ " PM10 Value | \n",
+ " Generated | \n",
+ " Date Time | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " | 0 | \n",
+ " Barcelona - Sants | \n",
+ " Good | \n",
+ " 2.1331 | \n",
+ " 41.3788 | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " 0h | \n",
+ " Good | \n",
+ " 84.0 | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " 01/11/2018 0:00 | \n",
+ " 1541027104 | \n",
+ "
\n",
+ " \n",
+ " | 1 | \n",
+ " Barcelona - Eixample | \n",
+ " Moderate | \n",
+ " 2.1538 | \n",
+ " 41.3853 | \n",
+ " 0h | \n",
+ " Good | \n",
+ " 1.0 | \n",
+ " 0h | \n",
+ " Moderate | \n",
+ " 113.0 | \n",
+ " 0h | \n",
+ " Good | \n",
+ " 36.0 | \n",
+ " 01/11/2018 0:00 | \n",
+ " 1541027104 | \n",
+ "
\n",
+ " \n",
+ " | 2 | \n",
+ " Barcelona - Gràcia | \n",
+ " Good | \n",
+ " 2.1534 | \n",
+ " 41.3987 | \n",
+ " 0h | \n",
+ " Good | \n",
+ " 10.0 | \n",
+ " 0h | \n",
+ " Good | \n",
+ " 73.0 | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " 01/11/2018 0:00 | \n",
+ " 1541027104 | \n",
+ "
\n",
+ " \n",
+ " | 3 | \n",
+ " Barcelona - Ciutadella | \n",
+ " Good | \n",
+ " 2.1874 | \n",
+ " 41.3864 | \n",
+ " 0h | \n",
+ " Good | \n",
+ " 2.0 | \n",
+ " 0h | \n",
+ " Good | \n",
+ " 86.0 | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " 01/11/2018 0:00 | \n",
+ " 1541027104 | \n",
+ "
\n",
+ " \n",
+ " | 4 | \n",
+ " Barcelona - Vall Hebron | \n",
+ " Good | \n",
+ " 2.1480 | \n",
+ " 41.4261 | \n",
+ " 0h | \n",
+ " Good | \n",
+ " 7.0 | \n",
+ " 0h | \n",
+ " Good | \n",
+ " 69.0 | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " 01/11/2018 0:00 | \n",
+ " 1541027104 | \n",
+ "
\n",
+ " \n",
+ " | ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ "
\n",
+ " \n",
+ " | 5739 | \n",
+ " Barcelona - Ciutadella | \n",
+ " Good | \n",
+ " 2.1874 | \n",
+ " 41.3864 | \n",
+ " 22h | \n",
+ " Good | \n",
+ " 10.0 | \n",
+ " 22h | \n",
+ " Good | \n",
+ " 57.0 | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " 30/11/2018 23:00 | \n",
+ " 1543615502 | \n",
+ "
\n",
+ " \n",
+ " | 5740 | \n",
+ " Barcelona - Vall Hebron | \n",
+ " Good | \n",
+ " 2.1480 | \n",
+ " 41.4261 | \n",
+ " 22h | \n",
+ " Good | \n",
+ " 32.0 | \n",
+ " 22h | \n",
+ " Good | \n",
+ " 31.0 | \n",
+ " 22h | \n",
+ " Good | \n",
+ " 21.0 | \n",
+ " 30/11/2018 23:00 | \n",
+ " 1543615502 | \n",
+ "
\n",
+ " \n",
+ " | 5741 | \n",
+ " Barcelona - Palau Reial | \n",
+ " Good | \n",
+ " 2.1151 | \n",
+ " 41.3875 | \n",
+ " 22h | \n",
+ " Good | \n",
+ " 40.0 | \n",
+ " 22h | \n",
+ " Good | \n",
+ " 20.0 | \n",
+ " 22h | \n",
+ " Good | \n",
+ " 15.0 | \n",
+ " 30/11/2018 23:00 | \n",
+ " 1543615502 | \n",
+ "
\n",
+ " \n",
+ " | 5742 | \n",
+ " Barcelona - Poblenou | \n",
+ " Good | \n",
+ " 2.2045 | \n",
+ " 41.4039 | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " 22h | \n",
+ " Good | \n",
+ " 70.0 | \n",
+ " 22h | \n",
+ " Good | \n",
+ " 25.0 | \n",
+ " 30/11/2018 23:00 | \n",
+ " 1543615502 | \n",
+ "
\n",
+ " \n",
+ " | 5743 | \n",
+ " Barcelona - Observ Fabra | \n",
+ " Good | \n",
+ " 2.1239 | \n",
+ " 41.4183 | \n",
+ " 22h | \n",
+ " Good | \n",
+ " 64.0 | \n",
+ " 22h | \n",
+ " Good | \n",
+ " 21.0 | \n",
+ " 22h | \n",
+ " Good | \n",
+ " 12.0 | \n",
+ " 30/11/2018 23:00 | \n",
+ " 1543615502 | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
5744 rows × 15 columns
\n",
+ "
"
+ ],
+ "text/plain": [
+ " Station Air Quality Longitude Latitude O3 Hour \\\n",
+ "0 Barcelona - Sants Good 2.1331 41.3788 NaN \n",
+ "1 Barcelona - Eixample Moderate 2.1538 41.3853 0h \n",
+ "2 Barcelona - Gràcia Good 2.1534 41.3987 0h \n",
+ "3 Barcelona - Ciutadella Good 2.1874 41.3864 0h \n",
+ "4 Barcelona - Vall Hebron Good 2.1480 41.4261 0h \n",
+ "... ... ... ... ... ... \n",
+ "5739 Barcelona - Ciutadella Good 2.1874 41.3864 22h \n",
+ "5740 Barcelona - Vall Hebron Good 2.1480 41.4261 22h \n",
+ "5741 Barcelona - Palau Reial Good 2.1151 41.3875 22h \n",
+ "5742 Barcelona - Poblenou Good 2.2045 41.4039 NaN \n",
+ "5743 Barcelona - Observ Fabra Good 2.1239 41.4183 22h \n",
+ "\n",
+ " O3 Quality O3 Value NO2 Hour NO2 Quality NO2 Value PM10 Hour \\\n",
+ "0 NaN NaN 0h Good 84.0 NaN \n",
+ "1 Good 1.0 0h Moderate 113.0 0h \n",
+ "2 Good 10.0 0h Good 73.0 NaN \n",
+ "3 Good 2.0 0h Good 86.0 NaN \n",
+ "4 Good 7.0 0h Good 69.0 NaN \n",
+ "... ... ... ... ... ... ... \n",
+ "5739 Good 10.0 22h Good 57.0 NaN \n",
+ "5740 Good 32.0 22h Good 31.0 22h \n",
+ "5741 Good 40.0 22h Good 20.0 22h \n",
+ "5742 NaN NaN 22h Good 70.0 22h \n",
+ "5743 Good 64.0 22h Good 21.0 22h \n",
+ "\n",
+ " PM10 Quality PM10 Value Generated Date Time \n",
+ "0 NaN NaN 01/11/2018 0:00 1541027104 \n",
+ "1 Good 36.0 01/11/2018 0:00 1541027104 \n",
+ "2 NaN NaN 01/11/2018 0:00 1541027104 \n",
+ "3 NaN NaN 01/11/2018 0:00 1541027104 \n",
+ "4 NaN NaN 01/11/2018 0:00 1541027104 \n",
+ "... ... ... ... ... \n",
+ "5739 NaN NaN 30/11/2018 23:00 1543615502 \n",
+ "5740 Good 21.0 30/11/2018 23:00 1543615502 \n",
+ "5741 Good 15.0 30/11/2018 23:00 1543615502 \n",
+ "5742 Good 25.0 30/11/2018 23:00 1543615502 \n",
+ "5743 Good 12.0 30/11/2018 23:00 1543615502 \n",
+ "\n",
+ "[5744 rows x 15 columns]"
+ ]
+ },
+ "execution_count": 294,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "import pandas as pd\n",
+ "\n",
+ "data = pd.read_csv('../datasets/2.-Urban-Environment/air-quality-nov-2017.csv')\n",
+ "\n",
+ "data"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 295,
+ "id": "ambient-preliminary",
+ "metadata": {
+ "ExecuteTime": {
+ "end_time": "2021-04-01T16:30:50.724835Z",
+ "start_time": "2021-04-01T16:30:50.649221Z"
+ },
+ "scrolled": true
+ },
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " Station | \n",
+ " Air Quality | \n",
+ " PM10 Hour | \n",
+ " PM10 Quality | \n",
+ " PM10 Value | \n",
+ " Generated | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " | 0 | \n",
+ " Barcelona - Sants | \n",
+ " Good | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " 01/11/2018 0:00 | \n",
+ "
\n",
+ " \n",
+ " | 1 | \n",
+ " Barcelona - Eixample | \n",
+ " Moderate | \n",
+ " 0h | \n",
+ " Good | \n",
+ " 36.0 | \n",
+ " 01/11/2018 0:00 | \n",
+ "
\n",
+ " \n",
+ " | 2 | \n",
+ " Barcelona - Gràcia | \n",
+ " Good | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " 01/11/2018 0:00 | \n",
+ "
\n",
+ " \n",
+ " | 3 | \n",
+ " Barcelona - Ciutadella | \n",
+ " Good | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " 01/11/2018 0:00 | \n",
+ "
\n",
+ " \n",
+ " | 4 | \n",
+ " Barcelona - Vall Hebron | \n",
+ " Good | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " 01/11/2018 0:00 | \n",
+ "
\n",
+ " \n",
+ " | ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ "
\n",
+ " \n",
+ " | 5739 | \n",
+ " Barcelona - Ciutadella | \n",
+ " Good | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " 30/11/2018 23:00 | \n",
+ "
\n",
+ " \n",
+ " | 5740 | \n",
+ " Barcelona - Vall Hebron | \n",
+ " Good | \n",
+ " 22h | \n",
+ " Good | \n",
+ " 21.0 | \n",
+ " 30/11/2018 23:00 | \n",
+ "
\n",
+ " \n",
+ " | 5741 | \n",
+ " Barcelona - Palau Reial | \n",
+ " Good | \n",
+ " 22h | \n",
+ " Good | \n",
+ " 15.0 | \n",
+ " 30/11/2018 23:00 | \n",
+ "
\n",
+ " \n",
+ " | 5742 | \n",
+ " Barcelona - Poblenou | \n",
+ " Good | \n",
+ " 22h | \n",
+ " Good | \n",
+ " 25.0 | \n",
+ " 30/11/2018 23:00 | \n",
+ "
\n",
+ " \n",
+ " | 5743 | \n",
+ " Barcelona - Observ Fabra | \n",
+ " Good | \n",
+ " 22h | \n",
+ " Good | \n",
+ " 12.0 | \n",
+ " 30/11/2018 23:00 | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
5744 rows × 6 columns
\n",
+ "
"
+ ],
+ "text/plain": [
+ " Station Air Quality PM10 Hour PM10 Quality PM10 Value \\\n",
+ "0 Barcelona - Sants Good NaN NaN NaN \n",
+ "1 Barcelona - Eixample Moderate 0h Good 36.0 \n",
+ "2 Barcelona - Gràcia Good NaN NaN NaN \n",
+ "3 Barcelona - Ciutadella Good NaN NaN NaN \n",
+ "4 Barcelona - Vall Hebron Good NaN NaN NaN \n",
+ "... ... ... ... ... ... \n",
+ "5739 Barcelona - Ciutadella Good NaN NaN NaN \n",
+ "5740 Barcelona - Vall Hebron Good 22h Good 21.0 \n",
+ "5741 Barcelona - Palau Reial Good 22h Good 15.0 \n",
+ "5742 Barcelona - Poblenou Good 22h Good 25.0 \n",
+ "5743 Barcelona - Observ Fabra Good 22h Good 12.0 \n",
+ "\n",
+ " Generated \n",
+ "0 01/11/2018 0:00 \n",
+ "1 01/11/2018 0:00 \n",
+ "2 01/11/2018 0:00 \n",
+ "3 01/11/2018 0:00 \n",
+ "4 01/11/2018 0:00 \n",
+ "... ... \n",
+ "5739 30/11/2018 23:00 \n",
+ "5740 30/11/2018 23:00 \n",
+ "5741 30/11/2018 23:00 \n",
+ "5742 30/11/2018 23:00 \n",
+ "5743 30/11/2018 23:00 \n",
+ "\n",
+ "[5744 rows x 6 columns]"
+ ]
+ },
+ "execution_count": 295,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "#dropping non-PM10-related columns\n",
+ "\n",
+ "pm = data.drop(columns=['O3 Hour','O3 Quality','O3 Value','NO2 Hour','NO2 Quality','NO2 Value','Date Time','Longitude','Latitude'])\n",
+ "\n",
+ "pm"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 311,
+ "id": "miniature-holmes",
+ "metadata": {
+ "ExecuteTime": {
+ "end_time": "2021-04-01T17:10:52.569479Z",
+ "start_time": "2021-04-01T17:10:52.542809Z"
+ }
+ },
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "3647"
+ ]
+ },
+ "execution_count": 311,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "#Removing NaN rows\n",
+ "\n",
+ "nantodrop = pm[pm['PM10 Value'].isna() == True].index.tolist()\n",
+ "pm2 = pm.drop(nantodrop)\n",
+ "pm2.reset_index(drop=True,inplace=True)\n",
+ "\n",
+ "pm2['PM10 Value'].value_counts().sum()"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 228,
+ "id": "horizontal-example",
+ "metadata": {
+ "ExecuteTime": {
+ "end_time": "2021-04-01T13:48:53.208152Z",
+ "start_time": "2021-04-01T13:48:53.151069Z"
+ }
+ },
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " Station | \n",
+ " Air Quality | \n",
+ " PM10 Quality | \n",
+ " PM10 Value | \n",
+ " Generated | \n",
+ " Time (h) | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " | 0 | \n",
+ " Barcelona - Eixample | \n",
+ " Moderate | \n",
+ " Good | \n",
+ " 36.0 | \n",
+ " 01/11/2018 0:00 | \n",
+ " 0 | \n",
+ "
\n",
+ " \n",
+ " | 1 | \n",
+ " Barcelona - Palau Reial | \n",
+ " Good | \n",
+ " Good | \n",
+ " 23.0 | \n",
+ " 01/11/2018 0:00 | \n",
+ " 23 | \n",
+ "
\n",
+ " \n",
+ " | 2 | \n",
+ " Barcelona - Poblenou | \n",
+ " Good | \n",
+ " Good | \n",
+ " 32.0 | \n",
+ " 01/11/2018 0:00 | \n",
+ " 23 | \n",
+ "
\n",
+ " \n",
+ " | 3 | \n",
+ " Barcelona - Observ Fabra | \n",
+ " Good | \n",
+ " Good | \n",
+ " 25.0 | \n",
+ " 01/11/2018 0:00 | \n",
+ " 23 | \n",
+ "
\n",
+ " \n",
+ " | 4 | \n",
+ " Barcelona - Eixample | \n",
+ " Good | \n",
+ " Good | \n",
+ " 35.0 | \n",
+ " 01/11/2018 1:00 | \n",
+ " 1 | \n",
+ "
\n",
+ " \n",
+ " | ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ "
\n",
+ " \n",
+ " | 3642 | \n",
+ " Barcelona - Gràcia | \n",
+ " Good | \n",
+ " Good | \n",
+ " 22.0 | \n",
+ " 30/11/2018 23:00 | \n",
+ " 22 | \n",
+ "
\n",
+ " \n",
+ " | 3643 | \n",
+ " Barcelona - Vall Hebron | \n",
+ " Good | \n",
+ " Good | \n",
+ " 21.0 | \n",
+ " 30/11/2018 23:00 | \n",
+ " 22 | \n",
+ "
\n",
+ " \n",
+ " | 3644 | \n",
+ " Barcelona - Palau Reial | \n",
+ " Good | \n",
+ " Good | \n",
+ " 15.0 | \n",
+ " 30/11/2018 23:00 | \n",
+ " 22 | \n",
+ "
\n",
+ " \n",
+ " | 3645 | \n",
+ " Barcelona - Poblenou | \n",
+ " Good | \n",
+ " Good | \n",
+ " 25.0 | \n",
+ " 30/11/2018 23:00 | \n",
+ " 22 | \n",
+ "
\n",
+ " \n",
+ " | 3646 | \n",
+ " Barcelona - Observ Fabra | \n",
+ " Good | \n",
+ " Good | \n",
+ " 12.0 | \n",
+ " 30/11/2018 23:00 | \n",
+ " 22 | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
3647 rows × 6 columns
\n",
+ "
"
+ ],
+ "text/plain": [
+ " Station Air Quality PM10 Quality PM10 Value \\\n",
+ "0 Barcelona - Eixample Moderate Good 36.0 \n",
+ "1 Barcelona - Palau Reial Good Good 23.0 \n",
+ "2 Barcelona - Poblenou Good Good 32.0 \n",
+ "3 Barcelona - Observ Fabra Good Good 25.0 \n",
+ "4 Barcelona - Eixample Good Good 35.0 \n",
+ "... ... ... ... ... \n",
+ "3642 Barcelona - Gràcia Good Good 22.0 \n",
+ "3643 Barcelona - Vall Hebron Good Good 21.0 \n",
+ "3644 Barcelona - Palau Reial Good Good 15.0 \n",
+ "3645 Barcelona - Poblenou Good Good 25.0 \n",
+ "3646 Barcelona - Observ Fabra Good Good 12.0 \n",
+ "\n",
+ " Generated Time (h) \n",
+ "0 01/11/2018 0:00 0 \n",
+ "1 01/11/2018 0:00 23 \n",
+ "2 01/11/2018 0:00 23 \n",
+ "3 01/11/2018 0:00 23 \n",
+ "4 01/11/2018 1:00 1 \n",
+ "... ... ... \n",
+ "3642 30/11/2018 23:00 22 \n",
+ "3643 30/11/2018 23:00 22 \n",
+ "3644 30/11/2018 23:00 22 \n",
+ "3645 30/11/2018 23:00 22 \n",
+ "3646 30/11/2018 23:00 22 \n",
+ "\n",
+ "[3647 rows x 6 columns]"
+ ]
+ },
+ "execution_count": 228,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "#Removing \"h\" from PM10 Hour column elements in a new column\n",
+ "\n",
+ "pm2['time'] = list(map(lambda x: int(re.findall(r\"\\d+\",x)[0]),pm2['PM10 Hour']))\n",
+ "pm2.rename(columns={'time':'Time (h)'},inplace=True)\n",
+ "pm2.drop(columns=['PM10 Hour'],inplace=True)\n",
+ "pm2"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 290,
+ "id": "plastic-grove",
+ "metadata": {
+ "ExecuteTime": {
+ "end_time": "2021-04-01T16:10:13.198267Z",
+ "start_time": "2021-04-01T16:10:13.118788Z"
+ },
+ "scrolled": true
+ },
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " min | \n",
+ " max | \n",
+ " mean | \n",
+ "
\n",
+ " \n",
+ " | Time (h) | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " | 0 | \n",
+ " 2.0 | \n",
+ " 42.0 | \n",
+ " 16.07 | \n",
+ "
\n",
+ " \n",
+ " | 1 | \n",
+ " 3.0 | \n",
+ " 43.0 | \n",
+ " 17.23 | \n",
+ "
\n",
+ " \n",
+ " | 2 | \n",
+ " 2.0 | \n",
+ " 39.0 | \n",
+ " 16.34 | \n",
+ "
\n",
+ " \n",
+ " | 3 | \n",
+ " 2.0 | \n",
+ " 44.0 | \n",
+ " 17.23 | \n",
+ "
\n",
+ " \n",
+ " | 4 | \n",
+ " 3.0 | \n",
+ " 44.0 | \n",
+ " 16.81 | \n",
+ "
\n",
+ " \n",
+ " | 5 | \n",
+ " 2.0 | \n",
+ " 44.0 | \n",
+ " 16.88 | \n",
+ "
\n",
+ " \n",
+ " | 6 | \n",
+ " 2.0 | \n",
+ " 44.0 | \n",
+ " 16.59 | \n",
+ "
\n",
+ " \n",
+ " | 7 | \n",
+ " 2.0 | \n",
+ " 43.0 | \n",
+ " 16.66 | \n",
+ "
\n",
+ " \n",
+ " | 8 | \n",
+ " 2.0 | \n",
+ " 42.0 | \n",
+ " 16.46 | \n",
+ "
\n",
+ " \n",
+ " | 9 | \n",
+ " 3.0 | \n",
+ " 40.0 | \n",
+ " 16.58 | \n",
+ "
\n",
+ " \n",
+ " | 10 | \n",
+ " 2.0 | \n",
+ " 38.0 | \n",
+ " 16.29 | \n",
+ "
\n",
+ " \n",
+ " | 11 | \n",
+ " 3.0 | \n",
+ " 39.0 | \n",
+ " 16.42 | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " min max mean\n",
+ "Time (h) \n",
+ "0 2.0 42.0 16.07\n",
+ "1 3.0 43.0 17.23\n",
+ "2 2.0 39.0 16.34\n",
+ "3 2.0 44.0 17.23\n",
+ "4 3.0 44.0 16.81\n",
+ "5 2.0 44.0 16.88\n",
+ "6 2.0 44.0 16.59\n",
+ "7 2.0 43.0 16.66\n",
+ "8 2.0 42.0 16.46\n",
+ "9 3.0 40.0 16.58\n",
+ "10 2.0 38.0 16.29\n",
+ "11 3.0 39.0 16.42"
+ ]
+ },
+ "execution_count": 290,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "# Analyzing how it changes throughout the day\n",
+ "\n",
+ "roun = lambda x: np.round(np.mean(x),decimals=2)\n",
+ "hourly = pm2.groupby('Time (h)')['PM10 Value'].agg(['min','max','mean']).round(2).sort_values('Time (h)')\n",
+ "hourly_df1 = hourly.iloc[:12,:]\n",
+ "hourly_df2 = hourly.iloc[12:,:]"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 291,
+ "id": "sticky-popularity",
+ "metadata": {
+ "ExecuteTime": {
+ "end_time": "2021-04-01T16:10:22.045671Z",
+ "start_time": "2021-04-01T16:10:21.994665Z"
+ }
+ },
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " min | \n",
+ " max | \n",
+ " mean | \n",
+ "
\n",
+ " \n",
+ " | Time (h) | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " | 0 | \n",
+ " 2.0 | \n",
+ " 42.0 | \n",
+ " 16.07 | \n",
+ "
\n",
+ " \n",
+ " | 1 | \n",
+ " 3.0 | \n",
+ " 43.0 | \n",
+ " 17.23 | \n",
+ "
\n",
+ " \n",
+ " | 2 | \n",
+ " 2.0 | \n",
+ " 39.0 | \n",
+ " 16.34 | \n",
+ "
\n",
+ " \n",
+ " | 3 | \n",
+ " 2.0 | \n",
+ " 44.0 | \n",
+ " 17.23 | \n",
+ "
\n",
+ " \n",
+ " | 4 | \n",
+ " 3.0 | \n",
+ " 44.0 | \n",
+ " 16.81 | \n",
+ "
\n",
+ " \n",
+ " | 5 | \n",
+ " 2.0 | \n",
+ " 44.0 | \n",
+ " 16.88 | \n",
+ "
\n",
+ " \n",
+ " | 6 | \n",
+ " 2.0 | \n",
+ " 44.0 | \n",
+ " 16.59 | \n",
+ "
\n",
+ " \n",
+ " | 7 | \n",
+ " 2.0 | \n",
+ " 43.0 | \n",
+ " 16.66 | \n",
+ "
\n",
+ " \n",
+ " | 8 | \n",
+ " 2.0 | \n",
+ " 42.0 | \n",
+ " 16.46 | \n",
+ "
\n",
+ " \n",
+ " | 9 | \n",
+ " 3.0 | \n",
+ " 40.0 | \n",
+ " 16.58 | \n",
+ "
\n",
+ " \n",
+ " | 10 | \n",
+ " 2.0 | \n",
+ " 38.0 | \n",
+ " 16.29 | \n",
+ "
\n",
+ " \n",
+ " | 11 | \n",
+ " 3.0 | \n",
+ " 39.0 | \n",
+ " 16.42 | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " min max mean\n",
+ "Time (h) \n",
+ "0 2.0 42.0 16.07\n",
+ "1 3.0 43.0 17.23\n",
+ "2 2.0 39.0 16.34\n",
+ "3 2.0 44.0 17.23\n",
+ "4 3.0 44.0 16.81\n",
+ "5 2.0 44.0 16.88\n",
+ "6 2.0 44.0 16.59\n",
+ "7 2.0 43.0 16.66\n",
+ "8 2.0 42.0 16.46\n",
+ "9 3.0 40.0 16.58\n",
+ "10 2.0 38.0 16.29\n",
+ "11 3.0 39.0 16.42"
+ ]
+ },
+ "execution_count": 291,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "hourly_df1"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 289,
+ "id": "bridal-realtor",
+ "metadata": {
+ "ExecuteTime": {
+ "end_time": "2021-04-01T16:08:36.558117Z",
+ "start_time": "2021-04-01T16:08:36.514976Z"
+ }
+ },
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " min | \n",
+ " max | \n",
+ " mean | \n",
+ "
\n",
+ " \n",
+ " | Time (h) | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " | 12 | \n",
+ " 3.0 | \n",
+ " 41.0 | \n",
+ " 16.34 | \n",
+ "
\n",
+ " \n",
+ " | 13 | \n",
+ " 3.0 | \n",
+ " 42.0 | \n",
+ " 16.93 | \n",
+ "
\n",
+ " \n",
+ " | 14 | \n",
+ " 3.0 | \n",
+ " 42.0 | \n",
+ " 16.55 | \n",
+ "
\n",
+ " \n",
+ " | 15 | \n",
+ " 2.0 | \n",
+ " 43.0 | \n",
+ " 16.53 | \n",
+ "
\n",
+ " \n",
+ " | 16 | \n",
+ " 2.0 | \n",
+ " 43.0 | \n",
+ " 16.51 | \n",
+ "
\n",
+ " \n",
+ " | 17 | \n",
+ " 2.0 | \n",
+ " 42.0 | \n",
+ " 16.01 | \n",
+ "
\n",
+ " \n",
+ " | 18 | \n",
+ " 2.0 | \n",
+ " 41.0 | \n",
+ " 16.81 | \n",
+ "
\n",
+ " \n",
+ " | 19 | \n",
+ " 3.0 | \n",
+ " 41.0 | \n",
+ " 16.73 | \n",
+ "
\n",
+ " \n",
+ " | 20 | \n",
+ " 2.0 | \n",
+ " 41.0 | \n",
+ " 16.51 | \n",
+ "
\n",
+ " \n",
+ " | 21 | \n",
+ " 2.0 | \n",
+ " 41.0 | \n",
+ " 16.40 | \n",
+ "
\n",
+ " \n",
+ " | 22 | \n",
+ " 3.0 | \n",
+ " 42.0 | \n",
+ " 16.58 | \n",
+ "
\n",
+ " \n",
+ " | 23 | \n",
+ " 2.0 | \n",
+ " 41.0 | \n",
+ " 16.70 | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " min max mean\n",
+ "Time (h) \n",
+ "12 3.0 41.0 16.34\n",
+ "13 3.0 42.0 16.93\n",
+ "14 3.0 42.0 16.55\n",
+ "15 2.0 43.0 16.53\n",
+ "16 2.0 43.0 16.51\n",
+ "17 2.0 42.0 16.01\n",
+ "18 2.0 41.0 16.81\n",
+ "19 3.0 41.0 16.73\n",
+ "20 2.0 41.0 16.51\n",
+ "21 2.0 41.0 16.40\n",
+ "22 3.0 42.0 16.58\n",
+ "23 2.0 41.0 16.70"
+ ]
+ },
+ "execution_count": 289,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "hourly_df2"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 230,
+ "id": "civil-valuation",
+ "metadata": {
+ "ExecuteTime": {
+ "end_time": "2021-04-01T13:49:11.691227Z",
+ "start_time": "2021-04-01T13:49:11.641786Z"
+ },
+ "scrolled": true
+ },
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " min | \n",
+ " max | \n",
+ " mean | \n",
+ "
\n",
+ " \n",
+ " | Station | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " | Barcelona - Observ Fabra | \n",
+ " 5.0 | \n",
+ " 25.0 | \n",
+ " 10.77 | \n",
+ "
\n",
+ " \n",
+ " | Barcelona - Vall Hebron | \n",
+ " 2.0 | \n",
+ " 32.0 | \n",
+ " 13.91 | \n",
+ "
\n",
+ " \n",
+ " | Barcelona - Palau Reial | \n",
+ " 6.0 | \n",
+ " 29.0 | \n",
+ " 14.53 | \n",
+ "
\n",
+ " \n",
+ " | Barcelona - Gràcia | \n",
+ " 7.0 | \n",
+ " 31.0 | \n",
+ " 16.82 | \n",
+ "
\n",
+ " \n",
+ " | Barcelona - Poblenou | \n",
+ " 7.0 | \n",
+ " 38.0 | \n",
+ " 20.54 | \n",
+ "
\n",
+ " \n",
+ " | Barcelona - Eixample | \n",
+ " 11.0 | \n",
+ " 44.0 | \n",
+ " 22.78 | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " min max mean\n",
+ "Station \n",
+ "Barcelona - Observ Fabra 5.0 25.0 10.77\n",
+ "Barcelona - Vall Hebron 2.0 32.0 13.91\n",
+ "Barcelona - Palau Reial 6.0 29.0 14.53\n",
+ "Barcelona - Gràcia 7.0 31.0 16.82\n",
+ "Barcelona - Poblenou 7.0 38.0 20.54\n",
+ "Barcelona - Eixample 11.0 44.0 22.78"
+ ]
+ },
+ "execution_count": 230,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "#Analyzing the difference between Stations\n",
+ "\n",
+ "pm2.groupby('Station')['PM10 Value'].agg(['min','max','mean']).round(2).sort_values('mean')"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 298,
+ "id": "small-pledge",
+ "metadata": {
+ "ExecuteTime": {
+ "end_time": "2021-04-01T16:32:33.030744Z",
+ "start_time": "2021-04-01T16:32:32.970748Z"
+ }
+ },
+ "outputs": [],
+ "source": [
+ "# to see full table\n",
+ "\n",
+ "pd.set_option('display.max_rows', 50)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 232,
+ "id": "soviet-salon",
+ "metadata": {
+ "ExecuteTime": {
+ "end_time": "2021-04-01T13:49:18.004853Z",
+ "start_time": "2021-04-01T13:49:17.935098Z"
+ },
+ "scrolled": true
+ },
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " | \n",
+ " min | \n",
+ " max | \n",
+ " mean | \n",
+ "
\n",
+ " \n",
+ " | Station | \n",
+ " Time (h) | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " | Barcelona - Eixample | \n",
+ " 0 | \n",
+ " 12.0 | \n",
+ " 42.0 | \n",
+ " 22.43 | \n",
+ "
\n",
+ " \n",
+ " | 1 | \n",
+ " 11.0 | \n",
+ " 43.0 | \n",
+ " 22.97 | \n",
+ "
\n",
+ " \n",
+ " | 2 | \n",
+ " 11.0 | \n",
+ " 39.0 | \n",
+ " 21.93 | \n",
+ "
\n",
+ " \n",
+ " | 3 | \n",
+ " 11.0 | \n",
+ " 44.0 | \n",
+ " 23.70 | \n",
+ "
\n",
+ " \n",
+ " | 4 | \n",
+ " 11.0 | \n",
+ " 44.0 | \n",
+ " 23.34 | \n",
+ "
\n",
+ " \n",
+ " | ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ "
\n",
+ " \n",
+ " | Barcelona - Vall Hebron | \n",
+ " 19 | \n",
+ " 3.0 | \n",
+ " 32.0 | \n",
+ " 14.42 | \n",
+ "
\n",
+ " \n",
+ " | 20 | \n",
+ " 2.0 | \n",
+ " 25.0 | \n",
+ " 13.27 | \n",
+ "
\n",
+ " \n",
+ " | 21 | \n",
+ " 2.0 | \n",
+ " 32.0 | \n",
+ " 13.82 | \n",
+ "
\n",
+ " \n",
+ " | 22 | \n",
+ " 3.0 | \n",
+ " 31.0 | \n",
+ " 15.04 | \n",
+ "
\n",
+ " \n",
+ " | 23 | \n",
+ " 2.0 | \n",
+ " 31.0 | \n",
+ " 13.57 | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
144 rows × 3 columns
\n",
+ "
"
+ ],
+ "text/plain": [
+ " min max mean\n",
+ "Station Time (h) \n",
+ "Barcelona - Eixample 0 12.0 42.0 22.43\n",
+ " 1 11.0 43.0 22.97\n",
+ " 2 11.0 39.0 21.93\n",
+ " 3 11.0 44.0 23.70\n",
+ " 4 11.0 44.0 23.34\n",
+ "... ... ... ...\n",
+ "Barcelona - Vall Hebron 19 3.0 32.0 14.42\n",
+ " 20 2.0 25.0 13.27\n",
+ " 21 2.0 32.0 13.82\n",
+ " 22 3.0 31.0 15.04\n",
+ " 23 2.0 31.0 13.57\n",
+ "\n",
+ "[144 rows x 3 columns]"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "#Analyzing the hourly change for every station\n",
+ "\n",
+ "display(pm2.groupby(['Station','Time (h)'])['PM10 Value'].agg(['min','max','mean']).round(2))"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 233,
+ "id": "sorted-profit",
+ "metadata": {
+ "ExecuteTime": {
+ "end_time": "2021-04-01T13:49:34.668276Z",
+ "start_time": "2021-04-01T13:49:34.606160Z"
+ }
+ },
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " Station | \n",
+ " Air Quality | \n",
+ " PM10 Quality | \n",
+ " PM10 Value | \n",
+ " Generated | \n",
+ " Time (h) | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " | 0 | \n",
+ " Barcelona - Eixample | \n",
+ " Moderate | \n",
+ " Good | \n",
+ " 36.0 | \n",
+ " 01/11/2018 0:00 | \n",
+ " 0 | \n",
+ "
\n",
+ " \n",
+ " | 1 | \n",
+ " Barcelona - Palau Reial | \n",
+ " Good | \n",
+ " Good | \n",
+ " 23.0 | \n",
+ " 01/11/2018 0:00 | \n",
+ " 23 | \n",
+ "
\n",
+ " \n",
+ " | 2 | \n",
+ " Barcelona - Poblenou | \n",
+ " Good | \n",
+ " Good | \n",
+ " 32.0 | \n",
+ " 01/11/2018 0:00 | \n",
+ " 23 | \n",
+ "
\n",
+ " \n",
+ " | 3 | \n",
+ " Barcelona - Observ Fabra | \n",
+ " Good | \n",
+ " Good | \n",
+ " 25.0 | \n",
+ " 01/11/2018 0:00 | \n",
+ " 23 | \n",
+ "
\n",
+ " \n",
+ " | 4 | \n",
+ " Barcelona - Eixample | \n",
+ " Good | \n",
+ " Good | \n",
+ " 35.0 | \n",
+ " 01/11/2018 1:00 | \n",
+ " 1 | \n",
+ "
\n",
+ " \n",
+ " | ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ "
\n",
+ " \n",
+ " | 3642 | \n",
+ " Barcelona - Gràcia | \n",
+ " Good | \n",
+ " Good | \n",
+ " 22.0 | \n",
+ " 30/11/2018 23:00 | \n",
+ " 22 | \n",
+ "
\n",
+ " \n",
+ " | 3643 | \n",
+ " Barcelona - Vall Hebron | \n",
+ " Good | \n",
+ " Good | \n",
+ " 21.0 | \n",
+ " 30/11/2018 23:00 | \n",
+ " 22 | \n",
+ "
\n",
+ " \n",
+ " | 3644 | \n",
+ " Barcelona - Palau Reial | \n",
+ " Good | \n",
+ " Good | \n",
+ " 15.0 | \n",
+ " 30/11/2018 23:00 | \n",
+ " 22 | \n",
+ "
\n",
+ " \n",
+ " | 3645 | \n",
+ " Barcelona - Poblenou | \n",
+ " Good | \n",
+ " Good | \n",
+ " 25.0 | \n",
+ " 30/11/2018 23:00 | \n",
+ " 22 | \n",
+ "
\n",
+ " \n",
+ " | 3646 | \n",
+ " Barcelona - Observ Fabra | \n",
+ " Good | \n",
+ " Good | \n",
+ " 12.0 | \n",
+ " 30/11/2018 23:00 | \n",
+ " 22 | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
3647 rows × 6 columns
\n",
+ "
"
+ ],
+ "text/plain": [
+ " Station Air Quality PM10 Quality PM10 Value \\\n",
+ "0 Barcelona - Eixample Moderate Good 36.0 \n",
+ "1 Barcelona - Palau Reial Good Good 23.0 \n",
+ "2 Barcelona - Poblenou Good Good 32.0 \n",
+ "3 Barcelona - Observ Fabra Good Good 25.0 \n",
+ "4 Barcelona - Eixample Good Good 35.0 \n",
+ "... ... ... ... ... \n",
+ "3642 Barcelona - Gràcia Good Good 22.0 \n",
+ "3643 Barcelona - Vall Hebron Good Good 21.0 \n",
+ "3644 Barcelona - Palau Reial Good Good 15.0 \n",
+ "3645 Barcelona - Poblenou Good Good 25.0 \n",
+ "3646 Barcelona - Observ Fabra Good Good 12.0 \n",
+ "\n",
+ " Generated Time (h) \n",
+ "0 01/11/2018 0:00 0 \n",
+ "1 01/11/2018 0:00 23 \n",
+ "2 01/11/2018 0:00 23 \n",
+ "3 01/11/2018 0:00 23 \n",
+ "4 01/11/2018 1:00 1 \n",
+ "... ... ... \n",
+ "3642 30/11/2018 23:00 22 \n",
+ "3643 30/11/2018 23:00 22 \n",
+ "3644 30/11/2018 23:00 22 \n",
+ "3645 30/11/2018 23:00 22 \n",
+ "3646 30/11/2018 23:00 22 \n",
+ "\n",
+ "[3647 rows x 6 columns]"
+ ]
+ },
+ "execution_count": 233,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "df_nov = pm2[pm2['Generated'].str.contains('\\d{2}/11/2018')].groupby(['Generated'])\n",
+ "df_nov.head(10)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 241,
+ "id": "spoken-saint",
+ "metadata": {
+ "ExecuteTime": {
+ "end_time": "2021-04-01T14:06:54.219391Z",
+ "start_time": "2021-04-01T14:06:54.093525Z"
+ }
+ },
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " Station | \n",
+ " Air Quality | \n",
+ " PM10 Quality | \n",
+ " PM10 Value | \n",
+ " Generated | \n",
+ " Time (h) | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " | 425 | \n",
+ " Barcelona - Eixample | \n",
+ " Good | \n",
+ " Good | \n",
+ " 19.0 | \n",
+ " 05/11/2018 0:00 | \n",
+ " 0 | \n",
+ "
\n",
+ " \n",
+ " | 426 | \n",
+ " Barcelona - Vall Hebron | \n",
+ " Good | \n",
+ " Good | \n",
+ " 2.0 | \n",
+ " 05/11/2018 0:00 | \n",
+ " 0 | \n",
+ "
\n",
+ " \n",
+ " | 427 | \n",
+ " Barcelona - Palau Reial | \n",
+ " Good | \n",
+ " Good | \n",
+ " 16.0 | \n",
+ " 05/11/2018 0:00 | \n",
+ " 0 | \n",
+ "
\n",
+ " \n",
+ " | 428 | \n",
+ " Barcelona - Poblenou | \n",
+ " Good | \n",
+ " Good | \n",
+ " 19.0 | \n",
+ " 05/11/2018 0:00 | \n",
+ " 0 | \n",
+ "
\n",
+ " \n",
+ " | 429 | \n",
+ " Barcelona - Observ Fabra | \n",
+ " Good | \n",
+ " Good | \n",
+ " 14.0 | \n",
+ " 05/11/2018 0:00 | \n",
+ " 0 | \n",
+ "
\n",
+ " \n",
+ " | ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ "
\n",
+ " \n",
+ " | 3099 | \n",
+ " Barcelona - Eixample | \n",
+ " Good | \n",
+ " Good | \n",
+ " 13.0 | \n",
+ " 26/11/2018 23:00 | \n",
+ " 22 | \n",
+ "
\n",
+ " \n",
+ " | 3100 | \n",
+ " Barcelona - Gràcia | \n",
+ " Good | \n",
+ " Good | \n",
+ " 13.0 | \n",
+ " 26/11/2018 23:00 | \n",
+ " 22 | \n",
+ "
\n",
+ " \n",
+ " | 3101 | \n",
+ " Barcelona - Vall Hebron | \n",
+ " Good | \n",
+ " Good | \n",
+ " 10.0 | \n",
+ " 26/11/2018 23:00 | \n",
+ " 22 | \n",
+ "
\n",
+ " \n",
+ " | 3102 | \n",
+ " Barcelona - Palau Reial | \n",
+ " Good | \n",
+ " Good | \n",
+ " 10.0 | \n",
+ " 26/11/2018 23:00 | \n",
+ " 23 | \n",
+ "
\n",
+ " \n",
+ " | 3103 | \n",
+ " Barcelona - Observ Fabra | \n",
+ " Good | \n",
+ " Good | \n",
+ " 7.0 | \n",
+ " 26/11/2018 23:00 | \n",
+ " 22 | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
486 rows × 6 columns
\n",
+ "
"
+ ],
+ "text/plain": [
+ " Station Air Quality PM10 Quality PM10 Value \\\n",
+ "425 Barcelona - Eixample Good Good 19.0 \n",
+ "426 Barcelona - Vall Hebron Good Good 2.0 \n",
+ "427 Barcelona - Palau Reial Good Good 16.0 \n",
+ "428 Barcelona - Poblenou Good Good 19.0 \n",
+ "429 Barcelona - Observ Fabra Good Good 14.0 \n",
+ "... ... ... ... ... \n",
+ "3099 Barcelona - Eixample Good Good 13.0 \n",
+ "3100 Barcelona - Gràcia Good Good 13.0 \n",
+ "3101 Barcelona - Vall Hebron Good Good 10.0 \n",
+ "3102 Barcelona - Palau Reial Good Good 10.0 \n",
+ "3103 Barcelona - Observ Fabra Good Good 7.0 \n",
+ "\n",
+ " Generated Time (h) \n",
+ "425 05/11/2018 0:00 0 \n",
+ "426 05/11/2018 0:00 0 \n",
+ "427 05/11/2018 0:00 0 \n",
+ "428 05/11/2018 0:00 0 \n",
+ "429 05/11/2018 0:00 0 \n",
+ "... ... ... \n",
+ "3099 26/11/2018 23:00 22 \n",
+ "3100 26/11/2018 23:00 22 \n",
+ "3101 26/11/2018 23:00 22 \n",
+ "3102 26/11/2018 23:00 23 \n",
+ "3103 26/11/2018 23:00 22 \n",
+ "\n",
+ "[486 rows x 6 columns]"
+ ]
+ },
+ "execution_count": 241,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "#Separate into one dataframe per day of the week\n",
+ "monday = pm2[pm2['Generated'].str.contains('05/11/2018|12/11/2018|19/11/2018|26/11/2018')]\n",
+ "tuesday = pm2[pm2['Generated'].str.contains('06/11/2018|13/11/2018|20/11/2018|27/11/2018')]\n",
+ "wednesday = pm2[pm2['Generated'].str.contains('07/11/2018|14/11/2018|21/11/2018|28/11/2018')]\n",
+ "thursday = pm2[pm2['Generated'].str.contains('01/11/2018|08/11/2018|15/11/2018|22/11/2018|29/11/2018')]\n",
+ "friday = pm2[pm2['Generated'].str.contains('02/11/2018|09/11/2018|16/11/2018|23/11/2018|30/11/2018')]\n",
+ "saturday = pm2[pm2['Generated'].str.contains('03/11/2018|10/11/2018|17/11/2018|24/11/2018')]\n",
+ "sunday = pm2[pm2['Generated'].str.contains('04/11/2018|11/11/2018|18/11/2018|25/11/2018')]\n",
+ "\n",
+ "monday"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 252,
+ "id": "assured-decline",
+ "metadata": {
+ "ExecuteTime": {
+ "end_time": "2021-04-01T14:12:33.048829Z",
+ "start_time": "2021-04-01T14:12:33.023555Z"
+ },
+ "scrolled": true
+ },
+ "outputs": [],
+ "source": [
+ "#Calculating average contamination per day\n",
+ "\n",
+ "mon_mean = monday['PM10 Value'].mean()\n",
+ "tue_mean = tuesday['PM10 Value'].mean()\n",
+ "wed_mean = wednesday['PM10 Value'].mean()\n",
+ "thu_mean = thursday['PM10 Value'].mean()\n",
+ "fri_mean = friday['PM10 Value'].mean()\n",
+ "sat_mean = saturday['PM10 Value'].mean()\n",
+ "sun_mean = sunday['PM10 Value'].mean()"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 262,
+ "id": "martial-gasoline",
+ "metadata": {
+ "ExecuteTime": {
+ "end_time": "2021-04-01T14:16:13.508968Z",
+ "start_time": "2021-04-01T14:16:13.457047Z"
+ },
+ "scrolled": false
+ },
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " PM10 Mean | \n",
+ "
\n",
+ " \n",
+ " | Weekdays | \n",
+ " | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " | Monday | \n",
+ " 16.427984 | \n",
+ "
\n",
+ " \n",
+ " | Tuesday | \n",
+ " 17.660338 | \n",
+ "
\n",
+ " \n",
+ " | Wednesday | \n",
+ " 17.319192 | \n",
+ "
\n",
+ " \n",
+ " | Thursday | \n",
+ " 18.869707 | \n",
+ "
\n",
+ " \n",
+ " | Friday | \n",
+ " 19.143590 | \n",
+ "
\n",
+ " \n",
+ " | Saturday | \n",
+ " 14.234818 | \n",
+ "
\n",
+ " \n",
+ " | Sunday | \n",
+ " 11.541082 | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " PM10 Mean\n",
+ "Weekdays \n",
+ "Monday 16.427984\n",
+ "Tuesday 17.660338\n",
+ "Wednesday 17.319192\n",
+ "Thursday 18.869707\n",
+ "Friday 19.143590\n",
+ "Saturday 14.234818\n",
+ "Sunday 11.541082"
+ ]
+ },
+ "execution_count": 262,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "# creating DataFrame for weekdays\n",
+ "weekdays = [['Monday', mon_mean], ['Tuesday', tue_mean], ['Wednesday', wed_mean], ['Thursday', thu_mean], ['Friday', fri_mean], ['Saturday', sat_mean], ['Sunday', sun_mean]]\n",
+ "\n",
+ "weekdf = pd.DataFrame(weekdays,columns=['Weekdays','PM10 Mean']).set_index('Weekdays')\n",
+ "weekdf"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 272,
+ "id": "least-level",
+ "metadata": {
+ "ExecuteTime": {
+ "end_time": "2021-04-01T15:36:21.367550Z",
+ "start_time": "2021-04-01T15:36:21.193651Z"
+ }
+ },
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " Station | \n",
+ " Air Quality | \n",
+ " PM10 Quality | \n",
+ " PM10 Value | \n",
+ " Generated | \n",
+ " Time (h) | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " | 0 | \n",
+ " Barcelona - Eixample | \n",
+ " Moderate | \n",
+ " Good | \n",
+ " 36.0 | \n",
+ " 01/11/2018 0:00 | \n",
+ " 0 | \n",
+ "
\n",
+ " \n",
+ " | 1 | \n",
+ " Barcelona - Palau Reial | \n",
+ " Good | \n",
+ " Good | \n",
+ " 23.0 | \n",
+ " 01/11/2018 0:00 | \n",
+ " 23 | \n",
+ "
\n",
+ " \n",
+ " | 2 | \n",
+ " Barcelona - Poblenou | \n",
+ " Good | \n",
+ " Good | \n",
+ " 32.0 | \n",
+ " 01/11/2018 0:00 | \n",
+ " 23 | \n",
+ "
\n",
+ " \n",
+ " | 3 | \n",
+ " Barcelona - Observ Fabra | \n",
+ " Good | \n",
+ " Good | \n",
+ " 25.0 | \n",
+ " 01/11/2018 0:00 | \n",
+ " 23 | \n",
+ "
\n",
+ " \n",
+ " | 4 | \n",
+ " Barcelona - Eixample | \n",
+ " Good | \n",
+ " Good | \n",
+ " 35.0 | \n",
+ " 01/11/2018 1:00 | \n",
+ " 1 | \n",
+ "
\n",
+ " \n",
+ " | ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ "
\n",
+ " \n",
+ " | 757 | \n",
+ " Barcelona - Eixample | \n",
+ " Good | \n",
+ " Good | \n",
+ " 21.0 | \n",
+ " 07/11/2018 23:00 | \n",
+ " 23 | \n",
+ "
\n",
+ " \n",
+ " | 758 | \n",
+ " Barcelona - Vall Hebron | \n",
+ " Good | \n",
+ " Good | \n",
+ " 9.0 | \n",
+ " 07/11/2018 23:00 | \n",
+ " 23 | \n",
+ "
\n",
+ " \n",
+ " | 759 | \n",
+ " Barcelona - Palau Reial | \n",
+ " Good | \n",
+ " Good | \n",
+ " 11.0 | \n",
+ " 07/11/2018 23:00 | \n",
+ " 23 | \n",
+ "
\n",
+ " \n",
+ " | 760 | \n",
+ " Barcelona - Poblenou | \n",
+ " Good | \n",
+ " Good | \n",
+ " 19.0 | \n",
+ " 07/11/2018 23:00 | \n",
+ " 23 | \n",
+ "
\n",
+ " \n",
+ " | 761 | \n",
+ " Barcelona - Observ Fabra | \n",
+ " Good | \n",
+ " Good | \n",
+ " 8.0 | \n",
+ " 07/11/2018 23:00 | \n",
+ " 23 | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
762 rows × 6 columns
\n",
+ "
"
+ ],
+ "text/plain": [
+ " Station Air Quality PM10 Quality PM10 Value \\\n",
+ "0 Barcelona - Eixample Moderate Good 36.0 \n",
+ "1 Barcelona - Palau Reial Good Good 23.0 \n",
+ "2 Barcelona - Poblenou Good Good 32.0 \n",
+ "3 Barcelona - Observ Fabra Good Good 25.0 \n",
+ "4 Barcelona - Eixample Good Good 35.0 \n",
+ ".. ... ... ... ... \n",
+ "757 Barcelona - Eixample Good Good 21.0 \n",
+ "758 Barcelona - Vall Hebron Good Good 9.0 \n",
+ "759 Barcelona - Palau Reial Good Good 11.0 \n",
+ "760 Barcelona - Poblenou Good Good 19.0 \n",
+ "761 Barcelona - Observ Fabra Good Good 8.0 \n",
+ "\n",
+ " Generated Time (h) \n",
+ "0 01/11/2018 0:00 0 \n",
+ "1 01/11/2018 0:00 23 \n",
+ "2 01/11/2018 0:00 23 \n",
+ "3 01/11/2018 0:00 23 \n",
+ "4 01/11/2018 1:00 1 \n",
+ ".. ... ... \n",
+ "757 07/11/2018 23:00 23 \n",
+ "758 07/11/2018 23:00 23 \n",
+ "759 07/11/2018 23:00 23 \n",
+ "760 07/11/2018 23:00 23 \n",
+ "761 07/11/2018 23:00 23 \n",
+ "\n",
+ "[762 rows x 6 columns]"
+ ]
+ },
+ "execution_count": 272,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "#Separate into one dataframe per week\n",
+ "week_1 = pm2[pm2['Generated'].str.contains('01/11/2018|02/11/2018|03/11/2018|04/11/2018|05/11/2018|06/11/2018|07/11/2018')]\n",
+ "week_2 = pm2[pm2['Generated'].str.contains('08/11/2018|09/11/2018|10/11/2018|11/11/2018|12/11/2018|13/11/2018|14/11/2018')]\n",
+ "week_3 = pm2[pm2['Generated'].str.contains('15/11/2018|16/11/2018|17/11/2018|18/11/2018|19/11/2018|20/11/2018|21/11/2018')]\n",
+ "week_4 = pm2[pm2['Generated'].str.contains('22/11/2018|23/11/2018|24/11/2018|25/11/2018|26/11/2018|27/11/2018|28/11/2018')]\n",
+ "#week_5 = pm2[pm2['Generated'].str.contains('29/11/2018|30/11/2018')]\n",
+ "week_1"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 273,
+ "id": "varying-suspect",
+ "metadata": {
+ "ExecuteTime": {
+ "end_time": "2021-04-01T15:36:23.459737Z",
+ "start_time": "2021-04-01T15:36:23.429539Z"
+ }
+ },
+ "outputs": [],
+ "source": [
+ "#Calculating average contamination per day\n",
+ "\n",
+ "w1_mean = week_1['PM10 Value'].mean()\n",
+ "w2_mean = week_2['PM10 Value'].mean()\n",
+ "w3_mean = week_3['PM10 Value'].mean()\n",
+ "w4_mean = week_4['PM10 Value'].mean()\n",
+ "#w5_mean = week_5['PM10 Value'].mean()"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 274,
+ "id": "ecological-crowd",
+ "metadata": {
+ "ExecuteTime": {
+ "end_time": "2021-04-01T15:36:24.965200Z",
+ "start_time": "2021-04-01T15:36:24.920692Z"
+ }
+ },
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " PM10 Mean | \n",
+ "
\n",
+ " \n",
+ " | Weeks | \n",
+ " | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " | Week 1 | \n",
+ " 13.481627 | \n",
+ "
\n",
+ " \n",
+ " | Week 2 | \n",
+ " 19.594096 | \n",
+ "
\n",
+ " \n",
+ " | Week 3 | \n",
+ " 17.355828 | \n",
+ "
\n",
+ " \n",
+ " | Week 4 | \n",
+ " 13.561404 | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " PM10 Mean\n",
+ "Weeks \n",
+ "Week 1 13.481627\n",
+ "Week 2 19.594096\n",
+ "Week 3 17.355828\n",
+ "Week 4 13.561404"
+ ]
+ },
+ "execution_count": 274,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "# creating DataFrame for weeks\n",
+ "weeks = [['Week 1', w1_mean], ['Week 2', w2_mean], ['Week 3', w3_mean], ['Week 4', w4_mean]] #['Week 5', w5_mean]]\n",
+ "\n",
+ "weeksdf = pd.DataFrame(weeks,columns=['Weeks','PM10 Mean']).set_index('Weeks')\n",
+ "weeksdf"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 59,
+ "id": "structural-filling",
+ "metadata": {
+ "ExecuteTime": {
+ "end_time": "2021-03-31T16:56:51.294593Z",
+ "start_time": "2021-03-31T16:56:51.279977Z"
+ }
+ },
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "Station PM10 Quality\n",
+ "Barcelona - Eixample Good 655\n",
+ " Moderate 63\n",
+ "Barcelona - Gràcia Good 211\n",
+ "Barcelona - Observ Fabra Good 693\n",
+ " -- 21\n",
+ "Barcelona - Palau Reial Good 696\n",
+ " -- 22\n",
+ "Barcelona - Poblenou Good 667\n",
+ " -- 32\n",
+ " Moderate 17\n",
+ "Barcelona - Vall Hebron Good 645\n",
+ "Name: PM10 Quality, dtype: int64"
+ ]
+ },
+ "execution_count": 59,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "pm.groupby('Station')['PM10 Quality'].value_counts()"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 25,
+ "id": "electoral-slave",
+ "metadata": {
+ "ExecuteTime": {
+ "end_time": "2021-03-31T16:21:37.794400Z",
+ "start_time": "2021-03-31T16:21:37.672449Z"
+ },
+ "scrolled": true
+ },
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " count | \n",
+ " mean | \n",
+ " std | \n",
+ " min | \n",
+ " 25% | \n",
+ " 50% | \n",
+ " 75% | \n",
+ " max | \n",
+ "
\n",
+ " \n",
+ " | Station | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " | Barcelona - Observ Fabra | \n",
+ " 693.0 | \n",
+ " 10.773449 | \n",
+ " 4.706629 | \n",
+ " 5.0 | \n",
+ " 7.0 | \n",
+ " 9.0 | \n",
+ " 13.0 | \n",
+ " 25.0 | \n",
+ "
\n",
+ " \n",
+ " | Barcelona - Vall Hebron | \n",
+ " 645.0 | \n",
+ " 13.910078 | \n",
+ " 6.795914 | \n",
+ " 2.0 | \n",
+ " 9.0 | \n",
+ " 12.0 | \n",
+ " 18.0 | \n",
+ " 32.0 | \n",
+ "
\n",
+ " \n",
+ " | Barcelona - Palau Reial | \n",
+ " 696.0 | \n",
+ " 14.527299 | \n",
+ " 5.583568 | \n",
+ " 6.0 | \n",
+ " 10.0 | \n",
+ " 13.0 | \n",
+ " 18.0 | \n",
+ " 29.0 | \n",
+ "
\n",
+ " \n",
+ " | Barcelona - Gràcia | \n",
+ " 211.0 | \n",
+ " 16.815166 | \n",
+ " 6.026841 | \n",
+ " 7.0 | \n",
+ " 12.0 | \n",
+ " 17.0 | \n",
+ " 21.0 | \n",
+ " 31.0 | \n",
+ "
\n",
+ " \n",
+ " | Barcelona - Poblenou | \n",
+ " 684.0 | \n",
+ " 20.540936 | \n",
+ " 7.870088 | \n",
+ " 7.0 | \n",
+ " 15.0 | \n",
+ " 19.0 | \n",
+ " 27.0 | \n",
+ " 38.0 | \n",
+ "
\n",
+ " \n",
+ " | Barcelona - Eixample | \n",
+ " 718.0 | \n",
+ " 22.781337 | \n",
+ " 8.454874 | \n",
+ " 11.0 | \n",
+ " 16.0 | \n",
+ " 22.0 | \n",
+ " 29.0 | \n",
+ " 44.0 | \n",
+ "
\n",
+ " \n",
+ " | Barcelona - Ciutadella | \n",
+ " 0.0 | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " NaN | \n",
+ "
\n",
+ " \n",
+ " | Barcelona - Sants | \n",
+ " 0.0 | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " NaN | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " count mean std min 25% 50% 75% \\\n",
+ "Station \n",
+ "Barcelona - Observ Fabra 693.0 10.773449 4.706629 5.0 7.0 9.0 13.0 \n",
+ "Barcelona - Vall Hebron 645.0 13.910078 6.795914 2.0 9.0 12.0 18.0 \n",
+ "Barcelona - Palau Reial 696.0 14.527299 5.583568 6.0 10.0 13.0 18.0 \n",
+ "Barcelona - Gràcia 211.0 16.815166 6.026841 7.0 12.0 17.0 21.0 \n",
+ "Barcelona - Poblenou 684.0 20.540936 7.870088 7.0 15.0 19.0 27.0 \n",
+ "Barcelona - Eixample 718.0 22.781337 8.454874 11.0 16.0 22.0 29.0 \n",
+ "Barcelona - Ciutadella 0.0 NaN NaN NaN NaN NaN NaN \n",
+ "Barcelona - Sants 0.0 NaN NaN NaN NaN NaN NaN \n",
+ "\n",
+ " max \n",
+ "Station \n",
+ "Barcelona - Observ Fabra 25.0 \n",
+ "Barcelona - Vall Hebron 32.0 \n",
+ "Barcelona - Palau Reial 29.0 \n",
+ "Barcelona - Gràcia 31.0 \n",
+ "Barcelona - Poblenou 38.0 \n",
+ "Barcelona - Eixample 44.0 \n",
+ "Barcelona - Ciutadella NaN \n",
+ "Barcelona - Sants NaN "
+ ]
+ },
+ "execution_count": 25,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "pm.groupby('Station')['PM10 Value'].describe().sort_values('mean')\n",
+ "\n",
+ "#Observatori Fabra and Vall Hebron are further away from the port\n",
+ "#Quite some distance\n",
+ "#Then Palau and closely followed by Gracia\n",
+ "#Then Sants"
+ ]
+ }
+ ],
+ "metadata": {
+ "kernelspec": {
+ "display_name": "Python 3",
+ "language": "python",
+ "name": "python3"
+ },
+ "language_info": {
+ "codemirror_mode": {
+ "name": "ipython",
+ "version": 3
+ },
+ "file_extension": ".py",
+ "mimetype": "text/x-python",
+ "name": "python",
+ "nbconvert_exporter": "python",
+ "pygments_lexer": "ipython3",
+ "version": "3.8.2"
+ },
+ "latex_envs": {
+ "LaTeX_envs_menu_present": true,
+ "autoclose": false,
+ "autocomplete": true,
+ "bibliofile": "biblio.bib",
+ "cite_by": "apalike",
+ "current_citInitial": 1,
+ "eqLabelWithNumbers": true,
+ "eqNumInitial": 1,
+ "hotkeys": {
+ "equation": "Ctrl-E",
+ "itemize": "Ctrl-I"
+ },
+ "labels_anchors": false,
+ "latex_user_defs": false,
+ "report_style_numbering": false,
+ "user_envs_cfg": false
+ },
+ "varInspector": {
+ "cols": {
+ "lenName": 16,
+ "lenType": 16,
+ "lenVar": 40
+ },
+ "kernels_config": {
+ "python": {
+ "delete_cmd_postfix": "",
+ "delete_cmd_prefix": "del ",
+ "library": "var_list.py",
+ "varRefreshCmd": "print(var_dic_list())"
+ },
+ "r": {
+ "delete_cmd_postfix": ") ",
+ "delete_cmd_prefix": "rm(",
+ "library": "var_list.r",
+ "varRefreshCmd": "cat(var_dic_list()) "
+ }
+ },
+ "types_to_exclude": [
+ "module",
+ "function",
+ "builtin_function_or_method",
+ "instance",
+ "_Feature"
+ ],
+ "window_display": false
+ }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 5
+}
diff --git a/your-project/README.md b/your-project/README.md
index 0103b93..8ba05e2 100644
--- a/your-project/README.md
+++ b/your-project/README.md
@@ -1,9 +1,10 @@
-# Title of My Project
-*[Your Name]*
+# Air Quality in Barcelona
+Lisa Saunders, Tsvetelina Minkova & Ignacio Rus Prados
+
+DAFT MAR2021
-*[Your Cohort, Campus & Date]*
## Content
- [Project Description](#project-description)
@@ -16,28 +17,26 @@
## Project Description
-Write a short introduction to your project: 3-5 sentences about the context of your topic and why you chose it.
+Our project explores the Urban Environment Dataset for Barcelona, where we analyse patterns of three different pollutants: O3, NO2 and PM10.
+The research shows pollution evolution over the day, week and month. It also offers an overview of the areas within Barcelona that are most affected.
## Questions & Hypotheses
-What are the questions you would like to answer with your analysis? What did you feel were the answers to those questions before answering them with data?
+- When can we see the highest levels of pollution?
+- Which areas are most affected by pollution?
+- Are there significant changes of pollution levels during the day? And during the week?
## Dataset
-What dataset (or datasets) did you use? What is the source of your data? Provide links to the data if available and describe the data briefly.
+We used the Urban Evironment Dataset for Barcelona, which offers hourly and daily pollution levels for O3, NO2 and PM10. It covers one month of time (November, 2018)
-## Database
-What is the structure of your database? Have you created more than one table and if yes, how are they related to each other? Include a drawing or computer-generated image of the ERD (Entity Relationship Diagram) of your database.
## Workflow
-Outline the workflow you used in your project. What are the steps you went through?
+Our first step was to plan our timeline. After deciding on our deadlines we divided the project in tasks and investigated a series of questions that could be interesting to explore within our dataset.
## Organization
-How did you organize your work? Did you use any tools like a kanban board?
-
-What does your repository look like? Explain your folder and file structure.
+We used a Kanban board to keep track of our tasks for the project. We summarized our necessary steps in this board and had regular check ins everyday.
## Links
-Include links to your repository, slides and kanban board. Feel free to include any other links associated with your project.
-[Repository](https://github.com/)
-[Slides](https://slides.com/)
-[Trello](https://trello.com/en)
+[Repository](https://github.com/IgnacioRus/Project-Week-2-Barcelona.git)
+[Slides](https://docs.google.com/presentation/d/1aIBM9A2m2_DH6Keqxy7CH0daNFuNeX912AQWhAiYBwI/edit?usp=sharing)
+[Trello](https://trello.com/invite/b/wr2ikOtw/02a590d9a44ee4d42cac1bfcbf73bbf4/barcelone-urban-environment)