其他
Clumper库 | 其他数据分析
2021暑期 | 结构模型、Stata实证前沿、Python数据挖掘暑假工作坊
Clumper前期文章
连接语法
如果想将多个记录整理到一个记录中,有很多种实现方法。
Concat
如果想垂直方向将多个记录堆叠,可以使用concat
from clumper import Clumper
c1 = Clumper([{"a": 1}])
c2 = Clumper([{"a": 2}])
c3 = Clumper([{"a": 3}])
c1.concat(c2).collect()
[{'a': 1}, {'a': 2}]
#等同于c1.concat(c2).concat(c3).collect()
c1.concat(c2, c3).collect()
[{'a': 1}, {'a': 2}, {'a': 3}]
Joins
Joins类似于数学里的交集、并集的,大致有以下四种,
left join
左连接,以左为主,表示以table1为主,关联上table2的数据,结果显示table1的所有数据,然后table2显示的是和table1有交集部分的数据。
from clumper import Clumper
left = Clumper([
{"a": 1, "b": 4},
{"a": 2, "b": 6},
{"a": 3, "b": 8},
])
right = Clumper([
{"c": 9, "b": 4},
{"c": 8, "b": 5},
{"c": 7, "b": 6},
])
#根据b进行左右两表的合并
result = left.inner_join(right, mapping={"b": "b"})
result.collect()
[{'a': 1, 'b': 4, 'c': 9}, {'a': 2, 'b': 6, 'c': 7}]
inner join
内连接, 交集
from clumper import Clumper
left = Clumper([
{"a": 1, "b":4},
{"a": 2, "b":6},
{"a": 3, "b":8},
])
right = Clumper([
{"c": 9, "b":4},
{"c": 8, "b":5},
{"c": 7, "b":6},
])
result = left.inner_join(right, mapping={"b": "b"})
result.collect()
[{'a': 1, 'b': 4, 'c': 9}, {'a': 2, 'b': 6, 'c': 7}]
Nested Data
由于嵌套数据序列确实具有各种形状和大小,因此该库提供了各种方法来帮助您将数据重塑为不同的格式。本文档将演示这些方法的工作原理。
Explode
炸裂(展开)
from clumper import Clumper
data = [{'gender': '男',
'grade': [80, 99],
'name':['张三', '李四']}]
(Clumper(data)
.explode('name', 'grade')
.collect()
)
[{'gender': '男', 'grade': 80, 'name': '张三'},
{'gender': '男', 'grade': 99, 'name': '张三'},
{'gender': '男', 'grade': 80, 'name': '李四'},
{'gender': '男', 'grade': 99, 'name': '李四'}]
from clumper import Clumper
data = [{'gender': '男',
'grade': [80, 99],
'name':['张三', '李四']}]
#.explode('name', 'grade')略微有些区别
#请查看两者运行结果
(Clumper(data)
.explode(item='name', val='grade')
.collect()
)
[{'gender': '男', 'item': '张三', 'val': 80},
{'gender': '男', 'item': '张三', 'val': 99},
{'gender': '男', 'item': '李四', 'val': 80},
{'gender': '男', 'item': '李四', 'val': 99}]
Unpack
与explode类似
from clumper import Clumper
list_dicts = {
'a': 1,
'rows': [{'b': 2, 'c': 3}, {'b': 3}, {'b': 4}]
}
(Clumper(list_dicts)
.unpack('rows')
.collect()
)
[{'a': 1, 'b': 2, 'c': 3},
{'a': 1, 'b': 3},
{'a': 1, 'b': 4}]
Flatten keys
from clumper import Clumper
data = {
'feature_1': {'propery_1': 1, 'property_2': 2},
'feature_2': {'propery_1': 3, 'property_2': 4},
'feature_3': {'propery_1': 5, 'property_2': 6},
}
(Clumper(data, listify=False)
.flatten_keys()
.collect()
)
[{'propery_1': 1, 'property_2': 2, 'key': 'feature_1'},
{'propery_1': 3, 'property_2': 4, 'key': 'feature_2'},
{'propery_1': 5, 'property_2': 6, 'key': 'feature_3'}]
Summary Methods
Clumper支持常用的统计性方法,诸如mean、max、min等
mean
from clumper import Clumper
list_of_dicts = [
{'a': 7},
{'a': 2, 'b': 7},
{'a': 3, 'b': 6},
{'a': 2, 'b': 7}
]
Clumper(list_of_dicts).mean("a")
3.5
Clumper(list_of_dicts).mean("b")
6.666666666666667
count
统计记录数
from clumper import Clumper
list_of_dicts = [
{'a': 7},
{'a': 2, 'b': 7},
{'a': 3, 'b': 6},
{'a': 2, 'b': 7}
]
#含有a的一共有多少条记录
Clumper(list_of_dicts).count("a")
4
Clumper(list_of_dicts).count("b")
3
unique
汇总某字段不重样的值的种类,如[a, b, a, a]
,经过unique后,返回[a, b]
from clumper import Clumper
list_of_dicts = [{'a': 7},
{'a': 2, 'b': 7},
{'a': 3, 'b': 6},
{'a': 2, 'b': 7}]
Clumper(list_of_dicts).unique("a")
[2, 3, 7]
Clumper(list_of_dicts).unique("b")
[6, 7]
n_unique
统计某字段对应的值一种有多少种
from clumper import Clumper
list_of_dicts = [
{'a': 7},
{'a': 2, 'b': 7},
{'a': 3, 'b': 6},
{'a': 2, 'b': 7}
]
Clumper(list_of_dicts).n_unique("a")
3
Clumper(list_of_dicts).n_unique("b")
2
min
from clumper import Clumper
list_of_dicts = [{'a': 7},
{'a': 2, 'b': 7},
{'a': 3, 'b': 6},
{'a': 2, 'b': 7}]
Clumper(list_of_dicts).min("a")
2
Clumper(list_of_dicts).min("b")
6
max
from clumper import Clumper
list_of_dicts = [{'a': 7},
{'a': 2, 'b': 7},
{'a': 3, 'b': 6},
{'a': 2, 'b': 7}]
Clumper(list_of_dicts).max("a")
7
Clumper(list_of_dicts).max("b")
7