
多维数据分析
-
2023年3月16日发(作者:03j926)python多维数据分析_使⽤python进⾏数据分析
Lifeisshort,Iusepython!
1python中常⽤的数据分析包
2python:⼀维数据分析
2.1⽤numpy包进⾏⼀维数据分析
importnumpyasnp
importpandasaspd
#定义⼀维数组array
a=([2,3,4,5])
#查询元素
a[0]
2
#切⽚访问
#L[0:3]表⽰,从索引0开始取,直到索引3为⽌,但不包括索引3。
a[1:4]
array([3,4,5])
#循环访问
foriina:
print(i)
2
3
4
5
#查看数据类型
dtype('int32')
#⼀维数组平均数
()
3.5
#标准差
()
1.1189
#乘以标量
b=a*4
b
array([8,12,16,20])
2.2⽤pandas包进⾏⼀维数据分析
#定义⼀维数据Series*注意Series要⼤写S
stockS=([54.74,190.9,173.14,1050.3,181.86,1139.49],
index=['腾讯','阿⾥巴巴','苹果','⾕歌','Facebook','亚马逊'])
#描述统计信息
be()
count6.000000
mean465.071667
std491.183757
min54.740000
25%175.320000
50%186.380000
75%835.450000
max1139.490000
dtype:float64
#根据位置获取值iloc
[0]
54.742
#根据索引获取值loc
['亚马逊']
1139.49
#向量相加
s1=([1,2,3,4],index=['a','b','c','d'])
s2=([10,20,30,40],index=['a','b','e','f'])
s3=s1+s2
s3
a11.0
b22.0
cNaN
dNaN
eNaN
fNaN
dtype:float64
#⽅法1:删除缺失值
()
a11.0
b22.0
dtype:float64
#⽅法2:将缺失值进⾏填充
s4=(s2,fill_value=0)
s4
a11.0
b22.0
c3.0
d4.0
e30.0
f40.0
dtype:float64
3python:⼆维数据分析
3.1⽤numpy包进⾏⼆维数据分析
#定义⼆维数组
a=([[1,2,3,4],[5,6,7,8],[9,10,11,12]])
#查询元素
a[0,2]
3
#获取第⼀⾏
a[0,:]
array([1,2,3,4])
#获取第⼀列
a[:,0]
array([1,5,9])
#计算每⼀⾏平均数axis=1
(axis=1)
array([2.5,6.5,10.5])
#计算每⼀⾏平均数axis=0
(axis=0)
array([5.,6.,7.,8.])
3.2⽤pandas包进⾏⼆维数据分析
#定义⼀个字典,映射列名与对应列的值
salesDict={'购药时间':['2018-01-01星期五','2018-01-02星期六','2018-01-06星期三'],
'社保卡号':['001616528','001616528',''],
'商品编码':[236701,236701,236701],
'商品名称':['强⼒VC银翘⽚','清热解毒⼝服液','感康'],
'销售数量':[6,1,2],
'应收⾦额':[82.8,28,16.8],
'实收⾦额':[69,24.64,15]}
#定义⼀个有序的字典
fromcollectionsimportOrderedDict
salesorderedDict=OrderedDict(salesDict)
#定义数据框columnsindex
salesDf=ame(salesorderedDict)
salesDf
#平均值:是按每列来求平均值
()
商品编码236701.000000
销售数量3.000000
应收⾦额42.533333
实收⾦额36.213333
dtype:float64
#iloc根据位置查询值
[0,1]
'001616528'
[0,:]
购药时间2018-01-01星期五
社保卡号001616528
商品编码236701
商品名称强⼒VC银翘⽚
销售数量6
应收⾦额82.8
实收⾦额69
Name:0,dtype:object
[:,0]
02018-01-01星期五
12018-01-02星期六
22018-01-06星期三
Name:购药时间,dtype:object
#loc根据索引查询值
[0,'社保卡号']
'001616528'
[0,:]
购药时间2018-01-01星期五
社保卡号001616528
商品编码236701
商品名称强⼒VC银翘⽚
销售数量6
应收⾦额82.8
实收⾦额69
Name:0,dtype:object
[:,'商品名称']
0强⼒VC银翘⽚
1清热解毒⼝服液
2感康
Name:商品名称,dtype:object
#简单查询
salesDf['社保卡号']
1001616528
2
Name:社保卡号,dtype:object
3.3数据框复杂查询
#查询某⼏列
salesDf[['商品名称','实收⾦额']]
#切⽚功能:指定范围
[:,'商品名称':'实收⾦额']
#通过条件判断筛选:先构建查询条件,再应⽤查询条件
querySer=[:,'销售数量']>1
type(querySer)
querySer
0True
1False
2True
Name:销售数量,dtype:bool
[querySer,:]
#数据集描述统计信息*注意⼤⼩写
filenameStr='C:coben朝阳医院2018年销售数据.xlsx'
xls=ile(filenameStr)
salesDf=('Sheet1')
()
[:,'销售数量'].dtype
dtype('float64')
(6578,7)
be()
4数据分析的基本过程
step1提出问题:这是关键第⼀步
step2理解数据
step3数据清洗
step4构建模型
step5数据可视化
#step1:提出问题:
#医院销售数据:1⽉均消费次数?2⽉均消费⾦额?3客单价?4消费趋势是什么?
filenameStr='C:coben朝阳医院2018年销售数据.xlsx'
xls=ile(filenameStr,dtype='object')
salesDf=('Sheet1',dtype='object')
#step2:理解数据
()
(6578,7)
#dtype*dtype要加s
购药时间object
社保卡号object
商品编码object
商品名称object
销售数量object
应收⾦额object
实收⾦额object
dtype:object
be()
#step3:数据清洗
#⽰例:选择⼦集
subsalesDf=[0:4,'购药时间':'销售数量']
subsalesDf
#列名重命名
colnameDict={'购药时间':'销售时间'}
(columns=colnameDict,inplace=True)
()
#缺失数据处理
print('处理前shape:',)
处理前shape:(6578,7)
#how代表如何删,any是说有缺失值就删
salesDf=(subset=['销售时间','社保卡号'],how='any')
print('处理后shape:',)
处理后shape:(6575,7)
#转换数据类型
#字符串转换成数值astype
salesDf['销售数量']=salesDf['销售数量'].astype('float')
salesDf['应收⾦额']=salesDf['应收⾦额'].astype('float')
salesDf['实收⾦额']=salesDf['实收⾦额'].astype('float')
print('转换后的数据类型:n',)
转换后的数据类型:
销售时间object
社保卡号object
商品编码object
商品名称object
销售数量float64
应收⾦额float64
实收⾦额float64
dtype:object
#处理⽇期
#分割*split⽤法
testlist='2018-1-1星期五'.split('')
testlist
['2018-1-1','星期五']
testlist[0]
'2018-1-1'
#定义分割函数输⼊:series销售时间输出:series销售时间
defsplitSaletime(timeColSer):
timelist=[]
forvalueintimeColSer:
dataStr=('')[0]
(dataStr)
timeSer=(timelist)
returntimeSer
#赋值到函数splitSaletime
timeSer=[:,'销售时间']
dataSer=splitSaletime(timeSer)
dataSer[0:3]
02018-01-01
12018-01-02
22018-01-06
dtype:object
[:,'销售时间']=dataSer
()
#字符串转换⽇期to_datetime
#format是指原始格式
#errors='coerce'是指把不符合⽇期的格式,转换后赋值为空值*注意coerce加‘’
[:,'销售时间']=_datetime(
[:,'销售时间'],format='%Y-%m-%d',errors='coerce'
)
销售时间datetime64[ns]
社保卡号object
商品编码object
商品名称object
销售数量float64
应收⾦额float64
实收⾦额float64
dtype:object
#重复做⼀次删除空值
salesDf=(subset=['销售时间','社保卡号'],how='any')
(6549,7)
#数据排序
#使⽤sort_values,by:按哪⼏列排序,ascending=True表⽰升序,ascending=False表⽰降序
salesDf=_values(by='销售时间',ascending=True)
()
#重命名⾏名index
salesDf=_index(drop=True)
()
#通过描述统计信息可以看出:销售数量存在负数,这是异常值。所以要处理异常值。
be()
#通过条件判断筛选出数据
querySer=[:,'销售数量']>0
print('异常值处理前shape:',)
salesDf=[querySer,:]
print('异常值后理前shape:',)
异常值处理前shape:(6549,7)
异常值后理前shape:(6506,7)
#step4:构建模型:这次分析只做到业务指标的分析
#⽉均消费次数=总消费次数/⽉份数(同⼀天内同⼀个⼈的消费只算1次)
#⽉均消费⾦额=总消费⾦额/⽉份数
#客单价=总消费⾦额/总消费次数
#消费趋势是什么?
kpi1_Df=_duplicates(subset=['销售时间','社保卡号'])
totalI=kpi1_[0]
print('总消费次数=',totalI)
总消费次数=5342
kpi1_Df=kpi1__values(by='销售时间',ascending=True)
kpi1_Df=kpi1__index(drop=True)
startTime=kpi1_[0,'销售时间']
endTime=kpi1_[totalI-1,'销售时间']
#//表⽰整除
daysI=(endTime-startTime).days
monthsI=daysI//30
print('⽉份数=',monthsI)
⽉份数=6
#计算⽉均销售次数
kpi1_I=totalI//monthsI
print('业务指标1:⽉均消费次数=',kpi1_I)
业务指标1:⽉均消费次数=890
totalMoneyF=[:,'实收⾦额'].sum()
monthMoneyF=totalMoneyF/monthsI
print('业务指标2:⽉均消费⾦额=',monthMoneyF)
业务指标2:⽉均消费⾦额=50668.351666666305
pct=totalMoneyF/totalI
print('业务指标3:客单价=',pct)
业务指标3:客单价=56.9
5总结
5.1⽤到的⾃带函数读⼊excel:ExcelFile
打印前5⾏:head
查看列的数据类型:dtype
查看有多少⾏,多少列:shape
每⼀列的统计数:describe
重命名列:rename
删除缺失值:dropna
字符串转换为数值(浮点数):astype
分割:split
字符串转换⽇期:to_datetime
排序:sort_values
重命名⾏:reset_index
删除重复值:drop_duplicates
5.2学习问题解决办法