Python-数据分析秘籍-五-

40 阅读25分钟

Python 数据分析秘籍(五)

原文:Mastering Python Data Analysis

协议:CC BY-NC-SA 4.0

十三、附录 a:术语表

本附录是贯穿 Python 数据分析和本书使用的技术概念的简要词汇表。

美国信息交换标准码 ( ASCII )在 2007 年底之前一直是互联网上的主导编码标准,UTF-8 (8 位 Unicode)取而代之。ASCII 仅限于英文字母,不支持其他字母。

方差分析 ( 方差分析)是统计学家罗纳德·费雪发明的一种统计数据分析方法。这种方法使用一个或多个对应分类变量的值来分析方差,从而对连续变量的数据进行划分。方差分析是线性建模的一种形式。

Anaconda 是一个免费的 Python 发行版,用于数据分析和科学计算。它有自己的套餐经理,康达

安斯科姆的四重奏是一个经典的例子,它说明了可视化数据为什么重要。四重奏由四个具有相似统计属性的数据集组成。每个数据集都有一系列的 x 值和从属的 y 值。

单词包模型:一种简化的文本模型,其中文本由一个单词包(一个集合,其中某个可以出现多次)来表示。在此表示中,单词的顺序被忽略。通常,字数或某些单词的存在被用作该模型中的特征。

金融中的贝塔系数是一个线性回归模型的 T2 斜率,这个线性回归模型包括资产收益和一个基准的收益,例如标准普尔 500 指数。

缓存包括将结果(通常来自函数调用)存储在内存或磁盘上。如果操作正确,缓存有助于减少函数调用的次数。一般来说,出于空间原因,我们希望保持缓存较小。

一个是一个完整的子图。这相当于拉帮结派的一般概念,其中每个人都认识其他所有的人。

聚类旨在将数据划分为称为聚类的组。聚类是无监督的,因为训练数据没有标记。一些聚类算法需要猜测聚类的数量,而其他算法则不需要。

科恩的 kappa 衡量目标和预测类别之间的一致性(在分类的背景下)——类似于准确性,但它也考虑了获得预测的随机机会。Kappa 在负值和 1 之间变化。

一个完全图是一个图,其中每对节点通过一个唯一的连接连接。

混淆矩阵是一个通常用来总结分类结果的表格。表的两个维度是预测类和目标类。

列联表:包含两个分类变量所有组合的计数的表。

余弦相似度是一种常用的距离度量,用来衡量两个文档的相似度。对于这个度量,我们需要计算两个特征向量的内积。向量的余弦相似性对应于向量之间角度的余弦,因此得名。

互相关使用滑动内积测量两个信号之间的相关性。我们可以使用互相关来测量两个信号之间的时间延迟。

数据科学工具箱 ( DST )是基于 Ubuntu 使用 Python 和 r 进行数据分析的虚拟环境, DST 既然是虚拟环境,我们可以安装在各种操作系统上。

离散余弦变换 ( 离散余弦变换)是一种类似于傅里叶变换的变换,但它试图仅通过余弦项的和来表示信号。

有效市场假说(【EMH】)规定,平均而言,你不能通过挑选更好的股票或把握市场时机来“击败市场”。根据 EMH 的说法,关于市场的所有信息都可以以这样或那样的形式立即提供给每个市场参与者,并立即反映在资产价格中。

特征值是方程 Ax = ax 的标量解,其中 A 是二维矩阵, x 是一维向量。

特征向量是对应于特征值的向量。

指数平滑是低通滤波器,旨在去除噪声。

人脸检测试图找到图像中代表人脸的(矩形)区域。

快速傅立叶变换 ( 快速傅立叶变换):一种计算傅立叶变换的快速算法。FFT 是 O(N log N) ,这是对旧算法的巨大改进。

滤波是一种信号处理技术,涉及部分信号的去除或抑制。存在许多滤波器类型,包括中值滤波器和维纳滤波器。

傅里叶分析是基于傅里叶级数T5【以数学家约瑟夫·傅里叶命名。傅立叶级数是一种将函数表示为正弦和余弦项的无限级数的数学方法。所讨论的函数可以是实数或复数。

