首页 > 编程语言 >Python数据分析的基本过程

Python数据分析的基本过程

时间:2024-04-01 13:59:21浏览次数:37  
标签:数据分析 基本 消费 Python 销售 salesDf print 数据

一般来说,数据分析的基本过程包括以下几个步骤:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

1.提出问题——即我们所想要知道的指标(平均消费额、客户的年龄分布、营业额变化趋势等等)

2.导入数据——把原始数据源导入Jupyter Notebook中(网络爬虫、数据读取等)

3.数据清洗——数据清洗是指发现并纠正数据文件中可识别的错误(检查数据一致性,处理无效值和缺失值等)

4.构建模型(高级的模型构建会使用机器学习的算法)

5.数据可视化——matplotib库等

具体的numpy库等基础知识之前的文章已经介绍了:

Numy基础知识分享

Pandas入门基本知识

我们现在来看一个实例——医院药店销售数据分析

原始数据连接:

原始数据预览(部分):

提出问题

我们想知道的信息有——月均消费额、月均消费次数、客单价、消费趋势

理解数据

1.读取Excel数据(路径中最好不要有中文,或者特殊符号啥的,不然路径会提示错误找不到。

最好将文件放到一个简单的英文路径下)

import pandas as pd
fileNameStr='D:\朝阳医院2018年销售数据.xlsx'          #读取Ecxcel数据
xls = pd.ExcelFile(fileNameStr, dtype='object')   
salesDf = xls.parse('Sheet1',dtype='object')

我们可以先查看下数据的基本信息:

salesDf.head()          #打印出前5行,以确保数据运行正常

salesDf.shape           #有多少行,多少列

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

salesDf.dtypes          #查看每列的数据类型

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

数据清洗

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

1.选择子集(本案例不用):

使用loc方法选择子集

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

2.列名重命名:

colNameDict = {'购药时间':'销售时间'}                  #将‘购药时间’改为‘销售时间’
salesDf.rename(columns = colNameDict,inplace=True)
salesDf.head()                                       #查看前五行

inplace=False,数据框本身不会变,而会创建一个改动后新的数据框,默认的inplace是False,inplace=True,数据框本身会改动

3.缺失数据处理:

python缺失值有3种:None,NA,NaN

1)Python内置的None值

2)在pandas中,将缺失值表示为NA,表示不可用not available。

3)对于数值数据,pandas使用浮点值NaN(Not a Number)表示缺失数据。

后面出来数据,如果遇到错误:…foloat错误,那就是有缺失值,需要处理掉

print('删除缺失值前大小',salesDf.shape)
salesDf=salesDf.dropna(subset=['销售时间','社保卡号'],how='any') #删除列(销售时间,社保卡号)中为空的行
print('删除缺失后大小',salesDf.shape)

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

how='any’意为在给定的任何一列中有缺失值就删除

如果缺失数据太多,我们可以建立模型,使用插入值的方法来补充数据(以后机器学习的文章中介绍)

4.数据类型转换

一开始导入时我们将所有数据都按字符串类型导入的,现在需要将销售数量、应收金额、实收金额的数据类型改为数值类型。

salesDf['销售数量'] = salesDf['销售数量'].astype('float')
salesDf['应收金额'] = salesDf['应收金额'].astype('float')
salesDf['实收金额'] = salesDf['实收金额'].astype('float')
print('转换后的数据类型:\n',salesDf.dtypes)

使用astype()方法进行类型转换

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

我们再来修改日期的格式

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

用split()方法,用‘ ’分割字符串。返回列表的第一个元素,统一改成年-月-日格式,去掉星期几。

接下来我们分割销售时间,先定义一个分割字符串的函数:

def splitSaletime(timeColSer):
    timeList=[]
    for value in timeColSer:           #例如2018-01-01 星期五,分割后为:2018-01-01
        dateStr=value.split(' ')[0]
        timeList.append(dateStr)
 
    timeSer=pd.Series(timeList)        #将列表转行为一维数据Series类型
    return timeSer

输入:timeColSer——销售时间这一列,是个Series数据类型

输出:分割后的时间,返回也是个Series数据类型

timeSer=salesDf.loc[:,'销售时间']    #获取“销售时间”这一列
dateSer=splitSaletime(timeSer)      #对字符串进行分割,获取销售日期

salesDf.loc[:,'销售时间']=dateSer    #修改销售时间这一列的值
salesDf.head()

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

