利用Python进行数据分析
其实学习工作中碰到的数据分析许多多是sql直接搞定了。但是sql的灵活性还是不弱真正的编程语言灵活,其科学计算方法也显得单薄,远不如Python的科学计算包丰富。
比如之前在特征集中一般会有前一天、前两天、前三天的三列,但是如果我们需要计算这三列的方差什么的就不好算了。有些数据库是支持的比如postgrep。但是如果再要求一个中位数。这个就不好弄了。但是Python的科学计算包可以轻松搞定。同时画图也非常方便。
Numpy
其实就是个N 维数组容器 同时提供了矩阵运算
索引和切片
可以指定索引,默认就是类似其他语言那种从零开始的数字索引
其他
arange/xrange/range
- range是一个Python的内建函数,提供范围和步长作为参数,返回一个list
- arange是Numpy的函数,参数同上,但是返回一个以为一维数组
- xrange返回的是一个list生成器
pandas
切片
列
- 通过索引:df.col1或者df[‘col1’],如果是多列应当是列表的形式出现df[[‘col1’,’col2’]]
行
- 通过索引名 df
筛选条件
分组
groupby 返回一个groupby对象 其实可以简单理解为一个含有分组信息的dataFrame,这意味着
df.groupby()之后可以继续切片.df.groupby([‘dim1’,’dim2’])[[‘col1’,’col2’]]
从上面也可以看出,多维度分组,分组后只查看指定列的写法。
当然也可以使用函数进行分组,比如sql中常写的 if(var == 1,’是’,’否’),这里换成lambda表达式即可
其实分组列本质要求是一个和源数据列等长的Serial,如果使用源df中的列,直接提供列名即可;也可以自定义个以为数组用来分组。
特别注意:使用字符串列名作分组键,前面曾提到过可以使用字符串形式的列名作为分组键,
但上面例子中都没有用。是因为这种方法虽然方便,却存在隐患——使用这种方法时,调用者必须是 DataFrame 对象自身而不可以是 DataFrame 的索引形式。
即 df.groupby([‘key1’,’key2’])[‘data1’] 是 ok 的,但 df[‘data1’].groupby(‘key1’) 会报错。使用时当注意区分。