Skip to content
GitLab
Explore
Sign in
Register
Primary navigation
Search or go to…
Project
P
Project hour count
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Deploy
Releases
Model registry
Monitor
Incidents
Analyze
Value stream analytics
Contributor analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
GitLab community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
td7g11
Project hour count
Commits
7121f192
Commit
7121f192
authored
5 years ago
by
td7g11
Browse files
Options
Downloads
Patches
Plain Diff
script to generate hours
parents
No related branches found
No related tags found
No related merge requests found
Changes
2
Expand all
Show whitespace changes
Inline
Side-by-side
Showing
2 changed files
.ipynb_checkpoints/process_hours-checkpoint.ipynb
+857
-0
857 additions, 0 deletions
.ipynb_checkpoints/process_hours-checkpoint.ipynb
process_hours.ipynb
+0
-0
0 additions, 0 deletions
process_hours.ipynb
with
857 additions
and
0 deletions
.ipynb_checkpoints/process_hours-checkpoint.ipynb
0 → 100644
+
857
−
0
View file @
7121f192
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Process hours\n",
"\n",
"1. Load CSV file\n",
"2. Plot each weekly hour total split across each project (bar chart)\n",
"3. List each project which has been worked on under each category"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [],
"source": [
"import numpy as np; import pandas as pd; import matplotlib.pyplot as plt\n",
"import datetime"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>Subject</th>\n",
" <th>Start Date</th>\n",
" <th>Start Time</th>\n",
" <th>End Date</th>\n",
" <th>End Time</th>\n",
" <th>All day event</th>\n",
" <th>Reminder on/off</th>\n",
" <th>Reminder Date</th>\n",
" <th>Reminder Time</th>\n",
" <th>Meeting Organizer</th>\n",
" <th>...</th>\n",
" <th>Meeting Resources</th>\n",
" <th>Billing Information</th>\n",
" <th>Categories</th>\n",
" <th>Description</th>\n",
" <th>Location</th>\n",
" <th>Mileage</th>\n",
" <th>Priority</th>\n",
" <th>Private</th>\n",
" <th>Sensitivity</th>\n",
" <th>Show time as</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>INTERVIEW SEMINAR: Dr Jonathan Belnoue \"Physic...</td>\n",
" <td>23/1/2020</td>\n",
" <td>10:00:00</td>\n",
" <td>23/1/2020</td>\n",
" <td>11:00:00</td>\n",
" <td>False</td>\n",
" <td>False</td>\n",
" <td>23/1/2020</td>\n",
" <td>09:45:00</td>\n",
" <td>Mechanical Engineering</td>\n",
" <td>...</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>Dear all,\\r\\n\\r\\n \\r\\n\\r\\nDr Jonathan Belnoue ...</td>\n",
" <td>100 / 5017</td>\n",
" <td>NaN</td>\n",
" <td>Normal</td>\n",
" <td>False</td>\n",
" <td>Normal</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>INTERVIEW SEMINAR: Dr Chris Holmes \"Making air...</td>\n",
" <td>24/1/2020</td>\n",
" <td>14:00:00</td>\n",
" <td>24/1/2020</td>\n",
" <td>15:00:00</td>\n",
" <td>False</td>\n",
" <td>False</td>\n",
" <td>24/1/2020</td>\n",
" <td>13:45:00</td>\n",
" <td>Mechanical Engineering</td>\n",
" <td>...</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>Dear all,\\r\\n\\r\\n \\r\\n\\r\\nDr Chris Holmes will...</td>\n",
" <td>85 / 2207</td>\n",
" <td>NaN</td>\n",
" <td>Normal</td>\n",
" <td>False</td>\n",
" <td>Normal</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>INTERVIEW SEMINAR: Dr Meisam Jalalvand \"Fibre ...</td>\n",
" <td>24/1/2020</td>\n",
" <td>10:00:00</td>\n",
" <td>24/1/2020</td>\n",
" <td>11:00:00</td>\n",
" <td>False</td>\n",
" <td>False</td>\n",
" <td>24/1/2020</td>\n",
" <td>09:45:00</td>\n",
" <td>Mechanical Engineering</td>\n",
" <td>...</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>Dear all,\\r\\n\\r\\n \\r\\n\\r\\nQuick reminder: the ...</td>\n",
" <td>67 / 1001</td>\n",
" <td>NaN</td>\n",
" <td>Normal</td>\n",
" <td>False</td>\n",
" <td>Normal</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>INTERVIEW SEMINAR: Dr Prodip K Das \"Fabricatio...</td>\n",
" <td>23/1/2020</td>\n",
" <td>14:00:00</td>\n",
" <td>23/1/2020</td>\n",
" <td>15:00:00</td>\n",
" <td>False</td>\n",
" <td>False</td>\n",
" <td>23/1/2020</td>\n",
" <td>13:45:00</td>\n",
" <td>Mechanical Engineering</td>\n",
" <td>...</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>Dear all,\\r\\n\\r\\n \\r\\n\\r\\nDr Prodip Das will b...</td>\n",
" <td>100 / 5013</td>\n",
" <td>NaN</td>\n",
" <td>Normal</td>\n",
" <td>False</td>\n",
" <td>Normal</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>INTERVIEW SEMINAR: Dr Dezong Zhao \"Low Carbon ...</td>\n",
" <td>22/1/2020</td>\n",
" <td>14:00:00</td>\n",
" <td>22/1/2020</td>\n",
" <td>15:00:00</td>\n",
" <td>False</td>\n",
" <td>False</td>\n",
" <td>22/1/2020</td>\n",
" <td>13:45:00</td>\n",
" <td>Mechanical Engineering</td>\n",
" <td>...</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>Dear all,\\r\\n\\r\\n \\r\\n\\r\\nDr Dezong Zhao will ...</td>\n",
" <td>4 / 4005</td>\n",
" <td>NaN</td>\n",
" <td>Normal</td>\n",
" <td>False</td>\n",
" <td>Normal</td>\n",
" <td>1</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>5 rows × 22 columns</p>\n",
"</div>"
],
"text/plain": [
" Subject Start Date Start Time \\\n",
"0 INTERVIEW SEMINAR: Dr Jonathan Belnoue \"Physic... 23/1/2020 10:00:00 \n",
"1 INTERVIEW SEMINAR: Dr Chris Holmes \"Making air... 24/1/2020 14:00:00 \n",
"2 INTERVIEW SEMINAR: Dr Meisam Jalalvand \"Fibre ... 24/1/2020 10:00:00 \n",
"3 INTERVIEW SEMINAR: Dr Prodip K Das \"Fabricatio... 23/1/2020 14:00:00 \n",
"4 INTERVIEW SEMINAR: Dr Dezong Zhao \"Low Carbon ... 22/1/2020 14:00:00 \n",
"\n",
" End Date End Time All day event Reminder on/off Reminder Date \\\n",
"0 23/1/2020 11:00:00 False False 23/1/2020 \n",
"1 24/1/2020 15:00:00 False False 24/1/2020 \n",
"2 24/1/2020 11:00:00 False False 24/1/2020 \n",
"3 23/1/2020 15:00:00 False False 23/1/2020 \n",
"4 22/1/2020 15:00:00 False False 22/1/2020 \n",
"\n",
" Reminder Time Meeting Organizer ... Meeting Resources \\\n",
"0 09:45:00 Mechanical Engineering ... NaN \n",
"1 13:45:00 Mechanical Engineering ... NaN \n",
"2 09:45:00 Mechanical Engineering ... NaN \n",
"3 13:45:00 Mechanical Engineering ... NaN \n",
"4 13:45:00 Mechanical Engineering ... NaN \n",
"\n",
" Billing Information Categories \\\n",
"0 NaN NaN \n",
"1 NaN NaN \n",
"2 NaN NaN \n",
"3 NaN NaN \n",
"4 NaN NaN \n",
"\n",
" Description Location Mileage \\\n",
"0 Dear all,\\r\\n\\r\\n \\r\\n\\r\\nDr Jonathan Belnoue ... 100 / 5017 NaN \n",
"1 Dear all,\\r\\n\\r\\n \\r\\n\\r\\nDr Chris Holmes will... 85 / 2207 NaN \n",
"2 Dear all,\\r\\n\\r\\n \\r\\n\\r\\nQuick reminder: the ... 67 / 1001 NaN \n",
"3 Dear all,\\r\\n\\r\\n \\r\\n\\r\\nDr Prodip Das will b... 100 / 5013 NaN \n",
"4 Dear all,\\r\\n\\r\\n \\r\\n\\r\\nDr Dezong Zhao will ... 4 / 4005 NaN \n",
"\n",
" Priority Private Sensitivity Show time as \n",
"0 Normal False Normal 1 \n",
"1 Normal False Normal 1 \n",
"2 Normal False Normal 1 \n",
"3 Normal False Normal 1 \n",
"4 Normal False Normal 1 \n",
"\n",
"[5 rows x 22 columns]"
]
},
"execution_count": 2,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# load csv file with information\n",
"project_hours_file = pd.read_csv('C:\\\\Users\\\\td7g11\\\\Documents\\\\20200203_export.CSV', encoding = \"ISO-8859-1\")\n",
"project_hours_file.head()"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>Subject</th>\n",
" <th>Start Date</th>\n",
" <th>Start Time</th>\n",
" <th>End Date</th>\n",
" <th>End Time</th>\n",
" <th>All day event</th>\n",
" <th>Reminder on/off</th>\n",
" <th>Reminder Date</th>\n",
" <th>Reminder Time</th>\n",
" <th>Meeting Organizer</th>\n",
" <th>...</th>\n",
" <th>Description</th>\n",
" <th>Location</th>\n",
" <th>Priority</th>\n",
" <th>Private</th>\n",
" <th>Sensitivity</th>\n",
" <th>Show time as</th>\n",
" <th>Start</th>\n",
" <th>End</th>\n",
" <th>Length</th>\n",
" <th>Week No</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>11</th>\n",
" <td>Skeleton - helmet cap</td>\n",
" <td>14/1/2020</td>\n",
" <td>10:00:00</td>\n",
" <td>14/1/2020</td>\n",
" <td>12:00:00</td>\n",
" <td>False</td>\n",
" <td>False</td>\n",
" <td>14/1/2020</td>\n",
" <td>09:45:00</td>\n",
" <td>NaN</td>\n",
" <td>...</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>Normal</td>\n",
" <td>False</td>\n",
" <td>Normal</td>\n",
" <td>2</td>\n",
" <td>2020-01-14 10:00:00</td>\n",
" <td>2020-01-14 12:00:00</td>\n",
" <td>2.0</td>\n",
" <td>03</td>\n",
" </tr>\n",
" <tr>\n",
" <th>12</th>\n",
" <td>Swimming - Paper</td>\n",
" <td>14/1/2020</td>\n",
" <td>08:00:00</td>\n",
" <td>14/1/2020</td>\n",
" <td>10:00:00</td>\n",
" <td>False</td>\n",
" <td>False</td>\n",
" <td>14/1/2020</td>\n",
" <td>07:45:00</td>\n",
" <td>Dickson T.A.J.</td>\n",
" <td>...</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>Normal</td>\n",
" <td>False</td>\n",
" <td>Normal</td>\n",
" <td>2</td>\n",
" <td>2020-01-14 08:00:00</td>\n",
" <td>2020-01-14 10:00:00</td>\n",
" <td>2.0</td>\n",
" <td>03</td>\n",
" </tr>\n",
" <tr>\n",
" <th>13</th>\n",
" <td>Swimming - Paper</td>\n",
" <td>14/1/2020</td>\n",
" <td>12:30:00</td>\n",
" <td>14/1/2020</td>\n",
" <td>16:30:00</td>\n",
" <td>False</td>\n",
" <td>False</td>\n",
" <td>14/1/2020</td>\n",
" <td>12:15:00</td>\n",
" <td>Dickson T.A.J.</td>\n",
" <td>...</td>\n",
" <td>\\r\\n</td>\n",
" <td>NaN</td>\n",
" <td>Normal</td>\n",
" <td>False</td>\n",
" <td>Normal</td>\n",
" <td>2</td>\n",
" <td>2020-01-14 12:30:00</td>\n",
" <td>2020-01-14 16:30:00</td>\n",
" <td>4.0</td>\n",
" <td>03</td>\n",
" </tr>\n",
" <tr>\n",
" <th>14</th>\n",
" <td>Swimming - Paper</td>\n",
" <td>15/1/2020</td>\n",
" <td>08:00:00</td>\n",
" <td>15/1/2020</td>\n",
" <td>12:00:00</td>\n",
" <td>False</td>\n",
" <td>False</td>\n",
" <td>15/1/2020</td>\n",
" <td>07:45:00</td>\n",
" <td>Dickson T.A.J.</td>\n",
" <td>...</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>Normal</td>\n",
" <td>False</td>\n",
" <td>Normal</td>\n",
" <td>2</td>\n",
" <td>2020-01-15 08:00:00</td>\n",
" <td>2020-01-15 12:00:00</td>\n",
" <td>4.0</td>\n",
" <td>03</td>\n",
" </tr>\n",
" <tr>\n",
" <th>15</th>\n",
" <td>Swimming - Paper</td>\n",
" <td>16/1/2020</td>\n",
" <td>08:00:00</td>\n",
" <td>16/1/2020</td>\n",
" <td>12:00:00</td>\n",
" <td>False</td>\n",
" <td>False</td>\n",
" <td>16/1/2020</td>\n",
" <td>07:45:00</td>\n",
" <td>Dickson T.A.J.</td>\n",
" <td>...</td>\n",
" <td>\\r\\n</td>\n",
" <td>NaN</td>\n",
" <td>Normal</td>\n",
" <td>False</td>\n",
" <td>Normal</td>\n",
" <td>2</td>\n",
" <td>2020-01-16 08:00:00</td>\n",
" <td>2020-01-16 12:00:00</td>\n",
" <td>4.0</td>\n",
" <td>03</td>\n",
" </tr>\n",
" <tr>\n",
" <th>...</th>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>118</th>\n",
" <td>Swimming - Paper</td>\n",
" <td>9/3/2020</td>\n",
" <td>09:00:00</td>\n",
" <td>9/3/2020</td>\n",
" <td>10:30:00</td>\n",
" <td>False</td>\n",
" <td>False</td>\n",
" <td>9/3/2020</td>\n",
" <td>08:45:00</td>\n",
" <td>Dickson T.A.J.</td>\n",
" <td>...</td>\n",
" <td>\\r\\n</td>\n",
" <td>NaN</td>\n",
" <td>Normal</td>\n",
" <td>False</td>\n",
" <td>Normal</td>\n",
" <td>2</td>\n",
" <td>2020-03-09 09:00:00</td>\n",
" <td>2020-03-09 10:30:00</td>\n",
" <td>1.5</td>\n",
" <td>11</td>\n",
" </tr>\n",
" <tr>\n",
" <th>87</th>\n",
" <td>IP meeting</td>\n",
" <td>10/3/2020</td>\n",
" <td>11:00:00</td>\n",
" <td>10/3/2020</td>\n",
" <td>11:30:00</td>\n",
" <td>False</td>\n",
" <td>True</td>\n",
" <td>10/3/2020</td>\n",
" <td>10:45:00</td>\n",
" <td>Turnock S.R.</td>\n",
" <td>...</td>\n",
" <td>\\r\\n\\r\\n</td>\n",
" <td>176/3009</td>\n",
" <td>Normal</td>\n",
" <td>False</td>\n",
" <td>Normal</td>\n",
" <td>2</td>\n",
" <td>2020-03-10 11:00:00</td>\n",
" <td>2020-03-10 11:30:00</td>\n",
" <td>0.5</td>\n",
" <td>11</td>\n",
" </tr>\n",
" <tr>\n",
" <th>58</th>\n",
" <td>MSc meetings</td>\n",
" <td>10/3/2020</td>\n",
" <td>10:00:00</td>\n",
" <td>10/3/2020</td>\n",
" <td>11:00:00</td>\n",
" <td>False</td>\n",
" <td>False</td>\n",
" <td>10/3/2020</td>\n",
" <td>09:45:00</td>\n",
" <td>Weymouth G.D.</td>\n",
" <td>...</td>\n",
" <td>MSc weekly meeting. Konrad needs to skip this ...</td>\n",
" <td>Gabe's office</td>\n",
" <td>Normal</td>\n",
" <td>False</td>\n",
" <td>Normal</td>\n",
" <td>2</td>\n",
" <td>2020-03-10 10:00:00</td>\n",
" <td>2020-03-10 11:00:00</td>\n",
" <td>1.0</td>\n",
" <td>11</td>\n",
" </tr>\n",
" <tr>\n",
" <th>120</th>\n",
" <td>Swimming</td>\n",
" <td>10/3/2020</td>\n",
" <td>08:30:00</td>\n",
" <td>10/3/2020</td>\n",
" <td>10:00:00</td>\n",
" <td>False</td>\n",
" <td>False</td>\n",
" <td>10/3/2020</td>\n",
" <td>08:15:00</td>\n",
" <td>Dickson T.A.J.</td>\n",
" <td>...</td>\n",
" <td>\\r\\n</td>\n",
" <td>NaN</td>\n",
" <td>Normal</td>\n",
" <td>False</td>\n",
" <td>Normal</td>\n",
" <td>2</td>\n",
" <td>2020-03-10 08:30:00</td>\n",
" <td>2020-03-10 10:00:00</td>\n",
" <td>1.5</td>\n",
" <td>11</td>\n",
" </tr>\n",
" <tr>\n",
" <th>121</th>\n",
" <td>Swimming</td>\n",
" <td>10/3/2020</td>\n",
" <td>11:30:00</td>\n",
" <td>10/3/2020</td>\n",
" <td>16:30:00</td>\n",
" <td>False</td>\n",
" <td>False</td>\n",
" <td>10/3/2020</td>\n",
" <td>11:15:00</td>\n",
" <td>Dickson T.A.J.</td>\n",
" <td>...</td>\n",
" <td>\\r\\n</td>\n",
" <td>NaN</td>\n",
" <td>Normal</td>\n",
" <td>False</td>\n",
" <td>Normal</td>\n",
" <td>2</td>\n",
" <td>2020-03-10 11:30:00</td>\n",
" <td>2020-03-10 16:30:00</td>\n",
" <td>5.0</td>\n",
" <td>11</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>108 rows × 24 columns</p>\n",
"</div>"
],
"text/plain": [
" Subject Start Date Start Time End Date End Time \\\n",
"11 Skeleton - helmet cap 14/1/2020 10:00:00 14/1/2020 12:00:00 \n",
"12 Swimming - Paper 14/1/2020 08:00:00 14/1/2020 10:00:00 \n",
"13 Swimming - Paper 14/1/2020 12:30:00 14/1/2020 16:30:00 \n",
"14 Swimming - Paper 15/1/2020 08:00:00 15/1/2020 12:00:00 \n",
"15 Swimming - Paper 16/1/2020 08:00:00 16/1/2020 12:00:00 \n",
".. ... ... ... ... ... \n",
"118 Swimming - Paper 9/3/2020 09:00:00 9/3/2020 10:30:00 \n",
"87 IP meeting 10/3/2020 11:00:00 10/3/2020 11:30:00 \n",
"58 MSc meetings 10/3/2020 10:00:00 10/3/2020 11:00:00 \n",
"120 Swimming 10/3/2020 08:30:00 10/3/2020 10:00:00 \n",
"121 Swimming 10/3/2020 11:30:00 10/3/2020 16:30:00 \n",
"\n",
" All day event Reminder on/off Reminder Date Reminder Time \\\n",
"11 False False 14/1/2020 09:45:00 \n",
"12 False False 14/1/2020 07:45:00 \n",
"13 False False 14/1/2020 12:15:00 \n",
"14 False False 15/1/2020 07:45:00 \n",
"15 False False 16/1/2020 07:45:00 \n",
".. ... ... ... ... \n",
"118 False False 9/3/2020 08:45:00 \n",
"87 False True 10/3/2020 10:45:00 \n",
"58 False False 10/3/2020 09:45:00 \n",
"120 False False 10/3/2020 08:15:00 \n",
"121 False False 10/3/2020 11:15:00 \n",
"\n",
" Meeting Organizer ... Description \\\n",
"11 NaN ... NaN \n",
"12 Dickson T.A.J. ... NaN \n",
"13 Dickson T.A.J. ... \\r\\n \n",
"14 Dickson T.A.J. ... NaN \n",
"15 Dickson T.A.J. ... \\r\\n \n",
".. ... ... ... \n",
"118 Dickson T.A.J. ... \\r\\n \n",
"87 Turnock S.R. ... \\r\\n\\r\\n \n",
"58 Weymouth G.D. ... MSc weekly meeting. Konrad needs to skip this ... \n",
"120 Dickson T.A.J. ... \\r\\n \n",
"121 Dickson T.A.J. ... \\r\\n \n",
"\n",
" Location Priority Private Sensitivity Show time as \\\n",
"11 NaN Normal False Normal 2 \n",
"12 NaN Normal False Normal 2 \n",
"13 NaN Normal False Normal 2 \n",
"14 NaN Normal False Normal 2 \n",
"15 NaN Normal False Normal 2 \n",
".. ... ... ... ... ... \n",
"118 NaN Normal False Normal 2 \n",
"87 176/3009 Normal False Normal 2 \n",
"58 Gabe's office Normal False Normal 2 \n",
"120 NaN Normal False Normal 2 \n",
"121 NaN Normal False Normal 2 \n",
"\n",
" Start End Length Week No \n",
"11 2020-01-14 10:00:00 2020-01-14 12:00:00 2.0 03 \n",
"12 2020-01-14 08:00:00 2020-01-14 10:00:00 2.0 03 \n",
"13 2020-01-14 12:30:00 2020-01-14 16:30:00 4.0 03 \n",
"14 2020-01-15 08:00:00 2020-01-15 12:00:00 4.0 03 \n",
"15 2020-01-16 08:00:00 2020-01-16 12:00:00 4.0 03 \n",
".. ... ... ... ... \n",
"118 2020-03-09 09:00:00 2020-03-09 10:30:00 1.5 11 \n",
"87 2020-03-10 11:00:00 2020-03-10 11:30:00 0.5 11 \n",
"58 2020-03-10 10:00:00 2020-03-10 11:00:00 1.0 11 \n",
"120 2020-03-10 08:30:00 2020-03-10 10:00:00 1.5 11 \n",
"121 2020-03-10 11:30:00 2020-03-10 16:30:00 5.0 11 \n",
"\n",
"[108 rows x 24 columns]"
]
},
"execution_count": 3,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# drop rows without categories assigned\n",
"# combine the start time/date columns and end time/date columns together\n",
"df = project_hours_file\n",
"df = df.dropna(axis=1, how='all')\n",
"df = df[df['Categories'].notnull()]\n",
"df['Start'] = df['Start Date'] + \" \" + df['Start Time']\n",
"df['End'] = df['End Date'] + \" \" + df['End Time']\n",
"df['Start'] = pd.to_datetime(df['Start'], format=\"%d/%m/%Y %H:%M:%S\")\n",
"df['End'] = pd.to_datetime(df['End'], format=\"%d/%m/%Y %H:%M:%S\")\n",
"df['Length'] = pd.to_timedelta(df['End'] - df['Start'], unit='H')/np.timedelta64(1, 'h')\n",
"# df['Start Time'] = pd.to_datetime(df['Start Time'],format= '%H:%M:%S' ).dt.time\n",
"# df['End Time'] = pd.to_datetime(df['End Time'],format= '%H:%M:%S' ).dt.time\n",
"df['Week No'] = [i.strftime(\"%V\") for i in df['Start']]\n",
"df.sort_values('Week No', ascending=True)"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"Categories\n",
"Admin 60.75\n",
"Sailing 41.00\n",
"Sailing;Admin 3.50\n",
"Skeleton 88.50\n",
"Skeleton;Admin 3.50\n",
"Swimming 123.75\n",
"Name: Length, dtype: float64"
]
},
"execution_count": 4,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# total time per category\n",
"total_grouped = df.groupby(['Categories'])['Length'].sum()\n",
"total_grouped"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"plt.figure()\n",
"plt.bar(total_grouped.index, total_grouped.values)\n",
"plt.xlabel(\"Sport\")\n",
"plt.ylabel(\"Hours spent\")\n",
"plt.title(\"Time since 15/01/2020\")\n",
"plt.show()"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"Categories Week No\n",
"Admin 03 1.50\n",
" 04 2.50\n",
" 05 2.50\n",
" 06 15.75\n",
" 07 7.00\n",
" 08 0.50\n",
" 09 7.50\n",
" 10 23.50\n",
"Sailing 04 1.00\n",
" 05 17.50\n",
" 06 8.00\n",
" 07 5.00\n",
" 08 0.50\n",
" 09 8.00\n",
" 10 0.50\n",
" 11 0.50\n",
"Sailing;Admin 06 0.50\n",
" 07 0.50\n",
" 08 0.50\n",
" 09 0.50\n",
" 10 0.50\n",
" 11 1.00\n",
"Skeleton 03 6.00\n",
" 04 39.00\n",
" 05 22.25\n",
" 06 13.75\n",
" 07 5.00\n",
" 10 2.50\n",
"Skeleton;Admin 07 3.50\n",
"Swimming 03 18.50\n",
" 07 16.00\n",
" 08 37.25\n",
" 09 23.50\n",
" 10 14.00\n",
" 11 14.50\n",
"Name: Length, dtype: float64"
]
},
"execution_count": 6,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# stacked bar chart\n",
"weekly_times = df.groupby(['Categories', 'Week No'])['Length'].sum()\n",
"weekly_times"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"<matplotlib.lines.Line2D at 0x28dd9ce21c8>"
]
},
"execution_count": 10,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAXAAAAEJCAYAAACNNHw2AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjMsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+AADFEAAAgAElEQVR4nO3deXxV1fX38c8iBlBABgmCUgwyKKMMERxQU21R0SJQarBU0VaGKlharFpLLfpTi/3VgUe0iA8K+iCoKLRFLbWCAopMioAE5yAIMikCMkjCev64JzGEhFySk9x74Pt+vfLi3nPP3Wfdk7Cys88+a5u7IyIi0VMl0QGIiEjZKIGLiESUEriISEQpgYuIRJQSuIhIRCmBi4hE1DGVebD69et7enp6ZR5SRCTyli5dusXd04pur9QEnp6ezpIlSyrzkCIikWdma4rbriEUEZGIUgIXEYkoJXARkYiq1DHw4uzbt49169axZ8+eRIci5VC9enUaN25MampqokMROWokPIGvW7eOWrVqkZ6ejpklOhwpA3dn69atrFu3jqZNmyY6HJGjRsKHUPbs2cMJJ5yg5B1hZsYJJ5ygv6JEKlnCEzig5H0E0PdQpPIlRQJPpC+//JJ+/frRrFkzWrduTY8ePfjwww+L3Xfbtm08+uijlRLXuHHjeOqppyrlWCISTQkfA08kd6d3794MGDCAqVOnArBs2TI2btxIy5YtC/bbvXIlAF9+8QWPPPgg151/fpmPeWzbtqXuk5uby5AhQ8p8DBE5OhzVCXzOnDmkpqYekCw7dOjAzp07ueiii/j666/Zt28ffxo4kJ9ceCF/eughPl27lq59+3LR2Wdz74gRPPjkk7wwaxbfffcdP7noIv50440A/GXcOJ596SUaN2zICXXr0rF1a4Zfey3Lli1jyJAh7Nq1i2bNmvHEE09Qt25dMjMzOeecc3jzzTfp2bMnO3bsoGbNmtx888188skn3HjjjWzevJnjjjuOxx9/nNNPP53J99/PvePGkVKlCsfXrMmrkyaV6TzE80tFRJLPUZ3AV65cSefOnQ/aXr16daZPn87xxx/Pli1b6NqpE5f/8If8z/DhrPr4YxZOmwbAf996i4/XrGHelCm4O32HDWP+kiUce+yxzPjvf1nw/PPk5uVxzpVX0rF1awCuueYaHn74YS644ALuuOMO7rzzTh566CEgNkTzxhtvADBq1KiCeAYNGsS4ceNo0aIFCxcu5IYbbmD27Nn8Zdw4/jFuHCefeCLbtm+v4LMlIsnmqE7gJXF3br/9dubOnUuVKlVYv2kTG7duPWi/1956i9cWLOCsn/0MgG937eLjzz9n57ffcvkPf8ix1asD0OOCCwD4ZscOtm3bxgXB8wEDBvCz4L0AWVlZBx1j586dvPXWWwfst3fvXgDO6tiRwSNH0ufii7niRz8K6dOLSFQc1Qm8TZs2TAt604VNnjyZzZs3s3TpUlJTUznl5JMLkmZh7s7Nv/oV11955QHbHy7jxccaNWoctG3//v3UqVOHZcuWHfTaw3fcwaLly/n33Lmc1bcvb0+bxgl16pTp2CISPUf1LJQLL7yQvXv38vjjjxdsW7x4MWvWrKFBgwakpqYyZ84cPl+/HoCaNWqw49tvC/b90bnn8tSMGezctQuALzZuZNPWrZzdqRMvv/EGe/buZeeuXfx73jwAateqRd26dZkXPH/66acLeuMlOf7442natCnPP/88EPul8d577wHw6dq1dGnfnjuGDuWEunVZ9+WXIZ0ZEYmCo7oHbmZMnz6d4cOHM3r0aKpXr056ejqjRo3ipptuIiMjgw4dOnBacHfhCXXqcHaHDmT07k33bt24d8QIPvj0U37Yvz8ANY47jidGjyajbVsuy8yka9++NGnUiE6tW3N8zZoATJo0qeAi5qmnnsqTTz5ZapyTJ0/m17/+NXfffTf79u2jX79+nHHGGdx+//18smYNDmR27Ur7006rsHMlIsnH3L3SDpaRkeFF64FnZ2fTqlWrSouhLPKnER6Onbt2UfO449i1ezc/vvZaxv75z3Rs3TrUGR9lias4YcUUhe+lRM/9WZeH0s6IZ2eG0k4imNlSd88ouv2o7oFXpKGjRpH96afs3buX/ldcUTALRUQkLHEncDNLAZYAX7j75WbWFJgK1APeAa529+8qJszomfjXvyY6BBE5wh3ORczfANmFnt8HPOjuLYCvgV+FGZiIiBxaXAnczBoDlwH/N3huwIVA/hy8SUCvighQRESKF28P/CHgFmB/8PwEYJu75wbP1wEnF/dGMxtkZkvMbMnmzZvLFayIiHyv1ARuZpcDm9x9aeHNxexa7HQWdx/v7hnunpGWllbGMEVEpKh4euDnAj3NLIfYRcsLifXI65hZ/kXQxsD6ComwkkyfPh0zY/Xq1cW+PuiPf2T6f/4Td3vrN23i57/7XVjhiYgcpNRZKO7+B+APAGaWCdzs7v3N7HmgL7GkPgD4RxgBpd/2UhjNFMgZfVlc+02ZMoVu3boxderUAwpJldVJDRrwzAMPlLsdkcoS1nxriPac6ygpz630twK/M7OPiY2JTwgnpMq3c+dO3nzzTSZMmFBQF9zdGTp0KK1bt6b3DTew6auvCvY//eKLuWPMGDL79+fcrCzeXbWKnoMH0+bSS3n8uecAWPPFF2T07g3A0zNm0G/4cHoOGUKLFi245ZZbKv9DisgR57Bu5HH314HXg8efAl3CD6nyzZgxg0suuYSWLVtSr1493nnnHXJycvjggw9YsWIFOW+8QedevRgQJGSAxg0b8vrkydxy330MHjmS155+mj1795LRuzcDixS3Ali+ejULnn+eOh07ctpppzFs2DB+8IMfVObHFJEjjO7EJDZ8Mnz4cAD69evHlClT2LdvH1dddRUpKSmc1KABF3Q58HfVZZmZALRp2ZKdu3dTq0YNatWoQbWqVYutzZ151lnUrlWL6tWr07p1a9asWaMEfhTTcIWE4ahP4Fu3bmX27NmsXLkSMyMvLw8zo3fv3odcqLda1aoAVDGjWmpqwfYqVaqQm5d38P6F9klJSSE3N/egfUREDsdRXU4WYNq0aVxzzTWsWbOGnJwc1q5dS9OmTalXrx5Tp04lLy+PDZs3M3fRokSHKiJygKO+Bz5lyhRuu+22A7b99Kc/JTs7mxYtWtCuXTuaNWxIt4yDCoGJiCRU0iXweKf9heX1118/aNtNN910wPOiZVtXz5pV8PjqXr24ulevg16rX7cuS6ZPL3afmTOP3DHL7NPDKSfbanV26TuJHOWO+iEUEZGoUgIXEYkoJXARkYiq3DHwpUuh6NS8V16Bb7+FU06B/GJXmzfDmjUlt1P4guKqVRAsKnyQ+vUhPT32+NtvIfsQ46qtWkH+qvA5ObBlS8FLxxbabb8Ze6tV+/61PXtKbPK71FTyUlIASMnLo+q+fVBkSbkCZfhMVfbvp9p3Ja+hsbdqVfZXif2OTt23j2OKmd5YcLzCKwaVFCMc+vu0ZQutPvi+lkz2aacXPE7P+Yxj9+4ttsmva9fmy4aNAKi+Zw9N1+Qc/HNSOLbOnWOPBw2CQgtSH6BTp9jPW75DTAnlscdibQGMHw+DB5e8b+ElCDt3hnfeKX6/gQNjbUEsjiIXwUcUevz0j7qxqV5tAH68ZDntP11bbJMb6x7P//vxed+38VxQduK5Yj5bGT/TL16dx4lfH3wfA8DyU3/AqxntAWjw1Tdc/d/5Jbd5y9LQvk/55+o/nduxolkTANp98jndl64o8fD3X/n9tbSCz1TceSrl+3SARP/sFSPpLmKKhO3+rMsPSJhF/Wf8WFa89k8gSAyVE5ZIuWlR4ziEtXgwhLeAMCTnosb07hNKW2HOQknGux4VU/y0qHHJixprDDxwzz330KZNG9q3b0+HDh1YuHBhifveNXYssxcsAODi665j6fvvA9Dr178u9jZ6EZGKkHxDKKNqh9zeN6XusmDBAmbOnMk777xDtWrV2LJlC98dYmz5jqFDi90+4+9/L3OYIiKHSz1wYMOGDdSvX59qwcXJ+vXrc9JJJ3HXXXdx5plnktG7NzeOGkX+cFNJizucfvHFbPn6a9Z88QUde/bkhlGj6NyrFz8ZNIjdwcXOxYsX0759e84++2x+//vf0zbEIRUROboogQPdu3dn7dq1tGzZkhtuuIE33ngDgKFDh7J48WKWTJ/Onr17eTnYHo+PP/+cwf36sXTGDGrXqsWMV18F4LrrrmPcuHEsWLCAlGCGiohIWcSzJmZ1M1tkZu+Z2ftmdmewfaKZfWZmy4KvDhUfbsWoWbMmS5cuZfz48aSlpZGVlcXEiROZM2cOXbt25czevXl90SKyP/447jbTTz6ZM06PTaPr2Lo1a9avZ9v27ezYsYNzzjkHgJ///OcV8nlE5OgQzxj4XuBCd99pZqnAfDN7JXjt9+4+reLCqzwpKSlkZmaSmZlJu3bteOyxx1i+fDlLliyh/jffcPejj7LnEOPiReWXm81ve/fevVTmjB8ROfKV2gP3mJ3B09Tg64jKRB988AEfffRRwfNly5Zx2mmnAbHx8J27dhUMgZRH3dq1qVWrFm+//TZAwfJtIiJlEdcsFDNLAZYCzYFH3H2hmf0auMfM7gBeA25z9+JvtUtyO3fuZNiwYWzbto1jjjmG5s2bM378eOrUqUO7du1oUr8+ndq0CeVYEyZMYODAgdSoUYPMzExq1w551o2IHDXiSuDungd0MLM6wHQza0tspfovgarAeGKLHN9V9L1mNggYBNCkSZPSDxbHtL+wde7cmbfeeuug7XfffTd33333QTfMjL/nnoLHs558suBxcaVkAYZfe23B4zZt2rB8+XIARo8eTYbqjItIGR3WLBR330ZsUeNL3H1DMLyyF3iSEhY4dvfx7p7h7hlp+TU0jmIvvfQSHTp0oG3btsybN4+RI0cmOiQRiahSe+Bmlgbsc/dtZnYs8CPgPjNr5O4bLLZwZC8gvPvNj2BZWVlkZWUlOgwROQLEM4TSCJgUjINXAZ5z95lmNjtI7gYsA4ZUYJwiIlJEqQnc3ZcDHYvZfmGFRCQiInHRnZgiIhGlBC4iElFK4IFkLCc7ffp0zIzVq1eXuE9JhbVKsn7TJn7+u9+FEZ6IJFjSlZNtN6ldqO2tGFDyskv5krWc7JQpU+jWrRtTp05l1KhRobR5UoMGPPPAA6G0JSKJpR44yVFOdv369fTo0aOgrZ07d/Lmm28yYcKEA265d3eGDh1K69at6X3DDWz66qsDjn/HmDFk9u/PuVlZvLtqFT0HD6bNpZfy+HPPAbDmiy/I6N0bgKdnzKDf8OFccskltGjRgltuuSXM0yoiFUwJnOQoJ3vSSSfx8ssvFzyfMWMGl1xyCS1btqRevXq8EyyeO336dD744ANWrFjBI6NGsfC99w44buOGDXl98mTO7dSJwSNHMvmBB3h98mTufuSRYuNcvno1zz77LCtWrODZZ59l7driF9QVkeSjBE5ylpOdMmUK/fr1A6Bfv35MmTIFgLlz53LVVVeRkpLCSQ0acEGXA2+AvSwzE4A2LVuS0b49tWrUIK1ePapVrVrs+HzmWWdRu3ZtqlevTuvWrVlTeJV5EUlqSTcGnijJVE5269atzJ49m5UrV2Jm5OXlYWb89a9/BSB28+uhj1vFjGqpqQXbq1SpQm5e3sH7F9onJSWF3NzcuGIUkcRTD5zkKCf7xRdfcNFFFwEwbdo0rrnmGtasWUNOTg5r166ladOmzJ8/n/PPP5+pU6eSl5fHhs2bmbtoUbnjEpFoUg+c5Cgnu2HDBo45JvbtmDJlCrfddtsB7/vpT3/KM888w6OPPsrs2bNp164dzRo2pJuqGYoctawyV4nJyMjwJUuWHLAtOzubVq1aVVoMZVG0nGx55KWnU7NmTSBWTnbDhg2MGTOGsWPH0qRJE3r27FnpcR0b0sLK2dnZ0LtPKG21Wp0dSjsA92ddHlpbI56dGUo7iil+YcUVZkyVzcyWuvtBvTX1wCvZSy+9xF/+8hdyc3M55ZRTmDhxIhCb8SIicjiUwCuZysmKSFh0EVNEJKKUwEVEIqrUBG5m1c1skZm9Z2bvm9mdwfamZrbQzD4ys2fNrGppbYmISHji6YHvBS509zOADsAlZnYWcB/woLu3AL4GflVxYYqISFGlJvBg4eKdwdPU4MuBC4FpwfZJxNbFjKziysmmp6ezZcuWuNvIL2Z1KPfee295QxURAeKchRKsh7kUaA48AnwCbHP3/Puu1wEnhxFQ9unhzgmPZz7x4ZaTLY97772X22+/vULaFpGjS1wXMd09z907AI2BLkBxWbbYO4LMbJCZLTGzJZs3by57pBWopHKy+Xbv2UPPIUN4YlrsD44p//oX5111FV379mXonXeSV0yNkeL2+dODD7J79246dOhA//79AXjggQdo27Ytbdu25aGHHgIgJyeHVq1aMXDgQNq0aUP37t3ZvXt3RZ8GEYmYw5qF4u7bgNeBs4A6Zpbfg28MrC/hPePdPcPdM9LS0soTa4UpqZwsxG6z7zt0KFk9evDLvn1Z/emnTJs1i9lPPcXCadNISUlh6ksvHdBeSfv8z29/y7HHHsuyZcuYPHkyS5cu5cknn2ThwoW8/fbbPP7447z77rsAfPTRR9x44428//771KlThxdeeKFSz4mIJL9Sh1DMLA3Y5+7bzOxY4EfELmDOAfoCU4EBwD8qMtCKlF9Odt68ecyZM4esrCxGjx4NwBVXXMHwq66i3+Wx23nnvP02765aRberrgJgz969pNWrd0B78ewDMH/+fHr37k2NGjUA6NOnD/PmzaNnz540bdqUDh06ANC5c2dycnIq5LOLSHTFMwbeCJgUjINXAZ5z95lmtgqYamZ3A+8CEyowzgpXtJzspEmTADj33HP5z/z5ZF12WayMqzu/6NmTu4YPL7mxePaBQ5aXzR/OyY9NQygiUlQ8s1CWu3tHd2/v7m3d/a5g+6fu3sXdm7v7z9x9b8WHWzGKKyd7yimnAHDXXXdRr04dfnP33UBsAYTpr77Kpq1bAfjqm2/4fP2Bo0eH2ic1NZV9+/YBcP755zNjxgx27drFt99+y/Tp0znvvPMq9sOKyBFDd2ISG+ceMGAArVu3pn379qxateqARYT/99Zb2bN3L3984AFaNWvGn4cN4yeDB9OlTx8uHziQL4tcnD3UPoMGDaJ9+/b079+fTp06ce2119KlSxe6du3K9ddfT8eOHSvzo4tIhKmcbBzCLCcbVulWUDnZeCVjmVTFFD+Vky25nKx64CIiEaUELiISUUrgIiIRpQQuIhJRSuAiIhGlBC4iElFK4IEol5P92bBhZAbFsUqS1qXLYbU5btw4nnrqqfKEJSIVLOkWNX5kyOxQ27tx3IWl7hPlcrLbtm9nWXY2NY87jpx160hv3DiUdocMGRJKOyLl1eO9TxIdQtJSD5xolZMdN24c48aNKzjOjP/+lx6ZmfS99FKe//e/C7bnrFtHZv/+dOvXjzsffrhg+9zFi+l+7bX8YsQI2l9+OX968EEmT55Mly5daNeuHZ98EvvPMmrUKP72t78BkJmZya233kqXLl1o2bIl8+bNK/9JF5FyUwInWuVkhwwZckDv+PmXX+bKSy/lyksv5fmXXy7YfvN99zEwK4v5U6dyYv36B8S34sMP+d/bbmPxiy/yzMyZfPjhhyxatIjrr7+ehwsl+8Jyc3NZtGgRDz30EHfeeWf5TriIhEIJnO/LyY4fP560tDSysrKYOHEiECsne3WvXvTv2RM4sFRs1759eX3hQj5bt+6A9uLZBw4sJ1uzZs2CcrJAXOVkN27Zwidr13JOp060SE8n5ZhjeD8oyvX2u+9y5aWXAvDzn/zkgPd1btOGRmlpVKtalVMbN6Z79+4AtGvXrsSytX369DlkLCJS+ZJuDDxRolhO9oVZs9i2fTutLrkEgB07d/L8K6/QpkULgFi8xahatWrB4ypVqhQcq0qVKuTm5hb7nvx9UlJSStxHRCqXeuBEq5zs2LFjGTt2LADPvfwy//j731k9axarZ83izWefZVowDn5Wx448/8orAAcN8YjIkUEJnGiVk129ejUnnHACOTk5rP3yS7qccUbBa+mNG1OrZk0WLV/O3269lcemTqVbv35s37EjvJMlIkmj1HKyZvYD4CmgIbAfGO/uY8xsFDAQyM9et7v7y8W3EhNPOdkvP/mo6NvKrGGzFqG0k0zlZC+//HJefPFFqlatqnKycUrGMqmKKX7Zp4dTbjrMn6nKVlI52XjGwHOBEe7+jpnVApaa2avBaw+6+9/CDFQObebM6NY0FpFwlZrA3X0DsCF4vMPMsoGTKzowERE5tMMaAzezdKAjsDDYNNTMlpvZE2ZWt4T3DDKzJWa2ZHORsWIRESm7uBO4mdUEXgCGu/t24O9AM6ADsR76/cW9z93Hu3uGu2ekpaWFELKIiECcCdzMUokl78nu/iKAu2909zx33w88DhxetSQRESmXUsfALXY3yAQg290fKLS9UTA+DtAbCG+qhohI4Mo/hHO/4YpQWkku8ZyZc4GrgRVmtizYdjtwlZl1ABzIAQZXSISV5J577uGZZ54hJSWFKlWq8Nhjj9G1a9dDvueusWPp1rkzF559dqixjBs3juOOO45rrrkm1HYrg/6ziVSeeGahzAeKuyf7kHO+y2ry7b8Ntb145qOWtZzsHUOHhhHiQVTKVeR7Kz77PNEhJC3VQqH4crKLFi1i6NChvPjii/xr9mwG3HILXy5YwP79++l0xRWs+ve/GfTHP3LpBRfQu3t3Tr/4Yq7s0YO5ixaxLzeXsX/+M38eM4ZPPv+c4dddx8Arr2Tu4sXce+ONnHjiiSxbtow+ffrQrl07xowZw+7du5kxYwbNmjVj1KhR1KxZk5tvvpnMzEy6du3KnDlz2LZtGxMmTOC8885j165dXD1iBB9+9hmnnXoqa9av58E//pHObdok9FzqP5tI5dGt9BRfTrZTp04FpV3feucdWjdvztKVK1m8fDlntm9fbDuNGzbk9cmTObdTJwaPHMnkBx7g9cmTufuRRwr2ee+99xgzZgwrVqzg6aefLnMp10cffZQ6xx/Pohdf5LbBg3l31aqQz4qIJDv1wPm+nOy8efOYM2cOWVlZjB49mubNm5Odnc2SFSu46ZprmL90KXl5eZzTqVOx7VyWmQlAm5Yt2bl7N7Vq1KBWjRpUq1qVbdu3A3DmmWfSqFEjAJo1a3ZAKdc5c+YU225xpVznz5/PkKDEbZsWLWjbsmUo50Ik2aTveSaUdnJCaSW5KIEHiisne9555/HKK6+QmprKD886i0EjR5K3fz9/GTGi2DaqBWVaq5hRLTW1YHuVKlXIDVbtKVwmtjylXEurYSMiRz4NoVByOdnzzz+fhx56iC7t25NWrx5fffMNH372Ga2bN09gtDHdunXjhVmzAMj+5JOChRxE5OihHjixcrLDhg1j27ZtHHPMMTRv3pzx48dTo0YNNm7cSLeMWBGwti1akFavXokLJVSmG264gV/07k2XPn04o1Ur2rZoQe2aNRMdlohUolLLyYZJ5WTDK92al5fH9mXLqF6tGp+uXUuP669n+cyZVC00dFPZMWVnZ9Pq2bNCaYtR34TTDslZJlUxxS/9tnAWJMkZfVko7SRCecrJShLatWsXF11zDbm5ubg7Y0aOLFPyFpHoUgKPqFq1avHms88mOgwRSSBdxBQRiaikSOCaEhd9+h6KVL6EJ/Dq1auzdetWJYAIc3e2bt1K9erVEx2KyFEl4WPgjRs3Zt26deSv1rN986bQ2v76u+JvjDlc+zZuDKUdgNSUlNDaCiuuMGKqXr06jRs3DiEaEYlXwhN4amoqTZs2LXh+/6jfh9Z2WFOZskNaaR3CXRk7rLiivFq3yNEs4QlcpKJVr/u7RIcgUiFKHQM3sx+Y2Rwzyzaz983sN8H2emb2qpl9FPxb7KLGIiJSMeK5iJkLjHD3VsBZwI1m1hq4DXjN3VsArwXPRUSkkpSawN19g7u/EzzeAWQDJwNXAJOC3SYBvSoqSBEROdhhTSM0s3SgI7AQODF/UePg3wZhByciIiWL+yKmmdUEXgCGu/v2eCvymdkgYBBAkyZNyhKjlKBVv/WJDkFEEiiuHriZpRJL3pPd/cVg80YzaxS83ggodgK3u4939wx3z0hLSwsjZhERIb5ZKAZMALLd/YFCL/0TGBA8HgD8I/zwRESkJPEMoZwLXA2sMLNlwbbbgdHAc2b2K+Bz4GcVE6KIiBSn1ATu7vOBkga8Lwo3HBERiVfCi1mJiEjZKIGLiESUEriISEQpgYuIRJQSuIhIRCmBi4hElBK4iEhEaUEHOeJd+PqNIbam1YskeagHLiISUUrgIiIRpQQuIhJRSuAiIhGlBC4iElFK4CIiEaVphCICwMQea0Jra0RoLSWn+7MuD6WdEc/OLNf7lcAlVOl7ngmlnZxQWhE5ssWzpNoTZrbJzFYW2jbKzL4ws2XBV4+KDVNERIqKpwc+ERgLPFVk+4Pu/rfQIxKRhFjx2eeJDkEOU6k9cHefC3xVCbGIiMhhKM8slKFmtjwYYqlb0k5mNsjMlpjZks2bN5fjcCIiUlhZE/jfgWZAB2ADcH9JO7r7eHfPcPeMtLS0Mh5ORESKKlMCd/eN7p7n7vuBx4Eu4YYlIiKlKVMCN7NGhZ72BlaWtK+IiFSMUmehmNkUIBOob2brgD8DmWbWAXBiU3YHV2CMIiJSjFITuLtfVczmCRUQi4iIHAbVQhERiSglcBGRiFICFxGJKCVwEZGIUgIXEYkoJXARkYhSPXA54l35h/B+zFeE1pJI+akHLiISUUrgIiIRpSEUOeJpoQI5UqkHLiISUUrgIiIRpQQuIhJRSuAiIhGlBC4iElGlJvBg0eJNZray0LZ6ZvaqmX0U/FviosYiIlIx4umBTwQuKbLtNuA1d28BvBY8FxGRSlRqAnf3ucBXRTZfAUwKHk8CeoUcl4iIlKKsY+AnuvsGgODfBiXtaGaDzGyJmS3ZvHlzGQ8nIiJFVfhFTHcf7+4Z7p6RlpZW0YcTETlqlDWBbzSzRgTouncAAAoESURBVADBv5vCC0lEROJR1gT+T2BA8HgA8I9wwhERkXjFM41wCrAAOM3M1pnZr4DRwI/N7CPgx8FzERGpRKVWI3T3q0p46aKQYxERkcOgOzFFRCJKCVxEJKKUwEVEIkoJXEQkopTARUQiSglcRCSilMBFRCIq6Val7/HeJ4kOQeSolL7nmdDaygmtJTkU9cBFRCIq6XrgImFTz1KOVOqBi4hElBK4iEhEKYGLiESUEriISEQpgYuIRFS5ZqGYWQ6wA8gDct09I4ygRESkdGFMI/yhu28JoR0RETkMGkIREYmo8iZwB/5jZkvNbFAYAYmISHzKO4RyrruvN7MGwKtmttrd5xbeIUjsgwCaNGlSzsOJiEi+cvXA3X198O8mYDrQpZh9xrt7hrtnpKWlledwIiJSSJkTuJnVMLNa+Y+B7sDKsAITEZFDK88QyonAdDPLb+cZd/93KFGJiEipypzA3f1T4IwQYxERkcOgaYQiIhGlBC4iElFa0CEOrfqtT3QIIiIHUQ9cRCSilMBFRCJKCVxEJKKUwEVEIkoXMeOQrKuahxVXTiitiEhlUw9cRCSilMBFRCJKCVxEJKKUwEVEIirpLmJe2utvobWVE1pLIuGa2GNNaG2NCK0liVdY37/yfu/UAxcRiaik64GLHA1WfPZ5okOQI4B64CIiEVWuBG5ml5jZB2b2sZndFlZQIiJSujIPoZhZCvAI8GNgHbDYzP7p7qvCCk7kSJWsd/dKfJJlCKw8PfAuwMfu/qm7fwdMBa4IJywRESmNuXvZ3mjWF7jE3a8Pnl8NdHX3oUX2GwQMCp6eBnxQ9nAPUB/YElJbYVFM8VFM8UvGuBRTfMKM6RR3Tyu6sTyzUKyYbQf9NnD38cD4chyn+IObLXH3jLDbLQ/FFB/FFL9kjEsxxacyYirPEMo64AeFnjcGtPaYiEglKU8CXwy0MLOmZlYV6Af8M5ywRESkNGUeQnH3XDMbCswCUoAn3P390CIrXejDMiFQTPFRTPFLxrgUU3wqPKYyX8QUEZHE0p2YIiIRpQQuIhJRSuAiIhGlBC4iElFJn8DN7Dgzu8XMfm9m1c3sWjP7p5n91cxqJjq+fGb2YRLE0L7Q41QzGxmcq3vN7LgExTTUzOoHj5ub2Vwz22ZmC82sXYJietHMfpFkPz+nmtkTZna3mdU0s8fNbKWZPW9m6QmKqYqZ/dLMXjKz98xsqZlNNbPMRMQjB0v6BA5MBE4EmgIvARnA34jdCfr3RARkZjvMbHvwtcPMdgDN8rcnIqbAxEKPRwPNgfuBY4FxiQgI+LW7599OPAZ40N3rALcmMKauQC/gczN7zsx6B/cyJNJEYvdW7ATeBlYDlwL/Bp5IUEwTgCbAX4A5xP7/TQBGmtmwBMWEmdU2s9FmttrMtgZf2cG2OomKqyRm9kqFtZ3s0wjNbJm7dzAzAzYAjdzdg+fvuXv7UpqoiJgeBmoDv3f3jcG2z9y9aWXHUiSud929Y/B4GXCmu+9L8Ln6wN1PCx4vdvczC722PEExvevuHc2sFrFEfhVwJjATmOLu/0lUTMHjz929SXGvVXJMB3x/zOxtdz/LzKoBy9y9VWXHFMQxC5gNTHL3L4NtDYEBwI/c/ccJiKlTSS8BM929UUUcNzIr8gRJ+2UPfuMEzxPy28fdh5lZZ2CKmc0AxlJMHZgEqG1mvYn9ZVXN3fdBYs8VMM3MJgJ3AdPN7LfAC8BFQKJqcub/DO0AngaeNrN6wJXAbUClJ3Bgv5m1BOoAx5lZhrsvMbPmxG6US4R9ZtbM3T8JEtR3AO6+N4E/TwDp7n5f4Q1BIr/PzH6ZoJgWA29QfI2oCvurIAoJfImZ1XT3ne5e8M0xs2bAjkQF5e5LzexHwFBi37jqiYqlkDeAnsHjBWZ2ortvDHonCanU5u5/NLNrgSnAqUA1YCAwA+ifiJiIDVMcwN2/Ijakk6hhnVuAfwH7if1V8IfgmkZtYucrEX4PzDGzPUAqsXIZmFkasb9WEmWNmd1CrAee/xfwicC1wNoExZQNDHb3j4q+YGYVFlPSD6EAmNnpxGqNn0ys97SeWN2V1Z6gD1AopsbEktJnwAx3z05EPIXiasX352o/wblKZFzBuerFgd+/fyRBTAf9TCU4pvzv3UnBpk3EztOKBMf0U6AhkEdynKe6xP5SugJoEGzeSCwnjHb3rxMQU19ghbsfVC7bzHq5+4yKOG7SX8QMftNOJfanySJif6oYsR7drQmK6dZCMS0E5hJLAlMsgUvLBefqmSCWhRQ6V4mKq9C5yo9pUfBSImMq8WcqwTHlf+8WBV+5xIZ3Eh3TPmIXVhN+ngDc/Wt3v9XdT3f3esFXK3e/lVhHIRExTSsueQfqVtRxk74HbrHpeW3yx3MLba8KvO/uLRRT8salmBRTZSp6ATgZVGRMURgD30/sT8o1RbY3Cl5LhGSMCZIzLsUUH8UUJzNbXtJLxKYcV7pExRSFBD4ceM3MPuL7CxRNiM1xHlriu46+mCA541JMiilsJwIXA0XHug14q/LDARIUU9IPoUDsjjBiiyifTOyErAMWu3ueYkr+uBSTYgo5pgnAk+4+v5jXnnH3nx8tMUUigYuIyMGSfhaKiIgUTwlcRCSilMAlUszsQTMbXuj5LDP7v4We329mvytj2wfdoVnMPm5m9xd6frOZjSrL8UTKSwlcouYt4BwouMBWH2hT6PVzgDcr8Ph7gT4WlMgVSSQlcImaNwkSOLHEvRLYYWZ1gyp5rYB3ASxWQ36xmS03szvzG7BYLfBFZrbMzB4zswOKRZlZfTNbYGaXFXP8XGKrjf+26AtmdoqZvRYc7zUzS6obSuTIowQukeLu64HcIDmeAywgdov+2cRqxS939+/MrDvQgtgUuA5AZzM7P6jtkQWc6+4diNX3KCiqFRRFegm4w91fKiGMR4D+Zla7yPaxwFNBCdbJwP8J5UOLlCAKN/KIFJXfCz8HeIDYHOVzgG/4/qaJ7sHXu8HzmsQSenugM7DYzCC22MWmYJ9U4DXgRnd/o6SDu/t2M3sKuAnYXeils4E+weOngb+W+ROKxEEJXKIofxy8HbEhlLXACGA7369eY8Bf3P2xwm+02Eoyk9z9D8W0mwssJXZHXYkJPPAQ8A7w5CH20U0WUqE0hCJR9CZwOfCVu+cFtbzrEOsBLwj2mQX80oJ1L83sZDNrQKyH3Td4jJnVM7NTgvc48Evg9NKq7QXHfA74VaHNbxHUzCY2LHPQXXkiYVIClyhaQWz2ydtFtn2Tv/5msCzaM8QWtlgBTANqufsqYCTwn6AA0avEijMRvC+PWBL+oZndUEoc9wdx5LsJuC5o92rgN2X/iCKl0630IiIRpR64iEhEKYGLiESUEriISEQpgYuIRJQSuIhIRCmBi4hElBK4iEhEKYGLiETU/we9BK/B2F2OiAAAAABJRU5ErkJggg==\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"# print df.pivot_table(index='Symbol', \n",
"# columns='Year', \n",
"# values='Action',\n",
"# fill_value=0, \n",
"# aggfunc='count').unstack()\n",
"\n",
"fig, ax = plt.subplots(1, 1)\n",
"pt_weekly_numbers = df.pivot_table(index='Week No',\n",
" columns='Categories',\n",
" values='Length',\n",
" fill_value=0.,\n",
" aggfunc='sum')\n",
"pt_weekly_numbers.plot.bar(ax=ax, stacked=True)\n",
"ax.axhline(y=37., color='r', linestyle='--', lw=2)"
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {},
"outputs": [],
"source": [
"pts_pt_weekly_numbers = pt_weekly_numbers.apply(lambda x:\n",
" 100 * x / float(x.sum()))"
]
}
],
"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.7.5"
}
},
"nbformat": 4,
"nbformat_minor": 2
}
%% Cell type:markdown id: tags:
# Process hours
1.
Load CSV file
2.
Plot each weekly hour total split across each project (bar chart)
3.
List each project which has been worked on under each category
%% Cell type:code id: tags:
```
python
import
numpy
as
np
;
import
pandas
as
pd
;
import
matplotlib.pyplot
as
plt
import
datetime
```
%% Cell type:code id: tags:
```
python
# load csv file with information
project_hours_file
=
pd
.
read_csv
(
'
C:
\\
Users
\\
td7g11
\\
Documents
\\
20200203_export.CSV
'
,
encoding
=
"
ISO-8859-1
"
)
project_hours_file
.
head
()
```
%% Output
Subject Start Date Start Time \
0 INTERVIEW SEMINAR: Dr Jonathan Belnoue "Physic... 23/1/2020 10:00:00
1 INTERVIEW SEMINAR: Dr Chris Holmes "Making air... 24/1/2020 14:00:00
2 INTERVIEW SEMINAR: Dr Meisam Jalalvand "Fibre ... 24/1/2020 10:00:00
3 INTERVIEW SEMINAR: Dr Prodip K Das "Fabricatio... 23/1/2020 14:00:00
4 INTERVIEW SEMINAR: Dr Dezong Zhao "Low Carbon ... 22/1/2020 14:00:00
End Date End Time All day event Reminder on/off Reminder Date \
0 23/1/2020 11:00:00 False False 23/1/2020
1 24/1/2020 15:00:00 False False 24/1/2020
2 24/1/2020 11:00:00 False False 24/1/2020
3 23/1/2020 15:00:00 False False 23/1/2020
4 22/1/2020 15:00:00 False False 22/1/2020
Reminder Time Meeting Organizer ... Meeting Resources \
0 09:45:00 Mechanical Engineering ... NaN
1 13:45:00 Mechanical Engineering ... NaN
2 09:45:00 Mechanical Engineering ... NaN
3 13:45:00 Mechanical Engineering ... NaN
4 13:45:00 Mechanical Engineering ... NaN
Billing Information Categories \
0 NaN NaN
1 NaN NaN
2 NaN NaN
3 NaN NaN
4 NaN NaN
Description Location Mileage \
0 Dear all,\r\n\r\n \r\n\r\nDr Jonathan Belnoue ... 100 / 5017 NaN
1 Dear all,\r\n\r\n \r\n\r\nDr Chris Holmes will... 85 / 2207 NaN
2 Dear all,\r\n\r\n \r\n\r\nQuick reminder: the ... 67 / 1001 NaN
3 Dear all,\r\n\r\n \r\n\r\nDr Prodip Das will b... 100 / 5013 NaN
4 Dear all,\r\n\r\n \r\n\r\nDr Dezong Zhao will ... 4 / 4005 NaN
Priority Private Sensitivity Show time as
0 Normal False Normal 1
1 Normal False Normal 1
2 Normal False Normal 1
3 Normal False Normal 1
4 Normal False Normal 1
[5 rows x 22 columns]
%% Cell type:code id: tags:
```
python
# drop rows without categories assigned
# combine the start time/date columns and end time/date columns together
df
=
project_hours_file
df
=
df
.
dropna
(
axis
=
1
,
how
=
'
all
'
)
df
=
df
[
df
[
'
Categories
'
].
notnull
()]
df
[
'
Start
'
]
=
df
[
'
Start Date
'
]
+
"
"
+
df
[
'
Start Time
'
]
df
[
'
End
'
]
=
df
[
'
End Date
'
]
+
"
"
+
df
[
'
End Time
'
]
df
[
'
Start
'
]
=
pd
.
to_datetime
(
df
[
'
Start
'
],
format
=
"
%d/%m/%Y %H:%M:%S
"
)
df
[
'
End
'
]
=
pd
.
to_datetime
(
df
[
'
End
'
],
format
=
"
%d/%m/%Y %H:%M:%S
"
)
df
[
'
Length
'
]
=
pd
.
to_timedelta
(
df
[
'
End
'
]
-
df
[
'
Start
'
],
unit
=
'
H
'
)
/
np
.
timedelta64
(
1
,
'
h
'
)
# df['Start Time'] = pd.to_datetime(df['Start Time'],format= '%H:%M:%S' ).dt.time
# df['End Time'] = pd.to_datetime(df['End Time'],format= '%H:%M:%S' ).dt.time
df
[
'
Week No
'
]
=
[
i
.
strftime
(
"
%V
"
)
for
i
in
df
[
'
Start
'
]]
df
.
sort_values
(
'
Week No
'
,
ascending
=
True
)
```
%% Output
Subject Start Date Start Time End Date End Time \
11 Skeleton - helmet cap 14/1/2020 10:00:00 14/1/2020 12:00:00
12 Swimming - Paper 14/1/2020 08:00:00 14/1/2020 10:00:00
13 Swimming - Paper 14/1/2020 12:30:00 14/1/2020 16:30:00
14 Swimming - Paper 15/1/2020 08:00:00 15/1/2020 12:00:00
15 Swimming - Paper 16/1/2020 08:00:00 16/1/2020 12:00:00
.. ... ... ... ... ...
118 Swimming - Paper 9/3/2020 09:00:00 9/3/2020 10:30:00
87 IP meeting 10/3/2020 11:00:00 10/3/2020 11:30:00
58 MSc meetings 10/3/2020 10:00:00 10/3/2020 11:00:00
120 Swimming 10/3/2020 08:30:00 10/3/2020 10:00:00
121 Swimming 10/3/2020 11:30:00 10/3/2020 16:30:00
All day event Reminder on/off Reminder Date Reminder Time \
11 False False 14/1/2020 09:45:00
12 False False 14/1/2020 07:45:00
13 False False 14/1/2020 12:15:00
14 False False 15/1/2020 07:45:00
15 False False 16/1/2020 07:45:00
.. ... ... ... ...
118 False False 9/3/2020 08:45:00
87 False True 10/3/2020 10:45:00
58 False False 10/3/2020 09:45:00
120 False False 10/3/2020 08:15:00
121 False False 10/3/2020 11:15:00
Meeting Organizer ... Description \
11 NaN ... NaN
12 Dickson T.A.J. ... NaN
13 Dickson T.A.J. ... \r\n
14 Dickson T.A.J. ... NaN
15 Dickson T.A.J. ... \r\n
.. ... ... ...
118 Dickson T.A.J. ... \r\n
87 Turnock S.R. ... \r\n\r\n
58 Weymouth G.D. ... MSc weekly meeting. Konrad needs to skip this ...
120 Dickson T.A.J. ... \r\n
121 Dickson T.A.J. ... \r\n
Location Priority Private Sensitivity Show time as \
11 NaN Normal False Normal 2
12 NaN Normal False Normal 2
13 NaN Normal False Normal 2
14 NaN Normal False Normal 2
15 NaN Normal False Normal 2
.. ... ... ... ... ...
118 NaN Normal False Normal 2
87 176/3009 Normal False Normal 2
58 Gabe's office Normal False Normal 2
120 NaN Normal False Normal 2
121 NaN Normal False Normal 2
Start End Length Week No
11 2020-01-14 10:00:00 2020-01-14 12:00:00 2.0 03
12 2020-01-14 08:00:00 2020-01-14 10:00:00 2.0 03
13 2020-01-14 12:30:00 2020-01-14 16:30:00 4.0 03
14 2020-01-15 08:00:00 2020-01-15 12:00:00 4.0 03
15 2020-01-16 08:00:00 2020-01-16 12:00:00 4.0 03
.. ... ... ... ...
118 2020-03-09 09:00:00 2020-03-09 10:30:00 1.5 11
87 2020-03-10 11:00:00 2020-03-10 11:30:00 0.5 11
58 2020-03-10 10:00:00 2020-03-10 11:00:00 1.0 11
120 2020-03-10 08:30:00 2020-03-10 10:00:00 1.5 11
121 2020-03-10 11:30:00 2020-03-10 16:30:00 5.0 11
[108 rows x 24 columns]
%% Cell type:code id: tags:
```
python
# total time per category
total_grouped
=
df
.
groupby
([
'
Categories
'
])[
'
Length
'
].
sum
()
total_grouped
```
%% Output
Categories
Admin 60.75
Sailing 41.00
Sailing;Admin 3.50
Skeleton 88.50
Skeleton;Admin 3.50
Swimming 123.75
Name: Length, dtype: float64
%% Cell type:code id: tags:
```
python
plt
.
figure
()
plt
.
bar
(
total_grouped
.
index
,
total_grouped
.
values
)
plt
.
xlabel
(
"
Sport
"
)
plt
.
ylabel
(
"
Hours spent
"
)
plt
.
title
(
"
Time since 15/01/2020
"
)
plt
.
show
()
```
%% Output
%% Cell type:code id: tags:
```
python
# stacked bar chart
weekly_times
=
df
.
groupby
([
'
Categories
'
,
'
Week No
'
])[
'
Length
'
].
sum
()
weekly_times
```
%% Output
Categories Week No
Admin 03 1.50
04 2.50
05 2.50
06 15.75
07 7.00
08 0.50
09 7.50
10 23.50
Sailing 04 1.00
05 17.50
06 8.00
07 5.00
08 0.50
09 8.00
10 0.50
11 0.50
Sailing;Admin 06 0.50
07 0.50
08 0.50
09 0.50
10 0.50
11 1.00
Skeleton 03 6.00
04 39.00
05 22.25
06 13.75
07 5.00
10 2.50
Skeleton;Admin 07 3.50
Swimming 03 18.50
07 16.00
08 37.25
09 23.50
10 14.00
11 14.50
Name: Length, dtype: float64
%% Cell type:code id: tags:
```
python
# print df.pivot_table(index='Symbol',
# columns='Year',
# values='Action',
# fill_value=0,
# aggfunc='count').unstack()
fig
,
ax
=
plt
.
subplots
(
1
,
1
)
pt_weekly_numbers
=
df
.
pivot_table
(
index
=
'
Week No
'
,
columns
=
'
Categories
'
,
values
=
'
Length
'
,
fill_value
=
0.
,
aggfunc
=
'
sum
'
)
pt_weekly_numbers
.
plot
.
bar
(
ax
=
ax
,
stacked
=
True
)
ax
.
axhline
(
y
=
37.
,
color
=
'
r
'
,
linestyle
=
'
--
'
,
lw
=
2
)
```
%% Output
<matplotlib.lines.Line2D at 0x28dd9ce21c8>
%% Cell type:code id: tags:
```
python
pts_pt_weekly_numbers
=
pt_weekly_numbers
.
apply
(
lambda
x
:
100
*
x
/
float
(
x
.
sum
()))
```
This diff is collapsed.
Click to expand it.
process_hours.ipynb
0 → 100644
+
0
−
0
View file @
7121f192
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment