第3章:Python与数据分析工具

说实话,很多做数学建模的朋友,模型建得漂亮,但一到数据处理就卡壳。我见过太多人花80%的时间在数据清洗上,真正建模的时间反而没多少。这一章,我就带你搞定Python环境,以及三个最核心的数据分析工具:NumPy、Pandas、Matplotlib。

3.1 Python环境配置

我个人习惯用Anaconda来管理Python环境。为什么?因为它自带了一堆数据分析包,省得你一个个去pip install。你想想看,要是每次换个项目都要重新装一遍NumPy、Pandas,那得多烦人。

我的建议: 用Anaconda的虚拟环境功能。每个项目建一个独立环境,互不干扰。我曾经因为两个项目依赖的NumPy版本冲突,折腾了一整天。

安装步骤很简单:

  1. 去Anaconda官网下载对应系统的安装包
  2. 一路默认安装,记得勾选「Add Anaconda to my PATH」
  3. 打开终端或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()
注意: 中文显示问题。Matplotlib默认不支持中文,你画出来的图标签可能是方框。解决方案:plt.rcParams['font.sans-serif'] = ['SimHei']。我当初被这个坑了整整一下午。

3.5 本章知识体系

下面这张图,帮你理清这三个工具的关系:

数据分析工具栈 NumPy 数组计算、矩阵运算 价格向量、成本矩阵 Pandas 表格数据处理 数据清洗、分组聚合 Matplotlib 数据可视化 价格曲线、利润图 报价优化数学建模

说白了,这三个工具是递进关系:NumPy提供底层计算能力,Pandas帮你管理数据,Matplotlib把结果画出来。在后面的章节里,我们会把它们组合起来,解决实际的报价优化问题。

本章小结:

  • 用Anaconda管理Python环境,省心省力
  • NumPy处理数组和矩阵,比纯Python快几十倍
  • Pandas是表格数据处理的瑞士军刀
  • Matplotlib画图,让数据说话

好了,工具备齐了。下一章我们就要开始真正的数学建模了。记住:工具只是手段,解决问题才是目的。别在工具上花太多时间纠结,够用就行。


公众号:蓝海资料掘金营,微信deep3321