plt、np、pd、talib、scipy、sklearn常用API总结
一、matplotlib
- import matplotlib.pyplot as plt
- plt.figure(figsize=(20, 8), dpi=80) 创建画布
fig, axes = plt.subplots(nrows=1, ncols=2, figsize=(), dpi=) 多坐标系 - plt.savefig(filename) 保存图片
- plt.plot(x_iter, y_iter, label=’’, color=‘r’, linestyle=’:’, linewidth=10) 折线图
linestyle: -实线 --虚线 -.点划线 :点虚线 ’ '空格
color: r g b w c m y k
ax.plot() 多坐标系 - plt.xticks(x_ticks, x_show, size=, color=) x坐标轴显示样式
ax.set_xticks() 多坐标系
ax.set_xticklabels() - plt.yticks()
- plt.xlabel(‘name’, color=, size=) x轴命名
ax.set_xlabel() 多坐标系 - plt.ylabel()
- plt.title(‘name’, size=) 图标题
plt.set_title() 多坐标系 - plt.legend(loc=‘best’) 图线说明
ax.legend() 多坐标系 - plt.show() 显示画
- plt.bar(x, y, color=, label=, width=0.3) 柱状图
- plt.hist(x, bins=int, label=, normed=1, color=) 直方图:bins组距,normed:1频率,0频数
- plt.grid(True, linestyle=, alpha=0.5) 直方图网格
- plt.pie(x, labels=[],autopct=’%1.2f%%’, colors=[]) 饼状图
- plt.axis(‘equal’) 饼状图显示正圆
- plt.annotate(‘注释’, size=, xy=(30,1), arrowprops=dict(arrowstyle=’->’), xytext=(20,7))
箭头注释: xy:箭头指向坐标, arrowprops:箭头样式, xytext:文本位置 - plt.text(10, 3, ‘注释’, size=, color=) 文本注释
- from matplotlib.finance import candlestick_ochl
- fig, axes= plt.subplots(nrows=1, ncols=1, figsize=(20, 8), dpi=100)
- candlestick_ochl(axes, val, colorup=‘r’, colordown=‘g’, width=0.3) k线图
val:索引、开盘价、收盘价、最高价、最低价 - plt.scatter() 散点图
二、numpy
- import numpy as np
- np.array(arr, dtype=np.float32) 创建一组数据并指定类型
np.bool np.int np.int8 np.int16 np.int32 np.uint8 np.folat64 np.string_ - arr.dtype 数据类型
- arr.shape 数组维度元祖
- arr.flags 内存布局信息
- arr.ndim 数组维数
- arr.size 元素数量
- arr.itemsize 一个元素长度
- arr.nbytes 总字节
- np.empty([3,4]) 创建3 X 4
- np.empty_like()
- np.ones([3,4]) 创建3 X 4的全为1的数组
- np.zeros() 全为 0
- np.full([3,4],i) 全为i
- np.full_like()
- np.ones_like()
- np.zeors_like()
- np.asarray(a) 引用
- np.copy(a) 拷贝数据
- np.linspace(start, stop, bins, dtype) 生成等间隔数组
- np.arange(start, stop, step, dtype) 生成等步长的数组
- np.random.rand()
- np.random.randint()
- np.random.uniform()
- np.random.normal(均值,标准差, (3,4))生成正态分布数组
- 方差
- 标准差
- arr[0, 0] arr[0, :10] arr[:10, : 10] 数组的索引
- arr.reshape(维度) 返回一个新形状数组
- arr.resize(维度) 改变arr的形状
- arr.flatten() 返回一个一维数组
- arr.astype(np.int32) 改变数据类型
- np.round(arr, 4) 修改arr小数位数为4
- arr.T 置换
- arr.tostring() 返回字符类型
- arr.tobytes() 返回字节类型
- arr > 1 判断数组中数据是否大于1,返回bool类型的数组
- arr[arr>1] 返回所有大于1的数据
- arr[arr>1] = 10 重新赋值
- np.all(arr>0) 判断所有数据都大于0
- np.unique(arr) 返回无重复的数组
- np.where(arr > 0, 1, 0) arr中大于0的数据显示1,否则显示0
- np.where(np.logical_and(arr>0.5, arr<1), 1, 0) arr中大于0.5并且小于1的数据显示为1,否则显示0
- np.where(np.logical_or(arr>0.5, arr<-1), 1, 0) arr中大于0.5或者小于-1的数据显示为1否则0
- np.max(arr, axis=1) 统计最大值, axis=1行内比较,0列比较
- np.min(arr, axis=1) 最小值
- np.median(arr, axis=) 平均值
- np.mean(arr, axis=) 平均值
- np.std(arr, axis) 标准差
- np.var(arr, axis) 方差
- np.sum(arr, axis=1) 求和
- np.argmax(arr, axis=1) 最大值出现的位置
- np.argmin(arr, axis=1) 最小值出现的位置
- 数组间运算
相应的维度相等或其中一个为1 - np.mat(arr) 讲数组转化成矩阵
- np.matmul( a, b) 矩阵乘法运算(M行,N列)X (N行,L列) = (M行,L列)
- np.concatenate([arr1, arr2], axis=1) 行合并,axis不写或0为列合并
- np.hstack([arr1, arr2]) 行合并
- np.vstack([arr1, arr2]) 列合并
- np.split( arr, 3, axis=0) 列分割
- np.split(arr, 3, axis=1) 行分割
- np.exp(x) e^x
- arr.tolist() 数组转列表
- arr.tobytes() 数组转字节
- np.percentile(ndarray, percent) 得到百分位数
ndarray: numpy格式
percent: 比如98,单位%
三、pandas
- import pandas as pd
- pd.DataFrame(arr, index=, columns=) 创建二维数据, 行索引index,列索引columns
- pd.date_range(‘2017-01-01’, end=None, periods=500, freq=‘B’) 生成从2018-01-01起500天的日期,不含周末
- arr.shape 查看具体维度
- arr.dtypes 查看类型
- arr.ndim 查看维数
- arr.index 查看行索引
- arr.columns 查看列索引
- arr.values 查看值
- arr.T 置换
- arr.head(5) 显示前5行,不写数字默认5行
- arr.tail(5) 显示后5行
- arr.index = ater 索引整体修改,只能整体修改
- arr.columns = ater
- arr.reset_index(drop=True) 重置索引,True删掉原索引,False保留原索引
- arr.set_index([‘某一列’]) 以某一列设置新索引
- arr.set_columns()
- pd.Series(arr, index=) 创建一维数据
- arr[列名][行名] 列行索引,只能先列后行
- arr.loc[‘列名1’ (:‘列名2’), ‘行名’(:‘行名’)]
- arr.iloc[i:i, i:i]
- arr.ix[] 20和21的合并用法
- 20、21、22可直接跟=赋值
- arr.sort_values(by=[列名1, 列名2], ascending=False) 排序,ascending为True从大到小
- sort_index(ascending=bool) 按照索引排序
- arr.describe() 计算每列的平均值、标准差、最大值、最小值、分位数
- arr.count(axis=0/1) 统计
- arr.sum(axis=) 求和
- arr.mean(axis=) 求平均
- arr.mad(axis=) 平均绝对差
- arr.median(axis=) 中值
- arr.min(axis=) 最小
- arr.max(axis=) 最大
- arr.mode(axis=)
- arr.prod(axis=) 积
- arr.abs(axis=) 绝对值
- arr.std(axis=) 标准差
- arr.var(axis=) 方差
- arr.idxmax(axis=) 最大索引
- arr.idxmin(axis=) 最小索引
- arr.cumsum(axis) 前n个数的和
- arr.cummax(axis=) 前n个数最大值
- arr.cummin(axis=) 前n最小
- arr.cumprod(axis=) 前n的积
- arr.plot(figsize=(20,8)) plt.show() 画图
- arr[arr[列名]>0] 返回列值大于0的所有arr数据
- arr[(arr[列名1]>0) & (arr[列名2]>15)] 于
- arr[(arr[列名1]>0) | (arr[列名2]>15)] 或
- arr[列名].isin([1,2,3]) 判断在不在1,2,3中
- arr.add(1) 加1
- arr1.sub(arr2) 加
- arr.apply(lambda ,axis=1) 自定义运算
- pd.read_csv(filepath, usecols=[列名], sep=",", delimiter=None) 读取文件
- arr.to_csv(filename, columns=[列名], index=False, header=True, mode=‘w’) 存储
- pd.read_hdf(fole, key=None) 读取h5文件
- arr.to_hdf(name, key=‘x’) 存储
- read_ to_ :csv, json, html, clipboard, excel, hdf, feather, parquet, msgpack, stata, sas, pickle, sql, gbq
- arr.dropna() 删除缺失行
- arr.fillna(value, inplace=True) 把nan的位置填充为value, inplace为True在原数据上改动,False得到新数据
- arr.replace(to_replace=‘原value’, value=‘新value’) 替换数据
- pd.qcut( arr, 10) 对一维数据分组10份
- p_counts = pd.cut(arr, bins) bins是分区区间
- pd.value_counts() 统计分组次数
- pd.get_dummies(p_counts, prefix=‘rise’) 哑变量矩阵
- pd.concat([arr1, arr2], axis=1) 合并,1:行 0:列
- pd.merge(arr1, arr2, how=“left”, on=[列名1,列名2]) 链接合并 how:inner, left, right, outer
- pd.crosstab(arr1. arr2) 交叉数据
- arr.plot(kind=‘bar’, stacked=True, figsize=(), width=0.2, fontsize=30) 生成交叉图表
- arr.pivot_table([列名1], index=[列名2]) 透视表
- arr.groupby([列名1,列名2], as_index=False) .max() 分组聚合
- data.resample(‘W’).first()
周W、月M、季度Q、分钟min、3天3D、年Y
first last max min mean - pd.datetime(“2013-1-1”) 生成时间
- pd.datetime([“2013-1-1”, “2000-4-4”, np.nan, “2018-9-9”]) 生成时间序列
- pd.DatetimeIndex([“2013-1-1”, “2000-4-4”, np.nan, “2018-9-9”)
- date.day
- date.weekday
- date.month
- date.year
- from pandas.tseries.offsets import MonthEnd, Day, Minute, MonthBegin, YearEnd, Hour, YearBegin
Hour(1) + Minute(30) - date.shift(n, freq=‘3D’) DatetimeIndex时间的整体偏移
D每日
B每工作日
H T S 时分秒
M每月最后一天
BM每月最后一个工作日
WOM-1MON每月第一个星期一 - pd.date_range(start=, end=, periods=, freq=,tz=, normalize=,name=,closed=)
- pd.rolling_mean(arg, window=n, min_periods=,freq=,center=False,how=).plot()
- pd.ewma(arg, span=n).plot()
- pd.rolling_var(data, window=n).plot()
- pd.rolling_std(data, window=n).plot()
- pd.rolling_corr(data1, data2, window=n).plot()
- pd.scatter_matrix(DataFrame, figsize=).plot()
- data.query(“x > 1 & y < 2”) 缩小数据集
- data.rename(index={原索引:新索引}, colums={原索引:新索引}) 更改索引名字
- arr.tolist() 数组转列表
- arr.tobytes() 数组转字节
四、talib
- import talib
- macd,macdsignal,macdhist=talib.MACD(close,fastperiod=12,slowperiod=26,signalperiod=9)
传入参数必须是ndarray格式
macd:快线(DIF)
macdsignal:慢线(DEA)
macdhist:MACD柱状图值(bar) - real = talib.RSI(close, timeperiod=14)
传入参数必须是ndarray
real:返回固定区间内的柱状图
五、scipy
- from scipy.stats import pearsonr 导入皮尔逊相关系数
- pearsonr(arr1, arr2)
return : 第一个值相关性,第二个值不用管
六、sklearn
特征抽取(字典、文本)
- sklearn.feature_extraction.DictVectorizer(sparse=True,…)
字典特征提取
dic.fit_transform(X)
dic.inverse_transform(X) X:array数组或者sparse矩阵 返回值:转换之前数据格式
dic.get_feature_names() 返回类别名称 - sklearn.feature_extraction.text.CountVectorizer(stop_words=[])
文本特征提取
dic.fit_transform(X)
dic.inverse_transform(X) X:array数组或者sparse矩阵 返回值:转换之前数据格式
dic.get_feature_names() 返回单词列表 - sklearn.feature_extraction.text.TfidfVectorizer()
文本特征提取,频率 - import jieba 导包中文处理
- jieba.cut(text) 分割中文
text : 中文字符串
特征预处理(标准化、归一化)
-
sklearn.preprocessing.MinMaxScaler(feature_range=[2,3])
归一化 -
sklearn.preprocessing.StandardScaler()
标准化
降维-特征选择(过滤式:方差选择法、相关系数,嵌入式:决策树、正则化)
- sklearn.feature_selection.VarianceThreshold(threshold=方差)
低方差选择法 - scipy.stats.pearsonr(arr1, arr2)
皮尔逊相关系数
return : 第一个值相关系数,第二个值不用管
降维-主成分分析(PCA)
- sklearn.decomposition.PCA(n_components=0.95)
n_components: 小数:保留百分比 整数:保留多少个特征
数据集(回归数据集、分类数据集)
- sklearn.model_selection.train_test_split(x,y, test_size=0.3)
划分数据集
return : x_train, x_test, y_train, y_test - sklearn.datasets.load_iris() 鸢尾花数据集(分类)
- sklearn.datasets.load_digits() 数字数据集(分类)
- sklearn.datasets.fetch_20newsgroups(subset=‘all’)
新闻分类数据集
subset: all所有, train训练集,test测试集 - sklearn.datasets.load_boston() 波士顿房价数据集
- sklearn.datasets.load_diabetes() 糖尿病数据集
监督学习-分类(K-近邻KNN、贝叶斯、决策树、集成学习随机森林、逻辑回归)
-
sklearn.neighborsKNeighborsClassifier(n_neighbors=5)
KNN算法, n_neighbors默认5
knn.fit(x_train, y_train) 训练模型
knn.predict(x_test) 预测测试集,得到预测测试集目标值
knn.score(x_test, y_test) 得到准确率 -
sklearn.naive_bayes.MultinomialNB(alpha=1)
alpha拉普拉斯平滑系数 -
sklearn.tree.DecisionTreeClassifier(criterion=‘gini’,max_depth=3)
决策树
criterion:默认gini系数,也可以是信息增益熵’entropy’
max_depth:树的深度 -
信息熵
-
信息增益
-
条件熵
-
sklearn.tree.export_graphviz(estimator, out_file=‘文件名.dot’, feature_names=[特征名字])
导出DOT格式树结构 -
dot -Tpng tree.dot -o tree.png 转化dot为png图片
-
sklearn.ensemble.RandomForestClassifier(n_estimators=10,criterion=‘gini’,max_depth=3, max_feature=‘auto’, bootstrap=True, min_samples_split=2)
随机森林分类器
n_estimators:森林里树木数量10,100,200
criterion: 默认gini
max_depth: 树最大深度
max_feature: auto, sqrt, log2, None
bootstrap: 默认True,放回抽样
min_samples_split: 节点划分最少样本数
min_samples_leaf: 叶子节点最小样本数 -
sklearn.linear_model.LogisticRegression(solver=‘liblinear’, penalty=‘l2’, C=1)
逻辑回归
solver: 优化求解方式(默认liblinear迭代优化损失函数, sag:随机平均梯度下降)
penalty: 正则化种类
C: 正则化力度 -
**函数-sigmoid函数
-
对数似然损失
-
sklearn.metrics.classification_report(y_true, y_pred, labels=[], target_names=[2, 4])
精确率和召回率分类评估报告
labels: 指定类别对应的数字
target_names: 目标类别名字
return : 返回每个类别的精确率和召回率 -
TPR = TP / (TP + FN) 真阳性率
所有真实类别为1的样本中,预测类别为1的比例 -
FPR = FP / (FP + FN) 伪阳性率
所有真实类别为0的样本中,预测类别为1的比例 -
ROC曲线
-
sklearn.metrics.roc_auc_score(y_true, y_score)
AUC指标
y_true: 每个样本真实类别,必须位0(反例),1(正例)标记
y_score: 每个样本预测的概率值
监督学习-回归(线性回归、均方误差回归损失、岭回归Ridge)
- 损失函数-最小二乘法
- 优化算法-正规方正
- 优化算法-梯度下降
- sklaern.linear_model.LinearRegression(fit_intercept=True)
通过正规方程优化的线性回归
fit_intercept: 是否计算偏置
lr.coef_ 得到回归系数(权重)
lr.intercept_ 得到偏置 - sklearn.linear_model.SGDRegressor(loss=‘squared_loss’, fit_intercept=True, learning_rate=‘invscaling’, eta0=0.01)
通过SGD(梯度下降)优化的线性回归
loss: 损失类型
fit_intercept: 偏置
learning_rate: 学习速率填充
‘constant’: eta = eta0
‘optimal’: eta=eta0/(alpha * (t + t0)) 默认
‘invscaling’: dta=dta0/pow(t, power_t)
sgd.coef_ 得到回归系数
sgd.intercept_ 得到偏置 - sklearn.metrics.mean_squared_error(y_true, y_pred)
均方误差回归损失
y_true: 真实值
y_pred: 预测值 - sklearn.linear_model.Ridge(alpha=1, fit_intercept=True, solver=‘auto’, normalize=False)
岭回归-带有L2正则化的线性回归
alpha: 正则化力度,也叫λ(0-1,1-10)
fit_intercept: 偏置
solver:
‘auto’: 会根据数据自动选择优化方法、
‘sag’: 如果数据集、特征都比较大,选择该随机梯度下降优化
normalize: 数据是否自动进行标准化
rd.coef_ 得到回归权重
rd.intercept_ 得到回归偏置 - sklearn.linear_model.RidgeCV(_BaseRidgeCV, RegressorMixin)
具有L2曾泽华的线性回归,可以交叉验证
无监督学习(聚类:K-means、 降维:PCA)
- sklearn.cluster.KMeans(n_clusters=8, init=‘k-means++’)
K-means聚类
n_clusters: 开始聚类的中心数量
init: 初始方法,默认k-means++
labels_: 默认标记的类型,可以和真实值比较
km.fit
km.predict 标记 - 轮廓系数
对于每个点i 为已聚类数据中的样本 ,b_i 为i 到其它族群的所有样本的距离平均值的最小值,a_i 为i 到本身簇的距离平均值。最终计算出所有的样本点的轮廓系数平均值 - sklearn.metrics.silhouette_score(X, labels)
平均轮廓系数性能评估指标
X: 特征值
labels:被聚类标记的目标值
模型选择与调优(交叉验证(CrossValidation)-超参数搜索-网格搜索GridSearch)
- sklearn.model_selection.GridSearchCV(estimator, param_grid=超参数,cv=3)
estimator 估计其对象
param_grid:估计器的超参数
cv:分为几折训练集和验证机
cv.fit
cv.score(x_test, y_test) 准确率
cv.best_score_ 交叉验证最好结果
cv.best_estimator_ 最好的模型
cv.cv_results_ 每次交叉验证后的准确率
模型的保存和加载
- from sklearn.externals import joblib 导包
- joblib.dump(estimator, ‘test.pkl’) 保存
- joblib.load(‘test.pkl’) 加载