数据挖掘基础笔记
目录
数据获取 --> 探索分析与可视化 --> 预处理理论 --> 分析建模 --> 模型评估
一、数据获取手段
1.数据仓库数据库:面向业务存储针对应用 OLTP--online transaction processing组织规范数据仓库:面向主题存储针对分析 OLAP--online analysis processing可能冗余,相对变化大,数据量大2.检测与抓取通过传感器获取通过抓取网页、接口、文件等获取3.填写、埋点、日志用户填写信息app或网页埋点:特点流程的信息记录点操作日志
二、数据学习网站
1.数据竞赛网站:Kaggle: Google天池:阿里云2.数据集网站ImageNetOpen Image3.各领域统计数据统计局政府机构公司财报
day01
一、数据挖掘基础环境安装与使用
1.创建虚拟环境python2:mkvirtualenv 虚拟环境名python3:mkvirtualenv -p python3 虚拟环境名2.使用pip命令安装pip install -r requirements.txtmatplotlib==2.2.2numpy==1.14.2pandas==0.20.3TA-Lib==0.4.16tables==3.4.2jupyter==1.0.03.中文显示问题解决1.下载中文字体(黑体,看准系统版本)如下载 SimHei 字体(或者其他的支持中文显示的字体也行)2.安装字体linux下:拷贝字体到 usr/share/fonts 下:sudo cp ~/SimHei.ttf /usr/share/fonts/SimHei.ttfwindows和mac下:双击安装3.删除~/.matplotlib中的缓存文件# 缓存文件也可能在.cache中cd ~/.matplotlib 或 cd ~/.cache/matplotlibrm -r *修改配置文件matplotlibrcvi ~/.matplotlib/matplotlibrc将文件内容修改为:font.family : sans-seriffont.sans-serif : SimHeiaxes.unicode_minus : False4.Jupyter Notebook的使用1)使用命令# 进入虚拟环境workon ai# 输入命令jupyter notebook2) cell操作cell:一对In Out会话被视作一个代码单元,称为cellJupyter支持两种模式:编辑模式(Enter)命令模式下回车Enter或鼠标双击cell进入编辑模式可以操作cell内文本或代码,剪切/复制/粘贴移动等操作命令模式(Esc)按Esc退出编辑,进入命令模式可以操作cell单元本身进行剪切/复制/粘贴/移动等操作3)快捷键操作两种模式通用快捷键Shift+Enter,执行本单元代码,并跳转到下一单元Ctrl+Enter,执行本单元代码,留在本单元cell行号前的 * ,表示代码正在运行命令模式:按ESC进入Y,cell切换到Code模式M,cell切换到Markdown模式A,在当前cell的上面添加cellB,在当前cell的下面添加cell双击D:删除当前cellZ,回退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 plt2)折线图绘制与显示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.boolnp.int64np.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,最终就返回Falsenp.any() 只要传入的布尔值有一个True,最终就返回True三元运算符np.where()复合逻辑需要结合 np.logical_and 和 np.logical_or 使用3.4.2 统计运算统计指标min, max, median,mean, var, stdaxis0轴 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 & PanelMultiIndex---多级分层索引对象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,std2) 统计函数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.plotdataframe.plot(x=None, y=None, kind='line')x : label or position, default Noney : label, position or list of label, positions, default None注:Allows plotting of one column versus anotherkind---strline---line plot(default)bar---vertical bar plotbarh---horizontal bar plothist---histogrampie---pie plotscatter---scatter plot2.pandas.Series.plot
五、文件读取与存储
1.csvpd.read_csv()pd.to_csv()2.hdf5pd.read_hdf()pd.to_hdf()hdf5文件存储的优势支持压缩,使用blosc方式,速度最快,节省空间;跨平台,可以轻松迁移到hadoop上3.jsonpd.read_json()pd.to_json()
六、缺失值处理
1.处理NaN1) 判断数据是否为NaNpd.isnull(df)pd.notnull(df)2) 存在缺失值nan,并且是np.nan1.删除缺失值:dropna(axis='rows')不会修改原数据,需要接收返回值2.替换缺失值:fillna(value, inplace=True)value:替换成的值inplace:True---修改原数据False---不替换修改原数据,生成新的对象3) 不是缺失值nan,有默认标记的1.先替换‘?’为np.nandf.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 DataFrameprefix:分组名字
八、 合并
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 objectright: Another DataFrame objecthow: 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.分组APIDataFrame.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~1000WPE阶段---私募----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线数据重采样周Kdataframe.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必须是DatetimeIndexDatetimeIndex的属性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),又称“算数移动平均线”,是指特定期间的收盘价进行平均化。加权移动平均线---波动更剧烈末日加权移动平均线线性加权移动平均线 指数平滑移动平均线---EWMApd.ewma(com=None, span=one)span:时间间隔4)移动方差和标准差---反应某一时期序列的稳定性5)各项指标数据关系---散点图pd.scatter_matrix(dataframe, figsize=None)6) 移动平均值的作用
day06—金融数据分析与挖掘-2
一、量化投资的方法基础分析
1.技术分析趋势追踪---研究过去金融市场的资讯来预测价格趋势与决定投资的策略2.基本面分析统计学、机器学习方法基本面分析---着重于对影响证券价格及其走势的各项因素的分析,包括宏观数据、市场行为、企业财务数据、交易数据等进行分析。
二、趋势追踪
1.趋势追踪MACDRSIBOLL1)双均线策略预测一条长均线、一条短均线买入策略---当快线上穿慢线称为形成金叉买点信号,买入股票卖出策略---当快线下穿慢线称为形成死叉卖店信号,卖出股票
三、MACD分析
1.MACD---moving average convergence/ divergence指数平滑异同移动平均线2.MACD的原理和公式计算公式1)两个EMAEMA(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.模拟交易通过虚拟资金对现有股票进行实时持有