Just two round trips wiped off the timetable our of 8 (that's just a quarter or one train) on a line like Swindon-Westbury which runs at intervals of about 2 hours and 15 minutes. Average delay to passengers = 34 minutes. So an infrequent service does wipe out practical use at a far lower number of cancellation - if the average holdup for passenger is one half an hour not less that five minutes, that's darned serious -and it's with less than half the cancellations that Exmouth suffered today.
I must admit I am struggling to get my head around this. If I go to catch a train I aim to be on the platform a minimum of five minutes before it is due to leave. However I am not actually delayed until the train is late or cancelled. That applies to everyone aiming to catch that train. So even if they arrive at the station 20 minutes before me they will be delayed by the same amount of time as I am if the train is late or cancelled. No one is delayed by a lesser or greater amount - so I don't understand the validity of the 34 minutes.
It's an interesting one ... here is Melksham to Swindon with 2 trains being cancelled and passenger arriving at the station every 10 minutes. Of course, in reality on such a thin service they would arrange their timing to arrive for a particular train.
tats = ["05:33","07:21","07:53","10:02","12:33","14:32","16:41","18:50","20:22"]
tata = ["05:33","07:21","07:53","12:33","14:32","16:41","20:22"]
wt = []
for tat in (tats,tata):
peeps = 0
paws = 0
for hour in range(5,20):
for min in range(0,60,10):
popup = hour*60+min
for service in tat:
(h,m) = service.split(":")
goesat = int(h)*60+int(m)
if goesat > popup:
paws += goesat - popup
peeps += 1
break
avw = paws/peeps
print("passengers {} total wait {} minutes - average {:.1f}".format(peeps,paws,avw))
wt.append(avw)
print ("Extra time waited {:.1f} minutes".format(wt[1]-wt[0]))
passengers 90 total wait 5264 minutes - average 58.5
passengers 90 total wait 8331 minutes - average 92.6
Extra time waited 34.1 minuteschange the first two lines to show 1 in 7 services cancelled on a half hourly pattern (5 in the day)
tats = ["06:05","06:35","07:05","07:35","08:05","08:35","09:05","09:35","10:05","10:35",
"11:05","11:35","12:05","12:35","13:05","13:35","14:05","14:35","15:05","15:35",
"16:05","16:35","17:05","17:35","18:05","18:35","19:05","19:35","20:05","20:35",
"21:05"]
tata = ["06:05","07:05","07:35","08:05","08:35","09:05","09:35","10:35",
"11:05","11:35","12:05","12:35","13:05","14:05","14:35","15:05","15:35",
"16:05","16:35","17:35","18:05","18:35","19:05","19:35","20:05",
"21:05"]
and you get
passengers 90 total wait 1500 minutes - average 16.7
passengers 90 total wait 1860 minutes - average 20.7
Extra time waited 4.0 minutes