您无需成为 Python 开发人员即可开始使用 Python 生态系统进行机器学习。
作为一名已经掌握一种或多种编程语言的开发人员,您能够非常快速地学习一门新语言,例如 Python。您只需要了解该语言的一些特性,就可以将您已经掌握的知识转移到新语言中。
在这篇文章中,您将获得 Python 以及机器学习所需的 NumPy、MatPlotLib 和 Pandas 等核心库的速成课程。
这将是足够的信息,可以帮助您阅读和理解用于机器学习的 Python 代码示例,并开始开发自己的脚本。如果您已经对 Python 有所了解,那么这篇文章将是对您的友好提醒。
通过我的新书《使用 Python 掌握机器学习》启动您的项目,其中包含分步教程和所有示例的 Python 源代码文件。
让我们开始吧。
- 2017 年 3 月更新:所有打印语句都已更新,以支持 Python 2 和 Python 3。

面向机器学习开发者的 Python 速成课程
图片由John Clouston提供,保留部分权利。
Python 编程速成班
开始学习 Python 时,您需要了解一些关于语言语法的关键细节,以便能够阅读和理解 Python 代码。这包括:
- 赋值
- 流程控制
- 数据结构
- 函数
我们将依次介绍这些主题,并提供您可以输入和运行的小型独立示例。
请记住,在 Python 中,空格是有意义的。
需要 Python 机器学习方面的帮助吗?
参加我为期 2 周的免费电子邮件课程,探索数据准备、算法等等(附带代码)。
立即点击注册,还将免费获得本课程的 PDF 电子书版本。
赋值
作为一名程序员,赋值和类型对您来说应该不陌生。
字符串
1 2 3 4 5 |
# 字符串 data = 'hello world' print(data[0]) print(len(data)) print(data) |
运行示例将打印
1 2 3 |
h 11 hello world |
数字
1 2 3 4 5 |
# 数字 value = 123.1 print(value) value = 10 print(value) |
运行示例将打印
1 2 |
123.1 10 |
布尔值
1 2 3 4 |
# 布尔值 a = True b = False print(a, b) |
运行示例将打印
1 |
(True, False) |
多重赋值
1 2 3 |
# 多重赋值 a, b, c = 1, 2, 3 print(a, b, c) |
运行示例将打印
1 |
(1, 2, 3) |
无值
1 2 3 |
# 无值 a = None print(a) |
运行示例将打印
1 |
无 |
流程控制
您需要学习三种主要的流程控制类型:If-Then-Else 条件语句、For 循环和 While 循环。
If-Then-Else 条件示例
1 2 3 4 5 6 7 |
value = 99 if value >= 99: print('That is fast') elif value > 200: print('That is too fast') else: print('That that is safe') |
运行此示例将打印
1 |
That is fast |
For 循环示例
1 2 3 |
# For 循环 for i in range(10): print(i) |
运行此示例将打印
1 2 3 4 5 6 7 8 9 10 |
0 1 2 3 4 5 6 7 8 9 |
While 循环示例
1 2 3 4 5 |
# While 循环 i = 0 while i < 10: print(i) i += 1 |
运行此示例将打印
1 2 3 4 5 6 7 8 9 10 |
0 1 2 3 4 5 6 7 8 9 |
数据结构
Python 中有三种最常用和最有用的数据结构。它们是元组、列表和字典。
元组示例
元组是只读的项目集合。
1 2 |
a = (1, 2, 3) print(a) |
运行示例将打印
1 |
(1, 2, 3) |
列表示例
列表使用方括号表示法,可以使用数组表示法进行索引。
1 2 3 4 5 6 |
mylist = [1, 2, 3] print("第零个值: %d" % mylist[0]) mylist.append(4) print("列表长度: %d" % len(mylist)) for value in mylist: print(value) |
运行示例将打印
1 2 3 4 5 6 |
第零个值: 1 列表长度: 4 1 2 3 4 |
字典示例
字典是将名称映射到值的,就像一张地图。请注意花括号的用法。
1 2 3 4 5 6 7 8 |
mydict = {'a': 1, 'b': 2, 'c': 3} print("A 值: %d" % mydict['a']) mydict['a'] = 11 print("A 值: %d" % mydict['a']) print("键: %s" % mydict.keys()) print("值: %s" % mydict.values()) for key in mydict.keys(): print(mydict[key]) |
运行示例将打印
1 2 3 4 5 6 7 |
A 值: 1 A 值: 11 键: ['a', 'c', 'b'] 值: [11, 3, 2] 11 3 2 |
函数
Python 中最大的陷阱是空格。确保缩进代码后有一空行。
下面的示例定义了一个新函数来计算两个值的和,并用两个参数调用该函数。
1 2 3 4 5 6 |
# 求和函数 def mysum(x, y): return x + y # 测试求和函数 print(mysum(1, 3)) |
运行示例将打印
1 |
4 |
NumPy 速成课程
NumPy 为 SciPy 提供了基础数据结构和操作。这些是数组 (ndarray),它们定义和操作效率很高。
创建数组
1 2 3 4 5 6 |
# 定义一个数组 import numpy mylist = [1, 2, 3] myarray = numpy.array(mylist) print(myarray) print(myarray.shape) |
运行示例将打印
1 2 |
[1 2 3] (3,) |
访问数据
数组表示法和范围可用于高效访问 NumPy 数组中的数据。
1 2 3 4 5 6 7 8 9 10 |
# 访问值 import numpy mylist = [[1, 2, 3], [3, 4, 5]] myarray = numpy.array(mylist) print(myarray) print(myarray.shape) print("第一行: %s" % myarray[0]) print("最后一行: %s" % myarray[-1]) print("特定行和列: %s" % myarray[0, 2]) print("整列: %s" % myarray[:, 2]) |
运行示例将打印
1 2 3 4 5 6 7 |
[[1 2 3] [3 4 5]] (2, 3) 第一行: [1 2 3] 最后一行: [3 4 5] 特定行和列: 3 整列: [3 5] |
算术运算
NumPy 数组可以直接用于算术运算。
1 2 3 4 5 6 |
# 算术运算 import numpy myarray1 = numpy.array([2, 2, 2]) myarray2 = numpy.array([3, 3, 3]) print("加法: %s" % (myarray1 + myarray2)) print("乘法: %s" % (myarray1 * myarray2)) |
运行示例将打印
1 2 |
加法: [5 5 5] 乘法: [6 6 6] |
NumPy 数组还有很多内容,但这些示例让您大致了解了它们在处理大量数值数据时提供的效率。
Matplotlib 速成课程
Matplotlib 可用于创建绘图和图表。
该库通常按以下方式使用:
- 调用绘图函数并传入一些数据(例如 plot())。
- 调用许多函数来设置绘图的属性(例如标签和颜色)。
- 使绘图可见(例如 show())。
折线图
下面的例子从一维数据创建了一个简单的折线图。
1 2 3 4 5 6 7 8 |
# 基本折线图 import matplotlib.pyplot as plt import numpy myarray = numpy.array([1, 2, 3]) plt.plot(myarray) plt.xlabel('某个 x 轴') plt.ylabel('某个 y 轴') plt.show() |
运行该示例将生成