遗传算法基于生物进化论。这种类型的算法对于搜索和优化很有用。

图形处理器 ( 图形处理器单元)是用于高效显示图形的专用电路。最近,图形处理器被用来执行大规模并行计算(例如,训练神经网络)。

Hadoop 分布式文件系统 ( HDFS )是 Hadoop 大数据框架的存储组件。HDFS 是一个分布式文件系统,它在多个系统上传播数据,并受到谷歌文件系统的启发,谷歌将其用于搜索引擎。

蜂巢图是一种用于绘制网络图的可视化技术。在蜂房图中,我们把边画成曲线。我们根据一些属性对节点进行分组,并在径向轴上显示它们。

影响图考虑了各个数据点的残差、影响和杠杆,类似于气泡图。残差的大小绘制在纵轴上,可以指示数据点是异常值。

折刀是一种确定性的算法,用于估计置信区间。它属于重采样算法家族。通常,我们通过删除一个值(我们也可以删除两个或更多的值)在折刀算法下生成新的数据集。

JSON ( JavaScript 对象符号)是一种数据格式。在这种格式中,数据是用 JavaScript 符号写下来的。JSON 比其他数据格式更简洁,比如 XML。

K 折叠交叉验证是一种涉及 K(一个小整数)随机数据分区的交叉验证形式,称为折叠。在 k 次迭代中,每个折叠使用一次进行验证,其余的数据用于训练。迭代的结果可以在最后合并。

线性判别分析 ( LDA )是一种寻找特征线性组合的算法,以便在类别之间区分。它可以通过投影到低维子空间来用于分类或降维。

学习曲线:一种将学习算法的行为可视化的方法。它是一系列训练数据大小的训练和测试分数图。

对数图(或对数图)是使用对数刻度的图。当数据变化很大时,这种类型的图很有用,因为它们显示数量级。

逻辑回归是一种分类算法。这种算法可以用来预测一个类或事件发生的概率。逻辑回归基于逻辑函数,其的输出值在 0 到 1 的范围内,就像概率一样。因此,逻辑函数可用于将任意值转换为概率。

隆布-斯卡格尔周期图是一种对数据进行正弦拟合的频谱估计方法,常用于采样不均匀的数据。这种方法以尼古拉斯·隆布和杰弗里·斯卡格尔的名字命名。

马修斯相关系数 ( MCC )或φ系数是 Brian Matthews 在 1975 年发明的二进制分类的评价指标。 MCC 是目标和预测的相关系数,在-1 和 1 之间变化(最佳一致性)。

内存泄漏是计算机程序中常见的问题,我们可以通过执行内存分析来发现。当我们不释放不需要的内存时,就会发生泄漏。

摩尔定律是现代计算机芯片中晶体管数量每两年翻一番的观察。自 1970 年左右摩尔定律形成以来,这一趋势一直在持续。还有第二个摩尔定律,也叫洛克定律。该定律指出,集成电路的研发和制造成本呈指数级增长。

命名实体识别(【NER】)试图检测文本中的人名、组织名、地点名和其他名称。一些 NER 系统几乎和人类一样好,但这不是一件容易的事情。命名实体通常以大写字母开头,例如 Ivan。因此,在应用 NER 时,我们不应该改变用词的情况。

对象关系映射 ( ORM ):一种用于数据库模式和面向对象编程语言之间转换的软件架构模式。

开放计算语言 ( OpenCL )最初由苹果公司开发,是程序的开放技术标准,可以在各种设备上运行,包括在商品硬件上可用的 CPU 和 GPU。

OpenCV ( 开源计算机视觉)是一个计算机视觉库,创建于 2000 年,目前由 Itseez 维护。OpenCV 是用 C++编写的,但它也有到 Python 和其他编程语言的绑定。

观点挖掘情感分析是一个以高效发现和评价文本中的观点和情感为目标的研究领域。

主成分分析 ( PCA )是卡尔·皮尔逊在 1901 年发明的,是一种将数据转换成不相关的正交特征的算法,称为主成分。主成分是协方差矩阵的特征向量。

泊松分布以法国数学家泊松的名字命名,他于 1837 年发表了这个分布。泊松分布是一种离散分布,通常与固定时间或空间间隔内的计数相关联。

