python数据分析
数据分析包:Numpy+Pandas+matplotlib

1. 一维数据分析
1、Pands和Numpy
1)一维数据的表示方式:
- Numpy:Array
- Pandas:Series
2)二者的关系:
pandas的Serise功能多于Array,且Series建立在Array基础上。
因此,以后会使用pandas的Series实现一维数据的操作。
1-1. Numpy一维数组
1、基本操作:初始化、查询、访问
import numpy as np
import pandas as pd
'''
一、Numpy基本操作
'''
#Numpy一维数组
a=np.array([2,3,4,5])
a
#查询index=0时array中存放的数据
a[0]
#切片查询 a[index1:index2],其中不包括a[index2]这个数据
a[1:3]
#循环访问 ,i代表array中的每个元素
for val in a:
print(val)
#查询数据类型
a.dtype
2、高级操作:均值、标准差、向量相加、向量相乘
'''
二、Numpy统计学相关操作
'''
#均值
print(a.mean())
#标准差
print(a.std())
#向量的加法
b=[7,8,3,2]
a+b
#向量的乘法
a*3
1-2. Pandas一维数据
基本操作
#Series初始化
stockS=pd.Series([54.74,190.9,173.14,1050.3,181.86,1139.49],
index=['腾讯','阿里','苹果','谷歌','Facebook','亚马逊'])
#获取描述统计信息
stockS.describe()
#获取index对应的元素
stockS.iloc[1]
#获取索引值对应的元素
stockS.loc['腾讯']
向量相加操作
#向量相加,根据索引相等来相加
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
#向量相加,删除空值法1——dropna方法
print(s3.dropna())
#向量相加,将缺失值用0填充
s3=s1.add(s2,fill_value=0)
print(s3)
2. 二维数据
2-1. Numpy二维数据
'''
Numpy二维数据结构:Array
基本操作:初始化、根据index访问元素、根据切片获取元素
'''
#二维数组初始化
a=np.array([
[1,2,3,4],
[5,6,7,8],
[9,10,11,12]
])
#根据index获取元素,获取行号为0,列号为2的元素
print(a[0,2])
#切片操作获取元素——获取第一行元素
print(a[0,:])
#切片操作获取元素——获取第一列元素
print(a[:,0])
'''
axis
'''
#按列计算均值
a.mean(axis=0)
#按行计算均值
a.mean(axis=1)
2-2. pandas二维数据
Numpy二维数组,每个数据都一样,不利于表示Excel类似的不同数据类型
pandas的好处
- 每一列可以是不同类型,可以方便表示Excel数据
- 每一行、每一列都有统计数据
1、定义数据框
salesDict={
'购药时间':['2018-01-01 星期五','2018-01-02 星期六','2018-01-06 星期三'],
'社保卡号':['001616528','001616528','0012602828'],
'商品编码':[236701,236701,236701],
'商品名称':['强力VC银翘片','清热解毒口服液','感康'],
'销售数量':[6,1,2],
'应收金额':[82.8,28,16.8],
'实收金额':[69,24.64,15]
}
#导入有序字典
from collections import OrderedDict
#定义一个有序字典,保证数据插入顺序为存储顺序
salesOrderDict=OrderedDict(salesDict)
#初始化DataFrame
salesDf=pd.DataFrame(salesOrderDict)
2、获取统计信息_平均值
salesDf.mean()
3、查询数据
#ioc获取数据方式
salesDf.iloc[0,1] #获取第0行,第1列数据
salesDf.iloc[0,:] #获取第一行数据
salesDf.iloc[:,0] #获取第一列数据
#loc获取数据方式
salesDf.loc[0,'商品编码'] #第0行,列名为“商品编码”对应位置的数据
salesDf.loc[0,:] #第0行所有数据
salesDf.loc[:,'商品编码'] #获取商品编码列所有的数据
...
采取各种方式获取列数据
...
#获取某列数据
salesDf['商品编码']
#通过列表来选择某几列的数据
salesDf[['商品名称','销售数量']]
# 通过切片功能,获取指定范围的列
salesDf.loc[:,'购药时间':'销售数量']
4、获取符合条件的数据
# step1:选择销售数量大于1的行号
querySer=salesDf.loc[:,'销售数量']>1
# step2:根据行号进行切片,获取想要的列
salesDf.loc[querySer,:]
5、获取数据集的描述统计信息
# 读取Excel数据
fileNameStr='./朝阳医院2018年销售数据.xlsx'#设置Excel的名字和位置
xls=pd.ExcelFile(fileNameStr) #读取Excel数据
salesDf=xls.parse('Sheet1') #将指定Sheet的数据转为DateFram数据
salesDf.head(3) #读取前三行数据,确保数据正常读取
salesDf.shape #获取数据的行数和列数
salesDf.loc[:,'销售数量'].dtype #查看某列的数据类型
salesDf.describe() #查看每列的统计描述信息
3. 案例:销售数据分析
数据分析步骤
- 提出问题
一切数据分析的目标都是为了解决生活和工作中的实际问题
在撰写分析报告前,必须定义清楚要研究的问题 - 理解数据
采集数据:根据定义的问题,采集相关数据
导入数据:数据可能在Excel等文件中
查看数据集的信息:从整体理解数据 - 数据清洗
- 构建模型
对清洗后的数据进行分析
简单的分析:求取业务指标;
复杂的分析:机器学习训练 - 数据可视化
图表方式展示数据
3-1. 提出问题
需要分析出的业务指标:
1)月均消费次数
2)月均消费金额
3)客单价
4)消费趋势
3-2. 理解数据
import pandas as pd
#理解数据 第一步:读取Excel文件
fileNameStr='./朝阳医院2018年销售数据.xlsx' #设置filename:路径+文件名
salesDf=pd.read_excel(fileNameStr,sheet_name='Sheet1',dtype='object') #数据以object形式读入
#理解数据 第二步:打印前几行,看看每行数据情况
salesDf.head(5) #查看前5行数据
#理解数据 第三步:查看行数和列数
salesDf.shape
# 理解数据 第四步:查看每列数据类型
salesDf.dtypes