(注意:如果运行后报错:AttributeError: ‘float’ object has no attribute 'split’是因为Excel中的空的cell读入pandas中是空值(NaN),这个NaN是个浮点类型,一般当作空值处理。所以要先去除NaN在进行分隔字符串)

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

5.字符串转换日期

我们使用pd.to_datetime方法来将字符串转换为日期格式。传入的格式是原始数据的日期格式——format='%Y-%m-%d’固定写法:Y表示年、m表示月、d表示日。

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

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

errors=‘coerce’: 如果原始数据不符合日期的格式,转换后的值为空值NaT

所以转换之后我们还要运行一次删除空值的代码,因为不符合格式的日期被转变为了空值需要删除。

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

6.数据排序

使用pd.sort_values方法对数据进行排序,by表示按那几列进行排序,ascending=True 表示升序排列,ascending=False表示降序排列

print('排序前的数据集')
salesDf.head()
salesDf=salesDf.sort_values(by='销售时间',     #按销售日期进行升序排列
                    ascending=True)
print('排序后的数据集')
salesDf.head(3)

接下来我们重命名行号:reset_index方法生成从0到N按顺序的索引值

salesDf=salesDf.reset_index(drop=True)
salesDf.head()

7.异常值处理

首先我们用describe()方法查看数据框中所有数据每列的描述统计信息:

salesDf.describe()

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

(count:总数,mean:平均数,std:标准差,min:最小值,25%:下四分位数,50%:中位数,75%:上四分位数,max:最大值)

我们发现最小值出现了小于0的情况,分析应该是记录过程中出现错误所致。

我们接下来删除异常值:通过条件判断筛选出销售数量大于0的数据

#设置查询条件
querySer=salesDf.loc[:,'销售数量']>0
#应用查询条件
print('删除异常值前:',salesDf.shape)
salesDf=salesDf.loc[querySer,:]
print('删除异常值后:',salesDf.shape)

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

这样,我们就算基本完成数据清洗的步骤了。

构建模型:

第一个指标:月均消费次数=总消费次数/月数

注意:同一天内,同一个人发生的所有消费算作一次消费,根据列名(销售时间,社区卡号),如果这两个列值同时相同,只保留1条,使用drop_duplicates将重复的数据删除

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

totalI=kpi1_Df.shape[0]             #总消费次数————有多少行

print('总消费次数=',totalI)

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

计算月份数我们要知道最早一笔消费的时间和最晚一笔消费的时间:

#第1步:按销售时间升序排序
kpi1_Df=kpi1_Df.sort_values(by='销售时间',
                    ascending=True)
kpi1_Df=kpi1_Df.reset_index(drop=True)     #重命名行名(index)

#第2步:获取时间范围
startTime=kpi1_Df.loc[0,'销售时间']         #最小时间值
endTime=kpi1_Df.loc[totalI-1,'销售时间']    #最大时间值

#第3步:计算月份数
daysI=(endTime-startTime).days             #天数
monthsI=daysI//30                          #月份数: 运算符“//”表示取整除,返回商的整数部分,例如9//2 输出结果是4
print('月份数:',monthsI)

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

用天数/30计算月份数(舍弃余数)

最终计算月均消费次数=总消费次数 / 月份数

kpi1_I=totalI // monthsI
print('业务指标1:月均消费次数=',kpi1_I)

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

第二个指标:月均消费金额=总消费金额/月份数

总消费金额等于实收金额取和,用sum函数很快就能得出

totalMoneyF=salesDf.loc[:,'实收金额'].sum()   #总消费金额
monthMoneyF=totalMoneyF / monthsI            #月均消费金额
print('业务指标2:月均消费金额=',monthMoneyF)

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

第三个指标:客单价=平均交易金额=总消费金额/总消费次数

'''
totalMoneyF:总消费金额
totalI:总消费次数
'''
pct=totalMoneyF / totalI
print('客单价:',pct)

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

第四个指标:消费趋势

#在进行操作之前,先把数据复制到另一个数据框中,防止对之前清洗后的数据框造成影响
groupDf=salesDf

#第1步:重命名行名(index)为销售时间所在列的值
groupDf.index=groupDf['销售时间']

#第2步:分组
gb=groupDf.groupby(groupDf.index.month)

#第3步:应用函数,计算每个月的消费总额
mounthDf=gb.sum()

mounthDf

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

加下来的部分将用到一些pandas的高级应用知识,连同后面的数据可视化的内容将在接下来的文章中介绍。

关于Python学习指南

学好 Python 不论是就业还是做副业赚钱都不错,但要学会 Python 还是要有一个学习规划。最后给大家分享一份全套的 Python 学习资料,给那些想学习 Python 的小伙伴们一点帮助!

包括:Python激活码+安装包、Python web开发,Python爬虫,Python数据分析,人工智能、自动化办公等学习教程。带你从零基础系统性的学好Python!

标签:数据分析,基本,消费,Python,销售,salesDf,print,数据
From: https://blog.csdn.net/Trb201012/article/details/137172238

相关文章

  • 这篇文章教大家如何系统的学Python
    首先给自己规划一条系统的学习路线,先学什么,后学什么。然后按照这条学习路线,每天给自己安排一定的学习任务,保证代码量。在学习的过程中,做好笔记,把重要的知识点都记录下来,方便以后查阅和复习,定期对以前的知识点进行归纳和总结,不至于学了新的知识忘了以前学过的。Python比较......
  • 时序预测 | Python实现VMD-CNN-LSTM时间序列预测
    时序预测|Python实现VMD-CNN-LSTM时间序列预测目录时序预测|Python实现VMD-CNN-LSTM时间序列预测预测效果基本介绍模型描述代码设计预测效果基本介绍VMD-CNN-LSTM是一种混合深度学习模型,结合了变分模态分解(VMD)、卷积神经网络(CNN)和长短期记忆......
  • Python教程01-基础知识
    1.注释1.1什么是注释从小我们知道看书时,可以做一些笔记,能够把当时的灵感想法记录下来,以便在以后再次阅读时快速想起来同样,Python编程语言是由英文编写的,很多时候怕忘记这些代码的作用以及注意点等,也需要写一点“笔记”,此时这些帮助我们的信息就成为“注释”1.2注释的作用......
  • 每天一个数据分析题(二百四十四)
    LightGBM算法的哪些优化策略有助于提高模型的训练速度?A.Gradient-basedOne-SideSampling(GOSS)B.ExclusiveFeatureBundling(EFB)C.深度优先搜索(DFS)分裂D.使用L1正则化题目来源于CDA模拟题库点击此处获取答案......
  • CDA Club 第2期《数据分析组队打卡学习活动》正式开营!
    CDAClub第2期《数据分析组队打卡学习活动》正式开营!为增进国内外数据分析师爱好者对数据科学理论与工具实践的了解和认识,方便大家利用碎片化时间在线学习,CDA俱乐部旗下学术部于3月25日-4月24日举办第2期《数据分析组队打卡学习活动》活动。本次打卡共吸引了330余名来自......
  • 【精品方案】智慧金融大数据分析平台总体架构方案
    以下是部分PPT内容,请您参阅。如需下载完整PPTX文件,请前往星球获取:1.实现数据共享通过数据平台实现数据集中,确保金融集团各级部门均可在保证数据隐私和安全的前提下使用数据,充分发挥数据作为企业重要资产的业务价值2.加强业务协作实现分散在供应链金融、人人贷、保理等......
  • 为什么选择霍格沃兹测试开发学社Python全栈开发与测试班?
    Python全栈开发与测试什么是软件测试?对于测试行业来说,行业普遍会把职位分为测试工程师和测试开发工程师两个岗位。软件测试工程师就是常规意义上了解到的功能测试岗位,以功能测试为主,会有少量的自动化测试。测试能力要求:熟悉测试流程与理论、用例设计与维护、用例执行,掌握简单......
  • WPF中动画教程(DoubleAnimation的基本使用)
    实现效果今天以一个交互式小球的例子跟大家分享一下wpf动画中DoubleAnimation的基本使用。该小球会移动到我们鼠标左键或右键点击的地方。该示例的实现效果如下所示:页面设计xaml如下所示:<Windowx:Class="AnimationDemo.MainWindow"xmlns="http://schemas.microsof......
  • python opencv计算图片rgb平均值
    pythonopencv计算图片rgb平均值importcv2importnumpyasnp#读取图像3_202403281448172_20240328165448image=cv2.imread('3_20240328144817.jpg')#确保图像读取成功ifimageisnotNone:#OpenCV读取图像为BGR格式,我们需要转换为RGB#rgb_......
  • [Python]知识点
    【版权声明】未经博主同意,谢绝转载!(请尊重原创,博主保留追究权)https://www.cnblogs.com/cnb-yuchen/p/18031984出自【进步*于辰的博客】注:本文可能不适合0-Python基础的博友,因为对于各类知识点,我阐述的宗旨是“阐明使用细节”,而不是基础知识。目录1、其他知识点链接2、pip......