稳健回归旨在比普通回归更好地处理数据中的异常值。这种回归使用特殊的稳健估计。

散点图:显示笛卡尔坐标系统中两个变量之间关系的二维图。一个变量的值在一个轴上表示,另一个变量由另一个轴表示。我们可以通过这种方式快速可视化相关性。

无共享架构中,计算节点不共享内存或文件。因此,该架构是完全分散的,具有完全独立的节点。显而易见的优点是,我们不依赖于任何一个节点。第一个商业无共享数据库创建于 20 世纪 80 年代。

信号处理是工程和应用数学的一个领域,处理与随时间变化的变量相对应的模拟和数字信号的分析。

结构化查询语言 ( SQL )是一种用于关系数据库查询和操作的专用语言。这包括创建、插入行和删除表。

短时傅立叶变换(STFT):STFT 将时域中的信号分成相等的部分,然后将快速傅立叶变换应用于每个部分。

停词:信息价值低的常用词。停止词通常在分析文本之前被删除。虽然过滤停用词是常见的做法,但停用词没有标准的定义。

斯皮尔曼等级相关性使用等级将两个变量与皮尔逊相关性相关联。等级是按排序顺序排列的值的位置。值相等的项目会获得一个等级,这是它们位置的平均值。例如,如果我们有两个同等价值的项目分配到位置 2 和 3,则两个项目的排名都是 2.5。

光谱聚类是一种聚类技术,可用于分割图像。

星型模式是一种便于报告的数据库模式。星型模式适用于处理网站访问、广告点击或金融交易等事件。事件信息(如温度或购买量等指标)存储在事实表中,事实表链接到小得多的维度表。星型模式是非规范化的,这将完整性检查的责任放在了应用程序代码上。因此,我们应该只以受控的方式写入数据库。

术语 频率-逆文档频率 ( tf-idf )是衡量一个单词在语料库中的重要性的度量。它由术语频率号和逆文档频率号组成。术语“频率”统计单词在文档中出现的次数。逆文档频率计算单词出现的文档数,取该数的倒数。

时间序列:从最早的测量值开始的数据点的有序列表。通常,每个数据点都有一个相关的时间戳。

Violin 图将箱式图和核密度图或直方图结合在一种类型的图中。

winsoring是处理异常值的一种技术,以 Charles Winsor 命名。实际上,Winsorising 以对称的方式将异常值剪切到给定的百分位数。

十四、附录 b:函数参考

本附录是功能的简短参考,并不意味着是详尽的文档,而是在您暂时无法查阅文档时的额外帮助。这些功能由不同库的包来组织。

IPython

下面在所有前端显示一个 Python 对象:

IPython.core.display.display(*objs, **kwargs)

以下内容呈现 HTML 内容:

IPython.display.HTML(TextDisplayObject)

下面显示了连接到函数的交互式小部件。第一个参数应该是一个函数:

IPython.html.widgets.interaction.interact (__interact_f=None, **kwargs)

该函数的以下参数是作为关键字参数传入的小部件缩写,它们构建了一组绑定到__interact_f的交互式小部件,并将该组放在一个容器中:

IPython.html.widgets.interaction.interactive (__interact_f, **kwargs)

Matplotlib

以下方法用于获取或设置轴属性。例如,axis('off')关闭轴线和标签:

matplotlib.pyplot.axis(*v, **kwargs)

以下参数创建了一个新图形:

matplotlib.pyplot.figure(num=None, figsize=None, dpi=None, facecolor=None, edgecolor=None, frameon=True, FigureClass=<class 'matplotlib.figure.Figure'>, **kwargs)

以下参数打开或关闭绘图网格:

matplotlib.pyplot.grid(b=None, which='major', axis='both', **kwargs)

以下参数绘制了直方图:

matplotlib.pyplot.hist(x, bins=10, range=None, normed=False, weights=None, cumulative=False, bottom=None, histtype='bar', align='mid', orientation='vertical', rwidth=None, log=False, color=None, label=None, stacked=False, hold=None, **kwargs)

下面显示了类似数组的数据的图像:

