Пример #1
0
def get_indicator_set(comp, indicator_list):
    return_set = {}
    obj_consolidated = r_full.get("{}_A_CONSOLIDATED".format(comp))
    obj_standalone = r_full.get("{}_A_STANDALONE".format(comp))

    if not obj_consolidated and not obj_standalone:
        print("Company {} not found in the database.".format(comp))
        return return_set

    if obj_consolidated:
        df_c = pd.read_json(obj_consolidated)
    if obj_standalone:
        df_s = pd.read_json(obj_standalone)

    screenerFailed = False
    try:
        screener = Screener(comp)
        indicator_set_consolidated = {}
        indicator_set_standalone = {}

        # get PE and PBV from screener
        pe = screener.get_pe()
        pe_standalone = screener.get_pe(standalone=True)

        indicator_set_standalone.update({"PE": pe_standalone})
        indicator_set_consolidated.update({"PE": pe})

        bv = screener.get_book_value()
        bv_standalone = screener.get_book_value(standalone=True)

        current_price = screener.get_current_price()

        pbv = np.nan
        pbv_standalone = np.nan
        if bv:
            pbv = current_price / bv

        if bv_standalone:
            pbv_standalone = current_price / bv_standalone

        indicator_set_standalone.update({"PBV": pbv_standalone})
        indicator_set_consolidated.update({"PBV": pbv})

    except:
        print("Error while getting data from screener")
        traceback.print_exc(file=sys.stdout)
        screenerFailed = True

    other_indicators = indicator_list

    if screenerFailed:
        other_indicators += ["PE", "PBV"]

    for ind in other_indicators:
        try:
            if not df_c.empty:
                result_c = df_c[ind].loc[df_c[ind].last_valid_index()]
            else:
                result_c = np.nan

            indicator_set_consolidated.update({ind: result_c})
        except:
            indicator_set_consolidated.update({ind: np.nan})

        try:
            if not df_s.empty:
                result_s = df_s[ind].loc[df_s[ind].last_valid_index()]
            else:
                result_s = np.nan
            indicator_set_standalone.update({ind: result_s})
        except:
            indicator_set_standalone.update({ind: np.nan})

    return_set.update(
        {"company": comp, "standalone": indicator_set_standalone, "consolidated": indicator_set_consolidated}
    )
    return return_set
Пример #2
0
def get_data(company, indicator, get_quarterly=False):
    print("Company : {}, Indicator : {}".format(company, indicator))
    if not get_quarterly:
        df_standalone_full = pd.read_json(r_full.get(company + "_A_STANDALONE"))
        df_consolidated_full = pd.read_json(r_full.get(company + "_A_CONSOLIDATED"))
    else:
        df_standalone_full = pd.read_json(r_full.get(company + "_Q_STANDALONE"))
        df_consolidated_full = pd.read_json(r_full.get(company + "_Q_CONSOLIDATED"))
    indicatorList = []

    if isinstance(indicator, str):
        indicatorList.append(indicator)
    else:
        indicatorList = indicator

    seriesStandalone = []
    seriesConsolidated = []

    for indicator in indicatorList:
        try:
            df_standalone = df_standalone_full[indicator].dropna()
            df_consolidated = df_consolidated_full[indicator].dropna()
            if indicator == "PE":
                pe_standalone = None
                pe_consolidated = None
                screener = None
                try:
                    screener = Screener(company)
                except:
                    print("Error while initializing screener")

                if screener:
                    try:
                        pe_standalone = screener.get_pe(standalone=True)
                    except:
                        print("Error while getting standalone PE from screener")

                    try:
                        pe_consolidated = screener.get_pe()
                    except:
                        print("Error while getting consolidated PE from screener")

                if pe_standalone:
                    new_df_standalone = pd.Series([pe_standalone], index=[datetime.datetime.now().date()])
                    df_standalone = df_standalone.append(new_df_standalone)

                if pe_consolidated:
                    new_df_consolidated = pd.Series([pe_consolidated], index=[datetime.datetime.now().date()])
                    df_consolidated = df_consolidated.append(new_df_consolidated)

            seriesStandalone.append(
                {
                    "Metric": indicator,
                    "Index": df_standalone.index.tolist(),
                    "Data": df_standalone.fillna(0).tolist(),
                    "PctChange1Y": getPercentChange(df_standalone),
                    "PctChange5Y": getPercentChange(df_standalone, step=5),
                    "Mean": getMean(df_standalone),
                    "Success": "True",
                    "Message": "",
                    "Mean_5_YR": getMean(df_standalone, tail=5),
                }
            )
            seriesConsolidated.append(
                {
                    "Metric": indicator,
                    "Index": df_consolidated.index.tolist(),
                    "Data": df_consolidated.fillna(0).tolist(),
                    "PctChange1Y": getPercentChange(df_consolidated),
                    "PctChange5Y": getPercentChange(df_consolidated, step=5),
                    "Mean": getMean(df_consolidated),
                    "Mean_5_YR": getMean(df_consolidated, tail=5),
                    "Success": "True",
                    "Message": "",
                }
            )
        except:
            seriesStandalone.append(
                {"Metric": indicator, "Success": "False", "Message": "Error while getting indicator : " + indicator}
            )
            seriesConsolidated.append(
                {"Metric": indicator, "Success": "False", "Message": "Error while getting indicator : " + indicator}
            )

    my_dict = {}
    my_dict.update({"Company": "{}".format(company)})
    my_dict.update({"Standalone": seriesStandalone})
    my_dict.update({"Consolidated": seriesConsolidated})
    return my_dict