Python向量化模块

1. Numpy模块

1.1 Numpy介绍
1.1.1 主要功能

  • ndarray:一个多维数组结构,高效且节省空间
  • 无需循环对数组数据进行快速运算的数学函数
  • 线性代数、随机数生成、傅里叶变换

1.1.2 ndarray——多维数组对象

  • 创建ndarray:np.array(array_like)
  • 数组与列表的区别:① 数组对象内的元素类型必须相同;② 数组大小不可修改

1.1.3 ndarray数据类型
数组中可以存放字符串类型的数据,但是一般都是存放数字,用于批量运算。

  • 布尔型:bool_
  • 整型:int_、int8、int16、int32、int64
  • 无符号整型:uint8、uint16、uint32、uint64
  • 浮点型:float_、float16、float32、float64
  • 复数型:complex_、complex64、complex128

1.2 基本方法
1.2.1 创建数组

  • array():将列表转换为数组,可选择显式指定dtype
  • arange():range的numpy版,支持浮点数
  • linspace():类似arange(),第三个参数为数组长度(画函数图像时常用)
  • zeros():根据指定形状和dtype创建全0数组,默认类型为浮点数
  • ones():根据指定形状和dtype创建全1数组
  • empty():根据指定形状和dtype创建空数组(之前内存留的随机值)
  • eye():根据指定边长和dtype创建单位矩阵

1.2.2 批量运算

  • 数组和标量之间的运算:a+1、a*3、1//a、a**0.5、a>5
  • 同样大小数组之间的运算:a+b、a/b、a**b、a%b、a==b

1.2.3 索引和切片

  • 数组中不仅能用 a[3][5] 进行多维数组的索引,还可用 a[2,3] 进行索引
  • 数组切片是新创建一个数组,列表切片并没有创建新的列表
  • 二维数组进行切片时,a[0:2][0:2] 相当于对行进行了两次切片操作,a[0:2,0:2] 才是对行列都进行切片

1.2.4 布尔型索引

  • 返回数组a中所有大于5的值组成的数组:a[a>5]
  • 原理:将同样大小的布尔数组传进索引,会返回一个由所有True对应位置的元素的数组
  • 返回数组a中大于5的偶数:a[(a>5)&(a%2==0)]
  • 返回数组a中大于5的数和偶数:a[(a>5)|(a%2==0)]

1.2.5 花式索引

  • 二维数组a,返回第一列和第三列 a[:,[1,3]]
  • 二维数组a,返回第0行大于5的数 a[0,a>5]
  • 二维数组a,a[[1,3],[1,3]] 返回的是第一列第一行的值,和第三列第三行的值。若想返回第一行和第三行,第一列和第三列组成的数组,需要多次索引 a[[1,3],:][:,[1:3]]

1.2.6 通用函数
指能同时对数组中所有元素进行运算的函数,在numpy库中进行调用(np.)

  • 一元函数:abs、sqrt、exp、log、ceil(向上取整)、floor(向下取整)、rint/round(向外取整)、trunc(向零取整)、modf(将小数部分与整数部分分开为两个数组组成的元组)、isnan(nan时返回True)、isinf(inf时返回True)、cos、sin、tan
  • 二元函数:add、substract、multiply、divide、power、mod、maximum、minimum

浮点数特殊值:

  • nan(Not a Number):不等于任何浮点数,且 nan != nan,0/0返回nan
  • inf(infinity):比任何浮点数都大,1/0返回inf
  • Numpy中创建特殊值:np.nan、np.inf
  • 在数据分析中,nan常被用作表示数据缺失值,a[~(np.isnan(a))]提取数组中非缺失值

1.2.7 数学和统计方法
方法直接通过对象进行调用(a.):sum、mean、std(标准差)、var(方差)、min、max、argmin、argmax

1.2.8 随机数生成
随机数函数在np.random子包内

  • rand:给定形状产生随机数组(0到1之间的数)
  • randint:给定形状产生随机整数
  • choice:给定形状产生随机选择(从数组中随机选择n个数)
  • shuffle:与random.shuffle相同(打乱数组)
  • uniform:给定形状按平均分布产生随机数组

2. pandas模块

2.1 pandas简介
panda是个强大的Python数据分析工具包,是基于Numpy构建的,其主要功能有:

  • 具备对其功能的数据结构DataFrame、Series
  • 集成时间序列功能
  • 提供丰富的数学运算和操作
  • 灵活处理缺失数据

