**意义:**数据质量分析是数据准备过程中重要的一环,是数据预处理的前提,也是数据挖掘分析结论有效性和准确性的基础。
**主要任务:**检查原始数据中是否存在脏数据。
**脏数据:**一般指不符合要求以及直接进行相应分析的数据;包括缺失值、异常值、不一致的值、重复数据及含特殊符号(¥、#、*)的数据。
产生原因:
影响:
1、数据挖掘建模将丢失大量有用的信息。
2、数据挖掘模型所表现出的不确定性更加显著、模型中蕴含的规律更难把握。
3、包含空值的数据会使建模过程陷入混乱,导致不可靠的输出。
如何分析:
分两个方面:
1、通过简单的统计分析,得到含有缺失值的属性个数以及每个属性的未缺失数、缺失数与缺失率等。
2、对缺失值进行处理,主要有:删除存在缺失值的记录、对可能值进行插补和不处理。
**目的:**异常值分析是检验数据是否录入错误,是否有不合常理的数据,分析其出现的原因。
**异常值(离群点):**样本中的个别值,其数值明显偏离其他的观测值。
异常值分析的方法:
1、简单统计量分析:在进行异常值分析时,可以先对变量做一个描述性分析,进而查看那些数据不合理。最常用的统计量为最大值、最小值,如客户的年龄最大值为199岁,若年龄超过199岁的客户信息存在异常
2、3σ原则:数据服从正态分布,则在3σ原则下,异常值被定义为一组测定值中与平均值的偏差超过3倍标准差的值。
P ( ∣ x − μ ∣ > 3 σ ) ≦ 0.003 , 属 于 极 个 别 的 小 概 率 事 件 P(|x-μ|>3σ)≦0.003,属于极个别的小概率事件 P(∣x−μ∣>3σ)≦0.003,属于极个别的小概率事件
3、箱型图分析:
箱型图识别异常值的标准:>上四分位+1.5IQR || <下四分位-1.5IQR(四分位数间距)
IQR=上四分位-下四分位
#用describe()方法查看数据的基本情况
import pandas as pd
catering_sale = '../data/catering_sale.xls'
data = pd.read_excel(catering_sale,index_col = "日期")
print(data.describe())
#画出箱型图
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['SimHei'] #用来正常显示中文标签
plt.reParams['axes.unicode_minus'] = False #用来正常显示符号
plt.figure()
#选择箱型图
p = data.boxplot(return_type="dict")
#代入数据,y按大小排序
x = p['fliers'][0].get_xdata()
y = p['fliers'][0].get_ydata()
y.sort()
#用annoate添加注释
for i in range(len(x)):
if i>0:
plt.annotate(y[i], xy=(x[i],y[i]), xytext=(x[i]+0.05-0.8/(y[i]-y[i-1]),y[i])) #(显示y[i]值,标记显示值y[i]所在的位置,显示的文字所在处)
else:
plt.annotate(y[i],xy=(x[i],y[i]),xytext=(x[i]+0.08,y[i]))
plt.show()
4、一致性分析:
数据不一致性是指数据的矛盾性、不相容性。如两张表都存储了用户的电话号码,但在用户的电话号码改变时只更新了一张表的数据,那么这两张表中就有了不一致的数据。
1、分布分析能揭示数据的分布特征和分布类型,能了解数据的分布情况(对称、不对称、发现某些特大或特小的可疑值等)
2、定量数据一般以频率分布图、频率分布直方图、茎叶图进行直观展示;(看数量)
3、定性数据一般以饼图、条形图展示(看类别占比)
4、以频率直方图为例,定量数据的分析步骤:1求极差;2决定组距和组数;3决定分点;4列出频率分布表;5绘制频率直方图;
遵循原则:1各组之间必须相互排斥;2各组必须将所有数据包含在内;3各组的组宽最好相等;
1、方法:
1绝对数比较
2相对数比较
结构相对数:将同一总体内的部分数值与全部数值进行对比求比重,用以说明事物的性质、结构或质量如产品合格率
比例相对数:将同一总体内的不同部分的数值进行对比,表明总体内各部分的比例关系,如人口性别比例
比较相对数:将同一时期两个性质相同的指标数值进行对比,说明同类现象在不同空间条件下的数量对比关系,如不同地区的商品价 格对比
强度相对数:将两个性质不同但有一定联系的总量指标进行对比,用以说明现象的强度、密度和普遍程度,如人均国内生产总值
计划完成程度相对数:将某一时期实际完成数与计划数进行对比,用以说明计划完成程度
动态相对数:将同一现象不同时期的指标数值进行对比,用以说明发展方向和变化速度,如发展速度、增长速度等。
1、集中趋势度量
(1)均值,mean
(2)众数
(3)中位数
2、离中趋势度量
(1)极差
(2)标准差
(3)变异系数
(4)四分位间距
3、贡献度分析(帕累托分析)
4、相关性分析(散点图、散点矩阵图、计算相关系数)
一、基本统计特征函数(data可以是DataFrame或Series对象)
方法名 | 函数功能 | 用法 |
---|---|---|
sum() | 计算数据样本的总和(按列) | data.sum() |
mean() | 计算数据样本的算术平均数 | data.mean() |
var() | 计算样本数据的方差 | data.var() |
std() | 计算样本数据的标准差 | data.std() |
corr() | 计算数据样本的Sperman(Pearson)相关系数矩阵 | data.corr() |
cov() | 计算数据样本的协方差矩阵 | data.cov() |
skew() | 样本值的偏度(三阶矩) | data.skew() |
kurt() | 样本值的峰度(四阶矩) | data.kurt() |
describe() | 给出样本的基本描述(均值、标准差、四分位、中位数) | data.describe() |
二、拓展统计特征函数
1累积计算统计特征函数(data可以是DataFrame或Series对象)
方法名 | 函数功能 | 用法 |
---|---|---|
cumsum() | 依次给出前1,2,……,n个数的和 | data.cumsum() |
cumprod() | 依次给出前1,2,……,n个数的积 | data.cumprod() |
cummax() | 依次给出前1,2,……,n个数的最大值 | data.cummax() |
cummin() | 依次给出前1,2,……,n个数的最小值 | data.cummin() |
2滚动计算统计特征函数(import pandas as pd)
方法名 | 函数功能 | 用法 |
---|---|---|
rolling(n).sum() | 计算数据样本的总和(按列) | data.rolling(2).sum() |
rolling_mean() | 计算数据样本的算术平均数 | data.rolling().mean() |
rolling_var() | 计算数据样本的方差 | data.rolling().var() |
rolling_std() | 计算样本数据的标准差 | data.rolling().std() |
rolling_corr() | 计算数据样本的Sperman(Pearson)相关系数矩阵 | data.rolling().corr() |
rolling_cov() | 计算数据样本的协方差矩阵 | data.rolling().cov() |
rolling_skew() | 样本值的偏度(三阶矩) | data.rolling().skew() |
rolling_kurt() | 样本值的峰度(四阶矩) | data.rolling().kurt() |
三、统计绘图函数(import matplotlib.pyplot as plt)
函数名 | 函数功能 | 用法 |
---|---|---|
plot() | 绘制线性二维图、折线图 | plt.plot(x,y,s)#s为图形样式、颜色、符号如plt.plot(x,y,‘bp–’) data.plot(kind=‘box’)#line、bar、hist、barh、box、kde、area、pie |
pie() | 绘制饼图 | plt.pie(size,explode=,labels=,colors=,autopct=,shadow=,startangle=)#size为列表,记录各个扇形的面积比例,colors颜色,explode为数组突出那些模块,autopct是数据的形式,shadow阴影 |
hist() | 绘制二维条形直方图,可显示数据的分配情形 | plt.hist(x,y) |
boxplot() | 绘制样本数据的箱型图 | plt.boxplot() |
plot(logy=True) | 绘制y轴的对数图形 | data.plot(logy=True)/data.plot(logx=True) |
plot(yerr=error) | 绘制误差条形图 | data.plot(yerr=error) |
#数据探索函数使用
# %%
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
data = pd.DataFrame(data = np.random.randint(0,100,size=(8,4)),columns=['A','B','C','D'])
#查看数据基本描述
data.describe()
# %%
data.sum()
# %%
data.mean()
# %%
data.var()
# %%
data.corr()
# %%
data.cov()
# %%
#偏度
data.skew()
# %%
data.kurt()#峰度
# %%
data.cumsum()
# %%
data.rolling(2).sum()
# %%
data.cumprod()
# %%
data.cummax()
# %%
data.cummin()
# %%
data.rolling(2).mean()
# %%
print(data.rolling(8).std())
print(data.std())
# %%
#正弦曲线图
x = np.linspace(0,2*np.pi,50)
y = np.sin(x)
plt.plot(x,y,'g--')
plt.show()
# %%
#饼图
labels = ['A','B','C','D']
sizes = [30,40,25,5]
colors = ['yellowgreen','gold','lightskyblue','lightcoral']
explode = (0.2,0.1,0,0)
plt.pie(sizes,explode=explode,labels=labels,colors=colors,autopct='%1.1f%%',shadow=True,startangle=90)
plt.axis('equal')#显示为圆
plt.show()
# %%
#直方图
x = np.random.randn(1000)#一千个服从正态分布的随机数
plt.hist(x,10)#十组
plt.show()
# %%
#箱型图
x = np.random.randn(1000)
data = pd.DataFrame([x,x+1]).T#构造两列的DataFrame
data.plot(kind='box')
plt.show()
# %%
#箱型图
x = np.random.randn(1000)
data = pd.DataFrame([x,x+1]).T#构造两列的DataFrame
data.boxplot()
# %%
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
x = pd.Series(np.exp(np.arange(20)))
plt.figure(figsize = (8, 9)) # 设置画布大小
ax1 = plt.subplot(2, 1, 1)
x.plot(label = '原始数据图', legend = True)
ax1 = plt.subplot(2, 1, 2)
x.plot(logy = True, label = '对数数据图', legend = True)
plt.show()
# %%
error = np.random.randn(10) # 定义误差列
y = pd.Series(np.sin(np.arange(10))) # 均值数据列
y.plot(yerr = error) # 绘制误差图
plt.show()
关于Python个人常犯问题的解决
#Python更新pip失败后会导致pip丢失,解决方法:
python -m ensurepip
#-----------------------------------------#
#更新pip最好用这行代码
python -m pip install --upgrade pip
#-------------------------------------------------------#
#镜像下载资源
pip3 install keras -i http://mirrors.aliyun.com/pypi/simple/ --trusted-host mirrors.aliyun.com/pypi/simple/
#--------------------------------------------------------------#
#程序打包的命令
pyinstaller -F -w X:\XXX\XXX.py