matplotlib.pyplot.imshow(X, cmap=None, norm=None, aspect=None, interpolation=None, alpha=None, vmin=None, vmax=None, origin=None, extent=None, shape=None, filternorm=1, filterrad=4.0, imlim=None, resample=None, url=None, hold=None, **kwargs)

以下显示了可选指定位置(例如plt.legend(loc='best'))的图例:

matplotlib.pyplot.legend(*args, **kwargs)

以下参数创建一个二维图,其中包含单个或多个 xy 对以及相应的可选格式字符串:

matplotlib.pyplot.plot(*args, **kwargs)

下面创建两个数组的散点图:

matplotlib.pyplot.scatter(x, y, s=20, c='b', marker='o', cmap=None, norm=None, vmin=None, vmax=None, alpha=None, linewidths=None, verts=None, hold=None, **kwargs)

以下参数显示了一个图:

matplotlib.pyplot.show(*args, **kw)

给定绘图的行号、列号和索引号,下面的参数创建子绘图。所有这些数字都从一开始。例如,plt.subplot(221)在一个二乘二的网格中创建第一个子图:

matplotlib.pyplot.subplot(*args, **kwargs)

以下论点为情节加上了标题:

matplotlib.pyplot.title(s, *args, **kwargs)

NumPy

下面创建一个 NumPy 数组,其值在指定范围内均匀分布:

numpy.arange([start,] stop[, step,], dtype=None)

以下参数返回将对输入数组进行排序的索引:

numpy.argsort(a, axis=-1, kind='quicksort', order=None)

下面从类似数组的序列(如 Python 列表)创建一个 NumPy 数组:

numpy.array(object, dtype=None, copy=True, order=None, subok=False, ndmin=0)

以下参数计算两个数组的点积:

numpy.dot(a, b, out=None)

以下参数返回身份矩阵:

numpy.eye(N, M=None, k=0, dtype=<type 'float'>)

以下参数从.npy.npz或腌菜加载 NumPy 数组或腌菜对象。内存映射数组存储在文件系统中,不必完全加载到内存中。这对于大型数组尤其有用:

numpy.load(file, mmap_mode=None)

以下参数将文本文件中的数据加载到 NumPy 数组中:

numpy.loadtxt(fname, dtype=<type 'float'>, comments='#', delimiter=None, converters=None, skiprows=0, usecols=None, unpack=False, ndmin=0)

下面计算沿给定轴的算术平均值:

numpy.mean(a, axis=None, dtype=None, out=None, keepdims=False)

以下参数计算给定轴的中间值:

numpy.median(a, axis=None, out=None, overwrite_input=False)

下面创建一个指定形状和数据类型的 NumPy 数组,包含:

numpy.ones(shape, dtype=None, order='C')

下面执行最小二乘多项式拟合:

numpy.polyfit(x, y, deg, rcond=None, full=False, w=None, cov=False)

以下内容更改了 NumPy 数组的形状:

numpy.reshape(a, newshape, order='C')

以下参数将 NumPy 数组保存到 NumPy .npy格式的文件中:

numpy.save(file, arr)

以下参数将 NumPy 数组保存到文本文件中:

numpy.savetxt(fname, X, fmt='%.18e', delimiter=' ', newline='\n', header='', footer='', comments='# ')

以下参数设置打印选项:

numpy.set_printoptions(precision=None, threshold=None, edgeitems=None, linewidth=None, suppress=None, nanstr=None, infstr=None, formatter=None)

以下参数返回沿给定轴的标准偏差:

numpy.std(a, axis=None, dtype=None, out=None, ddof=0, keepdims=False)

下面根据布尔条件从输入数组中选择数组元素:

numpy.where(condition, [x, y])

下面创建一个指定形状和数据类型的 NumPy 数组,包含零:

numpy.zeros(shape, dtype=float, order='C')

Pandas

以下创建固定频率的日期时间索引:

pandas.date_range(start=None, end=None, periods=None, freq='D', tz=None, normalize=False, name=None, closed=None)

以下参数生成各种汇总统计,忽略NaN值:

pandas.DataFrame.describe(self, percentile_width=None, percentiles=None, include=None, exclude=None)

