Disclaimer: I've been an AT&T cell subscriber since 1999 when they were still called Cingular Wireless.
That said, you might think I'm biased, right? But which way?
Anyhow, T-Mobile was offering an opportunity to test drive their network. Basically, they send you an iPhone 5S in the mail, and you get to try it out for a week. Luckily, for the sake of science, my personal phone is also an iPhone 5S, but on the AT&T network.
The plan was fairly simple, I'd run Ookla's speed test app at a number of different locations that I commonly travel to. My daily commute takes me from the Far East Bay to downtown Oakland, and I also went to Berkeley for soccer practice. I was expecting to just eyeball it, and if the conclusion was, "Hmm, well, it's pretty close" I'd be tempted to switch from AT&T to T-mobile.
Then I discovered that the speedtest app will let you email a csv file containing all your test results, so of course I had to take advantage of that and put the results under further scrutiny.
So, I wrote up about 60 lines of throw away python code to evaluate the results. The way I graded the results was in three parts:
If one network was faster in both download and upload speeds, we'd call that a win. If one network won upload and the other download we'd call that mixed results.
The second criteria I looked at was simply average upload and download speeds across all the tests.
The third criteria was how many dead-zones with little to no network speed I found. I played around with the thresholds for what I considered to be a "dead-zone".
There are probably a lot more interesting things I could do with the data, and I may yet do so, as I'm only on day 4 of the test.
Here is the throwaway python code I used:
import csv import os with open('data' + os.sep + 'att.csv', 'rb') as a: a_data = csv.reader(a) att_data = [] for row in a_data: att_data.append(row) with open('data' + os.sep + 'tmobile.csv', 'rb') as t: t_data = csv.reader(t) tmobile_data = [] for row in t_data: tmobile_data.append(row) att_wins = 0 tmobile_wins = 0 mixed = 0 att_sum_dl = 0 tmobile_sum_dl = 0 att_sum_ul = 0 tmobile_sum_ul = 0 total_comparisons = 0 att_dead_zones = 0 tmobile_dead_zones = 0 both_dead_zones = 0 dl_dead_threshold = 1000 ul_dead_threshold = 500 for a_row in att_data: for t_row in tmobile_data: if a_row and t_row: # Ignore blank lines if a_row[0] == t_row[0] and a_row[0] != 'Date': # if times match exactly if int(a_row[4]) > int(t_row[4]) and int(a_row[5]) > int(t_row[5]): att_wins += 1 elif int(a_row[4]) < int(t_row[4]) and int(a_row[5]) < int(t_row[5]): tmobile_wins += 1 if int(a_row[4]) > int(t_row[4]) and int(a_row[5]) < int(t_row[5]): mixed += 1 if int(a_row[4]) < dl_dead_threshold or int(a_row[5]) < ul_dead_threshold: if int(t_row[4]) < dl_dead_threshold or int(t_row[5]) < ul_dead_threshold: both_dead_zones += 1 else: att_dead_zones += 1 if int(t_row[4]) < dl_dead_threshold or int(t_row[5]) < ul_dead_threshold: if int(a_row[4]) < dl_dead_threshold or int(a_row[5]) < ul_dead_threshold: pass else: tmobile_dead_zones += 1 att_sum_dl += int(a_row[4]) tmobile_sum_dl += int(t_row[4]) att_sum_ul += int(a_row[5]) tmobile_sum_ul += int(t_row[5]) total_comparisons += 1 print 'AT&T wins: ' + str(att_wins) print 'T-mobile wins: ' + str(tmobile_wins) print 'mixed results: ' + str(mixed) print 'AT&T average download: ' + str(att_sum_dl // total_comparisons) print 'T-mobile average download: ' + str(tmobile_sum_dl // total_comparisons) print 'AT&T average upload: ' + str(att_sum_ul // total_comparisons) print 'T-mobile average upload ' + str(tmobile_sum_ul // total_comparisons) print 'AT&T deadzones: ' + str(att_dead_zones) print 'T-mobile deadzones: ' + str(tmobile_dead_zones) print 'both deadzones: ' + str(both_dead_zones)And here are the results:
AT&T wins: 13As you can see, it was pretty much a slaughter.
T-mobile wins: 39
mixed results: 22
AT&T average download: 14926
T-mobile average download: 17747
AT&T average upload: 6495
T-mobile average upload 10466
AT&T deadzones: 7
T-mobile deadzones: 6
both deadzones: 4
One thing to note was that Berkeley seemed to have better AT&T coverage than T-mobile.
Also, the only place along the BART line from Dublin/Pleasanton to 12th Street Oakland that AT&T wins is at the Oakland Coliseum stop.