import pandas as pd from sqlalchemy import create_engine
import numpy as np
import matplotlib.pyplot as plt
enging = create_engine("mysql+mysqlconnector://root:root@localhost/tes_db")#设置数据库连接 #读入数据 data1=pd.read_sql("meal_order_detail1",con=enging) data2=pd.read_sql("meal_order_detail2",con=enging) data3=pd.read_sql("meal_order_detail3",con=enging) # 数据按列合并 data = pd.concat([data1,data2,data3],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)
散点图
# plt.scatter(range(1,32),number) plt.scatter(range(1,32),number,marker=‘D‘) plt.show()
效果
#绘制折线图 plt.plot(range(1,32),number,‘r‘) plt.title(‘2016年8月餐饮销售额趋势示意图‘) plt.xlabel(‘日期‘) plt.ylabel(‘销售额‘) plt.xticks(range(1,32)[::6],range(1,32)[::6]) 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‘] data_gb_weekday = data[[‘weekday_name‘,‘price‘]].groupby(by=‘weekday_name‘) number_pie = data_gb_weekday.agg(np.sum) number2 = number_pie.loc[ind,‘price‘]
# 绘制直方图 plt.bar(range(1,len(number2)+1),number2,width=0.5,alpha=0.5) plt.xticks(range(1,len(number2)+1), number2.index) plt.plot(range(1,len(number2)+1),number2,‘g‘) plt.title(‘星期与销售额的数量情况‘) for i,j in zip(range(1,len(number2)+1),number2): plt.text(i,j+1000,‘%i‘%j,ha=‘center‘,va=‘bottom‘) plt.show()
星期销售额占比情况
plt.style.use(‘ggplot‘)# plt.figure(figsize=(5,5))#长 宽 plt.pie(number2,autopct=‘%.2f %%‘,labels=number2.index,wedgeprops=dict(width=0.6,edgecolor=‘w‘)) plt.title(‘星期销售额占比情况‘) plt.show()
wedgeprops属性可以设置为圆环图,无为饼状图
数据整理
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}) number3
订单量、销售额与时间的关系
plt.scatter(range(1,32),number3[‘price‘],s=number3[‘order_id‘]) # 气泡图 # s的大小表示订单量的多少 plt.title(‘订单量、销售额与时间的关系‘) plt.xlabel(‘时间‘) plt.ylabel(‘销售额‘) plt.show()