数据分析与图表绘制(机器学习)


    以朝阳医院2018年销售数据为例,目的是了解朝阳医院在2018年里的销售情况,这就需要知道几个业务指标,本次的分析目标是从销售数据中分析出以下业务指标:
(1)业务指标1:月均消费次数
    月均消费次数 = 总消费次数 / 月份数(同一天内,同一个人所有消费算作一次消费)
(2)业务指标2:月均消费金额
    月均消费金额 = 总消费金额 / 月份数
(3)客单价
    客单价 = 总消费金额 / 总消费次数
(4)消费趋势(可视化展示,并根据可视化结果给出下属问题分析得出的结论)
    a、分析每天的消费金额
    b、分析每月的消费金额
    c、分析药品销售情况(截取销售数量最多的前十种药品,并用条形图展示结果)
    数据分析基本过程 数据分析基本过程包括:获取数据、数据清洗、构建模型、数据可视化以及消费趋势分析。

(一)数据获取

1. 读取数据

import pandas as pd
data = pd.read_excel("朝阳医院2018年销售数据.xlsx", dtype="object")
data.head()

在这里插入图片描述

2. 修改为 DataFrame 格式

dataDF = pd.DataFrame(data)
print(dataDF.shape)
print("dataDF.index:{}".format(dataDF.index))

在这里插入图片描述

3. 查看每一列的列表头内容

print("dataDF.columns:{}".format(dataDF.columns))
print(dataDF.columns)

在这里插入图片描述

4. 查看每一列数据统计数目

在这里插入图片描述

(二)数据分析

        数据清洗过程是一个复杂而细致的工作,它涉及多个步骤,旨在确保数据的质量和可用性。以下是数据清洗过程中的关键步骤:

  1. 选择子集:在这个阶段,我们从原始数据集中挑选出对分析或建模最相关的部分。这可能涉及到筛选特定的行和列,以便专注于对特定问题有用的信息。

  2. 列名重命名:为了使数据集更易于理解和操作,我们可能需要对列名进行重命名。这样做可以提供更清晰的上下文,有助于后续的数据处理和分析工作。

  3. 缺失数据处理:在实际情况中,数据集往往包含缺失值。处理缺失值的方法包括删除含有缺失值的行、填充缺失值(例如使用平均值、中位数或众数)或者通过算法预测缺失值。

  4. 数据类型转换:为了确保数据类型的一致性和正确性,我们可能需要将某些列的数据类型进行转换。例如,将字符串类型的日期转换为日期类型,或将分类数据编码为数值形式以便于分析。

  5. 数据排序:在某些情况下,我们可能需要对数据进行排序,以便更好地观察数据模式或趋势。排序可以是按照单个列的值进行升序或降序排列,也可以是基于多个列的组合排序。

  6. 异常值处理:异常值是那些与其他数据显著不同的数据点。处理异常值的方法包括识别并删除它们,或者使用统计方法(如分位数范围)来修正它们。

1. 列名重命名

...
print("dataDF.columns:{}".format(dataDF.columns))

2. 缺失值处理

print("删除缺失值之前dataDF.shape:{}".format(dataDF.shape))
dataDF = dataDF.dropna()# 通过内置的dropna函数删除缺失的数据
print("删除缺失值之后dataDF.shape:{}".format(dataDF.shape))
dataDF["销售数量"] = dataDF["销售数量"].astype("f8")
dataDF["应收金额"] = dataDF["应收金额"].astype("f8")
dataDF["实收金额"] = dataDF["实收金额"].astype("f8")
print("dataDF.dtypes:{}".format(dataDF.dtypes)) 

3. 自定义函数(数据类型转换)

def splitsaletime(timeColser):
    timelist = []
    for t in timeColser:
        timelist.append(t.split(" ")[0])
        timeser = pd.Series(timelist)
    return timeser

4. 调用自定义函数

t = dataDF.loc[:, "销售时间"]
timeser = splitsaletime(t)
dataDF.loc[:, "销售时间"] = timeser
print(dataDF.head())

在这里插入图片描述

5. 数据类型转换

...
print("dataDF.dtypes:{}".format(dataDF.dtypes))

在这里插入图片描述

6. 删除空值

dataDF = dataDF.dropna()
print("dataDF.shape:{}".format(dataDF.shape))
dataDF = dataDF.sort_values(by='销售时间', ascending=True)
print("dataDF.head():{}".format(dataDF.head()))
dataDF = dataDF.reset_index(drop=True)

在这里插入图片描述

7. 删除异常值

print(dataDF.describe())
pop = dataDF.loc[:, "销售数量"] > 0
dataDF = dataDF.loc[pop, :]

在这里插入图片描述

8. 删除重复数据

