#

描述性统计分析基础

  • 数据集描述与属性说明

  • ID 客户编号

  • Suc_flag 成功入网标识

  • ARPU 入网后ARPU

  • PromCnt12 12个月内的营销次数

  • PromCnt36 36个月内的营销次数

  • PromCntMsg12 12个月内发短信的次数

  • PromCntMsg36 36个月内发短信的次数

  • Class 客户重要性等级(根据前运营商消费情况)

  • Age 年龄

  • Gender 性别

  • HomeOwner 是否拥有住房

  • AvgARPU 当地平均ARPU

  • AvgHomeValue 当地房屋均价

  • AvgIncome 当地人均收入

1
2
3
4
5
6
7
import os
import pandas as pd
import numpy as np

pd.set_option('display.max_columns', None)
#os.chdir('Q:/data')
#os.getcwd()

读取数据

1
2
camp= pd.read_csv('teleco_camp.csv')
camp.head(10)

数据预处理

1
camp.dtypes
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
ID                 int64
Suc_flag category
ARPU float64
PromCnt12 float64
PromCnt36 float64
PromCntMsg12 float64
PromCntMsg36 float64
Class category
Age float64
Gender object
HomeOwner object
AvgARPU float64
AvgHomeValue float64
AvgIncome float64
dtype: object

camp.describe(include=’all’)

ID Suc_flag ARPU PromCnt12 PromCnt36 PromCntMsg12 PromCntMsg36 Class Age Gender HomeOwner AvgARPU AvgHomeValue AvgIncome
count 9686.000000 9686.0 4843.000000 9686.000000 9686.000000 9686.000000 9686.000000 9686.0 7279.000000 9686 9686 9686.000000 9583.000000 7329.000000
unique NaN 2.0 NaN NaN NaN NaN NaN 4.0 NaN 3 2 NaN NaN NaN
top NaN 1.0 NaN NaN NaN NaN NaN 2.0 NaN F H NaN NaN NaN
freq NaN 4843.0 NaN NaN NaN NaN NaN 3303.0 NaN 5223 5377 NaN NaN NaN
mean 97975.474086 NaN 78.121722 3.447212 7.337059 1.178402 2.390935 NaN 59.150845 NaN NaN 52.905156 112179.202755 53513.457361
std 56550.171120 NaN 62.225686 1.231890 1.952436 0.287226 0.914314 NaN 16.516400 NaN NaN 4.993775 98522.888583 19805.168339
min 12.000000 NaN 5.000000 0.750000 1.000000 0.200000 0.400000 NaN 0.000000 NaN NaN 46.138968 7500.000000 2499.000000
25% 48835.500000 NaN 50.000000 2.900000 6.250000 1.000000 1.400000 NaN 47.000000 NaN NaN 49.760116 53200.000000 40389.000000
50% 99106.000000 NaN 65.000000 3.250000 7.750000 1.200000 2.600000 NaN 60.000000 NaN NaN 50.876672 77700.000000 48699.000000
75% 148538.750000 NaN 100.000000 3.650000 8.250000 1.400000 3.200000 NaN 73.000000 NaN NaN 54.452822 129350.000000 62385.000000
max 191779.000000 NaN 1000.000000 15.150000 19.500000 3.600000 5.600000 NaN 87.000000 NaN NaN 99.444787 600000.000000 200001.000000

描述性统计与探索型数据分析

分类变量分析

可以查看列原因元素的种类

1
camp['Suc_flag'].groupby(camp['Suc_flag']).count()
1
2
3
4
Suc_flag
0 4843
1 4843
Name: Suc_flag, dtype: int64

连续变量分析

数据的集中趋势

ARPU的均值与中位数

1
2
3
4
5

fs = camp['ARPU'] # 可以使用camp.ARPU
print('mean = %6.4f' %fs.mean()) # 求fs的均值
print('median = %6.4f' %fs.median() ) # 求fs的中位数
print('quantiles\n', fs.quantile([0.25, 0.5, 0.75])) # 求a的上下四分位数与中位数
1
2
3
4
mad = 38.1896
range = 995.0000
var = 3872.0359
std = 62.2257
1
2
3
get_ipython().run_line_magic('matplotlib', 'inline'

fs.plot(kind='hist')
1
2
3
4
5
6
7
8
(array([2.510e+03, 1.978e+03, 2.160e+02, 9.800e+01, 4.000e+00, 7.000e+00,
0.000e+00, 2.500e+01, 0.000e+00, 0.000e+00, 0.000e+00, 1.000e+00,
0.000e+00, 0.000e+00, 4.000e+00]),
array([ 5. , 71.33333333, 137.66666667, 204. ,
270.33333333, 336.66666667, 403. , 469.33333333,
535.66666667, 602. , 668.33333333, 734.66666667,
801. , 867.33333333, 933.66666667, 1000. ]),
<a list of 15 Patch objects>)

数据的离散程度

1
2
3
4
print ('mad = %6.4f' %fs.mad())      # 求平均绝对偏差 mad = np.abs(fs - fs.mean()).mean()
print ('range = %6.4f' %(fs.max(skipna=True) - fs.min(skipna=True))) # 求极差
print ('var = %6.4f' %fs.var()) # 求方差
print ('std = %6.4f' %fs.std()) # 求标准差

数据的偏度与峰度

1
2
3
import matplotlib.pyplot as plt

plt.hist(fs.dropna(), bins=15)

1
2
print ('skewness = %6.4f' %fs.skew(skipna=True))
print ('kurtosis = %6.4f' %fs.kurt(skipna=True))
1
2
skewness = 5.1695
kurtosis = 52.8509

apply\map\groupby及其它相关

1
2
data = pd.DataFrame(data={'a':range(1,11), 'b':np.random.randn(10)})
data.T
0 1 2 3 4 5 6 7 8 9
a 1.000000 2.000000 3.000000 4.000000 5.000000 6.000000 7.000000 8.0000 9.000000 10.000000
b -0.087919 0.903531 0.603965 0.203005 0.282077 -1.420298 0.283303 -0.0565 1.047595 -0.787566
1
data.apply(np.mean) # 等价于data.mean(),是其完整形式
1
2
3
a    5.500000
b 0.097119
dtype: float64
1
data.apply(lambda x: x.astype('str')).dtypes # DataFrame没有astype方法,只有Series