欢迎光临
我们一直在努力

Python 与数据科学工具链入门:NumPy、Pandas、Matplotlib 快速上手

Python 与数据科学工具链入门:NumPy、Pandas、Matplotlib 快速上手

“工欲善其事,必先利其器。” ——在机器学习的世界里,你的“器”就是 Python 数据科学工具链。


一、为什么工具链如此重要?

想象你要做一道菜。即使你背熟了所有食谱,如果厨房里只有生锈的刀、没校准的秤、漏底的锅,你依然做不出好菜。

机器学习也是如此。 算法是“菜谱”,而 NumPy、Pandas、Matplotlib 就是你的“刀、秤、锅”——它们构成了现代数据科学工作的基础设施。

很多初学者一上来就急着学“神经网络”“梯度提升”,却连如何读取一个 CSV 文件都磕磕绊绊。结果是:想法很丰满,代码跑不动。

本篇文章的目标很明确: ✅ 让你在 2 小时内掌握三大核心库的基础用法; ✅ 能独立完成 数据加载 → 清洗 → 探索 → 可视化 的完整流程; ✅ 为后续所有机器学习项目打下坚实工具基础。

不需要你成为专家,但要让你不再被工具卡住。


二、环境准备:5 分钟搭建你的“数据厨房”

推荐方式:使用 Anaconda(最省心)

  • 访问 https://www.anaconda.com/products/distribution
  • 下载对应你操作系统的安装包(Windows / macOS / Linux)
  • 安装时勾选 “Add to PATH”(Windows 用户注意)
  • 安装完成后,打开 Anaconda Prompt(Windows)或终端(macOS/Linux)
  • 💡 Anaconda 自带 Python、NumPy、Pandas、Matplotlib、Jupyter 等几乎所有你需要的库,避免依赖冲突。

    验证安装

    在终端中输入:

    python –version

    应显示 Python 3.9+。

    然后启动 Jupyter Notebook(推荐交互式开发环境):

    jupyter notebook

    浏览器会自动打开一个文件管理界面——这就是你的“数据实验室”。

    🔧 替代方案:如果你已用 pip 管理 Python,可手动安装:

    pip install numpy pandas matplotlib jupyter


    三、NumPy:高效数值计算的基石

    为什么需要 NumPy?

    Python 原生的 list 虽然灵活,但在科学计算中存在两大问题:

  • 速度慢:每个元素都是 Python 对象,内存开销大;
  • 不支持向量化运算:无法直接对整个数组做加减乘除。
  • 而 NumPy(Numerical Python) 提供了:

    • ndarray:高效的多维数组对象;
    • 广播机制(Broadcasting):自动对不同形状的数组进行运算;
    • C 语言底层实现:比纯 Python 快 10–100 倍。

    📌 记住:几乎所有数据科学库(Pandas、scikit-learn、TensorFlow)都基于 NumPy 构建。

    1. 创建数组

    import numpy as np

    # 从列表创建
    arr = np.array([1, 2, 3, 4])
    print(arr) # [1 2 3 4]

    # 创建全零/全一数组
    zeros = np.zeros(5) # [0. 0. 0. 0. 0.]
    ones = np.ones((2, 3)) # 2×3 全1矩阵

    # 创建等差数列
    linspace = np.linspace(0, 10, 5) # [0. 2.5 5. 7.5 10.]

    # 创建随机数组
    rand = np.random.rand(3, 2) # 3×2,值在[0,1)之间

    2. 数组属性与形状操作

    arr = np.array([[1, 2, 3], [4, 5, 6]])

    print("形状:", arr.shape) # (2, 3)
    print("维度:", arr.ndim) # 2
    print("元素总数:", arr.size) # 6
    print("数据类型:", arr.dtype) # int64

    # 改变形状(不改变数据)
    reshaped = arr.reshape(3, 2)
    print(reshaped)
    # [[1 2]
    # [3 4]
    # [5 6]]

    # 展平为一维
    flat = arr.flatten() # [1 2 3 4 5 6]

    3. 向量化运算(无需 for 循环!)

    a = np.array([1, 2, 3])
    b = np.array([4, 5, 6])

    # 元素级加法
    print(a + b) # [5 7 9]

    # 元素级乘法
    print(a * b) # [4 10 18]

    # 平方
    print(a ** 2) # [1 4 9]

    # 三角函数
    print(np.sin(a)) # [0.8415 0.9093 0.1411]

    # 条件筛选
    print(a[a > 1]) # [2 3]

    ✅ 关键优势:这些操作在 C 层面并行执行,速度极快。

    4. 常用数学函数

    arr = np.array([1, 2, 3, 4, 5])

    print("均值:", np.mean(arr)) # 3.0
    print("标准差:", np.std(arr)) # 1.414…
    print("最大值:", np.max(arr)) # 5
    print("索引最大值:", np.argmax(arr)) # 4
    print("求和:", np.sum(arr)) # 15

    💡 这些函数将贯穿你未来的模型评估、特征工程等环节。


    四、Pandas:让数据处理像 Excel 一样直观

    如果说 NumPy 是“引擎”,那么 Pandas 就是“驾驶舱”——它提供了更贴近人类思维的数据结构。

    核心数据结构

    结构维度类比
    Series 1D 带标签的一列数据(如 Excel 的一列)
    DataFrame 2D 表格(如 Excel 工作表)

    1. 创建 DataFrame

    import pandas as pd

    # 从字典创建
    data = {
    'name': ['Alice', 'Bob', 'Charlie'],
    'age': [25, 30, 35],
    'city': ['NYC', 'LA', 'Chicago']
    }
    df = pd.DataFrame(data)
    print(df)

    输出:

    name age city
    0 Alice 25 NYC
    1 Bob 30 LA
    2 Charlie 35 Chicago

    2. 读取真实数据(CSV/Excel)

    我们将使用经典的 泰坦尼克号乘客数据集(titanic.csv),可从 Kaggle 下载,或使用 seaborn 内置版本:

    # 方法1:从 seaborn 加载(推荐初学者)
    import seaborn as sns
    titanic = sns.load_dataset('titanic')

    # 方法2:从本地 CSV 读取
    # titanic = pd.read_csv('titanic.csv')

    print("前5行:")
    print(titanic.head())

    print("\\n基本信息:")
    print(titanic.info())

    典型输出:

    <class 'pandas.core.frame.DataFrame'>
    RangeIndex: 891 entries, 0 to 890
    Data columns (total 15 columns):
    # Column Non-Null Count Dtype
    — —— ————– —–
    0 survived 891 non-null int64
    1 pclass 891 non-null int64
    2 sex 891 non-null object
    3 age 714 non-null float64
    4 sibsp 891 non-null int64
    5 parch 891 non-null int64
    6 fare 891 non-null float64
    7 embarked 889 non-null object

    🔍 注意:age 和 embarked 有缺失值(Non-Null Count < 891)——这是真实数据的常态!

    3. 基础探索:了解你的数据

    # 查看维度
    print("形状:", titanic.shape) # (891, 15)

    # 统计摘要(仅数值列)
    print(titanic.describe())

    # 查看分类变量分布
    print(titanic['sex'].value_counts())
    # male 577
    # female 314

    # 检查缺失值
    print(titanic.isnull().sum())
    # age 177
    # embarked 2
    # deck 688 ← 大量缺失,可能需删除

    4. 数据筛选与索引

    # 单列(返回 Series)
    ages = titanic['age']

    # 多列(返回 DataFrame)
    subset = titanic[['name', 'age', 'fare']]

    # 条件筛选
    survived_females = titanic[(titanic['survived'] == 1) & (titanic['sex'] == 'female')]

    # 使用 .loc(基于标签)
    first_row = titanic.loc[0, ['name', 'age']]

    # 使用 .iloc(基于位置)
    first_three = titanic.iloc[:3, :5] # 前3行,前5列

    ⚠️ 注意:& 代替 and,| 代替 or,且条件要用括号包围。

    5. 处理缺失值(数据清洗第一步)

    # 方案1:删除含缺失的行(谨慎使用!)
    titanic_clean1 = titanic.dropna()

    # 方案2:用均值填充年龄
    titanic['age'].fillna(titanic['age'].mean(), inplace=True)

    # 方案3:用众数填充登船港口
    mode_embarked = titanic['embarked'].mode()[0]
    titanic['embarked'].fillna(mode_embarked, inplace=True)

    # 验证
    print(titanic[['age', 'embarked']].isnull().sum()) # 应为 0

    ✅ 最佳实践:记录你做了什么处理,因为这直接影响模型效果。

    6. 特征工程初探(为 ML 做准备)

    # 创建新特征:家庭规模 = 兄弟姐妹 + 父母子女 + 自己
    titanic['family_size'] = titanic['sibsp'] + titanic['parch'] + 1

    # 分箱:将年龄分为儿童/成人/老人
    titanic['age_group'] = pd.cut(
    titanic['age'],
    bins=[0, 18, 65, 100],
    labels=['Child', 'Adult', 'Senior']
    )

    # 编码分类变量(字符串 → 数字)
    titanic['sex_encoded'] = titanic['sex'].map({'male': 0, 'female': 1})

    # 查看结果
    print(titanic[['age', 'age_group', 'sex', 'sex_encoded']].head())

    🌟 这些操作正是后续机器学习中“特征工程”的核心内容。


    五、Matplotlib 与 Seaborn:用图表讲好数据故事

    “一图胜千言”——在数据科学中,可视化是理解、沟通、发现的关键。

    1. Matplotlib:基础绘图库

    import matplotlib.pyplot as plt

    # 设置中文字体(避免乱码)
    plt.rcParams['font.sans-serif'] = ['SimHei'] # Windows
    # plt.rcParams['font.family'] = 'Arial Unicode MS' # macOS

    # 示例1:直方图(年龄分布)
    plt.figure(figsize=(8, 5))
    plt.hist(titanic['age'], bins=20, color='skyblue', edgecolor='black')
    plt.title('泰坦尼克号乘客年龄分布')
    plt.xlabel('年龄')
    plt.ylabel('人数')
    plt.grid(axis='y', linestyle='–', alpha=0.7)
    plt.show()

    2. Seaborn:统计可视化利器(基于 Matplotlib)

    Seaborn 提供更高层次的接口,一行代码即可生成精美图表。

    import seaborn as sns

    # 示例2:生存率 vs 性别(柱状图)
    plt.figure(figsize=(6, 4))
    sns.barplot(x='sex', y='survived', data=titanic)
    plt.title('不同性别的生存率')
    plt.ylabel('生存概率')
    plt.show()

    输出将清晰显示:女性生存率远高于男性(约 74% vs 19%)。

    3. 散点图:探索变量关系

    # 年龄 vs 票价,颜色表示是否生存
    plt.figure(figsize=(8, 6))
    sns.scatterplot(
    x='age', y='fare',
    hue='survived',
    data=titanic,
    alpha=0.7
    )
    plt.title('年龄与票价的关系(按生存状态着色)')
    plt.show()

    4. 热力图:查看相关性

    # 选择数值列
    numeric_cols = titanic.select_dtypes(include=['number']).columns
    corr_matrix = titanic[numeric_cols].corr()

    # 绘制热力图
    plt.figure(figsize=(10, 8))
    sns.heatmap(corr_matrix, annot=True, cmap='coolwarm', center=0)
    plt.title('数值特征相关性热力图')
    plt.show()

    🔍 你会发现 pclass(舱位等级)与 fare(票价)高度负相关(-0.55)——头等舱票价高,等级数字小(1=头等)。


    六、端到端实战:从原始数据到洞察

    现在,我们将整合三大工具,完成一个微型分析项目。

    目标:分析泰坦尼克号乘客的生存影响因素

    步骤1:加载与清洗

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

    # 加载数据
    df = sns.load_dataset('titanic')

    # 基础清洗
    df['age'].fillna(df['age'].median(), inplace=True)
    df.drop(columns=['deck', 'embark_town'], inplace=True) # 删除高缺失列
    df.dropna(subset=['embarked'], inplace=True)

    步骤2:创建新特征

    df['family_size'] = df['sibsp'] + df['parch'] + 1
    df['is_alone'] = (df['family_size'] == 1).astype(int)

    步骤3:可视化关键发现

    fig, axes = plt.subplots(2, 2, figsize=(14, 10))

    # 1. 舱位等级 vs 生存率
    sns.barplot(x='pclass', y='survived', data=df, ax=axes[0,0])
    axes[0,0].set_title('舱位等级与生存率')

    # 2. 是否独自旅行 vs 生存率
    sns.barplot(x='is_alone', y='survived', data=df, ax=axes[0,1])
    axes[0,1].set_title('独自旅行与生存率')
    axes[0,1].set_xticklabels(['否', '是'])

    # 3. 年龄分布(按生存状态)
    df[df['survived']==1]['age'].hist(alpha=0.7, label='生存', ax=axes[1,0])
    df[df['survived']==0]['age'].hist(alpha=0.7, label='遇难', ax=axes[1,0])
    axes[1,0].set_title('年龄分布对比')
    axes[1,0].legend()

    # 4. 票价分布(对数尺度)
    df.boxplot(column='fare', by='survived', ax=axes[1,1])
    axes[1,1].set_yscale('log')
    axes[1,1].set_title('票价分布(对数尺度)')

    plt.tight_layout()
    plt.show()

    关键洞察:
  • 头等舱(pclass=1)生存率最高;
  • 结伴旅行者生存率更高;
  • 儿童(<10岁)生存率明显提升;
  • 高票价乘客更可能生存(可能与舱位相关)。
  • 🎯 这些洞察可直接用于后续的机器学习建模——例如,pclass、is_alone、age 都是强预测特征。


    七、常见陷阱与最佳实践

    1. 不要滥用 inplace=True

    虽然 df.dropna(inplace=True) 看似方便,但它会直接修改原数据,难以回溯。建议:

    df_clean = df.dropna() # 显式创建新对象

    2. 避免链式索引(Chained Indexing)

    错误写法:

    df[df['age'] > 30]['fare'] = 100 # 可能报 SettingWithCopyWarning

    正确写法:

    df.loc[df['age'] > 30, 'fare'] = 100

    3. 可视化前先检查数据分布

    • 对长尾分布(如票价)使用对数尺度;
    • 对分类变量确保类别不多(否则图表混乱);
    • 添加标题、坐标轴标签、图例——否则别人看不懂。

    4. 保持代码可复现

    • 设置随机种子:np.random.seed(42)
    • 记录 Pandas/NumPy 版本(不同版本行为可能不同)

    八、下一步:为机器学习做准备

    通过本文,你已经掌握了:

    • 用 NumPy 高效处理数值;
    • 用 Pandas 清洗、转换、探索表格数据;
    • 用 Matplotlib/Seaborn 可视化发现规律。

    接下来,在第三篇文章中,我们将深入探讨:

    • 数据质量的五大维度(完整性、一致性、准确性等);
    • 更高级的缺失值处理策略(插值、模型预测填充);
    • 异常值检测与处理;
    • 特征缩放(标准化、归一化)的必要性。

    这些内容将直接决定你未来模型的上限。


    行动建议

  • 动手运行本文所有代码,不要只看;
  • 尝试用 Pandas 分析你自己的数据(如运动记录、账单、课程成绩);
  • 在 Kaggle 上下载一个新数据集(如 House Prices),重复本文流程;
  • 把你的 Notebook 上传到 GitHub,形成第一个数据作品。
  • 记住:工具的价值不在“知道”,而在“用过”。 你敲下的每一行代码,都在为未来的智能系统铺路。

    赞(0)
    未经允许不得转载:171主机测评 » Python 与数据科学工具链入门:NumPy、Pandas、Matplotlib 快速上手
    分享到: 更多 (0)

    评论 抢沙发

    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址