9.2 Python 包索引(PyPI):更多的扩展模块
正如前面所见,标准 Python 安装版本中带有大量内置功能,其中的模块可以存取文本文件和 CSV 文件、处理文本和数值型数据、计算统计量,还可以实现本书中未曾提及的其他大量强大功能。
但是,本书还使用了一些扩展模块,比如 xlrd、matplotlib、MySQL-python、pandas 和 statsmodels,这些模块提供了 Python 标准库中不具备的功能。实际上,有若干种侧重于数据处理的重要扩展模块,在下载安装之后,它们可以提供一些强大的功能,包括数据可视化、数据操作、统计建模和机器学习。这些扩展模块包括 NumPy、SciPy、Scikit-Learn、 xarray(原来称作 xray)、SKLL、NetworkX、PyMC、NLTK、Cython。
这些模块以及其他扩展模块,都可以从 Python 包索引网站(https://pypi.python.org/pypi)上下载。此外,对于需要区别 32 位系统和 64 位系统的 Windows 用户来说,可以在 Unofficial Windows Binaries for Python Extension Packages 网站(http://www.lfd.uci.edu/~gohlke/pythonlibs/)上找到大量扩展包的 32 位版本和 64 位版本。
9.2.1 NumPy
NumPy(读作“Num Pie”)是一个基础 Python 扩展包,它(主要)为数值型数据提供了一个快速高效的多维数据容器 ndarray。它还提供了向量化版本的数学和统计函数,使你可以不使用 for 循环来操作数组。NumPy 提供的强大功能可以对结构化数据(特别是数值型数据)进行读取、重塑、聚合、切片和切块。
pandas 是基于 NumPy 开发的,与 pandas 一样,NumPy 也封装和简化了很多你在本书中已经学习过的技术。NumPy 是一个基础的扩展包,它提供了强大的 ndarray 数据结构,可以进行向量运算,很多扩展包都是基于 NumPy 开发的。下面看一下 NumPy 中的主要功能。
01. 读写CSV文件和Excel文件
本书在第 2 章中讨论过如何使用内置的 csv 模块来读写 CSV 文件。为了要读取一个 CSV 文件,可以使用 with 语句打开输入文件,使用 filereader 对象读出文件中的所有行。同样,为了写入 CSV 文件,可以使用 with 语句打开输出文件,使用 filewriter 对象写入输出文件。在这两种情况下,都是使用 for 循环在输入文件的所有行中进行迭代,并对行做出相应的处理。
NumPy 将读写 CSV 文件和文本文件的过程简化为 3 个函数:loadtxt、genfromtxt 和 savetxt。默认情况下,loadtxt 函数假设输入文件的数据是浮点数,并由一定数量的空白字符隔开。当然,你可以通过函数中的附加参数修改这些默认值。
02. loadtxt
与第 2 章中读取文件的代码不同,如果你的数据集中没有标题行,而且数据是由空格隔开的浮点数,那么你可以通过下列语句将数据加载到 NumPy 数组,然后直接使用数据:
from numpy import loadtxt my_ndarray = loadtxt('input_file.csv') print(my_ndarray)
然后,你可以像本书之前讨论过的那样,对数据进行各种操作。再看看另一个示例,假设你有一个文件 people.txt,其中包含以下数据:
name age color score clint 32 green 15.6 john 30 blue 22.3 rachel 27 red 31.4
请注意这个数据集中包含一个标题行,而且列中的数据不全是浮点数。在这种情况下,你可以通过 skiprows 参数来跳过标题行,还可以为每列数据指定数据类型:
from numpy import dtype, loadtxt person_dtype = dtype([('name', 'S10'), ('age', int), ('color', 'S6'),\ ('score', float)]) people = loadtxt('people.txt', skiprows=1, dtype=person_dtype) print(people)
通过创建一个结构化数组 person_dtype,可以指定姓名列中的值为最大长度是 10 个字符的字符串,年龄列中的值为整数,颜色列中的值为字符串,分数列中的值为浮点数。
在这个示例中,列是由空格隔开的,如果数据是由逗号隔开的,你可以在 loadtxt 函数中使用 delimiter=',' 来指定列分隔符为逗号。
03. genfromtxt
genfromtxt 函数试图更进一步地简化你的工作量,它甚至可以自动确定列中的数据类型。和 loadtxt 一样,genfromtxt 函数也提供了附加参数,可以方便地将各种类型的文件和数据读取到结构化数组中。
例如,你可以使用 names 参数来指定是否存在标题行,还可以通过 converters 参数对从输入文件中读取的数据进行修改和格式化:
from numpy import genfromtxt name_to_int = dict(rachel=1, john=2, clint=3) color_to_int = dict(blue=1, green=2, red=3) def convert_name(n): return name_to_int.get(n, -999) def convert_color(c): return color_to_int.get(c, -999) data = genfromtxt('people.txt', dtype=float, names=True, \ converters={0:convert_name, 2:convert_color}) print(data)
上面这个示例是想把姓名列和颜色列中的数据从字符串转换为浮点数。示例中对每一列都创建一个字典,为原来的字符串映射出一个数值。同时还定义了两个辅助函数,为每个姓名值和颜色值找出字典中对应的数值,如果姓名和颜色没有出现在字典中,则返回 -999。
在 genfromtxt 函数中,参数 dtype 表示结果数据集中所有的值均为浮点数,参数 names 表示 genfromtxt 应该将第一行作为列标题,参数 converters 设置了一个字典,将列中的值映射到一个函数,这个函数会对列中的值进行转换。
04. 转换为NumPy数组
除了使用 loadtxt 和 genfromtxt,你还可以使用基础 Python 将数据读入一个列表,这个列表中的元素是列表或元组,另外也可以使用 pandas 将数据读入数据框,然后将这些对象转换为 NumPy 数组。
05. CSV文件
例如,假设你有一个 CSV 文件 myCSVInputFile.csv,其中包含以下数据:
2.1,3.2,4.3 3.2,4.3,5.2 4.3,2.6,1.5
你可以使用本书中讨论过的技术将这些数据读入一个列表的列表,然后将列表转换为 NumPy 数组:
import csv from numpy import array file = open('myCSVInputFile.csv', 'r') file_reader = csv.reader(file) data = [] for row_list in file_reader: row_list_floats = [float(value) for value in row_list] data.append(row_list_floats) file.close() data = array(data) print(data)
06. Excel文件
同样,如果你有一个 Excel 文件,可以使用 pandas 的 read_excel 函数将数据读入一个数据框,然后将数据框转换为 NumPy 数组:
from pandas import read_excel from numpy import array myDataFrame = read_excel('myExcelInputFile.xlsx') data = array(myDataFrame) print(data)
07. savetxt
NumPy 提供了 savetxt 函数,可以将数据写入 CSV 文件和其他类型的文本文件。首先,你需要设定输出文件名称,然后再设定要保存到文件中的数据即可:
from numpy import savetxt savetxt('output_file.txt', data)
savetxt 默认使用科学计数形式保存数据。但你不想一直用这种方法,所以可以使用 fmt 参数来设置保存数据的形式。你还可以使用 delimiter 参数来设置列分隔符:
savetxt('output_file.txt', data, fmt='%d') savetxt('output_file.csv', data, fmt='%.2f', delimiter=',')
还有,savetxt 默认不保存标题行。如果你想输出文件中包括标题行,那么可以使用 header 参数提供一个字符串。savetxt 默认在第一个列标题前面加上一个井号(#),以使这一行成为注释。你可以通过将 comments 参数设为空字符串来取消这个设置:
column_headings_list = ['var1', 'var2', 'var3'] header_string = ','.join(column_headings_list) savetxt('output_file.csv', data, fmt='%.2f', delimiter=',', \ comments='', header=header_string)
08. 筛选行
如果你创建了一个 NumPy 结构化数组,那么就可以和 pandas 一样,使用筛选条件筛选出特定的行。例如,假设你创建了一个名为 data 的结构化数组,其中的列有成本、供应商代码、数量和交货时间,你可以使用下面的条件筛选出特定的行:
row_filter1 = (data['Cost'] > 110) & (data['Supplier'] == 3) data[row_filter1] row_filter2 = (data['Quantity'] > 55) | (data['Time to Delivery'] > 30) data[row_filter2]
第一个筛选条件筛选出成本大于 110 并且供应商代码等于 3 的行。同样,第二个筛选条件筛选出数量大于 55 或者交货时间大于 30 的行。
09. 选取特定列
在结构化数组中选取一组特定的列有些难度,因为不同列的数据类型也是不同的。你可以定义一个辅助函数来查看选取出的列,然后根据列的数据类型做出相应的处理:
import numpy as np def columns_view(arr, fields): dtype2 = np.dtype({name:arr.dtype.fields[name] for name in fields}) return np.ndarray(arr.shape, dtype2, arr, 0, arr.strides)
然后你可以使用辅助函数查看从结构化数组中选取出的列。你还可以设置行筛选条件来筛选出特定的行,并同时选取特定的列,这与 pandas 中 ix 函数的用法是一样的:
supplies_view = columns_view(supplies, ['Supplier', 'Cost']) print(supplies_view) row_filter = supplies['Cost'] > 1000 supplies_row_column_filters = columns_view(supplies[row_filter],\ ['Supplier', 'Cost']) print(supplies_total_cost_gt_1000_two_columns)
10. 连接数据
NumPy 使用 concatenate、vstack、r_、hstack 和 c_ 函数来简化多个数组的连接过程。concatenate 函数比其他函数更常用,它使用一个附加参数 axis 将一组数组连接起来,axis 表示数组应该垂直连接(axis=0)还是水平连接(axis=1)。vstack 函数和 r_ 函数专门用来垂直连接数组,hstack 函数和 c_ 函数专门用来水平连接数组。例如,下面是垂直连接数组的 3 种方式:
import numpy as np from numpy import concatenate, vstack, r_ array_concat = np.concatenate([array1, array2], axis=0) array_concat = np.vstack((array1, array2)) array_concat = np.r_[array1, array2]
这 3 个函数会得到同样的结果。在每行代码中,函数中的数组被垂直连接,一个在另一个的上面。如果你将结果赋给一个新的变量,那么就得到了一个更大的新数组,里面包含着两个输入数组中所有的数据。
同样,以下是平行连接数组的 3 种方式:
import numpy as np from numpy import concatenate, hstack, c_ array_concat = np.concatenate([array1, array2], axis=1) array_concat = np.hstack((array1, array2)) array_concat = np.c_[array1, array2]
这 3 个函数也得到了同样的结果。在每行代码中,函数中的数组被平行连接在一起,并排排列。
11. 其他功能
这一节介绍了 NumPy 的一些特点和功能,但是还有更多功能需要学习。NumPy 和基础 Python 的一个重要不同之处是 NumPy 可以进行向量化运算,就是说你可以对整个数组应用一个操作,这个操作会作用于数组中的所有元素,而不需要使用 for 循环。
例如,如果你有两个数组,array1 和 array2,你想把它们按照每个元素加在一起,那么只要简单地使用 array_sum=array1+array2 即可。这个操作会将两个数组中的所有元素分别相加,从而得到一个新的数组,新数组中每个位置上的值就是原来两个数组相同位置上的值的和。而且,向量化运算是使用 C 代码执行的,所以运算速度特别快。
NumPy 的另一个强大功能是可以在数组上执行统计计算。这些统计计算包括 sum、prod、amin、amax、mean、var、std、argmin 和 argmax。sum 和 prod 计算数组中所有值的总和与乘积。amin 和 amax 可以找出数组中的最小值和最大值。mean、var 和 std 计算数组中所有值的均值、方差和标准差。argmin 和 argmax 可以找出数组中最小值和最大值的索引位置。所有这些函数都具有 axis 参数,所以你可以设置 axis 参数,来指定是沿着列进行垂直计算(axis=0),还是沿着行进行水平计算(axis=1)。
要想下载 NumPy,或想了解更多关于 NumPy 的信息,请访问 NumPy 网站(http://www.numpy.org)。
9.2.2 SciPy
SciPy(读作“Sigh Pie”)是另一个 Python 基础扩展包,它提供用于科学计算与统计分析的各种分布和函数,以及数学、科研和工程方面的检验。SciPy 具有广泛的适用范围,它的功能分布在各种子扩展包内。重要的子扩展包如下。
· cluster
提供聚集算法
· constants
提供物理和数学常数
· interpolate
提供用于插值和平滑样条的函数
· io
提供输入 / 输出函数
· linalg
提供线性代数运算
· sparse
提供稀疏矩阵运算
· spatial
提供空间数据结构和算法
· stats
提供统计分布与函数
· weave
提供 C/C++ 集成
从上面的列表中可以看出,SciPy 的子扩展包提供了非常丰富的操作和计算功能。例如,linalg 扩展包提供了在二维数组上进行快速线性代数运算的功能;interpolate 扩展包提供了在两点之间进行线性插值和曲线插值的功能;stats 扩展包提供了使用随机变量、计算并检验描述性统计量和回归分析的功能。
SciPy 是一个基础扩展包,除了提供丰富实用的数学和统计功能之外,它还是很多其他扩展包的基础,下面来看一下 SciPy 中的重要功能。
01. linalg
linalg 扩展包提供了所有基本线性代数运算的函数,包括矩阵求逆、求行列式、计算范数。它还包括了进行矩阵分解的函数,以及指数函数、对数函数和三角函数。另外,还有其他一些有用的函数可以快速求解线性方程组和线性最小二乘问题。
线性方程组。SciPy 提供了 linalg.solve 函数来计算线性方程组的解向量。假设我们想要求解以下的线性联立方程组:
· x + 2y +3z = 3
· 2x + 3y + z = -10
· 5x - y +2z = 14
可以使用一个系数矩阵、一个未知数向量和一个右侧向量来表示这个方程组。linalg.solve 函数使用系数矩阵和右侧向量可以求出未知数(就是 x、y 和 z):
from numpy import array from scipy import linalg A = array([[1,2,3], [2,3,1], [5,-1,2]]) b = array([[3], [-10], [14]]) solution = linalg.solve(A, b) print(solution)
方程组中 x、y 和 z 的值分别是:0.1667、-4.8333 和 4.1667。
最小二乘回归。SciPy 提供了 linalg.lstsq 函数来计算线性最小二乘问题的解向量。在计量经济学中会经常见到使用矩阵表示的最小二乘估计模型,如下所示:
· y = Xb + e
这里的 y 是一个表示因变量的向量,X 是自变量的系数矩阵,b 是要进行估计的解向量,e 是从数据中计算出的残差向量。linalg.lstsq 函数使用系数矩阵 X 和因变量 y 求解出解向量 b:
import numpy as np from scipy import linalg c1, c2 = 6.0, 3.0 i = np.r_[1:21] xi = 0.1*i yi = c1*np.exp(-xi) + c2*xi zi = yi + 0.05 * np.max(yi) * np.random.randn(len(yi)) A = np.c_[np.exp(-xi)[:, np.newaxis], xi[:, np.newaxis]] c, resid, rank, sigma = linalg.lstsq(A, zi) print(c)
这里的 c1、c2、i 和 xi 仅用来构造因变量的初始形式 yi。下一行代码中构造的 zi 才是真正的因变量,它向 yi 中加入了一些随机扰动。lstsq 函数的返回值包括 c、残差(resid)、 rank 和 sigma。c 中的两个值就是最小二乘问题的解,为 5.92 和 3.07。
02. interpolate
interpolate 扩展包提供了在已知数据点之间进行线性插值和曲线插值的功能。用于单变量数据的函数是 interp1d,用于多变量数据的函数是 griddata。这个扩展包还提供了样条插值函数和径向基函数,可以用来对数据进行平滑和插值。inter1d 函数接受两个数组为参数,返回一个函数对象,这个函数使用插值法找出新数据点的值:
from numpy import arange, exp from scipy import interpolate import matplotlib.pyplot as plt x = arange(0, 20) y = exp(-x/4.5) interpolation_function = interpolate.interp1d(x, y) new_x = arange(0, 19, 0.1) new_y = interpolation_function(new_x) plt.plot(x, y, 'o', new_x, new_y, '-') plt.show()
在代码生成的图中,20 个蓝色圆点为初始数据点。在初始数据点之间,绿色直线连接着的新数据点就是插值。因为我没有在 interp1d 函数中设置 kind 参数,所以函数使用默认的线性插值法来计算插值。不过,你可以指定 quadratic、cubic 或另外的字符串或整数作为函数应该使用的插值方法。
03. stats
stats 扩展包提供的功能包括按照特定的分布求值、计算描述性统计量、统计检验、回归分析等。这个扩展包提供了超过 80 个连续随机变量和 10 个离散随机变量。它既可以进行单样本分析检验,也可以进行双样本比较检验。扩展包中还有进行核密度估计的函数,或通过一组数据对一个随机变量的概率密度函数进行估计。
描述型统计量。stats 扩展包提供了一些计算描述型统计量的函数:
from scipy.stats import norm, describe x = norm.rvs(loc=5, scale=2, size=1000) print(x.mean()) print(x.min()) print(x.max()) print(x.var()) print(x.std()) x_nobs, (x_min, x_max), x_mean, x_variance, x_skewness, x_kurtosis = describe(x) print(x_nobs)
这个示例创建了一个数组 x,从一个均值为 5 标准差为 2 的正态分布中提取出 1000 个值。函数 mean、min、max、var 和 std 分别计算出 x 的均值、最小值、最大值、方差和标准差。同样,describe 函数可以返回 x 中的观测数量、最小值和最大值、均值和方差、以及偏斜度和峰度。
线性回归。stats 扩展包简化了在线性回归中估计斜率和截距的过程。除了斜率和截距,linregress 函数还可以返回相关系数、原假设(斜率为 0)的双侧 p 值,以及估计的标准差:
from numpy.random import random from scipy import stats x = random(20) y = random(20) slope, intercept, r_value, p_value, std_err = stats.linregress(x, y) print("R-squared:", round(r_value**2, 4))
在这个示例中,pring 语句打印出相关系数的平方,以显示 R 方的值。
以上示例相对于 SciPy 中所有子包和函数来说,只是冰山之一角。要想下载或了解更多关于 SciPy 的信息,请访问 SciPy 网站(http://docs.scipy.org/doc/scipy/reference)。
9.2.3 Scikit-Learn
Scikit-Learn 扩展包提供了估计机器学习统计模型的功能,包括回归、分类和聚集模型,还有数据处理、数据降维和模型选择等功能。Scikit-Learn 既可以处理监督式学习模型,也可以处理无监督式学习模型。监督式模型中带有因变量值或类标号,无监督式模型中则没有因变量值和类标号。Scikit-Learn 中有一组函数,可以进行各种形式的交叉验证(使用没有用来拟合模型的数据来检验模型性能),这是它与 StatsModels 的一个主要区别。
使用拟合模型的同一数据来检验模型性能是一种错误的方法,因为这样建立的模型在使用原有数据来检验时,会相当完美地重现因变量的值或类标号。根据原有数据得出的结果,这些模型的表现会非常棒,实际上,它们对建模数据进行了过拟合,在使用新数据进行预测时,往往得不到好的结果。
为了避免过拟合,估计出在新数据上也能表现出优异性能的模型,通常是将数据集分成两部分:训练集和测试集。训练集用来构建和拟合模型,测试集用来评价模型的性能。因为拟合模型的数据与评价模型性能的数据是不同的,所以可以降低过拟合的概率。多次将数据集分成两部分,用训练集训练模型,并用测试集测试模型,这个过程就称为交叉验证。
有很多方法可以用来交叉验证,最基本的方法称为 k 折交叉验证。在 k 折交叉验证中,初始数据集被划分为一个训练集和一个测试集,训练集又被划分为 k 个部分,或称 k 折(例如:5 折或 10 折)。然后,分别留下 1 折数据用来评价模型性能,使用其余 k-1 折数据作为训练数据去拟合模型,此类过程共进行 k 次。这样的交叉验证过程会产生多个性能值,每折数据对应一个性能值,最终的训练集性能测量结果就是每折的性能值的均值。最后,在测试集上运行交叉验证模型,计算出模型的总体性能值。
为了表现在 Scikit-Learn 中构建统计学习模型有多么简单直接,可以使用交叉验证建立一个随机森林模型。如果你不了解随机森林模型,可以查看一下维基百科中的条目(https://en.wikipedia.org/wiki/Random_forest),获得一个整体的了解。如果想更深入地研究一下,可以参考 Trevor Hastie、Robert Tibshirani 和 Jerome Friedman 的著作《统计学习基础》,或者 Max Kuhn 和 Kjell Johnson 的著作《应用预测建模》,这两本著作都是这个领域内的绝好教材。在 Scikit-Learn 中,通过寥寥几行代码,就可以使用交叉验证构建一个随机森林模型并对模型性能做出评价:
import numpy as np import pandas as pd from sklearn.preprocessing import StandardScaler from sklearn.cross_validation import KFold from sklearn.ensemble import RandomForestClassifier as RF y = data_frame['Purchased?'] y_pred = y.copy() feature_space = data_frame[numeric_columns] X = feature_space.as_matrix().astype(np.float) scaler = StandardScaler() X = scaler.fit_transform(X) kf = KFold(len(y), n_folds=5, shuffle=True, random_state=123) for train_index, test_index in kf: X_train, X_test = X[train_index], X[test_index] y_train = y[train_index] clf = RF() clf.fit(X_train, y_train) y_pred[test_index] = clf.predict(X_test) accuracy = np.mean(y == y_pred) print "Random forest: " + "%.3f" % (accuracy)
前 5 行代码导入 NumPy、pandas 和 Scikit-Learn 中的 3 个组件。这 3 个组件的功能依次为:对解释变量进行中心化与比例化、执行 k 折交叉验证、应用随机森林分类器。
下一段代码进行以下处理:定义因变量 y、创建解释变量矩阵 X、对解释变量进行中心化和比例化。这段代码假设你已经创建了一个 pandas 数据框 data_frame,并且因变量数据在 Purchased? 列中。copy 函数生成了因变量的一个副本,并将其赋给变量 y_pred,这个变量将用来评价模型性能。下一行代码假设你已经在 data_frame 中创建了一个数值型变量列表,所以你可以使用列表中的变量作为解释变量集合(特征集合)。再下一行代码使用 NumPy 和 pandas 函数将特征集合转换为一个矩阵 X。这段中的最后 2 行代码使用 ScikitLearn 函数创建一个 scaler 对象,并使用这个对象对解释变量进行中心化和比例化。
下一段代码使用随机森林分类器实现 k 折交叉验证。第一行代码使用 KFold 函数将数据集分成 5 份,或称 5 折,作为训练集和测试集。下一行代码是一个 for 循环,在每折数据之间迭代。在 for 循环中,对于每一折,将训练集和测试集数据赋给相应的解释变量,将训练集数据赋给因变量,初始化随机森林分类器,使用训练集数据拟合随机森林模型,然后使用模型和测试集数据为因变量估计预测值。
最后一段代码计算并报告模型的准确度。第一行代码使用 NumPy 的 mean 函数计算出因变量预测值等于实际初始值的平均次数。括号中的判断条件检验这两个值是否相等(即它们是否同时为 1 或者同时为 0),所以 mean 函数计算出一系列 1 和 0 的均值。如果所有预测值都匹配了初始数据值,那么均值为 1。如果所有预测值都不匹配初始数据值,那么均值为 0。因此,这里希望交叉验证随机森林分类器产生一个接近于 1 的均值。最后一行在屏幕上打印出保留 3 位小数的模型准确度。
这个示例演示了在 Scikit-Learn 中使用随机森林分类器进行交叉验证的方法。除了本节中介绍的随机森林模型,Scikit-Learn 中还有很多其他类型的回归和分类模型。例如,只要将下面的 import 语句添加到脚本中,并且将分类器从 clf = RF() 修改为 clf = SVC(),就可以实现一个支持向量机模型:
from sklearn.svm import SVC
除了各种模型,Scikit-Learn 中还有很多用于数据预处理、数据降维和模型选择的函数。
要了解更多关于 Scikit-Learn 的信息,以及其他使用交叉验证估计模型的方法,请参考 Scikit-Learn 文档(http://scikit-learn.org/stable/index.html)。
9.2.4 更多的扩展包
除了 NumPy、SciPy 和 Scikit-Learn,根据不同类型数据分析工作的要求,你可能需要了解更多的扩展包。下面的列表相对于 Python 包索引中成千上万的扩展包来说,只是沧海一粟,列出的这些扩展包仅是作为一个推荐,希望你对此感兴趣并能实际应用:
· xarray(http://xray.readthedocs.org/en/stable/#)
提供一个类似 pandas 的工具箱,用于多维数组分析
· SKLL(https://skll.readthedocs.org/en/latest/index.html)
为一般的 Scikit-Learn 操作提供命令行工具
· NetworkX(https://networkx.github.io/documentation.html)
提供创建、生长和分析复杂网络的函数
· PyMC(https://pymc-devs.github.io/pymc/index.html)
提供实现贝叶斯统计和 MCMC(马尔科夫链蒙特卡洛)方法的函数
· NLTK(http://www.nltk.org/)
提供用于自然语言处理的文本处理和分析工具
· Cython(http://cython.org/)
提供一个在 Python 中生成和调用快速 C 代码的接口
以上扩展包不包含在 Python 安装程序中,你必须分别下载并安装。如想下载安装这些扩展包,可以访问 Python 包索引网站(https://pypi.python.org/pypi),或者 Unofficial Windows Binaries for Python Extension Packages 网站(http://www.lfd.uci.edu/~gohlke/pythonlibs/)。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论