本文总结了猴子Live课程:怎样用Python进行数据分析,主讲内容包括Numpy和Pandas。
一、一维数据分析
一维数据分析,可以使用Numpy中Array,也可以使用Pandas中的Series,Series的功能会更多些。
Numpy一维数组的使用:
Numpy一维数组与Python列表的区别?--Numpy具有统计功能、向量化计算,Numpy数组中的数据类型必须是一致的,Python列表可以存储不同的数据类型。
Pandas一维数组的使用:
Pandas的Series可以创建索引,可以使用describe获取描述性统计信息
Pandas的Series获取数据有两种方式,iloc根据元素位置获取值,loc根据索引获取值
Pandas - Series支持向量相加,可以使用+号和add,add支持缺失值填充
二、二维数据分析
Numpy中通过Array创建二维数组,Pandas中通过DataFrame创建二维数组,数据框DataFrame更加广泛。
Numpy二维数组:如何定义二维数组、3种获取元素的情况
Numpy数轴参数,指定按照某一行或者某一列进行计算
DataFrame二维数组:
DataFrame相对于Numpy二维数组的优势:
- DataFrame每一列可以是不同的数据类型
- DataFrame每一行每一列都有一个索引值,很容易存储常见的表格数据
DataFrame 的创建和使用,学会使用iloc按照位置查询数据,loc按照索引查询数据,通过列表查询某几列数据,通过切片查询数据,以及通过条件判断筛选数据。
DataFrame:数据集描述性统计信息
三、通过案例学习数据分析步骤
数据分析步骤:提出问题、理解数据、数据清洗、构建模型、数据可视化
提出问题:一切的数据分析都是为了解决我们工作或生活中的问题,明确的问题为我们后面的数据分析提供了一个大的目标。
理解数据:根据我们的问题采集数据,将数据导入到数据框中,查看数据集的信息,从整体上了解数据。
数据清洗:对数据进行清洗,很多数据并不符合我们的标准。
构建模型:简单的分析是得到某些业务的指标,复杂的分析需要用到机器学习的算法。
数据可视化:与他人交流自己的数据结果,最好的方式就是使用图表。
案例过程:
1. 提出问题:某医院销售数据,需要获取月均消费次数、月均消费金额、客单价、消费趋势
理解每个业务指标的含义,实际项目中,前期我们需要和业务人员一起讨论明确他们的需求,各个指标的计算公式
2. 理解数据
#1.读取Excel数据(统一按str读入,之后转换)
fileNameStr='./医院销售数据.xlsx'
xls=pd.ExcelFile(fileNameStr, dtype='object')
salesDf=xls.parse('Sheet1',dtype='object')
#2.打印前几行
salesDf.head()
#3.查看有多少行多少列
salesDf.shape()
#4.查看列的数据类型
salesDf.dtypes
3. 数据清洗
数据清洗步骤:
- 选择子集
- 列名重命名
- 缺失数据处理
- 数据类型转换
- 数据排序
- 异常值处理
#1.选择子集
subSalesDf=salesDf.loc[0:4,'购药时间':'销售数据']
#2.列名重命名
colNameDict=['购药时间':'销售时间']
subSalesDf.rename(columns=colNameDict,inplace=True)
#3.缺失数据处理,删除指定列中为空的行,
#how='any'在给定的任何一列中有缺失值就删除
subSalesDf.dropna(subset=['销售时间','社保卡号'],how='any']
#4.数据类型转换,字符串转化为数值
subSalesDf['销售数量']=subSalesDf['销售数量'].astype('float')
subSalesDf['应收金额']=subSalesDf['应收金额'].astype('float')
subSalesDf['实收金额']=subSalesDf['实收金额'].astype('float')
#处理日期,字符串分割split,定义一个分割日期的函数
'''
定义函数:分割销售时间,获取销售日期
输入:timeSereis销售时间这一列,是个Series数据类型
输出:分割后的时间,返回也是个Sereis数据类型
'''
def splitSaletime(timeSeries):
timeList=[]
for value in timeSeries:
#分割字符串,获取销售日期
dateStr=value.split('')[0]
timeList.append(dateStr)
#将列表转行为一维数据Series类型
timeSeries=pd.Sereis(timeList)
return timeSeries
#获取销售时间这一列,对字符串进行分割获取销售日期
timeSeries=subSalesDf.loc[:,'销售时间']
dateSeries=splitSaletime(timeSeries)
#修改销售时间这一列的值
subSalesDf.loc[:,'销售时间']=dateSeries
#字符串转日期
subSalesDf.loc[:,'销售时间']=pd.to_datetime(subSalesDf.loc[:,'销售时间'],format='%Y-%m-%d',errors='coerce')
#转化日期过程中不符合日期格式的数值会被转化为控制None,删除为空的行
subSalesDf.dropna(subset=['销售时间'],how='any']
#5.数据排序,按销售日期进行升序排序
subSalesDf=subSalesDf.sortvalues(by='销售时间',ascending=True)
#重命名行名(index)
subSalesDf=subSalesDf.reset_index(drop=True)
#6.异常值处理
#每一列的描述性统计信息
subSalesDf.describe()
#删除异常值:通过条件判断筛选出数据
#查询条件
querySeries=subSalesDf.loc[:,'销售数据']>0
#应用查询条件
subSalesDf=subSalesDf.loc[querySeries,:]
4. 构建模型