类的应用python平均分_利用python进行数据分析

本文介绍了Python数据分析中常用的numpy和pandas库,包括一维和二维数据的操作,如平均值、标准差、向量化计算、缺失值处理等,并通过实例展示了数据清洗和转换的过程。
摘要由CSDN通过智能技术生成

常用数据分析领域的包:numpy(数学计算)、pandas(基于Numpy的工具:数据框)、matplotlib(数据分析可视化)

一、一维数据分析

建立numpy包---Array(数组) 建立pandsa包---Series

# 导入numpy包、pandas包

import numpy as np

import pandas as pd

1、numpy--一维数组

#定义一维数据 array

a=np.array([2,3,4,5])

#1)查询元素

a[0]-->2

#2)切边访问

a[1:3]-->[3,4]

#这里值的提醒的是切边访问,结果不包含结束索引即元素5,所以输出值为[3,4]

#3)循环访问

for i in a:

print(i)

#4)数据类型

a.dtype--> dtype('int32')

numpy一维数据与列表的区别

①统计功能:平均值mean()、标准差std()

#平均值

a.mean()-->3.5

a.std()-->1.1180339887498949

②向量化计算

2、pandas 一维数据结构

#定义一维数据结构

stockS=pd.Series([54.74,190.9,173.13,1050.3,181.86,1139.49],index=['腾讯','阿里巴巴','苹果','谷歌','Facebook','亚马逊'])

#描述统计信息

stockS.describe()-->count 6.000000

mean 465.070000

std 491.184946

min 54.740000

25% 175.312500

50% 186.380000

75% 835.450000

max 1139.490000

dtype: float64

iloc属性用于根据位置获取值

#iloc用法

stockS.iloc[0]-->54.740000000000002

loc属性用于根据索引获取值

#loc用法

stockS.loc['腾讯']-->54.740000000000002

一维数组pandas向量运算

#pandas向量化运算

s1=pd.Series([1,2,3,4],index=['a','b','c','d'])

s2=pd.Series([10,20,30,40],index=['a','b','e','f'])

s3=s1+s2

print('向量化增加后结果:',s3)

-->向量化增加后结果: a 11.0

b 22.0

c NaN

d NaN

e NaN

f NaN

dtype: float64

#方法一,删除缺失值

s3.dropna()--> a 11.0

b 22.0

dtype: float64

#方法二,将缺失值进行填充

s3=s1.add(s2,fill_value=0)

s3

-->a 11.0

b 22.0

c 3.0

d 4.0

e 30.0

f 40.0

dtype: float64

二、二维数据分析

二维数据结构

numpy-->array(数据) pandas-->DataFrame(数据框)

1、numpy二维数组

#定义numpy二维数据,注意创建时的[]

a=np.array([[1,2,3,4],[5,6,7,8],[9,10,11,12]])

--> array([[ 1, 2, 3, 4],

[ 5, 6, 7, 8],

[ 9, 10, 11, 12]])

#二维数组得行号与列号,都是从0开始

#1)查询元素

a[0,2]-->3

#2)获取第1行

a[0,:]-->array([1, 2, 3, 4])

#3)获取第1列

a[:,0]-->array([1, 5, 9])

Numpy数轴参数

axis=1 指定行、axis=0 指定列

#按轴计算:axis=1计算每一行的平均值

a.mean(axis=1)--> array([ 2.5, 6.5, 10.5])

2、pandas 二维数组(DateFrame 数据框)

pands相比于Numpy的优点:

①pandas 每一列可以是不同类型的数据

②pandas有可以使用索引功能

salesDict={

'购药时间':['2018-01-01 星期五','2018-01-02 星期六','2018-01-06 星期三'],

'社保卡号':['001616528','001616528','0012602828'],

'商品编号':['强力vc银翘片','清热解毒口服液','感康'],

'销售数据':[6,1,2],

'应收金额':[82.8,28,16.8],

'实收金额':[69,24.64,15]}

#定义数据框、参数传入字典

salesDf=pd.DataFrame(salesDict)

salesDf-->

引入有序字典

#有序的数据框,导入有序字典

from collections import OrderedDict

#定义一个有序字典

salesorderedDict=OrderedDict(salesDict)

#传入数据框数据

salesDf=pd.DataFrame(salesorderedDict)

salesDf-->

平均值的计算

#pandas二维数组平均值计算

salesDf.mean()--> 销售数据 3.000000

应收金额 42.533333

实收金额 36.213333

dtype: float64

iloc用于根据位置查询值-iloc(行号,列号)

#1)查询元素

salesDf.iloc[0,2]--> '强力vc银翘片

#获取第一行

salesDf.iloc[0,:]--> 购药时间 2018-01-01 星期五

社保卡号 001616528

商品编号 强力vc银翘片

销售数据 6

应收金额 82.8

实收金额 69

#获取第2列

salesDf.iloc[:,1]--> 0 001616528

1 001616528

2 0012602828

Name: 社保卡号, dtype: object

loc属性用于根据索引查询值-loc(行名,列名)

#1)查询元素

salesDf.loc[0,'商品编号']-->'强力vc银翘片'

#2)获取第一行

salesDf.loc[0,:]--> 购药时间 2018-01-01 星期五

社保卡号 001616528

商品编号 强力vc银翘片

销售数据 6

应收金额 82.8

实收金额 69

Name: 0, dtype: object

#3)获取第1列

salesDf.loc[:,'商品编号']--> 0 强力vc银翘片

1 清热解毒口服液

2 感康

Name: 商品编号, dtype: object

#简单写法 salesDf['商品编号']

复杂的数据框查询

#查询某几列

salesDf[['商品编号','销售数据','实收金额']]-->

#切片功能:指定范围

salesDf.loc[:,'商品编号':'实收金额']-->

