课程目标
- 掌握Python数据分析基础环境的搭建。
- 学习从多种数据源(Excel、CSV、数据库)获取电商运营数据。
- 完成第一个数据读取与预览的实战案例。
核心Skills
- 环境配置:Python、Jupyter Notebook、核心库安装
- 数据获取:使用Pandas读取结构化文件
- 数据预览:数据概览、信息查看、基础统计
课件内容与代码
步骤1:环境准备与库安装
# 课件注释:本部分为环境准备,学员需提前安装Anaconda或Miniconda
# 以下代码为库安装命令,在终端(Terminal)或命令提示符(CMD)中执行,非Python脚本
# 安装核心数据分析库
# pip install pandas numpy matplotlib seaborn jupyter -i https://pypi.tuna.tsinghua.edu.cn/simple
# 安装数据库连接库(可选,根据后续课程需要)
# pip install pymysql sqlalchemy openpyxl xlrd -i https://pypi.tuna.tsinghua.edu.cn/simple
步骤2:创建Jupyter Notebook并导入库
# 代码文件:day1_data_acquisition.ipynb
# 案例数据文件:需准备 `sample_orders.csv` 和 `product_info.xlsx`
# 1. 导入必备库
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
import warnings
warnings.filterwarnings('ignore') # 忽略警告信息
# 设置中文显示和图形样式
plt.rcParams['font.sans-serif'] = ['SimHei', 'Microsoft YaHei'] # 用来正常显示中文标签
plt.rcParams['axes.unicode_minus'] = False # 用来正常显示负号
sns.set_style("whitegrid")
print(">>> 核心库导入成功!")
步骤3:从CSV文件读取订单数据
# 2. 从CSV文件读取电商订单数据
# 假设 `sample_orders.csv` 文件内容示例:
# order_id,user_id,order_date,product_id,quantity,unit_price,city,category
# 1001,201,2023-10-01,P001,2,299.9,北京,电子产品
# 1002,202,2023-10-01,P002,1,1599.0,上海,家用电器
# ...更多记录...
try:
df_orders = pd.read_csv('sample_orders.csv', encoding='utf-8')
print(f">>> 订单数据读取成功!共 {df_orders.shape[0]} 行,{df_orders.shape[1]} 列。")
print(">>> 数据前5行预览:")
display(df_orders.head()) # 在Jupyter中优雅显示,也可用 print(df_orders.head())
except FileNotFoundError:
print(">>> 文件未找到,正在创建示例数据...")
# 生成模拟订单数据供练习
np.random.seed(42)
num_orders = 1000
data = {
'order_id': range(1000, 1000 + num_orders),
'user_id': np.random.randint(200, 500, num_orders),
'order_date': pd.date_range('2023-10-01', periods=num_orders, freq='H').strftime('%Y-%m-%d'),
'product_id': ['P' + str(i).zfill(3) for i in np.random.randint(1, 20, num_orders)],
'quantity': np.random.randint(1, 5, num_orders),
'unit_price': np.round(np.random.uniform(50, 2000, num_orders), 2),
'city': np.random.choice(['北京', '上海', '广州', '深圳', '杭州', '成都'], num_orders),
'category': np.random.choice(['电子产品', '家用电器', '服装服饰', '美妆个护', '食品生鲜'], num_orders)
}
df_orders = pd.DataFrame(data)
df_orders['total_amount'] = df_orders['quantity'] * df_orders['unit_price'] # 计算订单金额
df_orders.to_csv('sample_orders.csv', index=False, encoding='utf-8')
print(f">>> 示例订单数据已生成并保存!共 {df_orders.shape[0]} 行。")
display(df_orders.head())
步骤4:从Excel文件读取商品信息
# 3. 从Excel文件读取商品信息
# 假设 `product_info.xlsx` 文件有一个名为 `Products` 的工作表
try:
df_products = pd.read_excel('product_info.xlsx', sheet_name='Products')
print(f">>> 商品信息读取成功!共 {df_products.shape[0]} 行。")
display(df_products.head())
except FileNotFoundError:
print(">>> Excel文件未找到,正在创建示例商品数据...")
# 生成模拟商品数据
product_data = {
'product_id': ['P' + str(i).zfill(3) for i in range(1, 21)],
'product_name': [f'商品_{i}' for i in range(1, 21)],
'cost_price': np.round(np.random.uniform(30, 1500, 20), 2),
'brand': np.random.choice(['品牌A', '品牌B', '品牌C', '品牌D'], 20),
'warehouse': np.random.choice(['华北仓', '华东仓', '华南仓'], 20)
}
df_products = pd.DataFrame(product_data)
# 保存为Excel文件,需要 openpyxl 库
df_products.to_excel('product_info.xlsx', sheet_name='Products', index=False)
print(">>> 示例商品数据已生成并保存!")
display(df_products.head())
步骤5:数据概览与基本信息查看
# 4. 数据基础探查 - 订单数据
print("="*50)
print("【订单数据概览】")
print("="*50)
print("1. 数据形状 (行数, 列数):", df_orders.shape)
print("\n2. 列名与数据类型:")
print(df_orders.dtypes)
print("\n3. 基本信息 (包含非空值计数):")
df_orders.info()
print("\n4. 数值型字段的统计描述 (均值、标准差、分位数等):")
display(df_orders.describe())
print("\n5. 查看是否存在缺失值:")
print(df_orders.isnull().sum())
步骤6:简单数据筛选与排序
# 5. 数据初步操作实战
print("="*50)
print("【实战操作:数据筛选与排序】")
print("="*50)
# a) 筛选特定城市的订单,例如上海
orders_shanghai = df_orders[df_orders['city'] == '上海']
print(f">>> 上海的订单共有 {orders_shanghai.shape[0]} 笔。")
display(orders_shanghai.head())
# b) 筛选金额大于1000的订单
high_value_orders = df_orders[df_orders['total_amount'] > 1000]
print(f">>> 金额大于1000的高价值订单有 {high_value_orders.shape[0]} 笔。")
# c) 按订单金额降序排列,查看Top 10
top10_orders = df_orders.sort_values(by='total_amount', ascending=False).head(10)
print(">>> 订单金额Top 10:")
display(top10_orders[['order_id', 'user_id', 'total_amount', 'city', 'category']])
# d) 按商品类别统计订单数量
category_order_count = df_orders['category'].value_counts()
print(">>> 各商品类别订单数量分布:")
print(category_order_count)
步骤7:数据合并(关联订单与商品)
# 6. 数据合并:将订单数据与商品信息关联
print("="*50)
print("【实战操作:数据合并】")
print("="*50)
# 使用 product_id 作为键,进行左连接,保留所有订单记录
df_merged = pd.merge(df_orders, df_products, on='product_id', how='left')
print(f">>> 合并后的数据形状: {df_merged.shape}")
print(">>> 合并后数据列名:", df_merged.columns.tolist())
display(df_merged.head())
# 计算毛利润 (假设 total_amount 是销售额)
df_merged['gross_profit'] = df_merged['total_amount'] - (df_merged['cost_price'] * df_merged['quantity'])
print(">>> 已计算毛利润,前5行数据:")
display(df_merged[['order_id', 'product_id', 'total_amount', 'cost_price', 'quantity', 'gross_profit']].head())
步骤8:基础可视化 – 销售类别分布
# 7. 基础数据可视化
print("="*50)
print("【实战操作:基础可视化】")
print("="*50)
# 绘制订单类别的柱状图
plt.figure(figsize=(10, 6))
category_order_count.plot(kind='bar', color='skyblue', edgecolor='black')
plt.title('各商品类别订单数量分布', fontsize=15)
plt.xlabel('商品类别', fontsize=12)
plt.ylabel('订单数量', fontsize=12)
plt.xticks(rotation=45) # 旋转x轴标签
plt.tight_layout()
plt.show()
# 绘制城市销售额饼图
city_sales = df_orders.groupby('city')['total_amount'].sum().sort_values(ascending=False)
plt.figure(figsize=(8, 8))
plt.pie(city_sales.values, labels=city_sales.index, autopct='%1.1f%%', startangle=90, colors=sns.color_palette('pastel'))
plt.title('各城市销售额占比', fontsize=15)
plt.show()
步骤9:保存处理结果
# 8. 将处理后的数据保存为新文件
df_merged.to_csv('processed_orders_with_profit.csv', index=False, encoding='utf-8')
print(">>> 处理后的合并数据已保存为 'processed_orders_with_profit.csv'")
本日要点总结
- 环境是根基:成功配置Python、Jupyter及Pandas等库是第一步。
pd.read_csv() 和 pd.read_excel() 是读取本地文件最常用的函数。
- 数据预览四板斧:
.head()、.info()、.describe()、.isnull().sum()。
- 数据筛选:使用布尔索引
df[df['列名'] > 值]。
- 数据排序:
.sort_values()。
- 数据合并:
pd.merge() 实现类似SQL的JOIN操作。
- 初步可视化:Pandas内置的
.plot() 方法快速绘图。