python入门三:数据分析基本过程

一、pandas简介

1、Numpy特点:主要对象是同种元素的多维数组,即numpy中所有元素都是同一类型,Numpy中纬度(dimension)叫做轴(axes),轴的个数叫秩(rank)

文兄:【Python数据分析】Numpy的详细教程zhuanlan.zhihu.com《python入门三:数据分析基本过程》

2、Pandas特点:有两个数据结构;Series和DataFrame(记住大小写区分),为大多数应用提供了可靠的,易于使用的数据基础。其中Series类似于一维数组,和numpy的array接近,由一组数据和数据标签组成,数据标签具索引作用。DataFrame是一个表格型的数据结构,它含有不同的列,每列都是不同的数据类型,想象得更明白一点,它类似一张excel表。

二、所涉及的python知识点梳理

《python入门三:数据分析基本过程》
《python入门三:数据分析基本过程》
《python入门三:数据分析基本过程》
《python入门三:数据分析基本过程》

三、数据分析实例

基本思路:数据理解——数据预处理(导入、数据清洗)——数据分析(可视化)——结论——可行性建议

数据来源:python——第4关数据分析的基本过程——朝阳医院2018年销售数据

https://pan.baidu.com/s/1uCr9403EdXnX8fcqEqxxdg

http://cn.mikecrm.com/otfgBYh

1、数据理解

做数据分析前,先要锁定针对的问题是什么,需要帮助你达到什么样的目的。如,下面我们想了解药店的客户的消费水平。我们就需要以下几个特征。

月均消费次数:同一个人在一个月内消费了多少次,即,总消费次数/总月份;可以看出病患的消费频率,可以间接反应医院的服务质量等等。

月均消费金额:同一个人每月大概花费多少钱,即,总消费金额/总月份;可以推测病患的医疗承担费用。

客单价:一个人,每次大概花费多少钱,即,总消费金额/总次数;

2、数据预处理(导入、清洗)

1)数据导入,查看

数据来源于excel,将excel中的数据导入pandas中。查看数据全貌,找出有用信息。

import pandas as pd
import numpy as np
#导入excel文件,我的文件在E盘中,命名为hospital,在这里指明导入的数据格式为object类型;
#注意,E后面加冒号,“Sheet1”中首字母大写,并用引号。
data=pd.read_excel("E:/python/hospital.xlsx",sheet_name="Sheet1",dtype="object")

《python入门三:数据分析基本过程》
《python入门三:数据分析基本过程》

共有6578条数据,7列。

其中缺失数据为:购药时间,社保卡号,缺2条;商品编码,商品名称,销售数量,应收金额,实收金额缺 2条。

2)尝试将列名字重命名

#这里可以尝试下列名重命名,将所有中文名转化为英文
col = {"购药时间":"time",
       "社保卡号":"cardno",
       "商品编码":"drugid",
       "商品名称":"drugid",
       "销售数量":"salesvolumes",
       "应收金额":"amountreceivable",
       "实收金额":"amountcollected",
      }
data.rename(columns = col,inplace=True)

《python入门三:数据分析基本过程》
《python入门三:数据分析基本过程》

3) 缺失数据处理

原始数据可能有数据缺失情况,缺失值的处理方式有两种:缺失值较多时,利用插法补充;缺失值较少,可直接删除。在第一步中,我们看到有缺失数据,也可以用isnull()方式查看

《python入门三:数据分析基本过程》
《python入门三:数据分析基本过程》

从上图发现:缺失数据量很少,并且在计算月均消费次数,月均消费金额及客单价时,时间、社保卡号(代表消费者),实收金额是不可或缺的,因此我们采用删除法。

df.dropna可通过subset参数指定从哪几列判断缺失值;

how=’any’表示指定列中,任意一列有缺失值,就删除行;

how=’all’表示指定列中,所有列同时有缺失值时,才能删除行;

inplace=True直接在原表上做修改。

《python入门三:数据分析基本过程》
《python入门三:数据分析基本过程》

删除行数据后,立即查看数据框大小是否改变:由此看到删除缺失值后,还有6575行。

4) 数据类型转换

a)在导入excel时,我们默认所有的数据为object,然而salesvolumes(销售数量),amountreceivable(销售金额),amountcollected(实收金额)都是数据类型,并且时浮点类型,所以要将其转换成浮点型。

#数据类型转换
#字符串转为数值(浮点数)
data1["amountcollected"]=data1["amountcollected"].astype("float")
data1["amountreceivable"]=data1["amountreceivable"].astype("float")
data1["salesvolumes"]=data1["salesvolumes"].astype("float")
data1.dtypes

《python入门三:数据分析基本过程》
《python入门三:数据分析基本过程》

