From 552b49f118dd2b8e2942f09957cb7336a74b084a Mon Sep 17 00:00:00 2001 From: Sebastian Lenzlinger <74497638+sebaschi@users.noreply.github.com> Date: Thu, 16 Nov 2023 17:27:21 +0100 Subject: [PATCH] Add Text File containing relevant datasource urls. First diary entries written. Wiki entries on how to setup a python virtual env for the project --- .gitignore | 1 + DataExploration.ipynb | 80 +++++++++++++++++++-------------- docs/diary.md | 16 +++++++ docs/wiki.md | 25 +++++++++++ requirements.txt | 102 ++++++++++++++++++++++++++++++++++++++++++ 5 files changed, 191 insertions(+), 33 deletions(-) create mode 100644 requirements.txt diff --git a/.gitignore b/.gitignore index 89af448..c96c287 100644 --- a/.gitignore +++ b/.gitignore @@ -1,6 +1,7 @@ # Created by https://www.toptal.com/developers/gitignore/api/python,pycharm,linux,macos,database,data # Edit at https://www.toptal.com/developers/gitignore?templates=python,pycharm,linux,macos,database,data datasets/ +db23-project-venv/ ### Data ### *.csv *.dat diff --git a/DataExploration.ipynb b/DataExploration.ipynb index a52ecca..0d62426 100644 --- a/DataExploration.ipynb +++ b/DataExploration.ipynb @@ -2,14 +2,18 @@ "cells": [ { "cell_type": "code", - "execution_count": 20, + "execution_count": 1, "id": "17ca2acb", "metadata": { "collapsed": true, "jupyter": { "outputs_hidden": true }, - "tags": [] + "tags": [], + "ExecuteTime": { + "end_time": "2023-11-16T16:20:49.426349Z", + "start_time": "2023-11-16T16:20:16.117316Z" + } }, "outputs": [ { @@ -156,7 +160,11 @@ "2 Unbekannt 2016-01-01T02:00:00 2021-02-03 213.0 Gemessen \n", "3 Unbekannt 2016-01-01T03:00:00 2021-02-03 112.0 Gemessen \n", "4 Unbekannt 2016-01-01T04:00:00 2021-02-03 80.0 Gemessen \n", - "Data for year 2017:\n", + "File not found for year 2017: datasets/sid_dav_verkehrszaehlung_miv_OD2031_2017.csv\n", + "File not found for year 2018: datasets/sid_dav_verkehrszaehlung_miv_OD2031_2018.csv\n", + "File not found for year 2019: datasets/sid_dav_verkehrszaehlung_miv_OD2031_2019.csv\n", + "File not found for year 2020: datasets/sid_dav_verkehrszaehlung_miv_OD2031_2020.csv\n", + "Data for year 2021:\n", " MSID MSName ZSID ZSName Achse \\\n", "0 Z001M001 Unbekannt Z001 Seestrasse (Strandbad Wollishofen) Seestrasse \n", "1 Z001M001 Unbekannt Z001 Seestrasse (Strandbad Wollishofen) Seestrasse \n", @@ -179,34 +187,39 @@ "4 Badanstalt Wollishofen 1 2 Unbekannt Unbekannt \n", "\n", " D4ID MessungDatZeit LieferDat AnzFahrzeuge AnzFahrzeugeStatus \n", - "0 Unbekannt 2017-01-01T00:00:00 2021-02-03 295.0 Gemessen \n", - "1 Unbekannt 2017-01-01T01:00:00 2021-02-03 264.0 Gemessen \n", - "2 Unbekannt 2017-01-01T02:00:00 2021-02-03 180.0 Gemessen \n", - "3 Unbekannt 2017-01-01T03:00:00 2021-02-03 107.0 Gemessen \n", - "4 Unbekannt 2017-01-01T04:00:00 2021-02-03 97.0 Gemessen \n" - ] - }, - { - "ename": "KeyboardInterrupt", - "evalue": "", - "output_type": "error", - "traceback": [ - "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", - "\u001b[0;31mKeyboardInterrupt\u001b[0m Traceback (most recent call last)", - "\u001b[0;32m/tmp/ipykernel_311061/2135127822.py\u001b[0m in \u001b[0;36m\u001b[0;34m\u001b[0m\n\u001b[1;32m 13\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 14\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mos\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mpath\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mexists\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mfile_path\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 15\u001b[0;31m \u001b[0mdf\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mpd\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mread_csv\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mfile_path\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mlow_memory\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mFalse\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 16\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 17\u001b[0m \u001b[0mtable_key\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34mf\"miv_{year}\"\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;32m~/anaconda3/lib/python3.9/site-packages/pandas/io/parsers/readers.py\u001b[0m in \u001b[0;36mread_csv\u001b[0;34m(filepath_or_buffer, sep, delimiter, header, names, index_col, usecols, dtype, engine, converters, true_values, false_values, skipinitialspace, skiprows, skipfooter, nrows, na_values, keep_default_na, na_filter, verbose, skip_blank_lines, parse_dates, infer_datetime_format, keep_date_col, date_parser, date_format, dayfirst, cache_dates, iterator, chunksize, compression, thousands, decimal, lineterminator, quotechar, quoting, doublequote, escapechar, comment, encoding, encoding_errors, dialect, on_bad_lines, delim_whitespace, low_memory, memory_map, float_precision, storage_options, dtype_backend)\u001b[0m\n\u001b[1;32m 946\u001b[0m \u001b[0mkwds\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mupdate\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mkwds_defaults\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 947\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 948\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0m_read\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mfilepath_or_buffer\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mkwds\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 949\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 950\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;32m~/anaconda3/lib/python3.9/site-packages/pandas/io/parsers/readers.py\u001b[0m in \u001b[0;36m_read\u001b[0;34m(filepath_or_buffer, kwds)\u001b[0m\n\u001b[1;32m 615\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 616\u001b[0m \u001b[0;32mwith\u001b[0m \u001b[0mparser\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 617\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mparser\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mread\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mnrows\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 618\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 619\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;32m~/anaconda3/lib/python3.9/site-packages/pandas/io/parsers/readers.py\u001b[0m in \u001b[0;36mread\u001b[0;34m(self, nrows)\u001b[0m\n\u001b[1;32m 1746\u001b[0m \u001b[0mcolumns\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1747\u001b[0m \u001b[0mcol_dict\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 1748\u001b[0;31m \u001b[0;34m)\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_engine\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mread\u001b[0m\u001b[0;34m(\u001b[0m \u001b[0;31m# type: ignore[attr-defined]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 1749\u001b[0m \u001b[0mnrows\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1750\u001b[0m )\n", - "\u001b[0;32m~/anaconda3/lib/python3.9/site-packages/pandas/io/parsers/c_parser_wrapper.py\u001b[0m in \u001b[0;36mread\u001b[0;34m(self, nrows)\u001b[0m\n\u001b[1;32m 237\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 238\u001b[0m \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 239\u001b[0;31m \u001b[0mdata\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_reader\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mread\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mnrows\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 240\u001b[0m \u001b[0;32mexcept\u001b[0m \u001b[0mStopIteration\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 241\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_first_chunk\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;32mparsers.pyx\u001b[0m in \u001b[0;36mpandas._libs.parsers.TextReader.read\u001b[0;34m()\u001b[0m\n", - "\u001b[0;32mparsers.pyx\u001b[0m in \u001b[0;36mpandas._libs.parsers.TextReader._read_rows\u001b[0;34m()\u001b[0m\n", - "\u001b[0;32mparsers.pyx\u001b[0m in \u001b[0;36mpandas._libs.parsers.TextReader._convert_column_data\u001b[0;34m()\u001b[0m\n", - "\u001b[0;32mparsers.pyx\u001b[0m in \u001b[0;36mpandas._libs.parsers._maybe_upcast\u001b[0;34m()\u001b[0m\n", - "\u001b[0;32m~/anaconda3/lib/python3.9/site-packages/numpy/core/multiarray.py\u001b[0m in \u001b[0;36mputmask\u001b[0;34m(a, mask, values)\u001b[0m\n\u001b[1;32m 1129\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1130\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 1131\u001b[0;31m \u001b[0;34m@\u001b[0m\u001b[0marray_function_from_c_func_and_dispatcher\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0m_multiarray_umath\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mputmask\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 1132\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0mputmask\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0ma\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m/\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mmask\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mvalues\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1133\u001b[0m \"\"\"\n", - "\u001b[0;32m_pydevd_bundle/pydevd_cython.pyx\u001b[0m in \u001b[0;36m_pydevd_bundle.pydevd_cython.SafeCallWrapper.__call__\u001b[0;34m()\u001b[0m\n", - "\u001b[0;32m_pydevd_bundle/pydevd_cython.pyx\u001b[0m in \u001b[0;36m_pydevd_bundle.pydevd_cython.ThreadTracer.__call__\u001b[0;34m()\u001b[0m\n", - "\u001b[0;32m~/anaconda3/lib/python3.9/site-packages/debugpy/_vendored/pydevd/_pydev_bundle/pydev_is_thread_alive.py\u001b[0m in \u001b[0;36mis_thread_alive\u001b[0;34m(t)\u001b[0m\n\u001b[1;32m 7\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mhasattr\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0m_temp\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m'_is_stopped'\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0;31m# Python 3.x has this\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 8\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 9\u001b[0;31m \u001b[0;32mdef\u001b[0m \u001b[0mis_thread_alive\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mt\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 10\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0;32mnot\u001b[0m \u001b[0mt\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_is_stopped\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 11\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;31mKeyboardInterrupt\u001b[0m: " + "0 Unbekannt 2021-01-01T00:00:00 2021-12-30 122.0 Gemessen \n", + "1 Unbekannt 2021-01-01T01:00:00 2021-12-30 177.0 Gemessen \n", + "2 Unbekannt 2021-01-01T02:00:00 2021-12-30 125.0 Gemessen \n", + "3 Unbekannt 2021-01-01T03:00:00 2021-12-30 84.0 Gemessen \n", + "4 Unbekannt 2021-01-01T04:00:00 2021-12-30 49.0 Gemessen \n", + "Data for year 2022:\n", + " MSID MSName ZSID ZSName Achse \\\n", + "0 Z001M001 Unbekannt Z001 Seestrasse (Strandbad Wollishofen) Seestrasse \n", + "1 Z001M001 Unbekannt Z001 Seestrasse (Strandbad Wollishofen) Seestrasse \n", + "2 Z001M001 Unbekannt Z001 Seestrasse (Strandbad Wollishofen) Seestrasse \n", + "3 Z001M001 Unbekannt Z001 Seestrasse (Strandbad Wollishofen) Seestrasse \n", + "4 Z001M001 Unbekannt Z001 Seestrasse (Strandbad Wollishofen) Seestrasse \n", + "\n", + " HNr Hoehe EKoord NKoord Richtung Knummer \\\n", + "0 451 Unbekannt 2683009.89 1243936.2 auswärts 789 \n", + "1 451 Unbekannt 2683009.89 1243936.2 auswärts 789 \n", + "2 451 Unbekannt 2683009.89 1243936.2 auswärts 789 \n", + "3 451 Unbekannt 2683009.89 1243936.2 auswärts 789 \n", + "4 451 Unbekannt 2683009.89 1243936.2 auswärts 789 \n", + "\n", + " Kname AnzDetektoren D1ID D2ID D3ID \\\n", + "0 Badanstalt Wollishofen 1 2 Unbekannt Unbekannt \n", + "1 Badanstalt Wollishofen 1 2 Unbekannt Unbekannt \n", + "2 Badanstalt Wollishofen 1 2 Unbekannt Unbekannt \n", + "3 Badanstalt Wollishofen 1 2 Unbekannt Unbekannt \n", + "4 Badanstalt Wollishofen 1 2 Unbekannt Unbekannt \n", + "\n", + " D4ID MessungDatZeit LieferDat AnzFahrzeuge AnzFahrzeugeStatus \n", + "0 Unbekannt 2022-01-01T00:00:00 2022-12-30 166.0 Gemessen \n", + "1 Unbekannt 2022-01-01T01:00:00 2022-12-30 255.0 Gemessen \n", + "2 Unbekannt 2022-01-01T02:00:00 2022-12-30 168.0 Gemessen \n", + "3 Unbekannt 2022-01-01T03:00:00 2022-12-30 96.0 Gemessen \n", + "4 Unbekannt 2022-01-01T04:00:00 2022-12-30 63.0 Gemessen \n" ] } ], @@ -219,7 +232,8 @@ "\n", "tables_dict = {}\n", "pd.set_option(\"display.max_columns\", None)\n", - "data_dir = 'data/'\n", + "data_dir = 'datasets/'\n", + "\n", "for year in range(2012, 2023):\n", " file_name = f'sid_dav_verkehrszaehlung_miv_OD2031_{year}.csv'\n", " file_path = os.path.join(data_dir, file_name)\n", @@ -701,7 +715,7 @@ "else:\n", " print(f\"Failed to download data. Status code: {response.status_code}\")\n", "\n", - "accidents_file_path = os.path.join(data_dir, ')\n" + "accidents_file_path = os.path.join(data_dir)\n" ] } ], diff --git a/docs/diary.md b/docs/diary.md index e69de29..5e94779 100644 --- a/docs/diary.md +++ b/docs/diary.md @@ -0,0 +1,16 @@ +# Project Diary + +| Version
0.01 | Author:
michel.romancuk@stud.unibas.ch
sebastian.lenzlinger@unibas.ch
| HS 2023
Databases
| +|-----------------------|-------------------------------------------------------------------------------------------------------------------------------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| Date | | Problems | +| Oktober/ pre 16.11.23 | Decision to use postrges server.
Server setup at slenzlinger.dev
Setup pgadmin at [pgadmin.slenzlinger.dev](pgadmin.slenzlinger.dev) | | +| 20.11.2022 | Integrated Events table with the time and location. Not done yet | Had problems with the identity of the rows. Solution is to add a primary key at the beggining of the CSV, which helps keep the identity of the rows and the integrity of the database. | +| | | | +| | | | +| | | | +| | | | +| | | | +| | | | +| | | | +| | | | +| | \ No newline at end of file diff --git a/docs/wiki.md b/docs/wiki.md index e69de29..cb937d3 100644 --- a/docs/wiki.md +++ b/docs/wiki.md @@ -0,0 +1,25 @@ +# Setup Of Virtual Python dev env +First open the terminal and make sure to be in the root directory. +All steps assume one is in the root folder. +## Create Virtual environment +``` +python3 -m venv db23-project-venv +``` +## Activating the virtual environment +``` +source db23/bin/activate +``` +#### When in the environment ``db23-project`` just install all needed packages. +``` +pip3 install pkg_name +``` +## Getting back out +``` +deactivate +``` + +# List of used packages +See ``requirements.txt`` + +# Setting up postgres +# Setting up pgadmin as container serverd by nginx \ No newline at end of file diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..8d6bbeb --- /dev/null +++ b/requirements.txt @@ -0,0 +1,102 @@ +anyio==4.0.0 +appnope==0.1.3 +argon2-cffi==23.1.0 +argon2-cffi-bindings==21.2.0 +arrow==1.3.0 +asttokens==2.4.1 +async-lru==2.0.4 +attrs==23.1.0 +Babel==2.13.1 +beautifulsoup4==4.12.2 +black==23.11.0 +bleach==6.1.0 +certifi==2023.7.22 +cffi==1.16.0 +charset-normalizer==3.3.2 +click==8.1.7 +comm==0.2.0 +debugpy==1.8.0 +decorator==5.1.1 +defusedxml==0.7.1 +executing==2.0.1 +fastjsonschema==2.19.0 +fqdn==1.5.1 +idna==3.4 +ipykernel==6.26.0 +ipython==8.17.2 +ipywidgets==8.1.1 +isoduration==20.11.0 +jedi==0.19.1 +Jinja2==3.1.2 +json5==0.9.14 +jsonpointer==2.4 +jsonschema==4.19.2 +jsonschema-specifications==2023.11.1 +jupyter==1.0.0 +jupyter-console==6.6.3 +jupyter-events==0.9.0 +jupyter-lsp==2.2.0 +jupyter_client==8.6.0 +jupyter_core==5.5.0 +jupyter_server==2.10.1 +jupyter_server_terminals==0.4.4 +jupyterlab==4.0.8 +jupyterlab-pygments==0.2.2 +jupyterlab-widgets==3.0.9 +jupyterlab_server==2.25.1 +MarkupSafe==2.1.3 +matplotlib-inline==0.1.6 +mistune==3.0.2 +mypy-extensions==1.0.0 +nbclient==0.9.0 +nbconvert==7.11.0 +nbformat==5.9.2 +nest-asyncio==1.5.8 +notebook==7.0.6 +notebook_shim==0.2.3 +numpy==1.26.2 +overrides==7.4.0 +packaging==23.2 +pandas==2.1.3 +pandocfilters==1.5.0 +parso==0.8.3 +pathspec==0.11.2 +pexpect==4.8.0 +platformdirs==4.0.0 +prometheus-client==0.18.0 +prompt-toolkit==3.0.41 +psutil==5.9.6 +ptyprocess==0.7.0 +pure-eval==0.2.2 +pycparser==2.21 +Pygments==2.16.1 +python-dateutil==2.8.2 +python-json-logger==2.0.7 +pytz==2023.3.post1 +PyYAML==6.0.1 +pyzmq==25.1.1 +qtconsole==5.5.1 +QtPy==2.4.1 +referencing==0.31.0 +requests==2.31.0 +rfc3339-validator==0.1.4 +rfc3986-validator==0.1.1 +rpds-py==0.13.0 +Send2Trash==1.8.2 +six==1.16.0 +sniffio==1.3.0 +soupsieve==2.5 +stack-data==0.6.3 +terminado==0.18.0 +tinycss2==1.2.1 +tornado==6.3.3 +traitlets==5.13.0 +types-python-dateutil==2.8.19.14 +tzdata==2023.3 +uri-template==1.3.0 +urllib3==2.1.0 +wcwidth==0.2.10 +webcolors==1.13 +webencodings==0.5.1 +websocket-client==1.6.4 +widgetsnbextension==4.0.9