It's nice to apply some very basic linear algebra from time to time.
Yesterday I recorded the slightly squished and rotated IQ constellation from the output of a vector modulator.
Took the points, used a least squares approach to determine the transformation matrix.
Then used singular matrix decomposition and eigen-decomposition to determine the main axes of squishing.
Numpy and Scipy are bliss.