1:D 2:A 3:A 4:D 5:A 6:C 7:D
(请在问题下面的空白框写出代码并执行以输出结果)
(1)请用value_count函数统计人数,并绘制条图,按颜色区分是否。
import pandas as pd
pd.set_option('display.max_rows', 8)
dat=pd.read_excel('mydata1.xlsx','4.1');dat
抽烟状况 | |
---|---|
0 | 否 |
1 | 否 |
2 | 否 |
3 | 是 |
... | ... |
16 | 否 |
17 | 否 |
18 | 是 |
19 | 是 |
20 rows × 1 columns
dat1=dat.抽烟状况.value_counts();dat1
否 11 是 9 Name: 抽烟状况, dtype: int64
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif']=['SimHei'];
dat1.plot.bar(color=['blue','yellow']);
(2)请用自定义函数tab生成频数表和频数图。
def tab(x):
f=x.value_counts();f
s=sum(f);
p=round(f/s*100,3);p
T1=pd.concat([f,p],axis=1);
T1.columns=['频数','构成比'];
T2=pd.DataFrame({'频数':s,'构成比':100.00},index=['合计'])
Tab=T1.append(T2)
fig,ax=plt.subplots(1,2,figsize=(10,5))
ax[0].bar(f.index,f); #条图
ax[1].pie(p,labels=p.index,autopct='%1.2f%%'); #饼图
return(round(Tab,3))
tab(dat.抽烟状况)
频数 | 构成比 | |
---|---|---|
否 | 11 | 55.0 |
是 | 9 | 45.0 |
合计 | 20 | 100.0 |
2050,2100,2200,2300,2350,2450,2500,2700,2900, 2850,3500,3800,2600,3000,3300,3200,4000,3100,4200,3500。
(1)试用mean、median、var、sd函数求数据的均值、中位数、方差、标准差。
data42=pd.read_excel('mydata1.xlsx','4.2');data42
月工资 | |
---|---|
0 | 2050 |
1 | 2100 |
2 | 2200 |
3 | 2300 |
... | ... |
16 | 4000 |
17 | 3100 |
18 | 4200 |
19 | 3500 |
20 rows × 1 columns
data42.月工资.mean()
2930.0
data42.月工资.median()
2875.0
data42.月工资.var()
406421.05263157893
data42.月工资.std()
637.511609801405
(2)绘制该数据的散点图和直方图,应用hist函数构建自己的计量频数表函数。
plt.scatter(data42.月工资.index,data42.月工资);
plt.hist(data42.月工资)
(array([3., 3., 2., 3., 2., 2., 2., 0., 1., 2.]), array([2050., 2265., 2480., 2695., 2910., 3125., 3340., 3555., 3770., 3985., 4200.]), <BarContainer object of 10 artists>)
(3)请用自定义函数freq生成频数表和频数图。
import numpy as np
def freq(X,bins=10):
H=plt.hist(X,bins)
a=H[1][:-1];a
b=H[1][1:];b
f=H[0];f
p=f/sum(f)*100;p
cp=np.cumsum(p);cp
Freq=pd.DataFrame([a,b,f,p,cp])
Freq.index=['[下限a','上限b)','频数f','频率p(%)','累计频数cp(%)']
return(round(Freq.T,2))
freq(data42.月工资)
[下限a | 上限b) | 频数f | 频率p(%) | 累计频数cp(%) | |
---|---|---|---|---|---|
0 | 2050.0 | 2265.0 | 3.0 | 15.0 | 15.0 |
1 | 2265.0 | 2480.0 | 3.0 | 15.0 | 30.0 |
2 | 2480.0 | 2695.0 | 2.0 | 10.0 | 40.0 |
3 | 2695.0 | 2910.0 | 3.0 | 15.0 | 55.0 |
... | ... | ... | ... | ... | ... |
6 | 3340.0 | 3555.0 | 2.0 | 10.0 | 85.0 |
7 | 3555.0 | 3770.0 | 0.0 | 0.0 | 85.0 |
8 | 3770.0 | 3985.0 | 1.0 | 5.0 | 90.0 |
9 | 3985.0 | 4200.0 | 2.0 | 10.0 | 100.0 |
10 rows × 5 columns
11,19,14,22,14,28,13,81,12,43,11,16,31,16,23,42,22,26,17,22, 13,27,108,16,43,82,14,11,51,76,28,66,29, 14,14,65,37,16,37,35,39,27,14,17,13,38,28,40,85,32,25,26,16,120,54,40,18,27,16,14,33,29,77,50,19,34
(1)可以对这些薪酬的分布状况作何分析?
对于这些年薪的分布状况,可以对其平均数、中位数、方差、标准差进行统计分析,也可以制作频数分布表、分布图分析。
(2)试通过编写计算基本统计量的函数来分析数据的集中趋势和离散程度。
data43=pd.read_excel('mydata1.xlsx','4.3');data43
年薪 | |
---|---|
0 | 11 |
1 | 19 |
2 | 14 |
3 | 22 |
... | ... |
62 | 77 |
63 | 50 |
64 | 19 |
65 | 34 |
66 rows × 1 columns
data43.年薪.mean()
33.27272727272727
data43.年薪.median()
27.0
data43.年薪.var()
574.6937062937063
data43.年薪.std()
23.972770100547546
(3)试分析为何该数据的均值和中位数差别如此之大,方差、标准差在此有何作用?
如何正确分析该数据的集中趋势和离散程度?
该数据的均值与中位数差别较大的原因是:这66个经理的年薪中,有几个经理年薪值较大,从而提高了平均年薪水平。方差与标准差反映了66个经理年薪偏离平均年薪的程度较大,因此本题中平均年薪并不能准确反映66个经理年薪的一般水平。故在该数据中,可以通过年薪的中位数27万元来反映集中程度,通过极差、四分位差等反映其离散程度,较为可靠。
data43.年薪.max()-data43.年薪.min() #极差
109
data43.年薪.quantile(0.75)-data43.年薪.quantile(0.25) #四分位差
23.75
(4)绘制该数据的散点图和直方图。
plt.scatter(data43.年薪.index,data43.年薪); #散点图
plt.hist(data43.年薪) #直方图
(array([25., 17., 12., 3., 1., 2., 4., 0., 1., 1.]), array([ 11. , 21.9, 32.8, 43.7, 54.6, 65.5, 76.4, 87.3, 98.2, 109.1, 120. ]), <BarContainer object of 10 artists>)
(5)请用自定义函数freq生成频数表和频数图。
freq(data43.年薪) #用自定义函数freq生成频数表和频数图,形如4.2(3)
[下限a | 上限b) | 频数f | 频率p(%) | 累计频数cp(%) | |
---|---|---|---|---|---|
0 | 11.0 | 21.9 | 25.0 | 37.88 | 37.88 |
1 | 21.9 | 32.8 | 17.0 | 25.76 | 63.64 |
2 | 32.8 | 43.7 | 12.0 | 18.18 | 81.82 |
3 | 43.7 | 54.6 | 3.0 | 4.55 | 86.36 |
... | ... | ... | ... | ... | ... |
6 | 76.4 | 87.3 | 4.0 | 6.06 | 96.97 |
7 | 87.3 | 98.2 | 0.0 | 0.00 | 96.97 |
8 | 98.2 | 109.1 | 1.0 | 1.52 | 98.48 |
9 | 109.1 | 120.0 | 1.0 | 1.52 | 100.00 |
10 rows × 5 columns