Beispiel #1
0
def test_multi_index_df_to_jinja_table():
    # Create multi-index table
    idx = np.array([['super1', 'super1', 'super1', 'super1', 'super2', 'super2', 'super2'],
                    ['a', 'a', 'b', 'b', 'c', 'c', 'c'],
                    ['aa', 'aa', 'ba', 'bb', 'ca', 'cb', 'cc']])
    idx_tuples = list(zip(*idx))
    multi_index = pd.MultiIndex.from_tuples(idx_tuples, names=['super-level', 'a-level', 'aa-level'])
    columns = ['This is an incredibly long column name', 'column2', 'column3', 'column4', 'column5']
    data = pd.DataFrame(np.random.rand(7, 5) * 2 - 1, index=multi_index, columns=columns)
    fmt_expand_multi_index = tf.FmtExpandMultiIndex(operator=tf.OP_SUM, bold=True,
                                                    hline_color=colors.DARK_BLUE)
    fmt_nDecimal = tf.FmtDecimals(n=2)
    fmt_align_cells = tf.FmtAlignCellContents(alignment='right')
    fmt_heatmap_1 = tf.FmtHeatmap(columns=['column2', 'column3'], rows=['aa', 'ac'], threshold=0., axis=0)
    fmt_heatmap_2 = tf.FmtHeatmap(columns=['column4', 'column5'], rows=['ca', 'cc'], threshold=0.3,
                                  min_color=colors.PURPLE, max_color=colors.ORANGE)
    fmt_stripes_bg = tf.FmtStripeBackground(first_color=colors.LIGHT_GREY)
    fmt_rotate_header = tf.FmtHeader(fixed_width='500px', top_padding='200px')

    formatters = [fmt_expand_multi_index, fmt_align_cells, fmt_stripes_bg, fmt_heatmap_1, fmt_heatmap_2,
                  fmt_rotate_header, fmt_nDecimal]

    # Create table
    table = Block(data, formatters=formatters)
    filename = 'Multi_index_table.pdf'
    table.save(filename)
    # And clean up file afterwards
    os.remove(filename)
Beispiel #2
0
def test_formatters_with_operator_on_df_with_nans_replaces():
    df = pd.DataFrame(np.arange(8, dtype=float).reshape(2, 4), index=['a', 'b'], columns=['aa', 'bb', 'cc', 'dd'])
    df.iloc[0, 0] = np.nan
    fmt_nan_replace = tf.FmtReplaceNaN()
    fmt_sum_rows = tf.FmtAppendTotalsRow()
    fmt_sum_columns = tf.FmtAppendTotalsColumn()

    b_no_replace = Block(df, formatters=[fmt_sum_rows, fmt_sum_columns], use_default_formatters=False)

    b_replace = Block(df, formatters=[fmt_nan_replace, fmt_sum_rows, fmt_sum_columns],
                      use_default_formatters=False)

    assert_series_equal(b_replace.df.iloc[:, -1],  b_no_replace.df.iloc[:, -1], check_dtype=False)
    assert_series_equal(b_replace.df.iloc[-1, :],  b_no_replace.df.iloc[-1, :], check_dtype=False)
Beispiel #3
0
def test_column_multi_index_df_to_jinja_table():
    # Create column multi-index table
    df = pd.DataFrame(np.arange(12, dtype=float).reshape(3, 4), index=['a', 'b', 'c'], columns=['aa', 'bb', 'cc', 'aa'])
    df['grouping'] = 'g'
    df = df.reset_index()
    df = df.groupby(['grouping', 'index']).sum().unstack()
    # Create formatters
    row_css = ['text-align:center', 'text-align:right']
    index_col_css = ['background-color: #00FFFF'] * 2
    fmt_mi_header = tf.FmtColumnMultiIndexRows(row_css=row_css, index_col_css=index_col_css)
    # Create table
    table = Block(df, formatters=[fmt_mi_header])
    filename = 'Column_multi_index_table.pdf'
    table.save(filename)
    # And clean up file afterwards
    os.remove(filename)
Beispiel #4
0
def test_df_to_jinja_table_add_extra_formatters():
    fmt_heatmap = blformat.FmtHeatmap(threshold=0., axis=0)
    fmt_add_totals_mean = blformat.FmtAppendTotalsRow(row_name='Sum', operator=blformat.OP_SUM, bold=True)
    fmt_fontsize_20 = blformat.FmtFontsize(fontsize=20)

    formatters = [fmt_fontsize_20, fmt_heatmap, fmt_add_totals_mean]
    return Block(FLAT_DATA, formatters=formatters, use_default_formatters=False)
    def get_weights_html(self):
        fmt_pct = tf.FmtPercent(1, apply_to_header_and_index=False)
        fmt_align = tf.FmtAlignTable("left")
        fmt_background = tf.FmtStripeBackground(
            first_color=tf.colors.LIGHT_GREY,
            second_color=tf.colors.WHITE,
            header_color=tf.colors.BLACK)

        targetweights = Block(self.InputList[3],
                              formatters=[fmt_pct, fmt_align, fmt_background],
                              use_default_formatters=False)._repr_html_()
        targetweights = {'targetweights_table': targetweights}
        effectiveweights = Block(
            self.InputList[4],
            formatters=[fmt_pct, fmt_align, fmt_background],
            use_default_formatters=False)._repr_html_()
        effectiveweights = {'effectiveweights_table': effectiveweights}
        return targetweights, effectiveweights
