diff --git a/docs/10.md b/docs/10.md index a77cbf0ea374c1674d702cca2fcf8adedf7e608c..9d3b99e28419c6dc0c121d1e5ede3b0add61753b 100644 --- a/docs/10.md +++ b/docs/10.md @@ -145,6 +145,7 @@ dtype: int64 注意,任何分组关键词中的缺失值,都会被从结果中除去。 ## 对分组进行迭代 + `GroupBy`对象支持迭代,可以产生一组二元元组(由分组名和数据块组成)。看下面的例子: ```python @@ -235,6 +236,7 @@ object ``` ## 选取一列或列的子集 + 对于由`DataFrame`产生的`GroupBy`对象,如果用一个(单个字符串)或一组(字符串数组)列名对其进行索引,就能实现选取部分列进行聚合的目的。也就是说: ```python @@ -281,6 +283,7 @@ Name: data2, dtype: float64 ``` ## 通过字典或`Series`进行分组 + 除数组以外,分组信息还可以其他形式存在。来看另一个示例`DataFrame`: ```python @@ -348,6 +351,7 @@ Travis 2 3 ``` ## 通过函数进行分组 + 比起使用字典或`Series`,使用 Python 函数是一种更原生的方法定义分组映射。任何被当做分组键的函数都会在各个索引值上被调用一次,其返回值就会被用作分组名称。具体点说,以上一小节的示例`DataFrame`为例,其索引值为人的名字。你可以计算一个字符串长度的数组,更简单的方法是传入`len`函数: ```python @@ -374,6 +378,7 @@ Out[46]: ``` ## 根据索引级别分组 + 层次化索引数据集最方便的地方就在于它能够根据轴索引的一个级别进行聚合: ```python diff --git a/docs/6.md b/docs/6.md index 319e762c9443fe9360b09b58405bc0b5f9149510..fae34118fe7e8b085cb31863fe0a6ef594221d7b 100644 --- a/docs/6.md +++ b/docs/6.md @@ -5,6 +5,7 @@ 输入输出通常可以划分为几个大类:读取文本文件和其他更高效的磁盘存储格式,加载数据库中的数据,利用 Web API 操作网络资源。 # 6.1 读写文本格式的数据 + pandas 提供了一些用于将表格型数据读取为`DataFrame`对象的函数。表 6-1 对它们进行了总结,其中`read_csv`和`read_table`可能会是你今后用得最多的。 ![表 6-1 pandas 中的解析函数](img/7178691-958f849e6067b19b.png) @@ -236,6 +237,7 @@ something a b c d message ![](img/7178691-597327ade3e94c7a.png) ## 逐块读取文本文件 + 在处理很大的文件时,或找出大文件中的参数集以便于后续处理时,你可能只想读取文件的一小部分或逐块对文件进行迭代。 在看大文件之前,我们先设置 pandas 显示地更紧些: @@ -322,6 +324,7 @@ dtype: float64 `TextParser`还有一个`get_chunk`方法,它使你可以读取任意大小的块。 ## 将数据写出到文本格式 + 数据也可以被输出为分隔符格式的文本。我们再来看看之前读过的一个 CSV 文件: ```python @@ -408,6 +411,7 @@ In [53]: !cat examples/tseries.csv ``` ## 处理分隔符格式 + 大部分存储在磁盘上的表格型数据都能用`pandas.read_table`进行加载。然而,有时还是需要做一些手工处理。由于接收到含有畸形行的文件而使`read_table`出毛病的情况并不少见。为了说明这些基本工具,看看下面这个简单的 CSV 文件: ```python @@ -493,6 +497,7 @@ with open('mydata.csv', 'w') as f: ``` ## JSON 数据 + JSON(JavaScript Object Notation 的简称)已经成为通过 HTTP 请求在 Web 浏览器和其他应用程序之间发送数据的标准格式之一。它是一种比表格型文本格式(如 CSV)灵活得多的数据格式。下面是一个例子: ```python @@ -636,6 +641,7 @@ Name: Closing Date, Length: 15, dtype: int64 ``` ## 利用`lxml.objectify`解析 XML + XML(Extensible Markup Language)是另一种常见的支持分层、嵌套数据以及元数据的结构化数据格式。本书所使用的这些文件实际上来自于一个很大的 XML 文档。 前面,我介绍了`pandas.read_html`函数,它可以使用`lxml`或 Beautiful Soup 从 HTML 解析数据。XML 和 HTML 的结构很相似,但 XML 更为通用。这里,我会用一个例子演示如何利用`lxml`从 XML 格式解析数据。 @@ -901,6 +907,7 @@ In [111]: frame.to_excel('examples/ex2.xlsx') ``` # 6.3 Web APIs 交互 + 许多网站都有一些通过 JSON 或其他格式提供数据的公共 API。通过 Python 访问这些 API 的办法有不少。一个简单易用的办法(推荐)是[`requests`包](http://docs.python-requests.org)。 为了搜索最新的 30 个 GitHub 上的 pandas 主题,我们可以发一个 HTTP GET 请求,使用`requests`扩展库: diff --git a/docs/9.md b/docs/9.md index 8f617b34998ee57bb35b932b07806ba18bebd834..7dfb1a6797ad096d0d55de5fb148b6ab3d71ac70 100644 --- a/docs/9.md +++ b/docs/9.md @@ -653,6 +653,7 @@ In [107]: sns.pairplot(trans_data, diag_kind='kde', plot_kws={'alpha': 0.2}) ## 分面网格(facet grid)和类型数据 + 要是数据集有额外的分组维度呢?有多个分类变量的数据可视化的一种方法是使用小面网格。seaborn 有一个有用的内置函数`factorplot`,可以简化制作多种分面图(见图 9-26): ```python @@ -684,6 +685,7 @@ In [110]: sns.factorplot(x='tip_pct', y='day', kind='box', 使用更通用的`seaborn.FacetGrid`类,你可以创建自己的分面网格。请查阅 [seaborn 的文档](https://seaborn.pydata.org/)。 # 9.3 其它的 Python 可视化工具 + 与其它开源库类似,Python 创建图形的方式非常多(根本罗列不完)。自从 2010 年,许多开发工作都集中在创建交互式图形以便在 Web 上发布。利用工具如 [Boken](https://bokeh.pydata.org/en/latest/) 和 [Plotly](https://github.com/plotly/plotly.py),现在可以创建动态交互图形,用于网页浏览器。 对于创建用于打印或网页的静态图形,我建议默认使用 matplotlib 和附加的库,比如 pandas 和 seaborn。对于其它数据可视化要求,学习其它的可用工具可能是有用的。我鼓励你探索绘图的生态系统,因为它将持续发展。 diff --git a/docs/b.md b/docs/b.md index 9effb6789e43a3cc6e5ab7c1958cf13c9b641f1b..ee077b9224e0a907332e0c2385376a123b5ae6e9 100644 --- a/docs/b.md +++ b/docs/b.md @@ -80,6 +80,7 @@ IPython 的另一个功能是无缝连接文件系统和操作系统。这意味 ![表 B-1 IPython 系统相关命令](img/7178691-4da7ee14be2da211.png) ## Shell 命令和别名 + 用叹号开始一行,是告诉 IPython 执行叹号后面的所有内容。这意味着你可以删除文件(取决于操作系统,用`rm`或`del`)、改变目录或执行任何其他命令。 通过给变量加上叹号,你可以在一个变量中存储命令的控制台输出。例如,在我联网的基于 Linux 的主机上,我可以获得 IP 地址为 Python 变量: @@ -778,6 +779,7 @@ $ mv ~/.jupyter/jupyter_notebook_config.py ~/.jupyter/my_custom_config.py ``` # B.6 总结 + 学习过本书中的代码案例,你的 Python 技能得到了一定的提升,我建议你持续学习 IPython 和 Jupyter。因为这两个项目的设计初衷就是提高生产率的,你可能还会发现一些工具,可以让你更便捷地使用 Python 和计算库。 你可以在 [nbviewer](https://nbviewer.jupyter.org/) 上找到更多有趣的 Jupyter 笔记本。