python之pandas 数据处理及分析

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

表格数据部分截图如下:

实验效果图如下:

 

  • 7
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值