Beispiel #6
0
def test_multi_index_df_to_jinja_table():
    # Create multi-index table
    idx = np.array([['super1', 'super1', 'super1', 'super1', 'super2', 'super2', 'super2'],
                    ['a', 'a', 'b', 'b', 'c', 'c', 'c'],
                    ['aa', 'ab', 'ba', 'bb', 'ca', 'cb', 'cc']])
    idx_tuples = list(zip(*idx))
    multi_index = pd.MultiIndex.from_tuples(idx_tuples, names=['super-level', 'a-level', 'aa-level'])
    columns = ['This is an incredibly long column name', 'column2', 'column3', 'column4', 'column5']
    data = pd.DataFrame(TABLE_DATA, index=multi_index, columns=columns)
    fmt_expand_multi_index = blformat.FmtExpandMultiIndex(operator=blformat.OP_SUM, bold=True,
                                                          hline_color=colors.DARK_BLUE)
    fmt_ndecimal = blformat.FmtDecimals(n=2)
    fmt_align_cells = blformat.FmtAlignCellContents(alignment='right')
    fmt_heatmap_1 = blformat.FmtHeatmap(columns=['column2', 'column3'], rows=['aa', 'ab', 'ac'], threshold=0., axis=0)
    fmt_heatmap_2 = blformat.FmtHeatmap(columns=['column4', 'column5'], rows=['ca', 'cb', 'cc'], threshold=0.3,
                                        min_color=colors.PURPLE, max_color=colors.ORANGE)
    fmt_rotate_header = blformat.FmtHeader(fixed_width='500px', top_padding='200px')

    formatters = [fmt_expand_multi_index, fmt_align_cells,  fmt_heatmap_1, fmt_heatmap_2,
                  fmt_rotate_header, fmt_ndecimal]

    return Block(data, formatters=formatters, use_default_formatters=False)
    def get_performance_stats_html(self):

        pct_rows = [('P&L', 'Total return'), ('P&L', 'Annual return'),
                    ('P&L', 'Annual return (asset mode)'),
                    ('Risk-adjusted return based on Drawdown',
                     'Max percentage drawdown')]
        dec_rows = [
            ('P&L', 'Starting cash'),
            ('P&L', 'End value'),
            ('Risk-adjusted return based on Drawdown', 'Max money drawdown'),
            # Distribution
            ('Distribution moments', 'Returns volatility'),
            ('Distribution moments', 'Returns skewness'),
            ('Distribution moments', 'Returns kurtosis'),
            # Risk-adjusted return based on Volatility
            ('Risk-adjusted return based on Volatility', 'Treynor ratio'),
            ('Risk-adjusted return based on Volatility', 'Sharpe ratio'),
            ('Risk-adjusted return based on Volatility', 'Information ratio'),
            # Risk-adjusted return based on Value at Risk
            ('Risk-adjusted return based on Value at Risk', 'VaR'),
            ('Risk-adjusted return based on Value at Risk',
             'Expected Shortfall'),
            ('Risk-adjusted return based on Value at Risk', 'Excess var'),
            ('Risk-adjusted return based on Value at Risk',
             'Conditional sharpe ratio'),
            # Risk-adjusted return based on Lower Partial Moments
            ('Risk-adjusted return based on Lower Partial Moments',
             'Omega ratio'),
            ('Risk-adjusted return based on Lower Partial Moments',
             'Sortino ratio'),
            ('Risk-adjusted return based on Lower Partial Moments',
             'Kappa three ratio'),
            ('Risk-adjusted return based on Lower Partial Moments',
             'Gain loss ratio'),
            ('Risk-adjusted return based on Lower Partial Moments',
             'Upside potential ratio'),
            # Risk-adjusted return based on Drawdown
            ('Risk-adjusted return based on Drawdown', 'Calmar ratio')
        ]

        fmt_pct = tf.FmtPercent(1,
                                rows=pct_rows,
                                apply_to_header_and_index=False)
        fmt_dec = tf.FmtDecimals(2,
                                 rows=dec_rows,
                                 apply_to_header_and_index=False)
        fmt_align = tf.FmtAlignTable("left")
        fmt_background = tf.FmtStripeBackground(
            first_color=tf.colors.LIGHT_GREY,
            second_color=tf.colors.WHITE,
            header_color=tf.colors.BLACK)
        fmt_multiindex = tf.FmtExpandMultiIndex(operator=tf.OP_NONE)

        perf_data = Block(self.InputList[2],
                          formatters=[
                              fmt_multiindex, fmt_pct, fmt_dec, fmt_align,
                              fmt_background
                          ],
                          use_default_formatters=False)._repr_html_()
        perf_data = {'performance_table': perf_data}
        return perf_data
Beispiel #8
0
def test_df_to_jinja_table_extra_formatters_only():
    return Block(FLAT_DATA,
                 formatters=[blformat.FmtHeatmap(threshold=0., axis=0)],
                 use_default_formatters=False)
Beispiel #9
0
def test_df_to_jinja_table_default():
    return Block(FLAT_DATA, use_default_formatters=False)