【数据挖掘】数据挖掘和数据分析基础

参考文献:《Python数据分析与挖掘实战》张良均等

数据挖掘建模过程

  1. 定义挖掘目标:理解任务,确定指标
  2. 数据采样:注意数据的完整性和有效性
  3. 数据探索:异常值分析、缺失值分析、相关性分析、周期性分析
  4. 数据预处理:数据筛选、数据变量转换、缺失值处理、坏数据处理、数据标准化、主成分分析、属性选择、数据规约
  5. 挖掘建模:所属问题分析(分类、聚类、关联规则、时序模式、智能推荐),选用算法
  6. 模型评价:应用模型对应的评价方法,根据业务对模型进行解释和应用

数据挖掘建模工具

  1. SAS Enterprise Miner
  2. IBM SPSS Modeler
  3. SQL Server
  4. Python
  5. WEKA
  6. KNIME
  7. RapidMiner/YALE
  8. TipDM

数据探索

一、数据质量分析
数据预处理的前提,检查数据中是否存在脏数据(缺失值、异常值、不一致的值、重复数据、含特殊符号的数据),箱线图可以检测异常值。

file_name = r'../data/catering_sale.xls'
catering_sale = file_name
data = pd.read_excel(catering_sale, index_col=u'日期') #加载数据
plt.figure()
plt.rcParams['font.sans-serif'] = ['SimHei'] #正常显示中文标签
plt.rcParams['axes.unicode_minus'] = False #正常显示±号
# 画箱线图
p = data.boxplot(return_type='dict')
x = p['fliers'][0].get_xdata() #fliers为异常值标签
y = p['fliers'][0].get_ydata()
y.sort() #对y从小到大排序
for i in range(len(x)):
    #处理临界情况, i=0时
    temp = y[i] - y[i - 1] if i != 0 else -78 / 3
    #添加注释, xy指定标注数据,xytext指定标注的位置(所以需要特殊处理)
    plt.annotate(y[i], xy=(x[i], y[i]), xytext=(x[i] + 0.05 - 0.8 / temp, y[i]))
    plt.show()

【数据挖掘】数据挖掘和数据分析基础_第1张图片

二、数据特征分析

  1. 分布分析:解释数据的分布特征和分布类型:频率分布直方图、茎叶图、饼图、条形图
  2. 定量数据分布分析:求极差、决定组距和组数(极差/组距)、决定分点(分布区间)、列出频率分布表、绘制频率分布直方图。
  3. 定性数据分布分析:百分比/频数
  4. 对比分析:折线图
  5. 统计量分析:均值、中位数、标准差、四分位间距、变异系数 C V = s b x ˉ × 100 CV=\frac{s}{b}\bar{x}×100% CV=bsxˉ×100 Pandas中提供的describe方法可以得到基本统计量
file_name = r'../data/catering_sale.xls'
catering_sale = file_name
data = pd.read_excel(catering_sale, index_col=u'日期')
data = data[(data[u'销量'] > 400) & data[u'销量'] < 5000]
statistics = data.describe()[u'销量']
statistics['range'] = statistics['max'] - statistics['min'] #极差
statistics['var'] = statistics['std'] / statistics['mean'] #方差
statistics['dis'] = statistics['75%'] - statistics['25%'] #四分距
print(statistics)
  1. 周期性分析:时序折线图
  2. 贡献度分析:帕累托法则8/2定律,80%的利润来自20%的投入,应该重点关注80%利润的部分,绘制帕累托图
file_name = '../data/catering_dish_profit.xls'
dish_profit = file_name  #餐饮菜品盈利数据
plt.rcParams['font.sans-serif'] = ['SimHei']  # 正常显示中文标签
plt.rcParams['axes.unicode_minus'] = False  # 正常显示±号
data = pd.read_excel(dish_profit, index_col=u'菜品名')
data = data[u'盈利'].copy()
data.sort_values(ascending=False)
plt.figure()
data.plot(kind='bar')
plt.ylabel(u'盈利(元)')
p = 1.0 * data.cumsum() / data.sum()
p.plot(color='r', secondary_y=True, style='-o', linewidth=2)
plt.annotate(format(p[6], '.4%'),xy=(6, p[6]),xytext=(6 * 0.9, p[6] * 0.9),arrowprops=dict(arrowstyle="->", connectionstyle="arc3,rad=.2"))
plt.ylabel(u'盈利(比例)')
plt.show()

