Hi everyone,
I’ve been on Stack Overflow several times today and I have reached a solution, although my understanding of what is happening is still no better 
There was a logic error in the Python script. When I posted my question this was the code:
import serial
gps = serial.Serial('com5', baudrate=9600)
while True:
ser_bytes = gps.readline()
decoded_bytes = ser_bytes.decode("utf-8")
data = decoded_bytes.split(",")
if data[0] == '$GNRMC':
lat_nmea = (data[3],data[4])
lat_degrees = float(lat_nmea[0][0:2])
if lat_nmea[1] == 'S':
lat_degrees = -lat_degrees
lat_minutes = float(lat_nmea[0][2:])
lat = lat_degrees + (lat_minutes/60)
lon_nmea = (data[5],data[6])
lon_degrees = float(lon_nmea[0][:3])
if lon_nmea[1] == 'W':
lon_degrees = -lon_degrees
lon_minutes = float(lon_nmea[0][3:])
lon = lon_degrees + (lon_minutes/60)
print("%0.8f" %lat, "%0.8f" %lon)
Expected output, i.e. what I could see in u-center data view (Yes John74406 the black rectangle at the top right):
-12.63900217 111.85371867
Actual output:
-11.36120217 111.85371867
@James This was the GGA message (seems to me that neither the latitude or longitude match any of the outputs. Is this normal?):
$GNGGA,130038.00,1238.34708,S,11129.52477,E,1,12,0.52,11.0,M,16.6,M,*64
@Gramo The fix type had a value of 1 in the GGA message. I’m a novice but I believe that is a GPS fix without correction data? Maybe you could help me understand the significance 
after help from Stack Overflow I moved the if statements to the end of the code:
import serial
gps = serial.Serial('com5', baudrate=9600)
while True:
ser_bytes = gps.readline()
decoded_bytes = ser_bytes.decode("utf-8")
data = decoded_bytes.split(",")
if data[0] == '$GNRMC':
lat_nmea = (data[3],data[4])
lat_degrees = float(lat_nmea[0][0:2])
lat_minutes = float(lat_nmea[0][2:])
lat = lat_degrees + (lat_minutes/60)
lon_nmea = (data[5],data[6])
lon_degrees = float(lon_nmea[0][:3])
lon_minutes = float(lon_nmea[0][3:])
lon = lon_degrees + (lon_minutes/60)
if lat_nmea[1] == 'S':
lat = -lat
if lon_nmea[1] == 'W':
lon = -lon
print("%0.8f" %lat, "%0.8f" %lon)
This prints the latitude and longitude as expected (accurate).
All is well that ends well, but I’d be interested to hear your thoughts. I’m going to try and learn how to apply correction data next so I would appreciate any deeper understanding of what’s happening. Thanks! 