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

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

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

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

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

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

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

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

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

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


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

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

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

验证安装

在终端中输入:

python --version 

应显示 Python 3.9+。

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

jupyter notebook 

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

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

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

为什么需要 NumPy?

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

  1. 速度慢:每个元素都是 Python 对象,内存开销大;
  2. 不支持向量化运算:无法直接对整个数组做加减乘除。

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))# 2x3 全1矩阵# 创建等差数列 linspace = np.linspace(0,10,5)# [0. 2.5 5. 7.5 10.]# 创建随机数组 rand = np.random.rand(3,2)# 3x2,值在[0,1)之间

2. 数组属性与形状操作

arr = np.array([[1,2,3],[4,5,6]])print("形状:", arr.shape)# (2, 3)print("维度:", arr.ndim)# 2print("元素总数:", arr.size)# 6print("数据类型:", 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.0print("标准差:", np.std(arr))# 1.414...print("最大值:", np.max(arr))# 5print("索引最大值:", np.argmax(arr))# 4print("求和:", np.sum(arr))# 15
💡 这些函数将贯穿你未来的模型评估、特征工程等环节。

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

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

核心数据结构

结构维度类比
Series1D带标签的一列数据(如 Excel 的一列)
DataFrame2D表格(如 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 ... 
🔍 注意:ageembarked 有缺失值(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()
关键洞察:
  1. 头等舱(pclass=1)生存率最高
  2. 结伴旅行者生存率更高
  3. 儿童(<10岁)生存率明显提升
  4. 高票价乘客更可能生存(可能与舱位相关)。
🎯 这些洞察可直接用于后续的机器学习建模——例如,pclassis_aloneage 都是强预测特征。

七、常见陷阱与最佳实践

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 可视化发现规律。

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

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

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


行动建议

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

Read more

Vscode中配置Claude code的git bash链接问题

解决VS Code中Claude Code的Git Bash链接问题 问题描述 在VS Code中使用Claude Code时出现错误提示: Error: Claude Code on Windows requires git-bash (https://git-scm.com/downloads/win). 确定git已经安装成果,且按照官方建议设置环境变量CLAUDE_CODE_GIT_BASH_PATH仍无效。 解决方案 删除特定环境变量 在Windows环境变量的用户变量部分,检查并删除CLAUDE_CODE_GIT_BASH_PATH变量(如果存在)。 将Git CMD添加到PATH 编辑用户变量中的Path,添加Git的cmd文件夹路径: * 用户级安装路径:%USERPROFILE%\AppData\Local\Programs\Git\cmd * 全局安装路径:C:\Program Files\

By Ne0inhk
干掉 Claude Code,这个开源 AI 编程工具杀疯了?

干掉 Claude Code,这个开源 AI 编程工具杀疯了?

大家好,我是程序员鱼皮。 Claude Code 一直是大家公认的 AI 编程命令行工具 Top 1,在 AI 和程序员圈子里几乎是神一般的存在。 但是,这狗玩意儿对中国用户可不太友好…… 首先,如果你想要使用 Claude Code,就必须要有特殊的网络 + 官方账号,否则就会看到一片红。 此外,2025 年 9 月,Anthropic 公司不知道抽什么风,突然宣布 全面禁止中国控股企业使用 Claude 服务,不仅包括中国大陆企业,连海外中资控股超过 50% 的公司都在封禁范围内! 甚至 Anthropic 还特别点名了中国,把咱们称为 敌对国家! 天下苦 Claude Code 久矣! 但是最近我身边很多程序员朋友开始从 Claude Code 转向了另一个工具,正是突然大火的开源项目

By Ne0inhk
Git 配置 SSH 密钥与私钥教程(跨平台完整指南)

Git 配置 SSH 密钥与私钥教程(跨平台完整指南)

前言 在使用 Git 进行版本控制时,SSH 是一种安全、高效的认证方式。通过配置 SSH 密钥对(公钥和私钥),我们可以免去每次操作远程仓库时输入用户名和密码的麻烦。 本文将详细介绍如何生成 SSH 密钥对,并将其配置到 Git 和 GitHub(或其他平台)中。内容涵盖 macOS、Windows 和 Linux 三大主流操作系统平台,帮助你完成完整的 SSH 密钥配置流程。 目录 1. 一、检查是否已有 SSH 密钥 2. 二、生成新的 SSH 密钥对 * macOS * Windows * Linux 3. 三、将公钥添加到 Git 平台(如

By Ne0inhk
BeyondCompare安装(永久免费使用+全网最详细版)

BeyondCompare安装(永久免费使用+全网最详细版)

一.下载: * 阿里云盘(不限速) https://www.alipan.com/s/WaG1z54BQ2U 官网下载(速度较慢): https://www.scootersoftware.com/download.php 二.安装(无脑下一步即可) 三.永久免费使用: 1. 在搜索栏中输入 regedit ,打开注册表 2. 删除项目:计算机 \HKEY_CURRENT_USER\Software\ScooterSoftware\Beyond Compare 4\CacheId 修改注册表 四.每周自动删掉CacheId: 1.创建删除CacheId脚本,命名为freshBeyondcompare4.bat(注意:这里不要放在有中文路径的文件夹下) ```python # 内容如下:

By Ne0inhk