12.1 数据分析案例


文档摘要

12.1 数据分析案例 NumPy 数据分析案例详解 12.1 数据分析案例:销售数据分析 12.1.1 案例背景 假设我们是一家电商公司,拥有一个包含销售数据的 CSV 文件。该文件包含以下字段: : 订单 ID (字符串) : 产品 ID (字符串) : 客户 ID (字符串) : 订单日期 (字符串,格式如 YYYY-MM-DD) : 购买数量 (整数) : 单价 (浮点数) 我们的目标是利用 NumPy 对这份销售数据进行分析,回答以下问题: 总销售额是多少? 最畅销的产品是什么? 每个月的销售额是多少? 消费最高的客户是谁? 销售额的统计描述(均值、标准差、最大值、最小值等) 12.1.

12.1 数据分析案例

NumPy 数据分析案例详解

12.1 数据分析案例:销售数据分析

12.1.1 案例背景

假设我们是一家电商公司,拥有一个包含销售数据的 CSV 文件。该文件包含以下字段:

  • order_id: 订单 ID (字符串)

  • product_id: 产品 ID (字符串)

  • customer_id: 客户 ID (字符串)

  • order_date: 订单日期 (字符串,格式如 YYYY-MM-DD)

  • quantity: 购买数量 (整数)

  • unit_price: 单价 (浮点数)

我们的目标是利用 NumPy 对这份销售数据进行分析,回答以下问题:

  1. 总销售额是多少?

  2. 最畅销的产品是什么?

  3. 每个月的销售额是多少?

  4. 消费最高的客户是谁?

  5. 销售额的统计描述(均值、标准差、最大值、最小值等)

12.1.2 数据准备

首先,我们需要导入必要的库:

import numpy as np import pandas as pd # 用于读取 CSV 文件 from datetime import datetime

然后,使用 pandas 读取 CSV 文件,并将其转换为 NumPy 数组:

# 假设 CSV 文件名为 sales_data.csv try: df = pd.read_csv('sales_data.csv') except FileNotFoundError: print("Error: sales_data.csv not found. Please make sure the file exists in the same directory.") exit() # 转换为 NumPy 数组 sales_data = df.to_numpy() print(sales_data.shape) # 打印数组的形状,例如 (1000, 6) print(sales_data[0]) # 打印第一行数据,查看数据类型

12.1.3 数据清洗与转换

在进行分析之前,我们需要对数据进行清洗和转换,确保数据的质量和格式正确。

  • 数据类型转换: 将订单日期转换为 datetime 对象,数量转换为整数,单价转换为浮点数。
# 定义数据类型 data_types = [('order_id', 'U20'), ('product_id', 'U20'), ('customer_id', 'U20'), ('order_date', 'datetime64[D]'), ('quantity', 'i4'), ('unit_price', 'f4')] # 使用 astype 指定数据类型 try: sales_data_cleaned = np.array([tuple(x) for x in sales_data], dtype=data_types) except ValueError as e: print(f"Error during data type conversion: {e}") print("Please check the data in your CSV file for inconsistencies.") exit() print(sales_data_cleaned.dtype) # 打印数据类型 print(sales_data_cleaned[0]) # 打印第一行数据,查看数据类型

12.1.4 数据分析与代码实践

现在我们可以使用 NumPy 进行数据分析了。

1. 总销售额

# 计算每笔订单的销售额 sales_amount = sales_data_cleaned['quantity'] * sales_data_cleaned['unit_price'] # 计算总销售额 total_sales = np.sum(sales_amount) print(f"总销售额: ${total_sales:.2f}")

2. 最畅销的产品

# 使用 unique 函数找到所有唯一的产品 ID unique_products = np.unique(sales_data_cleaned['product_id']) # 创建一个空字典来存储每个产品的总销量 product_sales = {} # 遍历每个唯一的产品 ID for product in unique_products: # 找到所有包含当前产品 ID 的行 product_indices = sales_data_cleaned['product_id'] == product # 计算当前产品的总销量 total_quantity = np.sum(sales_data_cleaned['quantity'][product_indices]) # 将产品 ID 和总销量添加到字典中 product_sales[product] = total_quantity # 找到总销量最大的产品 best_selling_product = max(product_sales, key=product_sales.get) print(f"最畅销的产品: {best_selling_product} (销量: {product_sales[best_selling_product]})")

或者,更简洁的方式使用 pandasgroupbysort_values:

