Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
OpenDocCN
apachecn-ds-zh
提交
c3c51c5c
A
apachecn-ds-zh
项目概览
OpenDocCN
/
apachecn-ds-zh
大约 1 年 前同步成功
通知
1
Star
287
Fork
69
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
A
apachecn-ds-zh
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
c3c51c5c
编写于
3月 12, 2021
作者:
W
wizardforcel
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
2021-03-12 18:16:57
上级
929d70f7
变更
11
隐藏空白更改
内联
并排
Showing
11 changed file
with
23 addition
and
23 deletion
+23
-23
new/begin-ds-py-jupyter/3.md
new/begin-ds-py-jupyter/3.md
+1
-1
new/master-py-ds/01.md
new/master-py-ds/01.md
+1
-1
new/master-py-ds/11.md
new/master-py-ds/11.md
+2
-2
new/py-ds-essentials/1.md
new/py-ds-essentials/1.md
+1
-1
new/py-ds-essentials/2.md
new/py-ds-essentials/2.md
+4
-4
new/py-ds-essentials/7.md
new/py-ds-essentials/7.md
+1
-1
new/py-ds-essentials/8.md
new/py-ds-essentials/8.md
+4
-4
new/py-ds-essentials/9.md
new/py-ds-essentials/9.md
+1
-1
new/thoughtful-ds/03.md
new/thoughtful-ds/03.md
+1
-1
new/thoughtful-ds/07.md
new/thoughtful-ds/07.md
+3
-3
new/thoughtful-ds/08.md
new/thoughtful-ds/08.md
+4
-4
未找到文件。
new/begin-ds-py-jupyter/3.md
浏览文件 @
c3c51c5c
...
...
@@ -887,7 +887,7 @@ Bokeh 是一个用于 Python 的交互式可视化库。 其目标是提供与 D
我们首先定义一个函数,根据上次更改的年份对样本进行分组,然后将该函数应用于**最近更改的日期**列。 接下来,我们需要将这些值映射到颜色以进行可视化。
9.
通过运行以下代码,创建
地图
以将上次更改日期分组为颜色类别:
9.
通过运行以下代码,创建
映射
以将上次更改日期分组为颜色类别:
```py
year_to_color = {
...
...
new/master-py-ds/01.md
浏览文件 @
c3c51c5c
...
...
@@ -765,7 +765,7 @@ a41 0.547655 0.692852 0.681825
```
可以通过分配
密钥
来识别组合的件:
可以通过分配
键
来识别组合的件:
```
py
>>>
concatenated
=
pd
.
concat
([
p1
,
p2
],
keys
=
[
'p1'
,
'p2'
])
...
...
new/master-py-ds/11.md
浏览文件 @
c3c51c5c
...
...
@@ -520,11 +520,11 @@ Actual: of Lemma: of
在开始分析推文之前,我们需要安装 Python 的
`Twython`
包,该包有助于与 Twitter API 进行交互以从 Twitter 获取推文。 可以从
[
这个页面
](
https://github.com/ryanmcgrath/twython
)
下载。
另外,您需要从
[
这个页面
](
https://apps.twitter.com/app/new
)
获取
使用者
密钥和使用者秘密密钥。
另外,您需要从
[
这个页面
](
https://apps.twitter.com/app/new
)
获取
用户
密钥和使用者秘密密钥。
![
Performing sentiment analysis on world leaders using Twitter
](
img/B03450_11_09.jpg
)
获得有关应用的详细信息后,您将获得
使用者
密钥和使用者秘密密钥:
获得有关应用的详细信息后,您将获得
用户
密钥和使用者秘密密钥:
![
Performing sentiment analysis on world leaders using Twitter
](
img/B03450_11_10.jpg
)
...
...
new/py-ds-essentials/1.md
浏览文件 @
c3c51c5c
...
...
@@ -1335,7 +1335,7 @@ In: housing = np.loadtxt('regression-datasets-housing.csv',
In
:
housing_int
=
housing
.
astype
(
int
)
```
打印
`housing`
和
`housing_int`
阵列
的行的前三个元素可以帮助您了解不同之处:
打印
`housing`
和
`housing_int`
数组
的行的前三个元素可以帮助您了解不同之处:
```
py
In
:
print
(
housing
[
0
,:
3
],
'n'
,
housing_int
[
0
,:
3
])
Out
:
[
6.32000000e-03
1.80000000e+01
2.31000000e+00
]
...
...
new/py-ds-essentials/2.md
浏览文件 @
c3c51c5c
...
...
@@ -794,7 +794,7 @@ In: dataset.iloc[range(2), [2,1]]
分类和数值的加号是布尔值。 实际上,它们可以看作是分类的(特征的存在/不存在),或者另一方面,可以认为特征具有展览(已显示,未显示)的概率。 由于许多机器学习算法不允许将输入分类,因此布尔特征通常用于将分类特征编码为数值。
让我们继续以天气为例。 如果要映射包含当前天气并采用集合
`[sunny, cloudy, snowy, rainy, foggy]`
中的值并将其编码为二进制特征的要素,则应创建五个
`True`
/
`False`
函数,每个级别的分类功能。 现在,
地图
很简单:
让我们继续以天气为例。 如果要映射包含当前天气并采用集合
`[sunny, cloudy, snowy, rainy, foggy]`
中的值并将其编码为二进制特征的要素,则应创建五个
`True`
/
`False`
函数,每个级别的分类功能。 现在,
映射
很简单:
```
py
Categorical_feature
=
sunny
binary_features
=
[
1
,
0
,
0
,
0
,
0
]
Categorical_feature
=
cloudy
binary_features
=
[
0
,
1
,
0
,
0
,
0
]
Categorical_feature
=
snowy
binary_features
=
[
0
,
0
,
1
,
0
,
0
]
Categorical_feature
=
rainy
binary_features
=
[
0
,
0
,
0
,
1
,
0
]
Categorical_feature
=
foggy
binary_features
=
[
0
,
0
,
0
,
0
,
1
]
...
...
@@ -1161,7 +1161,7 @@ Python 列表数据结构实际上更麻烦,更慢,它是将列表结构链
无论 NumPy 数组的尺寸如何,数据始终将按连续的值序列(连续的内存块)进行排列。 正是对数组大小和步幅(告诉我们必须在内存中跳过多少字节才能沿着某个轴移至下一个位置)的跨度知识,才能轻松正确地表示和操作数组。
为了快速实现内存优化,为了存储多维数组,严格地有两种方法称为
**行优先**
和
**列优先**
。 由于
**RAM**
(
**随机存取存储器**
)被安排在存储单元的线性存储中(存储单元作为一条线的点是连续的– RAM 中没有像数组这样的东西 ),您必须将
阵列
展开为向量并将其存储在内存中。 展开时,您可以在 NumPy 包中逐行(主要顺序)执行 C/C++ 的典型操作,或者逐列(主要顺序执行)的 Fortran 或 R.Python 的典型操作。 在实现中,使用主要行排序(也称为 C 连续,而主要列排序也称为 Fortran 连续),这意味着在逐行应用的计算操作中,它比逐列工作更快。 无论如何,在创建 NumPy 数组时,您可以根据对行或列进行更多操作的期望来确定数据结构的顺序。 导入包
`import numpy as np`
后,给定数组
`a = [[1,2,3],[4,5,6],[7,8,9]]`
,您可以按行优先顺序
`c = np.array(a, order='C')`
或按列优先顺序
`f = np.array(a, order='F')`
重新定义它
为了快速实现内存优化,为了存储多维数组,严格地有两种方法称为
**行优先**
和
**列优先**
。 由于
**RAM**
(
**随机存取存储器**
)被安排在存储单元的线性存储中(存储单元作为一条线的点是连续的– RAM 中没有像数组这样的东西 ),您必须将
数组
展开为向量并将其存储在内存中。 展开时,您可以在 NumPy 包中逐行(主要顺序)执行 C/C++ 的典型操作,或者逐列(主要顺序执行)的 Fortran 或 R.Python 的典型操作。 在实现中,使用主要行排序(也称为 C 连续,而主要列排序也称为 Fortran 连续),这意味着在逐行应用的计算操作中,它比逐列工作更快。 无论如何,在创建 NumPy 数组时,您可以根据对行或列进行更多操作的期望来确定数据结构的顺序。 导入包
`import numpy as np`
后,给定数组
`a = [[1,2,3],[4,5,6],[7,8,9]]`
,您可以按行优先顺序
`c = np.array(a, order='C')`
或按列优先顺序
`f = np.array(a, order='F')`
重新定义它
相反,代表多个维度的数据结构列表只能将自己变成嵌套列表,从而增加访问数据时的开销和内存碎片。
...
...
@@ -1730,7 +1730,7 @@ In: mask = (M>=20) & (M<=90) & ((M / 10.) % 1 >= 0.5)
85
,
86
,
87
,
88
,
89
])
```
如果您需要对由掩码选择的
阵列
分区进行操作(例如
`M[mask]=0`
),则此方法特别有用。
如果您需要对由掩码选择的
数组
分区进行操作(例如
`M[mask]=0`
),则此方法特别有用。
指出需要从数组中选择哪些元素的另一种方法是通过提供由整数组成的行或列索引。 可以通过将数组上的布尔条件转换为索引的
`np.where()`
函数来定义此类索引,也可以通过简单地提供整数索引序列来定义此类索引,其中整数可以按特定顺序排列,甚至可以重复。 这种方法称为
**花式索引**
:
...
...
@@ -1911,7 +1911,7 @@ In: print(sparse_coo) Out: (0, 1) 1.0
(
1
,
2
)
1.0
(
3
,
2
)
2.0
(
3
,
4
)
1.0
(
4
,
2
)
2.0
```
从输出表示中,我们可以得出一个稀疏坐标格式矩阵的工作原理是将打印值存储在三个单独的存储数组中:一个用于
`x`
坐标,一个用于
`y`
坐标,以及一个用于值。 这意味着在插入信息时,COO 矩阵的确非常快(每个新元素是每个存储
阵列
中的新行),但是处理起来缓慢,因为它无法通过扫描数组立即找出行或列中的值。
从输出表示中,我们可以得出一个稀疏坐标格式矩阵的工作原理是将打印值存储在三个单独的存储数组中:一个用于
`x`
坐标,一个用于
`y`
坐标,以及一个用于值。 这意味着在插入信息时,COO 矩阵的确非常快(每个新元素是每个存储
数组
中的新行),但是处理起来缓慢,因为它无法通过扫描数组立即找出行或列中的值。
对于键字典(DOK)和列表的列表(LIL)也是如此。 第一个使用坐标字典操作(因此它可以快速检索单个元素),第二个使用两个列表,两个列表被排列来代表行,包含该行中的非零坐标以及其他值(很容易通过添加更多行进行扩展)。
COO 矩阵的另一个优点是,它们可以立即转换为专门用于在行或列级别有效工作的其他类型的矩阵:CSR 和 CSC 矩阵。
...
...
new/py-ds-essentials/7.md
浏览文件 @
c3c51c5c
...
...
@@ -529,7 +529,7 @@ Out: (1, 2048)
[[
0.12340261
0.0833823
0.7935947
...
0.50869745
0.34015656
]]
```
如您所见,
`avg_pool`
层包含
`2048`
单位,该函数的输出正好是 2,048D 数组。 现在,您可以将此
阵列连接到您选择的任何其他要素阵列
。
如您所见,
`avg_pool`
层包含
`2048`
单位,该函数的输出正好是 2,048D 数组。 现在,您可以将此
数组连接到您选择的任何其他要素数组
。
# 处理时间序列
...
...
new/py-ds-essentials/8.md
浏览文件 @
c3c51c5c
...
...
@@ -86,7 +86,7 @@ HDFS 的架构是主从结构。 如果主服务器(称为**名称节点**)
具体来说,这是 MapReduce 用于 Hadoop 实现的步骤:
*
**数据分块器**
:从文件系统读取数据并将其拆分为块。 块是输入数据集的一部分,通常是固定大小的块(例如,从
**数据节点**
读取的 HDFS 块)或另一个更合适的拆分。 例如,如果我们要计算文本文件中的字符,单词和行数,则很好的拆分可以是一行文本。
*
**映射器**
:从每个块中生成一系列键值对。 每个映射器实例将相同的映射函数应用于不同的数据块。 继续前面的示例,对于每一行,在此步骤中生成了三个键值对-一个键值对包含该行中的字符数(键可以简单地是
*字符串*
),其中一个包含单词个数(在这种情况下,
密钥必须不同,所以假设是
*单词*
),其中一个包含行数,该行数始终为 1(在这种情况下,密钥
可以是
*行*
)。
*
**映射器**
:从每个块中生成一系列键值对。 每个映射器实例将相同的映射函数应用于不同的数据块。 继续前面的示例,对于每一行,在此步骤中生成了三个键值对-一个键值对包含该行中的字符数(键可以简单地是
*字符串*
),其中一个包含单词个数(在这种情况下,
键必须不同,所以假设是
*单词*
),其中一个包含行数,该行数始终为 1(在这种情况下,键
可以是
*行*
)。
*
**打乱器**
:从可用键的数量和可用的化简器的数量,混洗器将具有相同键的所有键-值对分配给同一异化器。 通常,此操作是计算键的哈希值,将其除以精简器的数量,然后使用余数来指出特定的精简器。 这应确保每个异径管有足够数量的钥匙。 该功能不是用户可编程的,而是由 MapReduce 框架提供的。
*
**归约器**
:每个简化器都接收一组特定键的所有键值对,并且可以产生零个或多个聚合结果。 在该示例中,所有与
*单词*
键相关的值都到达简化器; 它的工作只是总结所有值。 其他键也一样,这将产生三个最终值:字符数,单词数和行数。 请注意,这些结果可能在不同的减速器上。
*
**输出编写器**
:减速器的输出写在文件系统(或 HDFS)上。 在默认的 Hadoop 配置中,每个归约器都会写入一个文件(
`part-r-00000`
是第一个归约器的输出,
`part-r-00001`
是第二个归约器的输出,依此类推)。 要在文件上显示完整的结果列表,应将所有结果连接起来。
...
...
@@ -428,9 +428,9 @@ Out: {'chars': 5535014, 'words': 959893, 'lines': 149689}
1.
使用
`textFile`
方法在 RDD 上读取并并行化输入文件。
2.
对于每一行,提取所有单词。 对于此操作,我们可以使用
`flatMap`
方法和正则表达式。
3.
现在,文本中的每个单词(即 RDD 的每个元素)都映射到一个键值对:键是小写单词,值始终是
`1`
。 这是一个
地图
操作。
3.
现在,文本中的每个单词(即 RDD 的每个元素)都映射到一个键值对:键是小写单词,值始终是
`1`
。 这是一个
映射
操作。
4.
通过
`reduceByKey`
调用,我们计算每个单词(键)在文本(RDD)中出现的次数。 输出是键值对,其中键是一个单词,值是单词在文本中出现的次数。
5.
我们翻转键和值并创建一个新的 RDD。 这是一个
地图
操作。
5.
我们翻转键和值并创建一个新的 RDD。 这是一个
映射
操作。
6.
我们将 RDD 降序排列,然后提取(获取)第一个元素。 这是一项操作,可以通过
`takeOrdered`
方法执行一次操作。
我们实际上可以进一步改进该解决方案,将第二步和第三步合并在一起(
`flatMap`
-为每个单词分配一个键-值对,其中键是小写单词,值是出现的次数),以及第五步和第六步(将 RDD 中的第一个元素按值排序,即该对中的第二个元素):
...
...
@@ -462,7 +462,7 @@ In: one_hot_encoding = {"M": (1, 0, 0), "F": (0, 1, 0),
"U"
:
(
0
,
0
,
1
)}
```
在我们的解决方案中,我们首先在映射函数内部广播 Python 字典(调用
`SparkContext`
提供的
`sc.broadcast`
方法); 使用其
`value`
属性,我们现在可以访问它。 完成此操作后,我们有了一个通用的
`map`
函数,该函数可以在任何一个热
门地
图字典上运行:
在我们的解决方案中,我们首先在映射函数内部广播 Python 字典(调用
`SparkContext`
提供的
`sc.broadcast`
方法); 使用其
`value`
属性,我们现在可以访问它。 完成此操作后,我们有了一个通用的
`map`
函数,该函数可以在任何一个热图字典上运行:
```
py
In
:
bcast_map
=
sc
.
broadcast
(
one_hot_encoding
)
...
...
new/py-ds-essentials/9.md
浏览文件 @
c3c51c5c
...
...
@@ -105,7 +105,7 @@ tuple(a_list)
# 字典
**词典**
是可以快速查找内容的表,因为每个键都与一个值相关联。 确实就像使用书的索引立即跳到您需要的内容。 键和值可以属于不同的数据类型。
密钥的唯一先决条件是它们应该是可散列的(这是一个相当复杂的概念;只需使密钥尽可能简单,因此,请勿尝试使用字典或列表作为密钥
)。 要创建字典,可以使用大括号,如下所示:
**词典**
是可以快速查找内容的表,因为每个键都与一个值相关联。 确实就像使用书的索引立即跳到您需要的内容。 键和值可以属于不同的数据类型。
键的唯一先决条件是它们应该是可散列的(这是一个相当复杂的概念;只需使键尽可能简单,因此,请勿尝试使用字典或列表作为键
)。 要创建字典,可以使用大括号,如下所示:
```
py
b_dict
=
{
1
:
1
,
'2'
:
'2'
,
3.0
:
3.0
}
...
...
new/thoughtful-ds/03.md
浏览文件 @
c3c51c5c
...
...
@@ -621,7 +621,7 @@ test.run()
[
您可以在此处找到代码文件
](
https://github.com/DTAIEB/Thoughtful-Data-Science/blob/master/chapter%203/sampleCode10.py
)
。
在前面的代码中,为简单起见,我将
密钥
硬编码为
`'prefix'`
,然后将其作为练习使用输入控件和
`$val()`
指令使其可用户定义。
在前面的代码中,为简单起见,我将
键
硬编码为
`'prefix'`
,然后将其作为练习使用输入控件和
`$val()`
指令使其可用户定义。
值得注意的另一件事是在显示图表的 DIV 中使用
`pd_render_onload`
属性。 此属性告诉 PixieApp 在将元素加载到浏览器 DOM 中后立即执行该元素定义的内核请求。
...
...
new/thoughtful-ds/07.md
浏览文件 @
c3c51c5c
...
...
@@ -70,7 +70,7 @@ Spark 高级架构
`Installed kernelspec python3 in /tmp/share/jupyter/kernels/python3`
3.
转到
`/tmp/share/jupyter/kernels/python3`
,然后编辑
`kernel.json`
文件,将以下
密钥
添加到 JSON 对象(将
`<<spark_root_path>>`
替换为安装 Spark 的目录路径,将
`<<py4j_version>>`
替换为系统上安装的版本):
3.
转到
`/tmp/share/jupyter/kernels/python3`
,然后编辑
`kernel.json`
文件,将以下
键
添加到 JSON 对象(将
`<<spark_root_path>>`
替换为安装 Spark 的目录路径,将
`<<py4j_version>>`
替换为系统上安装的版本):
```py
"env": {
...
...
@@ -190,10 +190,10 @@ Twitter 情感架构版本 1
在使用任何 Twitter API 之前,建议先通过系统进行认证。
[
OAuth 2.0 协议
](
https://oauth.net
)
是最常用的认证机制之一,它使第三方应用能够访问网络上的服务。 您需要做的第一件事是获取 OAuth 协议用来验证您身份的一组密钥字符串:
*
**
使用者
密钥**
:唯一标识客户端应用的字符串(也称为 API 密钥)。
*
**
用户
密钥**
:唯一标识客户端应用的字符串(也称为 API 密钥)。
*
**使用者密码**
:仅应用和 Twitter OAuth 服务器知道的密码字符串。 可以认为它就像一个密码。
*
**访问令牌**
:使用字符串来验证您的请求。 在授权阶段还可以使用此令牌来确定应用的访问级别。
*
**访问令牌密钥**
:类似于
使用者
密钥,这是与访问令牌一起发送的秘密字符串,用作密码。
*
**访问令牌密钥**
:类似于
用户
密钥,这是与访问令牌一起发送的秘密字符串,用作密码。
要生成上述密钥字符串,您需要转到
[
这个页面
](
http://apps.twitter.com
)
,使用常规的 Twitter 用户 ID 和密码进行认证,然后按照以下步骤操作:
...
...
new/thoughtful-ds/08.md
浏览文件 @
c3c51c5c
...
...
@@ -231,7 +231,7 @@ statsmodels.tsa.tests.test_stattools.TestACF_FFT
![
Operations on ndarray
](
img/00167.jpeg
)
二维
阵列
中的轴
二维
数组
中的轴
接下来我们将讨论的大多数归约函数都将轴作为参数。 它们分为以下几类:
...
...
@@ -257,7 +257,7 @@ statsmodels.tsa.tests.test_stattools.TestACF_FFT
*
**统计函数**
:
*
订单
统计:`np.amin`,`np.amax`,`np.percentile`等,
*
顺序
统计:`np.amin`,`np.amax`,`np.percentile`等,
* 平均值和方差:`np.median`,`np.var`,`np.std`等
* 相关:`np.corrcoef`,`np.correlate`,`np.cov`等
* 直方图:`np.histogram`,`np.bincount`,依此类推
...
...
@@ -372,7 +372,7 @@ print( sample[sample > 5] )
## 广播
广播是 NumPy 的非常方便的功能。 它使您可以对具有不同形状的
`ndarray`
执行算术运算。
**广播**
一词来自,事实是较小的
阵列会自动复制以适合较大的阵列
,因此它们具有兼容的形状。 但是,有一组规则可以控制广播的工作方式。
广播是 NumPy 的非常方便的功能。 它使您可以对具有不同形状的
`ndarray`
执行算术运算。
**广播**
一词来自,事实是较小的
数组会自动复制以适合较大的数组
,因此它们具有兼容的形状。 但是,有一组规则可以控制广播的工作方式。
### 注意
...
...
@@ -1754,7 +1754,7 @@ def show_pacf_screen(self):
应用差异的第一个预测屏幕
下一步是实现由
**继续预测**
按钮调用的
`do_forecast`
路由。 这条路线负责建立 ARIMA 模型; 首先显示一个配置页面,其中包含三个输入文本,这些文本可让用户输入
`p`
,
`d`
和
`q`
订单
,通过查看数据浏览屏幕中的图表。 我们添加一个
`Go`
按钮以使用
`build_arima_model`
路线进行模型构建,我们将在本节稍后讨论。 标头上还有一个
`Diagnose Model`
按钮,该按钮调用另一个负责评估模型准确性的页面。
下一步是实现由
**继续预测**
按钮调用的
`do_forecast`
路由。 这条路线负责建立 ARIMA 模型; 首先显示一个配置页面,其中包含三个输入文本,这些文本可让用户输入
`p`
,
`d`
和
`q`
阶数
,通过查看数据浏览屏幕中的图表。 我们添加一个
`Go`
按钮以使用
`build_arima_model`
路线进行模型构建,我们将在本节稍后讨论。 标头上还有一个
`Diagnose Model`
按钮,该按钮调用另一个负责评估模型准确性的页面。
此处显示了
`do_forecast`
路由的实现。 请注意,当用户选择其他股票行情自动收录器时,我们将
`add_ticker_selection_markup`
与空数组一起使用以刷新整个页面:
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录