python連接數據庫分析餐飲數據、、可視化


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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM