NoteBook of 《Data Analysis with Python》
3.IPython基础
Tab自动补齐
解释
%run命令
- %run 执行全部文件
- %run -i 访问变量
- Ctrl-C中断执行
- %paste能够粘贴剪切板的一切文本
- 通常使用%cpaste由于能够改
键盘快捷键
魔术命令
4.Numpy基础:数组和矢量计算
ndarray:多维数组对象
建立ndarray
- np.array() #将输入数据转换成ndarray
- np.asarray() #将输入转换成ndarray
- np.zeros() zeros_like #全零数组
- np.ones()ones_like #全一数组
- np.empty()empty_like #建立数组只分配内存不赋值
- np.arange() #返回 range版的ndarray
- eye、identify #N*N单位矩阵
ndarray类型
- int、uint8 16 32 64
- float 16 32 64 128
- complex 64 128 256 浮点数表示的复数
- bool
- object python对象类型
- string_ 固定长度的字符串
- unicode_ 固定长度的Unicode类型
- astype能够显示转换成其余类型
数组和标量之间的计算
批量计算html
基本的索引和切片
- 数组切片是原始数据,对切片的任何修改都会直接修改原始数据
- 若须要复制一个副本就须要显示的复制.copy()
- 访问单个元素arr[0][2]=arr[0,2]
- 注意区分1和:1 #前者表示第二行,后者表示到第一行
- and or 在布尔型数据中无效
花式索引
- 花式索引就是将数据复制到新数组中
- 转置 .T transpose swapaxes
通用函数ufunc:元素级数组函数
-
一元ufuncpython
- abs、fabs
- sqrt平方根
- square平方
- exp指数
- log、log十、log二、log1p对数
- sign正负号
- ceil大于等于该值的最小整数
- floor小于等于该值的最大整数
- rint四舍五入到最接近的整数
- modf小数和整数部分分别返回
- isnan布尔型数组返回NaN非数字
- isfinite、isinf布尔型返回有穷和无穷
- cos、sosh、sin、sinh、tan、tanh双曲线三角函数
- arc cos、sosh、sin、sinh、tan、tanh反三角
- logical_not 计算not x的真值
-
二元ufuncweb
- add相加
- subtract数组一减二
- multiply相乘
- divide、floor_divide除法,向下取整
- power A B 计算A^B
- maximum、fmax fmax会忽略NaN
- minimum、fmin
- mod求模
- copysign将二数组的值的符号复制给第一个数组的值
- greater、greater_equal、less、less_equal、equal、not_equal比较运算,产生布尔型,至关于>,>=
- logical_and,logical_or,logical_xor & | ^
利用数组进行数据处理
- 用数组表达式代替循环叫矢量化
- numpy.where=x if condition else y
- [(x if c else y)for x,y,z in zip(x,y,c)]=np.where(c,x,y)
数学和统计方法
-
基本数组统计方法正则表达式
- sum 对数组中所有元素或某轴向的元素求和
- mean 算术平均值
- std、var 标准差和方差
- min、max最大值和最小值
- argmin、argmax最大最小元素的索引
- cumsum全部元素的累计和
- cumprod全部元素的累计积
-
用于布尔型数组的方法mongodb
- sum计算true的个数
- any测试是否存在一个或多个true
- all 检测数组中是否全部值都是true
-
排序数据库
-
数组的结合运算json
- np.unique找出数组中的惟一值并返回已排序的结果
- intersect1d(x,y)返回有序的公共元素结果
- union1d(x,y)返回并集的有序结果
- in1d(x,y)返回x的元素是否包含于y的布尔型数组
- setdiff1d(x,y)返回集合的差,x中不在y中
- setxor1d(x,y)异或存在某一可是不一样时存在2者
数组文件的输入和输出
- 二进制读写
- np.save
- np.load
- np.savez将多个数组保存到一个压缩文件中
- 读取文本文件
- np.loadtxt
- np.genfromtxt
- np.savetxt
线性代数
- 矩阵乘法
- 经常使用函数
- diag 返回矩阵的对角线元素,或将一维数组转换成矩阵
- cot矩阵乘法
- trace对角线元素和
- det 矩阵行列式值
- eig特征值和特征向量
- inv求逆
- pinv计算矩阵的伪逆
- qrQR分解
- svd奇异值分解
- solve Ax=b的解
- lstsq Ax=b的最小二乘解
- 随机数生成
- numpy.random
- seed肯定随记生成数的种子
- permutation返回一个序列的随记排列或一个随记排列的范围
- shuffle对一个序列直接随记排列
- rand产生均匀分布的样本值
- randint从给定的范围内随机选取整数
- randn产生标准状态分布的随机值
- binomial产生二项分布的样本值
- normal产生高斯分布的样本值
- beta产生B分布的样本值
- chisquare产生卡方分布的样本值
- gamma产生gamma分布的样本值
- uniform产生[0,1)均匀分布的样本值
5.pandas入门
pandas数据结构介绍
-
Series (data,index=v)api
- 一组数据和一组索引组成的一维数组
- 当作是一个定长的有序字典
- 能够直接经过字典建立
- 在数值运算中会自动对齐
- 索引能够经过直接赋值的方式修改
-
DataFrame数组
- 表格型的数据结构
- 直接传入由等长列表或np数组组成的字典
- 能够指定列序列columns
- 经过相似字典标记da.date或属性da['date']的方式获取一个列为Series(拥有原来df相同的索引)
- 为不存在的列赋值时会建立一个新列
- 嵌套字典的外层键做为列,内层做为行索引
- 能够穿给DF的数据[二维ndarray、数组元组列表组成的字典、np的结构化数组、Series组成的字典、字典组成的字典、字典或Series组成的列表、列表或元组组成的列表、DF、np的MaskedArray]
- index对象不可修改
-
index的方法和属性:数据结构
- append连接另一个index产生新的index
- diff计算差集获得一个index
- intersection计算交集
- union\isin计算是否包含在参数集合中的布尔型数组
- delete删除索引i出的元素并获得新的index
- drop、insert、is_monotonic、is_unique、unique
基本功能
汇总和计算描述统计
- 规约方法
- axis df行用0,列用1
- skipna跳过na值,默认是True
- level层次化索引就根据level分组规约
- describe返回多个列汇总信息
count、describe、min、max、argmin、argmax、idxmin、idxmax、quantile、sum、mean、median、mad、var、std、skew、kurt、cumsum、cummin、cummax、cumprod、diff、pct_change
- 相关系数和协方差
- 3.x只保留了一个 items() 方法
- Series中corr用于计算相关系数[重叠、非NA、索引对齐]
- cov计算协方差
- df的cov、corr会返回完整的矩阵
- df的corrwith计算其列或行和另外一个Series或df
- unique.sort()返回一组惟一值有序数组
- value_counts()返回一个Series各值出现的频率,pd.
处理缺失数据
- NA处理方法
- dropna、fillna
- isnull、notnull
- 过滤缺失数据
- dropna返回一仅含非空数据和索引值的Series=data.notnull();对于df会丢弃任何含有na的行,传入how='all'只丢弃全为NA的行;丢弃列则传入axis=1
- thresh参数
- 填充缺失数据
- fillna方法参数
- value用于填充的值或字典对象
- method填充方法,默认ffill
- axis默认0即行,axis=1为列
- inplace是否产生副本
- limit填充最大连续数量
层次化索引
- 能以低维度形式处理高维度数据
- 能够经过unstack方法从新排到一个df中[stack逆运算]
- 还能够为轴标签指定名称
- 重排分层排序
- swaplevel能够交换两个层级并返回新的
- sortlevel
- df将一个列或多个当作行索引
- set_index(['c','d'),drop=False)
- reset_index()
pandas的其余话题
- 整数索引
- Series的iget_value
- df的irow和icol
- Panel数据
- Panel中的每一项都是一个df
- df有to_ panel方法[逆运算是to_frame]
6.数据加载存储和文件格式
读取文本格式的数据
- pandas解析函数
- read_csv从文件、url、文件型对象加载带分隔符的对象,默认分隔符是逗号,
- read_table同上,默认分隔符是制表符\t;指定分隔符sep=','=read_csv
- read_fwf读取定宽列格式数据
- read_clipboard读取剪切板数据
- read_csv/read_table
- 能够指定索引和列名,也可传入列名列表作成多层索引
- 当处理不固定分隔符时使用正则表达式来做为分隔符
- skiprows跳行
- na_values接收用于表示缺失值的字符串
函数参数:path、sep|delimiter、header、index_col、names、skiprows、na_values、comment、parse_dates、keep_date_col、converters、dayfirst、date_parser、nrows、iterator、chunksize、skip_footer、verbose、encoding、squeeze、thousands
- 逐块读取文本文件
- nrows指定读取几行
- chunksize指定逐块读取的大小
- 将数据写出到文本文件
- to_csv能够指定分隔符[from_csv]
- 缺失值默认是空字符串,能够经过na_rep指定标记值
- 默认会输出行列索引,能够经过index=False,header=False禁用
- 也能够只输出部分列
- 手动处理分隔符格式
- JSON 数据
- json.load加载json数据
- json.dump转换为json对象
- pandas.to_json[from_json]
- XML、HTML
- findall和XPath
- py2.x中的urllib2 =py3.x 中的urllib.request
- The StringIO and cStringIO modules are gone. Instead, import the io module and use io.StringIO or io.BytesIO for text and data respectively.
- ixml.objectify解析xml
二进制数据格式
- pandas.save和pandas.load 读写pickle形式数据
- HDF5格式(hierarchical data format层次数据格式)
- python中有两个接口PyTables&h5py
- 处理海量数据要好好研究这两个接口
- pd.ExcelFile读取Excel文件
使用HTML和Web API
使用数据库
In python 2, zip returned a list. In python 3, it returns an iterable object. But you can make it into a list just by calling list on it.
list(zip(*ngram))[0]=zip(*nagram)[0]
存取MongoDB的数据
7.数据规整化:清洗、转换、合并、重塑
合并数据集
重塑reshape和轴向旋转pivot
- 重塑层次化索引
- stack 列-->行 df-->Series 默认滤除缺失值
- unstack 行-->列 Series-->df
- 将长格式转换成宽格式
数据转换
- 移除重复数据
- df.duplicated()返回一个布尔型Series表示是否重复行
- drop_duplicates返回一个移除了重复行的df;默认是判断所有列,也能够指定列;默认保留第一个值,也能够保留最后一个
- 利用匿名函数或映射进行数据转换
- 替换值
- 重命名轴索引
- map直接修改原始数据,rename建立数据集的转换版[能够结合字典实现对部分轴索引的修改],也可inplace=True修改原数据
- 离散化和面元划分
- 检测和过滤离群值
- np.random.permutation
- df.take
- 计算指标/哑变量
- 将分类变量转换为虚拟矩阵或指标矩阵
- pd.get_dummies(prefix加前缀)结合cut
字符串操做
- 字符串对象方法
- split()结合strip(修剪空白符,换行符)
- '::'.join()
- find[找不到返回-1]和index[找不到会引起异常]
- count返回子字符串出现的次数
- replace将指定字符替换成指定字符,删除就替换空字符
- 内置字符串方法
- count、endswith、startswith、join、index、find、rfind、replace、strip、rstrip、lstrip、split、lower、upper、ljust、rjust
- 正则表达式
- 经过re.compile建立regex对象能够节省大量时间若是对许多字符串应用同一个正则表达式
- findall返回全部匹配项的列表,finditer逐个迭代返回
- search返回第一个匹配项
- match从字符串起始位置开始匹配,返回第一个,不然None
- sub将匹配到的替换成指定字符串,并返回新的字符串subn前n个
- re.IGNORECASE忽略大小写
- split将匹配到的拆分红数段
- pandas中矢量化的字符串函数
- 获取矢量化的元操做:str.get;str[]
- 矢量化的字符串方法
- cat、contains、count、endswith、startswith、findall、get、join、len、lower、upper、match、pad、center、repeat、replace、slice、split、strip、rstrip、lstrip
8.绘图和可视化
matplotlib入门
- matplotlib的实例库和文档是成为绘图高手的最佳资源
- Figure & Subplot
- matplotlib的图像都位于Figure对象中
- pyplot.subplots的参数
- nrows、ncols、sharex、sharey、subplot_kw、 **fig_wk
- subplots_adjust调整图像间距
- 颜色、标记和线型
- plot(linestyle=、color=)经常使用颜色有缩写,任意RGB
- 转折点的标记marker=o;drawstyle插值绘图方式
- 刻度、标签和图例
- 设置刻度和刻度标签
- set_xticks选择要设置刻度的位置
- ser_xticklables就是设置刻度的标签
- set_xlable设置轴标签
- set_title设置标题
- 添加图例
- 在添加subplot的时候传入lable
- ax.legend|plt.legend(loc='best')自动选一个最好的地方
- 注解或在Subplot上绘图
- 注解能够经过text、arrow、annotate添加
- text能够文本绘制在指定坐标
- 在图表上添加一个图形,须要先建立一个块对象shp而后经过ax.add_oatch(shp)将其添加到subplot中
- 图片保持Figure.savefig
- fname、dpi、facecolor、edgecolor、format、bbox_inches
- matplotlib配置
pandas中的绘图函数
- 线形图
- Series.plot方法默认就是线形图
- label、ax、style、alpha、kind、logy、use_index、rot、xticks、yticks、xlim、ylim、grid
- df.plot会在一个subplot中为各列绘制一条线并自动建立图例
- subplots、sharex、sharey、figsize、title、legend、sort_columns
- 要更深刻须要多学matplotlib API
- 柱状图
- kind='bar'垂直|kind='barh'水平
- Series索引会被用做刻度=df.行索引,列索引会做分组
- stacked=True堆积柱状图
- 直方图和密度图
- hist生成直方图
- plot kind='kde'生成密度图
- 两者一般一块儿使用
- 散布图
- plt.scatter观察两个一维数据序列之间的关系
- pd.scatter_matrix散布图矩阵
- basemap地图插件
- 图形库mayavi
9.数据聚合与分组运算
GroupBy分组
- split-apply-combine
- 分组键中的缺失值可使结果包含在NA组了吧
- 对分组进行迭代
- 选取一个或一组列
- 经过字典或Series分组,索引和分组轴要对齐
- 经过函数进行分组
- 将函数、数组、列表、字典、Series混合使用进行分组
- 根据索引级别分组[层次化索引]
数据聚合:从数组产生标量值的数据转换过程
数组运算和转换
- groupby的transform方法,会将一个函数运用到各个分组
- apply:通常性的'拆分-应用-合并'
- group_keys=False禁止分组键
- 分位数quantile和桶bucket分析
透视表和交叉表
- 透视表pivot table根据一个或多个键并根据行、列键将数据分配到各个举行区域里
- pd.pivot_table|df.pivot_table参数
- margins=True aggfunc= 、values、index、columns、fill_value
- 交叉表crosstab:用于计算分组频率的特殊透视表
- crosstab前两参数能够是数组、Series、数组列表
关于basemap的种种问题
- geos始终没法安装好
- basemap没法直接安装whl也安装不了
- win10 64 py3.5
时间序列
日期和时间数据类型及工具
- datetime、time、calendar
- date.timedelta表示两个datetime对象之间的时间差
- 字符串和datetime之间的相互转换
- str和strftime能够将datetime转换成字符串
- datetime.strptime能够将格式化字符串装换成datetime对象;解析已知格式
- dateutil包的parser.parse方法解析全部格式;实用但不完美
- datetime格式定义
- %Y 四位数年 %y %m %d 两位数
- %H 24H制 %I 12H制 %M %S
- %w 星期几[0,6] %U 每一年的第几周,星期天为界,%W,星期一为界
- %z UTC时区偏移量 %F Y-m-d %D m/d/y
- 特定于当前环境的
- %a 星期几简称、%A星期全称
- %b月份简称 %B
- %c完整日期和时间 %p am,pm
- %x适合于当前地区的日期格式,%X时间格式
时间序列基础
- pd最基本的时间序列就是以时间戳为索引的Series
- 索引、选取、子集构造
- 传入能够被解析成日期的字符串
- 传入年、月便可选取数据切片
- 可使用字符串日、datetime、Timestamp
- 对非惟一时间戳进行聚合使用groupby
日期的范围、频率、移动
- resample将时间序列转换成一个具备固定频率的时间序列
- pd.date_range会生成指定长度的daretimeindex
- 时间序列的基础频率
- D日历日 B工做日 H T分 S WOM每个月的星期几
- 移动数据 pd.shift
时区处理
- pytz包
- 本地化和转换
- tz_localize、tz_convert转换到别的时区
- Timestamp对象的转换
- 不一样时区之间的运算
- 时期及其算术运算
- 时期的频率转换
- 按季度计算的时期频率
- 将Timestamp转换成Period[or相反]
- 经过数组建立PeriodIndex
重采样和频率转换
- 重采样resample是指将时间序列从一个频率转换到另一个频率
- 降采样、升采样,非降非升采样
- 方法参数
- freq、how、axis、fill_method、closed、label、loffset、limit、kind、convention
- OHLC重采样,open、high、low、close
- 经过groupby进行重采样
- 升采样和插值
- 经过时期进行重采样
时间序列绘图
- pd时间序列的绘图功能比mt好
- 移动窗口函数rolling_mean
- 用户自定义移动窗口函数rolling_apply,能从片断中产生单个值
性能和内存使用的注意事项
- pandas对数据对齐和重采样进行了高度优化
- 规则频率之间的转换优化
金融和经济数据应用
数据规整方面
- 时间序列以及截面对齐
- pandas能够在算术运算中自动对齐数据
- 经过一组不一样索引的Series构建df
- 频率不一样的时间序列的运算
- 频率转换resample和重对齐reindex
- 使用Period索引的两个不一样频率的时间序列之间的运算必须进行显示转换
- 时间和当前数据选取
- at_time、between_time
- 将Timestamp传入asof能够获得时间点最近的值(如果na的话)
- 拼接多个数据源
- pd.concat
- df.combine_first
分组变换和分析
NumPy高级应用
ndarray对象的内部机制
高级数组操做
- 向数组的reshape传入一个表示新形状的元组便可
- C[行优先&内存相邻]和Fortran[列优先&内存相邻]顺序
- order='C' || order='F'
- 数组的拆分和合并
- np.concatenate能够指定轴将一个数组序列(元组或列表等)链接到一块儿
- 比较方便的是np.vstack|np.hstack
- np.split将数组沿指定轴拆分为多个数组
- concatenate、vstack、row_stack、hstack、column_stack、dstack、split、hsplit、vsplit、dsplit
- r_、c_
- 元素的重复操做tile&repeat
- 花式索引的等价函数take&put
广播
- 后缘维度的轴长相符,其中一方长度为1
- 沿其余轴向广播
- 利用广播机制设置数组的值
ufunc高级应用
- ufunc实例方法
- reduce、accumulate、reduceat、outer
- 自定义ufunc
结构化和记录式数组
- 定义结构化dtype,使用元组列表,字典式访问
- 嵌套dtype和多维字段
和排序有关的话题
- ndarray的sort实例方法是直接排序,原始数据会消失
- 而np.sort会建立一个已排序的副本,还能够指定排序轴
- 间接排序:argsort、lexsort
- python对象数组只能用快排排序
- np.searchsorted在有序数组中查找元素,返回位置坐标
- Numpy的Matrix类
高级输入输出
- 内存映像文件能够处理内存放不下的大文件
- np.memmap会将大文件分红小段来读写
性能建议
- 将python的循环和逻辑转换成数组运算和布尔数组运算
- 多用广播
- 多使用数组切片避免复制数据
- 使用ufunc
- 考虑Cython
- 连续内存