下面从类似数组的对象或字典的字典中创建一个DataFrame对象:

pandas.DataFrame. from_dict(data, orient='columns', dtype=None)

以下参数查找 NaN 和 None 值:

pandas.isnull(obj)

以下参数将DataFrame对象与列或索引上类似数据库的连接合并:

pandas.merge(left, right, how='inner', on=None, left_on=None, right_on=None, left_index=False, right_index=False, sort=False, suffixes=('_x', '_y'), copy=True)

下面从 CSV 文件创建一个DataFrame对象:

pandas.read_csv(filepath_or_buffer, sep=',', dialect=None, compression=None, doublequote=True, escapechar=None, quotechar='"', quoting=0, skipinitialspace=False, lineterminator=None, header='infer', index_col=None, names=None, prefix=None, skiprows=None, skipfooter=None, skip_footer=0, na_values=None, na_fvalues=None, true_values=None, false_values=None, delimiter=None, converters=None, dtype=None, usecols=None, engine='c', delim_whitespace=False, as_recarray=False, na_filter=True, compact_ints=False, use_unsigned=False, low_memory=True, buffer_lines=None, warn_bad_lines=True, error_bad_lines=True, keep_default_na=True, thousands=Nment=None, decimal='.', parse_dates=False, keep_date_col=False, dayfirst=False, date_parser=None, memory_map=False, nrows=None, iterator=False, chunksize=None, verbose=False, encoding=None, squeeze=False, mangle_dupe_cols=True, tupleize_cols=False, infer_datetime_format=False)

科学学习

以下参数将seed转换为numpy.random.RandomState实例:

sklearn.utils.check_random_state(seed)

以下对给定的估计器超参数值执行网格搜索:

sklearn.grid_search.GridSearchCV estimator, param_grid, scoring=None, fit_params=None, n_jobs=1, iid=True, refit=True, cv=None, verbose=0, pre_dispatch='2*n_jobs', error_score='raise')

以下参数将数组分成随机训练集和测试集:

sklearn.cross_validation.train_test_split(*arrays, **options)

下面返回准确度分类分数:

sklearn.metrics.accuracy_score(y_true, y_pred, normalize=True, sample_weight=None)

黑桃

以下计算数据的相对最大值:

scipy.signal.argrelmax(data, axis=0, order=1, mode='clip')

以下参数计算数据集的峰度:

scipy.stats.kurtosis(a, axis=0, fisher=True, bias=True)

下面对数组应用中值滤波:

scipy.signal.medfilt(volume, kernel_size=None)

以下参数计算数据集的偏斜度:

scipy.stats.skew(a, axis=0, bias=True)

海鸟

以下参数绘制了观测值的单变量分布:

seaborn.distplot(a, bins=None, hist=True, kde=True, rug=False, fit=None, hist_kws=None, kde_kws=None, rug_kws=None, fit_kws=None, color=None, vertical=False, norm_hist=False, axlabel=None, label=None, ax=None)

以下参数将表格数据绘制为颜色编码矩阵:

seaborn.heatmap(data, vmin=None, vmax=None, cmap=None, center=None, robust=False, annot=False, fmt='.2g', annot_kws=None, linewidths=0, linecolor='white', cbar=True, cbar_kws=None, cbar_ax=None, square=False, ax=None, xticklabels=True, yticklabels=True, mask=None, **kwargs)

以下参数绘制数据和相应的线性回归模型拟合:

seaborn.regplot(x, y, data=None, x_estimator=None, x_bins=None, x_ci='ci', scatter=True, fit_reg=True, ci=95, n_boot=1000, units=None, order=1, logistic=False, lowess=False, robust=False, logx=False, x_partial=None, y_partial=None, truncate=False, dropna=True, x_jitter=None, y_jitter=None, label=None, color=None, marker='o', scatter_kws=None, line_kws=None, ax=None)

以下参数将所有 matplotlib RC 参数恢复为默认设置:

seaborn.reset_defaults()

以下参数将所有 matplotlib RC 参数恢复为原始设置:

seaborn.reset_orig()

以下参数绘制了线性回归的残差:

