python数据分析案例之(MYSQL导入)餐饮数据分析

案例主要用来熟悉pandas库和与mysql的连接知识

1首先建立连接  导入MySQL中的数据 代码如下

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  # 删除多余资源

 2将我们需要分析的列的数据 对列重命名改成中文名

#列重命名
data.rename(columns={'order_id':'订单号'},inplace=True)
data.rename(columns={'dishes_name':'菜品名称'},inplace=True)
data.rename(columns={'counts':'菜品数量'},inplace=True)
data.rename(columns={'amounts':'菜品单价'},inplace=True)
data.rename(columns={'place_order_time':'下单时间'},inplace=True)
print(data.columns)

 打印结果(中文名字就是我们要分析的数据列)

 

 计算收入

# 计算收入
data['价格'] = data['菜品数量'] * data['菜品单价']
print(data)

打印结果如下

 

 查看下单时间这一列

# 查看下单时间这列
print(data['下单时间'])

结果

 

 获取八月的天数量度和星期量度

# 订餐日期与星期相对应
ind = pd.DatetimeIndex(data['下单时间'])
data['weekday_name'] = ind.dayofweek
data['day'] = pd.DatetimeIndex(data['下单时间']).day
print(data['day'])
print(data['价格'])
print(data['下单时间'])
print(data['weekday_name'])

 

 打印结果

 

 weekday_name为订单所处在星期几,0代表星期一,以此类推

 

计算最小销售额的日期为16日  最小销售额为4447
import numpy as np
#print(data[['day', '价格']])
data_gb = data[['day', '价格']].groupby(by='day')
number = data_gb.agg(np.sum)
print(number)
print(number.loc[number['价格'] == number['价格'].min(),'价格'])  # # 求最小值其日期
print(number['价格'].argmin()+1) # 求最小值其日期

 

 

销售额随时间天数日期变化的可视化表
import matplotlib.pyplot as plt

plt.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])  # [::7]  坐标刻度隔七个显示一下 值为8
#  在价格最小的横纵坐标处显示其值
plt.text(number['价格'].argmin(), number['价格'].min(), '最小值为' + str(number['价格'].min()))

plt.show()

 如图

 

 

柱状图  星期与销售额的数量情况
# 分组聚合
import numpy as np
data_gb = data[['weekday_name', '价格']].groupby(by='weekday_name')
number = data_gb.agg(np.sum)
print(number)  # number为series数据格式

 

 绘制图表

# 绘制图表
index = [0, 1, 2, 3, 4, 5, 6]
number2 = number.loc[index, '价格']  # 切片  切片后的number2为列表数据格式

index = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday']
number2.index = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday']
print(number2)
import matplotlib.pyplot as plt
#  柱状图  星期与销售额的数量情况
plt.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):
    print(i, j)
    print('%i' % j)
    plt.text(i, j, '%i' % j, ha='center', va='bottom')
plt.show()
#  饼状图
import matplotlib.pyplot as plt

plt.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()

 

 

 

 

 

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

data_gb = data[['订单号', '价格', 'day']].groupby(by='day')


def myfun(data):
    return len(np.unique(data))


number = data_gb.agg({'价格': np.sum, '订单号': myfun})

print(number)

价格是每天的销售额,订单号是每天的总订单量

 

 

 绘图(粗点代表订单量大)

 后续会继续分析

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值