import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline
plt.style.use('ggplot')
plt.rcParams["font.sans-serif"]='SimHei'#解決中文亂碼
plt.rcParams['axes.unicode_minus'] = False#解決負號無法正常顯示的問題
# 數(shù)據(jù)讀取
df = pd.read_excel(r"C:\Users\wxw\Downloads\online_retail_II.xlsx",sheet_name='Year 2010-2011',dtype=str)
df.head()
# 查看數(shù)據(jù)情況
df.info()
#重復值查看
a1 =df.shape[0]
df.drop_duplicates(inplace =True)
a2 =df.shape[0]
print('刪除后記錄量:',a2,'刪除記錄量:',a1-a2)
#充值索引
df.reset_index(drop =True,inplace =True)
# 缺失值處理
df.isnull().sum()
# 一致化處理
df['InvoiceDate'] = pd.to_datetime(df['InvoiceDate'],errors = 'coerce')
df['Quantity'] = df['Quantity'].astype('int32')
df['Price'] = df['Price'].astype('float')
df['Date'] = pd.to_datetime(df['InvoiceDate'].dt.date,errors = 'coerce')
df['Month'] = df['InvoiceDate'].astype('datetime64[M]')
df['Sales_volume'] = df['Quantity']*df['Price']
df.describe()
#刪除 單價和數(shù)量為負值的數(shù)據(jù)
df = df[(df['Quantity'] > 0) & (df['Price'] > 0)]
df.describe()
# 查看現(xiàn)在數(shù)據(jù)表形式
df.head()
day =df.groupby('Date').aggregate({'Quantity':"sum",'Sales_volume':"sum"})
day.plot(figsize = (15,8))
plt.xlabel('每日')
plt.ylabel('數(shù)量')
plt.title('日度銷售金額和單量趨勢圖')
# 取最高一周數(shù)據(jù)查看原因
day1 =day['2011-11-01':'2011-12-09']
day1.plot(figsize = (15,8))
plt.xlabel('日期')
plt.ylabel('數(shù)量')
plt.title('11月及12月銷售金額和單量趨勢圖')
# 查看當天發(fā)生了什么
df[df.Date == '2011-12-09'].sort_values(by = 'Sales_volume', ascending = False).head(10)
有個大客戶買了80995用爪,這是導致數(shù)據(jù)異常的原因
month =df.groupby('Month').aggregate({'Quantity':"sum",'Sales_volume':"sum"})
month.plot(figsize = (15,8))
plt.xlabel('每月')
plt.ylabel('數(shù)量')
plt.title('月度銷售金額和單量趨勢圖')
order_d = df.groupby('Invoice').aggregate({'Quantity':"sum",'Sales_volume':"sum"})
order_d.describe()
order_d['Quantity'].hist(bins = 100, figsize = (15, 8), color = 'r')
plt.title('訂單量分布頻率圖')
plt.ylabel('頻率')
plt.xlabel('訂單量')
order_d[order_d.Quantity < 5000]['Quantity'].hist(bins = 100, figsize = (15, 8), color = 'r')
plt.title('訂單量分布頻率圖(小于5000)')
plt.ylabel('頻率')
plt.xlabel('訂單量')
order_d['Sales_volume'].hist(bins = 100, figsize = (15, 8), color = 'r')
plt.title('銷售金額分布頻率圖')
plt.ylabel('頻率')
plt.xlabel('銷售金額')
order_d[order_d.Sales_volume < 2000]['Sales_volume'].hist(bins = 100, figsize = (15, 8), color = 'r')
plt.title('銷售金額分布頻率圖(小于2000英鎊)')
plt.ylabel('頻率')
plt.xlabel('銷售金額')
plt.figure(figsize=(15,8))
plt.scatter(order_d['Quantity'], order_d['Sales_volume'], color = 'r')
plt.title('銷售金額與訂單量散點圖')
plt.ylabel('銷售金額')
plt.xlabel('訂單量')
# 篩去商品件數(shù)在20000及以上的訂單
plt.figure(figsize=(15,8))
plt.scatter(order_d[order_d.Quantity < 20000]['Quantity'], order_d[order_d.Quantity < 20000]['Sales_volume'], color = 'r')
plt.title('銷售金額與訂單量散點圖(20000以下)')
plt.ylabel('銷售金額')
plt.xlabel('訂單量')