【数据挖掘】数据挖掘和数据分析基础_第2张图片
8. 相关性分析:散点图、散点矩阵图、计算相关系数(Pearson、Spearman)
Pearson线性相关系数要求连续变量的取值服从正态分布
P e a r s o n = ∑ i = 1 n ( x i − x ˉ ) ( y i − y ˉ ) ∑ i = 1 n ( x i − x ˉ ) 2 ∑ i = 1 n ( y i − y ˉ ) 2 Pearson=\frac{\sum_{i=1}^{n}(x_i-\bar{x})(y_i-\bar{y})}{\sqrt{\sum_{i=1}^{n}(x_i-\bar{x})^2\sum_{i=1}^{n}(y_i-\bar{y})^2}} Pearson=i=1n(xixˉ)2i=1n(yiyˉ)2 i=1n(xixˉ)(yiyˉ)
不符合正态分布的变量,分类或等级变量之间的关联性采用Spearman秩相关系数,也称为等级相关系数,对两个变量成对的取值按照升序或降序编秩, R i R_i Ri表示 x i x_i xi的秩次, Q i Q_i Qi表示 y i y_i yi的秩次, R i − Q i R_i-Q_i RiQi表示秩次之差。(秩次:排序时的位置)
S p e a r m a n = 1 − 6 ∑ i = 1 n ( R i − Q i ) 2 n ( n 2 − 1 ) Spearman=1-\frac{6\sum_{i=1}^{n}(R_i-Q_i)^2}{n(n^2-1)} Spearman=1n(n21)6i=1n(RiQi)2
判定系数是相关系数的平方,用 r 2 ∈ [ 0 , 1 ] r^2∈[0,1] r2[0,1]表示,其值越接近于1则相关性越强,越接近于0则几乎无直线相关关系。

file_name = r'../data/catering_sale_all.xls'
catering_sale = file_name
data = pd.read_excel(catering_sale, index_col=u'日期')
print(data.corr())
print(data.corr()[u'百合酱蒸凤爪'])
print(data[u'百合酱蒸凤爪'].corr(data[u'翡翠蒸香茜饺']))
  1. 主要数据探索函数:
方法 函数功能
sum() 求和
mean() 求均值
var() 求方差
std() 求均值
corr() 计算相关系数矩阵
cov() 计算协方差矩阵
skew() 计算样本值的偏度(三阶矩)
kurt() 计算样本值的峰度(四阶矩)
describe() 样本基本描述
  1. 扩展统计函数
方法 函数功能
cumsum() 依次给出前1,2,…,n个数的和
cumprod() 依次给出前1,2,…,n个数的积
cummax() 依次给出前1,2,…,n个数的最大值
cummin() 依次给出前1,2,…,n个数的最小值
rolling_sum() 按列计算数据样本的总和
rolling_mean() 数据样本的算数平均数
rolling_var() 计算数据样本的方差
rolling_std() 计算数据样本的标准差
rolling_corr() 计算数据样本的相关系数矩阵
rolling_cov() 计算数据样本的协方差矩阵
rolling_skew() 样本值的偏度
rolling_kurt() 样本值的峰度

cum系列是DataFrame对象和Series对象的方法
rolling_是pandas的函数,每k列计算一次,滚动计算

  1. Python统计作图
方法 函数功能
plot() 折线图
pie() 饼状图
hist() 折线图
boxplot() 箱型图
plot(logy=True) 绘制y轴的对数图形
plot(yerr=error) 绘制误差条形图

你可能感兴趣的:(数据挖掘)