2.2 Series一维数据对象
2.2.1 Series介绍

  • Series是一种类似于一维数组的对象,由一组数据和一组与之相关的数据标签(索引)组成
  • 创建方式:① pd.Series(list);② pd.Series(list,index=list2);③ pd.Series(map);④ pd.Series(int,index=list)
  • 获取值数组和索引数组:values属性和index属性
  • Series类似列表和字典的结合体

2.2.2 Series使用特性

  • Series支持array的特性:① 可从ndarray创建:Series(arr);② 可以同ndarray一样做标量运算、两个Series运算、索引、切片、布尔值过滤;③ 可用numpy的通用函数(np.)
  • Series支持字典的特性:① 可从字典创建:Series(dic);② 可通过in运算判断Series中是否存在该键(index);③ 可通过标签对value进行索引 sr[‘a’]
  • 对Series进行遍历时,得到的是value而不是标签(与字典不同)
  • 通过标签对Series进行切片时,前后都包括(相比于用下标切片前包后不包)
  • 如果Series中的标签是整型数据,则通过整数索引时是面向标签的 sr[1],使用Series的loc属性可将索引解释为标签 sr.loc[1],iloc属性可将索引解释为下标 sr.iloc[1]
  • 数据对齐:对两个Series对象进行运算时,会按照标签对其进行计算。两个对象不共有的标签默认返回值为nan,可通过pd.(add、sub、div、mul)指定不存在标签的填充值。
  • 对缺失数据(nan)进行处理:① 通过 sr[sr.notnull()] 或 sr.dropna() 删除缺失数据;② 通过 sr.fillna(0) 或 sr.fillna(sr.mean()) 填充缺失值。注意:处理后原Series对象本身不变,要用新对象进行接收

2.3 DataFrame二维数据对象
2.3.1 DataFrame介绍

  • DateFrame是一个表格型的数据结构,含有一组有序的列,可以看做是由Series组成的字典,且共用行索引
  • 创建方式:① pd.DataFrame({‘one’:list1,‘two’:list2});② pd.DataFrame({‘one’:sr1,‘two’:sr2})(Series中没有的标签返回nan)
  • 从csv文件中读取和写入:df.read_csv(‘filename.csv’);df.to_csv()

2.3.2 DataFrame常用属性

  • index:获取行索引
  • columns:获取列索引
  • T:转置
  • values:获取值的二维数组
  • describe():数据统计汇总(每列的均值、标准差等)

2.3.3 使用

  • 索引:① df[‘one’][‘a’] 先列后行(不推荐使用);② df.loc[‘a’,‘one’] 按标签先行后列;③ df.iloc[1,2] 按位置先行后列
  • 数据对齐:DataFrame对象在运算时,其行索引和列索引分别对齐
  • df对象和sr对象处理缺失值基本相同,使用 dropna() 时,默认会将nan所在的一行全部删除;使用 dropna(how=‘all’),一行全为nan时才会删除;使用 dropna(axis=1) 删除列
  • mean(axis=0.skipna=False):对列(行)求平均值(忽略缺失值)
  • sum(axis=0):对列(行)求和
  • sort_index(axis,…,ascending=False):对列(行)索引排序,默认降序
  • sort_values(by,axis,ascending):按某一列(行)的值排序,nan统一放在最后
  • 同样可使用numpy的通用函数

2.4 时间对象处理
2.4.1 时间对象类型

  • 时间戳:特定时刻
  • 固定时期:如2020年12月
  • 时间间隔:起始时间——结束时间
  • Python标准库处理时间序列对象:datetime —— datetime.datetime.strptime()
  • 灵活处理时间对象:dateutil —— dateutil.parser.parse()
  • 成组处理时间对象:pandas —— pd.to_datetime([list])
  • 产生时间对象数组 :pd.date_range

2.4.2 pd.date_range主要参数

  • start:开始时间
  • end:结束时间
  • periods:时间长度
  • freq:时间频率,默认为D,可选H(our),W(eek),B(usiness),SM,T,S,A等

2.4.3 时间序列

  • 时间序列就是以时间对象为索引的Series或DataFrame
  • datetime对象作为索引时是存储在DatetimeIndex对象中的
  • 时间序列可传入“年”或“年月”作为切片方式
  • 时间序列可传入日期范围作为切片方式
  • 使用 resample() 方法对时间序列重新采样
sr = pd.Series(np.arange(100), index=pd.date_range('2020-01-01', periods=100))
print(sr['2020-03'])  # 输出index在2020年3月的切片
print(sr['2020-03':'2020-04'])  # 输出index在2020年3月到4月的切片
print(sr.resample('M').sum())  # 求每月的value和

