[关闭]
@spiritnotes 2016-08-05T15:51:11.000000Z 字数 3258 阅读 1651

《利用Python进行数据分析》

读书笔记 Python DOING


第2章 引言

来自bit.ly的1.usa.gov数据

第3章 IPython:一种交互式计算和开发环境

Ipython基础

第4章 Numpy基础:数组和矢量计算

NumPy的ndarray:一种多维数组对象

通用同构多维容器
属性:shape、dtype、ndim
构造:序列或者嵌套序列 np.array(seq)
np.zeros(...) / np.empty(...) / np.ones(...)
np.arange(...) range返回格式为array
.asarray 如果本身为array则不复制
ones_like, zeros_like, empty_like 以另一个array的类型和维度做为创建参数
eye、identity 单位矩阵
astype 转换array类型,可以使用float将字符串转为float,总会创建新数组

数组和标量之间的运算

大小相等的数组之间的任何算术运算都会将运算应用到元素级
数组与标量之间的算术运算也会将哪个标量传播到各个元素

基本的索引和切片

数组切片是原始数组的视图,视图上任何修改都会直接反映到源数组上;标量值和数组都可以被赋值给切片;
arr1d[5],arr1d[5:8]
arr2d[0][2], arr2d[0,2]

切片
切片可以在多个维度上进行,可以与整数索引混合。arr2d[:2],arr2d[:1,:2],arr2d[1,:2]

np.random.randn(...) 产生正态分布的随机数据

布尔型索引

names == 'Bob'
data[names=='Bob']
data[names=='Bob', :2]
data[-(names=='Bob')]
mask = (names=='Bob') | (names=='Will')

布尔型索引总是创建数据的副本?

布尔索引赋值
data[data<0] = 0; data[names!='Will']=7

花式索引

利用整数数组进行索引,负数表示向后数
arr[[1,2,3],[3,2,1]]不能符合预期,要采用arr[np.ix_([1,2,3],[3,2,1])]/arr[[1,2,3]][:,[3,2,1]]

类型 形式 可赋值 视图?
索引 arr[5][8] 标量、数组 视图
切片 arr[:2] [:,2] [:2,:3] 标量、数组 视图
布尔索引 data[data<0] 标量、数组 视图?
花式索引 data[[1,2,3]] 标量、数组 复制

数组转置和轴对换

arr.T
arr.transpose(...)
arr.swapaxes(...)
均是返回视图

通用函数:快速的元素级数组函数

abs\fabs\sqrt\square\exp\log\log10\log2\log1p
sign\ceil\floor\rint\modf\isnan\isfinite\isinf
cos\cosh\sin\sinh\tan\tanh
arccos\arccosh\arcsin\arcsinh\arctan\arctanh\logical_not
二元
add\subtract\multiply\divide\floor_divide\power
maximum\fmax\minimum\fmin\mod\copysign
greater\greater_equal\less\less_equal\equal\not_equal\logic_and\logic_or\logic_xor

np.meshgrid接受两个一维数组,产生两个二维矩阵
np.where(cond, xarr, yarr),后面两个参数其中一个可以为标量

result = 1*(cond1-cond2) + 2*(cond2 & -cond1) + 3*-(cond1 | cond2)

统计方法

sum mean std var min max argmin argmax cumsum sumprod

(arr > 0).sum()
bools.any()
ints.all()

arr.sort(index) 原地排序

唯一化以及其他的集合逻辑

np.unique(arr)
np.in1d(arr, [x,y]) 成员资格

unique(x) intersect1d(x, y) union1d(x, y) in1d(x, y) setdeff1d(x, y) setxor1d(x, y)

用于数组的文件输入输出

np.save np.load np.savez

线性代数

x.dot(y) np.dot(x,y)
np.linalg.inv
diag dot trace det eig inv pinv qr svd solve lstsq

随机数生成

np.random
seed permitation shuffle rand randint randn binomial normal beta chisquare gamma uniform

第5章 pandas入门

Series

series = Series([...], index=[...])
series.values 数组表示形式
series.index 索引对象
索引 series['d'], series[['a','b','d']]
赋值 series['d']=1, series[['a','b','c']]=[1,2,3]
运算 series[series>0], series+2, np.exp(series)
成员 'b' in series
字典创建 series = Series({'a': 1, 'c':2}, index=)
如果index中的查找不到,则为NaN
pd.isnull(series) pd.notnull(series)
算术运算中会自动对齐不同索引
series.name
series.index.name
索引可以通过赋值的方式就地修改 series.index=['a',...]

DataFrame

是表格型的数据结构,含有一组有序的列,每列可以是不同的值类型(数值、字符串、布尔值),既有行索引也有列索引,可以看着由Series组成的字典(共用同一个索引)

创建
由等长列表或Numpy数组组成的字典 DataFrame({'a':[1,2,3],'b':[3,4,5]}, columns=[...], index=[...])
嵌套字典 DataFrame({'a':{2000:1, 2001:2}, 'b':{2001:2, 2003:4}})
二维ndarray
字典或Series的列表:各项会成为DataFrame的一行
属性
frame.index.name
frame.columns.name
frame.values
Index对象
是不可修改的
其他类型: Int64Index, MUltiIndex, DatetimeINdex, PeriodINdex
Index对象支持很多方法
列Series
获取 data['a'], data.a
列赋值 data.a = 1 data.a = range(5) data.a = series(精确匹配index)
创建新列 data['z'] = data.a==1
删除列 del data.z
为源的视图,通过copy进行复制
获取行Series
data.ix['the']
转置
data.T
其他操作
重排index: reindex(index=[...], columns=[...], fill_value=0, method='...')
frame.ix[[index...], columns]相当于重排
丢弃指定轴上的项 frame.drop([x, y], axis=0)
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注