Python常用的数据分析库和选择
-
- NumPy是Python中用于科学计算的库,提供了高性能的多维数组对象和工具
- 它提供了高性能的多维数组对象以及这些数组的操作工具
- NumPy数组比Python自带的列表更加高效,它们在进行大规模数据操作时速度更快,占用内存更少
- 此外,NumPy还提供了广泛的数学函数库,支持线性代数、傅里叶变换和随机数生成等操作
- 它是大量机器学习框架的基础库,为Python带来了真正的多维数组功能,并将常用的数学函数都进行数组化,使得这些数学函数能够直接对数组进行操作
-
- 开源的Python数据分析库
- 它提供了快速、灵活且富有表现力的数据结构,使“关系”或“标记”数据的工作既简单又直观
- Pandas的核心数据结构是Series(一维数组)和DataFrame(二维表格型数据结构),它们可以包含多种类型的数据,包括整数、字符串、浮点数、Python对象等
- Pandas还提供了丰富的数据清洗、转换、合并、重塑、数据聚合以及数据可视化等功能
-
- 是一个基于NumPy的开源Python库,用于数学、科学和工程计算
- 它提供了许多用户友好和高效的数值实践,如数值积分、优化算法、信号处理、图像处理、常微分方程求解
- SciPy是专为科学和工程设计的,封装了一些高阶抽象和物理模型,扩展了NumPy的功能
-
- 底层基于Java和Scala实现
- PySpark是Apache Spark的Python API,允许Python开发者使用Spark进行大规模数据处理
- Spark是一个基于内存计算的大数据并行计算框架,提高了在大数据环境下数据处理的实时性,同时保证了高容错性和高可伸缩性
- PySpark提供了与Spark相同的API和功能,但允许使用Python语言进行编程
-
总结
- Pandas和NumPy是数据分析的基础工具,Pandas更侧重于数据预处理和分析,而NumPy更侧重于数值计算和数组操作。
- SciPy则提供了高级数学和统计分析功能
- PySpark则专注于大数据处理,提供了分布式计算的能力,适用于处理大规模数据集
Python常用的数据可视化库和选择
-
- 功能特点
- Matplotlib是Python中最流行的数据可视化库之一,提供了丰富的绘图功能和高度可定制化的选项。
- 支持绘制各种静态、动态、交互式的图表,包括折线图、散点图、柱状图、饼图等。
- 通常与NumPy和SciPy等科学计算库一起使用,适用于数据分析和科学计算领域的可视化。
- 优缺点
- 优点
- 强大的绘图功能和灵活性。
- 高度可定制化的图形设置,可以自定义颜色、线型、标签等。
- 丰富的图形美化和注释功能,如坐标轴设置、图表标题等。
- 缺点
- 对于初学者来说,API和配置选项可能较为复杂。
- 主要侧重于静态图表,交互性相对较弱。
- 优点
- 功能特点
-
- 功能特点
- pyecharts是一个基于Python的开源数据可视化库,用于创建各种交互式的图表和可视化效果。
- 它是基于Echarts的Python封装,继承了Echarts的丰富功能和优雅外观。
- 提供了简洁的API设计和高度灵活的配置项,支持链式调用,易于上手和使用。
- 优缺点
- 优点
- 易于使用,提供了用户友好且易于理解的Python API。
- 丰富的图表类型,包括折线图、柱状图、散点图、饼图、雷达图、地图等。
- 强大的交互性,支持各种插件、视觉效果、事件、可视化组件等操作。
- 详细的文档和示例,帮助开发者快速上手项目。
- 缺点
- 相对于Matplotlib,可能在某些特定领域的绘图功能上稍显不足
- 主要生成的是HTML格式的交互式图表,不适用于所有场景
- 优点
- 功能特点
-
总结
- 如果需要绘制高度定制化的静态图表,并且注重细节控制和功能完整性,选Matplotlib
- 如果需要快速创建交互式的图表,并且希望图表具有丰富的视觉效果和易于使用的API,选pyecharts
仿淘宝下单的用户数据分析—需求分析
-
需求
- 将2026年用户每月的购买金额统计绘制成图表展示,方便直观查看每月的销售额对比情况
- 全年的总销售额和用户平均下单金额
-
分析
- 用户每个月下单的金额需要统计求和
- 每个用户购买金额(个数*商品价格)之和
- 2026年每月份作为x轴,每月购买金额为Y轴
- 时间顺序是乱的,需要排序
- 价格有脏数据,需要清洗
- 用户每个月下单的金额需要统计求和
-
数据处理使用pandas+numpy库
-
数据可视化使用Matplotlib库
import matplotlib
import numpy as np
import pandas as pd
from datetime import datetime
from matplotlib import pyplot as plt
# 强制指定后端
matplotlib.use("TkAgg")
# 生成随机用户ID
user_ids = np.random.randint(1000, 10000, 100)
# 生成随机商品ID
product_ids = np.random.randint(100, 1000, 100)
# 生成随机商品价格
product_prices = np.random.randint(10, 100, 100)
# 生成随机购买数量
buy_nums = np.random.uniform(1, 10, 100).astype(int)
# 生成随机购买日期
start_date = datetime(2025, 1, 1)
end_date = datetime(2025, 12, 31)
buy_dates = pd.date_range(start_date, end_date, 100).tolist()
np.random.shuffle(buy_dates) # 随机打乱
# 创建数据表格
data = {
"user_id": user_ids,
"product_id": product_ids,
"product_price": product_prices,
"buy_num": buy_nums,
"buy_date": buy_dates,
}
df = pd.DataFrame(data)
# 插入一些脏数据(10%)
bad_data = np.random.randint(-10, 0, int(len(df) * 0.1))
df.loc[df.sample(frac=0.1).index, "buy_num"] = bad_data
# 清洗数据
df_cleaned = df[df["buy_num"] > 0]
# 总销售额
total_sales = (df_cleaned["product_price"] * df_cleaned["buy_num"]).sum()
print(f"总销售额{total_sales}")
# 平均购买价格
average_price = df_cleaned["product_price"].mean()
print(f"平均购买价格{average_price}")
# 生成数据可视化图表
df_cleaned["buy_date"] = pd.to_datetime(df_cleaned["buy_date"])
df_cleaned.set_index("buy_date", inplace=True)
monthly_sales = df_cleaned.resample("ME").apply(lambda x: (x["product_price"] * x["buy_num"]).sum()).reset_index()
monthly_sales = monthly_sales.rename(columns={0: "total_sales"})
monthly_sales["buy_date"] = monthly_sales["buy_date"].dt.to_period("M").dt.start_time
monthly_sales.set_index("buy_date", inplace=True)
# 绘制折线图
monthly_sales.plot(kind="line", figsize=(12, 6), title="month")
plt.xlabel("date")
plt.ylabel("sales volume")
plt.savefig("sine_curve.png")
# plt.show()
x = np.linspace(0, 10, 100)
y = np.sin(x)
plt.plot(x, y)
plt.show()