你想知道如何用 Python 对采集到的京东商品详情数据做分析,我会用「简洁步骤 + 核心方法 + 实用案例」的形式,从数据预处理→多维度分析→可视化输出 展开,聚焦新手易上手、实用性强的分析思路,覆盖价格、销量、库存等核心维度。
一、核心前提
数据准备:采集到的京东商品数据(建议整理为 CSV/JSON 格式,包含字段:商品 ID、标题、品牌、价格、销量、库存状态、店铺名称等);
依赖安装:只需 2 个核心库,新手友好:
pip install pandas matplotlib # pandas处理数据,matplotlib可视化
二、核心分析流程(4 步)
步骤 1:数据预处理(基础且关键)
目的:清洗脏数据、统一格式,避免分析出错。
import pandas as pd
# 1. 读取采集的数据(以CSV为例,JSON可先用pd.read_json()读取)
df = pd.read_csv("jd_item_data.csv", encoding="utf-8-sig")
# 2. 基础清洗:删除空行、去重、统一字段格式
df = df.dropna(subset=["商品ID", "价格"]) # 删除核心字段为空的行
df = df.drop_duplicates(subset=["商品ID"]) # 按商品ID去重
df["价格"] = df["价格"].astype(float) # 价格转为浮点数(便于计算)
# 3. 处理非标准字段(如销量"10万+"转为数值)
def parse_sales(sales_str):
if pd.isna(sales_str) or sales_str == "暂无数据":
return 0
sales_str = str(sales_str).replace("+", "").replace("万", "0000")
try:
return int(float(sales_str))
except:
return 0
df["销量数值"] = df["销量"].apply(parse_sales) # 新增销量数值列,便于分析步骤 2:核心维度分析(实用且高频)
基于预处理后的数据,做 4 个核心维度分析,覆盖竞品 / 选品核心需求:
# ========== 1. 价格分析 ==========
print("=== 价格分析 ===")
print(f"平均价格:{df['价格'].mean():.2f}元")
print(f"价格中位数:{df['价格'].median():.2f}元")
print(f"价格最低:{df.loc[df['价格'].idxmin(), '商品名称']}({df['价格'].min()}元)")
print(f"价格最高:{df.loc[df['价格'].idxmax(), '商品名称']}({df['价格'].max()}元)")
# ========== 2. 品牌分析(按品牌分组) ==========
print("\n=== 品牌分析 ===")
brand_group = df.groupby("品牌")
# 各品牌商品数量
brand_count = brand_group["商品ID"].count().sort_values(ascending=False)
print("各品牌商品数量:\n", brand_count)
# 各品牌平均价格
brand_avg_price = brand_group["价格"].mean().sort_values(ascending=False)
print("各品牌平均价格:\n", brand_avg_price)
# ========== 3. 销量分析 ==========
print("\n=== 销量分析 ===")
# 销量TOP5商品
top5_sales = df.sort_values("销量数值", ascending=False).head(5)[["商品名称", "品牌", "销量数值"]]
print("销量TOP5商品:\n", top5_sales)
# 有货/无货商品数量
stock_count = df["库存状态"].value_counts()
print("库存状态分布:\n", stock_count)
# ========== 4. 价格-销量相关性分析 ==========
print("\n=== 价格-销量相关性 ===")
# 计算价格与销量的相关系数(-1~1,负数表示价格越低销量越高)
corr = df["价格"].corr(df["销量数值"])
print(f"价格与销量相关系数:{corr:.2f}")
if corr < -0.3:
print("结论:价格越低,销量越高(强负相关)")
elif corr > 0.3:
print("结论:价格越高,销量越高(强正相关)")
else:
print("结论:价格与销量无明显相关性")步骤 3:可视化分析(直观易懂)
把分析结果转为图表,比纯文字更易解读:
import matplotlib.pyplot as plt
plt.rcParams["font.sans-serif"] = ["SimHei"] # 解决中文显示问题
plt.rcParams["axes.unicode_minus"] = False
# 1. 品牌价格对比(柱状图)
plt.figure(figsize=(10, 6))
brand_avg_price.plot(kind="bar", color="skyblue")
plt.title("各品牌平均价格对比")
plt.xlabel("品牌")
plt.ylabel("平均价格(元)")
plt.xticks(rotation=45)
plt.tight_layout()
plt.savefig("品牌价格对比.png", dpi=300)
# 2. 销量TOP5商品(横向柱状图)
plt.figure(figsize=(10, 6))
top5_sales.plot(kind="barh", x="商品名称", y="销量数值", color="orange")
plt.title("销量TOP5商品")
plt.xlabel("销量")
plt.ylabel("商品名称")
plt.tight_layout()
plt.savefig("销量TOP5.png", dpi=300)
# 3. 价格分布(直方图)
plt.figure(figsize=(10, 6))
plt.hist(df["价格"], bins=10, color="green", alpha=0.7)
plt.title("商品价格分布")
plt.xlabel("价格(元)")
plt.ylabel("商品数量")
plt.tight_layout()
plt.savefig("价格分布.png", dpi=300)步骤 4:生成分析报告(汇总结果)
把分析结论整理为结构化报告,便于落地使用:
# 生成文字版分析报告
report = f"""
# 京东商品详情数据分析报告
## 数据概况
- 分析商品总数:{len(df)}个
- 涉及品牌数:{df['品牌'].nunique()}个
- 价格区间:{df['价格'].min()}元 ~ {df['价格'].max()}元
- 平均价格:{df['价格'].mean():.2f}元
## 核心结论
1. 价格分析:{df.loc[df['价格'].idxmin(), '品牌']}品牌价格最低({df['价格'].min()}元),{df.loc[df['价格'].idxmax(), '品牌']}品牌价格最高({df['价格'].max()}元);
2. 销量分析:销量最高的商品为{df.loc[df['销量数值'].idxmax(), '商品名称']}({df['销量数值'].max()}件);
3. 库存分析:有货商品{stock_count.get('有货', 0)}个,无货商品{stock_count.get('无货', 0)}个;
4. 相关性:价格与销量相关系数为{corr:.2f},{('价格越低销量越高' if corr < -0.3 else '价格越高销量越高' if corr > 0.3 else '无明显相关性')}。
"""
# 保存报告到文件
with open("商品分析报告.md", "w", encoding="utf-8") as f:
f.write(report)
print("✅ 分析报告已保存为 商品分析报告.md")三、核心注意点(避坑)
数据格式统一:价格、销量等字段必须转为数值类型才能计算,否则会出现「字符串比较错误」;
缺失值处理:用
dropna()删除核心字段为空的数据,或用fillna()填充(如销量缺失填 0);中文显示:必须设置
plt.rcParams解决 matplotlib 中文乱码,否则图表会显示方块;分析维度扩展:可新增「好评率分析」「店铺销量排行」「价格波动分析(历史数据)」等,只需基于现有代码新增分组 / 计算逻辑。
总结
核心逻辑:先通过 pandas 清洗数据(统一格式、处理脏数据)→ 再做分组 / 统计分析(价格、销量、品牌)→ 用 matplotlib 可视化 → 最后汇总为结构化报告;
关键操作:价格 / 销量的类型转换、品牌分组统计、相关性计算是核心;
实用性:这套流程适配新手,覆盖选品 / 竞品分析的核心需求,可直接套用在自己采集的数据上。