案例13-2 销售人员的报酬
假设大旧金山地区一个销售专业人员的地方分会对该组织的成员进行一项调查,其目的是:对受雇的销售人员,无论销售场所是在室内还是在户外,如果他们的资历与年薪之间存在某种关系的话,则对这种关系进行研究。在调查中,受访者要求在三种资历水平中指定其中的一种:低(1~),中(11~20)年和高(21或以上)。调查所得数据的一部分如下所示。
导入模块与数据
import pandas as pd
import numpy as np
import warnings
warnings.filterwarnings("ignore")
#单因素方差分析模块
from scipy.stats import f_oneway
#多因素方差分析模块
from scipy import stats
from statsmodels.formula.api import ols
from statsmodels.stats.anova import anova_lm
#画图函数
import matplotlib.pyplot as plt
import seaborn as sns
%matplotlib inline
data = pd.read_csv('SalesSalary.csv')
data.head()
1.使用描述统计学汇总这些数据
①销售场所分布
plt.subplots(figsize=(6,6))
sns.countplot('Position',data=data,palette='inferno',edgecolor=sns.color_palette('dark',7))
plt.xticks(rotation=90)
plt.title('Number Of Position')
plt.show()
销售场所为室内的人数和户外的人数相等,均为60人
②销售人员经验分布
plt.subplots(figsize=(6,6))
sns.countplot('Experience', data=data, palette='inferno', edgecolor=sns.color_palette('dark',7))
plt.xticks(rotation=90)
plt.title('Number Of Experience')
plt.show()
工作资历低、中、高的人数相等,均为40人
③销售人员收入分布
sns.distplot(data['Salary'], kde=True, rug=True);
大部分员工的薪资水平集中在50000~65000美元
data_2 = data.groupby(by=["Position", "Experience"])["Salary"].describe()
data_2
plt.subplots(figsize=(8,6))
sns.boxplot(x="Position", y="Salary", hue="Experience",data=data, palette="Set2")
户外销售的均值、最大值、最小值、数据分布皆大于室内销售,且室外经验为中的销售员工资最高。
2.不考虑销售人员的工作资历和工作场所,建立一个95%的销售人员平均年薪的置信区间估计。
confidence=0.95
sample_mean = np.mean(data["Salary"])
sample_std = np.std(data["Salary"])
sample_size = len(data["Salary"])
alpha = 1 - 0.95
t_score = stats.t.isf(alpha / 2, df = (sample_size-1) )
ME = t_score * sample_std / np.sqrt(sample_size)
lower_limit = sample_mean - ME
upper_limit = sample_mean + ME
print( str(confidence*100)+ '%% Confidence Interval: ( %.2f, %.2f)' % (lower_limit, upper_limit))
95.0% Confidence Interval: ( 62974.48, 66876.47)
3.建立一个95%的室内销售人员平均年薪的置信区间估计
confidence=0.95
sample_mean = np.mean(data[data['Position']=="Inside"]["Salary"])
sample_std = np.std(data[data['Position']=="Inside"]["Salary"])
sample_size = len(data[data['Position']=="Inside"]["Salary"])
alpha = 1 - 0.95
t_score = stats.t.isf(alpha / 2, df = (sample_size-1) )
ME = t_score * sample_std / np.sqrt(sample_size)
lower_limit = sample_mean - ME
upper_limit = sample_mean + ME
print( str(confidence*100)+ '%% Confidence Interval: ( %.2f, %.2f)' % (lower_limit, upper_limit))
95.0% Confidence Interval: ( 55100.93, 56940.11)
4.建立一个95%的户外销售人员平均年薪的置信区间估计
confidence=0.95
sample_mean = np.mean(data[data['Position']=="Outside"]["Salary"])
sample_std = np.std(data[data['Position']=="Outside"]["Salary"])
sample_size = len(data[data['Position']=="Outside"]["Salary"])
alpha = 1 - 0.95
t_score = stats.t.isf(alpha / 2, df = (sample_size-1) )
ME = t_score * sample_std / np.sqrt(sample_size)
lower_limit = sample_mean - ME
upper_limit = sample_mean + ME
print( str(confidence*100)+ '%% Confidence Interval: ( %.2f, %.2f)' % (lower_limit, upper_limit))
95.0% Confidence Interval: ( 71800.84, 75860.02)
5.在α=0.05的显著性水平下,并且暂时不考虑销售人员工作资历的影响,利用方差分析方法,检验销售人员工作场所的显著差异。
a = data[data['Position']=="Outside"]["Salary"]
b = data[data['Position']=="Inside"]["Salary"]
f,p = f_oneway(a,b)
print (f)
print (p)
251.540435527
4.96485601468e-31
不同工作场所的销售人员收入具有显著性差异
6.在α=0.05的显著性水平下,并且暂时不考虑销售人员工作场所的影响,利用方差分析方法,检验销售人员工作资历的显著差异。
a = data[data['Experience']=="High"]["Salary"]
b = data[data['Experience']=="Low"]["Salary"]
c = data[data['Experience']=="Medium"]["Salary"]
f,p = f_oneway(a,b,c)
print (f)
print (p)
7.92614411145
0.000591267665676
不同工作资历的销售人员收入具有显著性差异
7.在α=0.05的显著性水平下,检验销售人员工作场所、工作资历和交互作用的显著差异。
符号意义:(~)隔离因变量和自变量 (左边因变量,右边自变量 )
(+)分隔各个自变量
(:)表示两个自变量交互影响
#进行这个分析的时候,pandas版本要降到0.19.2
ExperienceLevelDict = {'High':3,'Medium':2,'Low':1}
PositionDict = {'Inside':1,'Outside':0}
data['Experience_1'] = data['Experience'].map(ExperienceLevelDict)
data['Position_1'] = data['Position'].map(PositionDict)
formula = 'Salary~Experience_1+Position_1+Position_1:Experience_1'
model = ols(formula,data).fit()
results = anova_lm(model)
results
销售人员工作场所,工作资历和交互作用皆具有显著差异