b)日期处理 ——将字符串转换为日期数据类型

“2018-02-12 星期五”,其中 星期几 我们目前不需要,可以考虑把星期几,分离出来,并将其删除。 因为要分割的是数据框中的整列数据,所以要用函数来分离日期。定义splittime为日期分离函数。 输入:timeColser销售这一列,是个Series数据类型输出;分割后的时间,也是个Series数据类型;

《python入门三:数据分析基本过程》
《python入门三:数据分析基本过程》
《python入门三:数据分析基本过程》
《python入门三:数据分析基本过程》

此刻,刚刚完成了第一步,即分割字符串。接下来要将字符串更改为日期型数据。

可使用pd.to_datetime。

format为原始日期数据的格式化形式,此处用”%Y-%m-%d”;errors=’coerce’用于控制非日期型数据转换后为空值。注意,此处m,d均为小写字母。

data1.loc[:,"time"]=pd.to_datetime(data1.loc[:,"time"],
                                    format='%Y-%m-%d', 
                                    errors='coerce')

《python入门三:数据分析基本过程》
《python入门三:数据分析基本过程》

及时查看,数据类型是否符合预期,均符合。

《python入门三:数据分析基本过程》
《python入门三:数据分析基本过程》

转换日期过程中不符合日期格式的数值可能会被转换为空值,查看一下。

《python入门三:数据分析基本过程》
《python入门三:数据分析基本过程》

转换过程中,有空值产生,删除列(销售时间,社保卡号)中为空的行。

《python入门三:数据分析基本过程》
《python入门三:数据分析基本过程》

5) 数据排序

a)按月排序

因为在后面的计算中,有月均消费,因此我们需要按月排序,然后提取月份数。

排序:sort_values

《python入门三:数据分析基本过程》
《python入门三:数据分析基本过程》

b)索引排序

查看排序后的结果,可见,排序后的索引,还是以前的序号,在此,将索引的序号按顺序排列。

《python入门三:数据分析基本过程》
《python入门三:数据分析基本过程》

对索引用 reset_index() 重新排序

《python入门三:数据分析基本过程》
《python入门三:数据分析基本过程》

到此,数据格式转换结束。

6)异常数据处理

《python入门三:数据分析基本过程》
《python入门三:数据分析基本过程》

由上可见,salesvolumes(销售数量)不可为负数,存在异常值,所以要删除异常值。

这里可以用Series条件筛选销售数量大于0的行,间接删除了行后,立刻重置索引顺序reset_index(drop=True,inplace=True)

《python入门三:数据分析基本过程》
《python入门三:数据分析基本过程》
《python入门三:数据分析基本过程》
《python入门三:数据分析基本过程》

至此,数据处理已完成。

三、数据指标分析

1)月均消费次数=总消费次数/月分数;

《python入门三:数据分析基本过程》
《python入门三:数据分析基本过程》
《python入门三:数据分析基本过程》
《python入门三:数据分析基本过程》

月均消费次数

《python入门三:数据分析基本过程》
《python入门三:数据分析基本过程》

2)月均消费金额 月均消费金额=总消费金额/月份数

《python入门三:数据分析基本过程》
《python入门三:数据分析基本过程》

3)客单价

《python入门三:数据分析基本过程》
《python入门三:数据分析基本过程》

总结,本文中遇到的知识点分别如下:

#1、excel数据导入pandas;
     data=pd.read_excel("E:/py/hosptal.xlsx","Sheet1","dtype=object")
#2、列名重命名
    #先定义字典
     col_dict = {"购药时间":"time","社保卡号":"cardno"}
     #再重命名
     data.rename(columns=col_dict,inplace=True)
#3、汇总数据是否有缺失值
    data.isnull().sum()
#4、删除某几列为空的值
    data1=data.dropna(subset=["time","cardno"],how="any")
#5、数据类型转换:字符串转为数值
    data1["salesvolumes"]=data1["salesvolumes"].astype("float")
#6、函数定义 def
#7、字符串转换为日期值
    #errors='coerce' 如果原始数据不符合日期的格式,转换后的值为空值NaT
    #format 是你原始数据中日期的格式
     data2.loc[:,'销售时间']=pd.to_datetime(data2.loc[:,'销售时间'],
                                        format='%Y-%m-%d', 
                                        errors='coerce')
#8、数据排序
    #按销售日期升序排序
    data=data.sort_values(by='销售时间',
                    ascending=True)
#9、索引重置
data=data.reset_index(drop=True)

备注:函数的定义和应用,可参考以下文献:了解和掌握Python的函数

    原文作者:孛孛
    原文地址: https://zhuanlan.zhihu.com/p/35417415
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