商务与经济统计案例分析:3-1Pelican 商店
- 要求
- Python实现
要求
1.净销售额的描述统计量和各种不同类型顾客的净销售额的描述统计量。
2.关于年龄与净销售额之间关系的描述统计量。
Python实现
0.相关分析:2-1案例
1.净销售额的描述统计量和各种不同类型顾客的净销售额的描述统计量。
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
data = pd.read_csv("F:\DataAnalysis\StatisticForBusinessAndEconomics\PelicanStores\PelicanStores.csv")
data.head()
data['Net Sales'].describe()
从上面描述统计量中可以得出,该数据的样本量为100,其中最小净销售额为13.23,最大净销售额为287.59,平均净销售额是77.600500,该值大于第二四分位数(中位数)59.705000,有可能是因为受极大值影响,所以下面分别看一下净销售额的分布及箱型图:
分布条形图:
bin=[0,20,40,60,80,100,120,140,160,180,200,220,240,260,280,300]
data['GroupbyNetSales']=pd.cut(data['Net Sales'],bin,right=False,labels=['20','40','60','80','100','120','140','160','180','200','220','240','260','280','300'])
frequency=data['GroupbyNetSales'].value_counts()
x=list(frequency.sort_index().index)
y=list(frequency.sort_index().values)
plt.style.use('ggplot')
plt.bar(x=x,height=y,width=0.6)
plt.title('净销售额分布条形图')
plt.xlabel('')
plt.ylabel('频数')
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.show()
通过分布条形图可以看出,净销售额的分布出现左偏的现象,通过箱型图可以查找异常值:
plt.boxplot(x=data["Net Sales"],
patch_artist=True, # 是否要自定义颜色
showmeans=False, # 是否显示均值点
boxprops={"color": "black", "facecolor": "c"}, # 箱体的颜色属性,color:边框色,facecolor:填充色
flierprops={"marker": 'o', "markerfacecolor": "darkorange", "color": "black", "alpha": 0.8}, # 异常值的颜色属性,color:轮廓颜色,marker:标记形状,markerfacecolor:填充色
medianprops={"linestyle": "--", "color": "black"}) # 中位线颜色属性,linestyle:线型,color:线的颜色
plt.show()
可以得出净销售额在180以上的数据为“异常数据”。
#查看各种不同类型顾客的净销售额的描述统计量。
table2 = data.pivot_table(values=["Net Sales"], index=["Type of Customer"], aggfunc=[np.mean,np.median,np.std,np.amin,np.amax], fill_value=0)
table2
从结果来看,促销用户的最小净销售额要小于普通用户的净销售额,促销用户最大净销售额要大于普通用户的净销售额,促销用户的净销售额标准差也大于普通用户的净销售额标准差,促销用户的离散程度比较高,又因为促销用户的净销售额被一些极大值的影响,提高了促销用户净销售额的平均值
#查看各类型用户的净销售额和的占比
data1=data.groupby(by=['Type of Customer'] )['Net Sales'].agg(np.sum)
sizes =list(data1[0:])
labels = list(data1.index)
colors = [ 'lightskyblue', 'lightcoral']
plt.pie(sizes, labels=labels, autopct='%1.1f%%', colors=colors,shadow=True, startangle=110)
从总净销售额占比来看,促销用户的总销售额占总净销售额的76%。
2.关于年龄与净销售额之间关系的描述统计量。
plt.scatter(data['Age'], Data['Net Sales'])
plt.title('Age and Net Sales')
plt.xlabel('Age')
plt.ylabel('Net Sales')
plt.tight_layout()
plt.show();
通过散点图不容易看出这两个变量之间的关系,下面看一下年龄和净销售额的协方差及皮尔逊积矩相关系数:
np.cov(data['Age'], data['Net Sales'])
array([[ 153.48848485, -7.33488889],
[ -7.33488889, 3098.58537045]])
X = np.stack((data['Age'], data['Net Sales']), axis=0)# 每一行作为一个变量
np.corrcoef(X)
array([[ 1. , -0.01063589],
[-0.01063589, 1. ]])
通过计算两个变量之间的协方差可得知年龄和净消费额之间是负相关,进一步的通过皮尔逊相关系数可以得出这两个变量之间是弱相关