Python数据分析与处理4

项目案例
以朝阳医院2018年销售数据为例,目的是了解朝阳医院在2018年里的销售情况,通过对朝阳区医院的药品销售数据的分析,了解朝阳医院的患者的月均消费次数,月均消费金额、客单价以及消费趋势、需求量前几位的药品等。
数据分析基本过程包括:
获取数据、数据清洗、构建模型、数据可视化以及消费趋势分析。进行数据的文件导入
 

import numpy as np
from pandas import Series,DataFrame
import pandas as pd

# 导入数据
file_name = '朝阳医院2018年销售数据.xlsx'
# 使用ExcelFile()时需要传入目标excel文件所在路径及文件名称
xls = pd.ExcelFile(file_name)
# 使用parse()可以根据传入的sheet名称来提取对应的表格信息
dataDF = xls.parse('Sheet1', dtype='object')
# 输出前五行数据
dataDF.head(10)



查看数据基本信息
 

#查看索引
dataDF.index
#查看每一列的列表头内容
dataDF.columns
#查看每一列数据统计数目
dataDF.count()
dataDF.info()#查看对应的数据类型,可以判断数据是否需要进行类型转化。
dataDF.describe()#进行表头的一些数据的统计



数据清洗
数据清洗过程包括:选择子集、列名重命名、缺失数据处理、数据类型转换、数据排序及异常值处理
(1)选择子集
​在我们获取到的数据中,可能数据量非常庞大,并不是每一列都有价值都需要分析,这时候就需要从整个数据中选取合适的子集进行分析,这样能从数据中获取最大价值。在本次案例中不需要选取子集,暂时可以忽略这一步。
(2)列重命名
在数据分析过程中,有些列名和数据容易混淆或产生歧义,不利于数据分析,这时候需要把列名换成容易理解的名称,可以采用rename函数实现:

dataDF.rename(columns={'购药时间':'销售时间'}, inplace=True)#进行表头对应文字的替换
dataDF.head()
# 缺失值处理
print('删除缺失值前:', dataDF.shape)

# 使用info查看数据信息
print(dataDF.info())

dataDF = dataDF.dropna(subset=['销售时间', '社保卡号'], how='any')#删除销售时间', '社保卡号为空的对应信息
print('\n删除缺失值后',dataDF.shape)
print(dataDF.info())



数据类型转化
有些数据,我们只能对数字类型的数据进行操作,而从表格中取出数据往往不是我们需要的数据类型,就需要进行相应的数据类型转化。

dataDF['销售数量'] = dataDF['销售数量'].astype('float')
dataDF['应收金额'] = dataDF['应收金额'].astype('float')
dataDF['实收金额'] = dataDF['实收金额'].astype('float')#将原本object数据转化为float64类型
print(dataDF.dtypes)



在本案例中,在“销售时间”这一列数据中存在星期这样的数据,但在数据分析过程中不需要用到,因此要把销售时间列中日期和星期使用split函数进行分割,分割后的时间,返回的是Series数据类型:

'''
定义函数:分割销售日期,提取销售日期
输入:timeColSer 销售时间这一列,Series数据类型,例‘2018-01-01 星期五’
输出:分割后的时间,返回Series数据类型,例‘2018-01-01’
'''
def splitSaletime(timeColSer):
    timeList=[]
    
    for value in timeColSer:
        dateStr = value.split(' ')[0]#以空格进行分割,同时提取空格前的第一个数据
        timeList.append(dateStr)

    timeSer=pd.Series(timeList)
    return timeSer

timeSer = dataDF.loc[:, '销售时间']
dateSer = splitSaletime(timeSer)
dataDF.loc[:,'销售时间'] = dateSer
dataDF.head()
'''
数据类型转换:字符串转换为日期
把切割后的日期转为时间格式,方便后面的数据统计:
'''
dataDF.loc[:,'销售时间'] = pd.to_datetime(dataDF.loc[:, '销售时间'], format='%Y-%m-%d', errors='coerce')#如果数据格式出现错误,则进行为空操作,为之后删除做准备
dataDF.dtypes
dataDF.isnull().sum()#监测各行数据那些为空。



进行’销售时间’, '社保卡号’空行的删除,这两个数据进行是主键,是必须要有的东西,当咱们的数据中没有这两个数据时,咱们就要进行删去该数据。

'''
转换日期过程中不符合日期格式的数值会被转换为空值
删除含有NaT的空行
'''
dataDF = dataDF.dropna(subset=['销售时间', '社保卡号'], how='any')
datasDF = dataDF.reset_index(drop = True)
dataDF.info()


数据排序
此时时间是没有按顺序排列的,所以还是需要排序一下,排序之后索引会被打乱,所以也需要重置一下索引。​
其中by:表示按哪一列进行排序,ascending=True表示升序排列,ascending=False表示降序排列

dataDF = dataDF.sort_values(by='销售时间', ascending=True)#按照销售时间进行从大到小的排列
dataDF = dataDF.reset_index(drop=True)
dataDF.head()



异常值处理
 

t = pd.DataFrame(np.arange(12, 0, -1).reshape(3, 4))
t.loc[ [True, True, False], [True, True, False, False] ]#指定要多少行列数据
pop = dataDF.loc[:, '销售数量'] > 0 #销售数据必须要满足的条件是大于零
dataDF = dataDF.loc[pop, :]
dataDF.describe()


 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值