数据分析是指用适当的统计分析方法对收集来的大量数据进行分析,提取有用信息和形成结论而对数据加以详细研究和概括总结的过程。
使用python做数据分析的常用库
字节序前缀,用于多字节整数和字符串: </>/[=]分别表示小端/大端/硬件字节序。
大端字节序,3个元素的一维数组,每个元素都是整型,每个整型元素占4个字节。 |
小端字节序,6个元素2行3列的二维数组,每个元素都是无符号整型,每个无符号整型元素占8个字节。 |
包含7个字符的Unicode字符串,每个字符占4个字节,采用默认字节序。 |
就地变维:直接改变原数组对象的维度,不返回新数组
#数组对象切片的参数设置与列表切面参数类似 # 步长+:默认切从首到尾 # 步长-:默认切从尾到首 数组对象[起始位置:终止位置:步长, ...]
深度方向操作:(3维)
多维数组组合与拆分的相关函数:
# 通过axis作为关键字参数指定组合的方向,取值如下: # 若待组合的数组都是二维数组: # 0: 垂直方向组合 # 1: 水平方向组合 # 若待组合的数组都是三维数组: # 0: 垂直方向组合 # 1: 水平方向组合 # 2: 深度方向组合 # 通过给出的数组与要拆分的份数,按照某个方向进行拆分,axis的取值同上
简单的一维数组组合方案
matplotlib是python的一个绘图库。使用它可以很方便的绘制出版质量级别的图形。
案例:绘制一条余弦曲线
案例:绘制一条正弦曲线
案例:把坐标轴范围设置为 -π ~ π
刻度文本的特殊语法 -- LaTex排版语法字符串
案例:设置坐标轴至中心。
显示两条曲线的图例,并测试loc属性。
# 再绘制曲线时定义曲线的label # loc: <关键字参数> 制定图例的显示位置 (若不设置loc,则显示默认位置)
案例:绘制当x=3π/4时两条曲线上的特殊点。
案例:为在某条曲线上的点添加备注,指明函数方程与值。
# 在图表中为某个点添加备注。包含备注文本,备注箭头等图像的设置。
arrowprops参数使用字典定义指向目标点的箭头样式
箭头样式(arrowstyle)字符串如下
案例:绘制两个窗口,一起显示。
mp.figure方法不仅可以构建一个新窗口,如果已经构建过title='xxx'的窗口,又使用figure方法构建了title='xxx' 的窗口的话,mp将不会创建新的窗口,而是把title='xxx'的窗口置为当前操作窗口。
案例:测试窗口相关参数
# 设置图表标题 显示在图表上方 # 设置刻度参数 labelsize设置刻度字体大小 # 设置图表网格线 linestyle设置网格线的样式 # 设置紧凑布局,把图表相关参数都显示在窗口中
绘制矩阵式子图布局相关API:
案例:绘制9宫格矩阵式子图,每个子图中写一个数字。
网格式布局支持单元格的合并。
绘制网格式子图布局相关API:
案例:绘制一个自定义网格布局。
自由式布局相关API:
案例:测试自由式布局,定位子图。
刻度定位器相关API:
案例:使用for循环测试刻度器样式:
# 空定位器:不绘制刻度 # 定点定位器:根据locs参数中的位置绘制刻度 # 自动定位器:由系统自动选择刻度的绘制位置 # 索引定位器:由offset确定起始刻度,由base确定相邻刻度的间隔 # 多点定位器:从0开始,按照参数指定的间隔(缺省1)绘制刻度 # 对数定位器:以base为底,绘制刻度
绘制刻度网格线的相关API:
案例:绘制曲线 [1, 10, 100, , 10, 1],然后设置刻度网格线,测试刻度网格线的参数。
y轴将以指数方式递增。 基于半对数坐标绘制第二个子图,表示曲线:[1, 10, 100, , 10, 1]。
可以通过每个点的坐标、颜色、大小和形状表示不同的特征值。
绘制散点图的相关API:
案例:绘制平面散点图。
cmap颜色映射表参照附件:cmap颜色映射表
以某种颜色自动填充两条曲线的闭合区域。
绘制柱状图的相关API:
案例:先以柱状图绘制苹果12个月的销量,然后再绘制橘子的销量。
绘制饼状图的基本API:
案例:绘制饼状图显示5门语言的流行程度:
组成等高线需要网格点坐标矩阵,也需要每个点的高度。所以等高线属于3D数学模型范畴。
绘制等高线的相关API:
案例:生成网格坐标矩阵,并且绘制等高线:
绘制热成像图的相关API:
# 把矩阵z图形化,使用cmap表示矩阵中每个元素值的大小 # upper: 缺省值,原点在左上角
使用颜色条显示热度值:
与笛卡尔坐标系不同,某些情况下极坐标系适合显示与角度有关的图像。例如雷达等。极坐标系可以描述极径ρ与极角θ的线性关系。
在极坐标系中绘制曲线:
案例,在极坐标系中绘制正弦函数。 y=3 sin(6x)
matplotlib支持绘制三维曲面。若希望绘制三维曲面,需要使用axes3d提供的3d坐标系。
matplotlib支持绘制三维点阵、三维曲面、三维线框图:
3d散点图的绘制相关API:
案例:随机生成3组坐标,程标准正态分布规则,并且绘制它们。
3d平面图的绘制相关API:
案例:3d线框图的绘制
动画即是在一段时间内快速连续的重新绘制图像的过程。
matplotlib提供了方法用于处理简单动画的绘制。定义update函数用于即时更新图像。
案例:随机生成各种颜色的100个气泡。让他们不断的增大。
#自定义一种可以存放在ndarray里的类型,用于保存一个球 #随机生成100个点对象 #每次让一个气泡破裂,随机生成一个新的 # 每隔30毫秒执行一次update更新函数,作用于mp.gcf()当前窗口对象 # interval: 间隔时间(单位:毫秒)
使用生成器函数提供数据,实现动画绘制
在很多情况下,绘制动画的参数是动态获取的,matplotlib支持定义generator生成器函数,用于生成数据,把生成的数据交给update函数更新图像:
numpy提供了函数用于加载逻辑上可被解释为二维数组的文本文件,格式如下:
案例:读取aapl.csv文件,得到文件中的信息:
样本中的每个值都是真值与误差的和。
算数平均值表示对真值的无偏估计。
案例:计算收盘价的算术平均值。
VWAP - 成交量加权平均价格(成交量体现了市场对当前交易价格的认可度,成交量加权平均价格将会更接近这支股票的真实价值)
TWAP - 时间加权平均价格(时间越晚权重越高,参考意义越大)
np.maximum() np.minimum(): 将两个同维数组中对应元素中最大/最小元素构成一个新的数组
案例:评估AAPL股票的波动性。
查看AAPL股票最大最小值的日期,分析为什么这一天出现最大最小值。
观察最高价与最低价的波动范围,分析这支股票底部是否坚挺。
将多个样本按照大小排序,取中间位置的元素。
若样本数量为奇数,中位数为最中间的元素
若样本数量为偶数,中位数为最中间的两个元素的平均值
案例:分析中位数的算法,测试numpy提供的中位数API:
案例:统计每个周一、周二、...、周五的收盘价的平均值,并放入一个数组。
案例:汇总每周的最高价,最低价,开盘价,收盘价。
沿着数组中所指定的轴向,调用处理函数,并将每次调用的返回值重新组织成数组返回。
收盘价5日均线:从第五天开始,每天计算最近五天的收盘价的平均值所构成的一条线。
在K线图中绘制5日均线图
单位激励下的响应函数:f(t)
绘制时间(t)与痛感(h)的函数关系图。
a = [1 2 3 4 5] (理解为某单位时间的击打力度序列)
5日移动均线序列可以直接使用卷积实现
上轨:中轨+2x5日收盘价标准差 (顶部的压力)
下轨:中轨-2x5日收盘价标准差 (底部的支撑力)
布林带收窄代表稳定的趋势,布林带张开代表有较大的波动空间的趋势。
假设一组数据符合一种线型规律,那么就可以预测未来将会出现的数据。
根据线性模型的特点可以通过一组历史数据求出线性关系系数x, y, z,从而预测d、e、f下的一个数据是多少。
线性预测需要使用历史数据进行检验,让预测结果可信度更高
案例:使用线性预测,预测下一天的收盘价。
# 整理五元一次方程组 最终获取一组股票走势预测值 # 由于预测的是下一天的收盘价,所以想日期数组中追加一个元素,为下一个工作日的日期
线性拟合可以寻求与一组散点走向趋势规律相适应的线型表达式方程。
有一组散点描述时间序列下的股价:
案例:利用线型拟合画出股价的趋势线
通过两组统计数据计算而得的协方差可以评估这两组统计数据的相似程度。
离差(用样本中的每一个元素减去平均数,求得数据的误差程度):
协方差可以简单反映两组统计样本的相关性,值为正,则为正相关;值为负,则为负相关,绝对值越大相关性越强。
案例:计算两组数据的协方差,并绘图观察。
协方差除去两组统计样本的乘积是一个[-1, 1]之间的数。该结果称为统计样本的相关系数。
# a组样本 与 b组样本做对照后的相关系数 # b组样本 与 a组样本做对照后的相关系数 # a样本与a样本作对照 b样本与b样本做对照 二者必然相等
通过相关系数可以分析两组数据的相关性:
若相关系数越接近于0,越表示两组样本越不相关。 若相关系数越接近于1,越表示两组样本正相关。 若相关系数越接近于-1,越表示两组样本负相关。
案例:输出案例中两组数据的相关系数。
那么多项式拟合的过程即为求取一组p0-pn,使得loss的值最小。
多项式运算相关API:
根据拟合系数与自变量求出拟合值, 由此可得拟合曲线坐标样本数据 [X, Y'] 多项式函数求导,根据拟合系数求出多项式函数导函数的系数 已知多项式系数Q 求多项式函数的根(与x轴交点的横坐标) 两个多项式函数的差函数的系数(可以通过差函数的根求取两个曲线的交点)
案例:使用多项式函数拟合两只股票bhp、vale的差价函数:
数据的平滑处理通常包含有降噪、拟合等操作。降噪的功能意在去除额外的影响因素,拟合的目的意在数学模型化,可以通过更多的数学方法识别曲线特征。
案例:绘制两只股票收益率曲线。收益率 =(后一天收盘价-前一天收盘价) / 前一天收盘价
#拟合这两条曲线,获取两组多项式系数
sign函数可以把样本数组的变成对应的符号数组,正数变为1,负数变为-1,0则变为0。
成交量可以反映市场对某支股票的人气,而成交量是一只股票上涨的能量。一支股票的上涨往往需要较大的成交量。而下跌时则不然。
若相比上一天的收盘价上涨,则为正成交量;若相比上一天的收盘价下跌,则为负成交量。
针对源数组中的每一个元素,检测其是否符合条件序列中的每一个条件,符合哪个条件就用取值系列中与之对应的值,表示该元素,放到目标 数组中返回。
矢量化指的是用数组代替标量来操作数组里的每个元素。
numpy提供了vectorize函数,可以把处理标量的函数矢量化,返回的函数可以直接处理ndarray数组。
# 把foo转换成矢量函数,该矢量函数接收2个参数,返回一个结果
案例:定义一种买进卖出策略,通过历史数据判断这种策略是否值得实施。
矩阵是numpy.matrix类类型的对象,该类继承自numpy.ndarray,任何针对多维数组的操作,对矩阵同样有效,但是作为子类矩阵又结合其自身的特点,做了必要的扩充,比如:乘法计算、求逆等。
# 如果copy的值为True(缺省),所得到的矩阵对象与参数中的源容器共享同一份数 # 据,否则,各自拥有独立的数据拷贝。 ary, # 任何可被解释为矩阵的二维容器
# 该函数可以接受字符串形式的矩阵描述: # 数据项通过空格分隔,数据行通过分号分隔。例如:'1 2 3; 4 5 6'
# 矩阵的乘法:乘积矩阵的第i行第j列的元素等于 # 被乘数矩阵的第i行与乘数矩阵的第j列的点积
若两个矩阵A、B满足:AB = BA = E (E为单位矩阵),则成为A、B为逆矩阵。
ndarray提供了方法让多维数组替代矩阵的运算:
# 将调用数组中小于和大于下限和上限的元素替换为下限和上限,返回裁剪后的数组,调
# 返回由调用数组中满足条件的元素组成的新数组。
# 返回调用数组中所有元素的乘积——累乘。 # 返回调用数组中所有元素执行累乘的过程数组。
曲线叠加的越多,越接近方波。所以可以设计一个函数,接收曲线的数量n作为参数,返回一个矢量函数,该函数可以接收x坐标数组,返回n个正弦波叠加得到的y坐标数组。
按位异或操作可以很方便的判断两个数据是否同号。
利用位与运算计算某个数字是否是2的幂
左移1位相当于乘2,右移1位相当于除2。
对于n阶方阵A,如果存在数a和非零n维列向量x,使得Ax=ax,则称a是矩阵A的一个特征值,x是矩阵A属于特征值a的特征向量
#已知n阶方阵A, 求特征值与特征数组 #已知特征值与特征向量,求方阵
案例:读取图片的亮度矩阵,提取特征值与特征向量,保留部分特征值,重新生成新的亮度矩阵,绘制图片。
有一个矩阵M,可以分解为3个矩阵U、S、V,使得U x S x V等于M。U与V都是正交矩阵(乘以自身的转置矩阵结果为单位矩阵)。那么S矩阵主对角线上的元素称为矩阵M的奇异值,其它元素均为0。
案例:读取图片的亮度矩阵,提取奇异值与两个正交矩阵,保留部分奇异值,重新生成新的亮度矩阵,绘制图片。
法国科学家傅里叶提出,任何一条周期曲线,无论多么跳跃或不规则,都能表示成一组光滑正弦曲线叠加之和。
傅里叶变换的目的是可将时域(即时间域)上的信号转变为频域(即频率域)上的信号,随着域的不同,对同一个事物的了解角度也就随之改变,因此在时域中某些不好处理的地方,在频域就可以较为简单的处理。这就可以大量减少处理信号存储量。
所以傅里叶变换可以把一个比较复杂的函数转换为多个简单函数的叠加,看问题的角度也从时间域转到了频率域,有些的问题处理起来就会比较简单。
导入快速傅里叶变换所需模块
通过采样数与采样周期求得傅里叶变换分解所得曲线的频率序列
通过原函数值的序列j经过快速傅里叶变换得到一个复数数组,复数的模代表的是振幅,复数的辐角代表初相位
通过一个复数数组(复数的模代表的是振幅,复数的辐角代表初相位)经过逆向傅里叶变换得到合成的函数值数组
案例:针对合成波做快速傅里叶变换,得到一组复数序列;再针对该复数序列做逆向傅里叶变换得到新的合成波并绘制。
案例:针对合成波做快速傅里叶变换,得到分解波数组的频率、振幅、初相位数组,并绘制频域图像。
# 得到分解波的频率序列 # 复数的模为信号的振幅(能量大小)
含噪信号是高能信号与低能噪声叠加的信号,可以通过傅里叶变换的频域滤波实现降噪。
通过FFT使含噪信号转换为含噪频谱,去除低能噪声,留下高能频谱后再通过IFFT留下高能信号。
案例:基于傅里叶变换的频域滤波为音频文件去除噪声。
生成服从特定统计规律的随机数序列。
二项分布就是重复n次独立事件的伯努利试验。在每次试验中只有两种可能的结果,而且两种结果发生与否互相对立,并且相互独立,事件发生与否的概率在每一次独立试验中都保持不变。
# 产生size个随机数,每个随机数来自n次尝试中的成功次数,其中每次尝试成功的概率为p。
二项分布可以用于求如下场景的概率的近似值:
# 产生size个随机数,每个随机数t为在总样本中随机抽取nsample个样本后好样本的个数,总样本由ngood个好样本和nbad个坏样本组成
# 产生size个随机数,服从标准正态(期望=0, 标准差=1)分布。 # 产生size个随机数,服从正态分布(期望=1, 标准差=10)。
联合间接排序支持为待排序列排序,若待排序列值相同,则利用参考序列作为参考继续排序。最终返回排序过后的有序索引序列。
案例:先按价格排序,再按销售量倒序排列。
按照实部的升序排列,对于实部相同的元素,参考虚部的升序,直接返回排序后的结果数组。
若有需求需要向有序数组中插入元素,使数组依然有序,numpy提供了searchsorted方法查询并返回可插入位置数组。
调用numpy提供了insert方法将待插序列中的元素,按照位置序列中的位置,插入到被插序列中,返回插入后的结果。
scipy提供了常见的插值算法可以通过 一定规律插值器函数。若我们给插值器函数更多的散点x坐标序列,该函数将会返回相应的y坐标序列。
直观地说,对于一个给定的正实值函数,在一个实数区间上的定积分可以理解为坐标平面上由曲线、直线以及轴围成的曲边梯形的面积值(一种确定的实数值)。
利用微元法认识什么是积分。
scipy.ndimage中提供了一些简单的图像处理,如高斯模糊、任意角度旋转、边缘识别等功能。