2.5 文件处理
2.5.1 使用

  • 数据完成的常用格式为 .csv,以某间隔符分割数据
  • pandas可从文件名、URL、文件对象中加载数据
  • read_csv:默认分隔符为逗号
  • read_table:默认分隔符为制表符
  • to_csv:写入到csv文件
  • 使用 read_excel 读取excel文件时需要下载 xlrd 模块

2.5.2 read_csv、read_table主要参数(pandas中的函数)

  • sep:指定分隔符,可用正则表达式,如’\s+'表示任意长度的空字符
  • header=None:指定文件无列名
  • name:指定列名
  • index_col:指定某列作为索引
  • skip_row:跳过某些行
  • na_values:指定某些字符串表示缺失值
  • parse_dates:指定某些列是否被解析为日期,类型为布尔值或列表
pd.read_csv('1234.csv', index_col='date')  # 将date列作为行索引,默认第一行为列索引
pd.read_csv('1234.csv', header=None, names=list('abcde'))  # 将abcde分别作为列索引
pd.read_csv('1234.csv', header=None, skiprows=[1, 2, 3])  # 跳过123行
pd.read_csv('1234.csv', header=None, na_values=['None', 'nan'])  # 指定缺失值形式
pd.read_csv('1234.csv', index_col='date', parse_dates=True)  # 将文件中所有时间类字符串转换为时间对象
pd.read_csv('1234.csv', index_col='date', parse_dates=['date'])  # 将date列转换为时间对象

2.5.3 to_csv主要参数(DataFrame的方法)

  • sep:指定文件分隔符
  • na_rep:指定缺失值转换的字符串,默认为空字符串
  • header=False:不输出列索引一行
  • index=False:不输出行索引一列
  • columns:指定输出的列传入列表

3. Matplotlib模块

3.1 介绍

  • Matplotlib是一个强大的Python绘图和数据可视化的工具包
  • 引用方法:import matplotlib.pyplot as plt
  • 绘图函数:plt.plot() 绘制折线图
  • 显示图像:plt.show()

3.2 plot函数
3.2.1 plot可用参数
与Matlab中的plot函数相同:Matlab常用函数

3.2.2 基本使用

  • 在一个坐标轴中画多条折线:多次调用 plot() 后再调用 show()
  • 设置图像标题:plt.title(“my plot”)
  • 设置x轴、y轴名称:plt.xlabel(“x轴”)
  • 设置x轴、y轴范围:plt.xlim(0,5)
  • 设置x轴、y轴刻度:plt.xticks([0,2,4]) 刻度只显示传入的值;plt.xticks([0,2,4],[‘a’,‘b’,‘c’]) 将刻度替换为给定值
  • 设置曲线图例:plt.legend() 可配合plot中的label参数使用,显示曲线对应的label值
  • 对于DataFrame或Series对象,直接调用 df.plot() 可绘制每列的折线图

3.2.3 画布与子图

  • 创建画布figure:fig=plt.figure()
  • 向画布上添加子图subplot:ax1=fig.add_subplot(2,2,1)
  • 在子图上绘制:ax1.plot()
  • 调整子图间距:subplots_adjust(left,bottom,right,top,wspace,hspace)
  • 显示画布上的图像:plt.show() 或 fig.show()

3.3 绘制其他类型图

  • plt.plot(x,y,fmt,…):坐标图
  • plt.boxplot(data,notch,position):箱线图
  • plt.bar(left,height,width,bottom):条形图
  • plt.barh(width,bottom,left,height):横向条形图
  • plt.polar(theta,r):极坐标图
  • plt.pie(data,explode):饼图
  • plt.psd(x,NFFT=256,pad_to,Fs):功率谱密度图
  • plt.specgram(x,NFFT=256,pad_to,F):谱图
  • plt.cohere(x,y,NFFT=256,Fs):X-Y相关性函数
  • plt.scatter(x,y):散点图
  • plt.step(x,y,where):步阶图
  • plt.hist(x,bins,normed):直方图

3.4 绘制K线图

  • mplfinance包中有许多绘制金融相关图的函数接口:mplfinance函数
  • 绘制K线图:mplfinance.polt(df,type=‘candle’) 函数
  • 绘制K线图时,行名需要为时间戳,列名需要有Open、High、Low、Close、Volume五列
daily = pd.read_csv('mydata.csv', index_col=0, parse_dates=True)
mpf.plot(daily,type='candle')
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值