第3章:Python与数据分析工具
说实话,很多做数学建模的朋友,模型建得漂亮,但一到数据处理就卡壳。我见过太多人花80%的时间在数据清洗上,真正建模的时间反而没多少。这一章,我就带你搞定Python环境,以及三个最核心的数据分析工具:NumPy、Pandas、Matplotlib。
3.1 Python环境配置
我个人习惯用Anaconda来管理Python环境。为什么?因为它自带了一堆数据分析包,省得你一个个去pip install。你想想看,要是每次换个项目都要重新装一遍NumPy、Pandas,那得多烦人。
安装步骤很简单:
- 去Anaconda官网下载对应系统的安装包
- 一路默认安装,记得勾选「Add Anaconda to my PATH」
- 打开终端或Anaconda Prompt,输入
conda --version验证
创建虚拟环境的命令:
conda create -n pricing_env python=3.9
conda activate pricing_env
嗯,这里要注意:Python 3.9是目前最稳定的版本之一。我试过3.11,有些老包还不兼容,别给自己找麻烦。
3.2 NumPy基础
NumPy,说白了就是Python里的数组计算神器。报价优化里大量涉及矩阵运算,比如价格向量、成本矩阵,用NumPy处理起来比纯Python快几十倍。
先看个最简单的例子:
import numpy as np
# 创建价格数组
prices = np.array([100, 200, 150, 180, 220])
# 批量打8折
discounted = prices * 0.8
print(discounted) # [ 80. 160. 120. 144. 176.]
你看,一行代码就搞定了所有元素的运算。要是用Python的for循环,得写好几行。
核心操作速查
| 操作 | 代码示例 | 说明 |
|---|---|---|
| 创建数组 | np.array([1,2,3]) |
从列表创建 |
| 全零数组 | np.zeros((3,4)) |
3行4列,全为0 |
| 等差数列 | np.linspace(0,1,5) |
0到1之间均匀取5个数 |
| 矩阵乘法 | A @ B |
比 np.dot(A,B) 更直观 |
| 统计函数 | np.mean(), np.std() |
均值、标准差 |
* 做矩阵乘法,结果算出来的弹性系数全错了。记住:* 是逐元素相乘,@ 才是真正的矩阵乘法。
3.3 Pandas基础
Pandas是处理表格数据的利器。报价优化里,你的数据通常是这样的:
| 产品ID | 原价 | 成本 | 销量 |
|---|---|---|---|
| P001 | 100 | 60 | 500 |
| P002 | 200 | 120 | 300 |
用Pandas读入Excel或CSV,就一行代码:
import pandas as pd
df = pd.read_csv('product_data.csv')
print(df.head()) # 看前5行
我个人最常用的几个操作:
- 筛选:
df[df['销量'] > 400]找出畅销品 - 分组:
df.groupby('品类')['利润'].sum()按品类汇总利润 - 新增列:
df['利润率'] = (df['原价'] - df['成本']) / df['原价'] - 缺失值处理:
df.dropna()或df.fillna(0)
pd.to_numeric(df['价格'], errors='coerce') 可以自动把非数字转成NaN,再统一处理。
3.4 Matplotlib可视化入门
做报价优化,你肯定要画图。价格-需求曲线、利润随价格变化的趋势、不同方案的对比……一张好图胜过千言万语。
先画个最简单的折线图:
import matplotlib.pyplot as plt
# 假设价格从50到150,对应的利润
prices = [50, 70, 90, 110, 130, 150]
profits = [2000, 3500, 4200, 3800, 2500, 1000]
plt.plot(prices, profits, marker='o')
plt.xlabel('价格')
plt.ylabel('利润')
plt.title('价格-利润曲线')
plt.grid(True)
plt.show()
你看,利润在价格90左右达到峰值。这就是我们做报价优化要找的最优点。
常用图表类型
| 图表类型 | 适用场景 | 核心函数 |
|---|---|---|
| 折线图 | 趋势变化 | plt.plot() |
| 柱状图 | 对比不同品类 | plt.bar() |
| 散点图 | 价格与销量的关系 | plt.scatter() |
| 直方图 | 价格分布 | plt.hist() |
plt.rcParams['font.sans-serif'] = ['SimHei']。我当初被这个坑了整整一下午。
3.5 本章知识体系
下面这张图,帮你理清这三个工具的关系:
说白了,这三个工具是递进关系:NumPy提供底层计算能力,Pandas帮你管理数据,Matplotlib把结果画出来。在后面的章节里,我们会把它们组合起来,解决实际的报价优化问题。
本章小结:
- 用Anaconda管理Python环境,省心省力
- NumPy处理数组和矩阵,比纯Python快几十倍
- Pandas是表格数据处理的瑞士军刀
- Matplotlib画图,让数据说话
好了,工具备齐了。下一章我们就要开始真正的数学建模了。记住:工具只是手段,解决问题才是目的。别在工具上花太多时间纠结,够用就行。
公众号:蓝海资料掘金营,微信deep3321