【发布时间】: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