print(dataDF.describe())
kpi1_Df = dataDF.drop_duplicates(subset=['销售时间', '社保卡号'])

在这里插入图片描述

(三)构建模型及数据可视化

        在数据清洗和预处理工作圆满完成之后,接下来的步骤便是利用这些经过精心整理的数据来构建模型。这个模型构建的过程,实际上就是根据业务需求,运用统计学、机器学习或其他数据分析方法来计算和提取出关键的业务指标。这些业务指标对于理解数据背后的含义、评估业务状况以及指导未来的决策制定都是至关重要的。

        在模型构建完成,并且相应的业务指标被计算出来之后,为了使得这些指标更加直观易懂,通常需要借助于数据可视化的手段来展示结果。数据可视化是一种将数据转换为图形或图像表示的技术,它可以帮助人们以视觉的方式快速理解和分析数据。通过使用图表、图形、地图等多种形式,数据可视化能够有效地传达复杂的信息,使得非专业人士也能轻松把握数据的核心要点。

        例如,可以通过柱状图来展示不同类别的销售业绩,通过折线图来追踪股票价格的变化趋势,或者通过热力图来展现网站用户的点击行为分布。这些直观的图形不仅有助于数据的呈现,还能促进团队成员之间的沟通和讨论,为基于数据的决策提供强有力的支持。

        总之,数据清洗完成后,通过构建模型计算业务指标,并利用数据可视化技术将这些指标以图形化的方式呈现出来,是数据分析流程中至关重要的一步。它不仅提高了数据处理的效率,也增强了数据故事的说服力,为业务决策提供了清晰、直观的依据。

1. 计算总消费次数

totall = kpi1_Df.shape[0]
print('总消费次数:', totall)
kpi1_Df = kpi1_Df.sort_values(by='销售时间', ascending=True)
kpi1_Df = kpi1_Df.reset_index(drop=True)

2. (月均消费次数、月均消费金额、客单价)

startTime = kpi1_Df.loc[0, '销售时间']
endTime = kpi1_Df.loc[totall - 1, '销售时间']
daysI = (endTime - startTime).days
monthsI = daysI // 30
print('月份数:', monthsI)
kpi1_I = totall // monthsI
print('        月均消费次数=', kpi1_I)
totalMoneyF = dataDF.loc[:, '实收金额'].sum()
monthMoneyF = totalMoneyF / monthsI
print('        月均消费金额=', monthMoneyF)
pct = totalMoneyF / totall
print('        客单价=', pct)

在这里插入图片描述

3. 业务指标:消费趋势(可视化展示)

import matplotlib.pyplot as plt
from pylab import mpl 
mpl.rcParams['font.sans-serif'] = ['SimHei']   
groupDf = dataDF
groupDf.index = groupDf['销售时间']
groupDf.head()

在这里插入图片描述

4. a、分析每天的消费金额

在这里插入图片描述

5. b、分析每月的消费金额

在这里插入图片描述

6. c、分析药品销售情况

medicine = groupDf[['商品名称','销售数量']]
bk = medicine.groupby('商品名称')[['销售数量']]
re_medicine = bk.sum()

7. 降序排序截取销售数量最多的十种药品

re_medicine = re_medicine.sort_values(by='销售数量', ascending=False)# 降序排序
re_medicine.head()
top_medicine = re_medicine.iloc[:10,:]
print(top_medicine)

在这里插入图片描述

8. 条形图展示销售数量前十的药品

在这里插入图片描述


回到文章开头


更多详细内容可看

部分代码省略,详细可在这里插入图片描述

在这里插入图片描述

最近更新

  1. TCP协议是安全的吗?

    2024-04-03 11:48:01       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-04-03 11:48:01       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-04-03 11:48:01       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-04-03 11:48:01       20 阅读

热门阅读

  1. 详解Qt中使用线程

    2024-04-03 11:48:01       12 阅读
  2. 搜索引擎-02-分词与全文索引

    2024-04-03 11:48:01       13 阅读
  3. Python | PyCharm 键盘快捷键

    2024-04-03 11:48:01       13 阅读
  4. jvm高级面试题-2024

    2024-04-03 11:48:01       15 阅读
  5. Mini-React

    2024-04-03 11:48:01       16 阅读
  6. 数据库嵌套事务的实现

    2024-04-03 11:48:01       15 阅读
  7. 设计模式(15):迭代器模式

    2024-04-03 11:48:01       15 阅读
  8. 建造者模式:构建复杂对象的优雅之道

    2024-04-03 11:48:01       14 阅读
  9. 堆积排序算法C代码

    2024-04-03 11:48:01       14 阅读
  10. 5分钟安装docker和docker compose环境

    2024-04-03 11:48:01       15 阅读
  11. 微信小程序-语音输入(录音并播放)

    2024-04-03 11:48:01       17 阅读