Skip to content

Instantly share code, notes, and snippets.

@drcjar
Created September 15, 2014 21:31
Show Gist options
  • Save drcjar/524eaa6497667a8bab4d to your computer and use it in GitHub Desktop.
Save drcjar/524eaa6497667a8bab4d to your computer and use it in GitHub Desktop.
Display the source blob
Display the rendered blob
Raw
{
"metadata": {
"name": "pyrota"
},
"nbformat": 3,
"nbformat_minor": 0,
"worksheets": [
{
"cells": [
{
"cell_type": "code",
"collapsed": false,
"input": "import pandas as pd\nfrom pandas import PeriodIndex, date_range\nfrom pandas import DataFrame",
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 1
},
{
"cell_type": "code",
"collapsed": false,
"input": "#teams participating in on-call\nteams = ['GAS', 'ENDO', 'RHEUM', 'RESP', 'ID', 'CARDIO', 'NEURO', 'ONC/PALL', 'MOD', 'ACUTE']\n\n#doctors on the rota\ndoctors = {'reg':range(0,16), 'sho':range(0,24), 'ho':range(0,20)} #AC1+2 aren't on rota\n\n#shift_patterns = {'Mon, Wed, Fri':'11-2030', 'Tue, Thu':'08:1800', 'Sat, Sun':'08:2000'} #for reg only first\nshift_patterns = ['day', 'night', 'level 1']\n\n#possible rotation lengths for doctors (in months)\nrotation_length = [3, 4, 6] \n\n#weeks in rolling rota\nweeks = [] \n\n#days of week\n\ndow = {0:'Mon', 1:'Tue', 2:'Wed', 3:'Thu', 4:'Fri', 5:'Sat', 6:'Sun'}\n#pattern\n#always do 4 days o/c from a monday\n#or 3 days o/c from a friday\n\n#map real doctors to rota doctors\ndoctors_lookup = {} \n\ndef ewtd_eval(rota):\n print 'not yet implemented'\n\n#make rota\n#email rota\n#amend rota\n#add/remove doctor\n",
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 136
},
{
"cell_type": "code",
"collapsed": false,
"input": "#assume len(month) == 31\nfloat(len(doctors['reg'])) / 31\n",
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 60,
"text": "0.5806451612903226"
}
],
"prompt_number": 60
},
{
"cell_type": "code",
"collapsed": false,
"input": "(365 + 365 + 104) / float(16) \n#365 days + 365 nights + 104 weekend days = 54 shifts per reg per year (23d, 23n, 7w)\n#should do one shift a week or 1 in 7 days\n\n#6 month rolling rota. 2 docs start at each month + 2 on?\n\nmonth1 (3d + 4n)\n3\n4 = 7\n\nmonth2 (3d OR 3n)\n=3\n\nmonth3 (4d + 3n)\n4\n3 = 7\n\nmonth4 (2w)\n2\n\nmonth5 (3d + 4n OR 4n + 3d)\n3\n4 = 7\n \nmonth6 (2d OR 2n)\n2\n\n\n#always follow pattern 2wks on o/c rota 2wks off\n\n\n\n\n",
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 89,
"text": "52.125"
}
],
"prompt_number": 89
},
{
"cell_type": "code",
"collapsed": false,
"input": "2float(6)",
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 122,
"text": "2.6666666666666665"
}
],
"prompt_number": 122
},
{
"cell_type": "code",
"collapsed": false,
"input": "365 + 365 + 104",
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 108,
"text": "834"
}
],
"prompt_number": 108
},
{
"cell_type": "code",
"collapsed": false,
"input": "#test_year\nrng = date_range(start='8/6/2014', end='8/6/2015', freq='D', tz='Europe/London') \nper = rng.to_period()",
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 146
},
{
"cell_type": "code",
"collapsed": false,
"input": "df = DataFrame()\ndf['DateTime'] = per\ndf['Day'] = rng.dayofweek\ndf['Day'] = df['Day'].map(dow.get)\ndf['Day reg'] = 'name'\ndf['Night reg'] = 'name'\ndf['L1 reg'] = 'name'\ndf.head()\n",
"language": "python",
"metadata": {},
"outputs": [
{
"html": "<div style=\"max-height:1000px;max-width:1500px;overflow:auto;\">\n<table border=\"1\" class=\"dataframe\">\n <thead>\n <tr style=\"text-align: right;\">\n <th></th>\n <th>DateTime</th>\n <th>Day</th>\n <th>Day reg</th>\n <th>Night reg</th>\n <th>L1 reg</th>\n </tr>\n </thead>\n <tbody>\n <tr>\n <th>0</th>\n <td> 2014-08-06</td>\n <td> Wed</td>\n <td> name</td>\n <td> name</td>\n <td> name</td>\n </tr>\n <tr>\n <th>1</th>\n <td> 2014-08-07</td>\n <td> Thu</td>\n <td> name</td>\n <td> name</td>\n <td> name</td>\n </tr>\n <tr>\n <th>2</th>\n <td> 2014-08-08</td>\n <td> Fri</td>\n <td> name</td>\n <td> name</td>\n <td> name</td>\n </tr>\n <tr>\n <th>3</th>\n <td> 2014-08-09</td>\n <td> Sat</td>\n <td> name</td>\n <td> name</td>\n <td> name</td>\n </tr>\n <tr>\n <th>4</th>\n <td> 2014-08-10</td>\n <td> Sun</td>\n <td> name</td>\n <td> name</td>\n <td> name</td>\n </tr>\n </tbody>\n</table>\n<p>5 rows \u00d7 5 columns</p>\n</div>",
"metadata": {},
"output_type": "pyout",
"prompt_number": 147,
"text": " DateTime Day Day reg Night reg L1 reg\n0 2014-08-06 Wed name name name\n1 2014-08-07 Thu name name name\n2 2014-08-08 Fri name name name\n3 2014-08-09 Sat name name name\n4 2014-08-10 Sun name name name\n\n[5 rows x 5 columns]"
}
],
"prompt_number": 147
},
{
"cell_type": "code",
"collapsed": false,
"input": "df.to_csv('planning.csv')",
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 150
},
{
"cell_type": "code",
"collapsed": false,
"input": "365/12",
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 51,
"text": "30"
}
],
"prompt_number": 51
},
{
"cell_type": "code",
"collapsed": false,
"input": "tmp = pd.read_csv('data/tmp.csv', names=['Day', 'Night', 'L1'], skiprows=1)",
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 75
},
{
"cell_type": "code",
"collapsed": false,
"input": "len(tmp.Day.unique())",
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 78,
"text": "23"
}
],
"prompt_number": 78
},
{
"cell_type": "code",
"collapsed": false,
"input": "tmp.Day.unique()",
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 80,
"text": "array(['Sophie Stevens', 'Sai L Duraisingham', 'Carl Reynolds',\n 'Julian Lentaigne', 'Endo 3', 'Johanna Maziar ', 'Jonathon Segal',\n 'Alexander Clarke', 'Jonathon Nolan', 'Hisham Nizar', 'ID',\n 'Mudhar Abdul Saheb', 'Evangelia Fatourou', 'MFE 1', 'Rheum',\n 'Abdulkani Yusuf', 'MFE 3', 'MFE 2', 'Resp 1', 'Endo 2',\n 'Jonathon Landy', 'Endo 1', 'Resp 2'], dtype=object)"
}
],
"prompt_number": 80
},
{
"cell_type": "code",
"collapsed": false,
"input": "tmp[:274].stack().value_counts()",
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 118,
"text": "Carl Reynolds 47\nEvangelia Fatourou 46\nEndo 3 44\nEndo 2 43\nRheum 43\nID 42\nAbdulkani Yusuf 41\nMFE 3 41\nJonathon Landy 39\nJonathon Nolan 38\nMFE 1 35\nMFE 2 33\nResp 1 32\nEndo 1 19\nHisham Nizar 17\nJulian Lentaigne 13\nJohanna Maziar 9\nAlexander Clarke 7\nResp 2 6\nMudhar Abdul Saheb 6\nMaria Bashyam 6\nJonathon Segal 5\nAlex Salem 4\nSophie Stevens 4\nKesavan Kandiah 3\nSai L Duraisingham 3\ndtype: int64"
}
],
"prompt_number": 118
},
{
"cell_type": "code",
"collapsed": false,
"input": "365 / float(4) * 3",
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 117,
"text": "273.75"
}
],
"prompt_number": 117
},
{
"cell_type": "code",
"collapsed": false,
"input": "0.75 * 54",
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 120,
"text": "40.5"
}
],
"prompt_number": 120
},
{
"cell_type": "code",
"collapsed": false,
"input": "df",
"language": "python",
"metadata": {},
"outputs": [
{
"html": "<div style=\"max-height:1000px;max-width:1500px;overflow:auto;\">\n<table border=\"1\" class=\"dataframe\">\n <thead>\n <tr style=\"text-align: right;\">\n <th></th>\n <th>DateTime</th>\n <th>Day</th>\n <th>Day reg</th>\n <th>Night reg</th>\n <th>L1 reg</th>\n </tr>\n </thead>\n <tbody>\n <tr>\n <th>0 </th>\n <td> 2014-08-06</td>\n <td> Wed</td>\n <td> name</td>\n <td> name</td>\n <td> name</td>\n </tr>\n <tr>\n <th>1 </th>\n <td> 2014-08-07</td>\n <td> Thu</td>\n <td> name</td>\n <td> name</td>\n <td> name</td>\n </tr>\n <tr>\n <th>2 </th>\n <td> 2014-08-08</td>\n <td> Fri</td>\n <td> name</td>\n <td> name</td>\n <td> name</td>\n </tr>\n <tr>\n <th>3 </th>\n <td> 2014-08-09</td>\n <td> Sat</td>\n <td> name</td>\n <td> name</td>\n <td> name</td>\n </tr>\n <tr>\n <th>4 </th>\n <td> 2014-08-10</td>\n <td> Sun</td>\n <td> name</td>\n <td> name</td>\n <td> name</td>\n </tr>\n <tr>\n <th>5 </th>\n <td> 2014-08-11</td>\n <td> Mon</td>\n <td> name</td>\n <td> name</td>\n <td> name</td>\n </tr>\n <tr>\n <th>6 </th>\n <td> 2014-08-12</td>\n <td> Tue</td>\n <td> name</td>\n <td> name</td>\n <td> name</td>\n </tr>\n <tr>\n <th>7 </th>\n <td> 2014-08-13</td>\n <td> Wed</td>\n <td> name</td>\n <td> name</td>\n <td> name</td>\n </tr>\n <tr>\n <th>8 </th>\n <td> 2014-08-14</td>\n <td> Thu</td>\n <td> name</td>\n <td> name</td>\n <td> name</td>\n </tr>\n <tr>\n <th>9 </th>\n <td> 2014-08-15</td>\n <td> Fri</td>\n <td> name</td>\n <td> name</td>\n <td> name</td>\n </tr>\n <tr>\n <th>10</th>\n <td> 2014-08-16</td>\n <td> Sat</td>\n <td> name</td>\n <td> name</td>\n <td> name</td>\n </tr>\n <tr>\n <th>11</th>\n <td> 2014-08-17</td>\n <td> Sun</td>\n <td> name</td>\n <td> name</td>\n <td> name</td>\n </tr>\n <tr>\n <th>12</th>\n <td> 2014-08-18</td>\n <td> Mon</td>\n <td> name</td>\n <td> name</td>\n <td> name</td>\n </tr>\n <tr>\n <th>13</th>\n <td> 2014-08-19</td>\n <td> Tue</td>\n <td> name</td>\n <td> name</td>\n <td> name</td>\n </tr>\n <tr>\n <th>14</th>\n <td> 2014-08-20</td>\n <td> Wed</td>\n <td> name</td>\n <td> name</td>\n <td> name</td>\n </tr>\n <tr>\n <th>15</th>\n <td> 2014-08-21</td>\n <td> Thu</td>\n <td> name</td>\n <td> name</td>\n <td> name</td>\n </tr>\n <tr>\n <th>16</th>\n <td> 2014-08-22</td>\n <td> Fri</td>\n <td> name</td>\n <td> name</td>\n <td> name</td>\n </tr>\n <tr>\n <th>17</th>\n <td> 2014-08-23</td>\n <td> Sat</td>\n <td> name</td>\n <td> name</td>\n <td> name</td>\n </tr>\n <tr>\n <th>18</th>\n <td> 2014-08-24</td>\n <td> Sun</td>\n <td> name</td>\n <td> name</td>\n <td> name</td>\n </tr>\n <tr>\n <th>19</th>\n <td> 2014-08-25</td>\n <td> Mon</td>\n <td> name</td>\n <td> name</td>\n <td> name</td>\n </tr>\n <tr>\n <th>20</th>\n <td> 2014-08-26</td>\n <td> Tue</td>\n <td> name</td>\n <td> name</td>\n <td> name</td>\n </tr>\n <tr>\n <th>21</th>\n <td> 2014-08-27</td>\n <td> Wed</td>\n <td> name</td>\n <td> name</td>\n <td> name</td>\n </tr>\n <tr>\n <th>22</th>\n <td> 2014-08-28</td>\n <td> Thu</td>\n <td> name</td>\n <td> name</td>\n <td> name</td>\n </tr>\n <tr>\n <th>23</th>\n <td> 2014-08-29</td>\n <td> Fri</td>\n <td> name</td>\n <td> name</td>\n <td> name</td>\n </tr>\n <tr>\n <th>24</th>\n <td> 2014-08-30</td>\n <td> Sat</td>\n <td> name</td>\n <td> name</td>\n <td> name</td>\n </tr>\n <tr>\n <th>25</th>\n <td> 2014-08-31</td>\n <td> Sun</td>\n <td> name</td>\n <td> name</td>\n <td> name</td>\n </tr>\n <tr>\n <th>26</th>\n <td> 2014-09-01</td>\n <td> Mon</td>\n <td> name</td>\n <td> name</td>\n <td> name</td>\n </tr>\n <tr>\n <th>27</th>\n <td> 2014-09-02</td>\n <td> Tue</td>\n <td> name</td>\n <td> name</td>\n <td> name</td>\n </tr>\n <tr>\n <th>28</th>\n <td> 2014-09-03</td>\n <td> Wed</td>\n <td> name</td>\n <td> name</td>\n <td> name</td>\n </tr>\n <tr>\n <th>29</th>\n <td> 2014-09-04</td>\n <td> Thu</td>\n <td> name</td>\n <td> name</td>\n <td> name</td>\n </tr>\n <tr>\n <th>30</th>\n <td> 2014-09-05</td>\n <td> Fri</td>\n <td> name</td>\n <td> name</td>\n <td> name</td>\n </tr>\n <tr>\n <th>31</th>\n <td> 2014-09-06</td>\n <td> Sat</td>\n <td> name</td>\n <td> name</td>\n <td> name</td>\n </tr>\n <tr>\n <th>32</th>\n <td> 2014-09-07</td>\n <td> Sun</td>\n <td> name</td>\n <td> name</td>\n <td> name</td>\n </tr>\n <tr>\n <th>33</th>\n <td> 2014-09-08</td>\n <td> Mon</td>\n <td> name</td>\n <td> name</td>\n <td> name</td>\n </tr>\n <tr>\n <th>34</th>\n <td> 2014-09-09</td>\n <td> Tue</td>\n <td> name</td>\n <td> name</td>\n <td> name</td>\n </tr>\n <tr>\n <th>35</th>\n <td> 2014-09-10</td>\n <td> Wed</td>\n <td> name</td>\n <td> name</td>\n <td> name</td>\n </tr>\n <tr>\n <th>36</th>\n <td> 2014-09-11</td>\n <td> Thu</td>\n <td> name</td>\n <td> name</td>\n <td> name</td>\n </tr>\n <tr>\n <th>37</th>\n <td> 2014-09-12</td>\n <td> Fri</td>\n <td> name</td>\n <td> name</td>\n <td> name</td>\n </tr>\n <tr>\n <th>38</th>\n <td> 2014-09-13</td>\n <td> Sat</td>\n <td> name</td>\n <td> name</td>\n <td> name</td>\n </tr>\n <tr>\n <th>39</th>\n <td> 2014-09-14</td>\n <td> Sun</td>\n <td> name</td>\n <td> name</td>\n <td> name</td>\n </tr>\n <tr>\n <th>40</th>\n <td> 2014-09-15</td>\n <td> Mon</td>\n <td> name</td>\n <td> name</td>\n <td> name</td>\n </tr>\n <tr>\n <th>41</th>\n <td> 2014-09-16</td>\n <td> Tue</td>\n <td> name</td>\n <td> name</td>\n <td> name</td>\n </tr>\n <tr>\n <th>42</th>\n <td> 2014-09-17</td>\n <td> Wed</td>\n <td> name</td>\n <td> name</td>\n <td> name</td>\n </tr>\n <tr>\n <th>43</th>\n <td> 2014-09-18</td>\n <td> Thu</td>\n <td> name</td>\n <td> name</td>\n <td> name</td>\n </tr>\n <tr>\n <th>44</th>\n <td> 2014-09-19</td>\n <td> Fri</td>\n <td> name</td>\n <td> name</td>\n <td> name</td>\n </tr>\n <tr>\n <th>45</th>\n <td> 2014-09-20</td>\n <td> Sat</td>\n <td> name</td>\n <td> name</td>\n <td> name</td>\n </tr>\n <tr>\n <th>46</th>\n <td> 2014-09-21</td>\n <td> Sun</td>\n <td> name</td>\n <td> name</td>\n <td> name</td>\n </tr>\n <tr>\n <th>47</th>\n <td> 2014-09-22</td>\n <td> Mon</td>\n <td> name</td>\n <td> name</td>\n <td> name</td>\n </tr>\n <tr>\n <th>48</th>\n <td> 2014-09-23</td>\n <td> Tue</td>\n <td> name</td>\n <td> name</td>\n <td> name</td>\n </tr>\n <tr>\n <th>49</th>\n <td> 2014-09-24</td>\n <td> Wed</td>\n <td> name</td>\n <td> name</td>\n <td> name</td>\n </tr>\n <tr>\n <th>50</th>\n <td> 2014-09-25</td>\n <td> Thu</td>\n <td> name</td>\n <td> name</td>\n <td> name</td>\n </tr>\n <tr>\n <th>51</th>\n <td> 2014-09-26</td>\n <td> Fri</td>\n <td> name</td>\n <td> name</td>\n <td> name</td>\n </tr>\n <tr>\n <th>52</th>\n <td> 2014-09-27</td>\n <td> Sat</td>\n <td> name</td>\n <td> name</td>\n <td> name</td>\n </tr>\n <tr>\n <th>53</th>\n <td> 2014-09-28</td>\n <td> Sun</td>\n <td> name</td>\n <td> name</td>\n <td> name</td>\n </tr>\n <tr>\n <th>54</th>\n <td> 2014-09-29</td>\n <td> Mon</td>\n <td> name</td>\n <td> name</td>\n <td> name</td>\n </tr>\n <tr>\n <th>55</th>\n <td> 2014-09-30</td>\n <td> Tue</td>\n <td> name</td>\n <td> name</td>\n <td> name</td>\n </tr>\n <tr>\n <th>56</th>\n <td> 2014-10-01</td>\n <td> Wed</td>\n <td> name</td>\n <td> name</td>\n <td> name</td>\n </tr>\n <tr>\n <th>57</th>\n <td> 2014-10-02</td>\n <td> Thu</td>\n <td> name</td>\n <td> name</td>\n <td> name</td>\n </tr>\n <tr>\n <th>58</th>\n <td> 2014-10-03</td>\n <td> Fri</td>\n <td> name</td>\n <td> name</td>\n <td> name</td>\n </tr>\n <tr>\n <th>59</th>\n <td> 2014-10-04</td>\n <td> Sat</td>\n <td> name</td>\n <td> name</td>\n <td> name</td>\n </tr>\n <tr>\n <th></th>\n <td>...</td>\n <td>...</td>\n <td>...</td>\n <td>...</td>\n <td>...</td>\n </tr>\n </tbody>\n</table>\n<p>366 rows \u00d7 5 columns</p>\n</div>",
"metadata": {},
"output_type": "pyout",
"prompt_number": 151,
"text": " DateTime Day Day reg Night reg L1 reg\n0 2014-08-06 Wed name name name\n1 2014-08-07 Thu name name name\n2 2014-08-08 Fri name name name\n3 2014-08-09 Sat name name name\n4 2014-08-10 Sun name name name\n5 2014-08-11 Mon name name name\n6 2014-08-12 Tue name name name\n7 2014-08-13 Wed name name name\n8 2014-08-14 Thu name name name\n9 2014-08-15 Fri name name name\n10 2014-08-16 Sat name name name\n11 2014-08-17 Sun name name name\n12 2014-08-18 Mon name name name\n13 2014-08-19 Tue name name name\n14 2014-08-20 Wed name name name\n15 2014-08-21 Thu name name name\n16 2014-08-22 Fri name name name\n17 2014-08-23 Sat name name name\n18 2014-08-24 Sun name name name\n19 2014-08-25 Mon name name name\n20 2014-08-26 Tue name name name\n21 2014-08-27 Wed name name name\n22 2014-08-28 Thu name name name\n23 2014-08-29 Fri name name name\n24 2014-08-30 Sat name name name\n25 2014-08-31 Sun name name name\n26 2014-09-01 Mon name name name\n27 2014-09-02 Tue name name name\n28 2014-09-03 Wed name name name\n29 2014-09-04 Thu name name name\n30 2014-09-05 Fri name name name\n31 2014-09-06 Sat name name name\n32 2014-09-07 Sun name name name\n33 2014-09-08 Mon name name name\n34 2014-09-09 Tue name name name\n35 2014-09-10 Wed name name name\n36 2014-09-11 Thu name name name\n37 2014-09-12 Fri name name name\n38 2014-09-13 Sat name name name\n39 2014-09-14 Sun name name name\n40 2014-09-15 Mon name name name\n41 2014-09-16 Tue name name name\n42 2014-09-17 Wed name name name\n43 2014-09-18 Thu name name name\n44 2014-09-19 Fri name name name\n45 2014-09-20 Sat name name name\n46 2014-09-21 Sun name name name\n47 2014-09-22 Mon name name name\n48 2014-09-23 Tue name name name\n49 2014-09-24 Wed name name name\n50 2014-09-25 Thu name name name\n51 2014-09-26 Fri name name name\n52 2014-09-27 Sat name name name\n53 2014-09-28 Sun name name name\n54 2014-09-29 Mon name name name\n55 2014-09-30 Tue name name name\n56 2014-10-01 Wed name name name\n57 2014-10-02 Thu name name name\n58 2014-10-03 Fri name name name\n59 2014-10-04 Sat name name name\n ... ... ... ... ...\n\n[366 rows x 5 columns]"
}
],
"prompt_number": 151
},
{
"cell_type": "code",
"collapsed": false,
"input": "",
"language": "python",
"metadata": {},
"outputs": []
}
],
"metadata": {}
}
]
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment