目录

一、提前准备

1、python第三方库的准备

2、SQL文件的准备

二、项目背景

三、数据预处理

1、导入相关库

2、构建通道

3、文件读取与合并

4、相关信息的预处理

5、预处理完整代码

四、销售额随时间变化的可视化

1、计算最小销售额的日期时间

2、销售额随时间变化的可视化

3、销售额随时间变化数据分析

五、星期与销售额的关系

1、分组聚合

2、进行星期排序

3、柱形图绘制

4、饼图绘制

5、星期与销售额关系数据分析

六、时间、销售额与订单量的关系分析

1、分组聚合处理

2、气泡图绘制

3、时间、销售额与订单量的关系数据分析

七、项目总结

一、提前准备

1、python第三方库的准备

  • pandas
  • numpy
  • sqlalchemy
  • pymysql
  • matplotlib

2、SQL文件的准备

  • meal_order_detail1
  • meal_order_detail2
  • meal_order_detail3

想通过这个项目来学习python数据分析的伙伴,这里给出上面三个SQL文件的下载链接(免费下载):https://download.csdn.net/download/weixin_44940488/19442022

二、项目背景

以某餐饮企业的订单详情表数据为可视化对象,分析以下内容(具体信息见下表):

      1.  销售额随时间的变化情况;

      2.  销售额与星期的关系;

      3.  订单数量与销售额的关系。

其中:

order_id:订单号

dishes_name:菜品名称

counts:菜品数量

amounts:菜品单价

place_order_time:下单时间

从上面这个订单详情表上可以看出,它的列数会比较多,我们在这里只关注其中的五列数据,分别是order_id:订单号、dishes_name:菜品名称、counts:菜品数量、amounts:菜品单价、place_order_time:下单时间。其它数据在分析中用不上,不用过于去关注。

三、数据预处理

1、导入相关库

首先,我们需要用pandas库进行数据库的读取。然后,在用pandas里面的read_sql进行数据库的读取时,需要用到一个函数来构建我们的数据库到python之间的一个连接通道,这里需要用到sqlalchemy库。具体代码如下:

import pandas as pd     # 使用pandas库进行数据库的读取
from sqlalchemy import create_engine   # 导入连接数据库和python的函数:create_engine

2、构建通道

利用sqlalchemy库中的create_engine()函数来构建mysql和python之间的数据通道,这里需要用到pymysql库(提前安装好这个库,不然后面的程序无法进行下去)。我们数据库的用户名是:root;密码:123456;数据库的IP地址和端口号:127.0.0.1:3306;数据库:test,用utf8进行文件的读取。

具体代码如下:

# 建立连接
con = create_engine('mysql+pymysql://root:123456@127.0.0.1:3306/test?charset=utf8')

3、文件读取与合并

这里就要用到前面讲到的一个函数read_sql()函数来读取我们的SQL文件。读取完三个SQL文件后,我们需要将这三个表进行合并,这里需要用到pandas库里的concat()函数。因为这三个表都是8月份的订单数据,只是按照时间对它进行了一个切分。因此我们需要将这三个SQL文件合并为一个SQL文件。

# 读取数据库中的SQL文件
data1 = pd.read_sql('meal_order_detail1', con=con)
data2 = pd.read_sql('meal_order_detail2', con=con)
data3 = pd.read_sql('meal_order_detail3', con=con)# 合并读取的三个SQL文件后删除原来的数据
data = pd.concat([data1, data2, data3], axis=0)    # axis=0是纵向拼接,axis=1是横向拼接
del data1, data2, data3# 打印数据的列标签
data.columns

4、相关信息的预处理

# 计算收入
data['price'] = data['counts'] * data['amounts']# 订餐日期与星期相对应
ind = pd.DatetimeIndex(data['place_order_time'])
data['weekday_name'] = ind.weekday_name
data['day'] = pd.DatetimeIndex(data['place_order_time']).dayprint(data['price'])

5、预处理完整代码

import pandas as pd     # 使用pandas库进行数据库的读取
from sqlalchemy import create_engine   # 导入连接数据库和python的函数:create_engine# 建立连接
con = create_engine('mysql+pymysql://root:123456@127.0.0.1:3306/test?charset=utf8')# 读取数据库中的SQL文件
data1 = pd.read_sql('meal_order_detail1', con=con)
data2 = pd.read_sql('meal_order_detail2', con=con)
data3 = pd.read_sql('meal_order_detail3', con=con)# 合并读取的三个SQL文件后删除原来的数据
data = pd.concat([data1, data2, data3], axis=0)    # axis=0是纵向拼接,axis=1是横向拼接
del data1, data2, data3# 打印数据的列标签
# data.columns# 计算收入
data['price'] = data['counts'] * data['amounts']# 订餐日期与星期相对应
ind = pd.DatetimeIndex(data['place_order_time'])
data['weekday_name'] = ind.weekday_name
data['day'] = pd.DatetimeIndex(data['place_order_time']).day# print(data['price'])

