题目描述:进行数据质量分析

数据质量分析是数据预处理的前提,也是数据挖掘分析结论有效性和准确性的基础。其主要任务是检查原始数据中是否存在脏数据:

(1)缺失值检测

1.代码如下:

import pandas as pd
import numpy as nm
import matplotlib.pyplot as plt

data = pd.read_csv(r"D:/software/Sublime Text Build 3059 x64/ss.csv",usecols=[0,1],encoding='gb2312')

# num = pd.Series(data,index=[i in range(size(data))])
print(data.describe())
data_value = data['销量'].shape[0] - data['销量'].count()
print("缺失值数量:",data_value)
print("样本个数:",data['销量'].shape[0])
# print(data.isnull())
print(data.info())

 

2.运行结果:

 3.结果分析:

可以看出在这个数据集中样本个数为201个,其中缺失值为1 个。

 

(2)异常值(outliers)分析

异常值是指样本中数值明显偏离其余观测值的个别值,也称为离群点。

1、简单统计量分析

先对变量做描述性统计,检查数据是否合理。常用的统计量是最大、最小值,极差等。

 

1.代码如下:

mport pandas as pd
import csv
import matplotlib.pyplot as plt
import numpy as np

df_data = pd.read_csv('D:/software/Sublime Text Build 3059 x64/ss.csv',encoding='gb18030',) 
print(df_data.describe())
print("data size: {}".format(df_data.shape))
max=df_data.max()
min=df_data.min()
mean=df_data.mean()
print("最大值:",max)
print("最小值:",min)
print("平均值:",mean)

# (1)求极差
# 极差 = 最大值 - 最小值
data=df_data['销量'].describe()
data_range = (data.max()-data.min())
print("极差:{}".format(data_range))

 

2.运行结果:

 

3.结果分析:

通过运行的结果可以看出此数据集的最大销售数量为2015/3/1的9106.44,最小值为2014/10/1日的22,销售数据的平均值为2755.2147,极差为9084.44。

 

2、箱型图分析

1.箱线图异值定义

 

2. 代码如下:

# -*- coding: utf-8 -*-
import pandas as pd
import matplotlib.pyplot as plt

plt.rcParams["font.sans-serif"] = ["SimHei"] # 显示中文字体
plt.rcParams["axes.unicode_minus"] = False  # 显示负号

data = pd.read_csv(r"D:/software/Sublime Text Build 3059 x64/ss.csv",usecols=[0,1],encoding='gb2312')

plt.figure()
p = data.plot.box(return_type='dict')
x = p["fliers"][0].get_xdata() # flier:异常值标签
y = p["fliers"][0].get_ydata()
y.sort()

# annotate添加注释
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]))
    else:
        plt.annotate(y[i], xy=(x[i], y[i]), xytext=(x[i] + 0.08, y[i]))

plt.show()
# annotate添加注释
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]))
    else:
        plt.annotate(y[i], xy=(x[i], y[i]), xytext=(x[i] + 0.08, y[i]))
plt.show()

 

3.运行结果:

 4.结果分析:

该例中,865、4060.3、4065.2可归为正常值;22、51、60、6607.4、9106.44归为异常值。