一、一维数据分析Numpy1、Numpy一维数组#定义:一维数组arraya=np.array([2,3,4,5])①查询元素a[0]②切片访问a[1:3]③循环访问for i in a:④数据类型dtype
2、统计功能平均值mean(),标准差std()3、向量化计算①向量相加②乘以标量
![](http://ldjg88.com/zb_users/upload/2024/05/20240526073603171668016370468.webp)
![](http://ldjg88.com/zb_users/upload/2024/05/20240526073603171668016354554.webp)
二、一维数据分析Pandas#定义:一维数组Series
![](http://ldjg88.com/zb_users/upload/2024/05/20240526073603171668016314620.webp)
#获取描述统计信息
![](http://ldjg88.com/zb_users/upload/2024/05/20240526073603171668016333188.webp)
#iloc属性:用于根据位置获取值#loc属性:用于根据索引获取值
![](http://ldjg88.com/zb_users/upload/2024/05/20240526073604171668016442483.webp)
#向量化运算:向量相加
![](http://ldjg88.com/zb_users/upload/2024/05/20240526073604171668016423689.webp)
![](http://ldjg88.com/zb_users/upload/2024/05/20240526073604171668016433995.webp)
#方法1:删除缺失值s3.dropna()#方法2:将缺失值进行填充s3=s1.add(s2,fill_value=0)三、二维数据分析Numpy#定义二维数组
![](http://ldjg88.com/zb_users/upload/2024/05/20240526073604171668016415908.webp)
![](http://ldjg88.com/zb_users/upload/2024/05/20240526073605171668016515999.webp)
①查询元素a[0,2]②获取第1行:a[0,:]③获取第1列:a[:,0]
![](http://ldjg88.com/zb_users/upload/2024/05/20240526073605171668016598466.webp)
#按轴计算:axis=1计算每一行
![](http://ldjg88.com/zb_users/upload/2024/05/20240526073605171668016530575.webp)
平均值
![](http://ldjg88.com/zb_users/upload/2024/05/20240526073605171668016535574.webp)
标准差注:axis=0 计算每一列四、二维数据分析Pandas#第一步:定义一个字典,映射列名与对应列的值
![](http://ldjg88.com/zb_users/upload/2024/05/20240526073605171668016541864.webp)
![](http://ldjg88.com/zb_users/upload/2024/05/20240526073606171668016644459.webp)
#第二步:定义数据框,参数传入字典 (DataFrame--数据框)
![](http://ldjg88.com/zb_users/upload/2024/05/20240526073606171668016653321.webp)
![](http://ldjg88.com/zb_users/upload/2024/05/20240526073606171668016624413.webp)
1、有序的数据框#导入有序字典from collections import OrderedDict#定义一个有序字典salesOrderDict=OrderedDict(salesDict)#定义数据框:传入字典,列名
salesDf=pd.DataFrame(salesOrderDict)2、平均值计算#平均值:是按每列来求平均值salesDf.mean()3、iloc属性用于根据位置查询值①查询元素salesDf.iloc[0,1]
![](http://ldjg88.com/zb_users/upload/2024/05/20240526073606171668016612564.webp)
②获取第1行:salesDf.iloc[0,:]
![](http://ldjg88.com/zb_users/upload/2024/05/20240526073607171668016751166.webp)
③获取第1列:salesDf.iloc[:,0]
![](http://ldjg88.com/zb_users/upload/2024/05/20240526073607171668016734033.webp)
4、loc属性用于根据索引查询值①查询元素salesDf.loc[0,商品名称]
![](http://ldjg88.com/zb_users/upload/2024/05/20240526073607171668016793687.webp)
②获取第1行:salesDf.loc[0,:]
![](http://ldjg88.com/zb_users/upload/2024/05/20240526073608171668016874013.webp)
③获取第1列:salesDf.loc[:,商品名称] 或 salesDf[商品名称]
![](http://ldjg88.com/zb_users/upload/2024/05/20240526073608171668016814937.webp)
五、数据查询1、查询某几列salesDf[[商品名称,销售数量]]
![](http://ldjg88.com/zb_users/upload/2024/05/20240526073608171668016893406.webp)
2、切片功能:指定范围salesDf.loc[0:2,商品名称:销售数量]
![](http://ldjg88.com/zb_users/upload/2024/05/20240526073608171668016880633.webp)
3、构建查询条件①构建查询条件querySer=salesDf.loc[:,销售数量]>1type(querySer)
![](http://ldjg88.com/zb_users/upload/2024/05/20240526073608171668016852915.webp)
注:存放布尔类型数值(true、false)②应用查询条件salesDf.loc[querySer,:]
![](http://ldjg88.com/zb_users/upload/2024/05/20240526073609171668016935389.webp)
4、描述统计分析①读取Excel数据
![](http://ldjg88.com/zb_users/upload/2024/05/20240526073609171668016947295.webp)
②打印前5行:salesDf.head()
![](http://ldjg88.com/zb_users/upload/2024/05/20240526073609171668016953169.webp)
③查看列的数据类型:dtype#查看某一列的数据类型salesDf.loc[:,销售数量].dtype
![](http://ldjg88.com/zb_users/upload/2024/05/20240526073609171668016966095.webp)
④有多少行,多少列:shapesalesDf.shape
![](http://ldjg88.com/zb_users/upload/2024/05/20240526073609171668016936317.webp)
⑤每一列的描述统计分析:salesDf.describe()
![](http://ldjg88.com/zb_users/upload/2024/05/20240526073610171668017047279.webp)
六、案例:销售数据分析数据分析步骤明确问题理解数据数据清洗数据分析或构建模型数据可视化1、明确问题月均消费次数月均消费金额客单价消费趋势2、理解数据读取Excel数据
![](http://ldjg88.com/zb_users/upload/2024/05/20240526073610171668017068152.webp)
打印前几行:salesDf.head()
![](http://ldjg88.com/zb_users/upload/2024/05/20240526073609171668016953169.webp)
有多少行,多少列:salesDf.shape查看数据类型:salesDf.dtypes
![](http://ldjg88.com/zb_users/upload/2024/05/20240526073610171668017060130.webp)
3、数据清洗数据清洗步骤选择子集列名重命名缺失数据处理数据类型转换数据排序异常值处理①选择子集#选择子集(本案例不需要选择子集)subsalesDf=salesDf.loc[0:4,购药时间:销售数量]
②列名重命名#字典:旧列名和新列名对应关系colNameDict={购药时间:销售时间}注:inplace=False,数据框本身不变,而会创建一个改动后的新数据框,默认inplace=False;inplace=True,数据框本身会改动
salesDf.rename(columns=colNameDict,inplace=True)
③缺失数据处理print(删除缺失值前大小,salesDf.shape)
#删除列(销售时间,社保卡号)中为空的行#how=any 在给定的任何一列中有缺失值就删除salesDf=salesDf.dropna(subset=[销售时间,社保卡号],how=any)print(删除缺失值后大小,salesDf.shape)
④数据类型转换字符串转换为数值(浮点数)salesDf[销售数量]=salesDf[销售数量].astype(float)salesDf[应收金额]=salesDf[应收金额].astype(float)
salesDf[实收金额]=salesDf[实收金额].astype(float)
字符串分割split#字符串分割testList=2018-06-03 星期五.split( )testList[0]
定义函数:分割销售日期,获取销售日期输入:timeColSer销售时间这一列,是个Series数据类型输出:分割后的时间,返回也是个Series数据类型def splitSaletime(timeColSer):
timeList=[] for value in timeColSer: #例如2018-01-01 星期五,分割后为:2018-01-01dateStr=value.split( )[0]timeList.append(dateStr)
#将列表转行为一维数据Series类型timeSer=pd.Series(timeList)return timeSer#获取‘销售日期’这一列timeSer=salesDf.loc[:,销售日期]#对字符串进行分割,获取销售日期
dateSer=splitSaletime(timeSer)#修改销售时间这一列的值salesDf.loc[:,销售时间]=dateSer.values
销售日期需要为字符串类型,且没有空值字符串转换日期#errors=coerce 如果原始数据不符合日期的格式,转换后的值为NaT#format 是你原始数据中日期格式salesDf.loc[:,销售时间]=pd.to_datetime(salesDf.loc[:,销售时间],format=%Y-%m-%d,errors=coerce)
4、数据分析指标1:月均消费次数总消费次数/月份数①总消费次数(一人一天只计算1次)#删除重复数据kpi1Df=salesDf.drop_duplicates(subset=[销售时间,社保卡号])#有多少行
totalI=kpi1Df.shape[0]print(总消费次数,totalI)
②月份数#排序:按销售时间升序排序kpi1Df=kpi1Df.sort_values(by=销售时间,ascending=True)#重命名行名(index)kpi1Df=kpi1Df.reset_index(drop=True)
#获取时间范围startTime=kpi1Df.loc[0,销售时间]----最小值endTime=kpi1Df.loc[totalI-1,销售时间]----最大值#计算月份数 #天数daysI=(endTime-startTime).days
#月份数:运算符‘//’表示取整数#返回商的整数部分,例如9//2输出结果为4monthsI=daysI//30print(月份数,monthsI)
kpi1_I=totalI//monthsIprint(业务指标1:月均消费次数=,kpi1_I)
指标2:月均消费金额总消费金额/月份数#总消费金额totalMoneyF=salesDf.loc[:,实收金额].sum()#月均消费金额monthMoneyF=totalMoneyF/monthsIprint(业务指标2:月均消费金额,monthMoneyF)
金额需为浮点数指标3:客单价总消费金额/总消费次数pct=monthMoneyF/totalIprint(客单价:,pct)
发表评论:
◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。