提交 28086e4d 编写于 作者: W wizardforcel

2020-07-18 22:29:57

上级 8687f950
......@@ -90,7 +90,7 @@ IBM 应对大数据的 4V
* 综合库
* 相对于其他语言的可扩展性
* 面向对象
* 大多数主要的编程范例都是过程式的,面向对象的,在较小程度上是功能性的。
* 大多数主要的编程范例都是过程式的,面向对象的,在较小程度上是函数式的。
### 注意
......@@ -101,7 +101,7 @@ IBM 应对大数据的 4V
* **NumPy** :强调数值计算的通用数组功能
* **SciPy** :数值计算
* **Matplotlib** :图形
* **Pandas**列和数据帧(一维和二维数组状类型)
* **Pandas**列和数据帧(一维和二维数组状类型)
* **Scikit-Learn** :机器学习
* **NLTK** :自然语言处理
* **Statstool** :统计分析
......
......@@ -26,7 +26,7 @@ R 具有五种原始或原子类型:
它还具有以下更复杂的容器类型:
* **向量**:类似于`numpy.array`。 它只能包含相同类型的对象。
* **列表**:这是一个异构容器。 相当于 Pandas 的列。
* **列表**:这是一个异构容器。 相当于 Pandas 的列。
* **数据帧** :这是一个异构 2D 容器,等效于 Pandas 数据帧
* **矩阵**:-它是向量的均质 2D 版本。 它类似于`numpy.matrix`
......@@ -65,7 +65,7 @@ R 列表可以显式创建为列表声明,如下所示:
```
以下是其在 Pandas 中的系列,包括创建列表和从中创建系列:
以下是其在 Pandas 中的序列,包括创建列表和从中创建序列:
```py
In [8]: h_list=[23, 'donkey', 5.6,1+4j, True]
......@@ -248,7 +248,7 @@ $mth
```
Pandas 的列创建和选择如下:
Pandas 的列创建和选择如下:
```py
In [92]: cal_df= pd.Series({'weekdays':range(1,8), 'mth':'jan'})
......@@ -269,7 +269,7 @@ dtype: object
```
在这里,从`[]``[[]]`运算符的角度来看,我们看到 R 列表和 Pandas 列之间的差异。 我们可以通过考虑第二项(字符串)来看到差异。
在这里,从`[]``[[]]`运算符的角度来看,我们看到 R 列表和 Pandas 列之间的差异。 我们可以通过考虑第二项(字符串)来看到差异。
对于 R,`[]`运算符产生一个容器类型,即包含字符串的列表,而`[[]]`产生一个原子类型:在这种情况下,一个字符如下:
......@@ -281,7 +281,7 @@ dtype: object
```
对于 Pandas,情况恰恰相反:`[]`产生原子类型,而`[[]]`产生复杂类型,即一系列序列,如下所示:
对于 Pandas,情况恰恰相反:`[]`产生原子类型,而`[[]]`产生复杂类型,即序列的序列,如下所示:
```py
In [99]: type(cal_df[0])
......
......@@ -882,7 +882,7 @@ Upon submitting our data to Kaggle, the following results were obtained:
最终结果是用于对测试数据集进行预测的规则集。
决策树在模仿人类如何对事物进行分类的过程中对一系列二进制选择进行编码,但是通过使用信息标准来决定哪个问题在每个步骤中最有用。
决策树在模仿人类如何对事物进行分类的过程中对一二进制选择进行编码,但是通过使用信息标准来决定哪个问题在每个步骤中最有用。
例如,您是否希望确定动物`x`是哺乳动物,鱼类还是爬行动物; 在这种情况下,我们会问以下问题:
......
......@@ -981,7 +981,7 @@ Out[466]:0 0.543405
```
以下示例使用指定的月份名称索引创建一年中前 5 个月的列结构:
以下示例使用指定的月份名称索引创建一年中前 5 个月的列结构:
```py
In [481]: import calendar as cal
......@@ -1021,7 +1021,7 @@ Out[486]: China yuan
```
Pandas 列结构的索引类型为`pandas.core.index.Index`,可以将其视为有序多集。
Pandas 列结构的索引类型为`pandas.core.index.Index`,可以将其视为有序多集。
在以下情况下,我们指定一个索引,但是该索引包含一个条目,该条目不是相应的`dict`中的键。 结果是将密钥的值分配为`NaN`,表明它丢失了。 我们将在后面的部分中处理缺失值。
......@@ -1048,7 +1048,7 @@ Out[488]: GOOG 1180.97
#### 使用标量值
对于标量数据,必须提供索引。 将为尽可能多的索引值重复该值。 此方法的一种可能用途是提供一种快速而肮脏的初始化方法,并在以后填充序列结构。 让我们看看如何使用标量值创建列:
对于标量数据,必须提供索引。 将为尽可能多的索引值重复该值。 此方法的一种可能用途是提供一种快速而肮脏的初始化方法,并在以后填充序列结构。 让我们看看如何使用标量值创建列:
```py
In [491]: dogSeries=pd.Series('chihuahua',
......@@ -1074,7 +1074,7 @@ Out[495]: str
```
### 列操作
### 列操作
序列的行为与上一节中讨论的`numpy`数组的行为非常相似,其中一个警告是切片等操作也会对索引进行切片。
......@@ -1219,7 +1219,7 @@ Out[516]: 0 NaN
* 类似于 NumPy `ndarray`,但不是`np.ndarray`的子类。
* 列可以是异构类型:`float64``int``bool`等。
* 数据帧的列是序列结构。
* 可以将其视为列结构的字典,在该结构中,对列和行均进行索引,对于行,则表示为“索引”,对于列,则表示为“列”。
* 可以将其视为列结构的字典,在该结构中,对列和行均进行索引,对于行,则表示为“索引”,对于列,则表示为“列”。
* 它的大小可变:可以插入和删除列。
序列/数据帧中的每个轴都有索引,无论是否默认。 需要索引才能快速查找以及正确对齐和连接 Pandas 中的数据。 轴也可以命名,例如以月的形式表示列的数组 Jan Feb Mar ...Dec。这是索引数据帧的表示形式,其命名列的两端以及字符 V,W, X,Y,Z:
......@@ -1242,7 +1242,7 @@ Out[516]: 0 NaN
* 一维`ndarray`,列表,字典或序列结构的字典
* 2D NumPy 数组
* 结构化或记录`ndarray`
* 列结构
* 列结构
* 另一个数据帧结构
行标签索引和列标签可以与数据一起指定。 如果未指定,则将以直观的方式从输入数据生成它们,例如,从`dict.`的键(对于列标签)或通过在行标签的情况下使用`np.range(n)`生成, 其中`n`对应于行数。
......@@ -1424,7 +1424,7 @@ Out[540]: currency
* `DataFrame.from_dict`:它使用字典或序列的字典并返回数据帧。
* `DataFrame.from_records`:需要一个元组或结构化`ndarray`的列表。
* `DataFrame.from_items`:需要一系列(键,值)对。 键是列或索引名,值是列或行值。 如果希望键为行索引名,则必须指定`orient ='index'`作为参数并指定列名。
* `DataFrame.from_items`:需要一(键,值)对。 键是列或索引名,值是列或行值。 如果希望键为行索引名,则必须指定`orient ='index'`作为参数并指定列名。
* `pandas.io.parsers.read_csv`:这是一个辅助功能,可将 CSV 文件读取到 Pandas 数据帧结构中。
* `pandas.io.parsers.read_table`:这是一个辅助函数,它将定界文件读入 Pandas 数据帧结构。
* `pandas.io.parsers.read_fwf`:这是一个辅助函数,它将固定宽度的线表读入 Pandas 数据帧结构。
......@@ -1686,4 +1686,4 @@ Out[622]: <class 'pandas.core.panel.Panel'>
总结本章,`numpy.ndarray`是 Pandas 数据结构所基于的基岩数据结构。 Pandas 的数据结构由 NumPy `ndarray`数据和一个或多个标签数组组成。
Pandas 中有三种主要的数据结构:系列,数据帧架和面板。 与 Numpy `ndarrays`相比,pandas 数据结构更易于使用且更加用户友好,因为在数据帧和面板的情况下,它们提供行索引和列索引。数据帧对象是 Pandas 中最流行和使用最广泛的对象。 在下一章中,我们将讨论 Pandas 索引的主题。
\ No newline at end of file
Pandas 中有三种主要的数据结构:序列,数据帧架和面板。 与 Numpy `ndarrays`相比,pandas 数据结构更易于使用且更加用户友好,因为在数据帧和面板的情况下,它们提供行索引和列索引。数据帧对象是 Pandas 中最流行和使用最广泛的对象。 在下一章中,我们将讨论 Pandas 索引的主题。
\ No newline at end of file
......@@ -87,7 +87,7 @@ In [755]:SpotCrudePrices_2013['2013-Q1']
```
这是创作者为避免歧义而做出的设计决定。 对于列,没有歧义,可以使用`[]`运算符选择行:
这是创作者为避免歧义而做出的设计决定。 对于列,没有歧义,可以使用`[]`运算符选择行:
```py
In [756]: dubaiPrices['2013-Q1']
......@@ -235,7 +235,7 @@ Out[677]: Dubai UK_Brent West_Texas_Intermediate
```
对于列,其行为也很直观:
对于列,其行为也很直观:
```py
In [666]: dubaiPrices=SpotCrudePrices_2013['Dubai']
......@@ -411,7 +411,7 @@ Out[750]: 1.7
```
再次注意,但是,首先使用`.loc`运算符指定行索引值将得到`Keyerror`。 这是前面讨论的事实的结果,即`[]`运算符不能用于直接选择行。 必须首先选择列以获得列,然后可以按行选择。 因此,如果使用以下任一方法,则将获得`KeyError: u'no item named March'`
再次注意,但是,首先使用`.loc`运算符指定行索引值将得到`Keyerror`。 这是前面讨论的事实的结果,即`[]`运算符不能用于直接选择行。 必须首先选择列以获得列,然后可以按行选择。 因此,如果使用以下任一方法,则将获得`KeyError: u'no item named March'`
```py
In [757]: NYC_SnowAvgs['March']['Avg SnowDays']
......@@ -670,7 +670,7 @@ Out[930]: Nasdaq S&P 500 Russell 2000
```
请注意,使用单个标签与使用仅包含单个标签的列表之间的输出差异。 前者产生一系列,而后者产生一个数据帧:
请注意,使用单个标签与使用仅包含单个标签的列表之间的输出差异。 前者产生列,而后者产生一个数据帧:
```py
In [943]: type(stockIndexDF.ix['2014/01/30'])
Out[943]: pandas.core.series.Series
......@@ -1037,7 +1037,7 @@ Out[316]: TradingDate PriceType Nasdaq S&P 500 Russell 2000
## `isin`和所有方法
与前几节中使用的标准运算符相比,这些方法使用户可以通过布尔索引实现更多功能。 `isin`方法获取值列表,并在序列或数据帧中与列表中的值匹配的位置返回带有`True`的布尔数组。 这使用户可以检查列中是否存在一个或多个元素。 这是使用序列的插图:
与前几节中使用的标准运算符相比,这些方法使用户可以通过布尔索引实现更多功能。 `isin`方法获取值列表,并在序列或数据帧中与列表中的值匹配的位置返回带有`True`的布尔数组。 这使用户可以检查列中是否存在一个或多个元素。 这是使用序列的插图:
```py
In [317]:stockSeries=pd.Series(['NFLX','AMZN','GOOG','FB','TWTR'])
......@@ -1051,7 +1051,7 @@ Out[317]:0 False
```
在这里,我们使用布尔数组选择一个包含我们感兴趣的值的子列:
在这里,我们使用布尔数组选择一个包含我们感兴趣的值的子列:
```py
In [318]: stockSeries[stockSeries.isin(['AMZN','FB'])]
......
......@@ -18,7 +18,7 @@
* 分析数据
* 聚合或合并数据
`groupby`子句是对数据帧的操作。 系列是一维对象,因此对其执行`groupby`操作不是很有用。 但是,它可用于获取系列的不同行。 `groupby`操作的结果不是数据帧,而是数据帧对象的`dict`。 让我们从涉及世界上最受欢迎的运动-足球的数据集开始。
`groupby`子句是对数据帧的操作。 序列是一维对象,因此对其执行`groupby`操作不是很有用。 但是,它可用于获取序列的不同行。 `groupby`操作的结果不是数据帧,而是数据帧对象的`dict`。 让我们从涉及世界上最受欢迎的运动-足球的数据集开始。
该数据集来自维基百科,其中包含自 1955 年成立以来欧洲俱乐部冠军杯决赛的数据。有关参考,您可以访问[这里](http://en.wikipedia.org/wiki/UEFA_Champions_League)
......@@ -371,9 +371,9 @@ Out[175]: EPL 2.797368
```
如上一条命令所示,它作为列返回。 现在,我们可以显示每场比赛的进球数,进球数和比赛数,以概述联盟的兴奋程度,如下所示:
如上一条命令所示,它作为列返回。 现在,我们可以显示每场比赛的进球数,进球数和比赛数,以概述联盟的兴奋程度,如下所示:
1. 获得每个游戏数据的目标作为数据帧。 请注意,由于`gpg`作为列返回,因此我们必须对其进行转置:
1. 获得每个游戏数据的目标作为数据帧。 请注意,由于`gpg`作为列返回,因此我们必须对其进行转置:
```py
In [234]: gpg=totalsDF.ix['GoalsScored']/totalsDF.ix['MatchesPlayed']
......@@ -442,7 +442,7 @@ Out[274]: EPL La Liga Serie A Bundesliga
请注意,上述显示 NA 值的输出已从聚合计算中排除。 `agg`是聚合的缩写形式。 因此,英超联赛,意甲联赛和德甲联赛的均值的计算是基于 10 个月而不是 11 个月的。这是因为在 6 月的最后一个月,这三个联赛中没有进行过比赛,这与西甲相反, 六月有比赛。
对于成组的列赛,我们返回到`nationsGrp`示例,并计算锦标赛获胜者所在国家/地区的出勤率统计数据:
对于成组的列赛,我们返回到`nationsGrp`示例,并计算锦标赛获胜者所在国家/地区的出勤率统计数据:
```py
In [297]: nationsGrp['Attendance'].agg({'Total':np.sum, 'Average':np.mean, 'Deviation':np.std})
......@@ -461,7 +461,7 @@ Out[297]: Deviation Average Total
```
对于分组的列,我们可以传递函数列表或`dict`。 在前面的情况下,指定了`dict`,并且将键值用作结果数据帧中列的名称。 请注意,在单个样本大小的组的情况下,标准差未定义,结果为`NaN`,例如,罗马尼亚。
对于分组的列,我们可以传递函数列表或`dict`。 在前面的情况下,指定了`dict`,并且将键值用作结果数据帧中列的名称。 请注意,在单个样本大小的组的情况下,标准差未定义,结果为`NaN`,例如,罗马尼亚。
### `transform()`方法
......@@ -766,7 +766,7 @@ Out[151]:
## 将一行附加到数据帧
我们可以通过将一系列或字典传递给`append`方法来将单个行附加到数据帧:
我们可以通过将列或字典传递给`append`方法来将单个行附加到数据帧:
```py
In [152]:
algos={'search':['DFS','BFS','Binary Search','Linear'],
......@@ -1059,7 +1059,7 @@ Out[427]: group ctrl trt1 trt2
```
`pivot``pivot_table`函数之间的主要区别在于`pivot_table`允许用户指定一个聚合功能,可以在该功能上聚合值。 因此,例如,如果我们希望获得 10 个观测值中每个组的平均值,我们将执行以下操作,这将得出一个列:
`pivot``pivot_table`函数之间的主要区别在于`pivot_table`允许用户指定一个聚合功能,可以在该功能上聚合值。 因此,例如,如果我们希望获得 10 个观测值中每个组的平均值,我们将执行以下操作,这将得出一个列:
```py
In [430]: pd.pivot_table(plantGrowthRawDF,values='weight',cols=['group'],aggfunc=np.mean)
......
......@@ -213,7 +213,7 @@ Out[16]: nan
```
但是,如果此数据在 pandas 列中,则将获得以下输出:
但是,如果此数据在 pandas 列中,则将获得以下输出:
```py
In [17]: pd.Series([1.0,np.NaN,5.9,6]).sum()
......@@ -352,7 +352,7 @@ Out[7]: TradeDate closingPrice
可以在[这个链接](http://datamarket.com)中找到此信息的来源。
我们希望`TradeDate`列是一系列`datetime`值,以便我们可以为其编制索引并创建时间序列。 让我们首先检查`TradeDate`列中值的类型:
我们希望`TradeDate`列是`datetime`值的序列,以便我们可以为其编制索引并创建时间序列。 让我们首先检查`TradeDate`列中值的类型:
```py
In [16]: type(ibmData['TradeDate'])
......@@ -946,7 +946,7 @@ In [95]: plotDF.columns=['f(x)','g(x)']
![Plotting using matplotlib](img/images_00008.jpeg)
我们还可以使用以下命令在不同的子图中分别绘制两个列(函数):
我们还可以使用以下命令在不同的子图中分别绘制两个列(函数):
```py
In [96]: plotDF.plot(subplots=True, figsize=(6,6))
......
......@@ -528,7 +528,7 @@ Out[57]: 0 Auto(AM7)
```
现在,我们希望修改前面的列,以使这些值仅包含`Auto``Manual`字符串。 我们可以这样做,如下所示:
现在,我们希望修改前面的列,以使这些值仅包含`Auto``Manual`字符串。 我们可以这样做,如下所示:
```py
In [58]: transTypeSeries = transType.str.split('(').str.get(0)
......@@ -542,7 +542,7 @@ Out[58]: 0 Auto
```
现在,我们从列中创建一个最终的修改后的数据帧,该数据帧由变速箱类型和组合的燃油经济性数字组成:
现在,我们从列中创建一个最终的修改后的数据帧,该数据帧由变速箱类型和组合的燃油经济性数字组成:
```py
In [61]: feData=pd.DataFrame([transTypeSeries,feRawData['CombinedFuelEcon']]).T
......@@ -604,7 +604,7 @@ Out[86]: (array(-6.949372262516113), 1.9954143680382091e-11)
在本节中,我们将讨论置信区间的问题。 置信区间使我们能够对总体给定样本数据的平均值进行概率估计。
此估计称为间隔估计,由一系列值(间隔)组成,这些值充当未知总体参数的良好估计。
此估计称为间隔估计,由一值(间隔)组成,这些值充当未知总体参数的良好估计。
置信区间受置信限度限制。 95% 置信区间定义为一个区间,其中该区间包含概率为 95% 的总体平均值。 那么,我们如何构建置信区间?
......
......@@ -626,7 +626,7 @@ Tuesday, September 30, 2014 | 2:22am EDT
```
因此,我们看到一个日期时间列,代表作者在 FB 上发布的日期和时间。 首先,我们将文件读入数据帧,将时间戳分为“日期”和“时间”列:
因此,我们看到一个日期时间列,代表作者在 FB 上发布的日期和时间。 首先,我们将文件读入数据帧,将时间戳分为“日期”和“时间”列:
```py
In [91]: filePath="./data/fb_post_dates.txt"
......
......@@ -51,11 +51,11 @@
* `groupby.py`:这定义了启用`groupby`函数的各种类。 讨论如下:
* `Splitter classes`:这包括`DataSplitter``ArraySplitter``SeriesSplitter``FrameSplitter``NDFrameSplitter`
* `Grouper/Grouping classes`:这包括`Grouper``GroupBy``BaseGrouper``BinGrouper``Grouping``SeriesGroupBy``NDFrameGroupBy`
* `ops.py`: 这定义了一个内部 API,用于对 Pandas 对象进行算术运算。 它定义了向对象添加算术方法的函数。 它定义了一个`_create_methods`元方法,该方法用于使用算术,比较和布尔方法构造函数创建其他方法。 `add_methods`方法采用一系列新方法,将它们添加到现有方法列表中,并将其绑定到其相应的类。 `add_special_arithmetic_methods``add_flex_arithmetic_methods`方法调用`_create_methods``add_methods`将算术方法添加到类中。
* `ops.py`: 这定义了一个内部 API,用于对 Pandas 对象进行算术运算。 它定义了向对象添加算术方法的函数。 它定义了一个`_create_methods`元方法,该方法用于使用算术,比较和布尔方法构造函数创建其他方法。 `add_methods`方法采用一新方法,将它们添加到现有方法列表中,并将其绑定到其相应的类。 `add_special_arithmetic_methods``add_flex_arithmetic_methods`方法调用`_create_methods``add_methods`将算术方法添加到类中。
它还定义了`_TimeOp`类,该类是与日期时间相关的算术运算的包装。 它包含`Wrapper`函数,用于对序列,数据帧和面板函数进行算术,比较和布尔运算-`_arith_method_SERIES(..)`,`_comp_method_SERIES(..)`,`_bool_method_SERIES(..)`,`_flex_method_SERIES(..)`,`_arith_method_FRAME(..)`,`_comp_method_FRAME(..)`,`_flex_comp_method_FRAME(..)`) `_arith_method_PANEL(..)`,`_comp_method_PANEL(..)`。
* `index.py`:这定义了`Index`类及其相关功能。 所有 Pandas 的对象(列,数据帧和面板)都使用索引来存储轴标签。 它的下面是一个不可变的数组,提供了可以切片的有序集合。
* `index.py`:这定义了`Index`类及其相关功能。 所有 Pandas 的对象(列,数据帧和面板)都使用索引来存储轴标签。 它的下面是一个不可变的数组,提供了可以切片的有序集合。
* `internals.py`:这定义了多个对象类。 这些列出如下:
* `Block`:这是具有 Pandas 其他功能的同质 N 维`numpy.ndarray`对象。 例如,它使用`__slots__`将对象的属性限制为`ndim``values``_mgr_locs`。 它充当其他`Block`子类的基类。
* `NumericBlock`:这是数字类型的`Blocks`的基类。
......@@ -293,7 +293,7 @@
* `Easter`:这是复活节假期的`DateOffset`
* `Tick`:这是时间单位类的基本类,例如`Day``Hour``Minute``Second``Milli``Micro``Nano`
* `period.py`:这为 Pandas`TimeSeries`定义了`Period``PeriodIndex`类。
* `plotting.py`:这定义了各种绘图功能,例如`tsplot(..)`,它绘制了一个列。
* `plotting.py`:这定义了各种绘图功能,例如`tsplot(..)`,它绘制了一个列。
* `resample.py`:这定义了`TimeGrouper`,这是用于时间间隔分组的自定义`groupby`类。
* `timedeltas.py`:这定义了`to_timedelta(..)`方法,该方法将其参数转换为`timedelta`对象。
* `tools.py`:这定义了实用程序功能,例如`to_datetime(..)``parse_time_string(..)``dateutil_parse(..)``format(..)`
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册