seaborn.residplot(x, y, data=None, lowess=False, x_partial=None, y_partial=None, order=1, robust=False, dropna=True, label=None, color=None, scatter_kws=None, line_kws=None, ax=None)

以下参数设置美学参数:

seaborn.set(context='notebook', style='darkgrid', palette='deep', font='sans-serif', font_scale=1, color_codes=False, rc=None)

状态模型

以下参数从互联网下载并返回 R 数据集:

statsmodels.api.datasets.get_rdataset(dataname, package='datasets', cache=False)

以下参数绘制了一个 Q-Q 图:

statsmodels.api.qqplot(data, dist, distargs=(), a=0, loc=0, scale=1, fit=False, line=None, ax=None)

以下参数为一个或多个拟合线性模型创建了方差分析表:

statsmodels.stats.anova.anova_lm()

十五、附录 c:在线资源

以下是资源的简短列表,包括演示文稿、文档链接、免费提供的 IPython 笔记本和数据。

IPython 笔记本和开放数据

关于 IPython 笔记本和开放数据的更多信息,可以参考以下内容:

数学和统计学

陈述

十六、附录 d:命令行和其他工具的提示和技巧

在本书中,我们使用了各种工具,例如 IPython 笔记本和 Unix shell 命令。我们有一个简短的提示列表,这并不意味着是详尽的。对于使用数据库,我推荐在 www.dbvis.com/ T2(2016 年 1 月检索)可用的数据库可视化软件。它支持所有主要的数据库产品和操作系统。另外,我喜欢在桌面环境中使用文本扩展器。

IPython 笔记本电脑

我解释了笔记本电脑的最低工作流程。此外,我制作了简单的 IPython 小部件,本书通篇都在使用这些小部件,因此我将在这里描述它们。要运行 IPython 笔记本代码,请执行以下步骤:

  1. 用图形用户界面或以下命令启动 IPython 笔记本:

    $ jupyter notebook
    
    
  2. 逐个单元格或一次运行代码。

我制作了一个小部件来设置 matplotlib 的一些属性。设置存储在当前文件夹的dautil.json文件中。这些文件也应该是代码包的一部分。

另一个 IPython 小部件帮助设置子场景。它负责设置标题、图例和标签。我认为这些字符串是配置,因此也将它们存储在dautil.json文件中。

命令行工具

其中一些工具有图形用户界面的替代品,但并不总是被提及。在我看来,学习使用命令行工具是一个好主意,即使你后来决定你更喜欢图形用户界面选项。Linux 是许多支持命令行界面的流行操作系统之一。你可以在【tldp.org/】(2016 年 1 月检索)找到关于 Linux 工具的好文档。网站上的大多数信息都是通用的,在其他操作系统上也很有用,比如操作系统 x

在命令行界面世界中,导航通常很麻烦。我发现巴什马克是一个很好的工具来帮助你。你可以在github.com/huyng/bashm…找到巴什马克(2016 年 1 月检索)。安装 bashmarks 的步骤如下:

  1. 在终端中键入以下内容:

    $ git clone git://github.com/huyng/bashmarks.git
    
    
  2. 现在,在终端中输入这个:

    $ cd bashmarks
    
    
  3. 接下来,键入以下内容:

    $ make install
    
    
  4. 来源于配置文件或当前会话:

    $ source ~/.local/bin/bashmarks.sh
    
    

下表列出了 bashmarks 命令:

|

命令

|

描述

| | --- | --- | | s <bookmark_name> | 这将把当前目录保存为bookmark_name | | g <bookmark_name> | 这将转到与bookmark_name关联的目录 | | p <bookmark_name> | 这会打印与bookmark_name关联的目录 | | d <bookmark_name> | 这会删除书签 | | l | 这将列出所有可用的书签 |

别名命令

alias命令允许为长命令定义一个短助记符。例如,当我们键入ipnb时,我们可以定义以下别名来启动 IPython 服务器:

$ alias ipnb='ipython notebook'

我们只能为当前会话定义别名,但通常我们在主目录中找到的.bashrc启动文件(文件名中的点表示是隐藏文件)中定义别名。如果您发现自己有许多别名,创建一个包含所有别名的文件可能会很有用。然后,您可以从.bashrc获取该文件。

