Data 8 学习笔记(二)
Data 8 学习笔记(二)
对Table的整列使用函数 Apply function to a column
datascience库的Table支持对其中一列进行运算,具体的规则是:
1 | square = Table.column("")**2 |
这个本质上是从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
函数还有两个参数,values
和collect
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会自动提取同时存在于两个表格的元素并放到一个新的表格里面。