《Python数据分析与挖掘实战》学习笔记——基础知识

一.数据挖掘的基本任务

包括分类与预测、聚类分析、关联规则、时序模式、偏差检测、智能推荐等方法

  • 建模过程
目标定义
数据采样
数据整理
构建模型
模型评价
模型发布
  1. 定义挖掘目标
  2. 数据采集
  3. 数据探索&预处理
  4. 挖掘建模
  5. 模型评价
  • 挖掘工具
    windows系统
    python3.7 numpy pandas skilearn等库
    pyhcarn专业版 jupyter notebook

二.数据探索

  • 数据质量分析
  • 数据特征分析

1.数据质量分析

  • 缺失值

    • 删除记录
    • 对可能值插补
    • 不处理
  • 异常值

    • 简单统计量分析(查看变量取值是否超出范围)
    • 3σ原则
    • 箱型图
  • 一致性分析
    数据不一致指的是数据的矛盾性,对不一致数据进行挖掘会产生与实际相悖的结果,可能是不同的数据源或者数据未更新造成的。(书中未给出处理的例子,自己考虑直接换数据源。)

2.数据特征分析

  • 分布分析
    • 定量数据的分布分析
      • 频率分布分析
      1. 求极差
      2. 决定组距与组数
      3. 决定分点
      4. 列出频率分布表
      5. 绘制频率分布直方图
    • 定性数据的分布分析
      采用饼图和条形图描述定性变量的分布
  • 对比分析
    指标间横纵向比较、时间序列的比较分析
  • 统计量分析
    均值 中位数 众数
    极差 标准差 变异系数 四分位数间距
    df.describe()
  • 周期性分析
    变量的年度、季节,月度、周、天小时等周期内的趋势
  • 贡献度分析
    20/80定律(如80%的利润来自20%的商品)
    《Python数据分析与挖掘实战》学习笔记——基础知识_第1张图片A1~A7七个菜品的利润和占该月盈利额的85%
  • 相关性分析
  1. 绘制散点图(两个变量的正线性、负线性、不相关)
  2. 绘制散点矩阵(考察多个变量的相关关系)
  3. 计算相关系数(Pearson相关系数、Spearman秩相关系数、判定系数)

3.python主要数据探索函数

sum()计算数据样本总和(按列)
mean()算数平均数
var()方差
std()标准差
corr()Spearman相关系数矩阵
cov()协方差矩阵
describe()基本统计描述

plot()绘制线性二维图,折线图
pie()饼图
hist()二维条形直方图
boxplot()箱型图

三.数据预处理

1.数据清洗

待添加

四.挖掘建模

scikit-learn建模流程

建立对象
设置参数
fit方法训练
predict预测结果
score模型评价
模型发布

1. 时序模式

给定一个已被观测了的时间序列,预测该序列的未来值。
常用模型AR模型MA模型ARMA模型ARIMA模型

类型 方法
纯随机序列(白噪声序列) 没有信息,无法分析
平稳非白噪声序列(均值方差为常数) ARMA模型
非平稳序列(均值方差不稳定) 转变为平稳序列后ARMA模型

(平稳性检验、ARMA模型定义 看不懂,先放着)

平稳时间序列建模步骤:

Created with Raphaël 2.2.0 平稳非白噪声序列 计算ACF.PACF ARMA模型识别 估计模型中未知参数的值 模型检验? 模型优化 预测将来走势 yes no

1)计算ACF(自相关系数)和PACF(偏自相关系数)
2)根据以上系数模型定阶

模型 ACF(自相关系数) PACF(偏自相关系数)
AR( p ) 拖尾 p阶拖尾
MA( q ) q阶拖尾 拖尾
ARMA(p,q) p阶拖尾 q阶拖尾

3)估计模型中未知参数的值并进行参数检验
4)模型检验
5)模型优化
6)模型应用

非平稳时间序列建模步骤:
常用随机时序分析法ARIMA模型进行建模。ARIMA模型实质是差分运算与ARMA模型的组合。

import pandas as pd
import matplotlib.pyplot as plt
from statsmodels.graphics.tsaplots import plot_acf,plot_pacf
from statsmodels.tsa.stattools import adfuller as ADF
from statsmodels.stats.diagnostic import acorr_ljungbox
from statsmodels.tsa.arima_model import ARIMA

plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
discfile = r'F:/jpt_f/python_data_analysis_all/chapter5/data/arima_data.xls'
forecastnum = 5
data = pd.read_excel(discfile, index_col=u'日期')
# 时序图
data.plot()
plt.show()
# 自相关图
plot_acf(data)
plt.show()
# 平稳性检测
print(u'原始序列的ADF检验结果为:', ADF(data[u'销量']))
# 返回值依次为:adf, pvalue p值, usedlag, nobs, critical values临界值 , icbest, regresults, resstore
# adf 分别大于3中不同检验水平的3个临界值,单位检测统计量对应的p 值显著大于 0.05 , 说明序列可以判定为 非平稳序列

# 差分后的结果
D_data = data.diff().dropna()
D_data.columns = [u'销量差分']
D_data.plot()  # 差分后的时序图
plt.show()
plot_acf(D_data).show()  # 差分后的自相关图
plot_pacf(D_data).show()  # 差分后的偏自相关图
print(u'差分序列的ADF检验结果为:', ADF(D_data[u'销量差分']))  # 平稳性检测
# 一阶差分后的序列的时序图在均值附近比较平稳的波动,自相关性有很强的短期相关性,单位根检验 p值小于 0.05,
# 所以说一阶差分后的序列是平稳序列

# 对差分后的序列做白噪声检验
print(u'差分序列的白噪声检验结果为:', acorr_ljungbox(D_data, lags=1)) # 返回统计量和p值
# 差分序列的白噪声检验结果为: (array([11.30402222]), array([0.00077339])),p值为第二项, 远小于 0.05

# 对模型定阶
pmax = int(len(D_data)/10)  # 一般阶数不超过 length /10
qmax = int(len(D_data)/10)
bic_matrix = []  # bic矩阵
data.dropna(inplace=True)
for p in range(pmax+1):
    tmp = []
    for q in range(qmax+1):
        try:
            tmp.append(ARIMA(data, (p, 1, q)).fit().bic)
        except:
            tmp.append(None)
    bic_matrix.append(tmp)

bic_matrix = pd.DataFrame(bic_matrix)  # 将其转换成Dataframe数据结
p, q = bic_matrix.stack().idxmin()  # 用stack展平,然后用idxmin找出最小值位置
print(u'BIC最小的p值和q值为: %s %s' %(p, q))   # BIC 最小的p值 和 q 值:0,1
# 所以可以建立ARIMA 模型,ARIMA(0,1,1)
model = ARIMA(data, (p, 1, q)).fit()
print(model.summary2())
# 作为期5天的预测,返回预测结果、标准误差、置信区间。
print(model.forecast(forecastnum))
print('结束')

《Python数据分析与挖掘实战》学习笔记——基础知识_第2张图片

你可能感兴趣的:(《Python数据分析与挖掘实战》学习笔记——基础知识)