Python 数据分析实战——从CSV到可视化报告

数据分析是 Python 最广泛的应用场景之一。本文以电商销售数据为例,从数据读取、清洗、分析到可视化,展示完整的数据分析流程。

一、准备工作

pip install pandas numpy matplotlib

二、数据读取

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

plt.rcParams['font.sans-serif'] = ['Microsoft YaHei']
plt.rcParams['axes.unicode_minus'] = False

# 读取 CSV 数据
df = pd.read_csv("sales_data.csv", encoding="utf-8-sig")
print(df.head())
print(df.info())

三、数据清洗

# 1. 处理缺失值
print("缺失值统计:\n", df.isnull().sum())
df = df.dropna(subset=["order_id"])  # 删除订单ID为空的行
df["amount"].fillna(df["amount"].median(), inplace=True)

# 2. 转换日期格式
df["order_date"] = pd.to_datetime(df["order_date"])

# 3. 添加分析列
df["month"] = df["order_date"].dt.month
df["weekday"] = df["order_date"].dt.day_name()
df["amount_range"] = pd.cut(df["amount"],
    bins=[0, 50, 100, 200, 500, 10000],
    labels=["0-50", "50-100", "100-200", "200-500", "500+"]
)

print(f"清洗后数据: {df.shape[0]} 行 x {df.shape[1]} 列")

四、数据分析

# 1. 整体概览
print("销售额统计:\n", df["amount"].describe())

# 2. 各品类销售总额
category_sales = df.groupby("category")["amount"].agg(["sum", "count", "mean"])
category_sales.columns = ["总销售额", "订单数", "均价"]
category_sales = category_sales.sort_values("总销售额", ascending=False)
print("\n品类销售排行:\n", category_sales)

# 3. 月度趋势
monthly_sales = df.groupby("month")["amount"].sum()
print("\n月度销售额:\n", monthly_sales)

# 4. 客户消费频次
top_customers = df["customer_id"].value_counts().head(10)
print("\n消费频次Top10:\n", top_customers)

五、数据可视化

# 1. 各品类销售额对比(柱状图)
plt.figure(figsize=(12, 6))
category_sales["总销售额"].plot(kind="bar", color="#1f77b4")
plt.title("各品类销售额对比", fontsize=15)
plt.xlabel("品类")
plt.ylabel("销售额(元)")
plt.xticks(rotation=45)
plt.tight_layout()
plt.savefig("category_sales.png", dpi=100)
plt.show()

# 2. 月度销售趋势(折线图)
plt.figure(figsize=(12, 6))
monthly_sales.plot(kind="line", marker="o", color="#ff7f0e", linewidth=2)
plt.title("月度销售趋势", fontsize=15)
plt.xlabel("月份")
plt.ylabel("销售额(元)")
plt.grid(True, alpha=0.3)
plt.tight_layout()
plt.savefig("monthly_trend.png", dpi=100)
plt.show()

# 3. 金额区间分布(饼图)
amount_dist = df["amount_range"].value_counts().sort_index()
plt.figure(figsize=(8, 8))
amount_dist.plot(kind="pie", autopct="%1.1f%%", startangle=90)
plt.title("订单金额分布", fontsize=15)
plt.ylabel("")
plt.tight_layout()
plt.savefig("amount_dist.png", dpi=100)
plt.show()

六、生成数据分析报告

# 导出分析结果到 Excel
with pd.ExcelWriter("销售数据分析报告.xlsx") as writer:
    # 各表写入不同 sheet
    category_sales.to_excel(writer, sheet_name="品类分析")
    monthly_sales.to_frame("销售额").to_excel(writer, sheet_name="月度趋势")
    df.describe().to_excel(writer, sheet_name="统计摘要")

print("分析报告已生成: 销售数据分析报告.xlsx")

七、完整代码

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

plt.rcParams['font.sans-serif'] = ['Microsoft YaHei']
plt.rcParams['axes.unicode_minus'] = False

# 读取数据
df = pd.read_csv("sales_data.csv", encoding="utf-8-sig")

# 数据清洗
df.dropna(subset=["order_id"], inplace=True)
df["amount"].fillna(df["amount"].median(), inplace=True)
df["order_date"] = pd.to_datetime(df["order_date"])
df["month"] = df["order_date"].dt.month

# 按品类统计
result = df.groupby("category").agg(
    总销售额=("amount", "sum"),
    订单数=("amount", "count"),
    平均单价=("amount", "mean")
).round(2).sort_values("总销售额", ascending=False)

print("分析结果:")
print(result)

# 导出报告
result.to_excel("分析报告.xlsx")
print("\n报告已生成!")

总结

数据分析的四个步骤:

读取 → 清洗 → 分析 → 可视化 → 报告

清洗是最耗时的环节,约占 60% 时间。掌握 pandas 的常用操作后,数据分析效率会大幅提升。


💡 觉得有用的话,点赞 + 关注【张老师技术栈】吧!每周更新 Java/Python/爬虫 实战干货,不让你白来。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值