代码之家  ›  专栏  ›  技术社区  ›  RightmireM

Matplotlib/Pandas从Python dict/JSON生成特定的图形

  •  0
  • RightmireM  · 技术社区  · 8 年前

    总体安排 属于 蟒蛇 数据,但 数据可以是文本、字符串或其他Python对象 .

    我可以用XlsxWriter(见下文)实现这一点,但数据过载了(1400万行……不是开玩笑的。DNA数据)。是否可能/如何使用Matplotlib或PAndas(或更稳定的大数据)?

    细节: 它必须能够在 ,并根据数据是否“相同”(不考虑数字、文本或其他Python对象)做出视觉格式决定。

    细胞中的颜色 取决于项目是否在 {1:"A", 2:"A"} 相等的 (不是同一个对象)。 绿色 对于 True , 红色 对于 False . 例如: "A" == "A" (如前几句所述),或 (10/5) == (20/10) ["A", 1, <test object at 0x1052c9b70>] == ["A", 1, <test object at 0x1052c9b70>] 都是绿色的。

    显示在单元格中的文本只是对象的_ustr_uuu表示。

    例子。。。

    {
        1000:{
              "Sample1":{1:"A", 2:"A"}, 
              "Sample2":{1:"A", 2:"A"},
              "Sample3":{1:"A", 2:"A"},
              },
    
        1001:{
              "Sample1":{1:"A", 2:"A"}, 
              "Sample2":{1:"A", 2:"A"},
              "Sample3":{1:"A", 2:"A"}
              },
    
        1002:{
              "Sample1":{1:"C", 2:"A"}, 
              "Sample2":{1:"A", 2:"A"},
              "Sample3":{1:"A", 2:"A"}
              },
    
        (...)
    
        9999:{
              "Sample1":{1:"A", 2:"T"}, 
              "Sample2":{1:"A", 2:"A"},
              "Sample3":{1:"A", 2:"G"}
              },
    }
    

    Excel example

    1 回复  |  直到 8 年前
        1
  •  2
  •   ImportanceOfBeingErnest    8 年前

    在Jupyter笔记本中使用熊猫和样式表:

    json = {
        1000:{
              "Sample1":{1:"A", 2:"A"}, 
              "Sample2":{1:"A", 2:"A"},
              "Sample3":{1:"A", 2:"A"},
              },
        1001:{
              "Sample1":{1:"A", 2:"A"}, 
              "Sample2":{1:"A", 2:"A"},
              "Sample3":{1:"A", 2:"A"}
              },
        1002:{
              "Sample1":{1:"C", 2:"A"}, 
              "Sample2":{1:"A", 2:"A"},
              "Sample3":{1:"A", 2:"A"}
              },
        9999:{
              "Sample1":{1:"A", 2:"T"}, 
              "Sample2":{1:"A", 2:"A"},
              "Sample3":{1:"A", 2:"G"}
              },
    }
    
    import pandas as pd
    df = pd.DataFrame(json).transpose()
    df0 = df.applymap(lambda x: "{}/{}".format(x[1].__repr__(),x[2].__repr__()))
    df0
    
    df1 = df.applymap(lambda x: x[1])
    df2 = df.applymap(lambda x: x[2])
    
    booldf = df1 == df2
    c = lambda x : 'background-color: {}'.format(x)
    formatdf = booldf.applymap(lambda x: c("limegreen") if x else c("crimson"))
    
    df0.style.apply(lambda x: formatdf, axis=None)
    

    enter image description here