✅ 操作成功!

多维数据分析

发布时间:2023-06-12 作者:admin 来源:文学

多维数据分析

多维数据分析

-

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学习问题解决办法

👁️ 阅读量:0