Day32:Python数据分析项目实战
回顾一下我们在整个数据分析篇所学的知识,我们已经学习了Numpy、Pandas、Matplotlib、Seaborn、pyecharts等常用库,掌握了数据分析的基本概念和常用技巧。现在,我们将应用这些知识来完成一个实战项目。
项目任务
项目任务:分析某电子商务平台的销售数据,了解销售情况、商品类别、用户行为等信息,并进行可视化展示。
数据准备:为了完成这个项目,我们需要准备一个包含以下列的数据集:
列名 | 数据类型 | 描述 |
---|---|---|
date | 日期/时间 | 销售发生的日期和时间 |
product | 字符串 | 销售的产品名称 |
category | 字符串 | 产品所属的类别 |
price | 浮点数 | 单个产品的价格 |
quantity | 整数 | 销售的产品数量 |
user_id | 字符串 | 购买产品的用户ID |
数据生成:我们可以利用下面这段代码生成一份数据集。运行以下代码将会生成一个名为 sales_data.csv
的数据文件,包含了日期、用户ID、产品、类别、数量和价格等字段的销售数据。您可以将这个文件用作数据分析项目的数据集。请注意,在运行代码之前,确保已安装 Faker
库,可以使用 pip install faker
进行安装。
import pandas as pd
import numpy as np
import random
from faker import Faker
# 生成随机的销售数据集
fake = Faker()
np.random.seed(0)
# 生成日期序列
dates = pd.date_range(start='2022-01-01', end='2022-12-31', freq='D')
data = []
# 生成异常销售数据
data.append(['2022-03-28 00:00:00', np.nan, "A", "Electronics", 500, 1])
data.append(['2022/05/28 00:00:00', 1001, "B", "Food", 50, 3])
data.append(['2022-12-28 00:00:00', 1002, "C", "Food", -50, -3])
data.append(['2022/06/21 00:00:00', 1012, "F", "Clothing", 100, 2])
data.append(['2022/05/12 00:00:00', 4112, "F", "Clothing", np.nan, np.nan])
data.append(['2022-11-11 00:00:00', np.nan, "C", "Food", np.nan, np.nan])
# 生成正常销售数据
for date in dates:
num_sales = np.random.randint(50, 100) # 随机生成每日的销售笔数
for _ in range(num_sales):
user_id = fake.random_int(min=1000, max=9999)
product = fake.random_element(elements=("A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N"))
category = fake.random_element(elements=("Electronics", "Clothing", "Fruit", "Food", "Book"))
quantity = np.random.randint(1, 10)
price = np.random.randint(10, 500)
data.append([date, user_id, product, category, quantity, price])
# 创建数据框
columns = ['date', 'user_id', 'product', 'category', 'quantity', 'price']
df = pd.DataFrame(data, columns=columns)
# 保存数据集为CSV文件
df.to_csv('sales_data.csv', index=False)
因为使用随机数生成数据,故读者最后的数据分析结果不一定与这里相同,读者可以通过从该连接(提取码:02jc)获取本文生成的数据集。
1. 数据加载和预处理
1.1 导入所需的库和模块
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
import pyecharts.options as opts
from pyecharts.charts import Bar, Line
1.2 加载数据集
# 假设数据集文件名为 sales_data.csv,路径为 data/sales_data.csv,具体路径需要视情况而定
data = pd.read_csv('data/sales_data.csv')
1.3 数据预处理
我们查看得到的数据集,但是因为太过于庞大,故而只看前几行。我们知道数据集需要清洗,故选择处理缺失值与重复值,统一日期类型,筛选去掉异常值。
# 查看数据集的前几行
print(data.head())
# 处理缺失值
data = data.dropna()
# 转换日期列的数据类型
data['date'] = pd.to_datetime(data['date'],format='ISO8601')
# 处理重复值
data = data.drop_duplicates()
# 处理异常值
data = data[(data['price'] > 0) & (data['quantity'] > 0)]
#再次查看
print(data.head())
2. 数据分析
2.1 统计销售总金额
销售总金额为每单销售额之和,每单销售额即每行的单价*数量,我们这里新增了一行表示该订单的总价。
data['total'] = data['price'] * data['quantity']
total_sales = data['total'].sum()
print("总销售金额:", total_sales) # 总销售金额: 35212829.0
2.2 分析销售额随时间的变化趋势
需要按照月份进行分组,然后对每行总价求和。
# 按月份统计销售额
monthly_sales = data['total'].groupby(data['date'].dt.to_period('M')).sum()
print(monthly_sales)
2.3 分析商品类别的销售情况
需要对类型进行分组,然后对每行求和。
# 按商品类别统计销售额
category_sales = data.groupby('category')['total'].sum()
print(category_sales)
2.4 分析用户行为
对用户ID进行分组,然后求取每组的数量,再统计每个数量出现的次数。
# 统计用户购买次数
user_purchase_count = data.groupby('user_id').size()
print(user_purchase_count)
# 统计每个次数的人数分布
every_count_users = user_purchase_count.value_counts()
print(every_count_users)
3. 数据可视化
展示通过以上分析,我们已经得到了一些数据的统计结果,接下来使用绘图库将这些结果可视化展示出来。
3.1 销售额随时间的变化趋势折线图
# 绘制折线图
line_chart = Line()
line_chart.add_xaxis(list(monthly_sales.index.astype(str)))
line_chart.add_yaxis("", monthly_sales)
line_chart.set_global_opts(title_opts=opts.TitleOpts(title="销售额随时间变化"))
line_chart.render("sales_trend.html")
3.2 商品类别销售情况柱状图
# 绘制柱状图
category_sales.plot(kind='bar')
plt.xlabel('Category')
plt.ylabel('Total Sales')
plt.title('Sales by Category')
3.3 用户购买次数分布图
# 绘制柱状图
every_count_users.plot(kind='pie',pctdistance=0.9,explode=(0,0,0,0,0,0,0.1,0.2,0.3,0.4,0.5,0.6))
plt.xlabel('frequency')
plt.ylabel('count')
plt.title('Purchase frequency distribution')
总结
以上就是一个简单的数据分析项目实战,通过分析销售数据、商品类别和用户行为,我们可以对电子商务平台的销售情况有一个更全面的了解,并通过可视化图表将分析结果直观地展示出来。你可以根据实际需求进一步扩展和优化项目,应用更多数据分析技巧和方法。
至此,我们数据分析篇的内容就结束了,下一节我们将进入Python爬虫篇。
1. AI爱好者,爱搞事的 2. 想要掌握第二门语言的Javaer或者golanger 3. 决定考计算机领域研究生,给实验室搬砖的uu,强烈建议你花时间学完这个,后续搬砖比较猛 4. 任何对编程感兴趣的,且愿意掌握一门技能的人