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#解决负号无法正常显示的问题
# 数据读取
df = pd.read_excel(r"C:\Users\wxw\Downloads\online_retail_II.xlsx",sheet_name='Year 2010-2011',dtype=str)
df.head()
# 查看数据情况
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()
#删除 单价和数量为负值的数据
df = df[(df['Quantity'] > 0) & (df['Price'] > 0)]
df.describe()
# 查看现在数据表形式
df.head()
day =df.groupby('Date').aggregate({'Quantity':"sum",'Sales_volume':"sum"})
day.plot(figsize = (15,8))
plt.xlabel('每日')
plt.ylabel('数量')
plt.title('日度销售金额和单量趋势图')
# 取最高一周数据查看原因
day1 =day['2011-11-01':'2011-12-09']
day1.plot(figsize = (15,8))
plt.xlabel('日期')
plt.ylabel('数量')
plt.title('11月及12月销售金额和单量趋势图')
# 查看当天发生了什么
df[df.Date == '2011-12-09'].sort_values(by = 'Sales_volume', ascending = False).head(10)
有个大客户买了80995,这是导致数据异常的原因
month =df.groupby('Month').aggregate({'Quantity':"sum",'Sales_volume':"sum"})
month.plot(figsize = (15,8))
plt.xlabel('每月')
plt.ylabel('数量')
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('订单量')
# 筛去商品件数在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('订单量')