df['sales_amount'] = df['quantity'] * df['unit_price'] product_sales = df.groupby('product_id')['quantity'].sum().sort_values(ascending=False) best_selling_product = product_sales.index[0] best_selling_quantity = product_sales.iloc[0] print(f"最畅销的产品: {best_selling_product} (销量: {best_selling_quantity})")

3. 每月的销售额

# 提取年份和月份 months = sales_data_cleaned['order_date'].astype('datetime64[M]') # 获取唯一月份 unique_months = np.unique(months) # 创建一个空字典来存储每月销售额 monthly_sales = {} # 遍历每个唯一月份 for month in unique_months: # 找到所有包含当前月份的行 month_indices = months == month # 计算当前月份的总销售额 total_sales = np.sum(sales_amount[month_indices]) # 将月份和总销售额添加到字典中 monthly_sales[month] = total_sales # 打印每月销售额 for month, sales in monthly_sales.items(): print(f"{month}: ${sales:.2f}")

或者,更简洁的方式使用 pandasgroupby:

df['order_date'] = pd.to_datetime(df['order_date']) monthly_sales = df.groupby(pd.Grouper(key='order_date', freq='M'))['sales_amount'].sum() for month, sales in monthly_sales.items(): print(f"{month.strftime('%Y-%m')}: ${sales:.2f}")

4. 消费最高的客户

# 使用 unique 函数找到所有唯一的客户 ID unique_customers = np.unique(sales_data_cleaned['customer_id']) # 创建一个空字典来存储每个客户的总消费额 customer_spending = {} # 遍历每个唯一的客户 ID for customer in unique_customers: # 找到所有包含当前客户 ID 的行 customer_indices = sales_data_cleaned['customer_id'] == customer # 计算当前客户的总消费额 total_spending = np.sum(sales_amount[customer_indices]) # 将客户 ID 和总消费额添加到字典中 customer_spending[customer] = total_spending # 找到总消费额最高的客户 top_customer = max(customer_spending, key=customer_spending.get) print(f"消费最高的客户: {top_customer} (消费额: ${customer_spending[top_customer]:.2f})")

或者,更简洁的方式使用 pandasgroupby:

customer_spending = df.groupby('customer_id')['sales_amount'].sum().sort_values(ascending=False) top_customer = customer_spending.index[0] top_customer_spending = customer_spending.iloc[0] print(f"消费最高的客户: {top_customer} (消费额: ${top_customer_spending:.2f})")

5. 销售额的统计描述

# 使用 NumPy 的统计函数计算销售额的统计描述 sales_mean = np.mean(sales_amount) sales_std = np.std(sales_amount) sales_max = np.max(sales_amount) sales_min = np.min(sales_amount) sales_median = np.median(sales_amount) sales_percentiles = np.percentile(sales_amount, [25, 50, 75]) # 计算 25%, 50%, 75% 分位数 print(f"销售额均值: ${sales_mean:.2f}") print(f"销售额标准差: ${sales_std:.2f}") print(f"销售额最大值: ${sales_max:.2f}") print(f"销售额最小值: ${sales_min:.2f}") print(f"销售额中位数: ${sales_median:.2f}") print(f"销售额25%分位数: ${sales_percentiles[0]:.2f}") print(f"销售额50%分位数: ${sales_percentiles[1]:.2f}") print(f"销售额75%分位数: ${sales_percentiles[2]:.2f}")

或者,使用 pandasdescribe 方法:

print(df['sales_amount'].describe())

12.1.5 流程图

使用 Mermaid 绘制流程图,描述整个数据分析过程:

12.1.6 结论

通过本案例,我们演示了如何使用 NumPy 对销售数据进行分析。 NumPy 提供了强大的数组操作和数学函数,可以方便地进行数据清洗、转换和统计分析。 虽然 pandas 在某些方面提供了更简洁的语法,但 NumPy 仍然是数据分析的基础,理解 NumPy 的原理有助于更深入地理解 pandas 和其他数据分析工具。 在实际应用中,我们可以根据具体需求选择合适的工具和方法,灵活地运用 NumPy 和其他库,以实现更高效的数据分析。

12.1.7 扩展

  • 数据可视化: 可以使用 matplotlibseaborn 等库将分析结果可视化,例如绘制每月销售额的折线图,或者绘制产品销量的柱状图。

  • 更复杂的分析: 可以进行更复杂的分析,例如计算客户的复购率,或者预测未来的销售额。

  • 数据源: 可以从不同的数据源读取数据,例如数据库或 API。

  • A/B测试: 可以使用NumPy来进行A/B测试,例如比较不同营销策略的效果。


发布者: 作者: 转发
评论区 (0)
U