四、销售额随时间变化的可视化

查看核心指标近期情况可以使用折线图反映数据走势,散点图反映数据分布。

1、计算最小销售额的日期时间

import numpy as np
data_gb = data[['day', 'price']].groupby(by='day')
number = data_gb.agg(np.sum)number['price'].argmin()

2、销售额随时间变化的可视化

# 销售额随时间变化的可视化
import matplotlib.pyplot as pltplt.figure(figsize=(10, 7))   # 设置绘图窗口plt.rcParams['font.sans-serif'] = 'SimHei'    # 中文字体plt.scatter(range(1, 32), number, marker='D')
plt.plot(range(1, 32), number)
plt.title('2016年8月餐饮销售额趋势示意图')
plt.xlabel('日期')
plt.ylabel('销售额')
plt.xticks(range(1, 32)[::7], range(1, 32)[::7])plt.text(number['price'].argmin(), number['price'].min(), '最小值为'+str(number['price'].min()))plt.show()

3、销售额随时间变化数据分析

从上面展示的图表可以看出,餐饮销售额有一个很明显的周期性,周六日的销售额往往是一周内最高的,工作日时的销售额较低,这也符合大众的休闲规律,而整个月份最低的销售额出现在16号这一天。

五、星期与销售额的关系

从上面的折线图可以看出餐饮销售额有很明显的周期性。那么,现在就对星期的销售额情况做一个分析。

1、分组聚合

# 分组聚合
import numpy as np
data_gb = data[['weekday_name', 'price']].groupby(by='weekday_name')
number = data_gb.agg(np.sum)
number

2、进行星期排序

# 排序操作
index = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday']
number2 = number.loc[index, 'price']

3、柱形图绘制

import matplotlib.pyplot as pltplt.bar(range(1, len(number2)+1), number2, width=0.5, alpha=0.5)
plt.xticks(range(1, len(number2)+1), number2.index)
plt.title('星期与销售额的数量情况')
for i, j in zip(range(1, len(number2)+1), number2):plt.text(i, j, '%i'%j, ha='center', va='bottom')
plt.show()

4、饼图绘制

import matplotlib.pyplot as pltplt.figure(figsize=(5, 5))plt.style.use('ggplot')
plt.pie(number2, labels=number2.index, autopct='%.2f %%', wedgeprops=dict(width=0.6, edgecolor='w'))plt.title('星期销售额占比情况')
plt.show()

5、星期与销售额关系数据分析

从上面图表可以看出,周六日的订单销售额占比超过60%,周二的销售额占比最少为6.9%,星期二和星期四是我们销售额最低的两天。

六、时间、销售额与订单量的关系分析

1、分组聚合处理

data_gb = data[['order_id', 'price', 'day']].groupby(by='day')
def myfun(data):return len(np.unique(data))number = data_gb.agg({'price': np.sum, 'order_id': myfun})

2、气泡图绘制

import matplotlib.pyplot as pltplt.figure(figsize=(10, 6))plt.scatter(range(1, 32), number['price'], s=number['order_id'])plt.title('订单量、销售额与时间的关系')
plt.xlabel('时间')
plt.ylabel('销售额')
plt.show()

3、时间、销售额与订单量的关系数据分析

从上图可以看出,时间为周六日时销售额与订单量最大,最大可超过四万块的销售额;并且订单量越多,图中的气泡(红点)就越大,可以看出依旧是周六日订单量最多。

七、项目总结

此项目的数据直接来源于数据库的SQL文件,因此这就需要我们从数据库中读取文件然后才能开始进行预处理和数据可视化分析。而在实际工作中,我们接触到的不只是Excel文件,更多的是数据库文件(SQL文件)。

通过此项目的练习,让我知道了通过sqlalchemy库和pymysql库在数据库和python之间建立连接,然后使用pd.read_sql()函数读取数据库文件,使用 pd.concat()函数进行数据库的合并。通过pandas库和numpy库对SQL数据文件进行预处理,使用matplotlib库进行数据可视化,最后通过可视化的图表进行数据分析。

此项目的数据分析做的还不是太好,再后续学习思考中还有待完善和优化。如出现错误或可以改进的地方,欢迎大家指出。

