Advertisement

Python数据可视化——Matplotlib可视化(二)

阅读量:

以某餐饮企业的订单详情表数据为可视化对象,分析:

销售额随时间的变化情况

销售额与星期的关系

订单数量与销售额的关系

数据预处理

复制代码
 import pandas as pd

    
 from sqlalchemy import create_engine
    
  
    
 con = create_engine('mysql+pymysql://root:@127.0.0.1:3306/test?charset=utf8')  # 创建连接数据库的
    
 tmp1 = pd.read_sql('meal_order_detail1',con=con)
    
 tmp2 = pd.read_sql('meal_order_detail2',con=con)
    
 tmp3 = pd.read_sql('meal_order_detail3',con=con)
    
 data = pd.concat([tmp1,tmp2,tmp3],axis=0)  # 拼接数据,纵向拼接
    
    
    
    

销售额随时间的变化情况

复制代码
 # 计算收入

    
 data['price'] = data['counts']*data['amounts']
    
 # 日期转换为星期
    
 ind = pd.DatetimeIndex(data['place_order_time'])  # pd.to_datetime()
    
 data['weekday_name'] = ind.weekday_name
    
 data['day'] = ind.day
    
 data_gb = data[['day','price']].groupby(by='day')
    
 number = data_gb.agg(np.sum)
    
 # 绘制折线图观看趋势
    
 import matplotlib.pyplot as plt
    
  
    
 plt.scatter(range(1,32),number,marker='D')
    
 plt.plot(range(1,32),number,'r')
    
 plt.title('2016年8月餐饮销售额趋势示意图')
    
 plt.xlabel('日期')
    
 plt.ylabel('销售额')
    
 plt.xticks(range(1,32)[::7],range(1,32)[::7])
    
  
    
 plt.text(number['price'].argmin(),number.min(),'最小值为'+str(number['price'].min()),va='top')
    
 plt.text(number['price'].argmax(),number.max(),'最大值为'+str(number['price'].max()),va='bottom')
    
  
    
 plt.show()
    
    
    
    

销售额与星期的关系

复制代码
 ind = ['Monday','Tuesday','Wednesday','Thursday','Friday','Saturday','Sunday']

    
 number2 = number_pie.loc[ind,'price']
    
 # 绘制直方图
    
 plt.bar(number2.index,number2,width=0.6,alpha=0.7)
    
 plt.plot(number2.index,number2,'r')
    
 plt.title('星期与销售额的数量情况')
    
 for i,j in zip(number2.index,number2):
    
     plt.text(i,j+1000,'%i'%j,ha='center',va='bottom')
    
 plt.show()
    
    
    
    

复制代码
 data_gb_weekday = data[['weekday_name','price']].groupby(by='weekday_name')

    
 number_pie = data_gb_weekday.agg(np.sum)
    
  
    
 plt.style.use('ggplot')
    
 plt.pie(number_pie,autopct='%.2f%%',labels=number_pie.index,wedgeprops=dict(width=0.6,edgecolor='w'))
    
 plt.title('星期销售额占比情况')
    
 plt.show()
    
    
    
    

订单数量与销售额的关系

复制代码
 data_gb_or = data[['order_id','price','day']].groupby(by='day')

    
 def myfun(data):
    
     return len(np.unique(data))
    
 number3 = data_gb_or.agg({'price':np.sum,'order_id':myfun})
    
  
    
 plt.scatter(range(1,32),number3['price'],s=number3['order_id'])  # 气泡图
    
 plt.title('订单量、销售额与时间的关系')
    
 plt.xlabel('时间')
    
 plt.ylabel('销售额')
    
 plt.show()
    
    
    
    

全部评论 (0)

还没有任何评论哟~