数据信息
3-3. 数据清洗
数据清洗的步骤:
- 选择子集
- 列名重命名
- 缺失数据处理
- 数据类型转换
将某些字符形式的数字转为数字类型 - 数据排序
- 异常值处理
数据大小或者太大,可能是异常值
3-3-1. 补充知识
3-3-1-1. split函数+merge函数
1、实现字符串分割+合并功能
# 初始化dataFrame
data = {'brand_model': ['德力西 GW912200', '埃帝尔 IB-207TPN-06231C02', '德力西 72LT3YFM40D', '科顺 2-3654-561 铆钉型'],
'cate':['低压', '管阀', '低压', '搬运']}
df_data = pd.DataFrame(data)
df_data.head()
#split 切割数据
df_data_brand_model=df_data['brand_model'].str.split(' ', 1, expand=True)
print(df_data_brand_model)
# merge 合并数据
df_data=pd.merge(df_data,df_data_brand_model,how='inner',left_index=True,right_index=True)
df_data.head(2)
# split+merge切割数据+合并数据
pd.merge(df_data, df_data['brand_model'].str.split(' ', 1, expand=True), how='left', left_index=True, right_index=True)
2、split函数
split(sep,n,expand=false)
split更详细的解释
3、merge函数
pd.merge(left, right, how='inner', on=None, left_on=None, right_on=None,
left_index=False, right_index=False, sort=True,
suffixes=('_x', '_y'), copy=True, indicator=False,
validate=None)
merge函数与mysql的join函数功能相同。
- left:左表名
- right:右表名
- how:连接方式 inner——内连接/outter——外连接/left——左连接/right——右连接
- on:根据某个字段进行连接,必须存在于两个DateFrame中
- left_on:根据左表哪个列连接
- right_on:根据右表哪个列连接
- left_index:是否根据左表索引连接
- right_index:是饭否根据右表索引连接
更加具体的解释查看下方的链接:
3-3-1-2. sort函数
sort_values函数
by:按哪几列排序
ascending=True 表示升序排列,ascending=False表示降序排列
'''
#按销售日期进行升序排列
salesDf=salesDf.sort_values(by='销售时间’,ascending=True)
3-3-1-3 pandas条件查询
3-3-2. 数据清洗详细过程
'''
数据清洗第一步:选择子集(本案例不需要选择子集)
'''
# subSalesDf=salesDf.loc[0:3,'购药时间':'销售数量']
'''
数据清洗第二步:列名重命名
'''
colNameDict={'购药时间':'销售时间'} #定义旧列名和新列名对应关系的词典
salesDf.rename(columns=colNameDict,inplace=True) #inplace=True 重命名在原始数据框进行操作
'''
数据清洗第三步:缺失数据处理
'''
salesDf=salesDf.dropna(subset=['销售时间','社保卡号'],how='any') #删除销售时间、社保卡号列所有为空的行
salesDf=salesDf.reset_index(drop=True) # reset_index重置索引使得索引序号不连续
'''
数据清洗第四步:数据类型转换
'''
#1、将销售数量、应收金额、实收金额转为float64类型
salesDf['销售数量']=salesDf['销售数量'].astype('float')
salesDf['应收金额']=salesDf['应收金额'].astype('float')
salesDf['实收金额']=salesDf['实收金额'].astype('float')
#2、将销售时间'2018-06-03 星期五' 格式转为 '2018-06-03';然后将数据转为日期格式
salesDf['销售时间']=salesDf['销售时间'].str.split(' ', 1, expand=True)[0] #split按照空格进行分割
salesDf.loc[:,'销售时间']=pd.to_datetime(salesDf.loc[:,'销售时间'],
format='%Y-%m-%d',
errors='coerce') #将字符串类型转为datetime类型
salesDf=salesDf.dropna(subset=['销售时间','社保卡号'],how='any')#去掉销售时间为NAN或者NULL值所在的行
'''
数据清洗第五步:数据排序
'''
salesDf=salesDf.sort_values(by='销售时间',ascending=True)#按照销售日期进行排序
salesDf=salesDf.reset_index(drop=True) #重置index索引值
'''
数据清洗第六步:异常值处理
'''
#查看最大值、最小值、均值等信息,看看是否存在异常
salesDf.describe()
#筛选子集,销售数量>0
querySer=salesDf.loc[:,'销售数量']>0
salesDf=salesDf.loc[querySer,:]
3-4. 模型构建
3-4-1. 月均消费次数
1、指标拆解
月均消费次数=总消费数/月份数
注意点:
- 同一天内,同一个人 发生的所有消费算作一次消费
- 使用(日期+社保卡号)两个值作为标识,去除重复数据
2、求解过程
'''
业务指标1:月均消费次数
指标拆解:月均消费次数=总消费次数/月份
'''
# step1:获取总消费次数
kpil1_Df=salesDf.drop_duplicates(subset=['销售时间','社保卡号'])#以(销售时间和社保卡号)为唯一标识,删除重复值
total=kpil1_Df.shape[0] #有多少行数据
# step2:求取月份数
#求取月份数第一步:获取开始日期和结束日期
startMonth=salesDf['销售时间'].min()
endMonth=salesDf['销售时间'].max()
#求取月份数第二步:获取开始日期和结束日期之间的月份
months=(endMonth-startMonth).days//30
#step3:月均消费次数计算
kpi1=total//months
print('月均消费次数:',kpi1)
3-4-2. 月均消费金额
1、指标拆解
月均消费金额=总消费/月份数
2、求解过程
'''
业务指标2:月均消费金额
指标拆解:月均消费金额=总消费金额/月份数
'''
#第一步 求总消费金额
totalMoney=salesDf['实收金额'].sum() #也可以采取的总消费金额计算方式 totalMoney=salesDf.loc[:,'实收金额'].sum()
#第二步 月均消费金额
monthlyMoney=totalMoney/months;
print('月均消费金额:',monthlyMoney)
3-4-3. 客单价
1、指标拆解
指标拆解:客单价=总金额/总消费次数
2、代码实现
'''
业务指标3:客单价
指标拆解:客单价=总金额/总消费次数
'''
pct=totalMoney/total
print('客单价:',pct)
3-4-3. 消费趋势
消费趋势需要学习完pandas绘图后才能实现
4、相关资料

pandas基本使用

pandas数据分析(1)

pandas数据分析2
-END-
学好 Python 不论是就业还是做副业赚钱都不错,但要学会 Python 还是要有一个学习规划。最后给大家分享一份全套的 Python 学习资料,给那些想学习 Python 的小伙伴们一点帮助!
包括:Python激活码+安装包、Python web开发,Python爬虫,Python数据分析,人工智能、机器学习、自动化测试带你从零基础系统性的学好Python!
👉[CSDN大礼包:《python安装工具&全套学习资料》免费分享](安全链接,放心点击)
👉Python学习大礼包👈

👉Python学习路线汇总👈
Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。(全套教程文末领取哈)
👉Python必备开发工具👈

温馨提示:篇幅有限,已打包文件夹,获取方式在:文末
👉Python实战案例👈
光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。

👉Python书籍和视频合集👈
观看零基础学习书籍和视频,看书籍和视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。

👉Python面试刷题👈

👉Python副业兼职路线👈


这份完整版的Python全套学习资料已经上传CSDN,朋友们如果需要可以点击链接免费领取或者保存图片到wx扫描二v码免费领取 【保证100%免费】
👉[CSDN大礼包:《python安装工具&全套学习资料》免费分享](安全链接,放心点击)
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐


所有评论(0)