一、箱型图分析
箱型图依据实际数据绘制,对数据没有任何限制性要求,只是真实直观地表现数据分布的本来面貌;箱型图判断异常值的标准以四分位数和四分位距为基础。其中四分位数具有一定的鲁棒性:多大25%的数据可以变得任意远而不会严重扰动四分位数,所以异常值不能对这个标准施加影响。由此可见,箱型图识别异常值的结果比较客观,在识别异常值方面有一定的优越性。
下面是使用python检测代码对餐饮日销额数数据异常值进行检测
`import pandas as pd
catering_sale = 'D:/a/data/catering_sale.xls' # 餐饮数据
data = pd.read_excel(catering_sale, index_col = u'日期') # 读取数据,指定“日期”列为索引列
print(data)
print(data.describe(),data.describe().max()-data.describe().min())
import matplotlib as mpl
mpl.use('TkAgg') # !IMPORTANT
import matplotlib.pyplot as plt # 导入图像库
plt.rcParams['font.sans-serif'] = ['SimHei'] # 用来正常显示中文标签
plt.rcParams['axes.unicode_minus'] = False # 用来正常显示负号
plt.figure() # 建立图像
p = data.boxplot(return_type='dict') # 画箱线图,直接使用DataFrame的方法
x = p['fliers'][0].get_xdata() # 'flies'即为异常值的标签
y = p['fliers'][0].get_ydata()
y.sort() # 从小到大排序,该方法直接改变原对象
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.title("异常值检测箱型图(学号:3130)")
plt.show() # 展示箱线图`
得到的箱型图如下:
从箱型图可以看出,超过上下界的8个日销搜额数据可能为异常值。结合具体业务可以把865.0,4060.3,4065.2归为正常值,将22.0,51.0,60.0,6607.4,9106.44归为异常值。最后确定过滤规则为日销额在400元以下或5000元以上则属于异常数据。接下来编写过滤程序,对异常数据进行后续处理。
二、绘制频率直方图
对数据进行分布分析能揭示数据的分布特征和分布类型。对于定量数据,想要了解其分布形式是对称的还是非对称的、发现某些特大或特小的可疑值,可做出频率分布表、绘制频率分布直方图进行直观分析;对于定性数据,可以用饼图直观的显示其分布情况。
对”捞起生鱼片“在2014年第二个季度的销售数据绘制频率分布直方图
# 代码3-3 捞起生鱼片的季度销售情况 import pandas as pd import numpy as np catering_sale = 'D:/a/catering_fish_congee.xls' # 餐饮数据 data = pd.read_excel(catering_sale, names=['date', 'sale']) # 读取数据,指定“日期”列为索引 bins = [0, 500, 1000, 1500, 2000, 2500, 3000, 3500, 4000] labels = ['[0,500)', '[500,1000)', '[1000,1500)', '[1500,2000)', '[2000,2500)', '[2500,3000)', '[3000,3500)', '[3500,4000)'] data['sale分层'] = pd.cut(data.sale, bins, labels=labels) aggResult = data.groupby(by=['sale分层'])['sale'].agg([("sale", np.size)]) pAggResult = round(aggResult / aggResult.sum(), 2, ) * 100 import matplotlib as mpl import matplotlib.pyplot as plt mpl.use('TkAgg') # !IMPORTANT plt.figure(figsize=(8, 4)) # 设置图框大小尺寸 pAggResult['sale'].plot(kind='bar', width=0.6, fontsize=10) # 绘制频率直方图 plt.rcParams['font.sans-serif'] = ['SimHei'] # 用来正常显示中文标签 plt.title('季度销售额频率分布直方图 (学号:3130)', fontsize=10) plt.show()
得到直方图如下:
三、定性数据的分布分析——饼图和条形图
对于定性变量,经常根据变量的分类类型来分组,可以采用饼图和条形图来描述定性变量的分布。
饼图的每一个扇形部分代表每一个类型的所占百分比或频数,根据定性变量的类型数目将饼图分成几个部分,每一部分的大小与每一类型的频数成正比;条形图的高度代表每一个类型的百分比或频数,条形图的宽度是没有意义的。
python代码如下:
`import pandas as pd
import matplotlib as mpl
mpl.use('TkAgg') # !IMPORTANT
import matplotlib.pyplot as plt
catering_dish_profit = 'D:/a/data/catering_dish_profit.xls'
data = pd.read_excel(catering_dish_profit)
饼图
x = data['盈利']
labels = data['菜品名']
plt.figure(figsize=(8,6))
plt.pie(x,labels=labels) #绘制饼图
plt.rcParams['font.sans-serif'] = 'SimHei'
plt.title('菜品销售量分布(学号:3130)')
plt.axis('equal') #作图为正方形
plt.show()
条形图
x=data['菜品名']
y=data['盈利']
plt.figure(figsize=(8,4))
plt.bar(x,y)
plt.rcParams['font.sans-serif'] = 'SimHei'
plt.xlabel('菜品')
plt.ylabel('销量')
plt.title('菜品销售量分布条形图(学号:3130)')
plt.show()`
得到饼图和条形图如下图所示:
四、对比分析——折线图
对比分析是把两个相互联系的指标进行比较,从数量上展示和说明研究对象规模的大小、水平高低、速度快慢以及各种关系是否协调。特别适用于指标间的横纵向比较、时间序列的比较分析。在对比分析中,选择合适的对比标准是十分关键的。
例如:以各菜品的销售数据为例,从时间维度上分析,可以看到A部门、B部门、C部门三个部门的销售金额随时间的变化趋势,可以了解在此期间哪个部门的销售金额比较高、趋势比较平稳;还从单一部门,例如B部门,来做分析,了解各年份的销售对比情况。
python代码如下:
`#部门之间销售额比较
import pandas as pd
import matplotlib as mpt
mpt.use('TKAgg')
import matplotlib.pyplot as plt
from pylab import mpl
mpl.rcParams["font.sans-serif"] = ["SimHei"]
data = pd.read_excel("D:/a/data/dish_sale.xls")
plt.figure(figsize=(8,4))
plt.plot(data['月份'],data['A部门'],color='green',label='A部门',marker='o') #图例
plt.plot(data['月份'],data['B部门'],color='red',label='B部门',marker='s')
plt.plot(data['月份'],data['C部门'],color='skyblue',label='C部门',marker='x')
plt.legend() #显示图例
plt.ylabel('销售额(万元)')
plt.title('3部门之间销售额的比较(学号:3130)')
plt.show()
B部门各年份之间销售金额的比较
data = pd.read_excel("D:/a/data/dish_sale_b.xls")
plt.figure(figsize=(8,4))
plt.plot(data['月份'],data['2012年'],color='green',label='A部门',marker='o') #图例
plt.plot(data['月份'],data['2013年'],color='red',label='B部门',marker='s')
plt.plot(data['月份'],data['2014年'],color='skyblue',label='C部门',marker='x')
plt.legend()
plt.ylabel('销售额(万元)')
plt.title('B部门各年份销售额的比较(学号:3130)')
plt.show()`
得到的折线图如下图所示
总体来看,3个部门的销售额呈递减趋势;A部门和C部门的递减趋势比较平稳;B部门的销售额下降趋势比较明显,进一步分析造成这种现象的原因,可能是原材料不足。
五、统计量分析
用统计指标对定量数据进行统计描述,常从集中趋势和离中趋势两个方面进行分析。平均水平指标是对个体集中趋势的度量,使用最广泛的是均值和中位数;反应变异程度的指标则是对个体离开平均水平的度量,使用较广泛的是标准差、四分位间距。
针对餐饮销量数据进行统计量分析如下:
import pandas as pd
catering_sale = 'D:/a/data/catering_sale.xls'
data = pd.read_excel(catering_sale,index_col='日期') #指定“日期”列为索引
data = data[(data['销量']>400)&(data['销量']<5000)] #过滤异常数据
statistics = data.describe() #保存基本统计量
statistics.loc['range'] = statistics.loc['max']-statistics.loc['min'] #极差
statistics.loc['var'] = statistics.loc['std']-statistics.loc['mean'] #变异系数
statistics.loc['dis'] = statistics.loc['75%']-statistics.loc['25%'] #四分位数间距
print(statistics)
结果如下:
六、周期性分析
周期性分析是探索某个变量是否随着时间的变化而呈现出某种周期变化趋势。
要对正常用户和窃电用户在2012年2月份与3月份日用电量进行预测,可以分别分析正常用户和窃电用户的日用电量的时序图,来直观地估计其用电量变化趋势。代码如下:
`import pandas as pd
import matplotlib as mpt
mpt.use('TKAgg')
import matplotlib.pyplot as plt
df_normal = pd.read_csv("D:/a/data/user.csv")
plt.figure(figsize=(8,4))
plt.plot(df_normal["Date"],df_normal["Eletricity"])
plt.xlabel("日期")
设置x轴刻度间隔
x_major_locator = plt.MultipleLocator(7)
ax = plt.gca()
ax.xaxis.set_major_locator(x_major_locator)
plt.ylabel("每日电量")
plt.title("正常用户电量趋势(学号3130)")
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.show()
窃电用户用电趋势
df_steal = pd.read_csv("D:/a/data/Steal user.csv")
plt.figure(figsize=(10,9))
plt.plot(df_steal["Date"],df_steal["Eletricity"])
plt.xlabel("日期")
plt.ylabel("日期")
设置x轴刻度间隔
x_major_locator = plt.MultipleLocator(7)
ax = plt.gca()
ax.xaxis.set_major_locator(x_major_locator)
plt.title("窃电用户电量趋势(学号3130)")
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.show()
`
总体来看,正常用户和窃电用户在2012年2月份与3月份日用电量呈现出周期性,以周为周期,因为周末不上班,所以周末用电量较低。工作日和非工作日的用电量比较平稳,没有太大的波动。而窃电用户在2012年2月份和3月份日用电量呈现出递减趋势,同样周末的用电量是最低的。
标签:数据分析,plt,sale,catering,学习,绘图,pd,import,data From: https://www.cnblogs.com/chendongcheng/p/17156339.html