Matplotlib 中的简单折线图
散点图
以下是根据二维数据创建散点图的简单示例。
1 2 3 4 5 6 7 8 9 |
# 基本散点图 import matplotlib.pyplot as plt import numpy x = numpy.array([1, 2, 3]) y = numpy.array([2, 4, 6]) plt.scatter(x,y) plt.xlabel('某个 x 轴') plt.ylabel('某个 y 轴') plt.show() |
运行该示例将生成

Matplotlib 中的简单散点图
还有更多绘图类型和更多可以在绘图上设置的属性来配置它。
Pandas 速成课程
Pandas 提供了数据结构和功能,可以快速操作和分析数据。理解 Pandas 用于机器学习的关键是理解 Series 和 DataFrame 数据结构。
Series
Series 是一个一维数组,其行和列可以带标签。
1 2 3 4 5 6 7 |
# Series import numpy import pandas myarray = numpy.array([1, 2, 3]) rownames = ['a', 'b', 'c'] myseries = pandas.Series(myarray, index=rownames) print(myseries) |
运行示例将打印
1 2 3 |
a 1 b 2 c 3 |
您可以像 NumPy 数组一样访问 Series 中的数据,也可以像字典一样访问,例如:
1 2 |
print(myseries[0]) print(myseries['a']) |
运行示例将打印
1 2 |
1 1 |
DataFrame
DataFrame 是一个多维数组,其中行和列都可以带标签。
1 2 3 4 5 6 7 8 |
# 数据帧 import numpy import pandas myarray = numpy.array([[1, 2, 3], [4, 5, 6]]) rownames = ['a', 'b'] colnames = ['one', 'two', 'three'] mydataframe = pandas.DataFrame(myarray, index=rownames, columns=colnames) print(mydataframe) |
运行示例将打印
1 2 3 |
one two three a 1 2 3 b 4 5 6 |
数据可以使用列名进行索引。
1 2 |
print("第一列: %s" % mydataframe['one']) print("第一列: %s" % mydataframe.one) |
运行示例将打印
1 2 3 4 5 |
第一列: a 1 b 4 第一列: a 1 b 4 |
总结
您在这篇文章中涵盖了许多内容。您了解了 Python 的基本语法和用法,以及用于机器学习的四个关键 Python 库
- NumPy
- Matplotlib
- Pandas
您现在掌握了足够的语法和用法信息,可以阅读和理解用于机器学习的 Python 代码,并开始创建自己的脚本。
您对本文中的示例有任何疑问吗?请在评论中提出您的问题,我将尽力回答。
我猜最后一个示例的输出有误,正确的输出应该是这样的:
one column: a 1
b 4
Name: one, dtype: int64
one column: a 1
b 4
Name: one, dtype: int64
你说得对,已修复。我为了可读性对其进行了编辑并打断了输出。抱歉。
嗨 Jason,在第一个字符串示例中,打印 data[0] 应该是 "h",而不是 4。
谢谢 Surya。
很棒的文章!快速修复一下,if-else-if 有点奇怪,“That is too fast”永远不会打印。
谢谢。
如何在不执行代码的情况下进入下一行?
>>> value = 99
>>> if value >= 99
... print ('That is fast')
File “”, line 2
print ('That is fast')
^
IndentationError: 期望一个缩进块
>>>
听起来您需要正确缩进 Python 代码。
这可能会帮助您正确复制带缩进的代码
https://machinelearning.org.cn/faq/single-faq/how-do-i-copy-code-from-a-tutorial
实际上我就是这样做的,但我认为输入代码比仅仅复制代码能让我更好地理解它(你觉得呢?)
所以我决定输入它们,但我不知道如何在不运行代码的情况下进入下一行
听起来不错。
将代码输入文本文件。然后从命令行将文本文件作为脚本运行,更多帮助在这里
https://machinelearning.org.cn/faq/single-faq/how-do-i-run-a-script-from-the-command-line
非常感谢,解释很清楚
谢谢。
嗨,Jason!
写信只是想说您在字符串的“运行示例打印”中犯了一个小错误,第一个输出应该是“h”而不是“4”。
谢谢,已修正。
对 Python、NumPy、Matplotlib 和 Pandas 的一个非常棒(且快速)的介绍。现在正在看你的书 🙂
谢谢 Clint。
非常感谢 Jason 😉
不客气。
嗨,Jason,
在“IF-Then-Else 条件示例”中,我期望通过将值更改为 300,代码应该打印“That is too fast”。但是,输出是“That is fast”。您能解释一下吗?
# 输出
That is fast
第一个条件首先执行并通过。
您可以重新排列 if 语句或使用 switch/case 语句。
这应该可以。
干得好!
粘贴时缩进不知何故丢失了
我帮你修复了。通过添加 PRE 标签。