Plot Zoom video‑meeting participant duration information.
This one file utility takes the participant CSV file, processes it a little, and produces a bar graph showing the participation rates. In particular:
- the utility deduplicates multiple sessions by the same user to produce a single session
- the gaps and overlaps in multiple sessions are accounted for by default
- deduplication examines email addresses by default or optionally user names — users often enter slightly different names between sessions and names are therefore less reliable in this regard
- the utility tallies the number of sessions above a certain user‑defined time threshold to report the number of engaged users
- the widely disliked "Attentiveness Score" metric is no longer present in the participant CSV file by default and is therefore not considered
Multiple sessions by the same user are quite common and often overlap.
A typical call might comprise:
$ zoompart.py \
--verbose \
--dat-file \
--nominal-duration=130 \
--cutoff=20 \
--title="Test plot" \
participants_123456789.csv
To yield to following plot:
No personal data is embedded in either the produced SVG or DAT files. The DAT file contains only the raw numbers used to create the bar graph.
There is not real need to clone this repository, just download or copy‑paste the contents of zoompart.py
to a local file, set the execute permission, and run that:
$ chmod u+x zoompart.py
$ ./zoompart.py --help
The various function definitions in the utility could be pulled out and used to drive an interactive jupyter notebooks session instead.
As of April 2020, Zoom names the participant file using the following convention:
participants_<meeting-ID-without-dashes>.csv
The software license is ISC, regarded as equivalent to the MIT permissive license but with simpler wording.
The following options are provided:
long | short | argument | comment |
---|---|---|---|
--version |
-V |
— | show utility version string and exit |
--help |
-h |
— | show help message and exit |
--title |
-t |
string | specify plot title |
--numbered-title |
-n |
ℕ | use custom numbered plot title |
--nominal-duration |
-l |
ℕ | set nominal meeting duration in minutes |
--cutoff |
-c |
ℕ | set short session threshold in minutes |
--ignore-gaps |
-I |
— | consider only beginning and closing timestamps |
--dedup-name |
-N |
— | deduplicate on name not email address |
--dat-file |
-d |
— | create or overwrite existing DAT file |
--no-plot |
-P |
— | omit plot |
--save-plot |
-S |
— | save plot automatically (system dependent) |
--truncate |
-T |
ℕ | truncate input data for testing purposes |
--verbose |
-v |
— | show additional information |
--show-df |
-D |
— | show loaded dataframes |
ℕ indicates {0, 1, 2, ...}.
The --nominal-duration
option draws a horizontal dotted line annotated "nominal duration". It is useful because sometimes participants continue to chat after the event proper has finished.
Users can adjust some hardcoded values in the script to better suit their needs. See the comments in the code for further details.
The utility requires the following python dependencies:
- python3 — tested with version 3.6.2
- pandas
- matplotlib
The script is reasonably mature, although the following caveats apply:
- the utility has only been tested on Ubuntu 19.04 and it is possible some of the code is Linux‑specific
- you may need to modify the hash‑bang line to suit your system
- you may need to adjust your
PATH
environment accordingly
▢