Python数据分析项目实例5: 分析某餐饮企业的订单详情表数据(基于matplotlib的python数据可视化分析)相关推荐

  1. 基于flask徐州市天气信息可视化分析系统-计算机毕设 附源码 04600

    基于flask徐州市天气信息可视化分析系统 摘 要 信息化社会内需要与之针对性的信息获取途径,但是途径的扩展基本上为人们所努力的方向,由于站在的角度存在偏差,人们经常能够获得不同类型信息,这也是技术最 ...

  2. 基于Qt的A*算法可视化分析

    代码地址如下: http://www.demodashi.com/demo/13677.html 需求 之前做过一个无人车需要自主寻找最佳路径,所以研究了相关的寻路算法,最终选择A算法,因为其简单易懂 ...

  3. matlab传热分析,基于matlab的超临界流体对流传热可视化分析方法

    基于matlab的超临界流体对流传热可视化分析方法 [技术领域] [0001]本发明涉及一种基于MATLAB的管内超临界流体对流传热可视化分析方法,属于MATLAB应用技术领域. [背景技术] [00 ...

  4. 数据分享|基于Python、Hadoop零售交易数据的Spark数据处理与Echarts可视化分析

    分析师:Enno 案例数据集是在线零售业务的交易数据,采用Python为编程语言,采用Hadoop存储数据,采用Spark对数据进行处理分析,并使用Echarts做数据可视化.由于案例公司商业模式类似 ...

  5. 3 Python数据分析 美国各州人口分析案例 Pandas高级操作 美国大选献金案例 matplotlib

    Python数据分析 1 案例 美国各州人口分析 1.1 数据介绍 数据来源:https://github.com/jakevdp/data-USstates/ 1.1.1 州人口数量表 state- ...

  6. 基于flask徐州市天气信息可视化分析系统 毕设源码04600

    摘 要 信息化社会内需要与之针对性的信息获取途径,但是途径的扩展基本上为人们所努力的方向,由于站在的角度存在偏差,人们经常能够获得不同类型信息,这也是技术最为难以攻克的课题.针对天气信息等问题,对天气 ...

  7. 基于flask徐州市天气信息可视化分析系统【纯干货分享,附源码04600】

    摘 要 信息化社会内需要与之针对性的信息获取途径,但是途径的扩展基本上为人们所努力的方向,由于站在的角度存在偏差,人们经常能够获得不同类型信息,这也是技术最为难以攻克的课题.针对天气信息等问题,对天气 ...

  8. 基于flask徐州市天气信息可视化分析系统 计算机毕设源码15114

    摘 要 信息化社会内需要与之针对性的信息获取途径,但是途径的扩展基本上为人们所努力的方向,由于站在的角度存在偏差,人们经常能够获得不同类型信息,这也是技术最为难以攻克的课题.针对天气信息等问题,对天气 ...

  9. 泰坦尼克号数据_如何使用Pandas进行可视化分析-以泰坦尼克号数据集为例

    今天我们使用pandas进行泰坦尼克号幸存情况的分析,我们希望从掌握的数据中能发现一些规律性的东西,来解释什么样的旅客更容易活下来?¶ import pandas as pd df=pd.read_c ...

  10. Python数据分析项目实例4:使用seaborn分析泰坦尼克号生还者数据

    泰坦尼克号生还者数据集下载(免费):https://download.csdn.net/download/weixin_44940488/20814899 使用的分析软件:jupyter notebo ...

最新文章

  1. Delphi命名规范
  2. php ajax轮询推送,[PHP]PHP+AJAX实现轮询代码
  3. oracle计费系统相关问题,用radius和oracle做认证计费系统
  4. 1900美元,你想要机器女朋友,还是想要女朋友?
  5. 如何实现在一个网页中弹出多个不同的小窗口
  6. 工作中用到的安卓日志相关命令(logcat)
  7. Code Block 使用笔记(win7、updating)
  8. c++ pdflib 生成中文内容
  9. PRML Chapter 02 Probability Distributions
  10. 【系统分析师之路】系统分析师冲刺习题集(企业信息化)
  11. java单例模式——详解JAVA单例模式及8种实现方式
  12. 【Windows 10 更新失败】Windows10 升级提示错误代码:0x80070020解决方案
  13. python自学视频下载_Python下载哔哩哔哩学习视频
  14. docker-nividia run 报错
  15. 不再以讹传讹 剖析720P 1080i和1080P
  16. 深圳入职两周的感想——防止入坑
  17. java 判断一个数是否是素数详解
  18. mysql ping命令_MySQL常用命令总结
  19. edge 黑色 护眼 深色模式
  20. 输入两个整数,要求输出其中值较大者。要求用函数求出最大值

热门文章

  1. 处理海量数据的方法与思路
  2. 如何在 Word 的方框中打勾 √ ?☑ ☒
  3. 戴尔惠普华硕笔记本Fn键反了,按F1、F2等键出来Fn+F1、F2的效果
  4. 上学的时候写的文本分割器
  5. JAVA300讲之第四章练习题答案详解
  6. linux 回收站恢复文件怎么恢复文件,linux下恢复已删除的文件
  7. Visual studio的中英文切换
  8. python winrar 密码_python+winrar 指令压缩文件
  9. 前端开发入门到实战:纯CSS实现数据上报和HTML验证
  10. The7主题安装教程Wordpress