python - Python Sunburst Chart - 将数据框转换为嵌套列表格式
问题描述
我已经按照下面提到的链接在 Python 中创建旭日图: 如何在 R 或 Python 中制作旭日图?
附上笔记本供参考。
但是,创建图表的函数需要特定格式的数据(按级别嵌套的列表)。例子:
data = [
('/', 100, [
('home', 70, [
('Images', 40, []),
('Videos', 20, []),
('Documents', 5, []),
]),
('usr', 15, [
('src', 6, [
('linux-headers', 4, []),
('virtualbox', 1, []),
]),
('lib', 4, []),
('share', 2, []),
('bin', 1, []),
('local', 1, []),
('include', 1, []),
]),
]),
]
sunburst(data)
对于同一个示例,如果有人在以节点层次结构作为级别的 excel 文件中给我一个决策树输出,有没有办法将此 excel 输出(在下面找到)转换为上面的列表,以便我可以使用给定的函数创建 Sunburst。
Excel 输出:
Level0,Level1,Level2,Level3,Volume
/,,,,15
/,home,Images,,40
/,home,Videos,,20
/,home,Documents,,5
/,home,,,5
/,usr,src,linux-headers,4
/,usr,src,virtualbox,1
/,usr,src,,1
/,usr,lib,,4
/,usr,share,,2
/,usr,bin,,1
/,usr,local,,1
/,usr,include,,1
解决方案
Nam Nguyen 的回答非常好,但在特定级别只有一条记录的情况下有一个小错误,然后此语句len(dataframe) == 1
变为True
并且特定级别的一个值不包含在结果中。我已经更新了他的答案以计算这种情况:
def df_to_nested(dataframe, _groupby, level, col):
"""
- dataframe: source data
- _groupby: groupby columns
- level: start from this level (0 by default)
- col: value to aggregate
"""
result = []
if len(dataframe) == 1:
try:
df = dataframe.groupby(_groupby[level])
for key, val in df: # Iterate through groups
result.append(tuple([key, val[col].sum(), []]))
except Exception: # Reached max depth
pass
else:
df = dataframe.groupby(_groupby[level])
level += 1 # Level0 -> Level1 (increase level)
for key, val in df: # Iterate through groups
result.append(tuple([key, val[col].sum(), df_to_nested(val, _groupby, level, col)]))
level -= 1 # Level1 -> Level0 (decrease level)
return result
推荐阅读
- sql - 在 db2 中使用多个“WHEN MATCHED”进行更新和插入合并
- asp.net - 从本地网络上的其他设备访问本地网站
- javascript - “angular2-image-upload”npm 库 CORS 错误
- c# - 使用带有 Coldfusion 和 .NET/BouncyCastle 的 Blowfish 加密和解密数据
- debugging - 暂停应用然后F10变成一步一步调试代码VS-2017
- python - 如何根据其他列中的数据读取 csv?
- r - R:围绕兴趣点生成正态分布的空间坐标
- django - 基于用户代理的 Django 中间件重定向
- php - 如何通过 hookPaymentReturn 将 POST 数据从 postProcess 填充到 smarty tpl
- node.js - UnCSS for Node.js 10 - Canvas 缺少依赖项