pandas 数据处理及分析
本实验旨在分析来自英国零售商的电子商务真实交易数据集,该数据集为英
国公司的在线零售的交易数据,包含了 4000 名客户在一年内的购物数据,该公
司主要销售特定的礼品,公司的许多客户都是批发商。
数据集中的一共有 541909 条数据,每条数据包含以下 8 个特征:
InvoiceNo:发票号。字符型,一个 6 位整数,唯一分配给每个事务。如果此代
码以字母“c”开头,则表示取消。
StockCode 库存代码:产品(项目)代码。一个 5 位数的整数,唯一地分配给每
个不同的产品。
Description:说明产品(项目)名称。字符型。
Quantity 数量:每笔交易中每个产品(项目)的数量。数值型。
InvoiceDate 发票日期:发票日期和时间。数值型,生成每个事务的日期和时间。
UnitPrice 单价:商品单价。数值型,单位产品价格(英镑)。
CustomerID:客户编号。一个 5 位整数,唯一分配给每个客户。
Country 国家:国家名称。字符型,每个客户居住的国家的名称。
1.加载需要的库及读入数据
(1)加载 numpy、pandas 和 matplotlib 三个库;
(2)使用 read_csv 函数读取 ec_data.csv 文件并导入数据。
2.数据信息初步分析
(1)使用 head 函数查看数据内容;
(2)使用 shape 属性查看数据维度;
(3)使用 info 函数查看数据基本信息;
(4)使用 describe 函数进行数据统计分析。
3.数据预处理
(1)使用 isnull 函数检查是否有缺失值;
(2)查看是否存在购买数量 Quantity 小于 0 的异常数据;
(3)使用 dropna 函数去掉空值;
(4)删除异常值数据,并将处理后的数据放到新变量 df_ec 中,
(5)增加一列 AmountSpent,用来放计算后(Quatity*UnitPrice)的购物总价;
(6)使用 astype 函数将 CustomerID 列转为整型。
二、探索性数据分析
1.订单来源国家分析
(1)使用 groupby 函数检查订单都来源于哪些国家,并使用 sort_value 函数对
各个国家的订单数量进行排序;
(2)使用 pivot_table 透视表,查看各国订单数量情况;2.客户情况分析
(1)查看最有价值客户的来源国家;
3.产品情况分析
(1)使用 groupby 函数获取销售额最高的前 50 个产品,保存到变量
most_profitable_product 中;
(2)使用 plot 函数将销售额最高的前 5 个产品以柱状图输出。
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
# 1.加载需要的库及读入数据
# (1)已加载 numpy、pandas 和 matplotlib 三个库;
# (2)使用 read_csv 函数读取 ec_data.csv 文件并导入数据。
df = pd.read_csv('ec_data.csv')
# 2.数据信息初步分析
# (1)使用 head 函数查看数据内容;
print(df.head())
# (2)使用 shape 属性查看数据维度;
print(df.shape)
# (3)使用 info 函数查看数据基本信息;
print(df.info())
# (4)使用 describe 函数进行数据统计分析。
print(df.describe())
# 3.数据预处理
# (1)使用 isnull 函数检查是否有缺失值;
print(df.isnull().sum())
# (2)查看是否存在购买数量 Quantity 小于 0 的异常数据;
print(df[df['Quantity'] < 0])
# 3.数据预处理
# ...
# (3)使用 dropna 函数去掉空值;
df = df.dropna()
# (4)删除异常值数据,并将处理后的数据放到新变量 df_ec 中,
df_ec = df[df['Quantity'] >= 0].copy() # 使用 .copy() 来创建一个副本
# (5)增加一列 AmountSpent,用来放计算后(Quantity*UnitPrice)的购物总价;
df_ec.loc[:, 'AmountSpent'] = df_ec['Quantity'] * df_ec['UnitPrice'] # 使用 .loc 来赋值
# (6)使用 astype 函数将 CustomerID 列转为整型。
df_ec.loc[:, 'CustomerID'] = df_ec['CustomerID'].astype(int) # 使用 .loc 来赋值
# 二、探索性数据分析
# 1.订单来源国家分析
# (1)使用 groupby 函数检查订单都来源于哪些国家,并使用 sort_values 函数对
# 各个国家的订单数量进行排序;
orders_by_country = df_ec.groupby('Country')['InvoiceNo'].count().sort_values(ascending=False)
print(orders_by_country)
# (2)使用 pivot_table 透视表,查看各国订单数量情况;
pivot_table_country = df_ec.pivot_table(index='Country', values='InvoiceNo', aggfunc='count')
print(pivot_table_country)
# 2.客户情况分析
# (1)查看最有价值客户的来源国家;
value_by_customer = df_ec.groupby(['CustomerID', 'Country'])['AmountSpent'].sum().sort_values(ascending=False)
print(value_by_customer.head())
# 3.产品情况分析
# (1)使用 groupby 函数获取销售额最高的前 50 个产品,保存到变量
# most_profitable_products 中;
most_profitable_products = df_ec.groupby('Description')['AmountSpent'].sum().sort_values(ascending=False).head(50)
print(most_profitable_products)
# (2)使用 plot 函数将销售额最高的前 5 个产品以柱状图输出
top_5_products = most_profitable_products.head(5)
top_5_products.plot(kind='bar')
plt.show()
使用到的表格数据命名如图:
相关插件安装问题可见上篇末尾,另外本实验需安装matplotlib
表格数据部分截图如下:
实验效果图如下: