【问题标题】:Dashboard conception using python/pandas使用 python/pandas 的仪表板概念
【发布时间】:2021-09-28 03:40:22
【问题描述】:

我必须开发一个仪表板,其中包含来自多个 csv 文件的“可自定义”指标和数据。 这将使用 Django 开发。我首先寻找 Django 包,但没有找到任何有用的包。

但我不知道该怎么做。

我开始学习 pandas 库,它很酷,但我的问题之一是我必须按照模型格式化仪表板。

我的想法是在 python 模型中定义指标存储,并在该模型上循环以计算指标并生成仪表板。

例如,指标可以定义如下:

indicators = [
    {
        'id': 1,
        'type': 'recruitement',         # header in pivot table
        'label': 'Randomized all, N',   # indicator label
        'value': ['number',],           # indicator expected result format
        'filter': None,                 # indicator filter to apply
        'source': 'crf_ran',            # indicator csv files source for calculating
    },
    {
        'id': 2,
        'type': 'recruitement',
        'label': 'Sex (Woman), %',
        'value': ['pourcentage',],
        'filter': 'sex == 2',
        'source': 'crf_ran',    
    },
    {
        'id': 3,
        'type': 'Follow up',
        'label': 'D7 visits: N performed (% performed/expected)',
        'value': ['number','pourcentage',],
        'filter': 'timing == 7',
        'source': 'crf_vis',    
    },
]

源数据 #1 (crf_ran.csv):

record_id,country,pat,sex,age,hiv
1,Ivory Coast,CIV-TR-001,2,51,'positive'
2,Ivory Coast,CIV-SM-002,1,33,'negative'
...

源数据 #2 (crf_vis.csv):

record_id,pat,timing,date
1,CIV-SM-001,7,15/01/2021
2,CIV-SM-001,14,21/01/2021
...

预期输出为 csv

'type',indicator','Total','Ivory Coast','South Africa'
'Recruitement','Randomized all, N',99,51,48
'Recruitement','Sex (Woman), %',72,70,74
'Follow up','D7 visits: N performed (% performed/expected)','10 (90)','6 (100)','3 (75)'
...

预期输出为 xls

Report date: 20/07/2021
                                           Total    Ivory Coast   South Africa
Recruitement
Randomized all, N                             99             51             48
Sex (Woman), %                                72             70             74
Follow up
D7 visits: N performed (% performed/expected) 10 (90)         6 (100)        3 (75)
...

但是使用 pandas 来计算我使用过的第二个指标 'Sex (Woman) %'

country_grp = df.groupby(['country'])
country_grp['sex'].value_counts(normalize=True)

并得到以下输出

country       sex
Ivory Coast   1      0.632653
              2      0.367347
South Africa  1      0.509804
              2      0.490196
Name: sex, dtype: float64

我也尝试像这样使用 pivot_table:

sex_filt = df['sex'] == 2
pivot_count = df[sex_filt].pivot_table(values="pat", index='sex', columns='country', aggfunc=len).rename(index={2:'Sex (Woman), %'})
pivot_count.to_csv('dashboard.csv', mode='a', header=False)

并在 csv 文件中得到以下结果:

"Sex (Woman), %",24,19

直到现在,我还没有找到如何继续编写可自定义仪表板的代码... 也许我打算用熊猫做这件事是错误的......

【问题讨论】:

    标签: python django pandas dashboard


    【解决方案1】:

    Checkout Plotly-Dash 它在下面使用 pandas 数据框来构建交互式、可自定义的仪表板。

    【讨论】:

    • 感谢您的回复,但我已经阅读了有关 dash 的内容,但它并不是我想要的
    猜你喜欢
    • 2018-08-11
    • 2012-03-30
    • 1970-01-01
    • 2020-02-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多