命令行历史

命令行历史是一种最小化击键次数的机制。大家可以在http://www . tldp . org/LDP/GNU-Linux-Tools-Summary/html/x 1712 . htm(2016 年 1 月检索)上了解更多。

要简单地执行最后一次运行命令,请再次键入以下内容:

$ !!

根据您所处的 shell 模式(viemacs),您可能更喜欢其他方式来浏览历史。键盘上的向上和向下箭头也可以让你浏览历史。

一个常见的用例是搜索我们过去执行的一个长命令,然后再次运行它。我们可以搜索历史,如下所示:

$ history|grep <search for something>

当然,您可以使用别名机制或桌面文本扩展器来缩短这一时间。搜索给出了一个命令列表,其中的数字按时间顺序排列。例如,您可以执行编号为328的命令,如下所示:

$ !328

例如,如果您希望执行最后一个以python开始的命令,请键入以下内容:

$ !python

可重复的会话

第 1 章为可重现数据分析奠定基础阐述了可重现分析的价值。在这种情况下,我们有script命令,这是一种捕获命令和会话输出的方式。

码头工人提示

Docker 是一项伟大的技术,但我们必须小心不要让我们的图像太大,并在可能的情况下删除图像文件。gist.github.com/michaelneal…docker-clean脚本(2016 年 1 月检索)有助于回收空间。

我发现有一个安装脚本很有用,它只是一个普通的 shell 脚本,我把它添加到Dockerfile中如下:

ADD install.sh /root/install.sh

Python 创建__pycache__目录是为了优化(我们可以通过各种方式禁用这个选项)。这些不是严格需要的,可以很容易地移除,如下所示:

find /opt/conda -name \__pycache__ -depth -exec rm -rf {} \;

Anaconda 在它的pkgs目录下放了很多文件,我们可以删除如下:

rm -r /opt/conda/pkgs/*

有些人建议删除测试代码;然而,在某些罕见的情况下,非测试代码依赖于测试代码。同样,有测试代码以防万一也是有用的。

使用 Docker 时,需要注意一些问题。例如,我们必须如下设置PATH环境变量:

export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:${PATH}

对于 Python 脚本,我们还需要设置如下语言设置:

ENV LANG=C.UTF-8

一般建议用pipconda安装软件时指定软件包版本,比如这样:

$ conda install scipy=0.15.0
$ pip install scipy==0.15.0

使用conda安装时,也建议一次安装多个软件包,以免安装多个版本的公共依赖项:

$ conda install scipy=0.15.0 curl=7.26.0

我的主 Docker 存储库的 Docker 设置由一个Dockerfile脚本和一个安装脚本(install.sh)组成。Dockerfile的内容如下:

FROM continuumio/miniconda3

ADD install.sh /root/install.sh
RUN sh -x /root/install.sh

ENV LANG=C.UTF-8

我用–x开关执行安装脚本,这给出了更详细的输出。

install.sh的内容如下:

export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:${PATH}
apt-get install -y libgfortran3
conda config --set always_yes True
conda install beautiful-soup bokeh=0.9.1 execnet=1.3.0 \ fastcache=1.0.2 \
    joblib=0.8.4 jsonschema ipython=3.2.1 lxml mpmath=0.19 \
    networkx=1.9.1 nltk=3.0.2 numba=0.22.1 numexpr=2.3.1 \
    pandas=0.16.2 pyzmq scipy=0.16.0 seaborn=0.6.0 \
    sqlalchemy=0.9.9 statsmodels=0.6.1 terminado=0.5 tornado 
conda install matplotlib=1.5.0 numpy=1.10.1 scikit-learn=0.17
pip install dautil==0.0.1a29
pip install hiveplot==0.1.7.4
pip install landslide==1.1.3
pip install LiveStats==1.0
pip install mpld3==0.2
pip install pep8==1.6.2
pip install requests-cache==0.4.10
pip install tabulate==0.7.5

find /opt/conda -name \__pycache__ -depth -exec rm -rf {} \;
rm -r /opt/conda/pkgs/*

mkdir -p /.cache/dautil/log
mkdir -p /.local/share/dautil