条件判断

#通过条件判断筛选

#1)构建查询条件

queryStr=salesDf.loc[:,'销售数据']>1

type(queryStr)-->pandas.core.series.Series

#2)应用查询条件

salesDf.loc[queryStr,:]-->

三、分析案例

数据分析的流程:1、提出问题-->2、理解数据-->3、数据清洗-->

4、构建模型-->5、数据可视化

1、提出问题:①、月均消费次数

②、月均消费金额

③、客架单

④、消费趋势

2、理解数据:

#读取数据

fileNameStr='F:\数据分析(中级)(Python)\第3关:数据分析的基本过程/朝阳医院2018年销售数据.xlsx'

xls=pd.ExcelFile(fileNameStr,dtype='object')

salesDf=xls.parse('Sheet1',dtype='object')

##获取前5行

salesDf.head()-->

#多少行,列

salesDf.shape--> (6578, 7)

#查看数据类型

salesDf.dtypes--> 购药时间 object

社保卡号 object

商品编码 object

商品名称 object

销售数量 object

应收金额 object

实收金额 object

dtype: object

3、数据清洗

流程;1、选择子集-->2、列重命名-->3、缺失值处理-->

4、数据类型转换-->5、数据排序-->异常值处理

#1、选择子集,这里选取了前5行,由于这个案例不需要选择子集,下的只为练习

salesDf_1=salesDf.loc[0:4,'购药时间':'销售数量']

salesDf_1

#2、列进行重命名

colnameDict={'购药时间':'销售时间'}

salesDf.rename(columns=colnameDict,inplace=True) #inplace=Flase 数据框本身不动,新创建

salesDf #inplace=True 修改数据本身

#3、缺失值处理:

salesDf=salesDf.dropna(subset=(['销售时间','社保卡号']),how='any')

#any表示任意一列

salesDf.shape--> (6575, 7)

#4、数据转换

salesDf['销售数量']=salesDf['销售数量'].astype('float')

salesDf['应收金额']=salesDf['应收金额'].astype('float')

salesDf['实收金额']=salesDf['实收金额'].astype('float')

salesDf.dtypes--> 销售时间 object

社保卡号 object

商品编码 object

商品名称 object

销售数量 float64

应收金额 float64

实收金额 float64

dtype: object

salesDf-->

字符串split

#字符串分割

testList='2018-08-13 星期一'.split(' ')

testList--> ['2018-08-13', '星期一']

testList[0]-->'2018-08-13'

数据格式的转换

#定义函数

def splitsaletime(timecolser):

#创建一个空的容器(列表)

testList=[]

#进行迭代

for value in timecolser:

#将字数组数据转换为字符串

value=str(value)

#split字符串分割

dataSer=value.split(' ')[0]

#逐一添加

testList.append(dataSer)

#返回series 一维数组

timeSer=pd.Series(testList)

return timeSer

timeser=salesDf.loc[:,'销售时间']

dataser= splitsaletime(timeser)

dataser-->

salesDf.loc[:,'销售时间']=dataser

salesDf-->

#字符串转换日期格式

#如果格式不能转换日期格式,就变为空值

salesDf.loc[:,'销售时间']=pd.to_datetime(salesDf.loc[:,'销售时间'],format='%Y-%m%d',errors='coerce')

salesDf.dtypes--> 销售时间 datetime64[ns]

社保卡号 object

商品编码 object

商品名称 object

销售数量 float64

应收金额 float64

实收金额 float64

dtype: object

#在进行一次空值删除

salesDf=salesDf.dropna(subset=(['销售时间','社保卡号']),how='any')

salesDf-->

#数据排序

print('排序前的数据集')

salesDf.head()-->

#按销售日期进行排序

salesDf=salesDf.sort_values(by='销售时间',ascending=True)

salesDf

#True表示升序排序,False表示降序-->

#重命名行名(index):排序后的列索引值是之前的行号,需要修改成从0到N按顺序的索引值

salesDf=salesDf.reset_index(drop=True)

salesDf.head()-->

#数据的描述统计

salesDf.describe()-->发现最小金额为负数,属于异常值

#删除异常值:通过条件判断筛选出数据

#查询条件

#删除异常值:通过条件判断筛选出数据

#查询条件

query=salesDf.loc[:,'销售数量']>0

salesDf=salesDf.loc[query,:]

salesDf.shape-->(6506, 7)

构建模型

1、业务指标1:月均消费次数=总消费次数 / 月份数

#删除重复数据

kpi1_Df=salesDf.drop_duplicates(subset=['销售时间','社保卡号'])

#查询shape的行数据

total=kpi1_Df.shape[0]

total-->5342

#按销售时间升序排列

kpil_Df=kpi1_Df.sort_values(by='销售时间',ascending=True)

#重命名行名称

kpil_Df=kpi1_Df.reset_index(drop=True)

kpil_Df-->

#最早销售时间

startTime=kpil_Df.loc[0,'销售时间']

#最晚销售时间

endTime=kpil_Df.loc[total-1,'销售时间']

#计算天数

daysI=(endTime-startTime).days

#计算月份数,取整删余

months=daysI//30

print('月份为:',months,'天')--> 6 天

#业务指标1:计算月消费次数

kpil_I=total/months

print('月消费次数:','{:3f}'.format(kpil_I))

--> 月消费次数: 890.333333

2、业务指标2:月均消费金额=总消费金额/月份数

#计算所有的实收金额

monerysum=sum(salesDf['实收金额'])

#计算月均消费金额

moneryF=monerysum/months

moneryF-->50668.351666666305

3、业务指标3:客单价=总消费金额/总消费次数

#客单价=总消费金额/总消费次数

pct=monerysum / total

print('客单价:',pct)-->56.909417821

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值