IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 人工智能 -> python数据分析之药品数据分析 -> 正文阅读

[人工智能]python数据分析之药品数据分析

目的:掌握 熟悉 pandas matplotplt numpy等库

1导入数据

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

?

其中,商品编码就是商品名称 这两列数据重复

2查看数据

# 使用sheet_names来查看当前表格中包含的所有sheet名称(按顺序)
print(xls.sheet_names[0])
#查看基本信息
#查看数据几行几列
print(dataDF.shape)
#查看索引
print(dataDF.index)
#查看每一列的列表头内容
print(dataDF.columns)
#查看每一列数据统计数目
print(dataDF.count())

以下可知购药时间和社保卡号存在缺失值

?

重命名一些列名

#列重命名
dataDF.rename(columns={'购药时间':'销售时间'},inplace=True)
print(dataDF.head())

处理缺失值

#缺失值处理
print('删除缺失值前:', dataDF.shape)

?

?删除缺失值

# 使用info查看数据信息,
#print(dataDF.info())
#删除缺失值
# axis:轴。0或'index',表示按行删除;1或'columns',表示按列删除。
# how:筛选方式。‘any',表示该行/列只要有一个以上的空值,就删除该行/列;‘all',表示该行/列全部都为空值,就删除该行/列。
# thresh:非空元素最低数量。int型,默认为None。如果该行/列中,非空元素数量小于这个值,就删除该行/列。
# subset:子集。列表,元素为行或者列的索引。如果axis=0或者‘index',subset中元素为列的索引;如果axis=1或者‘column',subset中元素为行的索引。由subset限制的子区域,是判断是否删除该行/列的条件判断区域。
# inplace:是否原地替换。布尔值,默认为False。如果为True,则在原DataFrame上进行操作,返回值为None。
dataDF = dataDF.dropna(subset=['销售时间','社保卡号'], how='any')
print('\n删除缺失值后',dataDF.shape)

?

数据类型转换
#数据类型转换
dataDF['销售数量'] = dataDF['销售数量'].astype('float')
dataDF['应收金额'] = dataDF['应收金额'].astype('float')
dataDF['实收金额'] = dataDF['实收金额'].astype('float')
print(dataDF.dtypes)

?索引重构

dataDF = dataDF.reset_index(drop=True) # 索引重构
print(dataDF)

?

?

定义函数:分割销售日期,提取销售日期
输入:timeColSer 销售时间这一列,Series数据类型,例‘2018-01-01 星期五’
输出:分割后的时间,返回Series数据类型,例‘2018-01-01’

def splitSaletime(timeColSer):
    timeList = []

    for value in timeColSer:
        dateStr = value.split(' ')[0]  # 用空格进行分割 并取第0项,也就是日期
        timeList.append(dateStr)

    timeSer = pd.Series(timeList)  # 将列表转行为一维数据Series类型
    return timeSer

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

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

print(dataDF.head())

?

?

数据类型转换:字符串转换为日期

把切割后的日期转为时间格式,方便后面的数据统计:

#errors='coerce' 如果原始数据不符合日期的格式,转换后的值为空值NaT
dataDF.loc[:, '销售时间'] = pd.to_datetime(dataDF.loc[:, '销售时间'], format='%Y-%m-%d', errors='coerce')

print(dataDF.dtypes)

?

?统计空值

print(dataDF.head())
print(dataDF.isnull().sum())

?销售时间转换后有23个null

转换日期过程中不符合日期格式的数值会被转换为空值
删除含有NaT的空行

dataDF = dataDF.dropna(subset=['销售时间','社保卡号'],how='any')
datasDF = dataDF.reset_index(drop = True)  #索引重铸
数据排序
#数据排序
dataDF = dataDF.sort_values(by='销售时间', ascending=True)  #  升序排序
dataDF = dataDF.reset_index(drop=True)
dataDF.head()
#查看描述统计信息
print(dataDF.describe())

将'销售数量'这一列小于0的数据排除掉
#  将'销售数量'这一列小于0的数据排除掉
pop = dataDF.loc[:,'销售数量'] > 0
print(pop)
dataDF = dataDF.loc[pop, :]  # 选取布尔值真的行和所有列
dataDF.describe()

?统计月均消费次数(同一天一个人的所有消费算作一次消费)

#计算总消费次数
#删除重复数据
kpil_Df = dataDF.drop_duplicates(subset=['销售时间', '社保卡号'])
totalI = kpil_Df.shape[0]  #shape[0]输出为行数
print('总消费次数=', totalI)

# 计算月份数
# 按销售时间升序排序
kpil_Df = kpil_Df.sort_values(by='销售时间', ascending=True)
# 行索引重排
kpil_Df = kpil_Df.reset_index(drop=True)
# 获 取时间范围
startTime = kpil_Df.loc[0, '销售时间']
endTime = kpil_Df.loc[totalI-1, '销售时间']
# 计算月份
# 天数
daysI = (endTime-startTime).days
print(daysI)
mounthI = daysI//30
print('月份数=',mounthI)
#月平均消费次数
kpil_I = totalI//mounthI
print('业务指标1:月均消费次数=', kpil_I)

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

?

#客单价
pct = totalMoneyF / totalI
print('业务指标3:客单价=', pct)

每天消费趋势图

import matplotlib.pyplot as plt
#画图时用于显示中文字符
from pylab import mpl
mpl.rcParams['font.sans-serif'] = ['SimHei'] # SimHei是黑体的意思
#font = FontProperties(fname='/Library/Fonts/Songti.ttc') #设置字体
#在操作之前先复制一份数据,防止影响清洗后的数据
groupDF = dataDF

# 将'销售时间'设置为index
groupDF.index = groupDF['销售时间']
print(groupDF.head())
gb = groupDF.groupby(groupDF.index)
dayDF = gb.sum()
print(dayDF)
#画图
plt.plot(dayDF['实收金额'])
plt.title('按天消费金额')
plt.xlabel('时间')
plt.ylabel('实收金额')
plt.show()

  人工智能 最新文章
2022吴恩达机器学习课程——第二课(神经网
第十五章 规则学习
FixMatch: Simplifying Semi-Supervised Le
数据挖掘Java——Kmeans算法的实现
大脑皮层的分割方法
【翻译】GPT-3是如何工作的
论文笔记:TEACHTEXT: CrossModal Generaliz
python从零学(六)
详解Python 3.x 导入(import)
【答读者问27】backtrader不支持最新版本的
上一篇文章      下一篇文章      查看所有文章
加:2022-07-17 16:23:46  更:2022-07-17 16:26:25 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 0:34:43-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码