1

I'm doing a loop to output and compare the gof_train and gof_test:

pp.pprint(gof_train)
pp.pprint(gof_test)

This would give me results like this (in an IPython Notebook):

# gof_train
{'Chi_square': 2835.3674597856002,
 'K_S': 0.05029482196934898,
 'MSE': 7.3741561732037447e-08,
 'RMSE / Mean': 0.46193590138914759,
 'RMSE / Mode': 0.050926962892235687,
 'R_square': 0.88494738072721291}
# gof_test
{'Chi_square': 708.90289308802267,
 'K_S': 0.05029482196934898,
 'MSE': 7.3741561732037447e-08,
 'RMSE / Mean': 0.46193590138914759,
 'RMSE / Mode': 0.050926962892235687,
 'R_square': 0.88494738072721291}

And they are very hard to look at. I'm wondering if there is any way of beautifying the output?

Specifically, I want to shorten the numbers, and make the attributes of these 2 dicts compare with each other. Something like this:

'Chi_square': 2835.3674, 'Chi_square': 708.902,
'K_S': 0.050294,         'K_S': 0.0502,
'R_square': 0.8849,      'R_square': 0.8849

What I've thought

  1. For numerical output, I think I can try %precision, http://ipython.org/ipython-doc/2/api/generated/IPython.core.magics.basic.html#IPython.core.magics.basic.BasicMagics.precision

  2. But I don't know any good way of comparing the results. It would be interesting if I can set the css of gof_train and gof_test float: left, but I don't think that's possible.

Thomas K
  • 39,200
  • 7
  • 84
  • 86
ZK Zhao
  • 19,885
  • 47
  • 132
  • 206

2 Answers2

4

Just use pandas:

In [1]: import pandas as pd

Change the number of decimals:

In [2]: pd.options.display.float_format = '{:.3f}'.format

Make a data frame:

In [3]: df = pd.DataFrame({'gof_test': gof_test, 'gof_train': gof_train})

and display:

In  [4]:  df
Out [4]:  

enter image description here

Another option would be the use of the engineering prefix:

In  [5]:  pd.set_eng_float_format(use_eng_prefix=True)
          df
Out [5]: 

enter image description here

In  [6]: pd.set_eng_float_format()
         df
Out [6]: 

enter image description here

Mike Müller
  • 82,630
  • 20
  • 166
  • 161
0

Indeed you cannot affect the display of the Python output with CSS, but you can give your results to a formatting function that will take care of making it "beautiful". In your case, you could use something like this:

def compare_dicts(dict1, dict2, col_width):
    print('{' + ' ' * (col_width-1) + '{')
    for k1, v1 in dict1.items():
        col1 = u"  %s: %.3f," % (k1, v1)
        padding = u' ' * (col_width - len(col1))
        line = col1 + padding
        if k1 in dict2:
            line = u"%s  %s: %.3f," % (line, k1, dict2[k1])
        print(line)
    print('}' + ' ' * (col_width-1) + '}')

dict1 = {
    'foo': 0.43657,
    'foobar': 1e6,
    'bar': 0,
}


dict2 = {
    'bar': 1,
    'foo': 0.43657,
}

compare_dicts(dict1, dict2, 25)

This gives:

{                        {
  foobar: 1000000.000,   
  foo: 0.437,              foo: 0.437,
  bar: 0.000,              bar: 1.000,
}                        }
Djizeus
  • 4,161
  • 1
  • 24
  • 42