class_docstr: Convert evaluate result json to DataFrame for report generator,
  and analysis model robustness according to linguistic classification.
  
  Example::
  
      {
          "model_name": "BERT",
          "dataset_name": "medical data",
          "transformation": {
              "Case": {
                  "ori_precision": 0.70,
                  "trans_precision": 0.65,
                  "ori_f1": 0.63,
                  "trans_f1": 0.60,
                  "size": 5000,
              },
              "Ocr": {
                  "ori_precision": 0.72,
                  "trans_precision": 0.43,
                  "ori_f1": 0.62,
                  "trans_f1": 0.41,
                  "size": 5000,
              }
          },
          "subpopulation": {
              "LengthLengthSubPopulation-0.0-0.1": {
                  "trans_precision": 0.68,
                  "trans_f1": 0.63,
                  "size": 500
              }
          },
          "attack": {
              "Bert-Attack": {
                  "ori_precision": 0.72,
                  "trans_precision": 0.43,
                  "ori_f1": 0.62,
                  "trans_f1": 0.41,
                  "size": 400,
              }
          }
      }
docstr: Parsing evaluate json and convert to bar chart input format.
  
  :param dict evaluate_json: evaluate result of specific model.
  :return: pandas.DataFrame, list[ReportColumn]
docstr_tok: ["Parsing","evaluate","json","and","convert","to","bar","chart","input","format",".",":","param","dict","evaluate_json",":","evaluate","result","of","specific","model",".",":","return",":","pandas.DataFrame",",","list","[","ReportColumn","]"]
code: def json_to_bar_chart(evaluate_json):
      r"""
      Parsing evaluate json and convert to bar chart input format.
  
      :param dict evaluate_json: evaluate result of specific model.
      :return: pandas.DataFrame, list[ReportColumn]
  
      """
      bar_json_list = []
  
      for generate_type in [
          "transformation",
          "subpopulation",
          "attack",
      ]:
          generate_methods = evaluate_json.get(generate_type, {})
          if generate_methods:
              for method in generate_methods:
                  bar_json = OrderedDict(
                      {
                          "generate_type": generate_type,
                          "generate_method": method,
                      }
                  )
                  metrics = {
                      (k, v)
                      for k, v in generate_methods[method].items()
                      if k != "size"
                  }
                  bar_json.update(metrics)
  
                  bar_json["size"] = generate_methods[method].get(
                      "size", 0
                  )
                  bar_json_list.append(bar_json)
  
      if bar_json_list is []:
          return None, None
  
      df = pd.DataFrame.from_dict(bar_json_list, orient="columns")
  
      cols = [
          ScoreColumn(col, 0, 1, is_0_to_1=True)
          for col in df
          if col not in ["generate_method", "generate_type", "size"]
      ] + [NumericColumn("Size")]
      df.columns = range(len(df.columns))
  
      return df, cols
  
imports: import pandas
  import numpy
  from functools import reduce
  from copy import deepcopy
  from collections import OrderedDict
  from ...common.utils import logger
label_desc: Use image node_id 1 for calling the Analyzer obj's underlying member method code with example usage: obj.json_to_bar_chart(evaluate_json) and returns: df,  cols, None,  None