数据挖掘基础笔记
目录
数据获取 --> 探索分析与可视化 --> 预处理理论 --> 分析建模 --> 模型评估
一、数据获取手段
1.数据仓库
数据库:
面向业务存储
针对应用 OLTP--online transaction processing
组织规范
数据仓库:
面向主题存储
针对分析 OLAP--online analysis processing
可能冗余,相对变化大,数据量大
2.检测与抓取
通过传感器获取
通过抓取网页、接口、文件等获取
3.填写、埋点、日志
用户填写信息
app或网页埋点:
特点流程的信息记录点
操作日志
二、数据学习网站
1.数据竞赛网站:
Kaggle: Google
天池:阿里云
2.数据集网站
ImageNet
Open Image
3.各领域统计数据
统计局
政府机构
公司财报
day01
一、数据挖掘基础环境安装与使用
1.创建虚拟环境
python2:mkvirtualenv 虚拟环境名
python3:mkvirtualenv -p python3 虚拟环境名
2.使用pip命令安装
pip install -r requirements.txt
matplotlib==2.2.2
numpy==1.14.2
pandas==0.20.3
TA-Lib==0.4.16
tables==3.4.2
jupyter==1.0.0
3.中文显示问题解决
1.下载中文字体(黑体,看准系统版本)
如下载 SimHei 字体(或者其他的支持中文显示的字体也行)
2.安装字体
linux下:拷贝字体到 usr/share/fonts 下:
sudo cp ~/SimHei.ttf /usr/share/fonts/SimHei.ttf
windows和mac下:双击安装
3.删除~/.matplotlib中的缓存文件
# 缓存文件也可能在.cache中
cd ~/.matplotlib 或 cd ~/.cache/matplotlib
rm -r *
修改配置文件matplotlibrc
vi ~/.matplotlib/matplotlibrc
将文件内容修改为:
font.family : sans-serif
font.sans-serif : SimHei
axes.unicode_minus : False
4.Jupyter Notebook的使用
1)使用命令
# 进入虚拟环境
workon ai
# 输入命令
jupyter notebook
2) cell操作
cell:一对In Out会话被视作一个代码单元,称为cell
Jupyter支持两种模式:
编辑模式(Enter)
命令模式下回车Enter或鼠标双击cell进入编辑模式
可以操作cell内文本或代码,剪切/复制/粘贴移动等操作
命令模式(Esc)
按Esc退出编辑,进入命令模式
可以操作cell单元本身进行剪切/复制/粘贴/移动等操作
3)快捷键操作
两种模式通用快捷键
Shift+Enter,执行本单元代码,并跳转到下一单元
Ctrl+Enter,执行本单元代码,留在本单元
cell行号前的 * ,表示代码正在运行
命令模式:按ESC进入
Y,cell切换到Code模式
M,cell切换到Markdown模式
A,在当前cell的上面添加cell
B,在当前cell的下面添加cell
双击D:删除当前cell
Z,回退
L,为当前cell加上行号 <!--
Ctrl+Shift+P,对话框输入命令直接运行
快速跳转到首个cell,Crtl+Home
快速跳转到最后一个cell,Crtl+End -->
编辑模式:按Enter进入
多光标操作:Ctrl键点击鼠标(Mac:CMD+点击鼠标)
回退:Ctrl+Z(Mac:CMD+Z)
重做:Ctrl+Y(Mac:CMD+Y)
补全代码:变量、方法后跟Tab键
为一行或多行代码添加/取消注释:Ctrl+/(Mac:CMD+/)
屏蔽自动输出信息:可在最后一条语句之后加一个分号
4) markdown
# 一级标题
## 二级标题
...
- 一级缩进
- 二级缩进
-三级缩进
二、Matplotlib
1.Matplotlib
专门用于开发2D图表(包括3D图表)
使用起来及其简单
以渐进、交互式方式实现数据可视化
能将数据更直观的呈现
使数据更加客观、更具说服力
2.Matplotlib图像结构
1) 容器层
容器层主要由Canvas、Figure、Axes组成。
Canvas是位于最底层的系统层,充当画板:
Figure是Canvas上方的第一层,也是操作的应用层的第一层,充当画布:
Axes是应用层的第二层,充当画布上数据的绘图区:
# Axis(坐标轴):坐标系中的一条轴,包含大小限制、刻度和刻度标签
2)辅助显示层
主要包括:
Axes外观(facecolor)
边框线(spines)
坐标轴(axis)
坐标轴名称(axis label)
坐标轴刻度(tick)
坐标轴刻度标签(tick label)
网格线(grid)
图例(legend)
标题(title)等内容。
3)图像层
plt.plot()
plt.scatter()
plt.bar()
plt.hist()
plt.pie()
3.常见图形种类及意义
1) 折线图:
以折线的上升或下降来表示统计数量的增减变化的统计图
特点:能够显示数据的变化趋势,反映事物的变化情况。(变化)
2) 散点图:
用两组数据构成多个坐标点,考察坐标点的分布,判断两变量之间是否存在某种关联或总结坐标点的分布模式。
特点:判断变量之间是否存在数量关联趋势,展示离群点(分布规律)
3) 柱状图:
排列在工作表的列或行中的数据可以绘制到柱状图中。
特点:绘制连离散的数据,能够一眼看出各个数据的大小,比较数据之间的差别。(统计/对比)
4) 直方图:
由一系列高度不等的纵向条纹或线段表示数据分布的情况。 一般用横轴表示数据范围,纵轴表示分布情况。
特点:绘制连续性的数据展示一组或者多组数据的分布状况(统计)
5) 饼图:
用于表示不同分类的占比情况,通过弧度大小来对比各种分类。
特点:分类数据的占比情况(占比)
4.折线图(plot)与基础绘图功能---反应变化状况
1)matplotlib.pyplot模块
import matplotlib.pyplot as plt
2)折线图绘制与显示
1.创建画布,并设置属性
plt.figure(figsize(20, 8), dpi=80)
a.添加自定义x,y刻度
plt.xticks(x, **kwargs)
plt.yticks(y, **kwargs)
2.绘制折线图
plt.plot(x, y, color='r')
b.添加网格显示
plt.grid()
c.添加描述信息
plt.xlabel("x轴描述信息")
plt.ylabel("y轴描述信息")
plt.title("标题")
d.显示图例
plt.legend() 显示在右上角的说明
3.保存图片到指定路径
plt.savefig(path)---在plt.show()之前
4.显示图片
plt.show()
3)多个坐标系显示
plt.subplots(nrows=1, ncols=1, **fig_kw)
axes.set_方法名()
plt.函数名() 相当于面向过程的画图方法
axes.set_方法名() 相当于面向对象的画图方法
4) 应用场景
呈现公司产品(不同区域)每天活跃用户数
呈现app每天下载数量
呈现产品新功能上线后,用户点击次数随时间的变化
画各种数学函数图像
5.散点图---寻找变量之间的关系
plt.scatter()
6.柱状图---对比、统计
plt.bar()
7.直方图---分布状况
plt.hist()
直方图与柱状图的对比
柱状图---利于较小的数据集分析。
直方图---利于展示大量数据集的统计结果。
由于分组数据具有连续性,直方图的各矩形通常是连续排列,而柱状图则是分开排列。
8.饼图---不同类别的占比情况
plt.pie(x, labels=, autopct=, colors=[])
x:数量,自动算百分比
labels:每部分名称
autopct:占比显示指定%1.2f%%
colors:每部分颜色
添加axis保证饼图长宽一样
plt.axis('equal')
day02---Numpy
一、numpy的优势
python中的数值计算库
运行效率
ndarry 优势
内存块风格---科学计算效率高,但通用性比较低
并行化运算---向量化运算
底层由C语言实现---内部解除了GIL(全局解释器锁),其对数组的操作速度不受Python解释器的限制,效率远高于纯Python代码。
二、ndarray的属性
1.ndarray.shape---数组维度的元组
2.ndarray.ndim---数组维数
3.ndarray.size---数组中元素的数量
4.ndarray.dtype---数组元素的类型
np.bool
np.int64
np.float32
...
5.ndarray.itemsize---一个数组元素的长度(字节)
三、基本使用
1. 生成数组的方法
1.生成0和1的方法
np.zeros()
np.ones()
2.生成现有数组
np.array()
np.asarray() 浅拷贝
np.copy()
3. 生成固定范围的数组
np.arange(-10, 10, 2) 指定步长,左闭右开
np.linspace(-10, 10, 1000) 指定数量,左闭右闭
np.logspace()
4.生成随机数组
分布状况
均匀分布 random.uniform()
在每个区域概率相等
正态分布 random.normal()
1)定义
μ 平均值
σ 标准差
2)应用
身高、成绩等统计
3)标准差和方差
2.数组的索引、切片
3.修改形状
ndarray.reshape()
自动计算形状,进行形状改变
ndarray.resize()
对原始数组进行修改
ndarray.T 转置
3.3.4 修改类型
ndarray.astype(type)
数组本地化-序列化
tostring()
3.3.5 数组的去重
ndarray.unique()
四、ndarray运算
3.4.1 逻辑运算
布尔索引
通用判断函数
np.all() 只要传入的布尔值有一个False,最终就返回False
np.any() 只要传入的布尔值有一个True,最终就返回True
三元运算符
np.where()
复合逻辑需要结合 np.logical_and 和 np.logical_or 使用
3.4.2 统计运算
统计指标
min, max, median,mean, var, std
axis
0轴 1轴
np.argmax(temp, axis=)
np.argmin(temp, axis=)
3.4.3 数组间的运算
数组和数的运算
数组和数组间的运算
广播机制
维度相等
shape(其中一个对应为1)
矩阵运算
np.mat()
矩阵乘法运算
形状改变
运算规则---(M行,N列) x (N行,L列) = (M行,L列)
np.dot()---点乘
np.matmul()
五、合并和分割
1.合并
np.concatenate()
np.hstack()
np.vstack()
2.分割
np.split()
六、IO操作与数组处理
1.读取
genfromtxt()
2.缺失值处理
需要通过python代码处理,不推荐使用,pandas更擅长。
day03-day04---pandas
一、pandas介绍
1.优势
便捷的数据处理
读取文本方便
封装了Matplotlib、Numpy的画图和计算
2.特点
专门用于数据挖掘的开源库
3.DataFrame--数据帧、数据框
1)常用属性
shape---形状、大小
index---行索引
columns---列索引
values---值
T---转置
2)常用方法
head()---默认显示前5行,可传参显示多行
tail()---默认显示后5行,可传参显示多行
3)索引设置
修改行列索引---只能整体修改, data.index赋值
重设索引---reset_index(drop=False),drop默认为False,默认不删除原来的索引
按列设置新的索引---set_index(keys, drop=True)
keys---新的列索引列表
drop---默认为True,删除原来列
4)MultiIndex & Panel
MultiIndex---多级分层索引对象
index属性
names:levels名称
levels:每个level的元组值
Panel---存储3维数组的Panel结构
Pandas从0.20.0开始弃用
5)Series结构
结构:带行索引一维数组
创建Series:pd.Series()
常用属性:index,values
二、基本数据操作
1.索引操作
1)iloc 数字索引
直接进行索引:先列后行,不支持先行后列
2)loc 名字索引
只能指定行列索引的名字
3)ix 组合索引
将来会弃用
2.赋值操作
对数据进行重新赋值
3.排序
1)对内容进行排序
dataframe: df.sort_values(by,ascending=False)
series:series.sort_values(ascending=False)
2)对索引进行排序
df.sort_index()
series.sort_index()
三、DataFrame运算
1.算术运算
1) 运算符
+,-,*./
2) 运算函数
add(other)
sub(other)
2.逻辑运算
1) 运算符
< > || &
2) 运算函数
df.query(expr)
df.isin(values)
3.统计运算
1) describe()---直接得出很多统计结果
min,max,mean,median,var,std
2) 统计函数
sum()---求和
mean()---求平均值
median()---求中位数
min()/max()---最小/最大值
mode()---众数
abs()---绝对值
prod()---除法
std()---标准差
var()---方差
idxmax,idxmin---最大/最小索引
3) 累计统计函数
cumsum---计算前n个数的和
cummax---计算前n个数的最大值
cummin---计算前n个数的最小值
cumprod---计算前n个数的积
4.自定义运算
dataframe.apply(func,axis=)
四、Pandas画图
1.pandas.DataFrame.plot
dataframe.plot(x=None, y=None, kind='line')
x : label or position, default None
y : label, position or list of label, positions, default None
注:Allows plotting of one column versus another
kind---str
line---line plot(default)
bar---vertical bar plot
barh---horizontal bar plot
hist---histogram
pie---pie plot
scatter---scatter plot
2.pandas.Series.plot
五、文件读取与存储
1.csv
pd.read_csv()
pd.to_csv()
2.hdf5
pd.read_hdf()
pd.to_hdf()
hdf5文件存储的优势
支持压缩,使用blosc方式,速度最快,节省空间;
跨平台,可以轻松迁移到hadoop上
3.json
pd.read_json()
pd.to_json()
六、缺失值处理
1.处理NaN
1) 判断数据是否为NaN
pd.isnull(df)
pd.notnull(df)
2) 存在缺失值nan,并且是np.nan
1.删除缺失值:dropna(axis='rows')
不会修改原数据,需要接收返回值
2.替换缺失值:fillna(value, inplace=True)
value:替换成的值
inplace:
True---修改原数据
False---不替换修改原数据,生成新的对象
3) 不是缺失值nan,有默认标记的
1.先替换'?'为np.nan
df.replace(to_replace='?', value=np.nan)
2.再同上进行缺失值处理
七、数据离散化
1.数据离散化定义
连续属性的离散化就是将连续属性的值域上,将值域划分为若干个离散的区间,最后用不同的符号或整数值代表落在每个子区间中的属性值。
2.目的
为了简化数据结构,数据离散化技术可以用来减少给定连续属性值的个数。
3.数据离散化方法
1) 分组
pd.cut(data, bins)---手动自定义分组
pd.qcut(data, bins)---自动分组
series.value_counts()---统计分组次数
2) 将分组数据变成one-hot编码或哑变量
pandas.get_dummies(data, prefix=None)
data: array-like, Series, or DataFrame
prefix:分组名字
八、 合并
1.pd.concat([data1, data2], axis=1)--按索引合并
按照行或列进行合并,axis=0为列索引,axis=1为行索引
2.pd.merge---按照键值合并
pd.merge(left, right, how='inner', on=None, left_on=None, right_on=None)
可以指定按照两组数据的共同键值对合并或者左右各自
left: A DataFrame object
right: Another DataFrame object
how: inner,默认连接方式, 还有left(左连接),right(右连接),outer(外连接)
on: Columns (names) to join on. Must be found in both the left and right DataFrame objects.
left_on=None, right_on=None:指定左右键
九、交叉表与透视表
1.交叉表
用于计算一列数据对于另外一列数据的分组个数(寻找两个列之间的关系)
pd.crosstab(value1, value2)
2.透视表
DataFrame.pivot_table([], index=[])
十、分组与聚合
1.分组与聚合
通常是分析数据的一种方式,与一些统计函数一起使用,查看数据的分组情况
2.分组API
DataFrame.groupby(key, as_index=False)
key---分组的列数据,可以多个
day05---金融数据分析与挖掘-1
matplotlib 画图
numpy 运算
pandas 数据处理
一、金融市场基础知识
1.pandas --- 搞金融量化交易写的
1)量化交易
巴菲特 --- 投资界传奇
西蒙斯 --- 大奖章基金
量化 -- 不顾用专业金融的人,顾学数学、统计、信息、物理等方面人
2.金融市场基础知识
1)市场
金融市场---资金融通的交换场所
狭义金融市场---通常特指有价证券(股票、债券)发行和流通的场所
标定物:
货币市场、资本市场、外汇市场、黄金市场、保险市场
资本市场和货币市场的区别
货币市场---期限为1年及1年以下的金融资产
资本市场---期限为1年以上的金融资产
银行中长期存贷款
到底
2)狭义金融市场
1.按交易程序划分
一级市场---发行市场---筹钱、发展
投资人---个人、富有的人----天使投资----angel investment----500W以下
VC阶段---风险投资----venture capital----500W~1000W
PE阶段---私募----private equity----1000W以上
IPO---首次公开募股---上市
二级市场---已发行证券进行转让、交易的市场
投资人和投资人的交易
2.参与主体
证券交易所
证券公司
投行---投资银行---国外叫法
3.金融产品的区别
有价证券---权利和义务
股票---某一个公司的所有权---高风险高回报
债券---债权---低风险低回报
二、股票基础知识
1.什么是股票
有价证券---所有权
股票---是股份公司签发的证明股东所持股份的凭证,代表了股东对股份公司净资产的所有权。
特点---每股股票都代表股东对企业拥有单位的所有权,所拥有的份额取决于持有的股票数量总占比。
2.股票按照股东权利分类
普通股---有建议权、表决权、选举权等
优先股---优先分配权、求偿权
3.股票按照上市地区的分类
A股---在上海、深圳交易所上市的股票
投资人在境内
B股---在上海、深圳交易所上市的股票
H股---在香港上市---内地注册
N股---在纽约上市---内地注册
S股---在新加坡上市---内地注册
4.股票按业绩分类
ST---连续亏损2年 *ST---连续亏损3年
垃圾股---个人判断
蓝筹股
5.A股---人民币普通股票
A股不是实物股票,以无纸化电子交易记账,实行 T+1 交易制度
T + 1 交易制度----最多隔1天卖
涨跌停的限制 10%
不能进行高频交易
T + 0 交易制度----可当天买卖
6.股票代码、开户、价格形成
1) 股票代码
2) 股票价格
3)股票的交易时间和过程
股票交易时间
1.集合竞价阶段(9:15 ~ 9:25)
2.连续竞价阶段
上海:9:30 ~ 11:30 13:00 ~ 15:00
深圳:9:30 ~ 11:30 13:00 ~ 14:56:59
股票价格的形成
4) 交易费用
印花税---卖的时候收 --- 国家收
过户费---上海交易所收---深圳交易所没有过户费
交易佣金---券商收
7.股票的层次划分
1)中国股票市场的层次划分
主板---上海证券交易所、深圳证券交易所
中小板---深圳证券交易所
创业版---深圳证券交易所
新三板---全国中小企业股份转让系统---普通人不能买卖
2)股票不同性质划分
行业、板块
股票指数 HS300 蓝筹股较多
概念股
三、股票数据
1.交易数据
2.股票K线图
K线图基本形状
阳线 --- 涨
阴线 --- 跌
K线图的计算周期----日K线、周K线、月K线、年K线
3.案例:股票K线数据重采样
周K
dataframe.resample('w')
开盘价---周一开盘价
收盘价---周五收盘价
最高价---这周内每日最高价
最低价---这周内每日最低价
4.除权与复权
除权---发行公司进行股票分红,导致股票稀释,股价骤跌
复权---计算时按比例恢股价,便于分析
5.基本面数据
四、时间序列数据处理
1.pandas日期、时间类型
1)时间序列
时间序列是一组按照时间发生先后顺序进行排列的数据点序列
2)pandas时间类型
pd.to_datetime()
将时间数据转换成pandas时间类型
2.pandas时间序列类型---DatetimeIndex
转换时间序列类型方法
pd.to_datetime()
DatetimeIndex()
3.pandas的基础时间序列结构
以时间为索引的Series序列结构
pandas时间序列series的index必须是DatetimeIndex
DatetimeIndex的属性
year, month, weekday, day, hour...
4.pandas生成指定频率的时间序列
pd.date_range(start='', end='', periods='', freq='')
start:开始时间
end:结束时间
periods:产生多长的序列
freq:频率D,H,Q等
5.时间序列分析---time series analysis
通过对一个区域进行一定时间段内连续观察计算,提取相关特征值,并分析其变化过程
确定性变化分析:移动平均法,移动方差和标准差、移动相关系数
1)移动平均法
移动窗口---时间序列的数组变换
2)移动平均线
moving average --- 将某段时间收盘价之和除以该周期
3)移动平均线分类
移动平均线依据算法分为算数、加权法和指数移动平均线
简单移动平均线---无法反映不同时间对将来的影响
简单移动平均线(SMA),又称"算数移动平均线",是指特定期间的收盘价进行平均化。
加权移动平均线---波动更剧烈
末日加权移动平均线
线性加权移动平均线
指数平滑移动平均线---EWMA
pd.ewma(com=None, span=one)
span:时间间隔
4)移动方差和标准差
---反应某一时期序列的稳定性
5)各项指标数据关系---散点图
pd.scatter_matrix(dataframe, figsize=None)
6) 移动平均值的作用
day06---金融数据分析与挖掘-2
一、量化投资的方法基础分析
1.技术分析
趋势追踪---研究过去金融市场的资讯来预测价格趋势与决定投资的策略
2.基本面分析
统计学、机器学习方法
基本面分析---着重于对影响证券价格及其走势的各项因素的分析,包括宏观数据、市场行为、企业财务数据、交易数据等进行分析。
二、趋势追踪
1.趋势追踪
MACD
RSI
BOLL
1)双均线策略
预测一条长均线、一条短均线
买入策略---当快线上穿慢线称为形成金叉买点信号,买入股票
卖出策略---当快线下穿慢线称为形成死叉卖店信号,卖出股票
三、MACD分析
1.MACD---moving average convergence/ divergence
指数平滑异同移动平均线
2.MACD的原理和公式
计算公式
1)两个EMA
EMA(close, 12)
EMA(close, 26)
2) 计算快线
DIF(离差值) = EMA(close, 12) - EMA(close, 26)
3) 计算慢线
DEA(讯号线) = EMA(dif, 9)
4)计算MACD柱状图
BAR = 2 * (DIF - DEA)
3.交易信号分析
双均线策略
4.TA-Lib技术指标库
5.MACD背离情况
四、RSI分析
1.RSI---relative strength index
相对强弱指数(RSI)是通过比较一段时期内的平均收盘涨数和平均收盘跌数来分析市场买沽盘的意向和实力,从而作出未来市场的走势。
2.RSI原理和计算方法
RSI = 100 * RS / (1 + RS)
RS = X天的平均上涨点数/X天的平均下跌点数
3.RSI的意义
1) 取值范围(0, 100)
2) 强---(>50), 弱---(<50)
五、布林线
1.BOLL指标---布林线
利用统计原理,求出的标准差及其信赖区间
2.BOLL计算指标
中轨线(MB)=(N-1)日的移动平均线
上轨线(UP)=中轨线+两倍的标准差
下轨线(DN)=中轨线-两倍的标准差
六、行情软件演示
1.策略回测
历史数据
2.模拟交易
通过虚拟资金对现有股票进行实时持有