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", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
StationAir QualityLongitudeLatitudeO3 HourO3 QualityO3 ValueNO2 HourNO2 QualityNO2 ValuePM10 HourPM10 QualityPM10 ValueGeneratedDate Time
0Barcelona - SantsGood2.133141.3788NaNNaNNaN0hGood84.0NaNNaNNaN01/11/2018 0:001541027104
1Barcelona - EixampleModerate2.153841.38530hGood1.00hModerate113.00hGood36.001/11/2018 0:001541027104
2Barcelona - GràciaGood2.153441.39870hGood10.00hGood73.0NaNNaNNaN01/11/2018 0:001541027104
3Barcelona - CiutadellaGood2.187441.38640hGood2.00hGood86.0NaNNaNNaN01/11/2018 0:001541027104
4Barcelona - Vall HebronGood2.148041.42610hGood7.00hGood69.0NaNNaNNaN01/11/2018 0:001541027104
\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", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
StationAir QualityLongitudeLatitudeO3 HourO3 QualityO3 ValueNO2 HourNO2 QualityNO2 ValuePM10 HourPM10 QualityPM10 ValueGeneratedDate Time
0Barcelona - SantsGood2.133141.3788NaNNaNNaN0hGood84.0NaNNaNNaN01/11/2018 0:001541027104
1Barcelona - EixampleModerate2.153841.38530hGood1.00hModerate113.00hGood36.001/11/2018 0:001541027104
2Barcelona - GràciaGood2.153441.39870hGood10.00hGood73.0NaNNaNNaN01/11/2018 0:001541027104
\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", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
minmaxmean
station
Barcelona - Ciutadella5.088.039.855920
Barcelona - Eixample17.0113.056.240683
Barcelona - Gràcia6.0117.044.574534
Barcelona - Observ Fabra1.071.011.449213
Barcelona - Palau Reial1.099.027.974322
Barcelona - Poblenou5.0105.041.161103
Barcelona - Sants7.089.036.359165
Barcelona - Vall Hebron6.091.030.812940
\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", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
NO2 TimeNO2 QualityNO2 Value
station
Barcelona - Gràcia10hModerate117.0
Barcelona - Gràcia9hModerate116.0
Barcelona - Gràcia9hModerate115.0
Barcelona - Eixample0hModerate113.0
Barcelona - Eixample9hModerate112.0
Barcelona - Eixample11hModerate109.0
Barcelona - Eixample10hModerate108.0
Barcelona - Gràcia11hModerate107.0
Barcelona - Eixample10hModerate105.0
Barcelona - Poblenou20hModerate105.0
\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", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
stationair_qualitylongitudelatitudeno2_hourno2_qualityno2_valuegenerateddate_time
0Barcelona - SantsGood2.133141.37880hGood84.001/11/2018 0:001541027104
1Barcelona - EixampleModerate2.153841.38530hModerate113.001/11/2018 0:001541027104
2Barcelona - GràciaGood2.153441.39870hGood73.001/11/2018 0:001541027104
\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", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
stationair_qualitylongitudelatitudeno2_qualityno2_valuegenerateddate_timeTime
0Barcelona - SantsGood2.133141.3788Good84.001/11/2018 0:0015410271040
1Barcelona - EixampleModerate2.153841.3853Moderate113.001/11/2018 0:0015410271040
2Barcelona - GràciaGood2.153441.3987Good73.001/11/2018 0:0015410271040
\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", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
minmaxmean
Time
02.0113.042.854890
12.096.035.714286
22.086.030.235808
31.077.026.772926
41.065.024.644444
51.067.023.298701
61.064.024.314894
71.080.030.372294
81.0103.040.004237
91.0116.046.268908
101.0117.043.719665
111.0109.038.466667
122.080.030.612335
131.083.027.261411
142.071.028.053398
152.088.028.342723
163.084.028.910714
173.080.032.728111
186.089.042.253219
196.0101.049.320000
204.0105.050.504505
214.097.048.506726
223.097.044.532967
233.088.039.039735
\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", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
minmaxmean
Time
02.0113.042.854890
12.096.035.714286
22.086.030.235808
31.077.026.772926
41.065.024.644444
51.067.023.298701
61.064.024.314894
71.080.030.372294
81.0103.040.004237
91.0116.046.268908
101.0117.043.719665
111.0109.038.466667
\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", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Time0123456789...14151617181920212223
min2.000002.0000002.0000001.0000001.0000001.0000001.0000001.0000001.0000001.000000...2.0000002.0000003.0000003.0000006.0000006.004.0000004.0000003.0000003.000000
max113.0000096.00000086.00000077.00000065.00000067.00000064.00000080.000000103.000000116.000000...71.00000088.00000084.00000080.00000089.000000101.00105.00000097.00000097.00000088.000000
mean42.8548935.71428630.23580826.77292624.64444423.29870124.31489430.37229440.00423746.268908...28.05339828.34272328.91071432.72811142.25321949.3250.50450548.50672644.53296739.039735
\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", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
minmaxmeanmedian
station
Barcelona - Ciutadella5.072.034.76595735.0
Barcelona - Eixample18.099.044.01149442.0
Barcelona - Gràcia6.083.030.60227326.5
Barcelona - Observ Fabra1.024.07.8526327.0
Barcelona - Palau Reial2.080.016.80851112.5
Barcelona - Poblenou6.086.030.64893626.5
Barcelona - Sants9.083.024.92941222.0
Barcelona - Vall Hebron7.082.017.67021313.5
\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", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
NO2 Value Mean
Weekday
Monday29.031335
Tuesday31.291951
Wednesday38.773427
Thursday45.619699
Friday44.128767
Saturday29.661664
Sunday25.686731
\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", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
NO2 Value
Weeks
Week 134.013503
Week 235.436096
Week 332.219124
Week 436.809077
\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", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
StationAir QualityLongitudeLatitudeO3 HourO3 QualityO3 ValueNO2 HourNO2 QualityNO2 ValuePM10 HourPM10 QualityPM10 ValueGeneratedDate Time
0Barcelona - SantsGood2.133141.3788NaNNaNNaN0hGood84.0NaNNaNNaN1/11/2018 0:001541027104
1Barcelona - EixampleModerate2.153841.38530hGood1.00hModerate113.00hGood36.01/11/2018 0:001541027104
2Barcelona - GràciaGood2.153441.39870hGood10.00hGood73.0NaNNaNNaN1/11/2018 0:001541027104
3Barcelona - CiutadellaGood2.187441.38640hGood2.00hGood86.0NaNNaNNaN1/11/2018 0:001541027104
4Barcelona - Vall HebronGood2.148041.42610hGood7.00hGood69.0NaNNaNNaN1/11/2018 0:001541027104
\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", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
StationAir QualityLongitudeLatitudeO3 HourO3 QualityO3 ValueNO2 HourNO2 QualityNO2 ValuePM10 HourPM10 QualityPM10 ValueGeneratedDate Time
5739Barcelona - CiutadellaGood2.187441.386422hGood10.022hGood57.0NaNNaNNaN30/11/2018 23:001543615502
5740Barcelona - Vall HebronGood2.148041.426122hGood32.022hGood31.022hGood21.030/11/2018 23:001543615502
5741Barcelona - Palau ReialGood2.115141.387522hGood40.022hGood20.022hGood15.030/11/2018 23:001543615502
5742Barcelona - PoblenouGood2.204541.4039NaNNaNNaN22hGood70.022hGood25.030/11/2018 23:001543615502
5743Barcelona - Observ FabraGood2.123941.418322hGood64.022hGood21.022hGood12.030/11/2018 23:001543615502
\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", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
StationO3 HourO3 QualityO3 Value
0Barcelona - SantsNaNNaNNaN
1Barcelona - Eixample0hGood1.0
2Barcelona - Gràcia0hGood10.0
3Barcelona - Ciutadella0hGood2.0
4Barcelona - Vall Hebron0hGood7.0
...............
5739Barcelona - Ciutadella22hGood10.0
5740Barcelona - Vall Hebron22hGood32.0
5741Barcelona - Palau Reial22hGood40.0
5742Barcelona - PoblenouNaNNaNNaN
5743Barcelona - Observ Fabra22hGood64.0
\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", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
minmaxmeanmedian
station
Barcelona - Ciutadella1.085.025.12838822.0
Barcelona - Eixample1.061.017.03876014.0
Barcelona - Gràcia1.069.026.67546626.0
Barcelona - Observ Fabra16.0100.065.35908466.0
Barcelona - Palau Reial1.064.032.02139835.0
Barcelona - PoblenouNaNNaNNaNNaN
Barcelona - SantsNaNNaNNaNNaN
Barcelona - Vall Hebron1.082.036.36708940.0
\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", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
o3_houro3_quality
stationo3_value
Barcelona - Ciutadella1.099
2.09595
3.03333
4.01414
5.01515
............
Barcelona - Vall Hebron76.011
78.011
79.011
81.011
82.011
\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", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
stationair_qualitylongitudelatitudeo3_houro3_qualityo3_valuegenerateddate_time
0Barcelona - EixampleModerate2.153841.38530hGood1.01/11/2018 0:001541027104
1Barcelona - GràciaGood2.153441.39870hGood10.01/11/2018 0:001541027104
2Barcelona - CiutadellaGood2.187441.38640hGood2.01/11/2018 0:001541027104
3Barcelona - Vall HebronGood2.148041.42610hGood7.01/11/2018 0:001541027104
4Barcelona - Palau ReialGood2.115141.387523hGood11.01/11/2018 0:001541027104
..............................
4096Barcelona - GràciaGood2.153441.398722hGood8.030/11/2018 23:001543615502
4097Barcelona - CiutadellaGood2.187441.386422hGood10.030/11/2018 23:001543615502
4098Barcelona - Vall HebronGood2.148041.426122hGood32.030/11/2018 23:001543615502
4099Barcelona - Palau ReialGood2.115141.387522hGood40.030/11/2018 23:001543615502
4100Barcelona - Observ FabraGood2.123941.418322hGood64.030/11/2018 23:001543615502
\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", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
minmaxmeanmedian
station
Barcelona - Ciutadella1.085.025.1322.0
Barcelona - Eixample1.061.017.0414.0
Barcelona - Gràcia1.069.026.6826.0
Barcelona - Observ Fabra16.0100.065.3666.0
Barcelona - Palau Reial1.064.032.0235.0
Barcelona - Vall Hebron1.082.036.3740.0
\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", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
minmaxmeanmedian
o3_hour
0h1.089.027.6623.0
10h1.083.028.5024.0
11h1.084.032.3031.0
12h1.081.039.9741.0
13h2.081.045.0046.0
14h2.083.044.5946.0
15h2.085.044.2946.0
16h2.081.044.4546.0
17h1.080.042.0142.0
18h1.085.034.0234.5
19h1.090.028.4724.0
1h1.083.030.4930.0
20h1.099.027.1221.0
21h1.0100.027.9522.0
22h1.091.030.1725.0
23h1.092.033.3631.0
2h1.084.033.4334.0
3h1.085.035.2735.0
4h1.086.036.6438.5
5h1.088.036.9737.5
6h1.090.035.9534.0
7h1.086.031.5932.0
8h1.087.027.2420.0
9h1.084.024.9617.0
\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", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
minmaxmeanmedian
stationo3_hour
Barcelona - Ciutadella0h1.071.016.559.5
10h2.047.014.8012.5
11h3.053.023.9325.0
12h2.057.032.8333.5
13h7.065.037.9242.0
..................
Barcelona - Vall Hebron5h4.070.041.2047.5
6h5.066.037.9741.0
7h1.065.030.2832.0
8h2.061.027.1329.5
9h3.054.028.3134.0
\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", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
O3 Mean
Weekdays
Monday36.84
Tuesday35.02
Wednesday32.72
Thursday28.68
Friday22.39
Saturday40.27
Sunday44.10
\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", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
O3 Mean
Weeks
Week 1NaN
Week 240.074605
Week 338.747604
Week 430.050568
\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", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
stationo3_houro3_qualityo3_value
5543Barcelona - Observ Fabra21hGood100.0
5535Barcelona - Observ Fabra20hGood99.0
959Barcelona - Observ Fabra23hGood92.0
5551Barcelona - Observ Fabra22hGood91.0
5559Barcelona - Observ Fabra23hGood91.0
2159Barcelona - Observ Fabra6hGood90.0
3823Barcelona - Observ Fabra22hGood90.0
5527Barcelona - Observ Fabra19hGood90.0
5567Barcelona - Observ Fabra0hGood89.0
5607Barcelona - Observ Fabra5hGood88.0
15Barcelona - Observ Fabra0hGood87.0
847Barcelona - Observ Fabra8hGood87.0
2151Barcelona - Observ Fabra5hGood87.0
2175Barcelona - Observ Fabra8hGood87.0
2351Barcelona - Observ Fabra6hGood87.0
4271Barcelona - Observ Fabra6hGood87.0
751Barcelona - Observ Fabra20hGood86.0
2335Barcelona - Observ Fabra4hGood86.0
2343Barcelona - Observ Fabra5hGood86.0
2359Barcelona - Observ Fabra7hGood86.0
2367Barcelona - Observ Fabra8hGood86.0
4263Barcelona - Observ Fabra5hGood86.0
915Barcelona - Ciutadella18hGood85.0
1583Barcelona - Observ Fabra5hGood85.0
2327Barcelona - Observ Fabra3hGood85.0
2615Barcelona - Observ Fabra15hGood85.0
2735Barcelona - Observ Fabra6hGood85.0
679Barcelona - Observ Fabra11hGood84.0
2231Barcelona - Observ Fabra15hGood84.0
2319Barcelona - Observ Fabra2hGood84.0
2375Barcelona - Observ Fabra9hGood84.0
5599Barcelona - Observ Fabra4hGood84.0
5639Barcelona - Observ Fabra9hGood84.0
31Barcelona - Observ Fabra2hGood83.0
39Barcelona - Observ Fabra3hGood83.0
671Barcelona - Observ Fabra10hGood83.0
919Barcelona - Observ Fabra18hGood83.0
2223Barcelona - Observ Fabra14hGood83.0
4255Barcelona - Observ Fabra4hGood83.0
5031Barcelona - Observ Fabra5hGood83.0
5455Barcelona - Observ Fabra10hGood83.0
5575Barcelona - Observ Fabra1hGood83.0
615Barcelona - Observ Fabra3hGood82.0
623Barcelona - Observ Fabra4hGood82.0
916Barcelona - Vall Hebron18hGood82.0
2167Barcelona - Observ Fabra7hGood82.0
4247Barcelona - Observ Fabra3hGood82.0
5583Barcelona - Observ Fabra2hGood82.0
5647Barcelona - Observ Fabra10hGood82.0
47Barcelona - Observ Fabra4hGood81.0
\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", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
StationAir QualityLongitudeLatitudeO3 HourO3 QualityO3 ValueNO2 HourNO2 QualityNO2 ValuePM10 HourPM10 QualityPM10 ValueGeneratedDate Time
0Barcelona - SantsGood2.133141.3788NaNNaNNaN0hGood84.0NaNNaNNaN01/11/2018 0:001541027104
1Barcelona - EixampleModerate2.153841.38530hGood1.00hModerate113.00hGood36.001/11/2018 0:001541027104
2Barcelona - GràciaGood2.153441.39870hGood10.00hGood73.0NaNNaNNaN01/11/2018 0:001541027104
3Barcelona - CiutadellaGood2.187441.38640hGood2.00hGood86.0NaNNaNNaN01/11/2018 0:001541027104
4Barcelona - Vall HebronGood2.148041.42610hGood7.00hGood69.0NaNNaNNaN01/11/2018 0:001541027104
................................................
5739Barcelona - CiutadellaGood2.187441.386422hGood10.022hGood57.0NaNNaNNaN30/11/2018 23:001543615502
5740Barcelona - Vall HebronGood2.148041.426122hGood32.022hGood31.022hGood21.030/11/2018 23:001543615502
5741Barcelona - Palau ReialGood2.115141.387522hGood40.022hGood20.022hGood15.030/11/2018 23:001543615502
5742Barcelona - PoblenouGood2.204541.4039NaNNaNNaN22hGood70.022hGood25.030/11/2018 23:001543615502
5743Barcelona - Observ FabraGood2.123941.418322hGood64.022hGood21.022hGood12.030/11/2018 23:001543615502
\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", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
StationAir QualityPM10 HourPM10 QualityPM10 ValueGenerated
0Barcelona - SantsGoodNaNNaNNaN01/11/2018 0:00
1Barcelona - EixampleModerate0hGood36.001/11/2018 0:00
2Barcelona - GràciaGoodNaNNaNNaN01/11/2018 0:00
3Barcelona - CiutadellaGoodNaNNaNNaN01/11/2018 0:00
4Barcelona - Vall HebronGoodNaNNaNNaN01/11/2018 0:00
.....................
5739Barcelona - CiutadellaGoodNaNNaNNaN30/11/2018 23:00
5740Barcelona - Vall HebronGood22hGood21.030/11/2018 23:00
5741Barcelona - Palau ReialGood22hGood15.030/11/2018 23:00
5742Barcelona - PoblenouGood22hGood25.030/11/2018 23:00
5743Barcelona - Observ FabraGood22hGood12.030/11/2018 23:00
\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", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
StationAir QualityPM10 QualityPM10 ValueGeneratedTime (h)
0Barcelona - EixampleModerateGood36.001/11/2018 0:000
1Barcelona - Palau ReialGoodGood23.001/11/2018 0:0023
2Barcelona - PoblenouGoodGood32.001/11/2018 0:0023
3Barcelona - Observ FabraGoodGood25.001/11/2018 0:0023
4Barcelona - EixampleGoodGood35.001/11/2018 1:001
.....................
3642Barcelona - GràciaGoodGood22.030/11/2018 23:0022
3643Barcelona - Vall HebronGoodGood21.030/11/2018 23:0022
3644Barcelona - Palau ReialGoodGood15.030/11/2018 23:0022
3645Barcelona - PoblenouGoodGood25.030/11/2018 23:0022
3646Barcelona - Observ FabraGoodGood12.030/11/2018 23:0022
\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", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
minmaxmean
Time (h)
02.042.016.07
13.043.017.23
22.039.016.34
32.044.017.23
43.044.016.81
52.044.016.88
62.044.016.59
72.043.016.66
82.042.016.46
93.040.016.58
102.038.016.29
113.039.016.42
\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", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
minmaxmean
Time (h)
02.042.016.07
13.043.017.23
22.039.016.34
32.044.017.23
43.044.016.81
52.044.016.88
62.044.016.59
72.043.016.66
82.042.016.46
93.040.016.58
102.038.016.29
113.039.016.42
\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", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
minmaxmean
Time (h)
123.041.016.34
133.042.016.93
143.042.016.55
152.043.016.53
162.043.016.51
172.042.016.01
182.041.016.81
193.041.016.73
202.041.016.51
212.041.016.40
223.042.016.58
232.041.016.70
\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", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
minmaxmean
Station
Barcelona - Observ Fabra5.025.010.77
Barcelona - Vall Hebron2.032.013.91
Barcelona - Palau Reial6.029.014.53
Barcelona - Gràcia7.031.016.82
Barcelona - Poblenou7.038.020.54
Barcelona - Eixample11.044.022.78
\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", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
minmaxmean
StationTime (h)
Barcelona - Eixample012.042.022.43
111.043.022.97
211.039.021.93
311.044.023.70
411.044.023.34
...............
Barcelona - Vall Hebron193.032.014.42
202.025.013.27
212.032.013.82
223.031.015.04
232.031.013.57
\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", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
StationAir QualityPM10 QualityPM10 ValueGeneratedTime (h)
0Barcelona - EixampleModerateGood36.001/11/2018 0:000
1Barcelona - Palau ReialGoodGood23.001/11/2018 0:0023
2Barcelona - PoblenouGoodGood32.001/11/2018 0:0023
3Barcelona - Observ FabraGoodGood25.001/11/2018 0:0023
4Barcelona - EixampleGoodGood35.001/11/2018 1:001
.....................
3642Barcelona - GràciaGoodGood22.030/11/2018 23:0022
3643Barcelona - Vall HebronGoodGood21.030/11/2018 23:0022
3644Barcelona - Palau ReialGoodGood15.030/11/2018 23:0022
3645Barcelona - PoblenouGoodGood25.030/11/2018 23:0022
3646Barcelona - Observ FabraGoodGood12.030/11/2018 23:0022
\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", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
StationAir QualityPM10 QualityPM10 ValueGeneratedTime (h)
425Barcelona - EixampleGoodGood19.005/11/2018 0:000
426Barcelona - Vall HebronGoodGood2.005/11/2018 0:000
427Barcelona - Palau ReialGoodGood16.005/11/2018 0:000
428Barcelona - PoblenouGoodGood19.005/11/2018 0:000
429Barcelona - Observ FabraGoodGood14.005/11/2018 0:000
.....................
3099Barcelona - EixampleGoodGood13.026/11/2018 23:0022
3100Barcelona - GràciaGoodGood13.026/11/2018 23:0022
3101Barcelona - Vall HebronGoodGood10.026/11/2018 23:0022
3102Barcelona - Palau ReialGoodGood10.026/11/2018 23:0023
3103Barcelona - Observ FabraGoodGood7.026/11/2018 23:0022
\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", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
PM10 Mean
Weekdays
Monday16.427984
Tuesday17.660338
Wednesday17.319192
Thursday18.869707
Friday19.143590
Saturday14.234818
Sunday11.541082
\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", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
StationAir QualityPM10 QualityPM10 ValueGeneratedTime (h)
0Barcelona - EixampleModerateGood36.001/11/2018 0:000
1Barcelona - Palau ReialGoodGood23.001/11/2018 0:0023
2Barcelona - PoblenouGoodGood32.001/11/2018 0:0023
3Barcelona - Observ FabraGoodGood25.001/11/2018 0:0023
4Barcelona - EixampleGoodGood35.001/11/2018 1:001
.....................
757Barcelona - EixampleGoodGood21.007/11/2018 23:0023
758Barcelona - Vall HebronGoodGood9.007/11/2018 23:0023
759Barcelona - Palau ReialGoodGood11.007/11/2018 23:0023
760Barcelona - PoblenouGoodGood19.007/11/2018 23:0023
761Barcelona - Observ FabraGoodGood8.007/11/2018 23:0023
\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", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
PM10 Mean
Weeks
Week 113.481627
Week 219.594096
Week 317.355828
Week 413.561404
\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", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
countmeanstdmin25%50%75%max
Station
Barcelona - Observ Fabra693.010.7734494.7066295.07.09.013.025.0
Barcelona - Vall Hebron645.013.9100786.7959142.09.012.018.032.0
Barcelona - Palau Reial696.014.5272995.5835686.010.013.018.029.0
Barcelona - Gràcia211.016.8151666.0268417.012.017.021.031.0
Barcelona - Poblenou684.020.5409367.8700887.015.019.027.038.0
Barcelona - Eixample718.022.7813378.45487411.016.022.029.044.0
Barcelona - Ciutadella0.0NaNNaNNaNNaNNaNNaNNaN
Barcelona - Sants0.0NaNNaNNaNNaNNaNNaNNaN
\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 @@ Ironhack Logo -# 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)