Data 8 学习笔记(二)

对Table的整列使用函数 Apply function to a column

datascience库的Table支持对其中一列进行运算,具体的规则是:

1
2
square = Table.column("")**2
operation = Table.column("column1") + Table.column("column2")

这个本质上是从Table里拿一列并转换成np array,然后由np array来支持运算,np array支持的运算很多样:

  • 算术运算(* + = / % ** //)
  • 比较运算(逐元素) > < >= <= ==
  • np聚合函数np.sum, np.mean, np.max, np.min, np.std, np.count_nonzero
  • np向量函数运算np.sqrt, np.log, np.exp, np.sin, np.round
  • 数组操作.reshape(),.flatten(), .astype(type), .copy(), .tolist()
  • 索引切片

当然,我们会发现这样并没有办法覆盖一些比较复杂的自定义函数运算,所以说datascience提供了一种更优雅的方式:Table.apply()

Table.apply(function, column_name)
第一个参数放入函数名,第二个参数放入作为函数参数的列的名称(如果函数需要的参数大于一个,可以把列名称放进一个list里面):

def custom_func(x, y):
return x + y

new_table = table.with_column('new_col', table.apply(custom_func, ['col1', 'col2']))

custome_func也可以用一个lambda函数来代替。


数据分类和组合 Classifying by one variable

单数据

有时候我们需要根据单数据来分类,例如一个班级成绩表里可能有名字,成绩等和小组名称三列,我们希望把优秀成绩的和其他成绩的同学分类组合。
datascience里的Table.group()可以支持这一操作。向里面传入需要分类的列名称就可以得到每个类别的频数。

Table.group("成绩等级"):

成绩等级 人数
优秀 15
25
及格 10

但是有些时候我们希望对每个类别的数据进行操作,这时候就可以传入第二个参数来表示我们需要进行的操作:

Table.group("成绩等级", lambda y : y/50):

成绩等级 频率
优秀 0.3
0.5
及格 0.2
传入的参数可以是自定义函数,也可以是lambda函数或者其他内置函数

多数据

有时我们需要把不同列的数据综合作为分组依据,比如把成绩和小组名称作为变量分组,group同样支持多数据组合。

Table.group(["成绩等级", "小组名称"])

成绩等级 小组名称 人数
优秀 第一组 5
优秀 第二组 8
优秀 第三组 2
第一组 10
第二组 9
第三组 6
及格 第二组 7
及格 第二组 3
只需要把分组的列名称放进一个list里作为第一个参数即可。

数据透视表 Pivot table

pivot函数可以帮我们更好地可视化双变量的数据:

Table.pivot("成绩等级", "小组名称")

成绩等级 第一组 第二组 第三组
优秀 5 8 2
10 9 6
及格 7 3 0

只需要在前两个参数填入作为变量的两列名称,pivot便会自动统计频数并放入新的Table

特别的,pivot函数还有两个参数,valuescollect

  • values=后面填入需要统计的列名称,默认为null,也就是统计频数
  • collect=后面填入需要对数据进行的操作,必须是np array支持的操作,例如np.sum, np.mean

于是我们可以求每个组的各个成绩等级的分数的平均数:

Table.pivot("成绩等级", "小组名称", values="分数", collect=np.mean)

成绩等级 第一组 第二组 第三组
优秀 91 85 88
75 77 72
及格 0 65 66

把不同的表格合并起来 Joining tables by columns

有时对于两个表格,我们希望把同时存在于两个表格的数据放到一个表格里,这时候我们可以使用join函数。

基础语法是table1.join(table1_column_for_joining, table2, table2_column_for_joining),datascience会自动提取同时存在于两个表格的元素并放到一个新的表格里面。


Reference

Data 8 Text book: Inferential Thinking chapter 8